FC-Match'in nasıl eşleştiğini nasıl öğrenebilirim?


18

Ben koştuğumda fc-mach Sans, geri döner DejaVuSans.ttf: "DejaVu Sans" "Book"ama eğer gibi çalıştırılırsa fc-match "Sans "ya fc-match "Sans 9"da geri döner unifont.ttf: "unifont" "Medium". Her zaman DejaVu Sans kullanmayı tercih ediyorum ama fontconfig'in neden unifont'u seçtiğini anlayamıyorum. Ne küresel ne de yerel yapılandırma unifont'tan bahsetmemektedir ( grep -ri unifont /etc/fonts/ ~/.fonts.confhiçbir şey döndürmez). LC_DEBUG ile oynamak da bana yardımcı olmadı. Fontconfig'in neden böyle davrandığını öğrenmenin bir yolu var mı?

Yanıtlar:


11

Hızlı bir bakışta bana doğru bir fontconfig hatası gibi görünüyor, çünkü burada düzgün çalışıyor ve hem DejaVu hem de Unifont yüklü:

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

Ancak, daha yakından bakıldığında, daha fazla ayrıntı görebiliriz. Hala bir yerlerde bir fontconfig hatası olabilir, ancak fc-matchhiçbir şey bulamadığında varsayılan bir değer döndürür. Sadece varsayılan DejaVu benim sistemde:

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

Man sayfası fc-match(1), komutun tam eşleme yapmadığını doğrular, ancak en iyi eşleşme olduğunu düşündüğü şeyi döndürür. Hepsini -aveya daha özlü görebilirsiniz -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"

Bunun üzerine "vidala" diyebilir ve beklediğiniz şekilde eşleştirmek için üzerine başka bir arama ekleyebilirsiniz:

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

Ancak, sorunuz eşleştirmeyi tam olarak nasıl yaptığı ile ilgilidir. FcFontMatch(3)ve kabaca bir varsayılan / yapılandırılmış değer kullandığını ve ilk önce ona geçtiğiniz arama terimini değiştirdiğini kesinlikle doğrular. Daha da derin bir şey için , kodu incelemeniz gerekir (yukarıda belirtilen işlevle başlayın).


5

FontConfig eşleşen öznitelikleri, eşleşme ölçütlerinden "mesafeye" dayanır. Perde arkasında neler olup bittiğini görmek istiyorsanız, FC_DEBUG = 3 ortam değişkenini ayarlayın ve aramanızı yeniden çalıştırın. Bu, yardımcı olabilecek hata ayıklama bilgilerini gösterecektir. FontConfig kodunu okumanız gerekmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.