匹配

FontConfig 是 Linux 上的字体管理工具,它的安装展示字体的功能我很熟悉,但是对于字体设置功能并不是很熟悉。

FontConfig 的字体设置功能被称为“匹配 match”。这个名字是非常形象的,这是因为应用程序在需要使用字体的时候,一般并不会明确指定具体的字体,因为这样如果宿主机上没有安装这款字体就尴尬了。它往往会给 fontconfig 发一个对于字体的请求(这是 fontconfig 可以看作是一个底层函数库),包含它对于这个字体的要求(被称为 pattern),比如这个字体有没有衬线、是否是等宽的、需不需要手写体、是不是中文,是不是表情之类的。然后 FontConfig 会根据这个要求返回一个字体列表,这个字体列表是根据程序的要求生成的,所以我们管这个过程叫做“匹配”。当程序拿到这个列表后,会从中挑选一个来使用,虽然 FontConfig 会给它建议(靠前的容易被使用),但是程序也可以不采纳。

我们可以通过编辑 ~/.config/fontconfig/fonts.conf 来制定独特的匹配规则。这是一个 XML 文件,在没有补充相关的字体知识之前,我并不能很好得看懂它的写法,它和 HTML 或者 VUE 拓展的 HTML 给人的感觉并不太类似。

概括来说,里面会有很多个标签,其中 match 标签表示一次“操作”, test 标签相当于一次条件判断,只有条件判断通过,才可以执行它的弟弟节点(居然不是执行子节点), edit 标签指的是对于返回字体序列进行操作,它有多个属性,比如 mode 表示将新增的字体在序列头部还是尾部添加, binding 表示是否“强烈推荐”。

我觉得这篇博客讲得很好。我就不赘述了。

观感

上述匹配过程其实暗示了一个事实,即用户程序其实可以完全不是使用 FontConfig 也可以指定字体,使用 FontConfig 推荐的字体只是一种“规范”,并不是强制要求,而且如何在“推荐列表”中选择字体,程序也有相当的自主权。所以过分关注字体问题并不能得到预期收益。

最后我也没有使用 FontConfig 工具,而是在 KDE 系统设置里进行了设置,我找了很久都没有找到这个配置写到了具体哪个文件中。

工具包