Python + LaTeX(XeTeX) и учеба

Сделал я с помощью LaTeX и Python расчетку по Радиотехническим системам(на самом деле GPS) и курсовую работу. А так как рабочий пример это всегда хорошее пособие, то решил этим всем поделиться.

Постоянно они доступны из репозитория mercurial на bitbucket.org вот тут и тут. Ну а еще лежат архивчиками у меня на ftp (когда и пока он работает). На bitbucket.org версия естественно новее, и наверняка там есть парочка мелких исправлений, поидее косметических

Начну пожалуй с описания того, что сделано чуть более качественно, это расчека по GPS. Нам даны значения мифологических параметров, парочку графиков, которые надо аппроксимировать (я их аппроксимировал нагло кусочно-линейно) и формулы мифологических махинаций. Вот эти махинации и надо расчитать. Скрипт на Python выглядит немного ублюдочно, ибо писался «влоб» и незадумываясь. Вся прелесть этой расчетки лишь в том, что из Python`a LaTeX сам берёт все данные(нууу, почти, надо 4 команды из консольки запустить, но естественно можно и это автоматизировать, детальнее в README).

А теперь о курсаче. Сделан он часов за 30 за 3 дня, поэтому сами представляете насколько он ужасен. Там есть таблицы, рисунки, графики, даже пару чертежей.

На самом деле там с тем же успехом можно было писать "qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci velit, sed quia non numquam eius modi" Для чертежей был нагло спизжен AVR Butterfly MP3. Рамки для них сгенерены LaTeX, и всё это скомпоновано в Inkscape, но вообще с помощью PStricks можно было и LaTeX`ом дорисовать недостающие тексты, размеры и т.п., но мне лень было разбираться.

Из полезного в курсаче имеется:

  • Опять вытягивать переменные из скрипта Python, но уже одной командочкой, может вытягивать их в заданном формате. Например:
    • \ptn{variable} Выдаст переменную в виде обычного чила если оно по модулю меньше 1000 и больше 0,01. Если же оно не попадает в эти пределы то выдастьcя в виде "число,сотые \cdot 10^{степень}"
    • \ptn{variable f} всегда выдаёт результат без "10^{}"
    • \ptn{variable f 5} или \ptn{variable 5} выдаст число как в одном из двух предыдущих вариантов, но с 5 знаками после запятой(лишние нули обрежутся), естественно можно 5 заменить на любое число
  • Скрипт автоматически убирает в запросах пробелы, точки, подчеркивания, скобочки так что можно написать что-то в духе:
    \Delta d_{min.5} = \ptn{Delta d_{min.5}}
    и туда подставиться переменная Deltad_min5. Обратный слеш все же прийдёться удалить, а кириллицу заменить на латиницу.
  • Можно вызывать код python прямо из LaTeX(удобно для быстрых несложных вычислений). \peval{1.23*8**5.57}
    С многострочными вариантами оно не работает
  • Занимательно выглядящие таблицы(мне нравится). Заодно посмотрите как назначать стиль отдельному столбцу таблицы
  • Рамки по ГОСТ
  • Титулка такая, как требуют у нас на факультете(правда лишняя надпись "ПОГОДЖЕНО", но её можно убрать, подумайте как)

Проблемы

Запускать latex надо несекурно, разрешая исполнять внешние команды, в частности Python. Запускать вот так:
xelatex -shell-escape kurs_all.tex или xelatex -shell-escape kurs_all.tex

Почему-то после \ptn{text}, \python{text} и \peval{text} обязательно должен быть пробел

Защиты от дурака нету, так что думайте перед тем, как что-то делать.

Мысли

P.S. для курсача нужен пакет eskdx. И напомню, что с первого прохода содержание и референсы не расставятся. Если вам интересно зачем я ввёл \comment, то вот ответ: так, при проблемах вызванных от использования Python, проще понять в каком месте документа.tex возникла ошибка

UPD: теперь пользуюсь XeTeX. Вот только стандартные шрифты ведь теперь не работают(для русского), так что пользуюсь Liberation. НО: не все фишки TeX с ними работают, например \scshape не работает. А Linux Libertine, в котором работает ВСЁ, выглядит как-то убого, да еще и "м" там серифная в санс шрифте.

Важно

Версия для XeTeX использует системные шрифты Liberation Sans и Liberation Serif. Если у вас их нету — поменяйте на что-нибудь другое