Как заставить LaTeX2e понимать русский язык
О чем этот документ
В этот документе я попытаюсь рассказать, как можно набирать документы в
системе LaTeX на русском языке в операционной системе Linux. Конкретно я
буду говорить о дистрибутиве LaTeX'а teTeX. Весьма вероятно, что эти
инструкции окажутся применимы к другим дистрибутивам LaTeX'а и даже к другим
операционным системам.
Соглашения
Я предполагаю, что читатель имеет базовые представления об операционной
системе Linux, т.е. вы знаете, как копировать, перемещать, удалять,
редактировать сжимать/разжимать файлы. Пути я буду указывать относительно
корневой директории LaTeX'а, как правило это /usr/lib/texmf. Также иногда я
ссылаюсь на архивы CTAN. Основные узлы CTAN (Comprehensive TeX Archive
Network) - ftp.dante.de и
ftp.tex.ac.uk. Полный список
узлов CTAN вы найдете в файле texmf/doc/help/CTAN.sites в дистрибутиве teTeX.
Что нам понадобится
Чтобы выполнить эти инструкции, вам понадобится следующее программное
обеспечение:
- Относительно новый LaTeX2e. Я рекомендую teTeX 0.4, который включает
LaTeX2e от 1996/12/01. Возможно, и более ранние версии LaTeX'а будут
работать, но, во всяком случае, это должен быть LaTeX2e, а не
LaTeX 2.09. teTeX вы найдете на любом из узлов CTAN в директории
/tex-archive/systems/unix/teTeX/. Большинство дистрибутивов Linux включают
teTeX, так что, если у вас есть Linux, весьма вероятно, что у вас уже есть и
teTeX.
- Пакет Babel версии 3.6. Большинство дистрибутивов LaTeX'а, teTeX в
частности, включают в себя Babel. Заметьте, что это должен быть
Babel 3.6, т.к. более ранние версии не содержали поддержки русского языка.
Опять-таки, если у вас teTeX 0.4, у вас все должне быть в порядке.
- Шрифты кириллицы LH. Их можно найти на CTAN'е в /tex-archive/fonts/LH,
а также на ftp.relcom.ru в
/unix/text/fmt/tex/LHfonts.tar.gz.
Что делать
Первым делом установите LaTeX. Подробное описание этого процесса,
безусловно, выходит за рамки данного документа. Если у вас Red Hat Linux, то
все, что вы должны сделать, это установить следующие RPM: tetex,
tetex-latex, tetex-dvips, tetex-xdvi. В противном случае, за инструкциями
обращайтесь к различным README-файлам или друзьям-экспертам.
Вообще говоря, LaTeX уже содержит поддержку русского языка посредством
пакета Babel. Проблема в том, что Babel работает в кодировке LWN, что
означает, что русский текст вводится в латинской транслитерации. Например,
вы набираете "sobaka", чтобы получить "собака". Однако, большинство
пользователей Linux внимательно прочли Cyrillic HOWTO (правда?) и умеют
вводить русские буквы непосредственно с клавиатуры. Сейчас мы научим Babel
понимать русский язык в кодировке LYC, т.е. "альтернативной" (кодовая
страница 866). Мы будем использовать эту кодировку, т.к. в ней написаны
шрифты LH. Я уже слышу возмущенные возгласы "Что еще за CP866? У меня под
Linux'ом используется КОИ-8!". Спокойствие, господа, проблема перевода из
КОИ-8 в "альтернативную" кодировку легко разрешима, см. ниже.
Итак, приступим к работе
- Прежде всего, нам нужен файл определения кодировки, LYCenc.def.
Возьмите его здесь (он сжат gzip'ом и занимает
1823 байт). Альтернативный вариант для любителей все делать своими руками:
- Скопируйте LWNenc.def в LYCenc.def (в директории
texmf/tex/generic/babel)
- Отредактируйте LYCenc.def, заменив LWN всюду на LYC.
- Около 90-й строки в этом файле замените определения всех макросов
\CYR* на настоящие русские буквы в альтернативной кодировке.
- Теперь нам нужны фонт-драйверы (.fd) для шрифтов LH. Загляните в
директорию texmf/tex/generic/babel - вы найдете там множество файлов с
именами LWN*.fd. Из них мы сделаем соответствующие LYC*.fd файлы с помощью
следующего скрипта:
#!/bin/csh
foreach lwnname (LWN*.fd)
set lycname = LYC`expr substr $lwnname 4 255`
sed 's/LWN/LYC/g;s/wn/lh/g' $lwnname > $lycname
end
(проследите, чтобы путь к csh был правильно указан в первой строке; вместо
csh можно использовать tcsh). Запустите этот скрипт (под root'ом) в
директории texmf/tex/generic/babel. Теперь файлы LYC*.fd готовы.
- Теперь скажем Babel'ю использовать кодировку LYC вместо LWN. В
директории texmf/tex/generic/babel откройте файл russianb.ldf своим любимым
редактором и замените все вхождения строки LWN на LYC. Затем проделайте то же
самое с файлом cyrmath.sty в той же директории. В общем-то, этого
достаточно, но имеет смысл еще немного поковырять russianb.ldf. Дело в том,
что по непонятной причине Babel считает, что в русском языке перед символами
'!', '?', ':', ';' нужно ставить ощутимый пробел. Это довольно-таки странно
выглядит, так что сейчас мы его отучим это делать. Около строки 129 в
russianb.ldf нужно закомментировать несколько строк, так чтобы соответствующий
фрагмент выглядел таким образом:
%\initiate@active@char{:}
%\initiate@active@char{;}
%\initiate@active@char{!}
%\initiate@active@char{?}
\initiate@active@char{"}
\addto\extrasrussian{\languageshorthands{russian}}
\addto\extrasrussian{%
% \bbl@activate{:}\bbl@activate{;}%
% \bbl@activate{!}\bbl@activate{?}%
\bbl@activate{"}}
%\declare@shorthand{russian}{;}{%
% \ifhmode
% \ifdim\lastskip>\z@
% \unskip\penalty\@M\thinspace
% \else
% \thinspace
% \fi
% \fi
% \string;}
%\declare@shorthand{russian}{:}{%
% \ifhmode
% \ifdim\lastskip>\z@
% \unskip\penalty\@M\thinspace
% \else
% \thinspace
% \fi
% \fi
% \string:}
%\declare@shorthand{russian}{!}{%
% \ifhmode
% \ifdim\lastskip>\z@
% \unskip\penalty\@M\thinspace
% \else
% \thinspace
% \fi
% \fi
% \string!}
%\declare@shorthand{russian}{?}{%
% \ifhmode
% \ifdim\lastskip>\z@
% \unskip\penalty\@M\thinspace
% \else
% \thinspace
% \fi
% \fi
% \string?}
%\declare@shorthand{system}{:}{\string:}
%\declare@shorthand{system}{!}{\string!}
%\declare@shorthand{system}{?}{\string?}
%\declare@shorthand{system}{;}{\string;}
Теперь Babel готов использовать кодировку LYC.
- Теперь пора установить шрифты LH. Скопируйте все исходники (т.е файлы
с расширением .mf) в какую-нибудь подходящую директорию, например
texmf/fonts/source/public/lh. По желанию, можно также скопировать .tfm-файлы
(TeX Font Metrics) в texmf/fonts/tfm/public/lh, но это не обязательно, т.к.
если этого не сделать, эти файлы будут сгенерированы автоматически, когда
понадобятся.
- Теперь запустите команду texhash (под root'ом). Она обновляет базу
файлов texmf/ls-R, по которой teTeX ищет свои файлы.
- Сейчас LaTeX уже может обрабатывать русский текст, но он не будет
делать переносов. Теперь научим его переносить русские слова. Для начала,
нам понадобится файл русских переносов. Здесь возможны 3 варианта:
- У вас уже есть такой файл для LaTeX 2e. Отлично, будем использовать
его.
- У вас есть файл русских переносов от старого LaTeX 2.09 (например, от
DOS-овского emTeX). Тогда возьмите этот
фрагмент распакуйте его gunzip'ом, и добавьте в начало своего файла.
- У вас нет никакого файла русских переносов. Тогда просто возьмите его
здесь.
Итак, так или иначе, у вас есть файл переносов ruhyphen.tex. Скопируйте его в
texmf/tex/generic/hyphen. Затем в директории texmf/tex/generic/config
отредактируйте файл language.dat. Закомментируйте ненужные языки (только
ни в коем случае не трогайте American, USenglish или English -
английский язык должен оставаться первым) и добавьте строчку
russian ruhyphen.tex
Еще раз запустите texhash.
- Теперь нам необходимо перегенерировать форматный файл LaTeX'а
latex.fmt, чтобы заставить LaTeX загружать русские переносы. Зайдите а
директорию texmf/tex/latex/config и запустите такую команду:
initex 'latex.ini \dump'
Готовый latex.fmt переместите в директорию texmf/web2c.
- Наконец, последний штрих. Вся наша руссификация пока работает в
"альтернативной" кодировке, в то время как вы наверняка используете в
Linux'е кодировку КОИ-8. Самое простое (и не самое удобное) решение этой
проблемы заключается в том, чтобы перекодировать каждый LaTeX-файл перед
обработкой его LaTeX'ом. К счастью, существует и гораздо более удобное
решение. Используйте пакет koi2alt, который будет делать
перекодировку автоматически. Возьмите этот пакет здесь. Разархивируйте его gunzip'ом и поместите
полученный koi2alt.sty в подходящую директорию, например
texmf/tex/latex/local (при необходимости, создайте такую директорию). Затем
снова запустите texhash. Внимание: я нашел этот пакет где-то в
Интернете, но внес в него небольшие изменения. В оригинальном пакете была
небольшая ошибочка, которая приводила к тому, что вместо буквы "ё" (йо)
печаталась "Я". Так что, если вы взяли koi2alt.sty не с этой
страницы, убедитесь, что у вас он правильный.
- Еще один шаг необходим, если вы хотите, чтобы LaTeX правильно различал
больше и маленькие буквы в русском языке, в частности, если вы
хотите, чтобы команды \uppercase и \lowercase работали.
(последнее требуется, например, чтобы правильно форматировать заголовки в
классе amsart). Чтобы этого добиться, необходим
вот этот пакет koi8case. Так же, как с koi2alt,
разархивируйте его gunzip'ом, поместите в подходящую директорию и запустите
texhash. Этот пакет работает только с кодировкой КОИ-8. Внимание:
этот пакет я написал сам, но я не особенный эксперт по LaTeX'у, так что
гарантировать, что я выбрал наиболее эффективный и безопасный путь, я не
могу. Используйте этот пакет на свой риск.
Уффф... Все! Теперь проверим вашу руссификацию. Следующий фрагмент
демонстрирует шаблон для создания русскоязычных документов.
\documentclass{article}
\usepackage[russian]{babel}
\usepackage{koi2alt}
\usepackage{koi8case}
\begin{document}
... Мама мыла раму ...
\end{document}
Прогоните этот файл через LaTeX и затем посмотрите его с помощью xdvi.
Будьте готовы подождать немного, пока METAFONT сгенерирует необходимые .tfm
(для LaTeX'a) и .pk (для xdvi) файлы для русских шрифтов. Не волнуйтесь, это
происходит только когда какой-либо русский шрифт используется впервые (это
касается любого шрифта, вообще говоря).
Если вы всегда используете кодировку КОИ-8, то вам нужно использовать пакеты
koi2alt и koi8case всякий раз, когда вы набираете документ
на русском. Чтобы не писать каждый раз \usepackage{koi2alt} \usepackage{koi8case}
можно добавить следующие строчки в russianb.ldf в
texmf/tex/generic/babel (сразу перед строкой \ldf@finish{russian}):
\AtEndOfPackage{\RequirePackage{koi2alt}}
\AtEndOfPackage{\RequirePackage{koi8case}}
Теперь пакеты koi2alt и koi8case будут включаться
автоматически.
Disclaimer
То, что я описал сработало для меня. Хотя я считаю маловероятным, что это не
сработает для вас, я не делаю никаких гарантий. Используйте эти инструкции
на свой страх и риск. Если у вас возникнут проблемы, я, возможно, смогу вам
помочь. Вы можете обратиться ко мне по адресу lz@ecos.kharkov.ua.
Благодарности
Большинство приведенной здесь информации позаимствовано из статьи, написанной в
FIDO-шную группу RU.LINUX, 10 Oct 1996 неким Алексом Киселевым
(Alex_Kicelew@p7.f194.n5020.z2.fidonet.org). Я хотел бы выразить
огромную признательность этому человеку за его очень полезное письмо. Также,
некоторую информацию я почерпнул из пакета LH Сергея Наумова (serge@astro.unc.edu).