Лэйтеховое

25 января 2015 17:30 GMT

Потратив последний месяц на написание диплома, я выучил несколько клёвых фишек для LaTeX. Решил записать, вдруг пригодится кому.

На всякий случай: пользуюсь TeX Live под виндой, в основном pdflatex, пишу в Sublime Text, специальных IDE не использую (потому что убогие и не нужны), компилирую из консоли, обычно с помощью make.

Содержание:


Лигатуры и копипаст

В шрифте Computer Modern, который по умолчанию использует LaTeX, существуют лигатуры, т.е. сочетания букв объединённые в один символ. Выглядит это так:

Лигатура fi

Всего в шрифте пять лигатур: ff, fi, fl, ffi и ffl. Проблема в том, что при использовании pdflatex лигатура копируются из документа как один нераспознаваемый символ, из-за чего почти любой скопированный кусок текста приходится править руками. Кроме того, из-за этого слова с лигатурами невозможно найти через поиск по документу.

Избежать этого позволяют две строчки в преамбуле:

latex \input{glyphtounicode} \pdfgentounicode=1

Пожалуйста, включите их в свой код. Люди, которые будут искать что-то в вашем документе, скажут вам спасибо.


Adobe Illustrator и LaTeX

Поскольку в tikz/pgf я до сих пор не могу быстро рисовать достаточно сложную графику, рисовал в Adobe Illustrator, потому что под него быстро нашлось решение, позволяющее вставлять в картинку подписи и формулы из LaTeX.

Картинка с формулами из LaTeX

Для Illustrator существует скрипт, который создаёт в его интерфейсе специальное окно для ввода LaTeX-кода. Дальше скрипт вставляет этот код в шаблон, компилирует через pdflatex, а полученную пдфку импортирует в Illustrator. Самое клёвое, что импортируется она в векторном виде, поэтому можно изменять её размеры или разбивать на отдельные буквы/символы. Единственное, в скрипте понадобилось настроить шаблон, добавив необходимые пакеты, ну и изменить documentclass, чтобы конечная пдфка обрезалась по содержимому:

\documentclass[class=minimal,border=0pt]{standalone}

Разумеется, Illustrator для картинок в диплом — как из пушки по воробьям, да ещё и стоит конских денег на рабских условиях подписки. С другой стороны, описанный подход стоит внедрить в какой-нибудь бесплатный/свободный векторный редактор. В Inkscape, например, тоже есть импорт из PDF, осталось только написать плагин.


Сборка с помощью latexmk

Как известно, чтобы в LaTeX-документе корректно отображались все ссылки, требуется скомпилировать текст несколько раз (обычно хватает двух). Из-за этого периодически натыкаешься на файлы, сделанные в спешке и/или невнимательно вычитанные, где вместо ссылок стоят вопросительные знаки.

Если вы кроме всего прочего используете bibtex, то полная компиляция документа выглядит примерно так:

pdflatex <docname> bibtex <docname> pdflatex <docname> ... (пока все ссылки не проявятся)

Весь этот ужас можно внести в скрипт или Makefile, а количество перекомпиляций определять натравив grep на выхлоп лэйтеха. Ровно такой зоопарк я и держал у себя, пока не обнаружил утилиту latexmk, которая позволяет обойтись одной командой:

latexmk -pdf <docname>

Всё! Утилита сама соберёт библиографию и перекомпилирует документ столько раз, сколько нужно. Жаль, что раньше про неё не узнал. Работает примерно как make, только цели извлекает непосредственно из исходного кода. Так, например, \input трактуется как отслеживаемая зависимость, а \bibliography — как пререквизит с целью, в которой собирается библиография.

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


Непрерывный просмотр PDF

Adobe Reader под виндой блокирует открытый PDF-файл и не позволяет его перезаписывать. Всегда бесило закрывать документ перед его перекомпиляцией, а потом открывать заново, листая до нужного места.

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

Для себя выбрал SumatraPDF: минималистичный интерфейс, быстрый, поддерживает вкладки, запоминает позицию в файле. Разве что перестаёт обновлять документ если его удалить и создать заново (т.е. когда компиляция прерывается из-за ошибки), решается закрытием вкладки и повторным открытием через «Recent files». Рекомендую.


PostScript

В интернете очень много статей из 90-х в формате PostScript (.ps) с растровыми шрифтами. Так вот, до меня лишь недавно дошло что их надо не конвертировать в PDF, а смотреть как есть в любом доступном просмотрщике (GSView под винду, например). Разница в рендеринге одних и тех же шрифтов поражает:

Сравнение рендеринга PS и PDF

Ну то есть, это разница между «можно прочитать на компьютере» и «блин, придётся печатать». Кроме того, в открытом PS работает какой-никакой поиск, а текст даже можно скопировать (хоть и через жопу, как в виндовом просмотрщике, например), тогда как из PDF чаще всего скопируются только формулы, а поиска нет и подавно.

А я ещё как-то ругался на использование PostScript в кругах русских учёных. Дурак был, да. Кстати, его использовали потому что компилировали всё с помощью rlatex, специального дистрибутива, который поддерживал кириллицу ещё до babel, тотального распространения UTF-8 и TeX Live. В нём не было pdflatex, а PDF из PS получались некачественные. Такие дела. Хотя компилить в растровые шрифты в наше время всё равно не стоит, конечно.

Короче, видишь PDF с вырвиглазными шрифтами — ищи PS версию (скорее всего она где-то лежит) и открывай именно её.



Система Orphus
© 2009–2016 Кузнецов Максим