web-dev-qa-db-ja.com

fontconfigを使用して特定の言語/スクリプトの文字のフォントファミリーを変更しますか?

私は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"が返されます。

8
Omar Emara

多くのNotoフォントは、一部はアラビア語のスクリプトをサポートしているとシステムに報告します。これらのフォントの1つはUrduフォントであり、何らかの理由でアラビア語スクリプトをサポートする他のフォントよりも優先されます。

次のようにprefer特定のフォントを他のフォントより優先できます。

<?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サーバーまたはデスクトップを再起動します。

編集:一部のWebサイトがアラビア語のUTF-8文字を表示しながらarロケールを使用するため、単にすべてのWebサイトで機能しないenロケールと一致する場合。

/etc/fonts/conf.dに移動してREADMEを読み、次に[30-40]で始まる構成ファイルを読み取ると、これが正しい答えであることがわかります。

WebサイトがSerifフォントを要求する場合、 fontconfigはこのリストを最初にNoto Serifに移動し、アラビア語の文字を見つけると、リスト内の2番目のフォント—Noto Naskh Arabic—に頼り、そのフォントがアラビア語のスクリプトをサポートしていることを見つけ、それが使用されます。

2
Khaled Emara