默认的配置,无论是英文还是中文,显示效果都不太满意。网上例子大都解释不清楚,不敢随意尝试,怕越改越乱。
系统配置 [/etc/fonts/*]
首先要了解的是系统将字体分为那几大类?
主要分为三大类,衬型
,非衬型
和等宽
,具体介绍和效果可以见这里
首先要了解的是系统是怎样选择字体的?
系统的配置文件位于/etc/fonts/conf.d
下, 通过阅读README
, 了解这些配置前面数字的意义以及系统读取这些配置文件的顺序
。
这些配置文件其实我们只需要了解两个: 49-sansserif.conf
& 65-nonlatin.conf
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <match target="pattern">
<test qual="all" name="family" compare="not_eq">
<string>sans-serif</string>
</test>
<test qual="all" name="family" compare="not_eq">
<string>serif</string>
</test>
<test qual="all" name="family" compare="not_eq">
<string>monospace</string>
</test>
<edit name="family" mode="append_last">
<string>sans-serif</string>
</edit>
</match>
|
上面的配置简单明了,将所有的字体归为了三大类,而不属于这三大类的字体,默认归为sans-serif
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| <alias>
<family>serif</family>
<prefer>
<family>Artsounk</family> <!-- armenian -->
...
<family>SimSun</family> <!-- han (zh-cn,zh-tw) -->
<family>PMingLiu</family> <!-- han (zh-tw) -->
<family>WenQuanYi Zen Hei</family> <!-- han (zh-cn,zh-tw) -->
<family>WenQuanYi Bitmap Song</family> <!-- han (zh-cn,zh-tw) -->
...
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>Nachlieli</family> <!-- hebrew -->
...
<family>SimSun</family> <!-- han (zh-cn,zh-tw) -->
<family>PMingLiu</family> <!-- han (zh-tw) -->
<family>WenQuanYi Zen Hei</family> <!-- han (zh-cn,zh-tw) -->
<family>WenQuanYi Bitmap Song</family> <!-- han (zh-cn,zh-tw) -->
...
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Miriam Mono</family> <!-- hebrew -->
...
<family>NSimSun</family> <!-- han (zh-cn,zh-tw) -->
<family>MingLiu</family> <!-- han (zh-tw) -->
<family>AR PL ShanHeiSun Uni</family> <!-- han (ja,zh-cn,zh-tw) -->
<family>AR PL New Sung Mono</family> <!-- han (zh-cn,zh-tw) -->
<family>HanyiSong</family> <!-- han (zh-cn) -->
...
</prefer>
</alias>
|
上面的配置文件则是各类字体在分别的类别中优先级,越靠前的字体,优先级越高。
从上面两个配置文件我们可以基本上了解为什么Linux系统装完wenquanyi zen hei
字体后,系统的中文就”默认”成了该字体,然而该字体在linux下,稍显模糊。
相比较下,我更喜欢wenquanyi zen hei sharp
, 十分适合终端显示,而wenquanyi micro hei
则十分适合浏览器显示。
无图无真相,下面是系统的字体配置效果。

用户配置 [~/.config/fontconfig/fonts.conf]
SO?如何达成上面截图中所示的中文现实效果,直接贴配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| <match>
<test name="family"><string>Terminus</string></test>
<edit name="family" mode="append" binding="strong">
<string>WenQuanYi Zen Hei Sharp</string>
</edit>
</match>
<match>
<test name="family"><string>serif</string></test>
<edit name="family" mode="append" binding="strong">
<string>WenQuanYi Zen Hei Sharp</string>
</edit>
</match>
<match>
<test name="family"><string>sans-serif</string></test>
<edit name="family" mode="append" binding="strong">
<string>WenQuanYi Micro Hei</string>
</edit>
</match>
<match>
<test name="family"><string>monospace</string></test>
<edit name="family" mode="append" binding="strong">
<string>WenQuanYi Zen Hei Sharp</string>
</edit>
</match>
|
很简单吧,就像前面介绍的,我们只要把自己喜欢的中文字体放在各类别的前面就可以了。
这里再稍微解释一下为什么会有第一个match
的配置,原因也很简单,Terminus
字体属于不常见的字体,不在系统默认的字体分类里面。
根据前面的介绍,不在三大分类的字体会被默认分为sans-serif
,因而中文显示会是wenquanyi micro hei
。但是该字体在终端下表现不太好,因此我们需要给它加上相应中文字体的设定。
这里还要补充的一点是mode
的设定,是append
,而不是prepend
,前者是将字体的优先级设定在匹配字体的后面,即在匹配不到的时候作为第一候选,而后者相反。
因为中文字型大都包含英文字体,所以使得不仅中文是设定字体,英文都强制的使用了中文字型里的英文字体,实在是太难看,而且所有的英文字体都是如此。