Font configuration (Русский)

Fontconfig - это библиотека, разработанная для предоставления списка доступных шрифтов приложениям, а также для настройки того, как шрифты будут отображены: смотрите Wikipedia:Fontconfig. Библиотека FreeType freetype2 отображает (рендерит) шрифты, основываясь на этих настройках.

Состояние перевода: На этой странице представлен перевод статьи Font configuration. Дата последней синхронизации: 16 апреля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Хотя Fontconfig является стандартом в современном Linux, некоторые приложения полагаются на оригинальном способе отбора шрифтов и отображения, в X Logical Font Description.

Пакеты отображения шрифтов на Arch Linux включает в себя поддержку freetype2 с включенным переводчиком байт-кода (BCI). Для лучшего отображения шрифтов, особенно на ЖК-мониторах, см #Настройка Fontconfig и Настройка шрифтов/Примеры.

Пути шрифтов

Шрифты, которые будут известны приложениям, должны быть каталогизированы для лёгкого и быстрого доступа.

Пути шрифтов изначально известные Fontconfig находятся в: /usr/share/fonts/, (и , - в настоящее время не рекомендуется). Fontconfig будет сканировать эти каталоги рекурсивно. Для простоты организации и установки, рекомендуется использовать эти пути шрифтов, когда добавляете шрифты.

Чтобы увидеть список известных Fontconfig шрифтов:

$ fc-list : file

Для больших выводных форматов, смотрите fc-list(1).

Проверьте известные пути шрифтов Xorg, посмотрев свой журнал:

$ grep /fonts ~/.local/share/xorg/Xorg.0.log

Имейте в виду, что Xorg не ищет рекурсивно в каталоге /usr/share/fonts/ как это делает Fontconfig. Чтобы добавить путь, нужно указать полный путь:

Section "Files"
    FontPath     "/usr/share/fonts/local/"
EndSection

Если вы хотите установить пути шрифтов на уровне пользователя, вы можете добавлять и удалять пути шрифтов по умолчанию, добавив следующую строку(и) в ~/.xinitrc:

xset +fp /usr/share/fonts/local/           # Добавляет путь шрифтов в список известных путей шрифтов Xorg'а
xset -fp /usr/share/fonts/sucky_fonts/     # Удаляет указанный путь шрифта из списка известных путей шрифтов Xorg'а

Чтобы увидеть список известных шрифтов Xorg, используйте из пакета .

Настройка Fontconfig

Документация fontconfig доступна в .

Настройка может быть сделана для каждого пользователя отдельно, с помощью (обычно это ), и на глобальном уровне с помощью . Оба эти файла используют тот же синтаксис.

Fontconfig собирает все свои настройки в центральном файле (). Этот файл перезаписывается в ходе обновления fontconfig, поэтому не следует редактировать его напрямую. Fontconfig-совместимые приложения читают этот файл, чтобы узнать о доступных шрифтах и как они будут отображены. Этот файл представляет собой конгломерат из правил глобальных настроек (), настроенных предустановок в /etc/fonts/conf.d/ и пользовательского файла настроек (). Можно пересобрать настройки fontconfig с помощью fc-cache, но изменения будут применены только для вновь запущенных приложений.

Файлы настроек Fontconfig используют формат XML и обязательный заголовок:

В примерах, представленных далее в статье, эти теги опущены для краткости.

Предварительные установки

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

Например, для включения sub-pixel (суб-пиксельного) RGB отображения глобально:

$ cd /etc/fonts/conf.d
# ln -s /usr/share/fontconfig/conf.avail/10-sub-pixel-rgb.conf

Тоже самое, но для настройки каждому пользователю:

$ mkdir $XDG_CONFIG_HOME/fontconfig/conf.d
$ ln -s /usr/share/fontconfig/conf.avail/10-sub-pixel-rgb.conf $XDG_CONFIG_HOME/fontconfig/conf.d

Anti-aliasing (сглаживание)

Растеризация шрифтов преобразует данные векторного шрифта в растровые для отображения на экране. В результате могут появиться ступеньки/зубцы, из-за наложения (алиасинга). Методика, известная как анти-алиасинг/сглаживание (Anti-aliasing), может быть использована для повышения разрешения видимых краёв шрифта. Сглаживание включено по умолчанию. Для того, чтобы отключить его:

Hinting (Хинтинг)

Хинтинг (также известный как инструктаж) - это использование математических инструкций для настройки отображения контура шрифта так, чтобы он был на одной линии с растрировой сеткой (т.е. пиксельной сеткой экрана). Ожидаемый эффект - сделать шрифты на вид более чёткими, чтобы они были более читабельные. Шрифты выравниваются правильно без хинтинга, когда экран имеет 300 DPI. Доступно два типа Хинтинга.

Интерпретатор байт-кода (Byte-Code Interpreter, BCI)

При использовании хинтинга BCI инструкции в шрифтах TrueType предоставляются в соответствии с интерпретатором FreeType. Хинтинг BCI прекрасно работает со шрифтами с хорошими инструкциями хинтинга. По умолчанию хинтинг включен. Для его отключения:

Autohinter (Авто Хинтинг)

Autohinter пытается сделать автоматический хинтинг и игнорирует существующую информацию хинтинга. Раньше он использовался по умолчанию, поскольку шрифты TrueType2 были защищены патентами, но теперь срок патентов истёк и использовать Autohinter нет большого смысла. Он может лучше работать со шрифтами, которые поломанные или не содержат информацию по хинтингу, но это будет не оптимально для шрифтов с хорошей информацией хинтинга. К распространённым шрифтам Autohinter в дальейшем не будет полезным. По умолчанию автохинтинг отключен. Чтобы его включить:

<nowiki/>
  <match target="font">
    <edit name="autohint" mode="assign">
      <bool>true</bool>
    </edit>
  </match>

Hintstyle (Стиль Хинтинга)

Hintstyle это сумма изменений шрифта, сделанных чтобы выстроить его по пиксельной сетке. Значения хинтинга: hintnone(без хинтинга), (лёгкий хинтинг), (средний хинтинг), и (полный хинтинг). сделает шрифт более нечётким выстраивая по сетке, но сохранит лучше форму шрифта, в то время как сделает чётким шрифт, выровняет хорошо по пиксельной сетке, но больше потеряет форму шрифта. установлен по умолчанию. Для того, чтобы изменить его:

Расположение пикселей

Большинство современных мониторов использует спецификацию RGB (Red, Green, Blue, - Красный, Зелёный, Синий). Fontconfig'у нужно знать тип монитора, чтобы иметь возможность отображать шрифты правильно. Мониторы могут быть: RGB (наиболее распространенный), BGR, V-RGB (вертикальный), или даже V-BGR. Тест монитора можно найти здесь.

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

Субпиксельный рендеринг — это техника улучшения чёткости рендеринга шрифтов путём утроения горизонтального (или вертикального) разрешения за счёт использования субпикселей. На машинах Windows эта техника называется ClearType.

FreeType2 предоставляет два различных типа субпиксельного рендеринга, называемых Harmony и ClearType () .

При включении субпиксельного рендеринга ClearType рекомендуется использовать ЖК-фильтр (субпиксельный рендеринг Harmony не требует установки ЖК-фильтра). О том, как включить ЖК-фильтр и его преимуществах, смотрите следующий раздел.

Начиная с версии FreeType 2.10.3, Arch Linux включает субпиксельный рендеринг ClearType по умолчанию .

Примечание: Используйте ЖК-фильтр lcdlight, чтобы получить поведение субпиксельного рендеринга как до версии FreeType 2.10.3 — Harmony (вместо ClearType).

LCD filter (ЖК-фильтр)

При использовании субпиксельного отображения ClearType необходимо включить ЖК-фильтр, который предназначен для снижения цветной окантовки. Это описано в разделе LCD filtering в справке по FreeType 2 API. Различные варианты описаны в разделе FT_LcdFilter и проиллюстрированы на этой странице теста ЖК-фильтра.

Фильтр будет работать для большинства пользователей. Другие доступные фильтры, которые могут использоваться в особых случаях: ; фильтр идеально подходит для шрифтов, которые выглядят слишком жирными или нечеткими, lcdlegacy, оригинальный фильтр Cairo; и чтобы отключить его полностью.

Расширенная спецификация ЖК-фильтра (LCD filter)

Если встроенные ЖК-фильтры не устраивают, можно настроить отображение шрифта очень специфично путём создания пользовательского пакета freetype2 и модификации жёстко закодированных фильтров. Для создания и установки пакетов из исходников можно использовать Система сборки Arch. Это требует установки пакета .

Скачайте PKGBUILD для пакета freetype2 и получите файлы сборки:

$ asp checkout freetype2
$ cd freetype2/trunk
$ makepkg -o

Включите субпиксельный рендеринг ClearType путём редактирования файла , раскомментировав в нём макрос .

Отредактируйте файл и найдите определённые константы :

static const FT_Byte  default_filter[5] =
    { 0x10, 0x40, 0x70, 0x40, 0x10 };

Эта константа определяет применение низкочастотного фильтра к отоброжению символа. Измените его как требуется. Сохраните файл, соберите и установите пользовательский пакет:

$ makepkg -e
# pacman -Rd freetype2
# pacman -U freetype2-VERSION-ARCH.pkg.tar.xz

Перезагрузитесь или перезапустите X. Теперь фильтр lcddefault должен отобразить шрифты по-другому.

Отключение авто хинтинга (auto-hinter) для жирных (bold) шрифтов

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

...
<match target="font">
    <test name="weight" compare="more">
        <const>medium</const>
    </test>
    <edit name="autohint" mode="assign">
        <bool>false</bool>
    </edit>
</match>
...

Некоторые шрифты могут плохо выглядеть с хинтингом BCI. Его можно отключить только для этих шрифтов:

...
<match target="font">
    <test name="family" qual="any">
        <string>My Font</string>
    </test>
    <edit name="hinting" mode="assign">
        <bool>false</bool>
    </edit>
</match>
...

Заменить или установить шрифты по умолчанию

Самый надёжный способ сделать это, добавить фрагмент XML, похожий на тот, как показано ниже. Использование атрибута "binding" (связывания) даст вам лучший результат, например, в Firefox где вы не можете изменить замену шрифтов. Следующий пример приведёт к использованию шрифта Ubuntu в тех местах, где предполагалось использование Georgia:

...
<match target="pattern">
  <test qual="any" name="family"><string>Georgia</string></test>
  <edit name="family" mode="assign" binding="same"><string>Ubuntu</string></edit>
</match>
...

Альтернативный подход состоит в установке "предпочтительного" шрифта. Шрифты, соответствующие элементу <family>, редактируются для добавления списка <prefer> семейств перед соответствующим <family>. Это работает только если оригинального шрифта нет в системе, в этом случае указанный шрифт будет заменён:

Белый список и чёрный список шрифтов

Элемент используется в сочетании с элементами выбора: и , - белого списка или черного списка шрифтов, для принятия перечня и согласования запросов. Самый простой и наиболее типичный случай его использования — для (отклонения) одного шрифта, который должен быть установлен, однако выходит сопоставимым со стандартным запросом шрифту, который вызывает проблемы в пользовательских интерфейсах.

Во-первых, получите имя Family (семейства) как указано в самом шрифте:

Затем используйте это имя Family в строфе :

Обычно, когда оба элемента объединены, сначала используется в более общем согласовании glob для reject (отклонения) большой группы (таких, как целый каталог), затем после него используется белый список отдельных шрифтов из большой группы чёрного списка.

Отключение растровых шрифтов

Чтобы отключить растровые шрифты (которые иногда используются в качестве «резерва» вместо отсутствующих шрифтов, в результате чего текст будет отображён некачественно), используйте предварительную установку 70-no-bitmaps.conf.

Чтобы отключить встроенные растровые шрифты у всех шрифтов:

Чтобы отключить встроенные растровые шрифты для определенного шрифта:

<match target="font">
  <test qual="any" name="family">
    <string>Monaco</string>
  </test>
  <edit name="embeddedbitmap">
    <bool>false</bool>
  </edit>
</match>

Отключить масштабирование растровых шрифтов

Чтобы отключить масштабирование растровых шрифтов (которое часто делает их размытыми), удалите . Имейте в виду, что это может нарушить масштабирование шрифтов эмодзи, таких как Segoe UI Emoji, сделав их огромными.

Создать стили для жирных и курсивных «некомплектных» шрифтов

FreeType имеет возможность автоматически создавать italic (курсивные) и bold (жирные) стили для шрифтов, которые не имеют их, но только если это явно требуется приложению. Данные программы редко отправляют эти запросы. В этом разделе охватывается принуждение «вручную» генерировать отсутствующие стили.

Начните редактировать /usr/share/fonts/fonts.cache-1 как описано ниже. Храните изменённые копии в другом файле, поскольку обновление шрифтов с помощью fc-cache будет перезаписывать /usr/share/fonts/fonts.cache-1.

Предположим что шрифт Dupree установлен:

"dupree.ttf" 0 "Dupree:style=Regular:slant=0:weight=80:width=100:foundry=unknown:index=0:outline=True:etc...

Дублируйте строку, измените на или любой другой стиль. Также измените на для italic (курсива), на для bold (жирного), или объедините их для bold italic (жирного курсива):

"dupree.ttf" 0 "Dupree:style=Bold Italic:slant=100:weight=200:width=100:foundry=unknown:index=0:outline=True:etc...

Теперь добавьте необходимые изменения в:

...
<match target="font">
    <test name="family" qual="any">
        <string>Dupree</string>
         <!-- other fonts here .... -->
     </test>
     <test name="weight" compare="more_eq"><int>140</int></test>
     <edit name="embolden" mode="assign"><bool>true</bool></edit>
</match>

<match target="font">
    <test name="family" qual="any">
        <string>Dupree</string>
        <!-- other fonts here .... -->
    </test>
    <test name="slant" compare="more_eq"><int>80</int></test>
    <edit name="matrix" mode="assign">
        <times>
            <name>matrix</name>
                <matrix>
                    <double>1</double><double>0.2</double>
                    <double>0</double><double>1</double>
                </matrix>
        </times>
    </edit>
</match>
...

Приоритет правил

Fontconfig обрабатывает файлы /etc/fonts/conf.d в числовом порядке. Таким образом, правила из файлов и имеют такой же эффект, как если бы один файл содержал в себе сначала правила из , а затем правила из .

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

Запрос текущих настроек

Чтобы узнать, какие настройки вступили в силу, используйте. К примеру:

Посмотрите значения чисел в . Например. 'hintstyle: 3' означает 'hintfull'

Приложения без поддержки fontconfig

Некоторые приложения, как Urxvt игнорируют настройки fontconfig. Вы можете обойти эту проблему с помощью ~/.Xresources, который такой же гибкий как fontconfig. Как пример (смотрите #Настройка Fontconfig), и для объяснения вариантов :

Убедитесь, что настройки загружаются должным образом, когда запускается X с xrdb -q (для получения дополнительной информации смотрите статью Ресурсы Х).

Решение проблем

Искаженные шрифты

Если шрифты еще неожиданно большие или маленькие, с плохими пропорциями или просто отображаются плохо, то Fontconfig может использовать неверный DPI.

Fontconfig должен быть в состоянии определить параметры DPI, обнаруженные сервером Xorg. Вы можете проверить автоматическое обнаружение DPI с помощью (предоставляется пакетом ):

Если DPI определяется некорректно (обычно из-за неправильного EDID монитора), вы можете указать его вручную в настройках Xorg, смотрите Размер дисплея/DPI. Это рекомендуемое решение, но оно не может работать c драйверами, в которых есть баги/ошибки.

Fontconfig пользуется по умолчанию переменной Xft.dpi, если она установлена. Xft.dpi обычно устанавливается окружением рабочего стола (обычно в настройках DPI Xorg'а) либо вручную в или ~/.Xresources. Воспользуйтесь xrdb для получения значения:

Те, кто еще имеют проблемы, могут вернуться к ручной установке DPI используя FontConfig:

...
 
<match target="pattern">
   <edit name="dpi" mode="assign"><double>102</double></edit>
</match>
...

Calibri, Cambria, Monaco, и т. д. не отображаются правильно

Некоторые масштабируемые шрифты имеют встроенные растровые версии, которые предоставляются, главным образом, при меньших размерах. В этом случае использование Metric-compatible fonts в качестве замены, может улучшить отображение.

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

Приложения переопределяют hinting

Некоторые приложения или окружения рабочего стола, по умолчанию, могут переопределять настройки fontconfig, такие как хинтинг и сглаживание. Это может случиться с GNOME 3, например когда вы используете приложения Qt, как или smplayer. В таких случаях используйте специальную программу для применения настроек. Для GNOME попробуйте и установите сглаживание в вместо установленного по умолчанию .

Приложения не используют hinting из настроек DE

Например, в GNOME иногда случается, что Firefox применяет полный хинтинг (full hinting) даже если он установлен на "none" в настройках GNOME, что в результате приводит к резким и широким шрифтам. В этом случае вам придётся добавить настройку хинтинга в ваш файл fonts.conf:

В этом примере хинтинг установлен на "grayscale".

Неправильный hinting в приложениях GTK

В некоторых средах рабочего стола, в частности за пределами GNOME и Plasma, некоторые приложения GTK не считывают настройки шрифта корректно. Для решения проблемы установите или и запускайте его при каждом запуске системы. Подробности можно почитать в стате Xsettingsd и в xsettingsd wiki. Он может быть настроен следующей общей конфигурацией:

Если в каких-то приложениях это тоже не работает, попробуйте установить и прописать следующие настройки:

После этого запускайте скрипт xrdb -merge ~/.Xresources при каждой загрузке системы для применения настроек. Смотрите также X resources (Русский) и #Приложения без поддержки fontconfig.

Проблема шрифтов в Сгенерированных файлах PDF

Если следующая команда

fc-match helvetica

выдаёт

helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"

то, скорее всего, растровый шрифт обеспечивается , шрифт будет встроен в PDF сгенерированный каким-либо приложением с помощью "Печать в файл" или "Экспорт". Скорее всего растровый шрифт был установлен в результате установки всей группы (что обычно НЕ рекомендуется). Чтобы решить проблему растровых шрифтов, вы можете удлить пакет. Установите (Type 1) или (OpenType) для соответствующей свободной замены Helvetica (и других шрифтоф на основе PostScript/PDF).

Также эта проблема может появится при открытии PDF, которому требуется Helvetica, и он не встроен для просмотра.

Отсутствует подчёркивание со шрифтом Dejavu Monospace

Начиная с Pango 1.44, символы подчеркивания исчезают при определённых размерах шрифта DejaVu Sans Mono. Обходным решением является использование Liberation Mono в качестве моноширинного шрифта, смотрите #Заменить или установить шрифты по умолчанию.

Отладка шрифтов FreeType

предоставляет инструменты для отладки конфигурации шрифтов FreeType.  — это графический интерфейс, в котором можно настроить параметры рендеринга шрифтов с предварительным просмотром в реальном времени. Например:
$ ftview -e unic -d 1024x768x24 -r 96 10 /usr/share/fonts/noto/NotoSans-Regular.ttf

Смотрите также

gollark: Binary search time!
gollark: I mean, most modern WiFi devices can use ~5GHz now too.
gollark: Or socially pressure/shame people into complying.
gollark: You can tell people to do or not do things, which has at least *some* influence on behavior.
gollark: OR CAN YOU?
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.