我最近想出了如何fontconfig
在 Linux 上为 serif、sans-serif 和等宽字体设置系统默认字体;基本上,您将 XML 配置文件保存到~/.config/fontconfig/fonts.conf
以下内容:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match>
<test qual="any" name="family"><string>serif</string></test>
<edit name="family" binding="strong" mode="prepend_first">
<string>Gentium</string>
<string>Sun-ExtA</string>
<string>HanaMinA</string>
<string>HanaMinB</string>
</edit>
</match>
</fontconfig>
binding="strong" mode="prepend_first"
属性确保匹配规则优先于其他设置,并且字体名称的顺序确保在字体不包含给定代码点/字符的情况下,尝试列表中的下一个字体(此列表从顶部到-bottom;恕我直言,它确实应该是一个后期绑定更强的逻辑,但无论如何)。
这种配置的伟大之处在于它可以在文本编辑器和终端仿真器中运行。
但是,仍然存在问题:在许多情况下,给定字体确实包含给定字形,但对于该代码点,另一种字体会更可取;例如,Sun-ExtA
它是 CJK 字符的一个很好的默认字体,但它也涵盖了很多非 CJK 字符,并且有一些有问题的字形。
假设我不喜欢〇 U+3007 IDEOGRAPHIC NUMBER ZERO
in的外观Sun-ExtA
并且宁愿使用HanaMinA
它,我怎么能这样做fontconfig
呢?显然,我不能只优先考虑HanaMinA
over的条目Sun-ExtA
,因为这会影响两种字体中包含的所有字形。
我的直觉是应该有一个涉及元素的解决方案<charset>
(根据
fontconfig 用户文档,“这个元素至少包含一个 Unicode 代码点或更多元素”)和/或<range>
(“这个元素包含一个范围的两个元素表示”——大概是表示一系列 Unicode 代码点)。不过,我找不到一个如何使用这些元素的示例。
是否可以将 fontconfig 配置为对单个 Unicode 代码点或一系列代码点使用特定字体?