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-match
renvoie 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 -a
ou 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).