Як дізнатися, як співпадає матч fc-match?


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"

Сторінка man 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.