Comment savoir comment match fc correspond?

18

Quand je cours fc-mach Sans, il revient DejaVuSans.ttf: "DejaVu Sans" "Book"mais s'il est exécuté comme fc-match "Sans "ou fc-match "Sans 9"il revient unifont.ttf: "unifont" "Medium". Je préfère toujours utiliser DejaVu Sans mais je n'arrive pas à comprendre pourquoi fontconfig sélectionne unifont. Ni la configuration globale ni la configuration locale ne semblent mentionner unifont ( grep -ri unifont /etc/fonts/ ~/.fonts.confne renvoie rien). Jouer avec LC_DEBUG ne m'a pas aidé non plus. Existe-t-il un moyen d'obtenir les informations pour lesquelles fontconfig se comporte comme ça?

franc
la source

Réponses:

11

D'un coup d'œil, cela ressemble à un véritable bug de fontconfig pour moi, car il fonctionne correctement ici et j'ai installé DejaVu et 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"

Mais, à y regarder de plus près, nous pouvons voir plus de détails. Il peut toujours y avoir un bogue fontconfig quelque part, mais fc-matchrenvoie apparemment une valeur par défaut lorsqu'il ne trouve rien. C'est juste que la valeur par défaut est DejaVu sur mon système:

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

La page de manuel fc-match(1)confirme que la commande ne fait pas de correspondance exacte, mais renvoie ce qu'elle pense être les meilleures correspondances. Vous pouvez tous les voir avec -aou le plus concis -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"

Sur lequel vous pouvez simplement dire "vissez-vous" et ajoutez une autre recherche au-dessus pour obtenir une correspondance comme vous l'attendez:

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

Mais, votre question est de savoir exactement comment il fait la correspondance. FcFontMatch(3)et confirmez en gros qu'il utilise une valeur par défaut / configurée et confirme définitivement qu'il modifie d'abord le terme de recherche que vous lui avez transmis. Pour tout ce qui est encore plus profond, vous devrez inspecter le code (commencez par la fonction mentionnée ci-dessus).

lynxlynxlynx
la source
5

FontConfig correspond aux attributs en fonction de la «distance» des critères de correspondance. Si vous voulez voir ce qui se passe dans les coulisses, définissez la variable d'environnement FC_DEBUG = 3 et relancez votre recherche. Cela affichera des informations de débogage qui pourraient être utiles. Vous ne devriez pas avoir besoin de lire le code FontConfig.

Chris Sherlock
la source