LyX — это WYSIWYM процессор документов, который прозрачным образом работает с LaTeX. То есть пользователь создаёт в этом процессоре файлы *.lyx, из которых потом создаются и компилируются *.tex.
Sage — это система компьютерной алгебры, работающая прозрачным образом с другими математическими пакетами. Основной интерфейс — командная строка, при этом используется всё многообразие возможностей python. Также доступен web-интерфейс, который можно опробовать на сайте разработчиков.
Совместное использование этих двух разработок открывает интересные возможности. Например, можно создавать отчёты, в которых вычисления, графики и аналитические выкладки будут выполняться автоматически, почти как в маткаде каком-нибудь, но с наглядной структурой LyX, гибкостью python и возможностями вёрстки LaTeX.
Установка
LyX есть почти в любом современном дистрибутиве, так что устанавливается обычным образом. Он написан на Qt, есть порт под Windows. LyX потянет за собой LaTeX.
С Sage всё не так просто. Он сейчас есть только под linux, в дистрибутивах, если и представлен, то в не особо работоспособном виде. Запускать
под виндой разработчики советуют при помощи виртуальной машины.
Разработчики Sage предлагают
загрузить сборку под вашу архитектуру (386 или amd64) и дистрибутив (Ubuntu и Fedora, но, думаю, будет работать и в остальных). Сборка содержит в себе, кроме sage-модулей, python, maxima, gap и много чего ещё. Скачиваете архив, распаковываете в какую-нибудь папку и сразу можно запускать из неё sage или sage-notebook — сервер для веб-интерфейса. Также в неё входит стиль для LaTeX, который всегда можно
скачать отдельно.
Пусть всё это не особо совместимо с менеджерами пакетов, но достаточно удобно.
Буду предполагать, что вы распаковали архив в каталог /usr/local/sage
.
Подготовка
Теперь, когда установлены LyX и Sage, можно приступить к их объединению.
Для этого потребуется:
- Настроить LaTeX.
- Написать скрипт.
- Настроить LyX.
1. Настройка LaTeX
Стиль sagetex, о котором упомянуто выше, должен быть виден LaTeX'у. В мануале к стилю советуют положить его в папку ~/texmf/tex/genetic
. Под убунтой, видимо, нужно класть в ~/.local/share/texmf/tex/genetic
У меня заработало (пока без LyX) так:
$ sudo ln -s /usr/local/sage/local/share/texmf/tex/generic/sagetex/ /usr/local/share/texmf/tex/generic/sagetex/
и потом
$ sudo texhash /usr/local/share/texmf/tex/generic/sagetex/ # ну, или путь, куда вы только что положили стиль
Кстати, говоря, TexLive, который ставится по умолчанию в убунте, содержит стиль sagetex. Но есть проблема с версиями — sage и sagetex разных версий друг с другом не дружат, поэтому важно, чтобы LaTeX имел дело именно с новым sagetex.sty.
Узнать, какой файл возмёт LaTeX, если ему сказать
\usepackage{sagetex}
, можно так:
$ kpsewhich sagetex.sty
Этот стиль подразумевает следующую последовательность сборки документов, его использующих:
$ latex tex_with_sage.tex # генерируется файл с командами sage tex_with_sage.sage
$ sage tex_with_sage.sage # генерируется файл с ответами системы
# сборка индекса и прочие команды, которые вам нужны
$ latex tex_with_sage.tex # получаем результат
LyX, понятное дело, не умеет запускать sage. Но он умеет работать с noweb. Что это — сейчас даже и не важно, нам просто нужно, чтобы в системе был файл noweb.sty
. Можно установить пакет noweb, а можно просто создать этот файл.
2. Скрипт
Как только LyX начинает собирать итоговый файл (например pdf), он генерирует во временном каталоге файл *.tex и запускает обычные команды (pdflatex, makeindex и т.д). Потом он запускает во вьювере итоговый файл *.pdf или *.dvi или копирует этот файл в папку с исходным документом.
Если тип документа — noweb, то будет сгененирован файл *.nv (по сути тот же *.tex), для этого файла будет запущена специальная программа, которая создаёт *.tex, после чего в ход уже идут pdflatex, makeindex и иже с ними.
В качестве этой программы, мы подсунем LyX'у такой простенький скрипт:
#!/bin/bash
name=`basename $1 .nw`
# uncomment and replace path if you have problems with
# old version of sagetex.sty in texlive
# ln -sf /usr/local/share/texmf/tex/generic/sagetex/sagetex.sty sagetex.sty
# generating *.sage file
latex $1 > $name.sage.log 2>&1
echo "" >> $name.sage.log
# generating *.sout file
/usr/local/sage/sage $name.sage >> $name.sage.log 2>&1
ln -sf $1 $2
# now LyX can run latex in usual way
Я положил его в
$HOME
и назвал
sagelyx.sh
.
3. Настройка LyX
В настройках документа должны быть доступны классы с Noweb. Если они недоступны, возможно нужно запустить Инструменты->Переконфигурировать
.
Дальше, нужно сказать LyX'у, что для документов Noweb нужно запускать наш скрипт (см. рисунок).
В преамбулу всех документов добавляем:
\usepackage{sagetex}
Использование
Теперь можно в документе ввести формулу (или сделать TeX-вставку):
$26^{3}\cdot10^{3}=\sage{26**3+10**3}$
Если включён предпросмотр формул, то LyX заменит команду \sage
на ??
. Это потому что для предпросмотра используется только один проход LaTeX. Однако, если нажать кнопку Просмотр PDF, то откроется pdf с проставленными числами.