Font configuration (Русский) - ArchWiki

Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Font configuration. Дата последней синхронизации: 22 октября 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- Настройка шрифтов/Примеры
- Шрифты
- Metric-compatible fonts
- Шрифты Microsoft
- Шрифты окружения Java Runtime
- X Logical Font Description

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

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

## Пути шрифтов

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

Пути шрифтов, которые Fontconfig использует по умолчанию: `/usr/share/fonts/`, `~/.local/share/fonts` (а также `~/.fonts/` — устаревший). Fontconfig будет сканировать эти каталоги рекурсивно. Для простоты организации и установки рекомендуется использовать эти пути шрифтов, когда добавляете шрифты.

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

    $ fc-list ':' file

Доступные форматы вывода описаны в fc-list(1).

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

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

Совет:

- Вы также можете проверить список путей шрифтов, о которых знает Xorg, с помощью команды `xset q`.
- Используйте `/var/log/Xorg.0.log` если Xorg запускается с правами суперпользователя.

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

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

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

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

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

## Настройка Fontconfig

Документация fontconfig доступна в fonts-conf(5).

Настройка может быть сделана для каждого пользователя отдельно, с помощью `$XDG_CONFIG_HOME/fontconfig/fonts.conf` (обычно это `$HOME/.config/fontconfig/fonts.conf`), и на глобальном уровне с помощью `/etc/fonts/local.conf`. Оба эти файла используют один и тот же синтаксис.

Примечание:

- Предустановка `50-user.conf` должна быть включена, чтобы пользовательская конфигурация вступила в силу, а предустановка `51-local.conf` предназначена для глобальной конфигурации. Включение предустановок описано в разделе #Предварительные установки.
- Файлы настроек и каталоги: `~/.fonts.conf/`, `~/.fonts.conf.d/` и `~/.fontconfig/*.cache-*` являются устаревшими и не будут по умолчанию считываться в будущих версиях пакета. Новые пути — `$XDG_CONFIG_HOME/fontconfig/fonts.conf`, `$XDG_CONFIG_HOME/fontconfig/conf.d/NN-name.conf` и `$XDG_CACHE_HOME/fontconfig/*.cache-*` соответственно. Если используется второе расположение, убедитесь в правильном названии файла (где `NN` состоит из двух цифр, как `00`, `10`, или `99`).

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

Примечание: В некоторых средах рабочего стола (например GNOME и KDE) использование «Панели управления шрифтами» приводит к автоматическому созданию или перезаписи пользовательского файла настроек шрифтов. Для этих сред лучше всего использовать уже определённые настройки шрифтов, чтобы получить ожидаемое поведение. Также убедитесь, что настройки локали рабочего стола или региональные настройки поддерживаются настроенными шрифтами, если это не так, то настройки шрифта может быть переопределены.

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

    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
    <fontconfig>

      <!-- поместите настройки сюда -->

    </fontconfig>

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

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

Предустановки (presets) есть в каталоге `/usr/share/fontconfig/conf.avail`. Они могут быть включены созданием символической ссылки на них, глобально или для отдельных пользователей, как описано в `/etc/fonts/conf.d/README`. Эти предустановки переопределят соответствие параметров в соответствующих файлах настроек.

Например, для включения 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). Сглаживание включено по умолчанию. Для того, чтобы отключить его:

      <match target="font">
        <edit name="antialias" mode="assign">
          <bool>false</bool>
        </edit>
      </match>

Примечание: Некоторые приложения могут переопределять настройки сглаживания по умолчанию.

### Хинтинг

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

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

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

      <match target="font">
        <edit name="hinting" mode="assign">
          <bool>false</bool>
        </edit>
      </match>

Примечание: Используемую реализацию BCI можно переключить в скрипте `/etc/profile.d/freetype2.sh`. Интерпретатор устанавливается путём передачи параметра `truetype:interpreter-version=NN`, где NN соответствует выбранной версии, в переменную `FREETYPE_PROPERTIES` в скрипте. Наиболее популярными значениями являются:

- 35 для классического режима (эмулирует Windows 98),
- 38 для режима «Infinality» (высоконастраиваемый рендеринг, считается медленным и устаревшим),
- 40 для minimal mode (урезанный Infinality, используется по умолчанию).

Субпиксельный рендеринг должен использовать субпиксельный BCI. Подробнее смотрите [1].

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

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

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

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

Hintstyle — количество изменений шрифта для выравнивания по пиксельной сетке. Значения хинтинга: `hintnone` (без хинтинга), `hintslight` (лёгкий хинтинг), `hintmedium` (средний хинтинг), и `hintfull` (полный хинтинг). `hintslight` делает шрифт более нечётким, но лучше сохраняет форму шрифта (смотрите [2]), в то время как `hintfull` сделает шрифт чётким и хорошо выровняет его по пиксельной сетке, но больше потеряет форму шрифта. `hintslight` неявно использует autohinter в режиме только по вертикали в пользу информации о родном шрифте для шрифтов не-CFF (.otf).

По умолчанию используется `hintslight`. Для того, чтобы изменить его:

      <match target="font">
        <edit name="hintstyle" mode="assign">
          <const>hintnone</const>
        </edit>
      </match>

Примечание: Некоторые приложения могут переопределять настройки хинтинга по умолчанию.

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

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

      <match target="font">
        <edit name="rgba" mode="assign">
          <const>rgb</const>
        </edit>
      </match>

Примечание: Без субпиксельного отображения (смотрите ниже) для freetype нужно только расположение (горизонтальное или вертикальное). Без него, например, нет разницы между RGB и BGR.

Отсутствует поддержка необычных субпиксельных раскладок, таких как «Pentile» и «RGBY», которые иногда встречаются на экранах телевизоров и мобильных устройств. Для таких устройств лучше отказаться от субпиксельного рендеринга и полагаться на обычное сглаживание.

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

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

FreeType2 предоставляет два различных типа субпиксельного рендеринга, называемых Harmony и ClearType (`FT_CONFIG_OPTION_SUBPIXEL_RENDERING`) [3]. Начиная с FreeType 2.10.3, в Arch Linux по умолчанию используется ClearType [4].

При включении субпиксельного рендеринга ClearType рекомендуется использовать ЖК-фильтр. Субпиксельный рендеринг Harmony не требует установки ЖК-фильтра и при геометрии LCD по умолчанию эквивалентен ClearType с фильтром `lcdlight` [5]. Как включить ЖК-фильтр и какие он имеет преимущества, описано в следующем разделе.

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

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

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

      <match target="font">
        <edit name="lcdfilter" mode="assign">
          <const>lcddefault</const>
        </edit>
      </match>

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

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

Скачайте PKGBUILD для пакета freetype2 и получите файлы сборки, как описано в разделе Система сборки Arch#Получение PKGBUILD.

Включите субпиксельный рендеринг ClearType путём редактирования файла `src/freetype-VERSION/include/freetype/config/ftoption.h`, раскомментировав в нём макрос `FT_CONFIG_OPTION_SUBPIXEL_RENDERING`.

Отредактируйте файл `src/freetype-VERSION/src/base/ftlcdfil.c` и найдите определённые константы `default_filter[5]`:

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

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

    $ makepkg --noextract
    # pacman --remove --nodeps freetype2
    # pacman --upgrade freetype2-VERSION-ARCH.pkg.tar.zstd

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

### Пользовательские настройки для определённых шрифтов или стилей шрифтов

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

    ...
    <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>
    ...

### Установка шрифтов по умолчанию или резервных шрифтов

#### Match

Надёжный способ сделать это — добавить фрагмент XML, похожий на тот, как показано ниже. Использование атрибута «binding» (связывания) в примере ниже приведёт к использованию шрифта Gentium в тех местах, где предполагалось использование Georgia:

    ...
    <match target="pattern">
      <test qual="any" name="family" compare="eq"><string>Georgia</string></test>
      <edit name="family" mode="assign" binding="same"><string>Gentium Book Plus</string></edit>
    </match>
    ...

В этом примере атрибут «compare» может иметь значение «eq» (то есть точно равен Georgia), «contains» (например, будет соответствовать Georgia или Georgia Pro) или другие значения. [6]

#### Alias

Альтернативный подход состоит в установке «предпочтительного» шрифта. Шрифты, соответствующие элементу <family>, редактируются для добавления списка <prefer> семейств перед соответствующим <family>. В следующем примере при вызове шрифта Helvetica будет использоваться Bitstream Vera Sans:

    ...
    <alias>
        <family>Helvetica</family>
        <prefer>
            <family>Bitstream Vera Sans</family>
        </prefer>
    </alias>
    ...

<alias> также может использоваться для указания резервных шрифтов, когда некоторые глифы отсутствуют. Например, многие версии Helvetica Neue не содержат греческих символов. Пользователь может установить Helvetica Neue и использовать его для латинских символов, а для греческих использовать FreeSans благодаря его сходству с Helvetica. Однако тот же пользователь может установить другой шрифт Noto Sans в качестве шрифта sans-serif по умолчанию. Это можно сделать следующим образом:

    ...
    <alias>
        <family>Helvetica Neue LT Pro</family>
        <prefer>
            <family>Helvetica Neue LT Pro</family>
            <family>FreeSans</family>
        </prefer>
    </alias>
    ...

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

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

Элемент `<selectfont>` используется в сочетании с элементами `<acceptfont>` и `<rejectfont>` — белого списка или чёрного списка шрифтов, используемых для составлении списка и match-тестов. Самый простой и наиболее типичный случай его использования — для отклонения одного шрифта, который должен быть установлен, однако попадает под match-тест для стандартного шрифта и тем самым вызывает проблемы в пользовательских интерфейсах.

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

    $ fc-scan .fonts/lklug.ttf --format='%{family}\n'

    LKLUG

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

    <selectfont>
        <rejectfont>
            <pattern>
                <patelt name="family" >
                    <string>LKLUG</string>
                </patelt>
            </pattern>
        </rejectfont>
    </selectfont>

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

    <selectfont>
        <rejectfont>
            <glob>/usr/share/fonts/OTF/*</glob>
        </rejectfont>
        <acceptfont>
            <pattern>
                <patelt name="family" >
                    <string>Monaco</string>
                </patelt>
            </pattern>
        </acceptfont>
    </selectfont>

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

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

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

    ~/.config/fontconfig/conf.d/20-no-embedded.conf

    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
    <fontconfig>
      <match target="font">
        <edit name="embeddedbitmap" mode="assign">
          <bool>false</bool>
        </edit>
      </match>
    </fontconfig>

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

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

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

Чтобы отключить масштабирование растровых шрифтов (которое часто делает их размытыми), удалите `/etc/fonts/conf.d/10-scale-bitmap-fonts.conf`. Имейте в виду, что это может нарушить масштабирование шрифтов эмодзи, таких как 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:итд...

Продублируйте строку, измените `style=Regular` на `style=Bold` или любой другой стиль. Также измените `slant=0` на `slant=100` для italic (курсива), `weight=80` на `weight=200` для bold (жирного), или объедините их для bold italic (жирного курсива):

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

Теперь добавьте необходимые изменения в `$XDG_CONFIG_HOME/fontconfig/fonts.conf`:

    ...
    <match target="font">
        <test name="family" qual="any">
            <string>Dupree</string>
             <!-- другие шрифты .... -->
         </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>
            <!-- другие шрифты .... -->
        </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>
    ...

Совет: Используйте значение `embolden` для существующих bold (жирных) шрифтов, чтобы сделать их ещё жирнее.

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

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

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

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

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

    $ fc-match --verbose Sans

    family: "DejaVu Sans"(s)
    hintstyle: 3(i)(s)
    hinting: True(s)
    ...

Посмотрите значения чисел в fonts-conf(5). Например. 'hintstyle: 3' означает 'hintfull'

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

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

    ~/.Xresources

    Xft.autohint: 0
    Xft.lcdfilter: lcddefault
    Xft.hintstyle: hintslight
    Xft.hinting: 1
    Xft.antialias: 1
    Xft.rgba: rgb

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

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

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

Инструкции по работе с дисплеями с высоким или смешанным DPI есть в статье HiDPI (Русский): использование DPI, не соответствующего реальному значению, может привести к нечёткому отображению шрифтов.

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

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

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

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

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

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

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

    <?xml version='1.0'?>
    <!DOCTYPE fontconfig SYSTEM 'urn:fontconfig:fonts.dtd'>
    <fontconfig>
     <match target="font">
      <edit mode="assign" name="hinting">
       <bool>false</bool>
      </edit>
     </match>
    </fontconfig>

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

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

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

    ~/.xsettingsd

    Xft/Hinting 1
    Xft/HintStyle "hintslight"
    Xft/Antialias 1
    Xft/RGBA "rgb"

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

    ~/.Xresources

    Xft.hinting: 1
    Xft.hintstyle: hintslight
    Xft.antialias: 1
    Xft.rgba: rgb

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

### Хинтинг в приложениях GTK4

Программы GTK4 и libadwaita игнорируют настройки хинтинга. Чтобы исправить ситуацию, создайте или измените следующую конфигурацию:

    ~/.config/gtk-4.0/settings.ini

    [Settings]
    gtk-hint-font-metrics=true

Смотрите также GTK documentation and GTK issue 3787.

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

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

    fc-match helvetica

выдаёт

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

то, скорее всего, растровый шрифт, предоставляемый пакетом xorg-fonts-75dpi, будет встроен в PDF-файлы, создаваемые с помощью функций «Печать в файл» или «Экспорт» в различных приложениях. Вероятно, растровый шрифт был установлен как следствие установки всей группы xorg (что обычно НЕ рекомендуется). Для решения проблемы вы можете удалить пакет. Установите gsfonts (Type 1) или tex-gyre-fonts (OpenType) для соответствующей свободной замены Helvetica (и других базовых шрифтов PostScript/PDF).

Также эта проблема может появиться и при открытии PDF-файла, которому требуется Helvetica, но не имеющего встроенного шрифта для просмотра.

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

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

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

freetype2-demos предоставляет инструменты для отладки конфигурации шрифтов FreeType. `ftview` — это графический интерфейс, в котором можно настроить параметры рендеринга шрифтов с предварительным просмотром в реальном времени. Например:

    $ ftview -e unic -d 1024x768x24 -r 96 10 /usr/share/fonts/noto/NotoSans-Regular.ttf

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

- Wikipedia:Fontconfig
- Fonts in X11R6.8.2 - Официальная информация по шрифтам Xorg (Англ.)
- обзор FreeType 2 (Англ.)
- Дискуссия Gentoo об отображении шрифтов (Англ.)
- On slight hinting
- FreeType 2 API Reference: Controlling FreeType Modules

Category:

- Fonts (Русский)