许多字体,包括来自包管理器(当前运行 Arch 系统)的字体,不包含通用系列“衬线“,”等宽字体“ 和 ”草书“。所以我必须手动指示正确的家庭(另请参阅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 上测试。