- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我最近想出了如何使用 fontconfig
在 Linux 上为衬线、无衬线和等宽字体设置系统默认字体;基本上,您将 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"
属性确保匹配规则优先于其他设置,字体名称的顺序确保在字体不包含给定代码点/字符的情况下,尝试列表中的下一个字体(此列表适用于从上到下底部;恕我直言,它确实应该是一个后来绑定(bind)更强的逻辑,但无论如何)。
此配置的优点在于它适用于文本编辑器和终端仿真器。
但是,仍然有一个问题:在许多情况下,给定的字体确实包含给定的字形,但对于该代码点,另一种字体更可取;例如,Sun-ExtA
是 CJK 字符的默认字体,但它也涵盖了很多非 CJK 字符,并且有一些有问题的字形。
假设我不喜欢 〇 U+3007 IDEOGRAPHIC NUMBER ZERO
的外观在 Sun-ExtA
宁愿使用 HanaMinA
为此,我怎么能用 fontconfig
做到这一点? ?显然我不能只优先考虑 HanaMinA
的条目在 Sun-ExtA
,因为这会影响两种字体中包含的所有字形。
我的直觉是,应该有一个涉及元素 <charset>
的解决方案(根据 fontconfig user documentation , "此元素至少包含 Unicode 代码点的一个元素或更多") 和/或 <range>
(“此元素包含范围表示的两个元素”——大概表示 Unicode 代码点的范围)。不过,我找不到如何使用这些元素的单个示例。
是否可以将 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
s 来自字体。
据我所知,这在之前的任何地方都没有真正的记录,我发现了它 from a redhat bug
关于linux - 如何在 fontconfig 中设置每个 Unicode 范围/代码点的字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47501411/
我是一名优秀的程序员,十分优秀!