Wie finde ich heraus, wie FC-Match übereinstimmt?

Wie finde ich heraus, wie FC-Match übereinstimmt?

Wenn ich ausführe fc-mach Sans, gibt es zurück, aber wenn es wie oder DejaVuSans.ttf: "DejaVu Sans" "Book"ausgeführt wird, gibt es zurück . Ich bevorzuge immer DejaVu Sans, aber ich kann nicht herausfinden, warum fontconfig Unifont auswählt. Weder die globale noch die lokale Konfiguration scheint Unifont zu erwähnen ( gibt nichts zurück). Das Spielen mit LC_DEBUG hat mir auch nicht geholfen. Gibt es eine Möglichkeit, Informationen darüber zu erhalten, warum sich fontconfig so verhält?fc-match "Sans "fc-match "Sans 9"unifont.ttf: "unifont" "Medium"grep -ri unifont /etc/fonts/ ~/.fonts.conf

Antwort1

Auf den ersten Blick sieht es für mich nach einem echten Fontconfig-Fehler aus, da es hier ordnungsgemäß funktioniert und ich sowohl DejaVu als auch Unifont installiert habe:

$ 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"

Bei genauerem Hinsehen sind jedoch weitere Details erkennbar. Es könnte immer noch irgendwo einen Fontconfig-Fehler geben, aber fc-matchanscheinend wird ein Standardwert zurückgegeben, wenn nichts gefunden wird. Auf meinem System ist der Standardwert nur DejaVu:

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

Die Manpage fc-match(1)bestätigt, dass der Befehl keine exakte Übereinstimmung vornimmt, sondern die seiner Meinung nach besten Übereinstimmungen zurückgibt. Sie können sie alle mit -aoder der prägnanteren Version sehen -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"

Daraufhin können Sie einfach „Scheiß auf dich“ sagen und eine weitere Suche hinzufügen, um die Übereinstimmung wie erwartet zu erhalten:

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

Ihre Frage bezieht sich jedoch darauf, wie genau das Matching durchgeführt wird. FcFontMatch(3)Außerdem sollten Sie grob bestätigen, dass ein Standard-/konfigurierter Wert verwendet wird, und definitiv bestätigen, dass zuerst der Suchbegriff geändert wird, den Sie ihm übergeben haben. Für alles, was noch tiefer geht, müssen SieÜberprüfen Sie den Code(Beginnen Sie mit der oben genannten Funktion).

Antwort2

FontConfig hat Attribute basierend auf der "Entfernung" von den Übereinstimmungskriterien abgeglichen. Wenn Sie sehen möchten, was hinter den Kulissen vor sich geht, dannLegen Sie die Umgebungsvariable festFC_DEBUG=3 und führen Sie Ihre Suche erneut aus. Dadurch werden Debuginformationen angezeigt, die hilfreich sein können. Sie müssen den FontConfig-Code nicht lesen.

verwandte Informationen