Jak dowiedzieć się, jak pasuje fc-match?


18

Kiedy uruchamiam fc-mach Sans, zwraca, DejaVuSans.ttf: "DejaVu Sans" "Book"ale jeśli działa podobnie jak fc-match "Sans "lub fc-match "Sans 9"zwraca unifont.ttf: "unifont" "Medium". Wolę zawsze używać DejaVu Sans, ale nie mogę zrozumieć, dlaczego fontconfig wybiera unifont. Ani globalna, ani lokalna konfiguracja nie wspominają o unifont ( grep -ri unifont /etc/fonts/ ~/.fonts.confnic nie zwraca). Gra z LC_DEBUG mi też nie pomogła. Czy istnieje sposób na uzyskanie informacji, dlaczego fontconfig tak się zachowuje?

Odpowiedzi:


11

Na pierwszy rzut oka wygląda mi to na prawdziwy błąd fontconfig, ponieważ tutaj działa poprawnie i mam zainstalowane zarówno DejaVu, jak i 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"

Ale przy bliższym przyjrzeniu możemy zobaczyć więcej szczegółów. Wciąż może być gdzieś błąd fontconfig, ale fc-matchnajwyraźniej zwraca wartość domyślną, gdy niczego nie znajdzie. Domyślnie jest to DejaVu w moim systemie:

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

Strona fc-match(1)podręcznika potwierdza, że ​​polecenie nie dokonuje dokładnego dopasowania, ale zwraca to, co uważa za najlepsze dopasowanie. Możesz zobaczyć je wszystkie z -alub bardziej zwięzłe -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"

Po czym możesz po prostu powiedzieć „pieprzyć się” i dodać kolejne wyszukiwanie, aby dopasować je tak, jak tego oczekujesz:

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

Ale twoje pytanie dotyczy tego, jak dokładnie pasuje. FcFontMatch(3)a następnie z grubsza potwierdź, że używa domyślnej / skonfigurowanej wartości i zdecydowanie potwierdza, że ​​najpierw modyfikuje wyszukiwane hasło, które do niej podałeś. Aby dowiedzieć się czegoś głębszego, musisz sprawdzić kod (zacznij od wyżej wspomnianej funkcji).


5

FontConfig dopasował atrybuty na podstawie „odległości” od kryteriów dopasowania. Jeśli chcesz zobaczyć, co dzieje się za kulisami, ustaw zmienną środowiskową FC_DEBUG = 3 i ponownie uruchom wyszukiwanie. Spowoduje to wyświetlenie informacji o debugowaniu, które mogą być pomocne. Nie powinieneś czytać kodu FontConfig.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.