Установка стиля шрифта по умолчанию в fonts.conf

Вопрос или проблема

Я пытаюсь установить стиль по умолчанию для шрифта в fonts.conf, потому что по какой-то причине версия Bold всегда подбирается:

$ fc-match monospace
LigaOperatorMonoSSm-Bold.otf: "Liga Operator Mono SSm" "Bold"

Вот мой fonts.conf:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <edit name="antialias" mode="assign"><bool>true</bool></edit>

  <match target="pattern">
    <test qual="any" name="family"><string>Liga Operator Mono SSm</string></test>
    <edit name="style" mode="assign" binding="same"><string>Medium</string></edit>
  </match>

  <alias>
    <family>serif</family>
    <prefer><family>Circular Std</family></prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer><family>Circular Std</family></prefer>
  </alias>
  <alias>
    <family>sans</family>
    <prefer><family>Circular Std</family></prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer><family>Liga Operator Mono SSm</family></prefer>
  </alias>
  <alias>
    <family>terminal</family>
    <prefer><family>Liga Operator Mono SSm</family></prefer>
  </alias>
</fontconfig>

Как видите, я пытался установить ширину по умолчанию на Medium, но, к сожалению, это не работает. Вот доступные стили:

/usr/share/fonts/OTF/LigaOperatorMonoSSm-LightItalic.otf: Liga Operator Mono SSm:style=Light Italic,Italic
/usr/share/fonts/OTF/LigaOperatorMonoSSm-MediumItalic.otf: Liga Operator Mono SSm:style=Medium Italic,Italic
/usr/share/fonts/OTF/LigaOperatorMonoSSm-Medium.otf: Liga Operator Mono SSm:style=Medium,Regular
/usr/share/fonts/OTF/LigaOperatorMonoSSm-BoldItalic.otf: Liga Operator Mono SSm:style=Bold Italic,Italic
/usr/share/fonts/OTF/LigaOperatorMonoSSm-Book.otf: Liga Operator Mono SSm:style=Book,Regular
/usr/share/fonts/OTF/LigaOperatorMonoSSm-Bold.otf: Liga Operator Mono SSm:style=Bold,Regular
/usr/share/fonts/OTF/LigaOperatorMonoSSm-BookItalic.otf: Liga Operator Mono SSm:style=Book Italic,Italic
/usr/share/fonts/OTF/LigaOperatorMonoSSm-Light.otf: Liga Operator Mono SSm:style=Light,Regular

Кто-нибудь видит, где ошибка? Спасибо!

Вот что я использовал, чтобы исправить неправильные метаданные в Operator Mono:

 <!-- Fixup Operator Mono weights -->
 <match target="scan">
   <test name="family">
     <string>Operator Mono Bold</string>
   </test>
   <edit name="weight">
     <const>bold</const>
   </edit>
 </match>
 <match target="scan">
   <test name="family">
     <string>Operator Mono Book</string>
   </test>
   <edit name="weight">
     <const>book</const>
   </edit>
 </match>
 <match target="scan">
   <test name="family">
     <string>Operator Mono XLight</string>
   </test>
   <edit name="weight">
     <const>extralight</const>
   </edit>
 </match>

Не забудьте заменить имя шрифта и выполнить fc-cache -f после этого.

У меня была та же проблема (с другим шрифтом). Вот что сработало для меня:

<match target="pattern">
    <test name="family" compare="eq">
        <string>Liga Operator Mono SSm</string>
    </test>
    <edit name="style" mode="append">
        <string>Medium</string>
    </edit>
</match>

В основном это говорит о том, что всякий раз, когда выполняется поиск по семейству “Liga Operator Mono SSm”, добавляется “Medium” в конец списка стилей для поиска. Таким образом, если указан какой-то другой стиль, он будет иметь приоритет, но если нет, то будет использован “Medium” для поиска шрифта.

…Я думаю. Документация fontconfig немного запутанная, если честно.

Ответ или решение

Для того чтобы настроить шрифт по умолчанию в файле fonts.conf, нужно правильно использовать структуру fontconfig и прописать подходящие правила для выбора стилей. В данном случае проблема заключается в том, что при выборе шрифта "Liga Operator Mono SSm" по умолчанию подставляется стиль "Bold", что нежелательно. Рассмотрим, как решить эту задачу.

Теория

Система конфигурации шрифтов fontconfig позволяет управлять выбором и отображением шрифтов в Unix-подобных системах. Файл конфигурации fonts.conf основывается на языке разметки XML и состоит из различных секций, которые могут включать тесты (условия) и изменения (правила редактирования) для определенных параметров шрифтов, таких как семейство (family), стиль (style), вес (weight) и другие.

Когда система ищет шрифт, она выбирает его, основываясь на ряде параметров и совпадений, определенных в fonts.conf. Путаница может возникнуть из-за отсутствия уникальности в стилях или неправильно задокументированных метаданных шрифта.

Пример

Давайте разберем представленный вами код в fonts.conf и укажем, как его можно исправить. Текущая конфигурация пытается установить "Medium" как стиль по умолчанию при поиске шрифта "Liga Operator Mono SSm". Однако, возникает конфликт с другим существующим стилем, что приводит к нежелательному результату.

Вот пример вашего кода:

<match target="pattern">
    <test qual="any" name="family">
        <string>Liga Operator Mono SSm</string>
    </test>
    <edit name="style" mode="assign" binding="same">
        <string>Medium</string>
    </edit>
</match>

Этот фрагмент кода предполагает замену стиля, но он может не срабатывать из-за неверного использования режима или отсутствующего условия. Один из предложенных решений — изменить режим mode на append.

<match target="pattern">
    <test name="family" compare="eq">
        <string>Liga Operator Mono SSm</string>
    </test>
    <edit name="style" mode="append">
        <string>Medium</string>
    </edit>
</match>

Применение

Теперь давайте рассмотрим, как это применить на практике. Для этого необходимо:

  1. Убедиться, что стиль "Medium" действительно соответствует вашему требуемому варианту отображения текста. В вашем случае один из файлов шрифтов имеет стили "Medium,Regular", что подразумевает, что это должна быть ваша цель.

  2. Применить изменения в файле fonts.conf.

  3. Обновить кэш шрифтов с помощью команды fc-cache -f, чтобы изменения вступили в силу.

Дополнительные шаги

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

<match target="scan">
    <test name="family">
        <string>Operator Mono Book</string>
    </test>
    <edit name="weight">
        <const>book</const>
    </edit>
</match>

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

Заключение

Настройка шрифтов в файле fonts.conf требует четкого понимания структуры и работы системы fontconfig. Ключом к успешному выполнению задачи является правильное написание условий и правил редактирования параметров, таких как семейство и стиль шрифта. Запуск fc-cache после внесения изменений гарантирует, что ваша система использует обновленные конфигурации.

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

Оцените материал
Добавить комментарий

Капча загружается...