Fontconfig
Библиотека 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 |
nls
|
Add Native Language Support (using gettext - GNU locale utilities) |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
Конфигурация
Изменения в файлах 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-файл).
<?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 в отношении хинтинга практически не документировано, но его можно сделать целенаправленно субоптимальным посредством создания общесистемного значения по умолчанию.
- Активируйте /etc/fonts/local.conf
- Отредактируйте файл local.conf, включив полный хинтинг по умолчанию
Этот фрагмент файла 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
О autohinter
Autohinter пытается осуществлять автоматический хинтинг, игнорируя существующую информацию о хинтинге. До недавнего времени он использовался по умолчанию, поскольку TrueType2 был защищен патентами. Однако срок патентов истек, и сейчас нет никаких причин для его использования. С технической точки зрения, он работает лучше для шрифтов с неправильной или отсутствующей информацией о хинтинге, однако для шрифтов с хорошей информацией о хинтинге он весьма неоптимален. Системные шрифты, как правило, относятся ко второй категории, поэтому autohinter использовать не следует.
Autohinter не совместим с субпиксельным отображением, поэтому не используйте их вместе!
Выбор шрифтов
Выбор нужного шрифта может быть более трудной задачей, чем выбор правильного типа хинтинга. По той или иной причине, некоторые шрифты никогда не будут идеальными, однако возможно сделать их внешний вид лучше, чем, скажем, в стандартной конфигурации шрифтов в 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? «Пожалуйста, никогда не используйте это». |
Внешние ресурсы
- Подробные статьи на Arch Linux wiki по:
- Официальная документация для пользователей fontconfig
- Статья на Wikipedia о хинтинге шрифтов