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-matchNotoSerif-Regular.ttf: "Noto Serif" "Regular"以前と同じように戻ります。


設定ファイルにはどのような名前を付けましたか?あなたのロケールは何ですか(または、より具体的には、LC_CTYPEロケールカテゴリ)?
Gunnar Hjalmarsson

@GunnarHjalmarsson ディレクトリで使用99-bangla.conf~/.config/fontconfig/conf.dます。実行するとデフォルトが表示されるようLANG=bn fc-matchです。しかし、グーグルクロムはまだ他のフォントを選択しています
Anwar

回答:


2

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

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

<?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一部のWebサイトはenアラビア語のUTF-8文字を表示しながらロケールを使用するため、単にすべてのWebサイトで機能しないロケールと一致する場合。

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

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


1
ありがとう!Deepinにとっては<string>Noto Naskh Arabic</string>~/.config/fontconfig/conf.d/99-deepin.confファイルに追加するだけで十分です。
Omar

Ubuntuではファイル名は50〜69の範囲内にあるはずです
Anwar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.