Приложение Е. LaTeX в России
Правда жизни
В основном тексте книги не раз говорилось, что LaTeX позволяет автору подготовить текст книги на домашнем компьютере, а затем послать его коллегам или в издательство, где его напечатают без проблем и в том самом виде, как автор хочет.
Настало время признаться, что сказанное несколько идеализирует реальность, даже если речь идет об английских текстах, и грубо приукрашивает ее, если речь идет о русских.
Прежде всего, не все издательства вообще знают про TeX. В этом случае автор должен принести готовый оригинал-макет в каком-нибудь известном издательству формате. Чаще всего используется формат PostScript. Теоретически такой файл достаточно передать побайтно в фотонаборное устройство или PostScript-принтер, и текст будет напечатан в нужном виде. На практике, однако, возможны осложнения. В одном популярном московском издательстве не только не умели работать с TeX-файлами, но и PostScript-файл умудрились напечатать с непреднамеренным изменением масштаба, причем разным для разных страниц! (Что не так удивительно, если учесть, что в современных системах с дружественным интерфейсом не всегда легко предвидеть последствия того или иного движения мыши.)
" Патриотически" настроенным читателям будет приятно узнать, что эти проблемы отнюдь не ограничиваются Россией: в одном широко известном американском издательстве на компьютере было установлено несколько версий LaTeX'а, причем сотрудники издательства этого не осознавали и удивлялись, почему обработка одних и тех же файлов иногда дает слегка разные результаты. Проблема тут в том, что время от времени в LaTeX и стилевые пакеты к нему вносятся улучшения (исправляются старые ошибки и вносятся новые).
Вот еще одна, совсем свежая, история. В первоначальной версии
этой книги объяснялось, что для двойных акцентов в математических
формулах (типа ) надо использовать команду \Hat, а не \hat, поскольку команда \hat ставит акценты со сдвигом, и был пример плохого двойного
акцента. При обработке текста книги с новой версией
пакета {amsmath} выяснилось, что авторы этого пакета о
нас позаботились и изменили команду \hat, из-за чего пример
ее ошибочной работы пришлось создавать искусственно.
Впрочем, надо отдать должное разработчикам LaTeX'а и макропакетов к нему: по сравнению с другими "программными продуктами" количество версий (LaTeX обновляется раз в год, а раньше — раз в полгода) невелико, а различия между ними незначительны. (Plain TeX меняется еще реже и меньше.)
Русскоязычные беды
С русскими текстами дела обстоят еще хуже. Если вы подготовите файл с русским текстом и пошлете его своему коллеге, у которого используется другая операционная система или просто другая русификация LaTeX'а, почти наверняка у него возникнут проблемы и текст не напечатается или напечатается не так.
Прежде чем описывать это бедственное положение более подробно, попытаемся хотя бы немного оправдаться и объяснить, отчего так получается.
Естественно, что Дональд Кнут прежде всего заботился об англоязычных авторах. Если мы хотим использовать TeX для текстов на других языках, возникает несколько проблем.
- Нужны буквы, которых нет в английском языке. Например, в немецком языке нужны буквы с умлаутами (типа "a), а в скандинавских языках используется буква o — и мудрый Кнут заранее предусмотрел ее в разработанных им шрифтах (буквы же с умлаутами можно собирать из обычных букв и диакритических знаков). Хуже обстоит дело с русским (а также, например, греческим) языком, где нужны не отдельные новые буквы, а целый алфавит.
- Даже если нужные буквы есть, возникает проблема переносов. В разных языках правила переноса различны, и потому таблица переносов для английского языка будет давать неверные результаты при обработке (скажем) немецких текстов.
- Наконец, в разных странах разные типографские традиции, и потому сверстанный по англо-американским канонам текст на другом языке кажется странным. (В частности, названия разделов документа для разных языков разные — но есть и гораздо более тонкие различия.)
Эти проблемы решались постепенно. Начальный вариант TeX'а
использовал шрифты из символов и предусматривал только
английские переносы. Затем Кнут добавил возможность хранить
таблицы переноса для нескольких языков. Впрочем, это не решало
проблем с переносом иноязычных слов, поскольку буквы с
диакритическими знаками не были полноценными буквами с точки
зрения алгоритмов переноса. К счастью, байт оказался
восьмибитовым, и поэтому TeX нически несложно было перейти к
шрифтам из
символов. В эти
символов уже
помещались
буквы большинства языков на латинской графической основе1Хотя и не всех: например, некоторых букв,
использующихся в латышском или литовском языках, в кодировке T1
нет., и для LaTeX'а была разработана соответствующая кодировка
(T1), в которой уже все буквы полноценные. (Не торопитесь,
впрочем, завидовать европейцам: не успели они порадоваться
достигнутой стандартизации, как оказалось, что символ для
европейской денежной единицы вставить в T1 некуда, и он, в
отличие от более удачливого доллара, был добавлен в кодировку
TS1).
Параллельно TeX приспосабливался к русскому языку. Прежде всего нужно было нарисовать русские буквы, которые были бы по внешнему виду аналогичны буквам из кнутовских шрифтов. Это было сделано, причем несколькими способами (см. приложение В).
Тем не менее мечты о стандартизации (" Чтобы использовать русские буквы, подключите такой-то стандартный стилевой пакет") пока остаются мечтами. Помимо субъективных причин (все привыкли к своим любимым вариантам русификации и не хотят переучиваться), есть и объективные проблемы.
Первая связана с невозможностью соединить в одном шрифте все желательные символы, поскольку шрифты более чем с 256 символами TeX (без серьезных переделок) не использует, а свободных мест в кодировке T1 нет. Более того, даже если отказаться от символов европейских языков, но хотеть разместить все известные буквы кириллического типа, то и тогда оказывается недостаточным 256 символов. Поэтому есть несколько стандартизованных кодировок, включающих русские и другие кириллические буквы (T2A, T2B,...), не говоря уже о других, не стандартизованных, вариантах.
Вторая связана с тем, что существует несколько способов представления русских букв в файлах. Наиболее распространены три: koi8-r (обычно она используется в UNIX-подобных системах), cp866 (DOS) и cp1251 (Windows). Поэтому само понятие совместимости становится спорным: если DOS-пользователь приносит своему Windows-собрату дискету с файлом в кодировке cp866, должен ли этот файл обрабатываться LaTeX'ом в системе Windows без дополнительного перекодирования или после перекодирования в cp1251? Должна ли одна и та же программа обрабатывать тексты в разных кодировках (а может, даже и тексты, разные части которых записаны в разных кодировках)? Этого можно достичь, применяя dirty tricks(сделав русские буквы "активными символами" — читатели книги [2] нас поймут) — но тогда нельзя использовать русские буквы в именах команд. И т.д. и т.п.
Что делать?
Но все-таки, что же делать бедному автору, если ему нужно использовать LaTeX для обработки текстов не на английском языке? Главный совет — спросить у знакомых, чем они пользуются, и попытаться воспользоваться теми же самыми средствами. Для языков на латинской основе может пригодиться пакет babel — ниже мы скажем о нем несколько слов в разд. Е.6. С русским дело сложнее — даже при использовании пакета babel могут потребоваться действия, выходящие за рамки обычного подключения пакета, поскольку во многих распространенных комплектах (teTeX, MiKTeX и др.) в готовых форматах не предусмотрена обработка русских переносов.
В предисловии к русскому переводу книги [6] приводится список из 12 различных вариантов русификации LaTeX'а (и это не полный список, как сказано в том же предисловии). Нет никакой возможности описать их все, к тому же с большинством из них автор и не знаком. Вместо этого мы в трех следующих разделах кратко опишем следующие три вещи: вариант русификации, который использовался при подготовке этой книги (его можно найти на приложенном к книге диске), русификацию LaTex'а с помощью пакета babel, и использование того же пакета babel для подготовки текстов на западноевропейских языках, отличных от английского.