Русскоязычные беды
С русскими текстами дела обстоят еще хуже. Если вы подготовите файл с русским текстом и пошлете его своему коллеге, у которого используется другая операционная система или просто другая русификация LaTeX'а, почти наверняка у него возникнут проблемы и текст не напечатается или напечатается не так.
Прежде чем описывать это бедственное положение более подробно, попытаемся хотя бы немного оправдаться и объяснить, отчего так получается.
Естественно, что Дональд Кнут прежде всего заботился об англоязычных авторах. Если мы хотим использовать TeX для текстов на других языках, возникает несколько проблем.
- Нужны буквы, которых нет в английском языке. Например, в немецком языке нужны буквы с умлаутами (типа "a), а в скандинавских языках используется буква o — и мудрый Кнут заранее предусмотрел ее в разработанных им шрифтах (буквы же с умлаутами можно собирать из обычных букв и диакритических знаков). Хуже обстоит дело с русским (а также, например, греческим) языком, где нужны не отдельные новые буквы, а целый алфавит.
- Даже если нужные буквы есть, возникает проблема переносов. В разных языках правила переноса различны, и потому таблица переносов для английского языка будет давать неверные результаты при обработке (скажем) немецких текстов.
- Наконец, в разных странах разные типографские традиции, и потому сверстанный по англо-американским канонам текст на другом языке кажется странным. (В частности, названия разделов документа для разных языков разные — но есть и гораздо более тонкие различия.)
Эти проблемы решались постепенно. Начальный вариант TeX'а использовал шрифты из
символов и предусматривал только английские переносы. Затем Кнут добавил возможность хранить таблицы переноса для нескольких языков. Впрочем, это не решало проблем с переносом иноязычных слов, поскольку буквы с диакритическими знаками не были полноценными буквами с точки зрения алгоритмов переноса. К счастью, байт оказался восьмибитовым, и поэтому TeX нически несложно было перейти к шрифтам из символов.В эти символов уже помещались буквы большинства языков на латинской графической основе1), и для 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] нас поймут) — но тогда нельзя использовать русские буквы в именах команд.И т.д. и т.п.