使用 fontconfig 更改某种语言/脚本字符的字体系列?

Oma*_*ara 9 linux fonts fontconfig deepin

我在 Arch Linux,Deepin 桌面。我使用Noto Serif作为我的标准字体,但我不喜欢它的阿拉伯字符。所以我的目标是为阿拉伯字符使用另一种字体。

这是我尝试过的。我创建了一个新的配置文件,/etc/fonts/conf.d/内容如下:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match target="pattern">
        <test name="lang" compare="contains">
            <string>ar</string>
        </test>
        <test qual="any" name="family">
            <string>sans-serif</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Noto Naskh Arabic</string>
        </edit>
    </match>

    <match target="pattern">
        <test name="lang" compare="contains">
            <string>ar</string>
        </test>
        <test qual="any" name="family">
            <string>serif</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Noto Naskh Arabic</string>
        </edit>
    </match>
</fontconfig>
Run Code Online (Sandbox Code Playgroud)

我接着跑fc-cache -r。但这不起作用,相同的字体仍在使用中,并且像以前一样运行fc-match返回NotoSerif-Regular.ttf: "Noto Serif" "Regular"

Kha*_*ara 6

许多 Noto 字体向系统报告它们支持阿拉伯文字,它们部分支持阿拉伯文字。其中一种字体是乌尔都语字体,无论出于何种原因,它都优先于支持阿拉伯文字的其他字体。

\n\n

您可以选择特定字体而不是其他字体,如下所示:

\n\n
<?xml version="1.0"?>\n<!DOCTYPE fontconfig SYSTEM "fonts.dtd">\n<fontconfig>\n\n<alias>\n  <family>sans-serif</family>\n  <prefer>\n   <family>Noto Sans</family>\n   <family>Noto Naskh Arabic</family>\n  </prefer>\n </alias>\n\n <alias>\n  <family>serif</family>\n  <prefer>\n   <family>Noto Serif</family>\n   <family>Noto Naskh Arabic</family>\n  </prefer>\n </alias>\n\n <alias>\n  <family>monospace</family>\n  <prefer>\n   <family>Noto Sans Mono</family>\n   <family>Noto Naskh Arabic</family>\n  </prefer>\n </alias>\n\n</fontconfig>\n
Run Code Online (Sandbox Code Playgroud)\n\n

字体的位置越高,越受欢迎。在这种情况下,我们Noto Naskh Arabic更喜欢其他阿拉伯文字字体。

\n\n

当然,您可以使用您选择的任何语言或字体来执行此操作。

\n\n

由于某种原因,只有用户配置文件对我有用,那些位于~/.config/fontconfig/fonts.conf. 请注意,$XDG_CONFIG_HOME环境变量必须设置为您的.config主目录中的目录,因此$HOME/.config.

\n\n

然后,您必须使用 重建配置才能使其生效fc-cache。只有新启动的应用程序才会显示新配置。重新启动 X 服务器或桌面以使更改全局生效。

\n\n

编辑:如果您匹配的ar区域设置根本无法在所有网站上工作,因为某些网站en在显示阿拉伯语 UTF-8 字符时使用区域设置。

\n\n

如果您转到/etc/fonts/conf.d并阅读README,然后阅读以[30-40]您就会知道这是正确的答案。

\n\n

如果说一个网站需要 Serif 字体;fontconfig 遍历此列表,首先到Noto Serif,当它找到阿拉伯字符时,它会求助于列表 \xe2\x80\x94 Noto Naskh Arabic\xe2\x80\x94 中的第二个字体,并发现该字体支持阿拉伯脚本,因此它\'使用。

\n