Pull to refresh

Прикручиваем SageTex к LyX под Windows

Reading time3 min
Views2.5K

Прелюдия


Недавно, просматривая блог LaTeX, наткнулся на занимательную статейку Математические вычисления и графики в LyX с использованием Sage. В голове тут же возникла мысль типа «Наконец-то появился повод сбросить оковы MS Office перестать пользоваться Word для того, для чего он не предназначен — не заниматься идиотским копипастом и пересохранением кучи графиков при малейших изменениях, ведь Sage все сделает за меня!». Тут же был установлен LyX, настала очередь Sage. Но… как оказалось, нативной версии Sage под Windows действительно не существует. Имеется лишь заброшенный полурабочий порт, который мне так и не удалось заставить работать, и ужасно сырая версия Sage под CygWin, которая, похоже, только и умеет, что запускаться.

Малость приуныв, решил попробовать вариант, предлагаемый на странице загрузки — использовать виртуальную машину.

Несмотря на уверения, что «The current VirtualBox Image provides you with an encapsulated and solid tested system and contains everything and needs nearly no configuration.», было совершеннейшим образом неясно, каким образом заставить LyX общаться с Sage, установленным где-то там, далеко, на виртуальной машине. Но выход есть™, и обнаружился, как ни странно, в документации к SageTex — использовать запущенный в виртуалке Sage через веб-API.

Рецепт блюда


Подготовка

Прежде всего, для LyX понадобится какой-то дистрибутив LaTeX. Не буду подробно на этом останавливаться, замечу лишь, что я использовал MikTeX. Как его установить и настроить, неплохо описано тут.

Теперь, разумеется, скачаем и установим LyX. Скачаем также образ виртуальной машины с Sage. Для работы с образом предлагается использовать VirtualBox либо бесплатный VMWare Player.

Скрипт, осуществляющий коммуникацию с Sage, написан на Python, который также необходимо скачать и установить.

Сам же скрипт можно загрузить, например, отсюда.

Действо

  1. Создадим где-то на винте папку, в которую сбросим все необходимое — образ Sage и remote-sagetex.py, а также добавим эту папку в переменную окружения PATH системы (именно там LyX будет искать скрипт)
  2. Обработка Sage-кода внутри LaTeX-документа проходит в три этапа — после первого прохода latex.exe из исходного .tex файла генерируется файл с расширением .sage. Этот файл скармливается Sage, который выдаст нам файл .sout, содержащий непосредственно результаты вычислений. При втором запуске latex.exe подхватит эти значения и вставит их в документ.
  3. К сожалению, LyX понятия не имеет о Sage. Что ж, научим его. Создадим всё в той же папке bat-файл. Назовем его ps2pdf_sage.bat и наделим его следующим содержимым:
    ::первый проход
    latex %~n1.tex
    ::обрабатываем файл .sage, полученный после первого прохода.
    ::приведены настройки сервера Sage Notebook по умолчанию
    remote-sagetex.py -s localhost:8000 -u admin -p sage %~n1.sage
    ::второй проход - заменяем в документе комманды Sage на результаты в LaTeX
    latex %~n1.tex
    ::генерируем PDF
    dvips %~n1.dvi
    ps2pdf %~n1.ps

  4. Теперь нам необходимо научить LyX использовать наш скрипт для генерации PDF. Для этого откроем LyX, перейдем в Инструменты→Настройки...→Обработка файлов→Конвертеры→ и добавим новый обработчик LaTex -> PDF(ps2pdf), примерно вот так

    image

    Почему ps2pdf, а не pdflatex? По неведомой мне причине, графики, полученные с помощью Sage, отказываются отображаться в результирующем PDF в каком-либо виде. Если кто знает, в чем проблема, буду благодарен за решение.
  5. Всё готово. Осталось только добавить \usepackage{sagetex} в преамбулу документа (MikTex при первой необходимости скачает этот пакет из репозитория).

Простенький пример: исходник и готовый PDF.

P.S. Топик был написан хабрапользователем ZimM и опубликован по его просьбе.
Tags:
Hubs:
+15
Comments12

Articles