fc-match がどのように一致するかを調べるにはどうすればいいですか?

fc-match がどのように一致するかを調べるにはどうすればいいですか?

を実行するとfc-mach Sansが返されますが、または のDejaVuSans.ttf: "DejaVu Sans" "Book"ように実行するとが返されます。私は常に DejaVu Sans を使用することを好みますが、fontconfig が unifont を選択する理由がわかりません。グローバル設定でもローカル設定でも unifont (何も返さない) については触れられていないようです。LC_DEBUG を操作しても役に立ちませんでした。fontconfig がこのように動作する理由に関する情報を取得する方法はありますか?fc-match "Sans "fc-match "Sans 9"unifont.ttf: "unifont" "Medium"grep -ri unifont /etc/fonts/ ~/.fonts.conf

答え1

ざっと見たところ、これは純粋な 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)さらに、それがデフォルト/設定された値を使用していること、そして渡された検索語句を最初に変更していることを確実に確認します。さらに深いところまで知りたい場合は、コードを検査する(上記の機能から始めます)。

答え2

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

関連情報