Skip to content

字体配置

2023-04-08 · 651字 · 3分钟

系统:deepin v20.8

使用 rime 中州韵的过程中,我发现有些字符无法显示,如“𠱞”。之前使用小狼毫的时候,没有这个问题。一问,原来是 win 除了微软雅黑之外,还使用了一个新细明体作为 fallback 字体,能够接住这个生僻字。而 deepin 上并不自带字库更大的 fallback 字体,需要手动配置。

到网上转了一圈才大概梳理出一点头绪,这里整理一下:

  1. 首先在网上下载需要的字体,这里我们使用花园明朝(HanaMin),这是一款免费字体,几乎囊括全汉字字库。(我在这只使用了 HanaMinA.ttf 与 HanaMinB.ttf)

  2. 双击字体文件,用 deepin 自带的字体安装器安装。[1](命令行安装可以参考 archlinux wiki[2]

  3. 来到~/.config/fontconfig/conf.d/路径,这里存放着用户的字体配置文件。我的路径下只有99-deepin.conf这一项,于是我直接在里面修改了。该文件是 xml 格式文件,内容如下:

xml
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match target="pattern">
        <test qual="any" name="family">
            <string>serif</string>
        </test>
        <edit name="family" mode="assign" binding="strong">
            <string>Noto Sans CJK SC</string>
            <string>Noto Sans</string>
            <string>HanaMinA</string>
            <string>HanaMinB</string>
        </edit>
    </match>

    <match target="pattern">
        <test qual="any" name="family">
            <string>sans-serif</string>
        </test>
        <edit name="family" mode="assign" binding="strong">
            <string>Noto Sans CJK SC</string>
            <string>Noto Sans</string>
            <string>HanaMinA</string>
            <string>HanaMinB</string>
        </edit>
    </match>

    <match target="pattern">
        <test qual="any" name="family">
            <string>monospace</string>
        </test>
        <edit name="family" mode="assign" binding="strong">
            <string>Noto Mono</string>
            <string>Noto Mono</string>
        </edit>
    </match>

    <match target="font">
        <edit name="rgba"><const>rgb</const></edit>
    </match>
</fontconfig>

第一眼我也不懂,好在有 chatgpt。大概就是每一个match块对应着一种 font-family 的渲染模式,譬如第一块是衬线字体的渲染方式,edit内部定义了衬线字体的渲染优先级,即先用 Noto Sans CJK SC 渲染衬线字体,否则到 Noto Sans 中寻找,以此类推。我在后面添加上了 HanaMinA 与 HanaMinB 接住前面二者的漏网之字。后面的无衬线和等宽字体同上配置。[3]

  1. 保存并重启,“𠱞”字就能顺利渲染了。

参考资料:


  1. https://m.uc23.net/jiaocheng/71479.html ↩︎

  2. archlinux wiki 字体安装 ↩︎

  3. linux 的字体渲染由 fontconfig 这个库管理,一般配有 GUI 界面的 linux 发行版自带该库。详见archlinux wiki 字体配置 ↩︎

返回

人同此心,心同此理;如风沐面,若水润心