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

LaTeX: зачеркивание, цветовыделение и заметки на полях

Чтобы зачеркивать слова в LaTeX необходимо подключить пакет ulem. Делается это так:

% в преамбуле
\usepackage{ulem}
...
% в тексте, чтобы вычеркнуть слово
\sout{Неправильно.} Правильно.


Получится тогда что-то вроде этого:

Неправильно. Правильно.


Цветовыделения я обычно делаю с помощью пакета xcolor:


% в преамбуле
\usepackage{xcolor}
...
% в тексте
Некоторые слова можно выделять \textcolor{red}{красным}.

что даёт

Некоторые слова можно выделять красным.


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

Эти пометки (зачёркивания и красные вставки) я использую, когда правлю чужой текст и хочу выделить свои изменения. Дополнительно иногда я дописываю заметки на полях:

% в тексте
\marginpar{Этот текст появится сбоку на полях.}


Это конечно не замена настоящим знакам корректуры, но зато представимо в виде PDF-документа, легко копируется, распечатывается и передаётся по электронным каналам связи :)

20070703

Как скачать сайт к себе на диск целиком

Бывает, что хочется иметь локальную копию какого-то сайта, чтобы можно было её просматривать, не подключаясь к Интернет, или чтобы сохранить её на будущее, на случай, если «оригинал» исчезнет.

Сделать это легко. Я часто использую скрипт siteget, написанный Джильсом Орром. По сути это всего лишь вызов программы wget c «правильным набором опций», однако вводить две строчки опций каждый раз лень :)

Итак,
  • скачайте скрипт siteget
  • поместите его в одно из мест, перечисленных в переменной окружения $PATH (я обычно держу такие вещи в ~/bin), и сделайте скрипт исполняемым (chmod a+x ~/bin/siteget)
  • скачивайте любые сайты одной командой: $ siteget АДРЕС_САЙТА.

Например, чтобы получить локальную копию своего блога, я выполняю
$ siteget http://sovety.blogspot.com/

После этого в текущем каталоге появляется подкаталог sovety.blogspot.com/. Его можно посмотреть любимым браузером (например, Firefox):
$ firefox sovety.blogspot.com/index.html

В большинстве случаев полученная копия вполне функциональна.

Те же, кто не хотят возиться со скриптом, могут использовать wget напрямую:
$ wget -m -k -nv -np -p --user-agent="Mozilla/5.0 (compatible; Konqueror/3.0.0/10; Linux)" АДРЕС_САЙТА


Для ограничения глубины скачивания можно ещё добавлять опцию -l глубина_ссылок. А при работе с плохим или ненадёжным соединением пригодятся опции -c -t 0.

Дополнение: заметно бОльшие возможности зеркалирования/скачивания сайтов предоставляет программа httrack.