web-dev-qa-db-ja.com

fc-matchがどのように一致するかを知る方法は?

fc-mach Sansを実行すると、DejaVuSans.ttf: "DejaVu Sans" "Book"が返されますが、fc-match "Sans "またはfc-match "Sans 9"のように実行すると、unifont.ttf: "unifont" "Medium"が返されます。私は常にDejaVu Sansを使用することを好みますが、fontconfigがユニフォントを選択する理由がわかりません。グローバル構成もローカル構成もunifontについて言及していないようです(grep -ri unifont /etc/fonts/ ~/.fonts.confは何も返しません)。 LC_DEBUGで遊んでも助けにはなりませんでした。 fontconfigがこのように動作する理由を取得する方法はありますか?

18
frank

一見すると、これは本物のfontconfigバグのように見えます。ここでは正しく動作し、DejaVuとUnifontの両方がインストールされているためです。

_$ fc-match Sans
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans"
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans "
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans 9"
DejaVuSans.ttf: "DejaVu Sans" "Book"
_

しかし、よく見てみると、もう少し詳細を見ることができます。 fontconfigのバグがまだどこかにある可能性がありますが、_fc-match_は何も見つからない場合にデフォルト値を返すようです。私のシステムでは、デフォルトはDejaVuです。

_$ fc-match uni
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match unifont
Unifont.ttf: "unifont" "Medium"
$ fc-match 4e5zedrkbxp
DejaVuSans.ttf: "DejaVu Sans" "Book"
_

マンページfc-match(1)は、コマンドが完全に一致しないことを確認しますが、最も一致すると思われるものを返します。これらはすべて_-a_またはより簡潔な_-s_で確認できます。

_$ fc-match -s uni # now it also finds unifont
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold"
DejaVuSans-Oblique.ttf: "DejaVu Sans" "Oblique"
DejaVuSans-BoldOblique.ttf: "DejaVu Sans" "Bold Oblique"
n019003l.pfb: "Nimbus Sans L" "Regular"
helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"
FreeSans.ttf: "FreeSans" "нормален"
KanjiStrokeOrders.ttf: "KanjiStrokeOrders" "Medium"
Eadui.ttf: "Eadui" "Medium"
Unifont.ttf: "unifont" "Medium"
FreeSerif.ttf: "FreeSerif" "нормален"
cu12.pcf.gz: "ClearlyU" "Regular"
cu-pua12.pcf.gz: "ClearlyU PUA" "Regular"
10x20.pcf.gz: "Fixed" "Regular"
_

その上で、単に「あなたをねじ込んで」と言うことができ、その上に別の検索を追加して、期待どおりに一致させることができます。

_$ fc-match -s uni | grep -i uni
Unifont.ttf: "unifont" "Medium"
_

しかし、あなたの質問は、それがどのように正確にマッチングを行うかについてです。 FcFontMatch(3)さらに、デフォルト/設定された値を使用することをおおまかに確認し、渡された検索用語を最初に変更することを確認します。さらに深いことについては、 コードを検査 (上記の関数で開始)する必要があります。

11
lynxlynxlynx

FontConfigは、一致基準からの「距離」に基づいて属性を一致させました。舞台裏で何が行われているのかを確認したい場合は、 環境変数を設定 FC_DEBUG = 3とし、検索を再実行します。役立つデバッグ情報が表示されます。 FontConfigコードを読む必要はありません。

5
Chris Sherlock