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

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

我使用的是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.dREADME阅读以开头的任何配置文件,[30-40]您就会知道这是正确的答案。

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

相关内容