Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Вперед Назад Содержание

9. Текстовые процессоры

9.1 Поддержка кириллицы в TeX/LaTeX

В этом разделе я опишу несколько способов набора кириллических текстов в TeX и LaTeX. Есть несколько путей для достижения этой цели, которые отличаются в сложности установки и удобстве использования. Например, одна из возможностей -- это начать работу без всякой предварительной настройки, используя Washington AMSTeX Cyrillic fonts. С другой стороны, вы можете установить пакет LaTeX, который легко настраивается на пользование кириллицей.

Вид набранного документа в значительной степени определяется шрифтом, который вы используете. Основные кириллические шрифты, которые можно использовать при наборе, описаны в разделе Шрифты для TeX/LaTeX.

Обратите внимание, что доступны две версии LaTeX, одна из них -- 2.09 -- старая версия, в то время как 2e -- новая (выпуск pre-3.0). Если вы используете LaTeX 2.09, то как можно быстрее переходите на 2e. Последний сохраняет совместимость со старой версией, но имеет намного больше возможностей.

Последние версии дистрибутивов LaTeX (например, teTeX версии старше чем 1.0) включают в себя русификацию out of the box. Признаком русифицированности LaTeX'а out-of-the-box является наличие директории /$TEXMF/tex/latex/t2, $TEXMF обычно равно /usr/lib/texmf или /usr/share/texmf. Русификация, как нетрудно догадаться, -- T2 (См. раздел T2).

Пакет T2

Пакет T2 был изначально был создан Werner Lembergом и Владимиром Воловичем. Этот пакет развивается по сей день и, надеюсь, будет развиваться и дальше. В нем присутствуют некоторые недостатки, но в 99% случаев для отображения кириллицы через LaTeX его возможностей хватает. Современная русификация LaTeX основана именно на этом пакете. Пример русификации через T2 приведён в разделе Русификация teTeX.

Пакет `T2' можно найти на любом сайте CTAN в директории macros/latex/contrib/supported/t2, последняя версия лежит по адресу ftp.vsu.ru

Официально с 1-го декабря 1998 года дистрибутив LaTeX2e поддерживает шрифты со стандартными кириллическими кодировками (T2A, T2B, T2C, X2) и всевозможные входные кодовые таблицы (например, koi8-r, cp1251, cp866, iso8859-5)

BABEL начал поддерживать кодировку T2 с версии 3.6k (последнюю версию можно взять на любом сайте CTAN в директории CTAN:macros/latex/required/babel).

В файле `cyrguide.tex', который является частью дистрибутива LaTeX2e, описывается настройка и использование кириллицы при работе с LaTeX. Для полной поддержки кириллицы требуется иметь lh шрифты и соответствующую таблицу переносов.

Шрифты lh начиная с версии 3.20 (они наверняка есть в вашем дистрибутиве) поддерживают все нужные кодировки -- смотрите раздел lh.

Русские таблицы переносов, поддерживающие кодировку T2 и оформленные как пакет 'ruhyphen' (он наверняка есть в вашем дистрибутиве), можно найти на любом CTAN архиве в директории language/hyphenation/ruhyphen или по адресу ftp.vsu.ru

В пакете T2, кроме непосредственно поддержки T2 кодировок, дополнительно присутствуют следующие полезные составляющие.

  1. Пакет `mathtext', который позволяет использовать кириллицу в формулах без дополнительных ухищрений. Пакет может быть включён с опцией warn -- в этом случае он сообщает обо всех случаях использования кириллических букв в формулах. Пакет следует загружать до загрузки пакета babel и/или fontenc.
  2. Пакет `citehack.sty' переопределяет команды LaTeX таким образом, чтобы можно было использовать кириллические символы в качестве аргументов команд \cite и \bibitem -- это временный "хак", и в следующей версии LaTeX нужда в нем отпадёт.
  3. Скрипт `rubibtex' будет полезен, если вы используете bibtex.
  4. Скрипт `rumkidx' будет полезен, если вы используете makeindex -- к сожалению, невозможно (без напильника) сделать несколько индексов одновременно.
  5. Директория `examples' содержит несколько примеров.
  6. Пакет `cyrplain' -- на случай, если вы захотите использовать Plain TeX.
  7. Директория `cyrfinst' содержит поддержку кириллицы для пакета fontinst.
  8. Директория `enc-maps' содержит различные входные кодировки, которые можно использовать при наборе файла LaTeX.

Одной из раздражающих особенностей T2-кириллизации является то, что при "прогонке"  tex-файла через latex вывод предупреждений и ошибок ведётся на внутренней кодировке -- то есть T2:

Артём Чуприн написал программу-фильтр -- она перекодирует сообщения об ошибках от "\T2A/"  до конца строки, остальное не трогает. Для практических нужд пока хватает. Программу можно найти по адресу http://www.inp.nsk.su/~baldin/misc/Latex.c

Так же можно использовать стандартный перекодировщики -- например, CTAN:macros/latex/contrib/supported/t2/etc/t2filter.c.

   latex myfile.tex | t2filter

Кириллизация teTeX

Описание кириллизации teTeX взято из FAQ, поддерживаемого для эхо-конференции RU.TEX Алексеем Махоткиным.

Если у вас старый дистрибутив teTeXа (версия ниже 1.0), то настоятельно рекомендую скачать последнюю версию этого программного продукта.

Для современных версий TeX'а (teTeX, fpTeX, MikTeX, Web2c TeX) русификация уже входит в дистрибутив.

Первое, что нужно сделать -- это подключить русские переносы. Для этого нужно отредактировать файл language.dat, находящийся в директории $TEXMF/tex/generic/config/language.dat ($TEXMF обычно равно /usr/lib/texmf или /usr/share/texmf), добавив туда строки:

ruseng ruenhyph
       =russian
       =english

Остальные строки нужно закомментировать, либо удалить. После чего необходимо перегенерировать форматные файлы:

texconfig init

Описанное выше можно проделать через стандартную конфигурационную программу texconfig -- выбрать меню /hyphenation, далее latex и раскомментировать russian.

Теперь можно работать с русским языком.

Добавьте в преамбулу документа (после слов \documentclass{})


\usepackage{mathtext}         % если нужны русские буквы в формулах (не обязательно)
\usepackage[T2A]{fontenc}     % внутренняя T2A кодировка TeX
\usepackage[koi8-r]{inputenc} % кодировка - можно использовать [cp866] [cp1251]
\usepackage[russian]{babel}   % включение переносов

После этого в документе можно использовать русские буквы.

Подробнее о пакете T2 смотрите раздел Пакет T2.

P.S. Это только один из вариантов, самый простой и универсальный, решения проблемы русификации. Есть и другие варианты и методы, которые на практике могут оказаться более удачными.

Чтобы добавить форматы из cyrplain набора в texconfig, следует выбрать меню FORMATS и добавить

cyrtxinf      tex             language.dat    cyrtxinf.ini

для русского texinfo. Аналогично для cyrblue и cyramstx.

Чтобы добавить формат cyrtex (русский TeX), проще в каталоге web2c выполнить:

initex '\input cyrtex.ini \dump'

и бросить символическую ссылку с именем cyrtex на tex (например, в /usr/bin).

Чтобы переключится на русский в этих plain форматах, надо использовать команду

\language N
где N -- номер, под которым числится русский язык в получившейся раскладке.

Стиль

В этом разделе даны рецепты, как создать и/или модифицировать свой стиль, естественно, это относится к использованию кириллицы в LaTeX. Предложенные рецепты в основном опираются на пакет русификации T2 (См. раздел Пакет T2).

Кириллические буквы в формулах

Для того, чтобы использовать русские буквы в формулах следует в преамбуле до задания inputenc, fontenc, babel добавить строчку:

 \usepackage{mathtext} ()

Что бы сделать кириллические буквы в формулах наклонными, то нужно в преамбуле добавить строчку:

   \DeclareSymbolFont{T2Aletters}{T2A}{cmr}{m}{it}

Texinfo

Чтобы кириллицу можно было использовать с texinfo следует воспользоваться пакетом cyrplain (См. раздел Русификация teTeX).

Кириллица и bibtex

Что бы можно было использовать кириллицу с bibtex'ом -- то есть иметь возможность написать что-то вроде:

   \bibitem{Иванов1000}
Следует воспользоваться пакетом citehack -- добавить в преамбуле:

   \usepackage{citehack} 

Замечание: По умолчанию кириллицу нельзя использовать в качестве ИНДЕКСА (т.е. внутреннего объекта, который никак не отображается в свёрстанном документе). В необязательных аргументах \cite и \bibitem (которые отображаются в документе) использовать кириллицу можно. Пакет citehack позволяет использовать 8-битные символы в качестве индекса.

Кириллица в списках

Чтобы заставить окружение enumerate нумеровать списки \item по-русски. Следует воспользоваться пакетом babel:

  • Маленькие буквы:
    \renewcommand{\theenumi}{\asbuk{enumi}}
    
  • Большие буквы:
    \renewcommand{\theenumi}{\Asbuk{enumi}}
    

Эти команды делают нужную нам нумерацию на верхнем уровне вложенности. Hа следующем уровне идут enumii, enumiii, enumiv.

Кириллица и нумерация приложений

Для нумерации приложений русскими буквами (некоторые как раз любят латинские) следует написать:


\makeatletter
\renewcommand\appendix{\par
  \setcounter{section}{0}%
  \setcounter{subsection}{0}%
  \gdef\thesection{\@Asbuk\c@section}}
\makeatother

Перенос формул

Чтобы символы бинарных операций ("+", "-", "=") в LaTeX, набранные в строчных формулах, при переносе на другую строку, дублировались например:

a + b =
= c

можно воспользоваться такими командами в преамбуле:


\begingroup
\catcode`\+\active\gdef+{\mathchar8235\nobreak\discretionary{}%
 {\usefont{OT1}{cmr}{m}{n}\char43}{}}
\catcode`\-\active\gdef-{\mathchar8704\nobreak\discretionary{}%
 {\usefont{OMS}{cmsy}{m}{n}\char0}{}}
\catcode`\=\active\gdef={\mathchar12349\nobreak\discretionary{}%
 {\usefont{OT1}{cmr}{m}{n}\char61}{}}
\endgroup
\def\cdot{\mathchar8705\nobreak\discretionary{}%
 {\usefont{OMS}{cmsy}{m}{n}\char1}{}}
\def\times{\mathchar8706\nobreak\discretionary{}%
 {\usefont{OMS}{cmsy}{m}{n}\char2}{}}
\mathcode`\==32768
\mathcode`\+=32768
\mathcode`\-=32768

Дополнение: Вероятно, эти команды будут включены в планируемый пакет-дополнение к babel (добавляющий некоторые особенности русскоязычного набора). Кто заметит глюки в вышеприведённых командах -- пишите мылом vvv@vvv.vsu.ru или 2:5025/2.72.

Перенос

Чтобы правильно писать составные слова, типа, "коммерческо-посредническая". следует добавить следующие строчки (См. README от пакета ruhyphen):

  \lccode`\-=`\-
  \defaulthyphenchar=127
%  ...
  \usepackage[T2A]{fontenc}

Если нужно явно задать правило переноса для какого-то составного слова, то вставьте что-то вроде:


  \begingroup
    \lccode`\==`\-
    % Пример: задать правила переноса для `коммерческо-посредническая':
    \hyphenation{ком-мер-че-ско=-по-сред-ни-че-ская}
  \endgroup

Отступ для первого параграфа раздела

В русской литературе, в отличии от английской, принято, чтобы первый параграф раздела имел точно такой же отступ, как и везде. Для этого следует воспользоваться пакетом indentfirst.

\usepackage{indentfirst}

Работа с Washington Cyrillic

Этот пакет был создан для Американского Математического Общества, чтобы дать возможность создавать документы со ссылками на первоисточники на русском. Следовательно, авторы не очень "напрягались"  при создании этого пакета, и шрифты в результате этого выглядят довольно неуклюже. Обычно этот пакет упоминается как "по настоящему плохой пакет кириллицы для TeX".

Однако мы обсудим его, так как он очень прост в использовании и не требует установки -- этот набор содержится в большинстве дистрибутивов TeX.

Конечно, у вас не будете такой роскоши, как автоматическая расстановка дефисов, но все равно...

  • Снабдите ваш документ следующими директивами:
    \input cyracc.def
    \font\tencyr=wncyr10
    \def\cyr{\tencyr\cyracc}
    

  • Теперь, чтобы напечатать символы кириллицы, вставьте
    \cyr
    
    для печати используйте соответствующий латинский символ или команду TeX. То есть строчные буквы русского алфавита соответствуют следующим сочетаниям:
    a b v g d e \"e zh z i {\u i} k l m n o p r s t u f kh c ch sh shch
    {\cprime} y {\cdprime} \`e yu ya
    

Чрезвычайно сложно преобразовывать ваши русские тексты в такую кодировку, но вы можете автоматизировать этот процесс. Программа translit (раздел Символьная перекодировка) поддерживает опцию вывода TeX.

9.2 StarOffice

Наиболее полную и подробную информацию по русификации StarOffice можно найти на страничке Леона Кантера по адресу http://www.blackcatlinux.com/StarOffice/

Последняя новость: Sun, который на корню скупил Star Division Corp., выпустил бесплатную русифицированную версию StarOffice 5.2, правда, шрифты для него нужны в ISO 8859-5 кодировке.

Off-topic: Следующая версия StarOffice (6.0?) выйдет под лицензией GNU -- так было обещано (Sun слов на ветер не бросает).

StarOffice 5.2

Эта инструкция представляет собой дополнение к Инструкции по инсталляции StarOffice 5.2, отражающее особенности установки и настройки русской версии этого пакета. Вы узнаете, как наиболее полно реализовать возможности, заложенные в этом пакете, и обойти возможные проблемы.

Наиболее полную и подробную информацию по русификации StarOffice 5.2 для Black Cat Linux 6.2 можно найти на страничке Леона Кантера по адресу http://www.blackcatlinux.com/StarOffice/

Шрифты и кодовые страницы

StarOffice 5.2 -- не только первая русифицированная версия этого пакета, но и первая версия, которая может работать с различными кодировками кириллицы, то есть отображать установленные в системе шрифты в соответствии с текущей кодировкой, в которой запущен StarOffice. Таких кодировок поддерживается три -- KOI8-R, ISO8859-5 и CP1251. Текущая кодировка определяется пакетом по значению переменной окружения LANG -- оно может иметь значения ru_RU.KOI8-R, ru_RU.ISO8859-5 или ru_RU.CP1251 (Для выяснения подробностей смотрите раздел Настройка локали).

Внимание!: uk_UA.KOI8-U, uk_UA.CP1251, ru_UA.KOI8-U, ru_UA.CP1251 не поддерживаются! При запуске StarOffice с одним из этих значений LANG все надписи будут отображаться вопросительными знаками! Для работы с документами на украинском языке необходимо использовать ru_RU.CP1251.

StarOffice способен отображать установленные в системе шрифты в соответствии с текущей кодировкой, в которой запущен пакет. То есть если в системе установлены шрифты KOI8-R, а текущая кодовая страница StarOffice -- CP1251, он попытается "собрать"  CP1251 из KOI8-R, но при этом будут большие потери, так как в KOI8-R отсутствуют не только украинские, белорусские и южно-славянские буквы, но и многие типографские знаки, такие как кавычки-"ёлочки", длинное тире и другие. При импорте документов из Microsoft Office эти недостающие символы будут заменяться вопросительными знаками, что затруднит работу с импортируемыми документами. Поэтому мы рекомендуем для работы со StarOffice использовать шрифты в кодировке CP1251, которая содержит самый полный набор символов, из которых легко "собирается"  как KOI8-R, так и ISO8859-5. StarOffice использует два вида шрифтов -- растровые (pcf) для элементов интерфейса (меню, подсказки, формы и др.), и Type1 -- для печати и отображения документов на экране. Чтобы повысить качество отображения документов на экране, можно использовать шрифты TrueType из Windows. Далее подробно рассказывается где взять и как правильно установить все необходимые шрифты.

Установка шрифтов

Информацию о том, где можно найти растровые шрифты для X Window, и о том, как их установить, следует поискать в разделе Шрифты Х window и/или Шрифты для X Window. Вам нужно достать и установить шрифты в кодировке CP1251.

Информацию об установке TrueType шрифтов можно найти в разделе Шрифты TrueType.

Информацию об установке Type1 шрифтов можно найти в разделе Шрифты Type1.

Установка StarOffice

Перед установкой убедитесь, что в вашем домашнем каталоге доступно не менее 260Мб. Процесс установки подробно описан в Инструкции по инсталляции StarOffice 5.2.

Подключение шрифтов Type1 для печати

Для того, чтобы работать с кириллицей в StarOffice, необходимо сначала добавить новые шрифты к драйверу печати StarOffice -- библиотеке XPrinter. Для этого в пакет входит специальная утилита -- SPAdmin. Выполните её командой ~/office52/program/spadmin (~ означает домашний каталог). После этого нажать кнопки "Add Fonts"  -> "Browse" и указать каталог, где лежат Type-1 шрифты -- например, /usr/share/fonts/MICROSOFT-CP1251/Type1.

Далее подтвердите установку всех перечисленных шрифтов. Подсистема печати StarOffice готова к работе.

Выбор кодировки для работы со StarOffice

Как уже упоминалось выше, StarOffice 5.2 может работать в одной из трёх кодировок: KOI8-R, ISO8859-5 и CP1251. Каждая из этих кодировок имеет свои достоинства и недостатки. Попробуем разобраться.

  1. KOI8-R. Единственное достоинство -- позволяет отправлять письма и сообщения в группы новостей в этой же кодировке, и в ней же сохранять документы .html. Все остальное -- сплошные недостатки: слишком много вопросительных знаков при импорте из Microsoft Word.
  2. ISO8859-5. Единственная кодировка, которая позволяет работать со встроенными в эту версию словарями для проверки русской орфографии и переносов. Имеет также большинство украинских (кроме "г с чубом") и белорусские буквы. Недостатки: письма, отправленные в этой кодировке, не читаются большинством доступных клиентов, в том числе netscape messenger'ом. Кроме того, при нажатии кнопки "отображать непечатные символы" вместо привычных значков наблюдаются русские буквы "З"  и "Ж".
  3. CP1251. Наиболее удачная, на наш взгляд, кодировка для тех, у кого нет проблем с русской орфографией: 100% импорт из Micro$oft Office, полный набор специальных символов, включая Евро, возможность работать на любом из славянских языков. Недостатки -- русский словарь недоступен, письма отправляются в ISO8859-5.

Вывод: если нужна почта и новости -- работаем в KOI8-R, нужен словарь -- ISO8859-5, во всех остальных случаях -- CP1251.

Для запуска StarOffice в кодировке, отличной от системной, можно указать полное имя locale непосредственно в командной строке, например:

LANG=ru_RU.CP1251 ~/office52/program/soffice

Либо же можно подредактировать сам файл ~/office52/program/soffice, или файлы kdlnk, или написать свои сценарии для запуска StarOffice в различных кодировках.

Для ввода украинских букв достаточно сменить раскладку клавиатуры -- например, при помощи переключателя kkb.

Печать из StarOffice

Для вывода на принтер StarOffice генерирует данные в формате PostScript. Дополнительная русификация интерпретатора Ghostscript не требуется, так как все необходимые шрифты встраиваются в документ.

Как это происходит?

Попробуем разобраться для чего производились все перечисленные выше действия. Как уже упоминалось, в качестве драйвера печати StarOffice использует библиотеку Bristol Xprinter. Эта библиотека может использовать шрифты только в формате Type1, если шрифт содержит более 256 символов, используются только первые 256 в порядке, описанном в векторе кодировки шрифта. В комплекте со шрифтом обязательно должен быть файл метрики в формате .afm.

При установке шрифтов программой SPAdmin информация о шрифте добавляется в файл xp3/psstd.fonts в формате, сходном с форматом файлов fonts.dir/fonts.scale. В каталоге xp3/pssoftfonts и xp3/fontmetrics/afm создаются символические ссылки соответственно на файлы шрифта и метрики. После этого Xprinter "узнает"  о том, что у него появился новый шрифт.

При запуске StarWriter запрашивает у Xprinter список установленных шрифтов. Только шрифты, перечисленные в psstd.fonts, появятся в списке доступных шрифтов StarWriter'а. А для отображения на экране из X-сервера запрашивается первый попавшийся шрифт, у которого в названии второе поле (Family) совпадает с тем, что написано в psstd.fonts, при этом поля Foundry и Encoding игнорируются. То есть если в Xprinter установлен шрифт в одной кодировке, а в X -- в другой, использовать их в StarOffice практически невозможно. Это происходит со стандартными шрифтами Times, Helvetica и Courier.

Проблемы при работе со StarOffice

Основная проблема заключается в том, что в этой версии безнадёжно испорчены все фильтры для работы с форматами, которые не предусматривают указания кодировки -- text, rtf, Word6.0/95. При сохранении в любом из этих форматов русские буквы заменяются на "?". То есть обмен документами с пользователями Windows возможен только через формат Word/Excel 97/2000. Выше упоминалось, что некоторые почтовые клиенты плохо переносят письма в кодировке ISO8859-5, несмотря на явное указание этой кодировки. Кроме того, мы не рекомендуем использовать функцию замены стандартных шрифтов документа (Сервис - Параметры - Текстовый документ - Стандартные шрифты), так как это может вызвать проблемы.


Вперед Назад Содержание