Fontconfig

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Fontconfig and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎日本語 • ‎한국어 • ‎polski • ‎русский • ‎中文(中国大陆)‎
Resources

Библиотека fontconfig (media-libs/fontconfig) предназначена для обеспечения единого места, где можно выбрать шрифт и настройки для всех приложений с графическим интерфейсом. fontconfig является основополагающей библиотекой, хотя разные окружения рабочего стола могут предоставлять свои настройки шрифтов и утилиты для их конфигурации.

Установка

Почти наверняка fontconfig уже установлен, когда он вдруг понадобится. Если это не так, убедитесь, что правильно настроили графическую подсистему (например, X или Wayland) и окружение рабочего стола.

USE-флаги

fontconfig не содержит много USE-флагов.

USE flags for media-libs/fontconfig A library for configuring and customizing font access

doc Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally global
static-libs Build static versions of dynamic libraries as well global

Конфигурация

Заметка
Изменения в файлах fontconfig отобразятся только в тех приложениях, которые были запущены после изменений!

Общие сведения

Чтобы сгенерировать свою внутреннюю конфигурацию fontconfig использует XML-файлы в каталоге /etc/fonts/. По умолчанию она парсит /etc/fonts/fonts.conf (пользователю не следует самостоятельно вносить изменения в этот файл!), который хранит некоторые разумные значения, а также зачастую содержит код для парсинга файлов из /etc/fonts/conf.d/. Кроме этого, есть каталог /etc/fonts/conf.avail/, в котором находятся всевозможные конфигурационные файлы, каждый из которых покрывает тот или иной аспект fontconfig. Можно создавать символьные ссылки на необходимые файлы в /etc/fonts/conf.d/. Порядок выполнения зависит от имён файлов; именно поэтому каждое имя начинается с двузначного числа, первая цифра которого (разряд десятков) указывает, на что влияет файл (иначе говоря, класс конфигурационного файла).

Специфика Gentoo

Gentoo предоставляет модуль eselect (eselect fontconfig), который в точности осуществляет описанное общим способом — управляет символьными ссылками в /etc/fonts/conf.avail/, добавляя или удаляя их из каталога /etc/fonts/conf.d/. По понятным причинам изменение конфигурации для всей системы требует соответствующих прав доступа.

Следующие подразделы поясняют работу с модулем eselect fontconfig.

Список доступных файлов

Команда list отображает доступные файлы fontconfig и помечает активные звёздочкой (*).

root #eselect fontconfig list
Available fontconfig .conf files (* is enabled):
  [1]   10-autohint.conf *
  [2]   10-no-sub-pixel.conf
  [3]   10-sub-pixel-bgr.conf
  [4]   10-sub-pixel-rgb.conf
  [5]   10-sub-pixel-vbgr.conf
  [6]   10-sub-pixel-vrgb.conf
  [7]   10-unhinted.conf
  [8]   11-lcdfilter-default.conf
  [9]   11-lcdfilter-legacy.conf
  ...
Предупреждение
Содержимое fonts.avail в разных системах отличается, поэтому вывод будет отличаться. Никогда не используйте не глядя номера из списков, приведённых, например, в блогах или wiki-статьях.

Активация файлов

Файлы могут быть активированы по имени или по номеру в скобках. Следующие две команды выполняют одно и то же действие:

root #eselect fontconfig enable 10-sub-pixel-rgb.conf
root #eselect fontconfig enable 4

Деактивация файлов

Файлы могут быть деактивированы аналогичным образом:

root #eselect fontconfig disable 10-sub-pixel-rgb.conf
root #eselect fontconfig disable 4

Пользовательская конфигурация для всей системы

Чтобы создать пользовательский файл fontconfig, влияющий на всю систему, активируйте 51-local.conf и создайте /etc/fonts/local.conf (это XML-файл).

Файл /etc/fonts/local.confПример файла, устанавливающего желаемый порядок резервных шрифтов для sans-serif
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Ubuntu</family>
      <family>TakaoPGothic</family>
      <family>Droid Sans</family>
    </prefer>
    <default><family>DejaVu Sans</family></default>
  </alias>
</fontconfig>

Поясним. Это настройка сообщает, что когда речь идет о шрифтах из группы sans-serif, мы предпочитаем использование шрифтов Ubuntu, TakaoPGothic и Droid Sans (в таком порядке) вместо DejaVu Sans (которые могут быть как выбор по умолчанию только тогда, когда это необходимо). Очевидно, что здесь можно сделать другой выбор.

Конфигурация для каждого пользователя отдельно

Чтобы создать файлы fontconfig для каждого пользователя, активируйте 50-user.conf (может быть активирован по умолчанию) и сделайте так, чтобы пользователи использовали ~/config/fontconfig/fonts.conf. Этот файл имеет тот же формат XML, что и local.conf.

Заметка
Это один из способов, благодаря которому окружение рабочего стола может влиять на отображение шрифтов. Возможно, имеет смысл выключить эту настройку, чтобы убедиться, что при настройке отображаются только действительно общесистемные настройки. Выключение этой настройки также дает более универсальное отображение шрифтов для всех пользователей.
Заметка
Ранее используемый ~/.fonts.conf теперь устарел в пользу месторасположения, указанного в переменной $XDG_CONFIG_HOME. По умолчанию переменная указывает на ~/.config.

Проверка конфигурации

Проверьте замену шрифта по умолчанию, например, для Arial:

user $fc-match Arial

Сглаживание, хинтинг и субпиксельное отображение

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

Параметр Описание
Сглаживание по умолчанию включено, делает шрифты менее угловатыми.
Хинтинг попытка справиться с малым количеством пикселей на единицу площади текущих дисплеев. Корректный хинтинг делает символы более чёткими, но, так как метрики шрифта не меняются (и, собственно, не должны меняться), влияет на то, как отображаемый текст выглядит в целом.
Субпиксельное отображение использует тот факт, что жидкокристаллическая матрица имеет три основных цвета, чтобы фактически утроить разрешение шрифта, но может заставить символы быть не совсем чёрными. Чтобы не допустить этого, следует использовать субпиксельное отображение совместно с lcdfilter (доступно в свежих версиях fontconfig), однако это может слишком сильно размыть шрифт. Наконец, это зависит от личных предпочтений пользователя.

Форсирование хинтинга

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

  1. Активируйте /etc/fonts/local.conf
  2. Отредактируйте файл local.conf, включив полный хинтинг по умолчанию

Этот фрагмент файла local.conf включает полный хинтинг:

Файл /etc/fonts/local.confУстановка полного хинтинга
<match target="font">
  <edit mode="assign" name="hintstyle">
    <const>hintfull</const>
  </edit>
</match>
Заметка
Большая часть шрифтов лучше выглядит с полным хинтингом, некоторым требуется легкий хинтинг или, реже, другие настройки хинтинга. По тем или иным причинам, некоторые шрифты всегда выглядят некрасиво.

Использование субпиксельного отображения

Важно определить субпиксельный формат матрицы жидкокристаллического дисплея. Обычно это RGB (10-sub-pixel-rgb.conf), однако для того, чтобы точно его установить, нужно либо обратиться к спецификации дисплея, либо воспользоваться этим тестом субпиксельного формата.

После того, как субпиксельный формат определен, активируйте соответствующий файл 10-sub-pixel-<matrix type>.conf.

root #eselect fontconfig enable 10-sub-pixel-rgb.conf

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

root #eselect fontconfig enable 11-lcdfilter-default.conf
Предупреждение
USE-флаг bindist пакета media-libs/freetype полностью отключает субпиксельное отображение по причине потенциальных проблем с патентами. Чтобы воспользоваться субпиксельным отображением, USE-флаг должен быть в этом пакете (то есть -bindist).

О autohinter

Autohinter пытается осуществлять автоматический хинтинг, игнорируя существующую информацию о хинтинге. До недавнего времени он использовался по умолчанию, поскольку TrueType2 был защищен патентами. Однако срок патентов истек, и сейчас нет никаких причин для его использования. С технической точки зрения, он работает лучше для шрифтов с неправильной или отсутствующей информацией о хинтинге, однако для шрифтов с хорошей информацией о хинтинге он весьма неоптимален. Системные шрифты, как правило, относятся ко второй категории, поэтому autohinter использовать не следует.

Предупреждение
Autohinter не совместим с субпиксельным отображением, поэтому не используйте их вместе!

Infinality

Infinality — это (несколько противоречивый) набор патчей для FreeType и сопутствующих файлов fontconfig. Целью Infinality является реализация более высококачественного отображения шрифтов, включая эмуляцию стилей отображения шрифтов других операционных систем.

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

Включение Infinality

Включите USE-флаг 'infinality' либо вручную отредактировав файл make.conf, либо с помощью утилиты euse.

root #euse -E infinality

Затем пересоберите программы, на которые влияет этот USE-флаг.

root #emerge --ask -uvDU @world

Активируйте 52-infinality.conf, если сообщения, отображаемые после пересборки, не требуют этого не делать.

root #eselect fontconfig enable 52-infinality.conf

Настройка Infinality

Infinality можно настроить различными способами, включая индивидуальные конфигурации, однако наиболее простым способом является использование готовых профилей, включенных в пакет media-libs/fontconfig-infinality. Этот пакет, вместе с модулями eselect, должен устанавливаться как зависимость USE-флага infinality.

Быстрая и приемлимая конфигурация

root #eselect infinality set infinality
root #eselect lcdfilter set infinality
Заметка
Как и в других случаях, изменения fontconfig влияют только на приложения, запущенные после внесения изменений.

Также рекомендуется выключить все настройки fontconfig кроме 52-infinality.conf, так как они вмешиваются в отображение стилей infinality:

root #eselect fontconfig disable <number>

Некоторые настройки fontconfig не влияют на отображение шрифтов, но определяют шрифты по умолчанию для типов шрифтов (таких как Monospace, sans-serif и так далее). Такие настройки (например, конфигурации 62-croscore-*.conf) можно оставить включенными.

Объяснение

Infinality предоставляет переменные окружения FreeType, которые могут использоваться для настройки возможностей, реализуемых патчами infinality, а также файлы fontconfig для использования с этими изменениями. Управление наборами файлов fontconfig на Gentoo осуществляется с помощью eselect infinality, а поведение FreeType настраивается с помощью eselect lcdfilter.

Эти модули eselect работают, как обычно:

  • Выведение списка доступных наборов файлов fontconfig.
root #eselect infinality list
  • Выведение списка доступных наборов переменных FreeType.
root #eselect lcdfilter list
  • Разумеется, оба набора должны находиться в соответствии друг с другом, за исключением ситуации, когда возможны различные соответствия, как в нижеследующем примере.
root #eselect infinality set win7
root #eselect lcdfilter set windows-7-light

Выбор шрифтов

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

Вот некоторые рекомендации относительно хорошо известных шрифтов в Gentoo:

Семейство шрифтов Плюсы Минусы
Liberation
media-fonts/liberation-fonts
Шрифты Red Hat, которые метрически совместимы с MS TrueType corefonts, имеют приличный современный вид. Рекомендуется Gentoo Fonts team для латинских шрифтов по умолчанию. Охватывает около 2600 кодовых позиций. Только для Латинского, Греческого, Кириллического и Иврит алфавитов. Некоторые символы, могут иметь проблемы с хинтингом.
Linux Libertine
media-fonts/libertine
Очень похож на Liberation, охватывает около 2700 кодовых позиций. Linux Libertine сам по себе является пропорциональным serif шрифтом, но пакет содержит менее обширные sans и mono шрифты. Может использоваться в качестве резерва для некоторых глифов, которых нет в Liberation. Только для Латинского, Греческого, Кириллического и Иврит алфавитов. Sans и mono шрифты ограничены.
Noto
media-fonts/noto
Семейство шрифтов Google, которое предназначено для поддержки всех языков мира (содержит более 60 000 кодовых позиций). Хорошо сочетается с Liberation или Droid. Adobe шрифты Source Han Sans включены в CJK. Рекомендуется в качестве резерва для многих глифов, не охваченных Liberation. Большой объем загружаемых данных.
DejaVu
media-fonts/dejavu
Много стилей и покрывает много кодовых позиций (около 6100 для sans). Исключительно широкий - даже condensed вариант шире моноширинных такой же высоты. В целом второй после Verdana (шрифт MS) по ширине. Шрифт Sans-serif только средний.
Droid
media-fonts/droid
Охватывает множество кодовых позиций и рукописных шрифтов. Очень сухие, широкие, но тонкие глифы. Очевидно разработан для использования в карманных устройствах с их небольшими экранами.
Gentium Plus
media-fonts/sil-gentium
Достаточно самобытный; может понравиться людям, которым нравятся узкие шрифты. Только Serif. Как и в других шрифтах SIL - сомненительный хинтинг.
Ubuntu
media-fonts/ubuntu-font-family
Используется в Ubuntu (что очевидно). Характерное семейство шрифтов со стилем, который может понравиться не всем. В целом выглядит хорошо и охватывает довольно много кодовых позиций. Только шрифт sans-serif действительно безупречен; узкие и моноширинные версии недоделаны. Нет известного serif шрифта, который бы хорошо с ним сочетался.
URW
media-fonts/urw-fonts
Метрически совместим с популярными шрифтами Adobe (среди прочих?). Похоже требуется небольшой хинтинг.
MS TrueType corefonts
media-fonts/corefonts
Включает в себя большинство шрифтов, используемых в документах и в Интернете. В настоящее время MS не распространяет их, поэтому имеющиеся шрифты разрабатывались много лет назад и их текущее состояние не соответствуют современным требованиям (не говоря уже об уровне развития). В последнее время явно не хватает представленных шрифтов. Требуют полного хинтинга.
Unifont
media-fonts/unifont
Охватывает множество кодовых позиций. Мало того, что «страшен как смертный грех», он также не удовлетворяет некоторым основным требованиям, чтобы считаться шрифтом. Это sans-serif? Это serif? «Пожалуйста, никогда не используйте это».

Внешние ресурсы