7/29/2013

Перенос таблиц из MS Excel или OpenOffice Calc в LaTeX через Calc2LaTeX

Это небольшая заметка может пригодится помимо автора этих строк тем, кому нужно переносить или создавать сравнительно простые таблицы из Excel или Calc в LaTeX, потому как создание таблиц в LaTeX это занятие, часто причиняющее адские боли ниже поясницы.


Дизайним таблицы в Calc и переносим их в LaTeX через Calc2LaTeX

Собственно, Calc2LaTeX это расширение, которое транслирует код из Calc в LaTeX. А что там автор тогда заливал в заголовке про Microsoft Excel? Дык Calc-то уже давно открывает любые* таблицы Excel. Создатели LibreOffice гарантируют это :-)

Не будемте отвлекаться на мелочи - лучше о том, как всё это установить.

---
любые*  - Your Mileage May Vary, как говорят за океаном, но многие таблицы в самом деле хорошо поддерживаются OpenOffice Calc.

Установка Calc2LaTeX

Для установки идём на сайт и скачиваем плагин (или вот тут моё зеркало).
После этого запускаем Calc и идём в меню Tools -> Extension Manager, где нажимаем кнопку Add (Добавить). Добавляем плагин:


На этом установка не заканчивается - нам хочется какую-нибдь кнопку для этого макроса или пунктик в меню. Как нам сообщает "отменная" документация,
Some day, I will try to add this button to the extension.
Разумеется, этот знаменательный день, пламенно обещанный автором jarom аж в 2009 году, наступит тогда же, когда мир во всём мире, линукс на десктопе и всеобщая экономическая стабильность. Поэтому нам придётся попотеть и ускорить наступление оного счастья собственными мозолистыми руками:
Tools -> Customize -> Toolbars (или Menu, если мы хотим добавить Calc2latex в пункт меню)
Нажимаем кнопку "Add... ". Далее прокручиваем список "Category" до  "OpenOffice.org Macros" слева, и открываем:
My Macros -> Calc2LaTeX -> Calc2LaTeX
Выбираем интуитивно понятный пукт (команду) в правой части под названием "Main", и нажимаем кнопку  "Add".

 
Теперь кнопку на панели можно переместить или присобачить ей другую иконку (кнопкой Modify):



Так что у вас в Open/LibreOffice Calc должна появиться кнопка для Calc2LateX:



и сейчас мы её начнём неистово тыркать.

Конвертирование таблицы Excel или Calc в LaTeX

Всё готово для старта, и сейчас мы приступим: открываем или создаём таблицу в Calc, выделяем нужные ячейки и жмём кнопку Calc2Latex, которую создали на предыдущем этапе.


При этом появится диалоговое окно, которое даст выбрать нам немного параметров.

Результат Calc2LaTeX

Лучше, чем ждёшь от ёпенсорца, но хуже, чем надеешься получить.

Плюсы:
  • сохраняет базовое форматирование содержимого ячеек (полужирный, курсив)
  • можно задать метку и заголовок
  • можно включить или выключить линовку строк таблицы
  • экранирование LaTeX-символов типа & # и &
Собственно, это всё. Теперь

Минусы:
  • медленный. ОЧЕНЬ медленный плагин - 5 строк, 10 столбцов на Core i5-560M 2.66Ghz заняло 20 секунд.
  • нет сохранения цветовой раскраски.

Как и многий другой опенсорц, плагин, конечно, работает, только очень медленно и несколько коряво. Никакого цветового оформления можно не ждать, но полужирное и курсивное начертание будут переданы. Для того, чтобы сконвертировать первые пять (5!) столбцов, на Core i5-560M 2.66Ghz ушло 20 секунд.

Теперь сравнение того, что было в оригинале:

c тем, что выдал плагин:


то есть таблица, конечно, есть, но страшная, как смерть водолаза и потому требует дальнейшей работы.
Для самых любознательных: эта таблица может представлять интерес для тех, кто решает Online Box-constrained Convex Quadratic Programming - ограниченные конвексные оптимизационные задачи, причём очень быстро (online). Здесь перечислены алгоритмы и их основные характеристики, протестированные автором этих строк. Если кто может эту таблицу расширить - пишите в комментарии.

Эта же таблица в Google Docs:


8 комментариев:

  1. Это он, это он - моего сердца чемпион! Поздравляю с выходом из длительного запоя^Wтворческого отдыха, надеюсь, ты и дальше продолжишь радовать нас новыми баянами^Wпостами, пронизанными остроумными примечаниями. Постараюсь не отставать, и самому закинуть что-нибудь эдакое в свой блог.

    По теме поста: Calc2LaTeX что-то доверия не вселяет... совсем.

    ОтветитьУдалить
  2. @iv_vl комментирует...

    Это он, это он - моего сердца чемпион! Поздравляю с выходом из длительного запоя

    Вам бы всё хиханьки да хаханьки, Владимир Иваныч :-)
    У меня тут подача на грант + смена универа + переезд в другой город + переподача на визу. Мне, как бы это помягче сказать, не до блога.

    ты и дальше продолжишь радовать нас новыми баянами
    Бум надеяться. Черновиков не так много осталось, до Декабря баянов будет немного (по одной штуке в месяц).

    По теме поста: Calc2LaTeX что-то доверия не вселяет
    Почему? Вполне себе приличное решение. Ёпенсорц же!
    Плохо одно: медленное оно до ужаса, но работает. Я так таблицу конвертировал - порциями по 6 рядов. Пять минут страданий - и всё готово.

    Другие решения всегда рассматриваются. Емакс, интим и прочий брейнфак не предлагать :-)

    ОтветитьУдалить
  3. Ну и пусть медленно. Всё же лучше, чем ручками :)

    ОтветитьУдалить
  4. @Игорь А. Мориков комментирует...

    Ну и пусть медленно. Всё же лучше, чем ручками :)
    Дизайн сложных таблиц всё равно делается ручками, но данные набивать в Calc/Excel удобнее.

    Да, мне тут очень застенчивый Анонимус прислал на почту письмецо, в котором клянётся, что Gnumeric может сохранять таблицы в ЛаТеХ. И по ходу пьесы не врёт. :-)

    Гугель подсказал вот что:

    I’ve just been trying out the Excel2Latex add-in for converting tables from Excel (2010) into LaTeX.

    У меня Экселя 2010, по понятным причинам, нет - владельцы могут проверить?


    Ещё: на стэкэксчендж есть отличный пост в тему генерации таблиц. Не совсем по теме, но могёт пригодиться. Gnumeric там тоже упомянут.

    Набрёл ещё на один топик (что-то я поторопился с постом, как выясняется), и там советую datatool:

    You could also just export to csv and use the datatool package.

    Я много про него слышал, но не пользовал. Гуру datatool в комментариях есть?
    (/me напряжённо смотрит в сторону Amorua)

    Да, excel2latex не так прост, как кажется. Тут приводят инструкцию в картинках.

    ОтветитьУдалить
  5. Чем csvsimple не угодил? меньше движений руками - больше автоматизации

    ОтветитьУдалить
  6. @yanchick комментирует...

    Чем csvsimple не угодил?
    Тем, что это добавляет промежуточный шаг, чего бы очень не хотелось. Calc2latex это plug-and-play - воткнул таблицу в Calc и получил выхлоп в LaTeX.

    меньше движений руками - больше автоматизации
    Не спорю, но здесь не тот случай, чтобы автоматизировать. Хотя решение с CSV достойное.

    ОтветитьУдалить
  7. @virens
    You could also just export to csv and use the datatool package.
    Много слышал, ни разу не пользовался. У него документация на 400 страниц.

    Наилучшее решение, как по мне, это сохранить в csv, а потом воспользоваться pdfplotstable, вроде
    \pgfplotstabletypeset[col sep=comma]{файл.csv}

    ОтветитьУдалить
  8. Вот еще интересный вариант

    ОтветитьУдалить