Шрифты в Linux: различия между версиями

Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
Строка 40:
Главным конфигурационным файлом X.org Server чаще всего является файл /etc/X11/xorg.conf. За шрифты в нём отвечает секция '''Files''', вот как она может выглядеть:
 
<sourcesyntaxhighlight lang="text">Section "Files"
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
Строка 48:
ModulePath "/usr/lib/xorg/modules"
EndSection
</syntaxhighlight>
</source>
 
Нас интересует директива '''FontPath''', в которой указывается полный путь к каталогу, содержащему файлы шрифтов. Если этих директив нет или в них указаны неверные пути, или по указанным путям нет шрифтов, X-сервер не запустится. Внутри каталога шрифтов должны находиться непосредственно файлы шрифтов, а также несколько специальных служебных файлов: encodings.dir, fonts.alias, fonts.dir.
Строка 79:
XLFD-запись о шрифте представляет собой четырнадцать полей, разделённых симоволом «-». Каждое поле описывает какую-либо характеристику шрифта (название, начертание, кодировку и т.д.). Вот пример полностью определённой XLFD-записи о шрифте:
 
<sourcesyntaxhighlight lang="text">-monotype-arial-bold-r-normal--12-120-75-75-p-0-koi8-r</sourcesyntaxhighlight>
 
Запись может быть и не полностью определённой, в этом случае вместо конкретного значения какой-либо части стоит символ «*», например, так:
 
<sourcesyntaxhighlight lang="text">-monotype-arial-*-*-*--12-120-75-75-p-0-koi8-r</sourcesyntaxhighlight>
 
Каждая XLFD-запись соответствует некоторому набору из списка известных X-серверу шрифтов. Для полностью определённой записи такой набор может состоять из одного элемента максимум либо же вовсе быть пустым. Для неполностью определённой набор может состоять из нескольких записей. Когда выполняется некоторое приложение (то есть X-клиент), оно передаёт X-серверу XLFD-запись о желаемом шрифте. Чем менее определённой является эта запись (то есть чем больше символов «*» в ней встретится), тем больше вероятность, что подходящий под неё шрифт будет обнаружен и предоставлен. То есть XLFD играет роль маски при выборе шрифта.
Строка 93:
А теперь несколько примеров, чтобы проиллюстрировать сказанное. Попробуем запустить программу ''xterm'' и укажем ей использовать любой шрифт:
 
<sourcesyntaxhighlight lang="text">
$ xterm -fn '-*-*-*-*-*-*-*-*-*-*-*-*-*-*'
$</sourcesyntaxhighlight>
 
Мы используем полностью определённую XLFD-запись, так что программа запустится с первым попавшим под маску именем шрифта. Теперь попробуем использовать заведомо несуществующее имя шрифта, например, зададим имя производителя FAKENAME.
 
<sourcesyntaxhighlight lang="text">
$ xterm -fn '-FAKENAME-*-*-*-*-*-*-*-*-*-*-*-*-*'
xterm: unable to open font "-FAKENAME-*-*-*-*-*-*-*-*-*-*-*-*-*", trying "fixed"....
$</sourcesyntaxhighlight>
 
Как мы видим, X-сервер не смог обнаружить такого шрифта и поэтому ''xterm'' использует некий «шрифт по умолчанию», в данном случае «fixed».
Строка 112:
И запустим '''xterm''' с только что выбранным шрифтом:
 
<sourcesyntaxhighlight lang="text">
$ xterm -fn '-*-*-*-i-*-*-*-*-*-*-*-*-iso8859-1'
$</sourcesyntaxhighlight>
 
Помимо '''xfontsel''' существует несколько полезных программ для работы со встроенной в X-сервер шрифтовой подсистемой:
Строка 313:
''fonts.conf'' представляет собой текстовый XML-файл, его DTD можно обычно найти в файле ''/etc/fonts/fonts.dtd'', там же в комментариях можно узнать много интересного, что не вошло в ''man fonts-conf''. Итак, минимальный ''fonts.conf'' выглядит так:
 
<sourcesyntaxhighlight lang="xml"><?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
</fontconfig></sourcesyntaxhighlight>
 
Если мы попробуем запустить с этим файлом наше тестовое приложение, мы получим вместо букв вот такие квадратики (ведь в файле не описаны ни шрифты, ни правила их рендеринга):
Строка 333:
Итак, создаём каталог ''~/my-fonts-sandbox/ttfonts'', куда скопируем несколько файлов шрифтов в формате TrueType, например, ''DejaVuSans.ttf'' и ''DejaVuSerif.ttf'', данные шрифты совершенно свободны к использованию, они входят в любой дистрибутив и их без проблем можно [http://dejavu.sourceforge.net/ скачать из сети]. Путь к каталогу со шрифтами задаётся тегом '''dir''', каталог просматривается рекурсивно, то есть нет необходимости указывать также подкаталоги. Можно добавлять несколько таких тегов, в каждом указывается один каталог. Проделаем все эти шаги, после чего наш тестовый файл выглядит так:
 
<sourcesyntaxhighlight lang="xml"><?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>~/my-fonts-sandbox/ttfonts</dir>
</fontconfig></sourcesyntaxhighlight>
 
Запускаем kword и видим, что шрифты в нём отображаются, однако если мы попытаемся изменить шрифт набранного текста, мы увидим, что выбор ограничивается только лишь двумя этими шрифтами: DejaVuSans и DejaVuSerif.
Строка 347:
Теперь напишем более сложный конфигурационный файл:
 
<sourcesyntaxhighlight lang="xml"><?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
Строка 356:
</edit>
</match>
</fontconfig></sourcesyntaxhighlight>
 
В файле конфигурации содержатся ''правила интерпретации шрифтов'', неформально говоря, это означает, что мы определяем способ отрисовывания шрифта посредством указания, какие именно способы к каким шрифтам применять. В этом примере у нас имеется всего одно правило, заданное в виде тега '''match''', в нём говорится примерно следующее: «Любому запрошенному шрифту запретить использование свойства antialias», то есть сглаживание отключено глобально для всех шрифтов. Всё очень просто, не так ли? Внутри тега '''match''' есть тег '''edit''', который предписывает, какое именно свойство отрисовки шрифта изменить и какое значение этому свойству присвоить; в нашем примере это свойство ''antialias'', которому присваивается значение ''false''. Логично и просто.
Строка 422:
Вот пример файла fonts.conf, в котором задаются правила применения хинтинга:
 
<sourcesyntaxhighlight lang="xml"><?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
Строка 440:
</match>
</fontconfig>
</syntaxhighlight>
</source>
 
Первое правило разрешает выполнение сглаживания для всех шрифтов, второе — отключает использование хинтинга. Каждое из правил в этом примере состоит из элемента '''match''', который определяет, каких именно шрифтов касается правило; а внутри находится элемент '''edit''', который задаёт конкретное действие, применяемое к шрифту.
Строка 457:
Вот пример файла fonts.conf, в котором включается поддержка хинтинга:
 
<sourcesyntaxhighlight lang="xml"><?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
Строка 477:
</match>
</fontconfig>
</syntaxhighlight>
</source>
 
Как вы видите, параметр ''hinting'' установлен в true, а также добавлен параметр ''hintstyle'', который задаёт способ хинтинга. Всего для hintstyle возможны четыре значения: hintnone, hintslight, hintmedium, hintfull. При этом hintnone — это самый слабый хинтинг, hintfull — самый сильный. hintfull даёт самый качественный результат растеризации, поэтому остальные значения использовать смысла нет. На картинке ниже показан результат растеризации шрифта Tahoma, 12pt с включенными полным хинтингом и сглаживанием.