CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
29.03.2017

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Окружение :: Шрифты

Система X Window и шрифты

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

Очевидно, что растровые шрифты единственно пригодны для применения в чисто текстовом режиме. Теоретически в графической (через Frame Buffer) консоли можно было бы воспроизводить и векторные шрифты, но практически это нигде и никем не реализовано. Да и вообще тема консольных шрифтов будет рассмотрена в специальной заметке. А вот в Иксах могут быть использованы как растровые, так и векторные шрифты, причем последние - во многих форматах.

Для растровых шрифтов в Иксах обычно применяется формат PCF (Portable Compiled Font). Эти шрифты по своей природе почти немасштабируемы - как и консольные шрифты для текстового режима. Конечно, в графическом режиме символ, образованный матрицей точек, можно в принципе растянуть (или сжать) по вертикали и горизонтали как угодно - но вид его при этом будет варьировать от среднепаршивого до вполне отвратительного. И потому каждая PCF-гарнитура содержит файлы шрифтов с несколькими матрицами точек - собственно, число матриц конкретного шрифта и определяет возможности его масштабирования. Но - не только: наборы растровых шрифтов предназначены для совершенно конкретных разрешений, как правило - 75 и 100 dpi (dot per inch, то есть точек на дюйм - здесь термин разрешение используется в квази-типографском смысле, а не в контексте видеосистемы). Первые используются при экранных (то есть пиксельных) разрешениях вплоть до 800x600, вторые - от 1024x768 и выше.

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

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

Штатная поставка Иксов в обязательном порядке включает в себя два шрифтовых набора растровых шрифтов общего назначения - с разрешениями 75dpi и 100dpi: именно под такими именами фигурируют содержащие их подкаталоги в сводном шрифтовом каталоге /usr/X11R6/lib/X11/fonts/. Ни тот, ни другой набор (а в их составе гарнитуры Courier, Helvetica, Times и несколько специальных) символов кириллицы не содержат ни в какой кодировке ее.

Впрочем, дискриминация русскоязычных (и кириллически-ориентированных) пользователей не столь уж выражена: испокон веку в комплекте Иксов есть и набор "нашинских" растровых шрифтов производства фирмы Cronyx, включающий гарнитуры Courier, Fixed (моноширинные), Times и Helvetica (моноширинные) - правда, только для кодировки KOI8-R. Качество их не то чтобы очень высокое, но на первое время сойдет.

Столь же обязательно наличие в комплекте Иксов так называемых misc-шрифтов, которые располагаются в каталоге /usr/X11R6/lib/X11/fonts/misc. Это - чисто моноширинные шрифты единственной гарнитуры (Fixed), которая включает набор шрифтовых файлов с разными матрицами (4x6, 5x7, 6x8 и так далее, вплоть до 10x20) и для разных наборов символов: в числе их, наряду со всеми кодировками ISO8859 (включая ISO8859-5 - ранее это называлось кодировкой ГОСТ для кириллицы), присутствует и KOI8-R. Шрифты misc-fixed предназначены в основном для терминалов, но могут использоваться и в приложениях (например, в текстовых редакторах).

В отечественные дистрибутивы Linux, а также в порты FreeBSD, включены дополнительные растровые шрифты с поддержкой кириллицы. Это - шрифты, выполненные Дмитрием Болховитяновым, собравшим их в виде пакета под именем cyr-rxf. Пакет этот включает, кроме стандартных гарнитур Times, Helvetica, Courier, дополнительные пропорциональные гарнитуры Lucida и Serene и моноширинные - Lucida Typewriter и Serene Typewriter, и существует ныне для всех кодировок Великого и Могучего. Не смотря на то, что все эти шрифты рассчитаны на разрешение 75 dpi, каждая гарнитура содержит большое количество шрифтовых файлов с разными матрицами (от 8 до 24 точек по вертикали), что позволяет использовать их при высоких разрешениях. И еще одна отличительная особенность пакета - наличие отдельных шрифтовых файлов для разных начертаний - нормального, курсивного и полужирного. С подробностями об этих шрифтах можно ознакомиться здесь.

Что касается векторных шрифтов - Иксы, насколько мне известно, поддерживают все распространенные их форматы. Однако практическое значение в наших условиях имеют только Adobe Type 1 и True Type Fonts (TTF) - прочие, типа Speedo, поддержкой кириллицы не обременены. Однако и для Type 1 или TTF кириллических вариантов штатно не предусмотрено. И потому обзаведение ими для использования в Иксах - дело рук самого использователя.

Правда, отечественные дистрибутивы содержат и кириллические шрифты обоих типов, причем - для многих кодировок кириллицы, включая, кроме KOI8-R, также CP1251 и ISO8859-5. В формате Type 1 существует несколько шрифтовых наборов для кодировки KOI8-R. Однако они бедны в отношении гарнитур, качество шрифтов не всегда "на уровне", и лицензионная чистота некоторых из них не вполне ясна.

Наиболее интересны наборы Type1 и TTF, разработанные Валентином Филипповым и распространяемые в составе дистрибутивов Altlinux, но доступные в Сети и сами по себе, в частности - здесь. Гарнитуры обоих наборов - весьма многочисленны: здесь и гротески Avantgarde, Gothic, Helvetica, Nimbus Sans, и серифы Bookman, Centure Scoolbook, Nimbus Roman, Palatino, Times, и моноширинные гарнитуры Courier и Nimbus Mono. Качество шрифтов весьма высокое - хотя и не всех. Имеются отдельные файлы для различных шрифтоначертаний - нормального, "легкого", полужирного и жирного, курсивного. Шрифты Валентина изначально создавались в кодировке Unicode (UTF8), так что могут быть использованы для передачи любых наборов символов кириллицы (как KOI8, так и CP1251). В общем, учитывая их лицензионную чистоту, - вполне приемлемый выбор.

Однако наибольшее распространение в последнее время получили среди отечественных пользователей юникодные TTF-шрифты, заимствованные из Windows. Малый их джентльменский набор, включающий гарнитуры гротеска Arial, Tahoma, Verdana, сериф Times New Roman, моноширинные Andale и Coutier New, долгое время (видимо, по недосмотру) был доступен свободно на сайте Microsoft. Правда, на условиях распространения только через Сеть (то есть без права на включение в дистрибутивы) и исключительно в первозданном виде - каковой являл собой, понятное дело, cab-архивы. Теперь с сайта Microsoft эти шрифты исчезли, но явного запрещения на их использование и сетевое распространение, насколько мне известно, так и не последовало. И потому их можно (в виде пакета corefonts) скачать с одного из сайтов, где они имеют место быть, распаковать и юзать в своей POSIX-системе вполне легально. На сей предмет была даже специально придумана утилита cabextract и разработана методика ее применения.

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

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

Вернемся, однако, к столь полюбившимся пользователям шрифтам от MS (тем более, что все описанное ниже справедливо и для любых иных шрифтовых наборов). Как уже говорилось, файлы любого шрифтового набора принято помещать в отдельный каталог внутри каталога /usr/X11R6/lib/X11/fonts/. Поступим так и с извлеченными из cab-архива TTF-шрифтами, создав для них подкаталог corefonts (например). Однако, чтобы Иксы были в состоянии их воспринять, шрифтовой подкаталог должен содержать еще файл fonts.dir и (для масштабируемых векторных шрифтов) fonts.scale. Это - простые списки имен шрифтовых файлов и полного описания соответствующего им шрифтоначертания, например:

Arial.TTF -monotype-Arial-medium-r-normal--0-0-0-0-p-0-koi8-ru

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

Первое поле в терминологии xfontsel носит название fndry - от слова foundry, одно из значений которого - литейная форма (шрифта). А его содержание - это имя фирмы-разработчика, в примере - известного разработчика шрифтов Monotype (то есть можно понимать таr - отлито Монотайпом). И маленькое отступление для тех, кто не может поступиться принципами. И кому западло использовать что бы то ни было, произведенное в "Империи зла". Так вот, все TTF-шрифты из поставки Windows разработаны именно фирмой Monotype. Более того, гарнитуры Arial, Courier New и Times New Roman - это вариации на тему классических гарнитур Helvetica, Courier и Times, соответственно, которые вообще являются общенародным достоянием, а Tahoma и Verdana созданы Monotype по мотивам гротесков середины прошлого столетия. О происхождении Andale, к сожалению, ничего сказать не могу, но полагаю - и тут ничто не ново под луной. Так что при использовании этих шрифтов поступаться принципами не приходится...

Второе поле нашей "как бы базы" (в xfontsel оно называется fmly, то есть family) - это имя гарнитуры, которую данный шрифтовой файл представляет. Третье (wght - от weight, то есть толщина) - шрифтоначертание в критериях насыщенности, в примере - нормальное (medium), другие возможные значения - "светлое" (light), полужирное (bold), и так далее. В следующем же поле (slant) описывается шрифтоначертание с точки зрения наклона - нормальное (r - от roman) или курсивное (i, o - от italic и oblique, соответственно). За этим следует поле sWdth (set Width), описывающее "компоновку" шрифта - нормальную (normal), как в примере, или сжатую (condensed). Ну а позиция между двумя дефисами - это принадлежность гарнитуры к одному из трех семейств (к традиционным serif и sans serif добавляется decorative); очевидно, что она следует из имени гарнитуры, и потому здесь это поле пустое.

Следующие четыре поля определяют: размер шрифта в пикселях (pxlsz), размер шрифта в "точках" (points, ptsz), разрешение шрифта по горизонтали (resx) и вертикали (resy) в точках на дюйм (dpi). В примере все они заполнены нулями, что свидетельствует о принадлежности рассматриваемого шрифта к категории масштабируемых (таковыми являются все векторные шрифты, как TTF, так и Type 1). Однако для растровых шрифтов здесь стояли бы соответствующие значения, характеризующие данный шрифтовой файл, например 10-100-75-75. Следующим полем (spc - от spacing) описывается принадлежность к пропорциональному (p) или моноширинному (m) семействам. А затем - поле avgWdth, в котором определяется средняя ширина символа в шрифте. Наконец, в последних двух полях указываются набор символов (rgstry - от registry, и encdng - от encoding) шрифта (например, koi8) и его вариации (например, ru и r - для KOI8-R).

Рассмотренное описание каждого шрифта может показаться несколько запутанным и непонятным (да и на самом деле таковым является; хотя, как мы вскоре увидим, некоторая сермяжная правда в таком формате есть). Тем не менее, это - объективная реальность, данная нам в ощущениях разработчиков Иксов, и с ней приходится считаться. То есть - создать файл fonts.dir в новообразованном каталоге. Благо, для этого существуют утилиты - mkfontdir для шрифтов Type 1 и ttmkfdir - для шрифтов True Type. Правда, в комплект Иксов входит лишь первая - вторая должна быть установлена самостоятельно. Однако использование обеих - элементарно просто: достаточно дать одноименную команду с именем шрифтового каталога в качестве аргумента, в нашем примере это будет выглядеть так:

$ ttmkfdir /usr/X11R6/lib/X11/fonts/corefonts

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

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

Теперь остается совсем немногое: внести в секцию Files Иксового конфига строку вида

        FontPath     "/usr/X11R6/lib/X11/fonts/corefonts/"

и перезапустить X-сервер, чтобы наслаждаться кириллическими TTF-шрифтами. Проследив предварительно, имеет ли место быть в секции Module конфига строка

	Load  "ttf"

обеспечивающая их поддержку: с некоторых пор это штатная функция X-сервера, тогда как ранее для использования True Type требовались специальные серверы шрифтов (Fonts Server). Использование их не возбраняется и ныне, однако на настольной машине, по моему мнению, лишено смысла. Единственное, что дает Font Server - это возможность загрузки шрифтов с удаленного компьютера, что для пользовательского десктопа не актуально. А вот тормозить работу Иксов сервер шрифтов может вполне...

Теперь нужно только найти способ разбираться с наличным шрифтовым богачеством - выбирать нужные шрифты и устанавливать их. Что касается последнего - для собственно Иксовых приложений это делается либо опциями их командной строки при запуске, либо - в специальных файлах X-ресурсов, о чем речь пойдет в ближайшей интермедии. А вот выбор нужного для установки шрифта возможен на поминаемую выше утилиту xfontsel. Она позволяет через пункты меню, соответствующие описанным ранее полям в файле fonts.dir, выбрать для последних нужные значения (с визуальным контролем результата), а затем, нажатием на кнопку select, скопировать их в буфер. После чего параметры нужного шрифта могут быть либо вставлены в 4командную строку в виде значения соответствующей опции (например, опции -fn), либо вставлены в описание ресурсов приложения в файле типа ~/Xdefaults (см. следующую интермедию).

Выбирать шрифт через меню xfontsel можно в любом порядке. Например, можно сначала через два последних пункта (rgstry и encdng) отфильтровать только шрифты с поддержкой кириллицы, а затем уже определиться с гарнитурой, шрифтоначертанием и размером. Более того, для корректного представления шрифта часто нет нужды в определении всех параметров шрифта: некоторые из них (как, например, размер в пикселях и точках, горизонтальное и вертикальное разрешения) жестко сцеплены друг с другом: выбор размера шрифта 12 пунктов автоматически влечет установку значения 120 в точках. А такие параметры, как семейство гарнитур или их характер (пропорциональный и моноширинный), вообще однозначно вытекают из имени гарнитуры. Хотя шрифты можно фильтровать и по этим признакам: сначала отобрать все моноширинные гарнитуры, пригодные для использования в терминале, а потом уже детализировать свой выбор. Почему я и говорил, что формат описания шрифта содержит в себе некую сермяжную правду...




Комментарии

marina, Tue Jun 23 22:50:41 2009:
Очень полезно. Очень непонятно. :):)
totchaz, Wed Apr 22 10:16:15 2009:
Отличная статья! Дает ответ на многие вопросы, появляющиеся при попытке разобраться в системе шрифтов. На мой взгляд - очень стоящий материал. Спасибо!
ubsd, Sat Apr 4 03:40:43 2009:
спасибо за статью;
2rapitosov: спасибо за порт =)
rapitosov, Fri Jun 15 07:30:11 2007:
спасибо, очень познавательно, единственное замечание: в портах FreeBSD шрифты corefonts находятся в x11-fonts/webfonts, что вызывает некоторое недоумение

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds