Многие шрифты, включая шрифты из менеджера пакетов (в настоящее время работающего под управлением Arch System), не включают в себя общее семейство, как "засечки", "моноширинный" и "курсив". Поэтому мне приходится вручную указывать правильную семью (см. такжеhttps://eev.ee/blog/2015/05/20/i-stared-into-the-fontconfig-and-the-fontconfig-stared-back-at-me/).
Но для "моноширинный" шрифты, есть обходной путь: они все имеют свойство интервала 100. Вы можете проверить это, запустив fc-list :spacing=100
(см. такжеhttps://unix.stackexchange.com/a/363368/473666). Идея состоит в том, чтобы автоматически установить каждый шрифт со значением этого свойства как "моноширинный" шрифт.
Например, в файлах конфигурации по умолчанию и документации они устанавливают каждый шрифт, у которого нет "засечки" и "моноширинный" как "без засечек" Сюда:
<match target="pattern">
<test qual="all" name="family" compare="not_eq">
<string>sans-serif</string>
</test>
<test qual="all" name="family" compare="not_eq">
<string>serif</string>
</test>
<test qual="all" name="family" compare="not_eq">
<string>monospace</string>
</test>
<edit name="family" mode="append_last">
<string>sans-serif</string>
</edit>
</match>
Итак, я попробовал это:
<match target="pattern">
<test qual="all" name="spacing" compare="eq">
<int>100</int>
</test>
<test qual="all" name="family" compare="not_eq">
<string>monospace</string>
</test>
<edit name="family" mode="append_last">
<string>monospace</string>
</edit>
</match>
Результат:КАЖДЫЙшрифт в системе теперь моноширинный. Это также происходит при изменении <int>100</int>
для <const>mono</const>
. Я уже прочитал man fonts.conf
и многие из файлов конфигурации по умолчанию, перечисленных в , fc-conflist
но я не смог заставить это работать. Я пробовал несколько комбинаций свойств и их значений, но результат всегда либоНИКТОилиКАЖДЫЙШрифт рассматривается как моноширинный.
На данный момент я использовал эту команду для создания списка источников и добавил их все вручную: fc-list :spacing=100 | awk -F: '{print $2}' | sort -u
. Это мой первый раз, когда я спрашиваю что-то в Stack Exchange, надеюсь, мне удалось изложить это понятно.
решение1
Удалите аргумент qual="all"
в тесте для интервала. Он используется для указания поведения при тестировании списка (т.е. family
списка строк). Скалярный тест с qual="all"
всегда завершается успешно. Это ошибка в fontconfig.
решение2
Мне нужно было изменить цель сопоставления на , <match target=font>
чтобы проверить интервалы; я не думаю, что fontconfig знает интервалы во время сопоставления с шаблоном.
Я пока не пробовал настраивать семейство шрифтов, так как оно мне не нужно, но измененная конфигурация позволила мне отключить сглаживание в терминале GNOME только для текста консоли:
<match target="font">
<test name="spacing" compare="eq">
<int>100</int>
</test>
<test name="prgname" compare="contains">
<string>gnome-terminal</string>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>
Протестировано на версии fontconfig 2.13.1.