Come scoprire come corrisponde fc-match?


18

Quando corro fc-mach Sans, ritorna DejaVuSans.ttf: "DejaVu Sans" "Book"ma se viene eseguito come fc-match "Sans "o fc-match "Sans 9"ritorna unifont.ttf: "unifont" "Medium". Preferisco usare sempre DejaVu Sans ma non riesco a capire perché fontconfig selezioni unifont. Né la configurazione globale né quella locale sembrano menzionare unifont ( grep -ri unifont /etc/fonts/ ~/.fonts.confnon restituisce nulla). Giocare con LC_DEBUG non mi ha aiutato neanche. C'è un modo per ottenere le informazioni sul perché fontconfig si comporta in questo modo?

Risposte:


11

A prima vista mi sembra un vero bug fontconfig, dato che funziona correttamente qui e ho installato sia DejaVu che 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"

Ma, da uno sguardo più attento, possiamo vedere alcuni dettagli in più. Potrebbe esserci ancora un bug fontconfig da qualche parte, ma fc-matchapparentemente restituisce un valore predefinito quando non trova nulla. È solo l'impostazione predefinita DejaVu sul mio sistema:

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

La pagina man fc-match(1)conferma che il comando non esegue la corrispondenza esatta, ma restituisce quelle che ritiene siano le migliori corrispondenze. Puoi vederli tutti con -ao più concisi -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"

Su cui puoi semplicemente dire "fottiti" e aggiungere un'altra ricerca sopra di esso per ottenere la corrispondenza nel modo in cui ti aspetti:

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

Ma la tua domanda riguarda esattamente come funziona la corrispondenza. FcFontMatch(3)e inoltre confermano approssimativamente che utilizza un valore predefinito / configurato e conferma definitivamente che modifica prima il termine di ricerca che gli è stato passato. Per qualcosa di ancora più profondo, dovrai ispezionare il codice (inizia con la funzione di cui sopra).


5

FontConfig ha trovato gli attributi in base alla "distanza" dai criteri di corrispondenza. Se vuoi vedere cosa succede dietro le quinte, imposta la variabile di ambiente FC_DEBUG = 3 ed esegui nuovamente la ricerca. Questo mostrerà informazioni di debug che potrebbero essere utili. Non dovresti aver bisogno di leggere il codice FontConfig.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.