Шрифты и dvi-драйверы
Как мы уже говорили, программа TeX (с тем или иным макропакетом) читает TeX-файл и преобразует его в файл с расширением .dvi (от слов "device independent"). Этот файл содержит информацию о том, какие буквы из каких шрифтов и в каком месте страницы надо разместить. (Любопытные могут изучить структуру этого файла подробнее; для начала посмотрите, что выдает программа dvitype, которая переводит информацию из dvi-файла в текстовую форму.)
Заметим, что в dvi-файлах указаны лишь номера букв, но не сказано, что, собственно говоря, надо напечатать на бумаге или показать на экране. На самом деле TeX этого и не знает: с его точки зрения каждая буква — это просто прямоугольник.
Откуда же берутся шрифты, используемые TeX'ом? Первоначальный комплект шрифтов создал сам Дональд Кнут. Для этого он вместе со своими коллегами
- разработал специальный формат, в котором записываются данные о размерах букв tfm;
- разработал специальный формат, в котором записываются данные о форме букв (pk}, есть также pk-файл} промежуточный формат gf); эти данные для каждой буквы указывают матрицу из черных и белых точек, которая должна быть напечатана на месте этой буквы;
- разработал специальный язык METAFONT, на котором удобно описывать буквы, и программу METAFONT (сокращенно mf), которая по такому описанию изготавливает tfm-файлы, а также pk-файлы для разных разрешений (измеряемых обычно числом точек на дюйм);
- написал описание семейства шрифтов Computer Modern на языке METAFONT (все шрифты, использованные до сих пор в этой книге, в своей латинской части повторяют шрифты Computer Modern);
- подготовил к изданию три книги, содержащие подробное описание программы METAFONT, ее комментированный текст, а также тексты шрифтов семейства Computer Modern (в дополнение к двум другим книгам: описанию TeX'а и комментированному тексту программы TeX!).
Вот пример: описание шрифта Computer Modern Roman (прямой светлый, как в основном тексте книги) размера 10 pt на языке METAFONT содержится в файле cmr10.mf (точнее, этот файл устанавливает значения параметров и затем отсылает к другим файлам).
Программа METAFONT, запущенная на этом файле с указанием разрешения 600 dpi (оно предусмотрено во многих современных принтерах), порождает файл cmr10.tfm (который на самом деле не зависит от разрешения) и файл cmr10.600pk.
Из этих двух файлов TeX использует лишь первый. Второй понадобится, когда dvi-файл, ссылающийся на шрифт cmr10, будет фактически печататься на принтере (с разрешением 600 dpi). Для принтера с другим разрешением может потребоваться вновь запустить программу METAFONT, указав тот же файл cmr10.mf, но другое разрешение.
Помимо шрифта cmr10, в стандартный комплект TeX а входят шрифты других размеров (cmr5, cmr6, cmr7, cmr8, cmr9, cmr12, cmr17). Кроме того, можно масштабировать шрифты (при этом TeX использует тот же самый tfm-файл, но другой pk-файл, потому что число точек в увеличенном шрифте другое).
Вернемся к dvi-файлам. Как мы уже говорили, в результате обработки TeX'ом tex-файла получается dvi-файл. Формат его стандартизирован и не зависит ни от использованного макропакета, ни от реализации TeX'а. Этот файл содержит указания о размещении символов на странице. В dvi-файл записываются только названия используемых шрифтов, но не их начертания.
В свою очередь, dvi-файл обрабатывается с помощью программы, называемой dvi-драйвером, которая осуществляет печать, показ текста на экране и т.п. (для разных устройств и разных нужд есть разные драйверы); dvi-драйвер в процессе работы использует растровые описания шрифтов, то есть pk-файлы.
Например, драйвер dvihplj, входящий в состав системы emTeX (для DOS), преобразует dvi-файл в файл в языке PCL (который понимают многие лазерные принтеры). Драйвер xdvi, входящий в состав системы teTeX (для UNIX), показывает dvi-файл на экране, используя вызовы оконной системы X Window System (в этом контексте слово "Window" не имеет никакого отношения к системе с похожим названием одной известной фирмы). И так далее.
Современные dvi-драйверы действуют обычно по следующей схеме: если готового pk-файла нет, они запускают программу метафонт, которая из mf-файла генерирует этот pk-файл с нужным разрешением.
Некоторые реализации TeX'а идут в этом отношении еще дальше: если в процессе обработки tex-файла встречается запрос на шрифт, для которого нет соответствующего tfm-файла, то вызывается метафонт, который недостающий tfm-файл и генерирует (по канону в такой ситуации TeX должен выдавать сообщение об ошибке).
Строго говоря, TeX может работать с любыми шрифтами, надо только, чтобы для них были соответствующие tfm-файлы и чтобы соответствующие имена шрифтов были предусмотрены в используемом макропакете. В частности, довольно часто с TeX'ом используют так называемые "Type 1 PostScript-шрифты". О них, а также о языке PostScript, более подробно говорится в приложении Б.
2) Кроме символа "\".