能否让 fontconfig 的「自定义字体别名」跟 serif, sans 以及 monospace 一样出现在字体列表之中?

fontconfig 的字体别名机制一般是这样的:

<alias>
	<family>serif</family>
	<prefer>
		<family>Serif_1</family>
		<family>Serif_2</family>
		<family>Serif_3</family>
	</prefer>
</alias>

当应用程序请求 serif 字体时,会按照上述例子中的 列表顺序中的字体 Serif_1, Serif_2, Serif_3 去匹配字体。

许多 GUI 软件都有选择字体的界面,除了会列出系统里的真实字体之外,还会列出 serif, sans 以及 monospace 这些通用的字体别名。假如我在 fontconfig 中自定义了一个字体别名:

<alias>
	<family>my_font</family>
	<prefer>
		<family>my_font_1</family>
		<family>my_font_2</family>
		<family>my_font_3</family>
	</prefer>
</alias>

那么怎样才能让上述例子中的 my_font 跟 serif, sans 以及 monospace 一样出现在 GUI 应用程序的字体列表之中?

不能。这几个是 Pango 硬编码进来的:

1赞

感谢您的解答,之前我也总感觉那些通用字体别名是硬编码的。并且好像不止 Pango 如此,那三个通用字体别名在几乎所有的 GUI 程序中都会用到。

用是都能用啦,在列表里显示就不一样了。火狐我猜也是硬编码的。这三个是常见的通用别名,还有些不那么常用和通用的别名,比如 cursive、fantasy、emoji,支持就比较少了。

假如应用程序支持配置文件(并且是文本文件格式)选择字体,那么像上述我那种「自定义的字体别名」也能用上,只是无法显示在 GUI 的字体选择列表之中。

要是 fontconfig 定义一种机制,让应用程序可以查询并且返回所有的字体别名,包括自定义别名就好了。 :smile: