![使用 fontconfig 更改某种语言/脚本的字符的字体系列?](https://linux22.com/image/141568/%E4%BD%BF%E7%94%A8%20fontconfig%20%E6%9B%B4%E6%94%B9%E6%9F%90%E7%A7%8D%E8%AF%AD%E8%A8%80%2F%E8%84%9A%E6%9C%AC%E7%9A%84%E5%AD%97%E7%AC%A6%E7%9A%84%E5%AD%97%E4%BD%93%E7%B3%BB%E5%88%97%EF%BC%9F.png)
我使用的是Arch Linux,Deepin Desktop。我在用诺托衬线作为我的标准字体,但我不喜欢它的阿拉伯字符。所以我的目标是使用另一种仅用于阿拉伯字符的字体。
这是我尝试过的。我创建了一个新的配置文件,其中/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>
我然后就跑了fc-cache -r
。但这不起作用,仍然使用相同的字体并且运行fc-match
返回NotoSerif-Regular.ttf: "Noto Serif" "Regular"
与以前一样。
答案1
许多 Noto 字体向系统报告它们支持阿拉伯文字,它们确实部分支持。这些字体之一是乌尔都语字体,无论出于何种原因,它都优先于支持阿拉伯文字的其他字体。
你可以更喜欢特定字体优于其他字体,如下所示:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
<family>sans-serif</family>
<prefer>
<family>Noto Sans</family>
<family>Noto Naskh Arabic</family>
</prefer>
</alias>
<alias>
<family>serif</family>
<prefer>
<family>Noto Serif</family>
<family>Noto Naskh Arabic</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Noto Sans Mono</family>
<family>Noto Naskh Arabic</family>
</prefer>
</alias>
</fontconfig>
字体的位置越高,越受欢迎。在这种情况下,我们Noto Naskh Arabic
更喜欢其他阿拉伯文字字体。
当然,您可以使用您选择的任何语言或字体来执行此操作。
由于某种原因,只有用户配置文件对我有用,那些位于~/.config/fontconfig/fonts.conf
.请注意,$XDG_CONFIG_HOME
环境变量必须设置为您的.config
主目录中的目录,因此$HOME/.config
.
然后,您必须使用 重建配置才能使其生效fc-cache
。只有新启动的应用程序才会显示新配置。重新启动 X 服务器或桌面以使更改全局生效。
编辑:如果您匹配的ar
区域设置根本无法在所有网站上运行,因为某些网站en
在显示阿拉伯语 UTF-8 字符时使用区域设置。
如果您阅读/etc/fonts/conf.d
并README
阅读以开头的任何配置文件,[30-40]
您就会知道这是正确的答案。
如果说一个网站需要 Serif 字体; fontconfig 首先遍历这个列表,Noto Serif
当它找到阿拉伯字符时,它会使用列表中的第二种字体 — Noto Naskh Arabic
— 并发现该字体支持阿拉伯脚本,因此使用它。