2017-11-26 3 views
1

私は最近、Linux上でfontconfigを使用して、serif、sans-serif、およびmonospacedフォントのシステムデフォルトフォントを設定する方法を知りました。fontconfigのUnicode範囲/コードポイントごとにフォントを設定する方法は?

<?xml version="1.0"?> 
<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> 
<fontconfig> 

<match> 
    <test qual="any" name="family"><string>serif</string></test> 
    <edit name="family" binding="strong" mode="prepend_first"> 
    <string>Gentium</string> 
    <string>Sun-ExtA</string> 
    <string>HanaMinA</string> 
    <string>HanaMinB</string> 
    </edit> 
    </match> 

</fontconfig> 

binding="strong" mode="prepend_first"属性が一致規則は、他の設定よりも優先することを確認し、フォント名の順序は、フォントがない場所ことを確認します。基本的には、次の内容で~/.config/fontconfig/fonts.confにXML設定ファイルを保存します与えられたコードポイント/文字が含まれている場合、リストの次のフォントが試されます(このリストは上から下に適用されますが、実際は後でバインドされたより強いロジックですが、

この設定の素晴らしい点は、テキストエディタと端末エミュレータで同様に機能することです。

しかし、ある種のフォントにはグリフが含まれていますが、別のフォントではそのコードポイントが優先されるケースがたくさんあります。たとえば、Sun-ExtAはCJK文字のための素晴らしいデフォルトフォントですが、CJK以外の文字もたくさん扱い、問題のあるグリフがいくつかあります。

と仮定私はSun-ExtA〇 U+3007 IDEOGRAPHIC NUMBER ZEROの外観を好きではないし、むしろそれのためHanaMinAを使用するには、どのように私はfontconfigでいることができますか?明らかに、私はHanaMinAのエントリをSun-ExtAより優先させることはできません。それは両方のフォントに含まれているグリフのすべてに影響します。

私の勘が「(この要素( fontconfig user documentationによれば、「この要素は少なくとも一つのUnicodeコードポイントの要素以上を保持している」)<charset>要素を含む溶液がなければならないということであるおよび/または<range>範囲表現の2つの要素を保持する " - 必然的に、ある範囲のUnicodeコード点を示す。しかし、これらの要素の使い方の一例を見つけることはできませんでした。

単一のUnicodeコードポイントまたはコードポイントの範囲に特定のフォントを使用するようにfontconfigを設定することはできますか?

答えて

0
あなたが使用してはfontconfigで特定のロケール用のフォントを促進することができる

フォントはしたくないものを前にして、共通のラテン語/ギリシャ語/キリル文字の後に促進されるように、fontconfigの優先順位を慎重に使用する必要がある

<match> 
    <test name="lang"> 
     <string>[RFC-3066 language code]</string> 
    </test> 
    <test name="family"> 
     <string>[genericname]</string> 
    </test> 
    <edit name="family" mode="prepend"> 
     <string>[fontname]</string> 
    </edit> 
    </match> 
    <alias> 
    <family>[fontname]</family> 
    <default> 
     <family>[genericname]</family> 
    </default> 
    </alias> 
フォント(CJKラテン系グリフは恐ろしいことが多いので)。

もちろん、このオーバーライドが必要なロケールで読み書きするとき、ソフトウェア環境がfontconfigに信号を送ることができると仮定します。

0

<edit>タグ内の<minus>要素を含むスキャンパターンの内部では、文字セットから引き算することができます。

これは主にフォントから「悪い」やバギーの文字を削除するために設計されましたが、さらに行く、あなたが使用したいもの以外のすべてのフォントに一致する<test>を書き込むことができます。

<match target="scan"> 
    <test name="family" compare="not_eq"> 
    <string>VL Gothic</string> 
    </test> 
    <edit name="charset" mode="assign"> 
    <minus> 
     <name>charset</name> 
     <range> 
     <int>0x0021</int> 
     <int>0x00FF</int> 
     </range> 
    </minus> 
    </edit> 
</match> 

同様の構成を使用して、フォント全体からlangを削除することもできます。

私が知っている限り、これは今までにどこにも記載されていませんでした。私はそれについて知りました。from a redhat bug

関連する問題