Если при чтении книжек вы больше интересовались содержанием, чем оформлением, то могли и не заметить, что они набираются разными шрифтами. Здесь мы имеем в виду не шрифтовые выделения (скажем, жирный — или, как сказали бы полиграфисты, полужирный шрифт), а различные рисунки шрифтов. Полиграфисты называют их гарнитурами. Заглянув в выходные данные книги (особенно изданной несколько десятилетий назад), можно найти там слова " Гарнитура обыкновенная новая" или "Литературная гарнитура". Эти слова означают разные рисунки букв; каждая из гарнитур может включать в себя шрифты различных начертаний (прямые, курсивные, полужирные) и размеров.
Вот несколько образцов различных гарнитур:
Вначале показаны четыре начертания гарнитуры
Допустим, нам понравилась какая-то гарнитура и мы хотим использовать такой (точнее говоря, очень похожий) на нее шрифт в системе LaTeX. Чтоб для этого нужно?
Прежде всего нужно иметь файлы, описывающие формы букв выбранной нами гарнитуры. Проще всего, если эти файлы подготовлены в формате METAFONT (как это сделано Кнутом для шрифтов Computer Modern). Тогда с помощью программы METAFONT из них можно получить tfm-файлы с описанием размеров букв.
Немного сложнее обстоит дело со шрифтами в формате Type 1. Но и для этого формата написаны программы, позволяющие полуавтоматически изготавливать tfm-файлы (основная проблема, требующая ручного вмешательства, — несовпадение кодировок).
После этого можно попросить LaTeX использовать эти файлы
вместо обычно используемых им tfm-файлов для шрифтов
Computer Modern, и получить
При этом получающийся файл имеет то достоинство, что он не зависит от разрешения: в нем содержатся не матрицы букв того или иного размера (как будет с 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'овские команды
для переключения шрифтов (именно, команды, меняющие размер) не
только переключаются на шрифт другого размера, но и меняют
интерлиньяж (а также, кстати, размер невидимой линейки,
создаваемой командой \ ); команда, определенная с
помощью \newfont, никакого влияния ни на интерлиньяж, ни на
смысл команды \ не окажет. Наконец, внутри
математической формулы такая команда вообще будет
проигнорирована.
Тем не менее, если вы нашли какой-то экзотический символ,
который хотите несколько раз использовать, и нашли шрифт,
в котором он есть, команда \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}
(где \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'у в принципе возможно, но менее удобно, и о них мы говорить не будем.
Эти шрифты в свою очередь делятся на две категории. В первом случае авторы ставили своей целью экстраполировать 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'е
(который представляет собой язык программирования) есть
разнообразные средства
В отличие от кириллических METAFONT-шрифтов, которые можно пересчитать по пальцам, PostScript-шрифты с русскими буквами существуют в изобилии. Некоторые из них распространяются западными производителями (скажем, той же фирмой Adobe), но подавляющее большинство сделано в России. Этим, в частности, много занималась фирма "Параграф" (впоследствии шрифтовое подразделение фирмы получило название Paratype).
В отличие от METAFONT-шрифтов, которые (как правило) являются
свободно распространяемыми, PostScript-шрифты надо покупать и
нельзя выкладывать на сервер вместе с TeX-системой. Формально
говоря, это не запрещает распространять вспомогательные файлы,
необходимые для их подключения к TeX, как это делалось в
течение многих лет с английскими PostScript-шрифтами. В конце
концов, наиболее законопослушные пользователи могут шрифты
В случае латинских шрифтов ситуация сильно упростилась благодаря
фирме URW, которая разрешила распространять бесплатно некоторые
наиболее популярные шрифты вместе с системой Ghostscript. Именно
эти шрифты и были использованы нами в приведенных выше примерах
гарнитур . К сожалению, насколько
известно автору, этому примеру никто из фирм-производителей
кириллических шрифтов не последовал, и "белых" (с ясным
происхождением и свободно распространяемых без ограничений на
использование при подготовке печатных и электронных документов)
качественных PostScript-шрифтов автору найти не
В 1997 г. коллекция была дополнена шрифтами .Arial.}, Courier
и Times фирмы
Свободно распространяемый шрифт 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\/
В самих шрифтах встречаются:
В файле README к версии 0.3 написано:
The
typefaces included in this package originally come from TheMonotype Corporationplc . (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 intopublic domain and can be freely redistributed. (AUTHOR: Konstantin Chumachenko)\/
Вопрос о том, насколько законно объявлять свободно
распространяемыми шрифты неизвестного происхождения, не указывая
никаких подтверждений того, что первоначальные разработчики
поместили их в
Наиболее понятна ситуация со шрифтами Литературной гарнитуры, разработанными фирмой Параграф (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-определения, их подключающие.
Тем не менее, скажем несколько слов о том, как работает механизм подключения шрифтов.
Система LaTeX пытается реализовать следующую простую идею: набор символов и форма символов (гарнитура) являются независимыми координатами. Скажем, можно говорить о русских и латинских шрифтах (два значения первой координаты), а также о шрифтах гарнитуры таймс и гельветика (два значения второй координаты), и двигаться по каждой координате независимо.
Несмотря на кажущуюся очевидность, этот принцип трудно
реализовать буквально, и не только потому, что какие-то значения
координат соответствуют отсутствующим в данном комплекте
шрифтам, но и по более тонким причинам. Например, в какой-то
гарнитуре может быть специальный символ { "fi"},
которым изображаются стоящие рядом буквы f и i (это называется
"
Тем не менее в первом приближении можно считать, что в системе 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Итак, мы знаем, что имеются пять (вообще говоря) независимых
атрибутов шрифта. Все эти атрибуты можно увидеть в сообщении об
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 ).
В заключение еще раз скажем, что все эти (полезные скорее для общего понимания ситуации, чем практически) сведения приведены здесь в качестве затравки — чтобы вдохновить читателей на изготовление хороших и доступных для применения русских шрифтов.
Может, попробуете?
Если при чтении книжек вы больше интересовались содержанием, чем оформлением, то могли и не заметить, что они набираются разными шрифтами. Здесь мы имеем в виду не шрифтовые выделения (скажем, жирный — или, как сказали бы полиграфисты, полужирный шрифт), а различные рисунки шрифтов. Полиграфисты называют их гарнитурами. Заглянув в выходные данные книги (особенно изданной несколько десятилетий назад), можно найти там слова " Гарнитура обыкновенная новая" или "Литературная гарнитура". Эти слова означают разные рисунки букв; каждая из гарнитур может включать в себя шрифты различных начертаний (прямые, курсивные, полужирные) и размеров.
Вот несколько образцов различных гарнитур:
Вначале показаны четыре начертания гарнитуры
Допустим, нам понравилась какая-то гарнитура и мы хотим использовать такой (точнее говоря, очень похожий) на нее шрифт в системе LaTeX. Чтоб для этого нужно?
Прежде всего нужно иметь файлы, описывающие формы букв выбранной нами гарнитуры. Проще всего, если эти файлы подготовлены в формате METAFONT (как это сделано Кнутом для шрифтов Computer Modern). Тогда с помощью программы METAFONT из них можно получить tfm-файлы с описанием размеров букв.
Немного сложнее обстоит дело со шрифтами в формате Type 1. Но и для этого формата написаны программы, позволяющие полуавтоматически изготавливать tfm-файлы (основная проблема, требующая ручного вмешательства, — несовпадение кодировок).
После этого можно попросить LaTeX использовать эти файлы
вместо обычно используемых им tfm-файлов для шрифтов
Computer Modern, и получить
При этом получающийся файл имеет то достоинство, что он не зависит от разрешения: в нем содержатся не матрицы букв того или иного размера (как будет с 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'овские команды
для переключения шрифтов (именно, команды, меняющие размер) не
только переключаются на шрифт другого размера, но и меняют
интерлиньяж (а также, кстати, размер невидимой линейки,
создаваемой командой \ ); команда, определенная с
помощью \newfont, никакого влияния ни на интерлиньяж, ни на
смысл команды \ не окажет. Наконец, внутри
математической формулы такая команда вообще будет
проигнорирована.
Тем не менее, если вы нашли какой-то экзотический символ,
который хотите несколько раз использовать, и нашли шрифт,
в котором он есть, команда \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}
(где \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'у в принципе возможно, но менее удобно, и о них мы говорить не будем.
Эти шрифты в свою очередь делятся на две категории. В первом случае авторы ставили своей целью экстраполировать 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'е
(который представляет собой язык программирования) есть
разнообразные средства
В отличие от кириллических METAFONT-шрифтов, которые можно пересчитать по пальцам, PostScript-шрифты с русскими буквами существуют в изобилии. Некоторые из них распространяются западными производителями (скажем, той же фирмой Adobe), но подавляющее большинство сделано в России. Этим, в частности, много занималась фирма "Параграф" (впоследствии шрифтовое подразделение фирмы получило название Paratype).
В отличие от METAFONT-шрифтов, которые (как правило) являются
свободно распространяемыми, PostScript-шрифты надо покупать и
нельзя выкладывать на сервер вместе с TeX-системой. Формально
говоря, это не запрещает распространять вспомогательные файлы,
необходимые для их подключения к TeX, как это делалось в
течение многих лет с английскими PostScript-шрифтами. В конце
концов, наиболее законопослушные пользователи могут шрифты
В случае латинских шрифтов ситуация сильно упростилась благодаря
фирме URW, которая разрешила распространять бесплатно некоторые
наиболее популярные шрифты вместе с системой Ghostscript. Именно
эти шрифты и были использованы нами в приведенных выше примерах
гарнитур . К сожалению, насколько
известно автору, этому примеру никто из фирм-производителей
кириллических шрифтов не последовал, и "белых" (с ясным
происхождением и свободно распространяемых без ограничений на
использование при подготовке печатных и электронных документов)
качественных PostScript-шрифтов автору найти не
В 1997 г. коллекция была дополнена шрифтами .Arial.}, Courier
и Times фирмы
Свободно распространяемый шрифт 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\/
В самих шрифтах встречаются:
В файле README к версии 0.3 написано:
The
typefaces included in this package originally come from TheMonotype Corporationplc . (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 intopublic domain and can be freely redistributed. (AUTHOR: Konstantin Chumachenko)\/
Вопрос о том, насколько законно объявлять свободно
распространяемыми шрифты неизвестного происхождения, не указывая
никаких подтверждений того, что первоначальные разработчики
поместили их в
Наиболее понятна ситуация со шрифтами Литературной гарнитуры, разработанными фирмой Параграф (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-определения, их подключающие.
Тем не менее, скажем несколько слов о том, как работает механизм подключения шрифтов.
Система LaTeX пытается реализовать следующую простую идею: набор символов и форма символов (гарнитура) являются независимыми координатами. Скажем, можно говорить о русских и латинских шрифтах (два значения первой координаты), а также о шрифтах гарнитуры таймс и гельветика (два значения второй координаты), и двигаться по каждой координате независимо.
Несмотря на кажущуюся очевидность, этот принцип трудно
реализовать буквально, и не только потому, что какие-то значения
координат соответствуют отсутствующим в данном комплекте
шрифтам, но и по более тонким причинам. Например, в какой-то
гарнитуре может быть специальный символ { "fi"},
которым изображаются стоящие рядом буквы f и i (это называется
"
Тем не менее в первом приближении можно считать, что в системе 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Итак, мы знаем, что имеются пять (вообще говоря) независимых
атрибутов шрифта. Все эти атрибуты можно увидеть в сообщении об
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 ).
В заключение еще раз скажем, что все эти (полезные скорее для общего понимания ситуации, чем практически) сведения приведены здесь в качестве затравки — чтобы вдохновить читателей на изготовление хороших и доступных для применения русских шрифтов.
Может, попробуете?
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.