Приложение В. Шрифты и LaTeX
Подключение шрифтов и fd-файлы.
Итак, мы знаем, что имеются пять (вообще говоря) независимых атрибутов шрифта. Все эти атрибуты можно увидеть в сообщении об overfull'е (см. 116). Именно, там присутствует последовательность символов \OT1/cmr/m/n/10.95, в которой перечислены, через косую черту, атрибуты текущего шрифта (кодировка, семейство, насыщенность, начертание, размер). Их можно менять независимо.
- Кодировка задается с помощью команды \fontencoding,
единственным аргументом которой является имя кодировки. Пример: \fontencoding{T1}.
Иногда в ответ на команду \fontencoding LaTeX может
пожаловаться, что кодировка ему неизвестна. Тогда можно
дать предварительно команду \DeclareFontEncoding таким,
например, образом:(две пары пустых фигурных скобок — не опечатка!). Может, конечно, случиться, что вы пытаетесь заказать кодировку, вообще отсутствующую в вашей установке LaTeX'а; тогда этот рецепт не сработает.
\DeclareFontEncoding{T2C}{}{}
- Семейство задается с помощью команды \fontfamily, единственный аргумент которой — внутреннее имя семейства. Пример: \fontfamily{cmr} обозначает семейство Computer Modern Roman.
- Насыщенность задается с помощью команды \fontseries, единственный аргумент которой — внутреннее обозначение для насыщенности. Пример: \fontseries{bx} обозначает полужирный шрифт (см. таблицу на стр.366}).
- Начертание задается с помощью команды \fontshape, единственный аргумент которой — обозначение (опять же " внутреннее") для начертания. Пример: \fontshape{it} означает курсивное начертание.
- Размер задается с помошью команды \fontsize, имеющей два аргумента: первый из них указывает кегль, а второй — интерлиньяж (в пунктах). Пример: \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 ).
В заключение еще раз скажем, что все эти (полезные скорее для общего понимания ситуации, чем практически) сведения приведены здесь в качестве затравки — чтобы вдохновить читателей на изготовление хороших и доступных для применения русских шрифтов.
Может, попробуете?