20070706

Русский PDF в LaTeX

Уже достаточно давно практически все тексты, включая презентации, создаваемые в LaTeX я собираю в формат PDF. Он много меньше размером, чем Postscript, позволяет осуществлять поиск по тексту, позволяет включать изображения в формате PNG или JPG, а также делать гиперссылки, встроенное оглавление и многое другое. И самое главное, программы для просмотра PDF распространены гораздо более, чем программы для просмотра PS.

Однако для создания PDF с русскими буквами средствами LaTeX требуются некоторые ухищрения.

Во-первых, в этом случае надо использовать пакет cmap, иначе поиск по русским символам в полученном PDF будет невозможен.


Во-вторых, пакет для работы с графикой graphicx следует подключать с включенной опцией pdftex.

В-третьих, совсем невредно указать pdfTeX-у, что полученный PDF можно и ужать, для этого я устанавливаю переменную \pdfcompresslevel=9.

В-четвертых, я добавляю условный код, который делает всё вышеуказанное только если действительно используется pdfTeX, и использует другие пакеты и настройки, в случае если создаётся DVI/PS.

Ну и наконец, уж раз создаётся документ на русском языке, надо указать кодировку документа, правила расстановки переносов и кодировку шрифтов.
% до \documentclass
\newif\ifpdf
\ifx\pdfoutput\undefined
\pdffalse % pdfLaTeX не используется
\else
\pdfoutput=1 % используется PDFLaTeX
\pdftrue
\fi

% в преамбуле
\usepackage[cp1251]{inputenc} % CP1251 или другая кодировка, с UTF8 не дружит bibTeX
\usepackage[russian]{babel} % правила переноса
...
\ifpdf
\usepackage{cmap} % чтобы работал поиск по PDF
\usepackage[pdftex]{graphicx}
\pdfcompresslevel=9 % сжимать PDF
\else
\usepackage{graphicx}
\fi


После этого полученный файл можно обрабатывать и обычным latex, и pdflatex, который будет сразу создавать PDF. Для просмотра PDF я обычно пользуюсь evince или xpdf, поскольку эти программы позволяют обновлять файл не меняя открытую страницу, что удобно в процессе редактирования.

Все иллюстрации я готовлю сразу в двух форматах: PDF и EPS (epstopdf легко преобразует графику из EPS в PDF), а в командах \includegraphics{image} расширение не указываю, тогда LaTeX автоматически включает изображение в подходящем формате.

Недавно virens написал о создании презентаций в LaTeX с помощью пакета beamer, и указал на ошибки возникающие при обработке русских букв.

Хочу отметить, что у меня подобные ошибки не возникают. При этом файлы beamer я пишу несколько иначе и обрабатываю их непосредственно pdflatex:

\documentclass[ignorenonframetext,hyperref={pdftex,unicode}]{beamer}
...
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}
...
\usepackage{cmap}


Дополнение 1. Минимальный шаблон для PDFLaTeX

Вообще-то минимальный шаблон документа для pdflatex будет такой:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{cmap}

\begin{document}
Текст по-русски в кодировке UTF-8.
\end{document}
Это к тому, что разные \ifpdf выше — совсем не обязательны. Можно проще.

Дополнение 2. Шрифты CM-Super

Есть ещё такая тонкость: при использовании гарнитуры Computer Modern PDF получается гораздо лучше, если установлены шрифты CM-Super (пакет cm-super в Debian/Ubuntu).

Например, без CM-Super:

без CM-Super

С Type-1 шрифтами CM-Super:

с CM-Super