Работа в системе LaTeX

Приложение В. Шрифты и LaTeX

Разбить на страницы
Показывать лекцию целиком

Гарнитуры

Если при чтении книжек вы больше интересовались содержанием, чем оформлением, то могли и не заметить, что они набираются разными шрифтами. Здесь мы имеем в виду не шрифтовые выделения (скажем, жирный — или, как сказали бы полиграфисты, полужирный шрифт), а различные рисунки шрифтов. Полиграфисты называют их гарнитурами. Заглянув в выходные данные книги (особенно изданной несколько десятилетий назад), можно найти там слова " Гарнитура обыкновенная новая" или "Литературная гарнитура". Эти слова означают разные рисунки букв; каждая из гарнитур может включать в себя шрифты различных начертаний (прямые, курсивные, полужирные) и размеров.

Вот несколько образцов различных гарнитур:

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

Что нужно LaTeX'у от шрифта?

Допустим, нам понравилась какая-то гарнитура и мы хотим использовать такой (точнее говоря, очень похожий) на нее шрифт в системе LaTeX. Чтоб для этого нужно?

Прежде всего нужно иметь файлы, описывающие формы букв выбранной нами гарнитуры. Проще всего, если эти файлы подготовлены в формате METAFONT (как это сделано Кнутом для шрифтов Computer Modern). Тогда с помощью программы METAFONT из них можно получить tfm-файлы с описанием размеров букв.

Немного сложнее обстоит дело со шрифтами в формате Type 1. Но и для этого формата написаны программы, позволяющие полуавтоматически изготавливать tfm-файлы (основная проблема, требующая ручного вмешательства, — несовпадение кодировок).

После этого можно попросить LaTeX использовать эти файлы вместо обычно используемых им tfm-файлов для шрифтов Computer Modern, и получить dvi-файл. (Подробнее об этом см. ниже). Но чтобы использовать этот файл, dvi-драйвер должен либо иметь pk-файлы с матрицами букв, либо уметь использовать вместо них описания шрифтов в формате Type 1 (и иметь эти описания). Обе возможности встречаются на практике. Например, программа xdvi (показывающая dvi-файлы на экране в X Window System под UNIX) использует pk-шрифты. Эти шрифты программа xdvi получает из шрифтов в формате Type 1 с помощью программы gsftopk. А программа dvips просто вставляет в результирующий PostScript-файл описания соответствующих шрифтов в формате Type 1. (При этом используется механизм "виртуальных шрифтов", но его описывать мы не будем.)

При этом получающийся файл имеет то достоинство, что он не зависит от разрешения: в нем содержатся не матрицы букв того или иного размера (как будет с pk-шрифтами), а векторные описания форм букв. Такие PostScript-файлы лучше выдерживают увеличение.

Для примера посмотрите на надпись "Это строка (string)!" в приложении Б. При изготовлении соответствующего PostScript-файла были использованы pk-шрифты разрешения $$600$$ dpi. Затем эта надпись была включена в текст с увеличением вдвое, поэтому в итоговом оригинал-макете она соответствовала разрешению $$300$$ dpi и выглядела хуже, чем такая же надпись в разрешении $$600$$ dpi. Такого не случается с векторными шрифтами: сравните с надписью "This is a string", которая использует (предусмотренные стандартом PostScript) векторные шрифты. Впрочем, заметить разницу в плавности линий можно только на хорошем принтере и при внимательном разглядывании.

Добавление одного шрифта

УСТЬ теперь у нас есть tfm- и pk-файлы для какого-то шрифта (и они находятся в тех местах, где TeX их ищет). Как добавить такой шрифт в наш текст? Самый простой и самый грубый способ добавить новый шрифт предоставляет команда \newfont. Ее формат таков:

\newfont{команда}{описание_шрифта}

Здесь команда — это придуманная вами команда для переключения на добавляемый вами шрифт. Имя этой команды надо выбирать так же, как первый аргумент команды \newcommand (оно не должно быть занято, не должно начинаться на end} и т.п.). Что же до описания_шрифта, то в простейшем виде это — просто имя tfm-файла, соответствующего данному шрифту.

Вот пример. В свое время Дональд Кнут шутки ради разработал причудливый шрифт, называемый cmff10 (его tfm-файл и mf-файл называются соответственно cmff10.tfm и cmff10.mf, и входят в стандартный комплект). Чтобы пользоваться этим шрифтом в своем тексте, включите в преамбулу строку

\newfont{\weird}{cmff10}

и вы сможете писать тексты вроде

$$\newfont{\weird}{cmff10} The letters look {\weird strange.}$$
The letters look 
{\weird strange.}

Команду, определенную с помощью \newfont, можно использовать только так, как в этом примере, а именно, переключаться с ее помощью на новый шрифт внутри группы, и в этом отношении она похожа на команды переключения шрифтов наподобие \itshape или \bfseries. На этом, однако, сходство и кончается: \itshape или \bfseries меняют начертание шрифта, но сохраняют его размер, в то время как команда, определенная с помощью \newfont, всегда выдает шрифт одного размера — того, что записан в tfm-файле, на который вы ссылаетесь в ее втором аргументе. Далее, некоторые LaTeX'овские команды для переключения шрифтов (именно, команды, меняющие размер) не только переключаются на шрифт другого размера, но и меняют интерлиньяж (а также, кстати, размер невидимой линейки, создаваемой командой \strut ); команда, определенная с помощью \newfont, никакого влияния ни на интерлиньяж, ни на смысл команды \strut не окажет. Наконец, внутри математической формулы такая команда вообще будет проигнорирована.

Тем не менее, если вы нашли какой-то экзотический символ, который хотите несколько раз использовать, и нашли шрифт, в котором он есть, команда \newfont может быть полезна. Например, в шрифте wasy10, входящем во многие комплекты TeX'а, в позиции $$7$$ имеется символическое изображение телефона. Зная это, можно написать в преамбуле

\newfont{\wasyten}{wasy10}
\newcommand{\telephone}{\hbox{\wasyten\symbol{7}}}

и использовать команду .

Еще одно применение этой команды — масштабирование шрифтов. Чтобы подключить масштабированный шрифт с помощью команды \newfont, надо задать требуемое увеличение или уменьшение во втором аргументе команды \newfont. Оно задается с помощью TeX'овского "ключевого слова" scaled (без backlash'а!), за которым следует коэффициент масштабирования, умноженный на $$1000$$ (после умножения коэффициента на $$1000$$ должно получиться целое число). Например, для подключения шрифта, увеличенного в два с половиной раза, надо после имени tfm-файла написать scaled 2500, а для шрифта, размеры которого уменьшены на 30%, надо написать scaled 700.

Можно также задавать увеличение не в явном виде, а сообщить TeX'у требуемый "характерный размер" шрифта. Для этого надо во втором аргументе команды \newfont написать после имени tfm-файла масштабируемого шрифта

at размер

где размер — требуемый "характерный размер", заданный обычным образом в TeX'овских единицах длины или через TeX'овские параметры длины, а at — еще одно TeX'овское " ключевое слово" (пишущееся без backslasha'а). Если основной шрифт документа имеет кегль $$10$$, то характерный размер разумно выбирать равным 10pt}, если $$11$$ или $$12$$, то 11pt или 12pt.

Но, конечно, это зависит от ситуации. Скажем, можно написать

\newfont{\wasytwenty}{wasy10 at 20pt}
\newcommand{\bigtelephone}{\hbox{\wasytwenty\symbol{7}}}

и получить вдвое больший рисунок телефона:

Еще одно применение масштабирования можно увидеть в начале этого раздела, где с его помощью изготовлен инициал "П". При этом использован такой код:

\newfont{\initial}{zcr17 at 48pt}
\newbox{\literaP}
\savebox{\literaP}{\hbox{\initial П}}
\begin{wrapfigure}{l}{0.75\wd\literaP}
\vbox to 0.4\ht\literaP{%
   \vss \usebox{\literaP}%
   \vspace*{-0.2\ht\literaP}%
}%
\end{wrapfigure}
УСТЬ теперь...

Семейства шрифтов

Конечно, хотелось бы подключать к LaTeX'у не один шрифт фиксированного размера, а целый набор новых шрифтов таким образом, чтобы в tex}-файле можно было менять их начертание и размер с помощью команд, аналогичных рассмотренным нами в лекции 3.

Такие возможности действительно есть. Например, образцы шрифтов типа Times, приведенные на с. 360, были получены с помощью таких команд:

{\fontfamily{ptm}
\selectfont
\begin{center}
This is Times font sample\\
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz\\
\fontshape{it}\selectfont
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
\fontseries{b}\fontshape{n}\selectfont
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz\\
\fontshape{it}\selectfont
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
\end{center} }

В них устанавливаются желаемые параметры шрифта, а затем этот шрифт вызывается командой \selectfont.

Сначала мы устанавливаем семейство шрифтов с помощью команды

\fontfamily{ptm}

(где ptm есть внутреннее имя семейства шрифтов типа таймс). При этом остальные параметры (размер, насыщенность, начертание) остаются неизменными. Команда \selectfont переключает шрифт. Затем мы меняем начертание с помощью команды \fontshape, делая его курсивным (it}, прямое начертание обозначается n), и снова переключаем шрифт с помощью \selectfont. После этого мы меняем насыщенность с помощью команды \fontseries (при этом b} означает полужирный шрифт, а обычный шрифт обозначается m}) и возвращаемся к прямому начертанию. И так далее.

Есть еще команда изменения размера шрифта, явно указывающая кегль и интерлиньяж. Например, команды

\fontfamily{ptm} \fontsize{17pt}{24pt}
\selectfont This is Times Roman\\ 17 pt / 24 pt

позволяют напечатать две строки шрифтом типа таймс с размером 17 pt и расстоянием между строками 24 pt:

$$\fontfamily{ptm} \fontsize{17pt}{24pt} \selectfont This is Times Roman\\ 17 pt / 24 pt$$

Команды \fontfamily, \fontseries, \fontshape и \fontsize являются командами "нижнего уровня": как правило, надо использовать не их, а команды типа \textbf, \textit, \textsf или же команды смены начертания и насыщенности ( \rmfamily, \sffamily, \upshape, \bfseries и др.).

Но откуда же LaTeX узнаёт, что, например, команда \rmfamily предписывает переключиться на семейство шрифтов, известное под внутренним именем cmr, а команда \bfseries устанавливает насыщенность, известную под внутренним именем bx? Эта информация содержится в определении следующих команд:

КомандаОпределение в стандартных классах
\rmdefault cmr
\sfdefault cmss
\ttdefault cmtt
\bfdefault bx
\mddefault m
\itdefault it
\sldefault sl
\scdefault sc
\updefault n

Читать эту таблицу надо следующим образом: если семейство, насыщенность или начертание шрифта обозначается буквами xx, то команда \xxfamily, \xxseries или \xxshape (или команда с одним аргументом \textxx ) установит соответствующий атрибут шрифта с внутренним именем, указанным в таблице в строчке с командой \xxdefault.

Сказанное объясняет рецепт уменьшения ширины жирного шрифта, приведенный на стр.114: переопределяя команду \bfdefault, мы заставляем LaTeX по командам \textbf или \bfseries (а также \bf ) выбирать шрифт насыщенности b}, менее широкой, чем насыщенность bx, получающаяся по умолчанию.

А если, например, вы захотите, чтобы основным шрифтом вашего документа был шрифт без засечек, то можно переопределить в преамбуле команду \rmdefault:

\renewcommand*{\rmdefault}{cmss}

(согласно нашей таблице, cmss — это LaTeX'овское внутреннее имя для шрифта без засечек). Другой вопрос, будет ли это удачным полиграфическим решением. Не слишком увлекайтесь подобными экспериментами, если вы не полиграфист!

Еще о русских шрифтах: подробности для знатоков

Сейчас мы сообщим вам две новости: хорошую и плохую. Хорошая состоит в том, что большая часть из сказанного выше совершенно не нужна для пользования различными шрифтами в LaTeX'е, поскольку разработчики стилевых пакетов о вас позаботились. Скажем, если организаторы конференции просят присылать статьи в гарнитуре Times, достаточно добавить в преамбулу команду

\usepackage{times}

После этого все шрифты заменятся на шрифты типа таймс без каких-либо дополнительных усилий с вашей стороны. (Правда, могут появиться новые overfull'ы, так как размеры букв другие). Эта команда не меняет шрифтов, используемых в формулах, и они выглядят не очень хорошо (гарнитура таймс в среднем жирнее обычной Computer Modern). Чтобы изменить и шрифты для формул, скажите

\usepackage{mathptmx}

Более подробно смена шрифтов в тексте и формулах обсуждается в книге [6]; учтите только, что соответствующие пакеты часто меняются.

Теперь плохая новость: все перечисленные удобства (возможности легко использовать различные гарнитуры) доступны лишь при использовании латинских шрифтов. Если вы попробуете добавить русские буквы к нашим примерам, то ничего хорошего не получится. Прежде всего это связано с нехваткой свободно распространяемых русских шрифтов различных гарнитур, а также с различиями в кодировках русских символов. Этим бедам и посвящен настоящий раздел, в котором автор попытался кратко изложить известную ему информацию про положение дел с русскими шрифтами. Вряд ли она сильно поможет многим на практике, но если она побудит кого-либо из читателей взяться за дело и исправить положение (хотя бы немного), то автор будет считать свою задачу выполненной. Автор заранее приносит извинения тем (вероятно, многочисленным) коллегам, о работах которых у него нет достаточной информации; вина, разумеется, тут только его.

Для использования разнообразных русских шрифтов в LaTeX'е нужно решить две проблемы: (а) найти сами шрифты и (б) написать файлы для подключения их к LaTeX'у. В этом разделе мы обсудим первую из этих проблем, а второй из них посвятим следующий раздел.

Нас будут интересовать шрифты двух типов: METAFONT-шрифты и PostScript-шрифты. Еще бывают так называемые TrueType шрифты, их подключение к TeX'у в принципе возможно, но менее удобно, и о них мы говорить не будем.

METAFONT-шрифты.

Эти шрифты в свою очередь делятся на две категории. В первом случае авторы ставили своей целью экстраполировать Computer Modern на русские буквы (и, в частности, заимствовали формы общих букв из Computer Modern). Таковы шрифты AMS, шрифты Глонти и шрифты Лапко (см. ниже) Во втором случае авторы старались сделать русский шрифт определенного вида, не связывая себя требованиями единства стиля с Computer Modern.

В комплект шрифтов AMS (Американского математического общества), распространяемый практически со всеми версиями TeX'а, входят шрифты, разработанные в Humanities and Arts Computing Center, University of Washington (в 1989 году). Эти шрифты использовались в различных публикациях AMS (в основном — для печати русских названий статей и книг в списках литературы). Вот образец шрифта wncyr10}:

Эти шрифты, если можно так выразиться, "импортные". Первыми " отечественными" русскими METAFONT-шрифтами, кажется, были шрифты, разработанные в Институте физики высоких энергий (Протвино) при участии Наны Глонти и Александра Самарина (их иногда называют шрифтами Глонти). Вот образец шрифта cmcyr10} (взят с сервера ftp.dante.de})

Эти шрифты (с небольшими изменениями отдельных букв, сделанными в основном А.Шенем) были использованы при подготовке этой книги. Приведем их (с этими изменениями) в том же масштабе:

Наконец, Ольга Лапко и Андрей Ходулев разработали шрифты, получившие название "LH-шрифтов". Многие считают, что из различных METAFONT-продолжений шрифта Computer Modern именно эти шрифты обладают наиболее высоким качеством. Кроме того, они включают в себя большой набор символов самых разных языков на кириллической основе. Можно надеяться, что они в будущем окончательно стабилизируются (пока что новые версии выходят довольно часто) и будут в разных версиях TeX'а столь же стандартны, как сейчас шрифты Кнута. (Уже сейчас LH-шрифты входят в большинство дистрибутивов TeX'а, обычно в не самых последних версиях. Впрочем, дело осложняется тем, что авторами этих шрифтов предусмотрено много разных версий для разных кодировок, причем они генерируются "на лету" с использованием довольно хитроумных и не везде работающих механизмов.)

Вот как выглядят русские буквы в этих шрифтах:

Разница между этими четырьмя образцами заметна, если приглядеться внимательно. (Обратите внимание на буквы "Л", " Д" и "Э".)

К шрифтам второй категории относятся шрифты, авторы которых не стремились следовать стилю Computer Modern.

При поддержке Российского фонда фундаментальных исследований в рамках проекта "Русский TeX" Л.Н.Знаменская и С.В.Знаменский разработали шрифты, отчасти напоминающие гарнитуру "Обыкновенная новая". Вот образцы этих шрифтов (мы воспроизводим предварительный вариант этих шрифтов, вошедший, с разрешения разработчиков, в использованную при подготовке книги русификацию):

Видно, что общие для латинского и русского алфавита буквы имеют несколько разные начертания (латинские буквы не изменились по сравнению с оригинальными шрифтами Computer Modern Кнута)

Были предприняты также попытки изготовить METAFONT-файлы на основе других популярных гарнитур. Часть полученных таким образом шрифтов также вошли в использованную при подготовке этой книги русификацию. Вот образцы этих шрифтов:

Завершая разговор о METAFONT-шрифтах, отметим, что существует (не вполне завершенный) набор программ ps4mf (подробную информацию можно найти на сервере ftp.dante.de), который позволяет полуавтоматически изготавливать METAFONT-шрифты из Type 1 шрифтов. Однако получающиеся шрифты плохо приспособлены к печати при низких и средних разрешениях (например, для 300 dpi). Дело в том, что и METAFONT, и Type 1 предусматривают задание границ букв в виде кусочно-гладких кривых, и эти кривые легко перевести из одного формата в другой с минимальными изменениями. Проблема в том, что при переводе шрифтов в черно-белую матрицу кривые подвергаются округлению с неизбежными погрешностями. Если, скажем, ширина вертикальной палочки в букве "Ш" не есть точное кратное размера точки, то может случиться, что три палочки (которые имеют одну и ту же ширину в точном представлении) при округлении приобретут разную ширину. Кроме того, из-за того же округления буква "Ш" может потерять осевую симмметрию, что нежелательно. Эта проблема существует и для METAFONT'а, и для Type 1, но решается по-разному. Язык METAFONT предоставляет автору шрифтов возможности самому влиять на округление так, как он этого пожелает. В шрифтах Type 1 используются указания особого вида (hints), которые побуждают интерпретатор PostScript'а производить округления так, как это хотелось автору шрифта. При этом формат и интерпретация этих указаний — дело довольно сложное, и без потерь в METAFONT они не переводятся.

Обратный перевод (из METAFONT'а в Type 1) сталкивается не только с проблемой округления, но и с тем, что в METAFONT'е (который представляет собой язык программирования) есть разнообразные средства описания шрифтов, а не только описание контуров. На практике, изготавливая Type 1 шрифты из METAFONT-шрифтов, сначала изготавливают матрицы букв в высоком разрешении, после чего применяют программы, восстанавливающие границы кривых, и добавляют указания (hints) вручную или полуавтоматически.

PostScript-шрифты.

В отличие от кириллических METAFONT-шрифтов, которые можно пересчитать по пальцам, PostScript-шрифты с русскими буквами существуют в изобилии. Некоторые из них распространяются западными производителями (скажем, той же фирмой Adobe), но подавляющее большинство сделано в России. Этим, в частности, много занималась фирма "Параграф" (впоследствии шрифтовое подразделение фирмы получило название Paratype).

В отличие от METAFONT-шрифтов, которые (как правило) являются свободно распространяемыми, PostScript-шрифты надо покупать и нельзя выкладывать на сервер вместе с TeX-системой. Формально говоря, это не запрещает распространять вспомогательные файлы, необходимые для их подключения к TeX, как это делалось в течение многих лет с английскими PostScript-шрифтами. В конце концов, наиболее законопослушные пользователи могут шрифты купитьВпрочем, не всё так просто. Например, посмотрев на сайт www.paratype.com}, можно обнаружить разные типы лицензий. Одни ограничивают число принтеров, на которых можно печатать полученные файлы (тем самым, скажем, переслать статью с этими шрифтами коллегам уже нельзя), другие (лицензия на одну публикацию) требуют покупать отдельную лицензию на каждую статью и т.п. Вряд ли даже законопослушные пользователи станут широко использовать шрифты с такими лицензиями., а менее законопослушные пойдут в ближайший ларек за " пиратским" компакт-диском. Но и в том, и в другом случае нет никаких гарантий, что удастся достать именно ту версию шрифта, что была у разработчика вспомогательных файлов — русские шрифты еще менее стандартны, чем английские, и не только формы букв, но и их размеры и кодировка могут различаться в разных версиях.

В случае латинских шрифтов ситуация сильно упростилась благодаря фирме URW, которая разрешила распространять бесплатно некоторые наиболее популярные шрифты вместе с системой Ghostscript. Именно эти шрифты и были использованы нами в приведенных выше примерах гарнитур . К сожалению, насколько известно автору, этому примеру никто из фирм-производителей кириллических шрифтов не последовал, и "белых" (с ясным происхождением и свободно распространяемых без ограничений на использование при подготовке печатных и электронных документов) качественных PostScript-шрифтов автору найти не удалосьНедавно появились предназначенные для свободного распространения шрифты В.Филиппова, дополняющие упомянутые выше URW-шрифты русскими буквами; видимо, работа над ними еще не закончена. См. ftp://ftp.gnome.ru/fonts/urw}. Но есть некоторые "серые" шрифты:

  • Давным-давно фирма Urbansoft распространяла версию системы Linux, которая называлась "Открытое ядро" (занимавшую тогда несколько дюжин пятидюймовых дискет). В ее состав входили некоторые PostScript-шрифты с русскими буквами (в том числе комплект шрифтов типа литературной гарнитуры), однако они не содержали внутри себя сведений о копирайте. Возможно, какие-то из этих шрифтов послужили исходным материалом для пакета PSCyr (см. следующий пункт).
  • В состав нескольких недавних версий Linux входит пакет PSCyr. Один из разработчиков этого пакета, Александр Лебедев, пишет (цитируется по версии 0.4c-patch2, взятой с сервера ftp.vsu.ru}): Первые шрифты в коллекцию русских шрифтов $$\langle\ldots\rangle$$ были собраны Сергеем Наумовым в 1995 г. В этих шрифтах отсутствовала информация об изготовителе, однако по некоторым признакам это были просканированные изображения широко распространенных русских типографских шрифтов...

    В 1997 г. коллекция была дополнена шрифтами .Arial.}, Courier и Times фирмы Monotype, построенными из шрифтов стандартной поставки Windows...

    Свободно распространяемый шрифт ERKurier $$\langle\ldots\rangle$$ был добавлен Константином Чумаченко в версии 0.2, а шрифт Academy (неизвестного происхождения) — им же в версии 0.3.}".

    Кроме того, говоря об изменениях в версии 0.3, Лебедев пишет:

    для легализации коллекции шрифтов добавлен файл LICENSE.

    В этом файле говорится:

    Permission is granted to use, copy, and freely redistribute the fonts from the PSCyr font collection in any media\ldots provided that $$\langle\ldots\rangle$$ 1. any modification of\/ \upshape *.afm} and\/ \upshape *.pfb} files is forbidden. 2. the redistribution of the font(s) and the whole collection as separate computer file(s) should retain this license information\/

    В самих шрифтах встречаются: Monotype Corporation, AG Fonts Collection, Andrejs Grinbergs, Gavin Helf, Ares Software.

    В файле README к версии 0.3 написано:

    The typefaces included in this package originally come from The Monotype Corporation plc. (with changes by Eugene V.Demidov), Gavin Helf (with changes by Andrey Chernov); Paratype, division of Paragraph International. As to my knowledge, these fonts are placed into public domain and can be freely redistributed. (AUTHOR: Konstantin Chumachenko)\/

    Вопрос о том, насколько законно объявлять свободно распространяемыми шрифты неизвестного происхождения, не указывая никаких подтверждений того, что первоначальные разработчики поместили их в public domain, сложен, тем более что законы, касающиеся юридической защиты шрифтов, непросты для понимания и различны в разных странах. Мы условно относим эти шрифты к категории "серых", имея в виду лишь, что вопрос о законности их распространения кажется сложным. Впрочем, в условиях, когда на уличных лотках можно найти по бросовой цене базы данных государственных организаций и новейшие версии Windows, трудно представить себе, что именно эти шрифты станут темой юридических дебатов.

  • Наиболее понятна ситуация со шрифтами Литературной гарнитуры, разработанными фирмой Параграф (Paratype) по заказу Российского фонда фундаментальных исследований. (Заметим, что эта гарнитура отличается от других версий Литературной гарнитуры той же фирмы). По замыслу РФФИ, этот заказ должен был дать возможность готовить и распространять научные тексты, сверстанные в одной из наиболее распространенных традиционных гарнитур. К сожалению, прилагаемая к пакету лицензия не так проста для понимания. Там написано:

    In the following paragraphs ``fonts'' stands for Type 1 fonts together with metric files and also any conversions and renderings of them. You are allowed: to use fonts with any TeX distribution; to use fonts with any graphic editors for preparing pictures to be included with TeX documents; to use fonts with other programs (such as WWW browsers) for screening purpose only; to convert fonts into any format for above purposes; to include fonts into electronic documents (such as PDF); to distribute fonts together with RFBR TeX distribution

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

    You are not allowed to use fonts for hardcopy making with any programs except TeX drivers\/

    , что, формально говоря, запрещает печать включающего эти шрифты файла (полученного с помощью системы TeX) с использованием (скажем) программ Adobe Acrobat} или Ghostscript. Еще написано, что нельзя distribute this fonts as an independent package (так в оригинале), причем что такое в точности RFBR TeX distribution, с которой распространять можно, и где ее взять, не вполне ясно.

    Можно надеяться, что это лишь нечеткость формулировки и что дух лицензии важнее ее буквы.

  • Говоря об отсутствии "белых" кириллических PostScript-шрифтов, следует внести уточнение. Существуют совершенно легальные свободно распространяемые PostScript-шрифты в пакете CM-Super (автор — Владимир Волович), полученные преобразованием свободно распространяемых METAFONT-шрифтов (включая LH-шрифты, шрифты Computer Modern и другие). Но с точки зрения расширения ассортимента шрифтов этот пакет не особенно полезен, поскольку все входящие в него шрифты есть и в METAFONT-формате. Польза от него в другом: с его помощью можно готовить в системе TeX PostScript- и PDF-файлы, в которых использованы только шрифты Type 1 (такие файлы лучше приспособлены к просмотру в программе Acrobat Reader} и к печати на принтерах с высоким разрешением).

    Шрифты эти были получены так: сначала из METAFONT-текстов были получены матрицы высокого разрешения, а затем они преобразованы в формат Type 1 с помощью программ TeXtrace и Autotrace.

    Подключение шрифтов

    До сих пор мы говорили о наличии шрифтов как таковых, а не о механизме их подключения к системе LaTeX. Само по себе подключение не очень сложно, и можно надеяться, что если качественные разнообразные свободно распространяемые METAFONT- или PostScript-шрифты появятся, то вскоре будут написаны и LaTeX-определения, их подключающие.

    Тем не менее, скажем несколько слов о том, как работает механизм подключения шрифтов.

    Понятие кодировки. Пример: кодировка T1.

    Система LaTeX пытается реализовать следующую простую идею: набор символов и форма символов (гарнитура) являются независимыми координатами. Скажем, можно говорить о русских и латинских шрифтах (два значения первой координаты), а также о шрифтах гарнитуры таймс и гельветика (два значения второй координаты), и двигаться по каждой координате независимо.

    Несмотря на кажущуюся очевидность, этот принцип трудно реализовать буквально, и не только потому, что какие-то значения координат соответствуют отсутствующим в данном комплекте шрифтам, но и по более тонким причинам. Например, в какой-то гарнитуре может быть специальный символ { "fi"}, которым изображаются стоящие рядом буквы f и i (это называется " лигатурой", обратите внимание на отличие этого символа от набранных подряд букв:fi), а в другой гарнитуре соединять эти буквы не принято и такого символа нет.

    Тем не менее в первом приближении можно считать, что в системе LaTeX есть два независимых параметра: кодировка (encoding) говорит, какие символы имеются, а семейство (font family) определяет внешний вид символов. Мы уже упоминали кодировку T1, используемую при работе с неанглийскими языками на латинской основе. Рисунок B.1 показывает символы кодировки T1, представленные шрифтами семейства Computer Modern.

    (рис B.1) Кодировка T1

    Та же самая кодировка T1, представленная шрифтами семейства Helvetica, показана на рисунке B.2(рис B.2) Кодировка Т1:Helvetica

    В теории эти две таблицы должны отличаться лишь формой символов, но на практике это не совсем так: в нынешней версии LaTeX'а некоторые позиции в кодировке T1 в шрифте типа Helvetica не заполнены соответствующими буквами.

    Тем не менее кодировка T1 (ее еще называют Cork encoding, поскольку кодировка была утверждена на конференции TeXников в ирландском городе Корк) обеспечивает более или менее приемлемую основу для использования LaTeX'а с разными шрифтами и разными языками с латинской графикой.

    Впрочем, до сих пор по умолчанию используется так называемая кодировка OT1, в которой всего $$128$$ символов, представленных в оригинальных шрифтах Кнута. Эта кодировка показана на рисунках B.3 и В.4. в двух видах (обычные шрифты и tt}-шрифты).

    (рис B.4) Кодировка ОТ1(рис B.3) Кодировка ОТ1:семейство cmtt

    Читатель может заметить, что эти таблицы не соответствуют идее кодировки, объясненной выше: далеко не все символы в двух таблицах соответствуют друг другу. (А в курсивных шрифтах на месте доллара появляется фунт!) Причина этого понятна: шрифты разрабатывались Кнутом исходя из ограничения в $$128$$ символов и до появления общей схемы переключения шрифтов.

    Входная и внутренняя кодировки.

    Следует подчеркнуть, что слово "кодировка" в сочетании " кодировка T1" имеет не совсем обычный смысл. Эта кодировка, вообще говоря, не совпадает с кодировкой букв во входных файлах (а для некоторых символов вообще нет кода, который им соответствует во входном файле). Как же задается соответствие между ними? Есть два принципиально разных подхода.

    Первый вариант состоит в том, что в программу TeX встраивается дополнительный механизм (выходящий за рамки собственно TeX'а), который считывает таблицу соответствия между кодами и автоматически перекодирует входные символы. (Можно сказать, что TeX в узком смысле этого слова ничего не знает о входной кодировке.) Обратное перекодирование производится при выдаче log}-файлов и других текстовых файлов.

    Второй вариант, не выходящий за рамки TeX'а и применяемый в пакете inputenc, состоит в том, что символы входного потока становятся "активными", то есть становятся командами, порождающими символы во внутренней кодировке. Это, конечно, противоречит всей архитектуре TeX'а, поскольку там есть специальная "категория", называемая буквами (letters), а активные символы mdash; уже не буквы. В результате работа других пакетов может нарушиться, если они не готовы к такому повороту событий, в idx-файл попадают не буквы, а команды для них (что нарушает нормальную работу программ для обработки idx-файлов) и т.д. Зато, скажем, кодировку можно переключать "на лету" в середине текста, если это зачем-то понадобится.

    Кстати, внутренняя кодировка (при использовании так называемых виртуальных шрифтов) может не совпадать и с кодировкой, используемой в шрифте (будь то PostScript- или METAFONT-шрифт). Но в tfm-файлах используется как раз внутренняя кодировка.

    (рис B.6) Кодировка T2A(рис B.5) Кодировка T2В(рис B.7) Кодировка T2C

    Что же получается с русскими текстами? Для них есть несколько входных кодировок (koi8-r, cp1251, cp866) и несколько внутренних. Заметим, что при использовании одной внутренней кодировки не удается поместить в нее все кириллические символы, сохранив первую половину такой же, как в кодировке T1 (разных символов слишком много). Это было причиной появления кодировок T2A, T2B и T2C, в которых русские буквы стоят на одних и тех же местах, но вот дополнительные буквы разные. На рисунках В.5, В.6 и В.7 приведены соответствующие списки символов (набранные шрифтами LH mdash; на сегодняшний день единственными кириллическими шрифтами, эти кодировки поддерживающими).

    Представляет интерес также кодировка X2 (рис. В.8), в которой первая половина также используется для кириллических символов (в отличие от T2A, T2B и T2C, в ней присутствуют символы, необходимые для набора русских текстов в дореволюционной орфографии). Кроме этого, имеется кодировка OT2, соответствующая кодировке символов в русских шрифтах AMS, а также многие другие.

    (рис В.8) Кодировка X2

    Подключение шрифтов и fd-файлы.

    Итак, мы знаем, что имеются пять (вообще говоря) независимых атрибутов шрифта. Все эти атрибуты можно увидеть в сообщении об overfull'е (см. 116). Именно, там присутствует последовательность символов \OT1/cmr/m/n/10.95, в которой перечислены, через косую черту, атрибуты текущего шрифта (кодировка, семейство, насыщенность, начертание, размер). Их можно менять независимо.

  • Кодировка задается с помощью команды \fontencoding, единственным аргументом которой является имя кодировки. Пример: \fontencoding{T1}. Иногда в ответ на команду \fontencoding LaTeX может пожаловаться, что кодировка ему неизвестна. Тогда можно дать предварительно команду \DeclareFontEncoding таким, например, образом:
    \DeclareFontEncoding{T2C}{}{}
    (две пары пустых фигурных скобок mdash; не опечатка!). Может, конечно, случиться, что вы пытаетесь заказать кодировку, вообще отсутствующую в вашей установке LaTeX'а; тогда этот рецепт не сработает.
  • Семейство задается с помощью команды \fontfamily, единственный аргумент которой mdash; внутреннее имя семейства. Пример: \fontfamily{cmr} обозначает семейство Computer Modern Roman.
  • Насыщенность задается с помощью команды \fontseries, единственный аргумент которой mdash; внутреннее обозначение для насыщенности. Пример: \fontseries{bx} обозначает полужирный шрифт (см. таблицу на стр.366}).
  • Начертание задается с помощью команды \fontshape, единственный аргумент которой mdash; обозначение (опять же " внутреннее") для начертания. Пример: \fontshape{it} означает курсивное начертание.
  • Размер задается с помошью команды \fontsize, имеющей два аргумента: первый из них указывает кегль, а второй mdash; интерлиньяж (в пунктах). Пример: \fontsize{10}{12}. Интерлиньяж, указанный во втором аргументе команды \fontsize, будет умножен на коэффициент, являющийся значением команды \baselinestretch (по умолчанию, как мы помним, этот коэффициент равен единице). Теперь становится ясно, как работает прием для изменения интерлиньяжа во фрагменте текста, описанный ранее.
  • При этом само по себе задание атрибутов с помощью этих команд шрифта еще не меняет: чтобы шрифт действительно сменился, надо сначала задать одну или несколько приведенных выше команд, меняющих атрибуты, но непосредственно после них необходимо дать еще команду \selectfont.

    Через эти команды выражаются и команды более высокого уровня (скажем, \textbf или \emph ). Например, \normalfont ) в стандартных классах задается по существу так:

    \newcommand*{\normalfont}{%
    \fontencoding{OT1}\fontfamily{cmr}%
    \fontseries{m}\fontshape{n}%
    \selectfont
    }

    Остается объяснить, как проинформировать LaTeX, какие шрифты соответствуют тем или иным комбинациям атрибутов. Это делается с помощью специального файла с расширением fd. Вот, например, файл, который (в использованной нами русификации) подключает шрифты типа гельветика.

    \ProvidesFile{ot1zhr.fd}
      [Quasi Helvetica font definitions]
    \DeclareFontFamily{OT1}{zhr}{}
    \DeclareFontShape{OT1}{zhr}{m}{n}
       {  <5> <6> <7> <8> zhr5
          <9> <10> <10.95> zhr10
          <12> <14.4> zhr12
          <17.28><20.74><24.88> zhr12}{}
    \DeclareFontShape{OT1}{zhr}{b}{n}
       {  <5> <6> <7> <8> <9> <10> <12>
          <10.95> <14.4> <17.28> <20.74> <24.88>
           zhb10}{}
    \DeclareFontShape{OT1}{zhr}{bx}{n}
       {  <5> <6> <7> <8> <9> <10> <12>
          <10.95> <14.4> <17.28> <20.74> <24.88>
          zhbx10}{}
    \DeclareFontShape{OT1}{zhr}{m}{sl}
        { <5> <6> <7> <8> <9> <10> <12>
          <10.95> <14.4> <17.28> <20.74> <24.88>
          zhsl10}{}
    \DeclareFontShape{OT1}{zhr}{m}{it}{ <-> sub * zhr/m/sl }{}

    Сначала говорится, что определяется семейство zhr в кодировке OT1. (Что не вполне верно, так как в OT1 никаких русских букв нет.) Затем объясняется, что надо использовать в качестве светлых шрифтов прямого (не курсивного) начертания: шрифты zhr5, zhr10, zhr12 (выбор зависит от размера нужного шрифта, указанного в угловых скобках). Затем объясняется, что надо использовать в качестве полужирных ( bx) и наклонных ( sl) шрифтов. Наконец, в последней строке говорится, что (по причине отсутствия курсива в шрифтах типа гельветика) вместо курсива ( it) надо пользоваться наклонным ( sl) шрифтом.

    Как видите, ничего сложного в подключении нового семейства нет, если внутренняя кодировка шрифтов совпадает с кодировкой семейства, для которого они применяются. Если же нет, то нужно изготавливать виртуальные шрифты, описание чего выходит за рамки этой книги (есть по крайней мере два способа: один описан в документации к драйверу dvips, второй содержится в пакете fontinst ).

    В заключение еще раз скажем, что все эти (полезные скорее для общего понимания ситуации, чем практически) сведения приведены здесь в качестве затравки — чтобы вдохновить читателей на изготовление хороших и доступных для применения русских шрифтов.

    Может, попробуете?

    Страницы:

    Гарнитуры

    Если при чтении книжек вы больше интересовались содержанием, чем оформлением, то могли и не заметить, что они набираются разными шрифтами. Здесь мы имеем в виду не шрифтовые выделения (скажем, жирный — или, как сказали бы полиграфисты, полужирный шрифт), а различные рисунки шрифтов. Полиграфисты называют их гарнитурами. Заглянув в выходные данные книги (особенно изданной несколько десятилетий назад), можно найти там слова " Гарнитура обыкновенная новая" или "Литературная гарнитура". Эти слова означают разные рисунки букв; каждая из гарнитур может включать в себя шрифты различных начертаний (прямые, курсивные, полужирные) и размеров.

    Вот несколько образцов различных гарнитур:

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

    Что нужно LaTeX'у от шрифта?

    Допустим, нам понравилась какая-то гарнитура и мы хотим использовать такой (точнее говоря, очень похожий) на нее шрифт в системе LaTeX. Чтоб для этого нужно?

    Прежде всего нужно иметь файлы, описывающие формы букв выбранной нами гарнитуры. Проще всего, если эти файлы подготовлены в формате METAFONT (как это сделано Кнутом для шрифтов Computer Modern). Тогда с помощью программы METAFONT из них можно получить tfm-файлы с описанием размеров букв.

    Немного сложнее обстоит дело со шрифтами в формате Type 1. Но и для этого формата написаны программы, позволяющие полуавтоматически изготавливать tfm-файлы (основная проблема, требующая ручного вмешательства, — несовпадение кодировок).

    После этого можно попросить LaTeX использовать эти файлы вместо обычно используемых им tfm-файлов для шрифтов Computer Modern, и получить dvi-файл. (Подробнее об этом см. ниже). Но чтобы использовать этот файл, dvi-драйвер должен либо иметь pk-файлы с матрицами букв, либо уметь использовать вместо них описания шрифтов в формате Type 1 (и иметь эти описания). Обе возможности встречаются на практике. Например, программа xdvi (показывающая dvi-файлы на экране в X Window System под UNIX) использует pk-шрифты. Эти шрифты программа xdvi получает из шрифтов в формате Type 1 с помощью программы gsftopk. А программа dvips просто вставляет в результирующий PostScript-файл описания соответствующих шрифтов в формате Type 1. (При этом используется механизм "виртуальных шрифтов", но его описывать мы не будем.)

    При этом получающийся файл имеет то достоинство, что он не зависит от разрешения: в нем содержатся не матрицы букв того или иного размера (как будет с pk-шрифтами), а векторные описания форм букв. Такие PostScript-файлы лучше выдерживают увеличение.

    Для примера посмотрите на надпись "Это строка (string)!" в приложении Б. При изготовлении соответствующего PostScript-файла были использованы pk-шрифты разрешения $$600$$ dpi. Затем эта надпись была включена в текст с увеличением вдвое, поэтому в итоговом оригинал-макете она соответствовала разрешению $$300$$ dpi и выглядела хуже, чем такая же надпись в разрешении $$600$$ dpi. Такого не случается с векторными шрифтами: сравните с надписью "This is a string", которая использует (предусмотренные стандартом PostScript) векторные шрифты. Впрочем, заметить разницу в плавности линий можно только на хорошем принтере и при внимательном разглядывании.

    Добавление одного шрифта

    УСТЬ теперь у нас есть tfm- и pk-файлы для какого-то шрифта (и они находятся в тех местах, где TeX их ищет). Как добавить такой шрифт в наш текст? Самый простой и самый грубый способ добавить новый шрифт предоставляет команда \newfont. Ее формат таков:

    \newfont{команда}{описание_шрифта}

    Здесь команда — это придуманная вами команда для переключения на добавляемый вами шрифт. Имя этой команды надо выбирать так же, как первый аргумент команды \newcommand (оно не должно быть занято, не должно начинаться на end} и т.п.). Что же до описания_шрифта, то в простейшем виде это — просто имя tfm-файла, соответствующего данному шрифту.

    Вот пример. В свое время Дональд Кнут шутки ради разработал причудливый шрифт, называемый cmff10 (его tfm-файл и mf-файл называются соответственно cmff10.tfm и cmff10.mf, и входят в стандартный комплект). Чтобы пользоваться этим шрифтом в своем тексте, включите в преамбулу строку

    \newfont{\weird}{cmff10}

    и вы сможете писать тексты вроде

    $$\newfont{\weird}{cmff10} The letters look {\weird strange.}$$
    The letters look 
    {\weird strange.}

    Команду, определенную с помощью \newfont, можно использовать только так, как в этом примере, а именно, переключаться с ее помощью на новый шрифт внутри группы, и в этом отношении она похожа на команды переключения шрифтов наподобие \itshape или \bfseries. На этом, однако, сходство и кончается: \itshape или \bfseries меняют начертание шрифта, но сохраняют его размер, в то время как команда, определенная с помощью \newfont, всегда выдает шрифт одного размера — того, что записан в tfm-файле, на который вы ссылаетесь в ее втором аргументе. Далее, некоторые LaTeX'овские команды для переключения шрифтов (именно, команды, меняющие размер) не только переключаются на шрифт другого размера, но и меняют интерлиньяж (а также, кстати, размер невидимой линейки, создаваемой командой \strut ); команда, определенная с помощью \newfont, никакого влияния ни на интерлиньяж, ни на смысл команды \strut не окажет. Наконец, внутри математической формулы такая команда вообще будет проигнорирована.

    Тем не менее, если вы нашли какой-то экзотический символ, который хотите несколько раз использовать, и нашли шрифт, в котором он есть, команда \newfont может быть полезна. Например, в шрифте wasy10, входящем во многие комплекты TeX'а, в позиции $$7$$ имеется символическое изображение телефона. Зная это, можно написать в преамбуле

    \newfont{\wasyten}{wasy10}
    \newcommand{\telephone}{\hbox{\wasyten\symbol{7}}}

    и использовать команду .

    Еще одно применение этой команды — масштабирование шрифтов. Чтобы подключить масштабированный шрифт с помощью команды \newfont, надо задать требуемое увеличение или уменьшение во втором аргументе команды \newfont. Оно задается с помощью TeX'овского "ключевого слова" scaled (без backlash'а!), за которым следует коэффициент масштабирования, умноженный на $$1000$$ (после умножения коэффициента на $$1000$$ должно получиться целое число). Например, для подключения шрифта, увеличенного в два с половиной раза, надо после имени tfm-файла написать scaled 2500, а для шрифта, размеры которого уменьшены на 30%, надо написать scaled 700.

    Можно также задавать увеличение не в явном виде, а сообщить TeX'у требуемый "характерный размер" шрифта. Для этого надо во втором аргументе команды \newfont написать после имени tfm-файла масштабируемого шрифта

    at размер

    где размер — требуемый "характерный размер", заданный обычным образом в TeX'овских единицах длины или через TeX'овские параметры длины, а at — еще одно TeX'овское " ключевое слово" (пишущееся без backslasha'а). Если основной шрифт документа имеет кегль $$10$$, то характерный размер разумно выбирать равным 10pt}, если $$11$$ или $$12$$, то 11pt или 12pt.

    Но, конечно, это зависит от ситуации. Скажем, можно написать

    \newfont{\wasytwenty}{wasy10 at 20pt}
    \newcommand{\bigtelephone}{\hbox{\wasytwenty\symbol{7}}}

    и получить вдвое больший рисунок телефона:

    Еще одно применение масштабирования можно увидеть в начале этого раздела, где с его помощью изготовлен инициал "П". При этом использован такой код:

    \newfont{\initial}{zcr17 at 48pt}
    \newbox{\literaP}
    \savebox{\literaP}{\hbox{\initial П}}
    \begin{wrapfigure}{l}{0.75\wd\literaP}
    \vbox to 0.4\ht\literaP{%
       \vss \usebox{\literaP}%
       \vspace*{-0.2\ht\literaP}%
    }%
    \end{wrapfigure}
    УСТЬ теперь...

    Семейства шрифтов

    Конечно, хотелось бы подключать к LaTeX'у не один шрифт фиксированного размера, а целый набор новых шрифтов таким образом, чтобы в tex}-файле можно было менять их начертание и размер с помощью команд, аналогичных рассмотренным нами в лекции 3.

    Такие возможности действительно есть. Например, образцы шрифтов типа Times, приведенные на с. 360, были получены с помощью таких команд:

    {\fontfamily{ptm}
    \selectfont
    \begin{center}
    This is Times font sample\\
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    abcdefghijklmnopqrstuvwxyz\\
    \fontshape{it}\selectfont
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    abcdefghijklmnopqrstuvwxyz
    \fontseries{b}\fontshape{n}\selectfont
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    abcdefghijklmnopqrstuvwxyz\\
    \fontshape{it}\selectfont
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    abcdefghijklmnopqrstuvwxyz
    \end{center} }

    В них устанавливаются желаемые параметры шрифта, а затем этот шрифт вызывается командой \selectfont.

    Сначала мы устанавливаем семейство шрифтов с помощью команды

    \fontfamily{ptm}

    (где ptm есть внутреннее имя семейства шрифтов типа таймс). При этом остальные параметры (размер, насыщенность, начертание) остаются неизменными. Команда \selectfont переключает шрифт. Затем мы меняем начертание с помощью команды \fontshape, делая его курсивным (it}, прямое начертание обозначается n), и снова переключаем шрифт с помощью \selectfont. После этого мы меняем насыщенность с помощью команды \fontseries (при этом b} означает полужирный шрифт, а обычный шрифт обозначается m}) и возвращаемся к прямому начертанию. И так далее.

    Есть еще команда изменения размера шрифта, явно указывающая кегль и интерлиньяж. Например, команды

    \fontfamily{ptm} \fontsize{17pt}{24pt}
    \selectfont This is Times Roman\\ 17 pt / 24 pt

    позволяют напечатать две строки шрифтом типа таймс с размером 17 pt и расстоянием между строками 24 pt:

    $$\fontfamily{ptm} \fontsize{17pt}{24pt} \selectfont This is Times Roman\\ 17 pt / 24 pt$$

    Команды \fontfamily, \fontseries, \fontshape и \fontsize являются командами "нижнего уровня": как правило, надо использовать не их, а команды типа \textbf, \textit, \textsf или же команды смены начертания и насыщенности ( \rmfamily, \sffamily, \upshape, \bfseries и др.).

    Но откуда же LaTeX узнаёт, что, например, команда \rmfamily предписывает переключиться на семейство шрифтов, известное под внутренним именем cmr, а команда \bfseries устанавливает насыщенность, известную под внутренним именем bx? Эта информация содержится в определении следующих команд:

    КомандаОпределение в стандартных классах
    \rmdefault cmr
    \sfdefault cmss
    \ttdefault cmtt
    \bfdefault bx
    \mddefault m
    \itdefault it
    \sldefault sl
    \scdefault sc
    \updefault n

    Читать эту таблицу надо следующим образом: если семейство, насыщенность или начертание шрифта обозначается буквами xx, то команда \xxfamily, \xxseries или \xxshape (или команда с одним аргументом \textxx ) установит соответствующий атрибут шрифта с внутренним именем, указанным в таблице в строчке с командой \xxdefault.

    Сказанное объясняет рецепт уменьшения ширины жирного шрифта, приведенный на стр.114: переопределяя команду \bfdefault, мы заставляем LaTeX по командам \textbf или \bfseries (а также \bf ) выбирать шрифт насыщенности b}, менее широкой, чем насыщенность bx, получающаяся по умолчанию.

    А если, например, вы захотите, чтобы основным шрифтом вашего документа был шрифт без засечек, то можно переопределить в преамбуле команду \rmdefault:

    \renewcommand*{\rmdefault}{cmss}

    (согласно нашей таблице, cmss — это LaTeX'овское внутреннее имя для шрифта без засечек). Другой вопрос, будет ли это удачным полиграфическим решением. Не слишком увлекайтесь подобными экспериментами, если вы не полиграфист!

    Еще о русских шрифтах: подробности для знатоков

    Сейчас мы сообщим вам две новости: хорошую и плохую. Хорошая состоит в том, что большая часть из сказанного выше совершенно не нужна для пользования различными шрифтами в LaTeX'е, поскольку разработчики стилевых пакетов о вас позаботились. Скажем, если организаторы конференции просят присылать статьи в гарнитуре Times, достаточно добавить в преамбулу команду

    \usepackage{times}

    После этого все шрифты заменятся на шрифты типа таймс без каких-либо дополнительных усилий с вашей стороны. (Правда, могут появиться новые overfull'ы, так как размеры букв другие). Эта команда не меняет шрифтов, используемых в формулах, и они выглядят не очень хорошо (гарнитура таймс в среднем жирнее обычной Computer Modern). Чтобы изменить и шрифты для формул, скажите

    \usepackage{mathptmx}

    Более подробно смена шрифтов в тексте и формулах обсуждается в книге [6]; учтите только, что соответствующие пакеты часто меняются.

    Теперь плохая новость: все перечисленные удобства (возможности легко использовать различные гарнитуры) доступны лишь при использовании латинских шрифтов. Если вы попробуете добавить русские буквы к нашим примерам, то ничего хорошего не получится. Прежде всего это связано с нехваткой свободно распространяемых русских шрифтов различных гарнитур, а также с различиями в кодировках русских символов. Этим бедам и посвящен настоящий раздел, в котором автор попытался кратко изложить известную ему информацию про положение дел с русскими шрифтами. Вряд ли она сильно поможет многим на практике, но если она побудит кого-либо из читателей взяться за дело и исправить положение (хотя бы немного), то автор будет считать свою задачу выполненной. Автор заранее приносит извинения тем (вероятно, многочисленным) коллегам, о работах которых у него нет достаточной информации; вина, разумеется, тут только его.

    Для использования разнообразных русских шрифтов в LaTeX'е нужно решить две проблемы: (а) найти сами шрифты и (б) написать файлы для подключения их к LaTeX'у. В этом разделе мы обсудим первую из этих проблем, а второй из них посвятим следующий раздел.

    Нас будут интересовать шрифты двух типов: METAFONT-шрифты и PostScript-шрифты. Еще бывают так называемые TrueType шрифты, их подключение к TeX'у в принципе возможно, но менее удобно, и о них мы говорить не будем.

    METAFONT-шрифты.

    Эти шрифты в свою очередь делятся на две категории. В первом случае авторы ставили своей целью экстраполировать Computer Modern на русские буквы (и, в частности, заимствовали формы общих букв из Computer Modern). Таковы шрифты AMS, шрифты Глонти и шрифты Лапко (см. ниже) Во втором случае авторы старались сделать русский шрифт определенного вида, не связывая себя требованиями единства стиля с Computer Modern.

    В комплект шрифтов AMS (Американского математического общества), распространяемый практически со всеми версиями TeX'а, входят шрифты, разработанные в Humanities and Arts Computing Center, University of Washington (в 1989 году). Эти шрифты использовались в различных публикациях AMS (в основном — для печати русских названий статей и книг в списках литературы). Вот образец шрифта wncyr10}:

    Эти шрифты, если можно так выразиться, "импортные". Первыми " отечественными" русскими METAFONT-шрифтами, кажется, были шрифты, разработанные в Институте физики высоких энергий (Протвино) при участии Наны Глонти и Александра Самарина (их иногда называют шрифтами Глонти). Вот образец шрифта cmcyr10} (взят с сервера ftp.dante.de})

    Эти шрифты (с небольшими изменениями отдельных букв, сделанными в основном А.Шенем) были использованы при подготовке этой книги. Приведем их (с этими изменениями) в том же масштабе:

    Наконец, Ольга Лапко и Андрей Ходулев разработали шрифты, получившие название "LH-шрифтов". Многие считают, что из различных METAFONT-продолжений шрифта Computer Modern именно эти шрифты обладают наиболее высоким качеством. Кроме того, они включают в себя большой набор символов самых разных языков на кириллической основе. Можно надеяться, что они в будущем окончательно стабилизируются (пока что новые версии выходят довольно часто) и будут в разных версиях TeX'а столь же стандартны, как сейчас шрифты Кнута. (Уже сейчас LH-шрифты входят в большинство дистрибутивов TeX'а, обычно в не самых последних версиях. Впрочем, дело осложняется тем, что авторами этих шрифтов предусмотрено много разных версий для разных кодировок, причем они генерируются "на лету" с использованием довольно хитроумных и не везде работающих механизмов.)

    Вот как выглядят русские буквы в этих шрифтах:

    Разница между этими четырьмя образцами заметна, если приглядеться внимательно. (Обратите внимание на буквы "Л", " Д" и "Э".)

    К шрифтам второй категории относятся шрифты, авторы которых не стремились следовать стилю Computer Modern.

    При поддержке Российского фонда фундаментальных исследований в рамках проекта "Русский TeX" Л.Н.Знаменская и С.В.Знаменский разработали шрифты, отчасти напоминающие гарнитуру "Обыкновенная новая". Вот образцы этих шрифтов (мы воспроизводим предварительный вариант этих шрифтов, вошедший, с разрешения разработчиков, в использованную при подготовке книги русификацию):

    Видно, что общие для латинского и русского алфавита буквы имеют несколько разные начертания (латинские буквы не изменились по сравнению с оригинальными шрифтами Computer Modern Кнута)

    Были предприняты также попытки изготовить METAFONT-файлы на основе других популярных гарнитур. Часть полученных таким образом шрифтов также вошли в использованную при подготовке этой книги русификацию. Вот образцы этих шрифтов:

    Завершая разговор о METAFONT-шрифтах, отметим, что существует (не вполне завершенный) набор программ ps4mf (подробную информацию можно найти на сервере ftp.dante.de), который позволяет полуавтоматически изготавливать METAFONT-шрифты из Type 1 шрифтов. Однако получающиеся шрифты плохо приспособлены к печати при низких и средних разрешениях (например, для 300 dpi). Дело в том, что и METAFONT, и Type 1 предусматривают задание границ букв в виде кусочно-гладких кривых, и эти кривые легко перевести из одного формата в другой с минимальными изменениями. Проблема в том, что при переводе шрифтов в черно-белую матрицу кривые подвергаются округлению с неизбежными погрешностями. Если, скажем, ширина вертикальной палочки в букве "Ш" не есть точное кратное размера точки, то может случиться, что три палочки (которые имеют одну и ту же ширину в точном представлении) при округлении приобретут разную ширину. Кроме того, из-за того же округления буква "Ш" может потерять осевую симмметрию, что нежелательно. Эта проблема существует и для METAFONT'а, и для Type 1, но решается по-разному. Язык METAFONT предоставляет автору шрифтов возможности самому влиять на округление так, как он этого пожелает. В шрифтах Type 1 используются указания особого вида (hints), которые побуждают интерпретатор PostScript'а производить округления так, как это хотелось автору шрифта. При этом формат и интерпретация этих указаний — дело довольно сложное, и без потерь в METAFONT они не переводятся.

    Обратный перевод (из METAFONT'а в Type 1) сталкивается не только с проблемой округления, но и с тем, что в METAFONT'е (который представляет собой язык программирования) есть разнообразные средства описания шрифтов, а не только описание контуров. На практике, изготавливая Type 1 шрифты из METAFONT-шрифтов, сначала изготавливают матрицы букв в высоком разрешении, после чего применяют программы, восстанавливающие границы кривых, и добавляют указания (hints) вручную или полуавтоматически.

    PostScript-шрифты.

    В отличие от кириллических METAFONT-шрифтов, которые можно пересчитать по пальцам, PostScript-шрифты с русскими буквами существуют в изобилии. Некоторые из них распространяются западными производителями (скажем, той же фирмой Adobe), но подавляющее большинство сделано в России. Этим, в частности, много занималась фирма "Параграф" (впоследствии шрифтовое подразделение фирмы получило название Paratype).

    В отличие от METAFONT-шрифтов, которые (как правило) являются свободно распространяемыми, PostScript-шрифты надо покупать и нельзя выкладывать на сервер вместе с TeX-системой. Формально говоря, это не запрещает распространять вспомогательные файлы, необходимые для их подключения к TeX, как это делалось в течение многих лет с английскими PostScript-шрифтами. В конце концов, наиболее законопослушные пользователи могут шрифты купитьВпрочем, не всё так просто. Например, посмотрев на сайт www.paratype.com}, можно обнаружить разные типы лицензий. Одни ограничивают число принтеров, на которых можно печатать полученные файлы (тем самым, скажем, переслать статью с этими шрифтами коллегам уже нельзя), другие (лицензия на одну публикацию) требуют покупать отдельную лицензию на каждую статью и т.п. Вряд ли даже законопослушные пользователи станут широко использовать шрифты с такими лицензиями., а менее законопослушные пойдут в ближайший ларек за " пиратским" компакт-диском. Но и в том, и в другом случае нет никаких гарантий, что удастся достать именно ту версию шрифта, что была у разработчика вспомогательных файлов — русские шрифты еще менее стандартны, чем английские, и не только формы букв, но и их размеры и кодировка могут различаться в разных версиях.

    В случае латинских шрифтов ситуация сильно упростилась благодаря фирме URW, которая разрешила распространять бесплатно некоторые наиболее популярные шрифты вместе с системой Ghostscript. Именно эти шрифты и были использованы нами в приведенных выше примерах гарнитур . К сожалению, насколько известно автору, этому примеру никто из фирм-производителей кириллических шрифтов не последовал, и "белых" (с ясным происхождением и свободно распространяемых без ограничений на использование при подготовке печатных и электронных документов) качественных PostScript-шрифтов автору найти не удалосьНедавно появились предназначенные для свободного распространения шрифты В.Филиппова, дополняющие упомянутые выше URW-шрифты русскими буквами; видимо, работа над ними еще не закончена. См. ftp://ftp.gnome.ru/fonts/urw}. Но есть некоторые "серые" шрифты:

  • Давным-давно фирма Urbansoft распространяла версию системы Linux, которая называлась "Открытое ядро" (занимавшую тогда несколько дюжин пятидюймовых дискет). В ее состав входили некоторые PostScript-шрифты с русскими буквами (в том числе комплект шрифтов типа литературной гарнитуры), однако они не содержали внутри себя сведений о копирайте. Возможно, какие-то из этих шрифтов послужили исходным материалом для пакета PSCyr (см. следующий пункт).
  • В состав нескольких недавних версий Linux входит пакет PSCyr. Один из разработчиков этого пакета, Александр Лебедев, пишет (цитируется по версии 0.4c-patch2, взятой с сервера ftp.vsu.ru}): Первые шрифты в коллекцию русских шрифтов $$\langle\ldots\rangle$$ были собраны Сергеем Наумовым в 1995 г. В этих шрифтах отсутствовала информация об изготовителе, однако по некоторым признакам это были просканированные изображения широко распространенных русских типографских шрифтов...

    В 1997 г. коллекция была дополнена шрифтами .Arial.}, Courier и Times фирмы Monotype, построенными из шрифтов стандартной поставки Windows...

    Свободно распространяемый шрифт ERKurier $$\langle\ldots\rangle$$ был добавлен Константином Чумаченко в версии 0.2, а шрифт Academy (неизвестного происхождения) — им же в версии 0.3.}".

    Кроме того, говоря об изменениях в версии 0.3, Лебедев пишет:

    для легализации коллекции шрифтов добавлен файл LICENSE.

    В этом файле говорится:

    Permission is granted to use, copy, and freely redistribute the fonts from the PSCyr font collection in any media\ldots provided that $$\langle\ldots\rangle$$ 1. any modification of\/ \upshape *.afm} and\/ \upshape *.pfb} files is forbidden. 2. the redistribution of the font(s) and the whole collection as separate computer file(s) should retain this license information\/

    В самих шрифтах встречаются: Monotype Corporation, AG Fonts Collection, Andrejs Grinbergs, Gavin Helf, Ares Software.

    В файле README к версии 0.3 написано:

    The typefaces included in this package originally come from The Monotype Corporation plc. (with changes by Eugene V.Demidov), Gavin Helf (with changes by Andrey Chernov); Paratype, division of Paragraph International. As to my knowledge, these fonts are placed into public domain and can be freely redistributed. (AUTHOR: Konstantin Chumachenko)\/

    Вопрос о том, насколько законно объявлять свободно распространяемыми шрифты неизвестного происхождения, не указывая никаких подтверждений того, что первоначальные разработчики поместили их в public domain, сложен, тем более что законы, касающиеся юридической защиты шрифтов, непросты для понимания и различны в разных странах. Мы условно относим эти шрифты к категории "серых", имея в виду лишь, что вопрос о законности их распространения кажется сложным. Впрочем, в условиях, когда на уличных лотках можно найти по бросовой цене базы данных государственных организаций и новейшие версии Windows, трудно представить себе, что именно эти шрифты станут темой юридических дебатов.

  • Наиболее понятна ситуация со шрифтами Литературной гарнитуры, разработанными фирмой Параграф (Paratype) по заказу Российского фонда фундаментальных исследований. (Заметим, что эта гарнитура отличается от других версий Литературной гарнитуры той же фирмы). По замыслу РФФИ, этот заказ должен был дать возможность готовить и распространять научные тексты, сверстанные в одной из наиболее распространенных традиционных гарнитур. К сожалению, прилагаемая к пакету лицензия не так проста для понимания. Там написано:

    In the following paragraphs ``fonts'' stands for Type 1 fonts together with metric files and also any conversions and renderings of them. You are allowed: to use fonts with any TeX distribution; to use fonts with any graphic editors for preparing pictures to be included with TeX documents; to use fonts with other programs (such as WWW browsers) for screening purpose only; to convert fonts into any format for above purposes; to include fonts into electronic documents (such as PDF); to distribute fonts together with RFBR TeX distribution

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

    You are not allowed to use fonts for hardcopy making with any programs except TeX drivers\/

    , что, формально говоря, запрещает печать включающего эти шрифты файла (полученного с помощью системы TeX) с использованием (скажем) программ Adobe Acrobat} или Ghostscript. Еще написано, что нельзя distribute this fonts as an independent package (так в оригинале), причем что такое в точности RFBR TeX distribution, с которой распространять можно, и где ее взять, не вполне ясно.

    Можно надеяться, что это лишь нечеткость формулировки и что дух лицензии важнее ее буквы.

  • Говоря об отсутствии "белых" кириллических PostScript-шрифтов, следует внести уточнение. Существуют совершенно легальные свободно распространяемые PostScript-шрифты в пакете CM-Super (автор — Владимир Волович), полученные преобразованием свободно распространяемых METAFONT-шрифтов (включая LH-шрифты, шрифты Computer Modern и другие). Но с точки зрения расширения ассортимента шрифтов этот пакет не особенно полезен, поскольку все входящие в него шрифты есть и в METAFONT-формате. Польза от него в другом: с его помощью можно готовить в системе TeX PostScript- и PDF-файлы, в которых использованы только шрифты Type 1 (такие файлы лучше приспособлены к просмотру в программе Acrobat Reader} и к печати на принтерах с высоким разрешением).

    Шрифты эти были получены так: сначала из METAFONT-текстов были получены матрицы высокого разрешения, а затем они преобразованы в формат Type 1 с помощью программ TeXtrace и Autotrace.

    Подключение шрифтов

    До сих пор мы говорили о наличии шрифтов как таковых, а не о механизме их подключения к системе LaTeX. Само по себе подключение не очень сложно, и можно надеяться, что если качественные разнообразные свободно распространяемые METAFONT- или PostScript-шрифты появятся, то вскоре будут написаны и LaTeX-определения, их подключающие.

    Тем не менее, скажем несколько слов о том, как работает механизм подключения шрифтов.

    Понятие кодировки. Пример: кодировка T1.

    Система LaTeX пытается реализовать следующую простую идею: набор символов и форма символов (гарнитура) являются независимыми координатами. Скажем, можно говорить о русских и латинских шрифтах (два значения первой координаты), а также о шрифтах гарнитуры таймс и гельветика (два значения второй координаты), и двигаться по каждой координате независимо.

    Несмотря на кажущуюся очевидность, этот принцип трудно реализовать буквально, и не только потому, что какие-то значения координат соответствуют отсутствующим в данном комплекте шрифтам, но и по более тонким причинам. Например, в какой-то гарнитуре может быть специальный символ { "fi"}, которым изображаются стоящие рядом буквы f и i (это называется " лигатурой", обратите внимание на отличие этого символа от набранных подряд букв:fi), а в другой гарнитуре соединять эти буквы не принято и такого символа нет.

    Тем не менее в первом приближении можно считать, что в системе LaTeX есть два независимых параметра: кодировка (encoding) говорит, какие символы имеются, а семейство (font family) определяет внешний вид символов. Мы уже упоминали кодировку T1, используемую при работе с неанглийскими языками на латинской основе. Рисунок B.1 показывает символы кодировки T1, представленные шрифтами семейства Computer Modern.

    (рис B.1) Кодировка T1

    Та же самая кодировка T1, представленная шрифтами семейства Helvetica, показана на рисунке B.2(рис B.2) Кодировка Т1:Helvetica

    В теории эти две таблицы должны отличаться лишь формой символов, но на практике это не совсем так: в нынешней версии LaTeX'а некоторые позиции в кодировке T1 в шрифте типа Helvetica не заполнены соответствующими буквами.

    Тем не менее кодировка T1 (ее еще называют Cork encoding, поскольку кодировка была утверждена на конференции TeXников в ирландском городе Корк) обеспечивает более или менее приемлемую основу для использования LaTeX'а с разными шрифтами и разными языками с латинской графикой.

    Впрочем, до сих пор по умолчанию используется так называемая кодировка OT1, в которой всего $$128$$ символов, представленных в оригинальных шрифтах Кнута. Эта кодировка показана на рисунках B.3 и В.4. в двух видах (обычные шрифты и tt}-шрифты).

    (рис B.4) Кодировка ОТ1(рис B.3) Кодировка ОТ1:семейство cmtt

    Читатель может заметить, что эти таблицы не соответствуют идее кодировки, объясненной выше: далеко не все символы в двух таблицах соответствуют друг другу. (А в курсивных шрифтах на месте доллара появляется фунт!) Причина этого понятна: шрифты разрабатывались Кнутом исходя из ограничения в $$128$$ символов и до появления общей схемы переключения шрифтов.

    Входная и внутренняя кодировки.

    Следует подчеркнуть, что слово "кодировка" в сочетании " кодировка T1" имеет не совсем обычный смысл. Эта кодировка, вообще говоря, не совпадает с кодировкой букв во входных файлах (а для некоторых символов вообще нет кода, который им соответствует во входном файле). Как же задается соответствие между ними? Есть два принципиально разных подхода.

    Первый вариант состоит в том, что в программу TeX встраивается дополнительный механизм (выходящий за рамки собственно TeX'а), который считывает таблицу соответствия между кодами и автоматически перекодирует входные символы. (Можно сказать, что TeX в узком смысле этого слова ничего не знает о входной кодировке.) Обратное перекодирование производится при выдаче log}-файлов и других текстовых файлов.

    Второй вариант, не выходящий за рамки TeX'а и применяемый в пакете inputenc, состоит в том, что символы входного потока становятся "активными", то есть становятся командами, порождающими символы во внутренней кодировке. Это, конечно, противоречит всей архитектуре TeX'а, поскольку там есть специальная "категория", называемая буквами (letters), а активные символы mdash; уже не буквы. В результате работа других пакетов может нарушиться, если они не готовы к такому повороту событий, в idx-файл попадают не буквы, а команды для них (что нарушает нормальную работу программ для обработки idx-файлов) и т.д. Зато, скажем, кодировку можно переключать "на лету" в середине текста, если это зачем-то понадобится.

    Кстати, внутренняя кодировка (при использовании так называемых виртуальных шрифтов) может не совпадать и с кодировкой, используемой в шрифте (будь то PostScript- или METAFONT-шрифт). Но в tfm-файлах используется как раз внутренняя кодировка.

    (рис B.6) Кодировка T2A(рис B.5) Кодировка T2В(рис B.7) Кодировка T2C

    Что же получается с русскими текстами? Для них есть несколько входных кодировок (koi8-r, cp1251, cp866) и несколько внутренних. Заметим, что при использовании одной внутренней кодировки не удается поместить в нее все кириллические символы, сохранив первую половину такой же, как в кодировке T1 (разных символов слишком много). Это было причиной появления кодировок T2A, T2B и T2C, в которых русские буквы стоят на одних и тех же местах, но вот дополнительные буквы разные. На рисунках В.5, В.6 и В.7 приведены соответствующие списки символов (набранные шрифтами LH mdash; на сегодняшний день единственными кириллическими шрифтами, эти кодировки поддерживающими).

    Представляет интерес также кодировка X2 (рис. В.8), в которой первая половина также используется для кириллических символов (в отличие от T2A, T2B и T2C, в ней присутствуют символы, необходимые для набора русских текстов в дореволюционной орфографии). Кроме этого, имеется кодировка OT2, соответствующая кодировке символов в русских шрифтах AMS, а также многие другие.

    (рис В.8) Кодировка X2

    Подключение шрифтов и fd-файлы.

    Итак, мы знаем, что имеются пять (вообще говоря) независимых атрибутов шрифта. Все эти атрибуты можно увидеть в сообщении об overfull'е (см. 116). Именно, там присутствует последовательность символов \OT1/cmr/m/n/10.95, в которой перечислены, через косую черту, атрибуты текущего шрифта (кодировка, семейство, насыщенность, начертание, размер). Их можно менять независимо.

  • Кодировка задается с помощью команды \fontencoding, единственным аргументом которой является имя кодировки. Пример: \fontencoding{T1}. Иногда в ответ на команду \fontencoding LaTeX может пожаловаться, что кодировка ему неизвестна. Тогда можно дать предварительно команду \DeclareFontEncoding таким, например, образом:
    \DeclareFontEncoding{T2C}{}{}
    (две пары пустых фигурных скобок mdash; не опечатка!). Может, конечно, случиться, что вы пытаетесь заказать кодировку, вообще отсутствующую в вашей установке LaTeX'а; тогда этот рецепт не сработает.
  • Семейство задается с помощью команды \fontfamily, единственный аргумент которой mdash; внутреннее имя семейства. Пример: \fontfamily{cmr} обозначает семейство Computer Modern Roman.
  • Насыщенность задается с помощью команды \fontseries, единственный аргумент которой mdash; внутреннее обозначение для насыщенности. Пример: \fontseries{bx} обозначает полужирный шрифт (см. таблицу на стр.366}).
  • Начертание задается с помощью команды \fontshape, единственный аргумент которой mdash; обозначение (опять же " внутреннее") для начертания. Пример: \fontshape{it} означает курсивное начертание.
  • Размер задается с помошью команды \fontsize, имеющей два аргумента: первый из них указывает кегль, а второй mdash; интерлиньяж (в пунктах). Пример: \fontsize{10}{12}. Интерлиньяж, указанный во втором аргументе команды \fontsize, будет умножен на коэффициент, являющийся значением команды \baselinestretch (по умолчанию, как мы помним, этот коэффициент равен единице). Теперь становится ясно, как работает прием для изменения интерлиньяжа во фрагменте текста, описанный ранее.
  • При этом само по себе задание атрибутов с помощью этих команд шрифта еще не меняет: чтобы шрифт действительно сменился, надо сначала задать одну или несколько приведенных выше команд, меняющих атрибуты, но непосредственно после них необходимо дать еще команду \selectfont.

    Через эти команды выражаются и команды более высокого уровня (скажем, \textbf или \emph ). Например, \normalfont ) в стандартных классах задается по существу так:

    \newcommand*{\normalfont}{%
    \fontencoding{OT1}\fontfamily{cmr}%
    \fontseries{m}\fontshape{n}%
    \selectfont
    }

    Остается объяснить, как проинформировать LaTeX, какие шрифты соответствуют тем или иным комбинациям атрибутов. Это делается с помощью специального файла с расширением fd. Вот, например, файл, который (в использованной нами русификации) подключает шрифты типа гельветика.

    \ProvidesFile{ot1zhr.fd}
      [Quasi Helvetica font definitions]
    \DeclareFontFamily{OT1}{zhr}{}
    \DeclareFontShape{OT1}{zhr}{m}{n}
       {  <5> <6> <7> <8> zhr5
          <9> <10> <10.95> zhr10
          <12> <14.4> zhr12
          <17.28><20.74><24.88> zhr12}{}
    \DeclareFontShape{OT1}{zhr}{b}{n}
       {  <5> <6> <7> <8> <9> <10> <12>
          <10.95> <14.4> <17.28> <20.74> <24.88>
           zhb10}{}
    \DeclareFontShape{OT1}{zhr}{bx}{n}
       {  <5> <6> <7> <8> <9> <10> <12>
          <10.95> <14.4> <17.28> <20.74> <24.88>
          zhbx10}{}
    \DeclareFontShape{OT1}{zhr}{m}{sl}
        { <5> <6> <7> <8> <9> <10> <12>
          <10.95> <14.4> <17.28> <20.74> <24.88>
          zhsl10}{}
    \DeclareFontShape{OT1}{zhr}{m}{it}{ <-> sub * zhr/m/sl }{}

    Сначала говорится, что определяется семейство zhr в кодировке OT1. (Что не вполне верно, так как в OT1 никаких русских букв нет.) Затем объясняется, что надо использовать в качестве светлых шрифтов прямого (не курсивного) начертания: шрифты zhr5, zhr10, zhr12 (выбор зависит от размера нужного шрифта, указанного в угловых скобках). Затем объясняется, что надо использовать в качестве полужирных ( bx) и наклонных ( sl) шрифтов. Наконец, в последней строке говорится, что (по причине отсутствия курсива в шрифтах типа гельветика) вместо курсива ( it) надо пользоваться наклонным ( sl) шрифтом.

    Как видите, ничего сложного в подключении нового семейства нет, если внутренняя кодировка шрифтов совпадает с кодировкой семейства, для которого они применяются. Если же нет, то нужно изготавливать виртуальные шрифты, описание чего выходит за рамки этой книги (есть по крайней мере два способа: один описан в документации к драйверу dvips, второй содержится в пакете fontinst ).

    В заключение еще раз скажем, что все эти (полезные скорее для общего понимания ситуации, чем практически) сведения приведены здесь в качестве затравки — чтобы вдохновить читателей на изготовление хороших и доступных для применения русских шрифтов.

    Может, попробуете?

    Вернуться к учебному плану