linux – 如何在fontconfig中设置每个Unicode范围/代码点的字体
我最近想出了如何在
Linux上使用fontconfig为serif,sans-serif和monospaced字体设置系统默认字体;基本上,您将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”属性确保匹配规则优先于其他设置,并且字体名称序列确保字体不包含给定代码点/字符的位置,下一个字体尝试列表(这个列表适用于从上到下;恕我直言,它应该是一个后来更强大的逻辑,但无论如何). 这种配置的优点在于它可以在文本编辑器和终端仿真器中使用. 然而,还有一个问题:在许多情况下,给定的字体确实包含给定的字形,但另一种字体对于该代码点是可取的;例如,Sun-ExtA是CJK字符的一个很好的默认字体,但它也涵盖了很多很多非CJK字符,并且有一些有问题的字形. 假设我不喜欢Sun-ExtA中〇U3007 IDEOGRAPHIC NUMBER ZERO的外观而宁愿使用HanaMinA,我怎么能用fontconfig做到这一点?显然,我不能仅仅优先考虑HanaMinA对Sun-ExtA的条目,因为这会影响两种字体中包含的所有字形. 我的预感是应该有一个涉及元素的解决方案< charset> (根据 是否可以将fontconfig配置为对单个Unicode代码点或一系列代码点使用特定字体? 解决方法
在扫描模式内,包括< minus>. < edit>中的元素标签允许您从字符集中减去.
这主要是为了从字体中删除“坏”或错误的字符,但更进一步,你可以写一个< test>除了你想要使用的字体之外,它匹配每种字体: <match target="scan"> <test name="family" compare="not_eq"> <string>VL Gothic</string> </test> <edit name="charset" mode="assign"> <minus> <name>charset</name> <range> <int>0x0021</int> <int>0x00FF</int> </range> </minus> </edit> </match> 类似的配置也可用于从字体中删除整个lang. 据我所知,这在现在之前没有真正记录过,我发现了它from a redhat bug (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |