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