Bagaimana cara mengetahui pertandingan fc-match?

18

Ketika saya menjalankan fc-mach Sans, ia kembali DejaVuSans.ttf: "DejaVu Sans" "Book"tetapi jika dijalankan seperti fc-match "Sans "atau fc-match "Sans 9"kembali unifont.ttf: "unifont" "Medium". Saya lebih suka untuk selalu menggunakan DejaVu Sans tetapi saya tidak tahu mengapa fontconfig memilih yang sama. Baik konfigurasi global maupun lokal tampaknya tidak menyebutkan ( grep -ri unifont /etc/fonts/ ~/.fonts.conftidak menghasilkan apa-apa). Bermain dengan LC_DEBUG juga tidak membantu saya. Apakah ada cara untuk mendapatkan informasi mengapa fontconfig berperilaku seperti ini?

jujur
sumber

Jawaban:

11

Sekilas, sepertinya bug fontconfig asli bagi saya, karena berfungsi dengan baik di sini dan saya sudah menginstal DejaVu dan 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"

Tapi, jika dilihat lebih dekat, kita bisa melihat lebih banyak detail. Mungkin masih ada fontconfig bug di suatu tempat, tetapi fc-matchtampaknya mengembalikan nilai default ketika tidak menemukan apa pun. Ini hanya defaultnya adalah DejaVu di sistem saya:

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

Halaman manual fc-match(1)mengonfirmasi bahwa perintah tidak melakukan pencocokan tepat, tetapi mengembalikan apa yang dianggapnya paling cocok. Anda dapat melihat semuanya dengan -aatau lebih ringkas -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"

Di mana Anda bisa mengatakan "sekrup Anda" dan menambahkan pencarian lain di atasnya untuk mencocokkan dengan yang Anda harapkan:

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

Tapi, pertanyaan Anda adalah tentang bagaimana tepatnya pencocokan. FcFontMatch(3)dan selanjutnya secara kasar mengkonfirmasi bahwa ia menggunakan nilai default / terkonfigurasi dan pasti mengonfirmasikan bahwa ia terlebih dahulu memodifikasi istilah pencarian yang Anda berikan. Untuk hal yang lebih dalam, Anda harus memeriksa kode (mulai dengan fungsi yang disebutkan di atas).

lynxlynxlynx
sumber
5

Atribut yang cocok dengan FontConfig berdasarkan "jarak" dari kriteria kecocokan. Jika Anda ingin melihat apa yang terjadi di balik layar, maka atur variabel lingkungan FC_DEBUG = 3 dan jalankan kembali pencarian Anda. Ini akan menampilkan informasi debug yang mungkin bermanfaat. Anda tidak perlu membaca kode FontConfig.

Chris Sherlock
sumber