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


8

我在Arch Linux,Deepin Desktop上。我使用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>

然后我跑了fc-cache -r。但这是行不通的,仍然使用相同的字体,并且像以前一样fc-match返回运行NotoSerif-Regular.ttf: "Noto Serif" "Regular"


您给配置文件起了什么名字?您的语言环境是什么(或更具体地说,是LC_CTYPE语言环境类别)?
Gunnar Hjalmarsson

99-bangla.conf~/.config/fontconfig/conf.d目录中使用@GunnarHjalmarsson 。看起来我在运行时得到了默认值LANG=bn fc-match。但是谷歌浏览器仍然选择其他字体
Anwar

Answers:


2

许多Noto字体向系统报告它们支持阿拉伯文字,部分是这样做的。这些字体之一是Urdu字体,无论出于何种原因,它都比其他支持阿拉伯文字的字体具有优先权。

与其他字体相比,您可以首选特定字体:

<?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]您就会知道这是正确的答案。

如果说网站要求衬线字体;fontconfig遍历此列表,首先Noto Serif找到,然后找到阿拉伯字符,然后求助于列表中的第二种字体Noto Naskh Arabic-并发现该字体支持阿拉伯语脚本,因此已使用。


1
谢谢!对于Deepin而言,似乎只需将其添加<string>Noto Naskh Arabic</string>~/.config/fontconfig/conf.d/99-deepin.conf文件即可。
奥马尔·埃玛拉

我猜在Ubuntu中文件名应该介于50到69之间
Anwar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.