จะหาวิธีจับคู่ fc ได้อย่างไร


18

เมื่อฉันวิ่งfc-mach SansมันจะกลับมาDejaVuSans.ttf: "DejaVu Sans" "Book"แต่ถ้ามันทำงานเหมือนfc-match "Sans "หรือfc-match "Sans 9"กลับunifont.ttf: "unifont" "Medium"มา ฉันชอบใช้ DejaVu Sans เสมอ แต่ฉันไม่สามารถเข้าใจได้ว่าทำไม fontconfig จึงเลือก unifont ทั้งโลกและการตั้งค่าท้องถิ่นดูเหมือนว่าจะพูดถึง unifont ( grep -ri unifont /etc/fonts/ ~/.fonts.confส่งกลับไม่มีอะไร) เล่นกับ LC_DEBUG ไม่ได้ช่วยฉันเหมือนกัน มีวิธีรับข้อมูลทำไม fontconfig ทำงานเช่นนี้หรือไม่?

คำตอบ:


11

จากภาพรวมอย่างรวดเร็วดูเหมือนว่าข้อผิดพลาด fontconfig แท้สำหรับฉันเนื่องจากมันทำงานอย่างถูกต้องที่นี่และฉันมีทั้ง DejaVu และ 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"

แต่ในมุมมองที่ใกล้ชิดเราสามารถดูรายละเอียดเพิ่มเติมบางอย่าง อาจยังมีข้อผิดพลาด fontconfig อยู่ที่ไหนสักแห่ง แต่fc-matchเห็นได้ชัดว่าส่งกลับค่าเริ่มต้นเมื่อมันไม่พบอะไร เป็นเพียงค่าเริ่มต้นคือ DejaVu ในระบบของฉัน:

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

หน้าคนfc-match(1)ยืนยันว่าคำสั่งไม่ได้ทำการจับคู่ที่แน่นอน แต่กลับสิ่งที่คิดว่าเป็นการจับคู่ที่ดีที่สุด คุณสามารถเห็นพวกเขาทั้งหมดด้วย-aหรือกระชับมากขึ้น-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"

ซึ่งคุณสามารถพูดง่ายๆว่า "ขันคุณ" และเพิ่มการค้นหาอื่น ๆ ไว้ด้านบนเพื่อให้ตรงกับที่คุณคาดหวัง:

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

แต่คำถามของคุณเกี่ยวกับการจับคู่อย่างไร FcFontMatch(3)และยืนยันอย่างคร่าว ๆ ว่าจะใช้ค่าเริ่มต้น / กำหนดค่าและยืนยันอย่างแน่นอนว่าเป็นคำแรกที่ปรับเปลี่ยนข้อความค้นหาที่คุณส่งให้ สำหรับสิ่งที่ลึกกว่านี้คุณจะต้องตรวจสอบรหัส (เริ่มต้นด้วยฟังก์ชั่นที่กล่าวถึงข้างต้น)


5

FontConfig จับคู่คุณสมบัติตาม "ระยะทาง" จากเกณฑ์การจับคู่ หากคุณต้องการดูว่าเกิดอะไรขึ้นเบื้องหลังให้ตั้งค่าตัวแปรสภาพแวดล้อม FC_DEBUG = 3 แล้วทำการค้นหาอีกครั้ง นี่จะแสดงข้อมูลการดีบักที่อาจเป็นประโยชน์ คุณไม่จำเป็นต้องอ่านรหัส FontConfig

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.