Фонты и их использование в Linux

В.А.Костромин

Статья была опубликована в декабрьском за 2000 год номере журнала "BYTE/Россия".

В статье подробно рассмотрен вопрос о том, как Linux работает с фонтами, и что нужно сделать для того, чтобы установить в систему новые фонты (в том числе фонты True Type).

1. Терминология
2. Форматы файлов фонтов
3. Конфигурация X-сервера
4. Серверы фонтов
5. Ревизия фонтового хозяйства
6. Подключение новых фонтов
7. Фонты для печати на принтере
8. Примечания
9. Источники и ссылки

1. Терминология

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

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

Примечание: Как отметил А.Федорчук, это определение не соответствует определению шрифта, принятому в типографском деле. Однако я не стремлюсь дать строго научное определение шрифта, достаточно вложить в этот термин тот смысл, который вкладывается в него обычно.

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

Когда шрифты стали использоваться в различных программах для вывода текстов на монитор в графических режимах и для вывода текста на принтер, в русском языке появился новый термин - фонт. Понятие "фонт" шире понятия "шрифт", поскольку подразумевает не только собственно шрифт, как набор изображений символов, но и способ формирования этих изображений на экране и/или бумаге, и способ сохранения этих изображений в файле. Кроме того, словом "фонт" называют просто файл с изображениями символов шрифта. В настоящей работе в последнем случае будем употреблять термин "файл фонта", а термин "фонт" будем употреблять во втором смысле: как совокупность типографского шрифта и способа вывода изображений символов на печать, и способа сохранения шрифта в виде файла. Таким образом, можно сказать, что шрифт - понятие типографское, а фонт - компьютерное.

Существует два основных типа фонтов: растровые и контурные. В растровых фонтах изображение символа составляется из отдельных точек и сохраняется в файле в виде двоичной матрицы или "битовой карты" (bitmap). Поэтому такие фонты можно назвать матричными. Растровые фонты являются аппаратно-зависимыми - они предназначены для получения только определенных разрешений. Матричный шрифт с разрешением 75 точек на дюйм (75 DPI) даст только 75 точек на дюйм даже на принтере, обеспечивающем разрешение 1200 DPI. Для обеспечения возможности изменения размера шрифта приходится либо хранить в файле битовые карты для разных размеров шрифта, либо изображение приходится увеличивать или уменьшать в целое число раз, что приводит к деформации изображений символов. Кроме того, при использовании растровых шрифтов для печати необходимы дополнительные принтерные шрифты, соответствующие экранным. Матричные экранные фонты обычно используются в терминальных окнах, в консоли и в простых текстовых редакторах, где отсутствие масштабируемости и тот факт, что они не могут использоваться для печати, не так существенны.

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

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

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

Еще одно понятие, которое необходимо для описания и классификации шрифтов (и, соответственно, фонтов), это сериф. Серифы - это небольшие выступы у оснований символов и в верхней части изображений символов. Например, буква "i" в таких шрифтах как Times Roman имеет серифы у основания и в верхней части вертикальной черты. Серифы появились в изображениях символов шрифтов относительно недавно и позволили улучшить зрительное восприятие символов. Шрифты, в которых используются серифы, считаются более читабельными, чем шрифты без серифов. При малых размерах символов серифы обычно не используются, так как отсутствие лишних элементов позволяет легче их воспринимать. Например, фирма Microsoft рекомендует шрифт Verdana как наиболее подходящий для очень малых размеров символов при выводе на экран.

Межсимвольное расстояние задает интервал, на который символы шрифта отстоят друг от друга. Бывают шрифты с фиксированным межсимвольным расстоянием и фиксированным размером символов (речь идет о ширине, высота символов у обычных шрифтов и так фиксирована) или fixed width fonts, и шрифты переменной ширины - variable width fonts. Шрифт фиксированной ширины выглядят как текст, напечатанный на пишущей машинке, поскольку все буквы имеют одну и ту же ширину. Это качество желательно для таких применений как компьютерная консоль, но нежелательно для больших печатных документов. Шрифты с фиксированной шириной символов часто используются, например, в примерах, иллюстрирующих компьютерные команды.

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

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

Кернинг улучшает качество восприятия текста, изменяя межсимвольное расстояние в некоторых парах символов, которые называются парами кернинга. Например, при изображении пары символов "То" маленькая буква "о" должна быть приближена к заглавной "Т", и даже размещаться частично "под" этой "Т", что повышает качество изображения.

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

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

Варианты шрифтов

Каждый шрифт обычно содержит несколько вариантов изображений каждого символа. Большинство шрифтов содержат такие варианты как жирный (bold), курсив (italic) и полужирный курсив (bold-italic). Некоторые шрифты имеют дополнительные варианты, например, полужирный или small caps, когда строчные буквы заменяются уменьшенными заглавными (этот вариант фонта чаще всего используется для создания заголовков).

2. Форматы файлов фонтов

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

Растровые (матричные) фонты (Bitmap Fonts)

Существует два типа матричных фонтов -- принтерные матричные шрифты (bitmap printer fonts), такие как шрифты pk, генерируемые программой dvips, и матричные экранные фонты, используемые в системе X Window и в консольном режиме. Файлы матричных фонтов обычно имеют расширения bdf или pcf.

Фонты Type1

В Linux ведущим форматом фонтов является Adobe PostScript. Вообще, PostScript - это язык для описания страницы документа, он используется для вывода страницы с текстом и графикой на экран и на принтер (который поддерживает этот язык). Фонты Adobe Type основаны на данном языке. Существуют две основные разновидности - Type 1 PostScript font и Type 3 PostScript font. Стандартом является Type 1. Фонт Type 3 используется довольно редко. Фонты Type 1 применяются в различных графических и издательских программах, например Adobe PageMaker, но они не являются стандартными в Microsoft Windows и поэтому их использование ограничивается программами, специально разработанными для поддержки данных шрифтов.

Язык Postscript традиционно используется для печати в UNIX и поэтому фонты Type1 широко применяются в Linux. Они поддерживаются в графической системе X Window и программе управления печатью ghostscript.

Обычно шрифт Type1 для UNIX задается двумя файлами: файлом метрик с расширением afm (adobe font metric), и файлом контуров, который имеет расширение pfb (printer font binary) или pfa (printer font ascii). Файл контуров содержит все глифы, а файл метрик содержит метрики фонта.

Шрифты Type 1 для других платформ могут поставляться в других форматах. Например, шрифты postscript для Windows часто используют формат pfm для файла метрик.

Фонты Type3

Эти фонты распространяются примерно таким же образом, как фонты Type1 - в виде пары afm-файла метрик и pfa-файла контуров. Хотя они поддерживаются стандартом postscript, но не поддерживаются в X, поэтому имеют ограниченное применение.

Фонты TrueType

Технология TrueType была создана фирмой Apple для использования в операционной системе MacOS в 1990 году. Позже лицензию на эту технологию приобрела фирма Microsoft. Благодаря гигантской популярности MS Windows фонты TrueType стали ведущим форматом для компьютерных фонтов. Фонты True Type хранят метрики и информацию о начертаниях символов в одном файле (обычно с расширением ttf). Недавно были разработаны фонт-серверы, которые сделали фонты TrueType доступными для X. С некоторых пор стандарты postscript и ghostscript тоже поддерживают TrueType фонты. В силу этого, а также из-за того, что имеется большое количество высококачественных и доступных фонтов TrueType, они становятся все более популярными в Linux.

Фонты Type42

Фонты Type42 в действительности являются просто фонтами TrueType с дополнительным заголовком, что делает возможным обработку их интерпретатором postscript. Большинство приложений, таких как ghostscript и SAMBA могут работать с этими фонтами. Однако, если Вы имеете postscript-принтер, может оказаться необходимым явно создать файлы фонтов типа Type42.

Сравнение форматов Type1 и TrueType

Несмотря на длительное противостояние между сторонниками фонтов Type1 и True Type, эти форматы имеют много общего. Оба они представляют масштабируемые контурные шрифты. Разница в том, что фонты Type1 используют для построения глифов кривые Безье третьей степени в отличие от квадратичных кривых, на которых строятся фонты True Type. Теоретически это является преимуществом, поскольку тем самым Type1 включает все кривые, которые можно построить с помощью TrueType. На практике, однако, разница очень незначительна.

Фонты TrueType имеют преимущество, заключающееся в том, что обеспечивают лучшую поддержку хинтинга (фонты Type1 тоже поддерживают хинтинг, но не так эффективно). Это существенно только для устройств с низким разрешением, таких как экраны (улучшение хинтинга не дает заметной разницы на принтерах с разрешением 600dpi, даже при малых размерах точки). Улучшенный хинтинг не имеет большого практического значения еще и потому, что TrueType фонты с хорошим хинтингом встречаются достаточно редко. Причина этого в том, что пакеты ПО для создания фонтов, которые поддерживают хинтинг, слишком дороги для большинства дизайнеров фонтов. Только крупные фирмы, такие как Monotype, создают фонты с полноценной поддержкой хинтинга.

Надо отметить, что для фонтов TrueType требуется лишь один файл, а для фонтов PostScript Type - два (один из них хранит контуры шрифта, другой - дополнительную информацию, такую как расстояния между символами, и пр.).

В заключение надо сказать, что основная разница между фонтами TrueType и Type1 состоит в доступности и поддержке приложениями. Широкое распространение фонтов TrueType для Windows привело к тому, что многие страницы на сайтах Интернет создаются в предположении, что определенные фонты TrueType установлены на компьютере пользователя. Многие пользователи имеют на своих компьютерах большое число фонтов TrueType, поставляемых с приложениями Windows. Однако, под Linux большинство приложений поддерживают фонты Type1, но не поддерживают на том же уровне фонты TrueType. Кроме того, некоторые из основных производителей фонтов поставляют свои фонты в формате Type1. Например, фирма Adobe выпускает очень мало фонтов TrueType. Учитывая, что преобразование из одного формата в другой не может быть проведено без определенных потерь качества, надо стараться использовать в каждом приложении те фонты, на использование которых это приложение рассчитано.

Метафонт

Метафонт был разработан Дональдом Кнутом (Donald E Knuth) как часть его типографской системы TeX. Метафонт - это язык программирования графики (a graphics programming language), подобный postscript. Сфера применения этого языка шире, чем просто вывод изображений символов. У метафонта имеется ряд очень привлекательных качеств. Одна из очень важных особенностей, - то, что масштабирование выполняется очень изящно. Символы метафонта Computer Modern имеют различный вид при размере 20 точек и 10 точек. Изображения символов изменяются при изменении размера, потому что для малых размеров желательно увеличить ширину несколько больше, чем высоту (это делает символы больших размеров более элегантными, а символы маленьких размеров более читабельными).

Файлы метафонтов обычно имеют расширение mf. При выводе на печать или экран они преобразуются в растровые шрифты, определяемые устройством вывода. Это преобразование, хотя и дает высокое качество, осуществляется медленно, так что эти фонты не очень удобны для WYSIWYG publishing.

3. Конфигурация X-сервера

Теперь, когда введены все используемые в последующем термины и даны необходимые сведения о форматах фонтов, можно перейти к рассмотрению того, как настроить Ваш Линукс на корректную работу с фонтами. При этом я буду ориентироваться на пользователей дистрибутива Red Hat и его аналогов (у меня стоит Black Cat 6.02 и я на нем проверял изложенные ниже рекомендации).

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

Откройте файл XF86Config (обычно он находится в каталоге /usr/X11/lib/X11/ или /etc/X11/) с помощью любого текстового редактора. Недалеко от начала файла в секции "Files" Вы должны увидеть примерно такие строки:

FontPath        "/usr/X11R6/lib/X11/fonts/misc/"
FontPath        "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath        "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath        "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath        "/usr/X11R6/lib/X11/fonts/100dpi/"

Это и есть перечень каталогов фонтов X-сервера, который в англоязычной документации называется коротко FontPath. Порядок перечисления каталогов в этом перечне существенен: когда приложение запрашивает вывод текста на экран определенным шрифтом, X-сервер поочередно просматривает каталоги из FontPath и использует для вывода текста первый фонт, который соответствует запросу приложения.

Если используются установки, задаваемые по умолчанию, то растровые фонты с разрешением 75 DPI обычно оказываются размещены в этом перечне перед фонтами с разрешением 100 DPI. Следствием этого может оказаться то, что на экранах с высоким разрешением символы будут очень маленькими. Если такой эффект у Вас проявляется, поменяйте порядок перечисления каталогов в FontPath.

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

FontPath        "/usr/X11R6/lib/X11/fonts/misc/:unscaled"
FontPath        "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath        "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath        "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath        "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath        "/usr/X11R6/lib/X11/fonts/misc/"
FontPath        "/usr/X11R6/lib/X11/fonts/100dpi/"
FontPath        "/usr/X11R6/lib/X11/fonts/75dpi/"

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

Кстати, раз уж Вы заглянули в XF86Config, неплохо заодно проверить и другие установки, определяющие конфигурацию X-сервера. Неправильное задание параметров работы монитора может доставить гораздо больше головной боли, чем неправильный выбор шрифта. В частности, убедитесь, что частота обновления экрана выбрана максимально возможной для Вашей аппаратной конфигурации (85 Hz - это великолепно, 75 Hz - неплохо, а 60 Hz - это просто вредно для Вашего зрения).

4. Серверы фонтов

Хотя вывод символов на экран с помощью X-сервера графической подсистемы XFree86 и обеспечивает вывод текста, однако этот способ имеет два крупных недостатка. Во-первых, фонты должны располагаться на том же компьютере, на котором запущен X-сервер. Во-вторых, не обеспечивается вывод фонтов True Type. Для преодоления этих недостатков были разработаны специальные серверы фонтов (надо отметить, что в версии XFree86 4.x второй недостаток уже отсутствует, так что специальный фонт-сервер уже не нужен, если речь идет только о поддержке фонтов True Type).

В настоящее время существует три разных сервера фонтов: xfs, xfstt и xfsft.

Фонт-сервер xfs

Если Вы пользуетесь дистрибутивом, основанным на Red Hat (Mandrake и т.п.), то фонт-сервер xfs у Вас, вероятно, установлен. Сообщение о запуске фонт-сервера xfs появляется на экране монитора в процессе загрузки, а, кроме того, соответствующее сообщение об успешном запуске xfs можно найти в файле /var/log/messages.

В случае применения xfs, в файле XF86Config вместо перечня каталогов с фонтами Вы увидите всего одну строку следующего вида:

FontPath "unix/:-1"

Эта строка является ссылкой на номер порта, который будет использоваться для связи с фонт-сервером.

Использование фонт-сервера не означает, что имеет место полный отказ от перечня каталогов с фонтами. Только теперь это перечень переносится в конфигурационный файл программы xfs. По умолчанию это файл /etc/X11/fs/config. В секции "catalogue" этого файла и перечислены теперь все каталоги с фонтами. Соответствующая секция файла /etc/X11/fs/config должна выглядеть примерно так:

    catalogue = /usr/X11R6/lib/X11/fonts/misc:unscaled,
                /usr/X11R6/lib/X11/fonts/100dpi:unscaled,
                /usr/X11R6/lib/X11/fonts/75dpi:unscaled,
                /usr/X11R6/lib/X11/fonts/Type1,
                /usr/X11R6/lib/X11/fonts/Speedo,
                /usr/X11R6/lib/X11/fonts/misc,
                /usr/X11R6/lib/X11/fonts/100dpi,
                /usr/X11R6/lib/X11/fonts/75dpi,
                /usr/local/share/fonts/ttfonts
(обратите внимание на отсутствие запятой в последней строке).

Правда, Вы можете по-прежнему включить строки с указанием путей к каталогам фонтов в файл XF86Config (вместе со строкой "FontPath "unix/:-1"), но они будут обрабатываться не фонт-сервером, а X-сервером.

xfs от Redhat способен обслуживать как фонты Type 1, так и фонты TrueType.

Фонт-сервера xfstt и xfsft

Если Ваш дистрибутив не включает сервер фонтов xfs, Вы можете воспользоваться одним из альтернативных фонт-серверов xfstt (http://metalab.unc.edu/pub/Linux/X11/fonts/) или xfsft (http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/).

xfstt - это фонт-сервер, созданный исключительно с целью обслуживания фонтов TrueType на локальной машине. Поэтому он поддерживает только фонты TrueType и не может обслуживать фонты на нескольких машинах в сети. Учитывая это, предпочтительнее пользоваться фонт-сервером xfsft или фонт-сервером xfs от Red Hat, о котором мы уже говорили. Заметим, что фонт-сервер xfsft послужил основой для доработки xfs, и модуль работы с фонтами в XFree86 версии 4 создан разработчиком xfsft. Наверное поэтому этот фонт-сервер перестал поддерживаться разработчиком, так что Вам лучше сразу ориентироваться на xfs или переходить на XFree86 версии 4.

5. Ревизия фонтового хозяйства

Установлен ли фонт-сервер

Давайте начнем такую ревизию с проверки того, что корректно установлен фонт-сервер xfs. Вначале запустите команду:
        ps ax|grep xfs
Если xfs уже установлен в Вашей системе (в противном случае установите его), Вы должны увидеть строку примерно такого вида:
  401 ?        S      0:04 xfs -droppriv -daemon -port -1 
По этой строке можно определить, какой порт использует эта программа. Этот же номер должен быть указан в строке вида
                FontPath "unix/:port_number" 
в секции "Files" в конфигурационном файле X-сервера (в Red Hat это файл /etc/X11/XF86Config). Скорее всего секция "Files" в этом случае вообще содержит только одну строку FontPath, например, такую:
                FontPath "unix/:-1" 
Впрочем. можно не искать файл /etc/X11/XF86Config, а выполнить команду:
                xset -q
в выводе которой Вы должны увидеть такие строки:
 
FontPath 
         "unix/:-1" 
Если перечень каталогов фонтов XFree86 содержит строку типа unix:/port_number, где port_number совпадает с номером порта, используемым программой xfs (Вы получили его по команде ps), то сервер xfs у Вас установлен корректно. В противном случае, Вы должны добавить ссылку на него в перечень каталогов фонтов XFree86 либо с помощью команд:
                xset fp+ unix/:port_number
                xset fp rehash
либо путем непосредственной корректировки файла /etc/X11/XF86Config и последующего перезапуска X Window.

Для редактирования файла /etc/X11/XF86Config Вы должны иметь права суперпользователя. Если Вы таких прав получить не можете, то для корректной установки фонт-сервера Вы должны обатиться к администратору.

Какие фонты имеются в Вашей системе

Давайте теперь посмотрим, какие фонты установлены в системе. Поскольку Вы уже знаете (загляните еще раз в FontPath), в каких каталогах находятся файлы фонтов, Вы можете непосредственно просмотреть эти каталоги. Но одного наличия файла с фонтом еще недостаточно для того, чтобы фонт был доступен для X-сервера. Для того, чтобы увидеть список фонтов, известных X-серверу, лучше воспользоваться командой xlsfonts, которая выводит на экран перечень таких фонтов. Если запустить ее с опцией -lll, то она дополнительно выдаст массу информации о каждом фонте. Перенаправьте вывод в файл :
    xlsfonts > fontlist
и Вы получите список доступных фонтов в файле fontlist.

Но для того, чтобы этот список прочитать, надо иметь представление о том, как именуются фонты. Без этого прочитать полученный файл fontlist будет очень трудно.

Существует стандарт консорциума X (X Consortium) на имена фонтов для X Window System, который называется X Logical Font Description Conventions (обычно упоминаемый как XLFD). Полное описание его дано в [10]. В соответствии с этим стандартом имя фонта состоит из 14 полей :

foundry (fndry) - производитель фонта (Adobe, Bitstream и т.п.);
family (fmly) - название семейства фонтов (например, Times);
weight (wght) - толщина (bold, demibold, medium);
slant (slant) - наклон (roman, italic, oblique);
set width (sWdth) - ширина (normal, condensed, double wide);
add style (adstyl) - стиль (serif, sans serif, decorated);
pixel size (pxlsz) - размер символа по вертикали (в пикселах, 0 означает масштабируемый фонт);
point size (ptSz) - размер символа по горизонтали;
resolutionX (resx) - разрешение по горизонтали;
resolutionY (resy) - разрешение по вертикали;
spacing (spc) - ширина символов (пропорциональный, моноширинный);
avg width (avgWdth) - среднее значение ширины глифов фонта;
registry (rgstry) - название стандарта на кодировку символов (koi8, iso8859);
encoding (encdng) - язык или кодовая страница (r, u).

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

При задании конкретного фонта поля в его имени принято разделять дефисами. Приведем пару примеров имен в стандарте XLFD:

-adobe-times-medium-r-normal-*-14-140-75-75-p-74-iso8859-1
-misc-fixed-medium-i-semicondensed-*-13-120-75-75-c-60-koi8-r
-adobe-courier-bold-o-normal-*-10-100-75-75-M-60-iso8859-1
(если какое-то поле не определено, то в соответствующей позиции ставится звездочка; таким образом можно одной строкой задать множество фонтов).

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

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

Эти две команды могут оказаться полезными, как для определения того, какие фонты уже имеются в системе, так и для проверки того, что новые фонты успешно установились. Я не буду здесь подробно описывать, как пользоваться этими командами. Воспользуйтесь соответствующими man-страницами или системой info.

На мой взгляд пользователь обычно руководствуется в выборе шрифта только следующими признаками из перечисленных выше: семейство фонтов (fmly), вариант фонта - жирный шрифт или обычный (wght), наклон (slant), ширина шрифта (sWdth), размер шрифта в пикселах (pxlsz), стандарт (rgstry) и язык (encdng).

Попробуйте выбирать разные значения этих параметров в программе xfontsel и Вы получите неплохое представление о том, какие фонты установлены в Вашей системе. Для русскоязычных пользователей просмотр стоит начать с двух последних полей. Задайте для поля rgstry значение koi8, а для поля encdng - значение r, и Вы увидите сколько русскоязычных фонтов в кодировке koi8-r у Вас установлено. Кириллические фонты задаются также значениями iso8859-5 в двух последних полях.

Кроме xlsfonts и xfontsel cуществуют еще несколько программ для просмотра установленных в системе фонтов.

Файлы fonts.dir, fonts.alias и fonts.scale

Если Вы последуете приведенному Выше совету и выполните команду
    xlsfonts > fontlist
а после этого пересчитаете число файлов в каталогах, перечисленных в FontPath, то скорее всего обнаружите, что в fontlist перечислено гораздо больше фонтов, чем имеется файлов с фонтами. Чтобы понять, почему это так, надо разобраться с файлами fonts.dir, fonts.alias и fonts.scale. Если Вы заглянете в любой каталог с фонтами, то найдете там по крайней мере файл fonts.dir, а может быть и два других: fonts.alias и fonts.scale. Для чего же они нужны?

Структура файла fonts.dir очень проста и из нее становится ясно, зачем этот файл нужен. Каждая строка файла fonts.dir (кроме первой) содержит имя одного из файлов с фонтом, содержащегося в том каталоге, где расположен данный файл fonts.dir, вслед за которым (после пробела или символа табуляции) указывается имя содержащегося в этом файле фонта. Пример:

koi12x24.pcf.gz -cronyx-fixed-medium-r-normal--24-170-100-100-c-120-koi8-u
Первая строка файла fonts.dir содержит число фонтов, перечисленных в этом файле (и, соответственно, имеющихся в данном каталоге с фонтами).

Файл fonts.dir совершенно необходим для того, чтобы X-сервер мог работать с фонтами. По-видимому (я могу судить об этом только на основании собственного опыта, поскольку в литературе такого описания не встречал), при запуске X-сервера или фонт-сервера на основе файлов fonts.dir из каталогов фонтов в оперативной памяти создается таблица доступных для системы фонтов.

Файл fonts.scale, по-видимому, задает список масштабируемых фонтов и необходим некоторым приложениям для корректной работы с такими фонтами. В большинстве случаев это либо точная копия файла fonts.dir, либо просто ссылка на fonts.dir. Естественно, что в каталогах с растровыми фонтами мы такого файла не найдем.

Файл fonts.alias - это еще один конфигурационный файл, оказывающий влияние на работу с фонтами. Уже по названию ("alias" - прозвище, кличка) можно догадаться о его назначении. Строки этого файла имеют следующий вид:
    синоним XLFD_имя_реального_фонта
При этом каждая строка должна оканчиваться только символом конца строки (must end with one linefeed) и владельцем файла должен быть суперпользователь.

Вот для примера первые строки из файла /usr/X11R6/lib/X11/fonts/misc/fonts.alias в системе Redhat :

fixed        -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
variable     -*-helvetica-bold-r-normal-*-*-120-*-*-*-*-iso8859-1
Слово fixed здесь является синонимом или ссылкой ('alias'). Каждый раз, когда запрашивается фонт 'fixed', будет фактически происходить обращение к фонту, указанному во второй колонке. Шрифт кажется маловат? Просто поменяйте имя, на которое дана ссылка этим определением.

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

Маленькое ПРЕДОСТЕРЕЖЕНИЕ для тех, кто имеет привычку "сильно быстро делать": некоторые синонимы должны быть известны системем в любой момент времени ! В первую очередь это относится к синонимам "cursor", "fixed" и "variable" в каталогах /misc. Если таких строк в misc/fonts.alias нет или они указывают на несуществующий фонт, то графическая оболочка просто откажется запускаться.

Файл fonts.alias важен для некоторых приложений, которые не могут нормально обрабатывать данные, предоставляемые файлом fonts.scale. Самый характерный пример - Netscape. Без fonts.alias Вы можете столкнуться с тем, что Netscape будет отображать только фонты с размером символов от 0 до 12 точек. Создав корректный файл fonts.alias в каталоге с фонтами truetype, Вы получите возможность выбирать из большего числа вариантов в "Preferences/fonts" в Netscape. Вы можете также обнаружить, что если Вы зададите какой-то другой размер для масштабируемого фонта в пункте "Preferences" настроек, Netscape не запомнит эту установку. Наличие файла fonts.scale позволяет устранить и этот недостаток. Приведем небольшой пример. Предположим, что в файле fonts.scale имеются строки:

 arial.ttf   -monotype-Arial-medium-r-normal--0-0-0-0-p-0-ascii-0
 arial.ttf   -monotype-Arial-medium-r-normal--0-0-0-0-p-0-fcd8859-15
 arial.ttf   -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-15
 arial.ttf   -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-1

Это масштабируемые фонты, так что в их именах не указаны размеры. Поэтому в файле fonts.alias должны, соответственно, присутствовать строки:

-monotype-Arial-medium-r-normal--6-60-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--9-90-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--7-70-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--9-90-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--8-80-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--10-100-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--9-90-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--11-110-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--10-100-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--12-120-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--11-110-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--12-120-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--12-120-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--12-120-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--13-130-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--13-130-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--14-140-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--14-140-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--15-150-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--15-150-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--18-180-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--18-180-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--24-240-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--24-240-75-75-p-0-iso8859-1

После этого Netscape будет корректно масштабировать фонт Arial.

Обратите внимание на различие в размерах шрифта в правой и левой колонках. Например, в первой строке слева указан размер в 6 точек, а справа - 9 точек. С помощью этого приема удается преодолеть "склонность" Netscape к использованию слишком маленьких шрифтов. Просто подберите справа цифры в соответствии с Вашими вкусами.

Создавать файлы fonts.dir, fonts.scale и fonts.alias вручную - занятие не из простых. Поэтому разработаны специальные программки, которые запускаются в каталоге с фонтами и создают эти файлы. Файл fonts.dir в каталоге с растровыми фонтами можно создать с помощью команды mkfontdir.

Для создания файлов fonts.dir и fonts.scale в каталогах с фонтами Type1 надо воспользоваться утилитой type1inst. Это скрипт на языке perl, который автоматически создает файлы fonts.dir и fonts.scale, которые необходимы для того, чтобы X-ы могли использовать фонты. Рекомендации по установке и настройке этого скрипта Вы найдете в файле README, который поставляется вместе с пакетом.

Для фонтов True Type необходима своя утилита ttmkfdir, которую можно найти на многих сайтах с программным обеспечением для Linux. В Redhat эта утилита включена в состав rpm-пакета Freetype.

На странице Some Linux for Beginners Вы можете найти скрипт на языке python, с помощью которого можно создать файл fonts.alias.

Удаление ненужных фонтов

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

Вначале давайте удалим фонты с иероглифами (если Вы не возражаете!). При работе с программой xfontsel я обнаружил, что иероглифы появляются на экране программы xfontsel тогда, когда в поле registry стоит комбинация jisx с какими-то еще цифрами. Перейдя в каталог /usr/X11R6/lib/X11/fonts/misc я просмотрел файл fonts.dir, который устанавливает связь между именами фонтов и именами файлов, в которых хранятся соответствующие фонты. С помощью этого файла нужно найти имена файлов с иероглифами и удалить их. После этого надо запустить команду mkfontdir, которая подкорректирует файл fonts.dir. Можно, конечно, и просто вручную удалить из fonts.dir строки, соответствующие удаленным файлам. Только не забудьте, что первая строка файла fonts.dir должна указывать число разных вариантов фонта (не файлов в каталоге, а практически умньшенное на единицу число строк в файле fonts.dir).

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

6. Подключение новых фонтов

Источники фонтов

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

Очень часто большие коллекции фонтов поставляются вместе с некоторыми графическими, издательскими или офисными программами. Примером может служить Microsoft Office или Corel Draw, в состав поставки которого входит громадный набор фонтов. Если пакет русифицирован, то в этом наборе фонтов найдутся и кириллические фонты.

В Internet тоже существует громадный выбор бесплатных или условно-бесплатных фонтов, однако не многие из них являются кириллическими. Адреса наиболее крупных и полезных сайтов с кириллическими фонтами. перечислены в приведенной ниже таблице.

Адрес Краткое описание
ParaType Сайт отечественной компании, занимающейся созданием кириллических шрифтов. На данном сайте можно заказать как фонты, так и диспетчеры шрифтов и редакторы фонтов.
Веди Сайт независимого центра по разработке и распространению кириллических шрифтов.
sunsite.unc.edu Здесь есть несколько пакетов кириллических фонтов.
Freshmeat Задайте поиск по слову "font" и Вы найдете несколько пакетов кириллических фонтов.
www.funet.fi Архив, предоставляющий довольно неплохой выбор кириллических фонтов.
Киархив На КиАрхив тоже проще всего воспользоваться предоставляемой там возможностью поиска. Там имеется, в частности, классический набор фонтов от Cronyx.
CYR-RFX На странице Д.Болховитянова Вы найдете разработанные им фонты.

В эту таблицу включены далеко не все сайты, на которых имеются кириллические фонты. Кроме того существует много сайтов с фонтами для английского и других языков, вроде китайского. Конечно, коллекции англоязычных фонтов гораздо более богатые, чем коллекции фонтов для русского языка. Если Вы хотите отыскать какой-то конкретный фонт для латиницы или просто пополнить свою коллекцию таких фонтов, начните поиск с одного из следующих сайтов: http://www.007fonts.com, http://www.freewarefonts.com/, http://www.1001freefonts.com/, http://www.fontfreak.com, Freeware Connection.

После того, как Вы скачали пакет фонтов, можно приступить к его инсталляции. Процедура инсталляции несколько отличается для фонтов Type 1 и True Type, поэтому рассмотрим эти два случая отдельно.

Инсталляция растровых фонтов и фонтов Type1

Сначала рассмотрим тот случай, когда Вы можете получить права суперпользователя. В таком случае выполните команду su и проделайте следующее:

Если Вы не используете фонт-сервер, то Вам необходимо добавить имя каталога, содержащего файлы Ваших новых фонтов, к перечню каталогов фонтов X-сервера в файле /etc/X11/XF86Config. Это можно сделать в каком-либо текстовом редакторе, а можно с помощью команды

        xset fp+ /usr/share/fonts/new
(имя каталога будет добавлено в конец списка) или
        xset +fp /usr/share/fonts/new
(имя каталога будет добавлено в начало списка). После этого надо дать команду
        xset fp rehash
чтобы X-сервер нашел новые фонты.

Инсталляция фонтов TrueType.

Мы подробно рассмотрим случай, когда используется дистрибутив, основанный на Red Hat, и фонт-сервер xfs.

Теперь, когда шрифты True Type установлены, Вы можете попробовать, как они работают, например, в Netscape.
- Запустите Netscape.
- Откройте окно "preferences/appearence/fonts" и раскройте выпадающий список "Variable Width Fonts". Там теперь должны появиться вновь установленные шрифты (я, например, увидел "Verdana (Microsoft)", именно тот единственный TT-фонт, который устанавливал). Выберите один из них.
Разрешите масштабирование, нажав кнопку "Allow Scaling" рядом со списком "Variable Width Font".
Установите опцию "Use my default fonts".
Затем выберите размер 12 в выпадающем списке справа.
Щелкните по кнопке OK. Теперь текст в окне Netscape должен отображаться выбранным Вами шрифтом.

7. Фонты для печати на принтере

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

В отличие от других операционных систем (например, Windows и MacOS), Linux, как и другие UNIX-ы не имеет аппаратно-независимой подсистемы печати. Некоторые приложения сами обеспечивают поддержку печати, но большая часть приложений предполагает, что принтер обладает возможностью интерпретировать язык Adobe PostScript. Но PostScript-принтеры довольно редко встречаются в наше время. Для того, чтобы можно было использовать другие типы принтеров, была разработана специальная программа, Ghostscript, которая может интерпретировать код PostScript, преобразовывать контурный шрифт в растровый, формировать соответствующие команды для принтера, обеспечивая тем самым печать на большинстве типов принтеров.

Поскольку все версии PostScript и Ghostscript поддерживают как фонты Type 1 и Type 42, а Ghostscript версии 4 и выше поддерживает и фонты True Type, то больших трудностей с организацией красивой печати под Линукс не возникает. По умолчанию (в Red Hat) фонты для Ghostscript устанавливаются в каталог /usr/share/fonts/defaults/ghostscript/. Поэтому если Вы хотите добавить какие-то фонты для печати, поместите файлы новых фонтов в этот каталог или создайте в нем символические ссылки на новые фонты. Впрочем, можно поместить файлы фонтов и другие каталоги, но тогда нужно будет в файле Fontmap указывать точный путь к фонтам. Далее нужно добавить указание о новых фонтах в файл /usr/share/ghostscript/N.M/Fontmap, который делает фонты доступными для Ghostscript.

Например, для того, чтобы добавить фонт Times New Roman и его варианты, скопируйте файлы times.ttf, timesbd.ttf, timesbi.ttf, и timesi.ttf в каталог /usr/share/fonts/defaults/ghostscript/ и добавьте следующие строки в файл Fontmap:

/Times New Roman		(times.ttf) ;
/Times New Roman Bold 		(timesbd.ttf) ;
/Times New Roman Bold Italic 	(timesbi.ttf) ;
/Times New Roman Italic 	(timesi.ttf) ;

8. Примечания

Конечно, я рассказал далеко не обо всех моментах, связанных с подключением новых и использованием имеющихся фонтов для системы X Window. Например, за рамками статьи остались вопросы настройки фонтов в конкретных приложениях, а также вопросы преобразования фонтов True Type в фонты Type1. Но, во-первых, всего я и сам не знаю, а, во-вторых, объем статьи не позволяет охватить все. Просмотрите те источники, которые приведены в разделе 9.

К сожалению, в Линуксе нет единой системы работы с фонтами. Каждую отдельную программу, каждое приложение надо отдельно настраивать для того, чтобы эта программа могла использовать фонты TrueType, Type 1 или еще какие-то фонты, почему-либо привлекательные для Вас. И в каждой программе это может делаться по своему ! Однако описание настроек каждой программы заняло бы слишком много места, так что это должно быть темой отдельной статьи.

9. Источники и ссылки

  1. Font HOWTO (http://www.linuxdoc.org/HOWTO/Font-HOWTO.html). Этот HOWTO вместе с документом, указанным в следующей ссылке, послужили основой для настоящей статьи.
    Исходный текст этого документа можно найти на web-странице http://pegasus.rutgers.edu/~elflord/font_howto.
    Русский перевод находится на сайте http://linux-ve.chat,ru/kos/font_HOWTO_ru/Font-HOWTO.html.
  2. XFree86 Font Deuglification Mini HOWTO (http://linuxdoc.org/HOWTO/mini/FDU/index.html).
  3. TrueType HOWTO (http://www.moisty.org/~brion/linux/TrueType-HOWTO.html).
  4. XFree86 4.x. На страничке http://www.xfree86.org/4.0/fonts.html Вы узнаете о поддержке фонтов в XFree86 4.x.
  5. TrueType Fonts in Debian mini-HOWTO (http://www.dimensional.com/~bgiles/debian-tt.html).
  6. Страничка фонт-сервера xfsft (http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/ ) все еще содержит полезную информацию, хотя она более не поддерживается. Дело в том, что Xfsft в настоящее время интегрирован в XFree86 как модуль `freetype' и поэтому отдельная версия фонт-сервера уже не актуальна. Версия 4.х XFree86 включает все функции Xfsft и много дополнительных.
  7. David Turner "Glyph Hell. An introduction to glyphs, as used and defined in the FreeType engine. Version 1.0 (html version) - 14 Jan 98. Этот материал имеется в Вашем каталоге /usr/doc/freetype-x.x/docs. Его полезно прочитать, если Вы хотите больше узнать о контурных фонтах, глифах, кернинге и других понятиях и терминах, связанных с фонтами.
  8. Adobe Systems Incorporated, "Adobe Glyph List" version 1.2, 22 Oct 1998.
    http://partners.adobe.com/asn/developer/typeforum/glyphlist.txt
  9. Е.Бырганов, "Описание кодировки для работы в среде X11 на русском языке", 28.10.1999.
    http://www.inp.nsk.su/~byrganov/publish/koi8-1/koi8-1.ru.html
  10. Jim Flowers, "X Logical Font Description Conventions", Version 1.5, X Consortium Standard, X Version 11, Release 6.3.
    ftp://ftp.x.org/pub/R6.4/xc/doc/hardcopy/XLFD/xlfd.PS.gz
  11. Советы по решению проблем с фонтами в Netscape Вы найдете на странице Consumer articles (http://help.netscape.com/kb/consumer/). Проведите на этой странице поиск по слову "font".
  12. Wordperfect for Linux -- Fonts and Printers (http://www.rodsbooks.com/wpfonts/). Это страничка Рода Смита (Rod Smith), автора "Using Corel Wordperfect 8 for Linux". Здесь Вы найдете информацию о поддержке фонтов TrueType в Wordperfect.
  13. На странице Some Linux for Beginners (http://home.c2i.net/dark/linux.html#ttf) обсуждаются вопросы использования фонтов в Линукс и приведены ссылки на полезные скрипты.
  14. На сайте Типомания Сергея Новикова Вы найдете хороший материал о шрифтах, типографике и т.д. Там же приведен глоссарий типографских терминов (как отметил А.Федорчук я в своей статье очень вольно обращаюсь с типографской терминологией, в частности, неправильно трактую термин "шрифт". Правильное толкование ищите на этом сайте.)
  15. В архиве выпусков журнала Publish (http://www.osp.ru/publish/archive/) можно почитать статьи на близкие темы.