Про шрифты с продолжением. Часть 8
Управление шрифтами в TЕX
Что такое TЕX
Прежде всего поясним, о чем, собственно, идет речь. TЕX — это система верстки текстов, преимущественно различных научных статей и технической литературы. Надо сразу сказать, что TЕX не какой-то текстовый редактор. Это, скорее, язык программирования или разметки. Причем довольно простой — с ним можно вполне комфортно работать, зная набор из, скажем, 20 команд (правил).
Слово TЕX составлено из заглавных греческих букв: тау, эпсилон и хи, являющихся корнем слова «техника». TЕX не рекомендуется путать с TЕX (тэкс) — это совсем другая программа.
Первое, что нужно знать о TЕX, — его форматы. Формат Plain принимается по умолчанию и в оригинале поддерживает только американский вариант английского языка. Но существует целый ряд его русификаций.
LATЕX
Plain TЕX не слишком удобен для комфортного набора и верстки математических текстов. Для упрощения такой работы, а также для интеграции многочисленных наработок Лэсли Лэмпорт (Leslie Lamport) создал свой формат — LATЕX (к слову, Майкл Дэвид Спивак (Michael David Spivak) создал еще одну распространенную реализацию — AMS-TЕX). LATЕX на единой основе (\begin{окружение}...\end{окружение}) дает широкому кругу пользователей возможность решать почти все задачи по написанию статей при минимуме знаний. LATЕX — наиболее популярный набор макрорасширений системы верстки TЕX, который облегчает набор сложных документов.
Всё, что можно сделать в LATЕX’е, можно сделать и в Plain TЕX’е, но благодаря различным упрощениям использование макропакетов зачастую позволяет избежать сложного программирования.
Пакет дает возможность автоматизировать многие задачи набора текста и подготовки статей, включая набор текста на нескольких языках, нумерацию разделов и формул, перекрестные ссылки, размещение иллюстраций и таблиц на странице, ведение библиографии и др. Кроме базового набора, существует множество пакетов расширения.
Общий внешний вид документа в LATЕX определяется стилевым файлом. Существует несколько стандартных стилевых файлов для статей, книг, писем и т.д., кроме того, многие издательства и журналы предоставляют собственные стилевые файлы, что позволяет быстро оформить публикацию, соответствующую стандартам издания.
Термин LATЕX относится только к языку разметки, он не является текстовым редактором. Для того чтобы создать документ с его помощью, надо набрать TЕX-файл в каком-нибудь текстовом редакторе. В принципе, подойдет любой редактор, но большинство людей предпочитают использовать специализированные, которые облегчают работу по набору текста и его разметке.
Будучи распространяемым под лицензией Project Public License, LATЕX относится к свободному программному обеспечению.
Главная идея этой системы состоит в том, что авторы должны думать о том, что они пишут, не беспокоясь о конечном визуальном облике. Готовя свой документ, автор указывает логическую структуру текста (разбивая его на главы, разделы, таблицы, изображения), а LATЕX уже решает вопросы его отображения. Так содержание отделяется от оформления. Оформление при этом или определяется заранее (стандартное), или разрабатывается для конкретного документа. Это похоже на стили оформления, которые применяются в текстовых процессорах, или на использование стилевых таблиц в HTML.
NFSS (New Font Selection Scheme)
Произвольный шрифт в LATЕX’е полностью характеризуется набором из пяти атрибутов: внутренняя кодировка (ENC), гарнитура (family), насыщенность (series), начертание (shape) и размер (size). На восприятие текста влияет также расстояние между строками, которое можно изменять, задавая расстояние baselineskip в единицах длины или вводя масштабный коэффициент baselinestretch. Любой атрибут можно задавать независимо от других, получая в результате множество разных вариантов. Такая схема выбора шрифтов получила название New Font Selection Scheme (NFSS), то есть новая схема выбора шрифтов. Поскольку она давно перестала быть новой, ее еще иногда называют ортогональной, чтобы подчеркнуть ее основное отличие от схемы, использовавшейся в предыдущей версии LATЕX 2.09, где невозможно было изменить насыщенность шрифта, не изменив его начертание.
Отдельные характеристики текущего шрифта изменяются при помощи деклараций:
\fontencoding{ENC}
\fontfamily{family}
\fontseries{series}
\fontshape{shape}
\fontsize{size}{baselineskip}
\linespread{baselinestretch}
Каждая из них устанавливает один из атрибутов; исключение составляет декларация “\fontsize”, которая задает одновременно два параметра. Поскольку параметры baselineskip и baselinestretch характеризуют не столько шрифты, сколько макет полосы набора, есть и другой способ их настройки.
Перечисленные декларации только подготавливают переключение шрифта. Поскольку зачастую нужно изменять несколько атрибутов одновременно, было бы неразумно загружать шрифты после указания отдельного атрибута. Реальное переключение шрифта производит декларация
“\selectfont”, которая должна следовать за перечисленными декларациями безо всякого промежутка (допускаются только пробелы). Набор изменяемых атрибутов при этом может быть любым. Например, можно изменить гарнитуру и насыщенность шрифта или только одно начертание. Важно, чтобы между декларированием атрибутов и “\selectfont” не было никакого текста. Декларация “\usefont{ENC}{family}{series}{shape}” — это сокращенный вариант набора деклараций “\font...” с последующим переключателем “\selectfont”, устанавливающий четыре из пяти атрибутов (кроме размера).
В обычном документе, как правило, ни одну из перечисленных выше деклараций не используют. К их помощи приходится прибегать для получения шрифтов с необычным сочетанием атрибутов, например прямого курсива
({\usefont{T2A}{cmr}{m}{ui}текст}).
TЕX и DVI
DVI (от англ. DeVice Independent — аппаратно независимый) — формат выходных файлов издательской системы TЕX. Для генерации файлов в формате DVI используются текстовые файлы на языке TЕX, но, в отличие от них, файлы DVI не приспособлены для чтения человеком, они содержат двоичные данные, описывающие визуальное представление документа способом, не ориентированным на какой-либо формат изображения, монитор или принтер (отсюда название формата). Файлы DVI обычно подаются на вход другой программы (называемой DVI-драйвером), которая преобразует их в графические данные. Например, многие дистрибутивы TЕX включают программу предпросмотра файлов DVI на мониторе, которая является драйвером. Драйверы также используются для конвертирования файлов DVI в другие форматы (такие как PostScript, PDF) и для печати. В Википедии для получения изображений математических формул применяется PNG-драйвер.
Описание формата DVI Формат DVI разрабатывался с тем условием, чтобы быть компактным и простым для машинной обработки. По этой причине файл DVI представляет собой последовательность команд на «машиноподобном» языке. Каждая команда начинается с 8-битного кода, за которым следуют необязательные байты параметров. Например, команды с кодами в группе от 0x00 до 0x7F (0-127 в десятичной системе), set_char_i, печатают один символ и сдвигают воображаемый курсор вправо на ширину соответствующего изображения. В то же время команда с кодом 0xF7 (247), pre (преамбула; эта команда должна быть первой в DVI-файле), имеет как минимум 14 байтов параметров и необязательный комментарий длиной до 255 байт. В общих чертах файл формата DVI состоит из преамбулы, одной или более страниц и заключительной части. Имеется шесть переменных состояния: h, v, w, x, y, z; где Шрифты загружаются из файлов TFM и как таковые не содержатся в DVI-файле. Вместо этого хранятся лишь ссылки на них. На каждый загруженный один раз шрифт можно сослаться с помощью внутреннего индекса. Это сделано для уменьшения размеров файлов. Формат DVI также ориентирован на кодировку символов в шрифтах, а не на кодировку используемой системы. Это означает, что, например, основанная на EBCDIC система может свободно обрабатывать файл DVI, созданный в системе, которая базируется на ASCII. |
Исходный текст на языке TЕX может быть (по крайней мере, частично) восстановлен из файлов DVI, хотя получаемые при этом конструкции могут и не совпадать с оригинальными высокоуровневыми конструкциями языка, особенно если в исходном тексте использовались расширения стандартного TЕX.
DVI отличается от PostScript и PDF тем, что не поддерживает встроенные шрифты (документы в форматах PostScript и PDF могут содержать как непосредственно встроенные шрифты, так и ссылки на внешние шрифты). При печати или просмотре файла DVI не нужно иметь все шрифты, на которые он ссылается; будут показаны только символы имеющихся шрифтов.
Типы шрифтов
Некоторое время спустя после изобретения LATЕX мог работать только со шрифтами METAFONT. Выбор шрифтов METAFONT и сегодня небольшой, поэтому документы LATЕX имеют легко узнаваемый вид.
Д. Кнут назвал созданную им коллекцию из 31 шрифта семейством Computer Modern, хотя в традиционном понимании это, скорее, метасемейство, то есть набор семейств шрифтов. METAFONT позволяет получить из одного исходного описания множество совершенно различных шрифтов. Новые шрифты получаются варьированием нескольких входных параметров. Прямые, наклонные, курсивные, контурные (пустотелые), жирные и тонкие, с засечками (серифами) и рубленые — все получаются из одного исходника, в качестве которого служит небольшая программа, записанная в файле с расширением *.mf.
Современный LATЕX обеспечивает доступ к шрифтам любых типов, которые применяются в компьютерных системах. Однако процедура подключения шрифтов, разработанных для иных компьютерных приложений, не очень-то проста. Рядовой пользователь должен использовать пакеты шрифтов, адаптированные для LATЕX специалистами. Процедура адаптации заключается в генерации метрических файлов шрифтов (с расширением *.tfm) и файлов определения шрифтов (с расширением *.fd). Это всё непросто, поэтому обычному пользователю достаточно знать, как установить существующий пакет шрифтов, а эта процедура мало чем отличается от установки любого другого пакета системы LATЕX. Однако если обычный пакет состоит из файлов с расширением *.sty, то шрифтовой пакет включает еще много файлов других типов.
Как только пакет установлен, достаточно загрузить его в редактируемый документ с помощью “\usepackage”. Например, пакет TimesC загружается так: “\usepackage[math]{TimesC}”.
PSNFSS, PSNFSSx — пакеты коллекции PSNFSS применяются для подключения набора 35 стандартных шрифтов PostScript фирмы Adobe, содержащих только буквы латинского алфавита. Бесплатный клон этих шрифтов распространяется в составе программы Ghostscript. Коллекция PSNFSSx является усовершенствованной версией пакетов PSNFSS.
pxfonts, txfonts — пакеты pxfonts и txfonts подключают шрифты PostScript соответственно в гарнитурах Palatino и Times как в тексте, так и в математических формулах, создавая сбалансированный печатный документ. Необходимые шрифты распространяются в составе бесплатной программы Ghostscript, но в них отсутствуют русские буквы.
pscyr — пакеты коллекции pscyr подключают некоторые свободно распространяемые русские PostScript-шрифты.
FontsC — пакеты коллекции FontsC подключают шрифты TrueType и OpenType, входящие в состав русифицированных версий операционной системы Windows, a также некоторые свободно распространяемые русские PostScript-шрифты.
Шрифты METAFONT
Однако вернемся к шрифтам METAFONT. Для создания шрифтов совместно с TЕX’ом используется специально разработанная Д. Кнутом система METAFONT, в которой шрифты описываются программами на специализированном языке программирования Meta.
Кнут начал разработку METAFONT в 1977 году и выпустил первую версию в 1979-м. Применяемая ныне версия появилась еще в 1984 году.
METAFONT чаще всего запускается без непосредственного участия пользователя. Файлы DVI содержат лишь ссылки на соответствующие гарнитуры шрифтов, а не сами растровые или векторные шрифты, что возможно, например, в PostScript. Следовательно, когда требуется просмотреть, распечатать или сконвертировать файл DVI, необходим доступ непосредственно к изображениям символов в гарнитурах. Большинство дистрибутивов TЕX сконфигурировано таким образом, что недоступные шрифты с необходимым разрешением автоматически генерируются вызовами METAFONT. Гарнитуры затем сохраняются для последующего использования.
Шрифты METAFONT являются векторными в своей основе. Но всякий раз при создании публикации из векторных генерируются растровые изображения знаков. Процесс растеризации, то есть преобразования в растровое изображение с необходимым разрешением, занимает слишком много времени даже на самых мощных компьютерах. Поэтому шрифты приходится генерировать заранее и хранить в растровом виде на диске компьютера в файлах с расширением *.pk. Для принтера каждого типа требуется свой комплект pk-шрифтов.
С ростом производительности компьютеров необходимость в предварительной генерации растровых шрифтов отпала сама собой и появилась возможность генерировать растр на лету, то есть по мере возникновения потребности в шрифтах с определенным размером и разрешением. Первой программой, где была реализована генерация pk-шрифтов на лету, была многократно упоминавшаяся dvips, и произошло это в 1994 году. Однако вновь сгенерированные растровые шрифты до сих пор записываются на жесткий диск компьютера, чтобы сэкономить время в следующий раз.
Шрифты PostScript
Современные DVI-драйверы также могут работать со шрифтами PostScript. Некоторые программы используют эти шрифты напрямую. Другие же на лету генерируют из них pk-шрифты. Так, например, действует YAP из библиотеки MiKTЕX.
За пределами России PostScript-шрифты давно стали стандартом для большинства реализаций LATЕX’a, вытеснив pk-шрифты. Этому способствовало наличие множества хороших коммерческих шрифтов. Имеется также PostScript-версия шрифтов семейства Computer Modern. Однако среди этих шрифтов практически отсутствуют такие, где были бы русские буквы. Лишь фирма ParaType предоставила русским пользователям LATЕX’а в бесплатное пользование шрифты гарнитуры Literaturnaya. PostScript-версия mf-шрифтов семейства LH, где имеются буквы кириллицы, появилась в 2001 году в составе комплекта PostScript-шрифтов CM-Super.
Шрифты CM-Super относятся к типу композитных шрифтов, которые по классификации фирмы Adobe обозначаются как Туре 0. Каждый шрифт Туре 0 может содержать тысячи символов, упорядоченных в виде дерева, листья которого содержат шрифт Туре 1. Шрифт Туре 1 написан на языке PostScript и организован в виде набора именованных процедур, рисующих контуры изображения отдельного символа. Когда запрашивается символ с определенным кодом, программа-растеризатор сначала просматривает вектор кодировки, который устанавливает соответствие кода имени процедуры. Затем найденная процедура рисует растровое изображение для текущего разрешения выходного устройства.
Шрифты pk, будучи внедренными в ps-файл, относятся к Туре 3. Они внедряются в виде растра, поэтому качество документа может деградировать, если он будет напечатан на устройстве, разрешение которого отличается от заказанного при создании документа.
Шрифты TrueType
Шрифты TrueType на удивление мало применяются в системе LATЕX. Этому есть простое объяснение. Во-первых, они появились позже, чем шрифты PostScript. Во-вторых, шрифты TrueType невозможно внедрить в документ PostScript без потери качества, а без внедренных шрифтов документ может неправильно отображаться на другом компьютере. Шрифты TrueType (и OpenType) успешно внедряются в документы PDF, но эта возможность, как и формат PDF, появилась сравнительно недавно. Современные DVI-вьюеры обеспечивают работу со шрифтами TrueType, генерируя на лету pk-шрифты из исходных векторных изображений литер.
Использование шрифтов TrueType практически решает проблему дефицита хороших шрифтов для русских пользователей LATЕX’а.
Характеристики шрифтов
Далее речь пойдет о так называемых командах низкого уровня, которые применяются для загрузки шрифтов. С их помощью опытный пользователь может подключить шрифты, не прибегая к загрузке пакетов посредством
“\usepackage”. Большинство шрифтовых пакетов состоит из одной или, максимум, трех подобных команд, а поскольку комбинаций выбора шрифтов может быть огромное множество, просто нецелесообразно писать такие пакеты на все мыслимые и немыслимые случаи жизни.
Итак, шрифты характеризуются следующими параметрами.
Настройка METAFONT и генерация шрифтовШрифты TЕX хранят размеры литер и их начертания порознь. Файлы начертаний символов шрифта имеют формат GF (Generic Font) и PK (PacKed font). По умолчанию GF-файлы обладают именами, совпадающими с именем tfm-файла, и расширением, указывающим разрешающую способность устройства, для которого сгенерирован шрифт (шрифты TЕX генерируются для конкретного разрешения на определенном устройстве). В версии MS-DOS (из дистрибутива sbtex) при установке METAFONT получается такая структура каталогов: MF -MFBASES -MFINPUTS Настройка системы сводится к запуску программы sbmfset.exe, установка переменных окружения необязательна. У программы mf (основная утилита системы) также существуют загружаемые дампы памяти, называемые базами (например, у TЕX — plain.fmt, у METAFONT — plain.base). Создание базы делается так: inimf plain input local dump Полученный plain.base переносится в MFBASES. Сгенерировать шрифт, к примеру cmr12, можно следующей командой: mf ‘&cm’ ‘mode:=cdvi; mag:=magstep(0);input cmr12’ Расшифруем написанное. Первый параметр имеет то же назначение, что и для TЕX, — имя базы. Далее идет «имя устройства». Как уже было сказано, METAFONT учитывает в своей работе особенности конкретных физических устройств, для чего в файле modes.mf хранится множество их описаний. Устройство cdvi, по-видимому, нестандартно, оно определяется дополнительно в файле local.mf. Следующий параметр задает масштабирование шрифта (в TЕX и METAFONT определены стандартные коэффициенты масштабирования, называемые magstep(0)—magstep(6) и образующие геометрическую прогрессию: 1; 1,2; 1,44 и т.д.; естественно, также имеется способ задания произвольного масштаба). Наконец, последний параметр определяет имя генерируемого шрифта. Если программа отработает без ошибок, то она выведет на экран поочередно все символы шрифта (а в log-файл — текстовые сообщения об этом же). Для шрифта создается два файла: метрическая информация о шрифте (*.tfm) и графический образ символов — GF-файл, который имеет имя вида: cmr12.180, если ваше устройство вывода поддерживает 180 точек на дюйм. С помощью стандартной программы GFtoPK можно упаковать его: gftopk cmr12.180 и получить из него cmr12.180pk (в GNU/Linux) или cmr10.pk (в MS-DOS). Обратите внимание: при генерации dvi-файла TЕX записывает в него контрольную сумму используемых шрифтов, а программы просмотра и печати DVI сравнивают ее со шрифтами, доступными в момент вывода. Таким образом гарантируется полное сходство результатов работы. |
Кодировка
Кодировка устанавливает соответствие между кодом символа и литерой, то есть его изображением.
LATЕX имеет собственную схему кодирования, которую называют внутренней кодировкой, чтобы отличать ее от внешней кодировки, то есть кодовой страницы, используемой операционной системой. Примером внутренней кодировки являются T1, T2A и OML. Как правило, внешняя кодировка должна быть указана в исходном тексте документа LATЕX. Это особенно важно для языков, подобных русскому, которые исторически имели множество вариантов кодировки. Внутреннюю кодировку, применяемую по умолчанию, выбирает пакет babel в зависимости от указанного набора языков, используемых в документе.
Есть еще кодировка внутри файлов шрифтов, но о ней обычный пользователь LATЕX’a должен думать в последнюю очередь.
Шрифты METAFONT могут содержать не более 256 символов. Соответственно кодом служит число от 0 до 255. Шрифты OpenType могут содержать десятки тысяч символов, а следовательно, имеют более сложную схему кодирования.
Гарнитура
Обладающее собственным наименованием семейство начертаний шрифта, имеющих общие стилевые (гарнитурные) особенности и отличительные детали рисунка знаков, но различающихся насыщенностью, пропорциями и углом наклона знаков. Каждая гарнитура характеризуется так называемыми гарнитурными признаками.
Контрастность
Соотношение толщины основных и соединительных штрихов. Шрифт может быть неконтрастным (monoweight), малоконтрастным (low contrast), контрастным (contrast) и сверхконтрастным (high contrast). Гарнитура Times более контрастная, чем гарнитура CM Roman, которая, в свою очередь, более контрастная, чем гарнитура Courier, и т.д.
Засечки
В антиквенных шрифтах — короткий, обычно перпендикулярный штрих, которым начинается и заканчивается основной штрих знака. В старой литературе иногда называется «отсечка». Один из основных признаков шрифтовой формы. Засечки бывают односторонними и двусторонними. Их форма может быть разнообразной: треугольной, прямоугольной, закругленной, декоративной, в виде тонкой горизонтальной линии и т.д. Засечки могут быть скругленными в месте соединения с основным штрихом (adnate serif), а могут присодиняться под углом без скругления (adrupt serif).
Насыщенность и пропорциональность
В группе шрифтов, принадлежащих к одной гарнитуре, выделяют шрифты с различной насыщенностью и пропорциональностью.
Насыщенность — это отношение толщины основных штрихов к высоте прямого знака. Встречаются такие наименования насыщенности (в порядке ее увеличения):
- Ultra Light, Thin, Extra Light, Light — светлые и сверхсветлые шрифты;
- Book, Regular, Plain, Normal, Medium — нормальные шрифты;
- Demi, Demi Bold, Semi Bold, Bold — полужирные шрифты;
- Extra Bold, Heavy, HeavyFace, Black, Flat, Extra Black, Ultra Black, Obese — жирные и сверхжирные шрифты.
Пропорциональность шрифта связывают с шириной букв. Для точного определения выбирается буква М и вычисляется отношение ее ширины и высоты. Различают узкие, нормальные и широкие гарнитуры:
- Very Condensed, Condensed — сверхузкие и узкие шрифты;
- Normal — нормальные шрифты;
- Expanded, Very Expanded — широкие и сверхширокие шрифты.
Кроме пропорциональных имеются шрифты с фиксированной шириной символов — моноширинные шрифты; их называют также машинописными. Они применяются при наборе листингов компьютерных программ, а также в печатных машинках.
В LATЕX’e насыщенность и пропорциональность шрифта характеризует его серия (series).
Начертание
В терминологии LATЕX почти все гарнитуры имеют так называемое прямое (upright) начертание (другой термин — shape (форма шрифта)). Большинство книг набраны прямым шрифтом, а курсивный (italic) и наклонный (slanted, oblique) шрифты используются для смыслового выделения текста. Иногда курсив одновременно является наклонным, но это необязательно. Курсивный шрифт может быть и прямым (upright italic). Еще одно распространенное начертание — капитель (small caps). Рукописные гарнитуры обычно поставляются только в одном начертании, которое формально классифицируют как курсивное.
Наклонный шрифт может быть получен путем трансформации прямого шрифта. Однако некоторые программы, в том числе pdflatex, не поддерживают трансформацию наклона шрифтов TrueType, а внедрение трансформированного шрифта в документ PDF в растровом виде сопряжено с потерей качества.
Кегль
Размер шрифта, то есть его кегль, традиционно измеряют в пунктах (pt). В отличие от металлического набора, кегль у компьютерных шрифтов не является абсолютной мерой. Скорее это некоторое значение, выбранное разработчиком шрифта для ориентировки пользователей. Различие особенно заметно, когда гарнитуры от разных производителей используются в одном документе и набраны одним кеглем. Некоторые шрифтовые пакеты позволяют нивелировать видимые различия, вводя масштабные коэффициенты.
Качество шрифтов
Существуют и другие характеристики.
В некоторых словах имеются комбинации символов, расстояние между которыми кажется непропорционально большим, как расстояние между буквами «Т» и «Д» или «A» и «V». Специальный метод изменения расстояния между символами называется кернингом. Кернинг может быть как положительный (когда знаки раздвигаются), так и отрицательный (когда знаки вдвигаются друг в друга).
Другой способ улучшения внешнего вида текста — изменение расстояния между символами в зависимости от кегля (размера) шрифта. При наборе основного текста обычно используются шрифты небольшого кегля (как правило, от 10 до 12 пунктов), и для улучшения читаемости расстояние между символами делают немного больше. С увеличением размера шрифта относительное расстояние между символами постепенно уменьшается. Это повышает компактность текста и позволяет воспринимать его как цельное графическое изображение. Трекинг шрифтов METAFONT обеспечивается наличием шрифтов, специально спроектированных для наиболее часто используемых размеров. В других шрифтах трекинг вычисляется по специальным формулам для любого размера.
Шрифты PostScript и TrueType содержат дополнительную информацию, называемую хинтами, которая позволяет улучшить растровое изображение при значительном уменьшении или увеличении размера шрифта. Особенно полезны хинты при печати документов на устройствах с малым разрешением, поскольку округление до целых значений координат контуров букв приводит к исчезновению одних линий и утолщению других. Хинты препятствуют этому, уравнивая толщину линий и сохраняя тем самым эстетическую привлекательность литер. Если быть точным, то, говоря о хинтах, надо подразумевать шрифты в формате PostScript Type 1, тогда как аналогичную информацию применительно к шрифтам в формате TrueType обычно называют инструкцией.
Стандартные кодировки
В LATЕX существуют два основных класса кодировок: текстовые и математические. Если не вдаваться в частности, то первые используются в обычном тексте, а вторые — только в математических формулах. Аббревиатура текстовых кодировок начинается с букв T или OT. Аббревиатуры математических кодировок должны начинаться с букв M или OM. Список стандартных кодировок приведен в табл. 1. Если не загружен пакет babel, то в текстовом режиме по умолчанию применяется кодировка OT1. Чтобы выбрать кодировку T1, во входной файл можно вставить “\font encoding{T1}\selectfont”.
Попытка тем же способом включить кодировку T2A закончится крахом, если не загружен пакет babel (с опцией russian, bulgarian или ukrainian), поскольку по умолчанию загружены только кодировки OT1, T1, OML, OMS и OMX.
Любую кодировку можно подготовить к использованию, загрузив пакет fontenc. Пакет babel с опцией russian, который надо всегда загружать при подготовке документов на русском языке, избавляет от забот по выбору требуемой кодировки. По умолчанию он применяет кодировку T2A.
Кодировка OT1
Внутренняя кодировка, введенная Д. Кнутом, создателем TЕX’a, содержит всего 128 символов. Она называется TЕX text encoding и в LATЕX2ε имеет обозначение OT1, причем буква «О», означающая old или obsolete, подчеркивает то, что она устаревшая. В основном она содержит буквы латинского алфавита, занимая первую (верхнюю) половину 256-местной таблицы с кодами от 0 до 127 (или от 00 до 7F в шестнадцатеричном исчислении).
Кодировки T1 и TS1
Кодировка Т1 содержит буквы национальных алфавитов почти всех европейских языков, кроме кириллицы. Главной задачей было обеспечение корректного переноса слов, содержащих буквы с диакритическими знаками. С той же целью часть символов была выделена в отдельную кодировку TS1.
Кодировки T2A, T2B, T2C
Символы кириллицы содержатся в кодировках T2A, T2B и T2C, разработанных русским отделением пользователей TЕX’a (CyrTUG). Верхняя половина этих кодировок повторяет кодировку T1, поэтому они вполне пригодны для печати, например, английских текстов. Александр Ходулев и Ольга Лапко разработали шрифты для кодировок T2A, T2B и T2C. Буквы русского алфавита есть в любой из них.
Таблица 1. Стандартные кодировки
ENC |
Кодировка |
Примечание |
OT1 |
TЕX text |
Кодировка Д. Кнута |
T1 |
TЕX extended text |
ЕС-кодировка (Корк) |
T2A |
T2AEncoding |
Латиница и кириллица |
T2B |
T2BEncoding |
Латиница и кириллица |
T2C |
T2CEncoding |
Латиница и кириллица |
Lxx |
A local encoding |
Локальная кодировка |
U |
Unknown |
Неизвестная кодировка |
OML |
TЕX math italic |
Математический курсив |
OMS |
TЕX math symbols |
Математические символы |
OMX |
TЕX math large symbols |
Математические большие символы |
Вот список национальных языков, поддерживаемых каждой из этих кодировок:
Т2А: абазинский, аварский, агульский, адыгейский, азербайджанский, алтайский, балкарский, башкирский, белорусский, болгарский, бурятский, гагаузский, даргинский, дунганский, ингушский, кабардино-черкесский, казахский, калмыцкий, каракалпакский, карачаевский, карельский, киргизский, коми, крымско-татарский, кумыкский, лакский, лезгинский, македонский, марийский, молдавский, монгольский, мордовский, ногайский, осетинский, русский, рутульский, сербский, табасаранский, таджикский, татарский, тати, телеутский, тофаларский, тувинский, туркменский, удмуртский, узбекский, украинский, ханты, цыганский, чеченский, чувашский.
Т2В: абазинский, аварский, агульский, адыгейский, алеутский, алтайский, балкарский, белорусский, болгарский, бурятский, гагаузский, даргинский, долганский, дунганский, ингушский, ительменский, кабардино-черкесский, калмыцкий, каракалпакский, карачаевский, карельский, кетский, киргизский, коми, корякский, крымско-татарский, кумыкский, курдский, лакский, лезгинский, мансийский, марийский, молдавский, монгольский, мордовский, нанайский, нганасанский, негидальский, ненецкий, ногайский, русский, рутульский, селькупский, табасаранский, таджикский, татарский, тати, телеутский, тофаларский, тувинский, туркменский, уйгурский, ульчи, хакасский, ханты, цыганский, чеченский, чукотский, шорский, эвенкийский, эскимосский, юкагирский, якутский.
T2C: абхазский, болгарский, гагаузский, карельский, коми, калмыкский, крымско-татарский, манси, молдавский, мордовский, нанайский, уйгурский, ногайский, русский, саамский, староболгарский, старорусский, крымско-татарский, тати, телеутский, ханты, эвенкский.
Другие кодировки
Кодировки OML, OMS и OMX используются в математических формулах. Кодировка OML содержит в основном буквы из математического курсива и некоторое количество математических символов, большая часть которых сосредоточена в шрифтах с кодировкой OMS. Шрифты с кодировкой OMX служат для построения математических символов переменного размера.
Кодировка U применяется в том случае, когда порядок символов не совпадает ни с одной известной кодировкой.
Кодировки, начинающиеся с буквы L, называются локальными. Локальные кодировки могут вводить национальные группы пользователей TЕX’a. Например, предшественницей нынешних T2A, T2B и T2C была кодировка LCY.
Стандартные гарнитуры
Первая буква в аббревиатуре гарнитуры обозначает производителя шрифта. Так, буква «р» закреплена за компанией Adobe; буквы «m», «t» и «j» обозначают соответственно Monotype, ParaType и Microsoft. Исключение сделано для шрифтов Computer Modern. Для них зарезервированы сразу две буквы — «cm».
Стандартные начертания
Типичные значения параметра начертания shape перечислены в табл. 2.
Большинство гарнитур имеют как минимум прямое и курсивное (или наклонное) начертания. Однако у рукописных шрифтов часто есть только курсивное начертание.
Стандартные насыщенности
Стандартные значения параметра series, который задает насыщенность и пропорциональность шрифта, перечислены в табл. 3.
Стандартные размеры
Размер шрифта size и межстрочное расстояние baselineskip в декларации “\fontsize” указываются в любых единицах длины (можно написать 10 pt или 3 mm).
Вместо явного задания размера шрифта с помощью “\fontsize” рекомендуется использовать декларации из ряда “\tiny” ... “\Huge”. Они позволяют выбирать шрифты заданных размеров.
В профессиональных издательских системах обычно доступны кегли 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 30 и 36. Отсутствующие размеры получают линейным масштабированием. Декларации переключения размера шрифта (от “\tiny” до “\Huge”) обычно оперируют размерами 5, 6, 7, 8, 9, 10, 10,95; 12, 14,4; 17,28; 20,74; 24,88 пунктов, которые приблизительно составляют геометрическую прогрессию с множителем 1,2. При этом шрифты спроектированы для размеров 5, 6, 7, 8, 9, 10, 12 и 17 пунктов, а отсутствующие размеры получают линейным масштабированием ближайшего из приведенных значений.
Пользовательские команды
Переключение гарнитуры, насыщенности и начертания шрифта выполняется простыми командами. Эти команды пользовательского уровня и соответствующие им атрибуты перечислены в табл. 4. Например, вместо
“\usefont{OT1}{cmr}{m}{it}” обычно достаточно написать “\itshape”.
Соответствие пользовательских команд и деклараций очевидно. Команда “\textit{...}” эквивалентна конструкции “{\itshape ...\/}”, причем \/ вставляет корректирующий пробел при переходе от наклонного или курсивного шрифта к прямому.
Таблица 2. Стандартные начертания
Shape |
Начертание |
Примечание |
n |
Normal |
Прямой шрифт |
it |
Italic |
Курсивный шрифт |
sl |
Slanted (oblique) |
Наклонный шрифт |
sc |
Caps and small caps |
Капитель |
ui |
Upright italic |
Прямой курсивный шрифт |
Таблица 3. Стандартные насыщенности
Series |
Насыщенность |
Примечание |
l |
Light |
Светлый шрифт |
m |
Medium |
Нормальный шрифт |
b |
Bold |
Полужирный шрифт |
bx |
Bold extended |
Широкий полужирный шрифт |
sb |
Semi-bold |
Полужирный шрифт |
c |
Condensed |
Узкий шрифт |
Декларация “\itshape” действует менее прямолинейно, а именно: она переключает атрибут начертания shape в состояние, которое хранится в команде “\itdefault”. Иными словами, она равнозначна комбинации “\fontshape{\itdefault}\selectfont”.
По умолчанию “\itdefault” определена как «it», но достаточно изменить ее на «ui», как наклонный курсив превратится в прямой (если тот имеется в используемой гарнитуре).
Таблица 4. Пользовательские команды переключения шрифта и соответствующие им атрибуты
Команда |
Декларация |
Атрибут |
Значение по умолчанию |
\textrm{text} |
\rmfamily |
family |
\rmdefault (cmr) |
\textsf{text} |
\sffamily |
family |
\sfdefault (cmss) |
\texttt{text} |
\ttfamily |
family |
\ttdefault (cmtt) |
\textmd{text} |
\mdseries |
series |
\mddefault (m) |
\textbf{text} |
\bfseries |
series |
\bfdefault (bx) |
\textup{text} |
\upshape |
shape |
\updefault (n) |
\textit{text} |
\itshape |
shape |
\itdefault (it) |
\textsl{text} |
\slshape |
shape |
\sldefault (sl) |
\textsc{text} |
\scshape |
shape |
\scdefault (sc) |
\emph{text} |
\em |
shape |
|
\textnormal{text} |
\normalfont |
ENC |
\encodingdefault (OT1) |
family |
\familydefault (\rmdefault) |
||
series |
\seriesdefault (\mddefault) |
||
shape |
\shapedefault (\updefault) |
Другие пользовательские команды переключения шрифтов также реализованы через промежуточные команды “\cmddefault”, как показано в табл. 4. В последней колонке этой таблицы в скобках указаны значения атрибутов, применяемые по умолчанию в стандартных классах печатных документов. В частности, команды
“\textrm”, “\textsf” и “\texttt” печатают текст шрифтом заданной гарнитуры. Им соответствуют декларации
“\rmfamily”, “\sffamily” и “\ttfamily”. Они инструктируют компилятор, что от текущей позиции до конца текущей группы фигурных или командных скобок нужно применять шрифт выбранной заранее гарнитуры, аббревиатура которой хранится соответственно в декларациях “\rmfamily”, “\sffamily” и “\ttfamily”. Команды рекомендуется применять для выделения отдельного слова или короткой фразы, а декларации лучше использовать при определении новых команд или процедур. Для выделения длинных абзацев удобнее использовать процедурную форму деклараций, причем имя процедуры получается удалением обратного слэша из имени декларации. Например, чтобы выделить несколько абзацев шрифтом без засечек, их нужно поместить между “\begin{sffamily}” и “\end{sffamily}”.
Чтобы напечатать документ шрифтами Adobe Bookman, AvantGarde и Courier, в преамбулу входного файла достаточно поместить декларации
\renewcommand{\rmdefault}{pbk}
\renewcommand{\sfdefault}{pag}
\renewcommand{\ttdefault}{pcr}
Большинство шрифтов ограничено двумя вариантами насыщенности: нормальной и полужирной. Следуя этой традиции, LATЕX на уровне пользовательских команд также ограничивается этими двумя вариантами: “\textmd” и “\textbf”. Двум командам соответствуют две декларации: “\mdseries” и “\bfseries”. Используемые ими атрибуты хранятся в командах “\mddefault” и “\bfdefault”. Первая содержит атрибут нормальной насыщенности, вторая — полужирной. В стандартных классах “\bfdefault” имеет значение “bx”. Некоторые шрифты PostScript есть только в варианте “b”. Поэтому пакеты, спроектированные для работы с этими шрифтами, присваивают параметру
“\bfdefault” значение “b”. Впрочем, если компилятор не находит шрифт серии “b”, он автоматически подменяет его шрифтом серии “bx”, и наоборот.
Четыре команды: “\textup”, “\textit”, “\textsl” и
“\textsc” — изменяют форму шрифта, проводя выбор из четырех наиболее распространенных начертаний: прямого, курсивного, наклонного и капители соответственно. Им соответствуют четыре декларации: “\upshape”,
“\itshape”, “\slshape” и “\scshape”. Еще четыре команды: “\updefault”, “\itdefault”, “\sldefault” и “\scdefault” — хранят атрибуты начертаний.
Команда “\emph” и соответствующая ей декларация
“\em” используются для выделения текста. Они изменяют начертание шрифта так, чтобы он отличался от окружающего текста. Если до “\emph” применялся прямой шрифт (“\upshape” или “\scshape”), то выделенный текст печатается курсивом (“\itshape”). В остальных случаях “\emph” включает прямой шрифт (“\upshape”).
Гарнитуру, насыщенность и начертание шрифта можно изменять независимо, но из двух подряд деклараций переключения гарнитуры (или насыщенности, или начертания), разумеется, действует последняя.
Наконец, команда “\textnormal” и соответствующая ей декларация “\normalfont” выбирают основной шрифт документа, которым печатается его большая часть. Компилятор автоматически выбирает основной шрифт вне области действия любых деклараций переключения шрифтов. Поэтому команды “\textnormal” и “\normalfont” чаще всего используются при определении новых команд или процедур, когда важно, чтобы текст был напечатан одним и тем же шрифтом независимо от окружения.
Гарантированный результат достигается тем, что
“\normal” переключает все атрибуты шрифта, кроме его размера. Иными словами, ее действие эквивалентно команде
“\usefont{\encodingdefault}{\familydefault}{\seriesdefault}{\shapedefault}”, где “\encodingdefault”, “\familydefault”, “\seriesdefault”, “\shapedefault” — команды, которые соответственно указывают на кодировку, гарнитуру, насыщенность и начертание шрифта, применяемого по умолчанию. Формат LATЕX содержит следующие определения этих команд:
\newcommand{\encodingdefault}{OT1}
\newcommand{\familydefault}{\rmdefault}
\newcommand{\seriesdefault}{\mddefault}
\newcommand{\shapedefault}{\updefault}
Наконец, отметим, что на пользовательском уровне нет специальных команд для выбора кодировки шрифта, поскольку в обычном печатном документе нет необходимости производить динамическое переключение кодировки. Для печати всего документа в целом шрифтами с кодировкой, отличной от используемой по умолчанию, следует загрузить пакет fontenc.
Замена кодировки
LATЕX допускает применение нескольких кодировок в одном документе. Множественность внутренней кодировки — это норма. Например, в математических формулах обычно используются все имеющиеся математические кодировки, хотя процесс переключения кодировок там скрыт от пользователя.
Внутренняя кодировка
Команда “\symbol{code}” печатает символ с кодом code, соответствующим порядковому номеру позиции символа в текущей внутренней кодировке шрифта. Код может быть выражен десятичным числом от 0 до 255, его восьмеричным или шестнадцатеричным эквивалентом, которому должен предшествовать апостроф ’ или “ соответственно.
«\symbol{130} \symbol{146} \symbol{150} \\» дает
« ЋЎЏ »
Аналогично
«\symbol{’202} \symbol{’222} \symbol{’226} \\»
или
«\symbol{«82} \symbol{«92} \symbol{«96}»
Для того чтобы какая-либо кодировка стала основной, достаточно загрузить пакет fontenc с опцией. Например:
“\usepackage[T2A]{fontenc}”.
Пакет fontenc уникален в том смысле, что его можно загружать несколько раз и каждый раз с новым значением необязательного аргумента, тогда как повторная загрузка других пакетов с различающимся набором опций считается ошибкой. Если в необязательном аргументе
“\usepackage” перечислены две, три или больше кодировок, то основной кодировкой будет объявлена последняя, но будут сделаны необходимые приготовления для применения всех кодировок. Например, “\usepackage[T2A,T1]{fontenc}” подготавливает использование в одном входном файле кодировок T2A и T1. Подготовка заключается в том, что происходит определение команд, специфичных для кодировок T2A и T1. Пакет babel, в зависимости от выбранного языка, может самостоятельно выбрать подходящую кодировку. Например, для русского языка он выбирает кодировку T2A. Чтобы выбрать иную кодировку, ее нужно указать до загрузки пакета babel в явном виде:
\usepackage[T2B,T1]{fontenc}
\usepackage[english,russian]{babel}
При этом порядок перечисления кодировок при загрузке пакета fontenc уже не играет роли, потому что пакет babel сам разберется, какую кодировку выбрать для каждого языка.
Таблица 5. Внешние кодировки
Опция |
Кодировка |
applemac |
Macintosh |
ascii |
ASCII (для кодов 32-127) |
decmulti |
DEC Multinational Character Set |
cp437 |
IBM 437 (MS DOS, Европа) |
cp437de |
IBM 437 (MS DOS, Германия) |
cp850 |
IBM 850 (MS DOS, Европа) |
cp852 |
IBM 852 (MS DOS, Центральная Европа) |
cp855 |
IBM 855 (MS DOS, Европа) 1 |
cp865 |
IBM 865 (MS DOS, Норвегия) |
cp866 |
IBM 866 (MS DOS, Россия) 1, 2 |
cp1250 |
Windows (Центральная Европа) |
cp1251 |
Cyrillic Windows (Россия, Украина, Белоруссия) 1 |
cp1252 |
Windows (Европа, Германия) |
iso88595 |
ISO-8859-5 (UNIX, Россия, Украина, Белоруссия) 1 |
isoir111 |
ISO-IR-111 ECMA Cyrillic (UNIX, Россия, Украина, |
koi8-r |
Russian Net Character Set (UNIX, Россия, Украина, |
koi8-ru |
Cyrillic KOI8 (UNIX, Россия, Украина, Белоруссия) 1 |
koi8-u |
Extended KOI8-R and ISO-IR-111 (UNIX, Россия, |
latin1 |
ISO 8859-1 (Западная Европа) |
latin2 |
ISO 8859-2 (Восточная Европа) |
latin3 |
ISO 8859-3 (другие европейские языки) |
latin4 |
ISO 8859-4 (Северная Европа, Балтия) |
latin5 |
ISO 8859-9 (Турция) |
latin9 |
Latin-9 (Западная Европа) 3 |
maccyr |
Cyrillic Mac (Россия) 1 |
macukr |
Cyrillic Mac (Украина) 1 |
ncc |
NCC 1, 4 |
next |
Next |
Выбор кодировок в преамбуле входного файла рекомендуется делать до загрузки шрифтовых пакетов. В некоторых случаях это позволяет избежать загрузки шрифтов, которые реально не используются.
Внешняя кодировка
Коллекция пакетов cyrillic, которая должна быть обязательной частью любой реализации системы LATЕX, содержит все существующие или существовавшие кодировки с буквами русского алфавита. Полный список возможных опций пакета inputenc приведен в табл. 5. Например, чтобы откомпилировать исходный текст, подготовленный на русском языке в среде Windows, достаточно включить в преамбулу входного файла команду “\usepackage[cp1251]{inputenc}”.
Объявить об изменении внешней кодировки посреди входного файла можно при помощи декларации
“\inputencoding{ext-encoding} (inputenc)”.
В ее аргументе ext-encoding должна быть одна из перечисленных в табл. 5 опций пакета inputenc.