¿Cómo saber cómo coincide el fc-match?


18

Cuando corro fc-mach Sans, regresa DejaVuSans.ttf: "DejaVu Sans" "Book"pero si se ejecuta como fc-match "Sans "o fc-match "Sans 9"regresa unifont.ttf: "unifont" "Medium". Prefiero usar siempre DejaVu Sans, pero no puedo entender por qué fontconfig selecciona unifont. Ni la configuración global ni la local parecen mencionar unifont (grep -ri unifont /etc/fonts/ ~/.fonts.conf no devuelve nada). Jugar con LC_DEBUG tampoco me ayudó. ¿Hay alguna manera de obtener la información por la cual fontconfig se comporta así?

Respuestas:


11

A simple vista, me parece un error genuino de configuración de fuente, ya que funciona correctamente aquí y tengo instalados tanto DejaVu como 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"

Pero, en una mirada más cercana, podemos ver algunos detalles más. Todavía puede haber un error de fontconfig en alguna parte, pero fc-matchaparentemente devuelve un valor predeterminado cuando no encuentra nada. Es solo que el valor predeterminado es DejaVu en mi sistema:

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

La página de manual fc-match(1)confirma que el comando no hace una coincidencia exacta, pero devuelve lo que cree que son las mejores coincidencias. Puedes verlos a todos con -ao más conciso -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"

Después de lo cual puedes simplemente decir "atornilla" y agregar otra búsqueda encima para que coincida de la manera esperada:

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

Pero, su pregunta es acerca de cómo exactamente coincide. FcFontMatch(3)y más o menos confirma que usa un valor predeterminado / configurado y definitivamente confirma que primero modifica el término de búsqueda que le pasaste. Para algo aún más profundo, deberá inspeccionar el código (comience con la función mencionada anteriormente).


5

Los atributos coincidentes de FontConfig se basan en la "distancia" de los criterios de coincidencia. Si desea ver lo que sucede detrás de escena, configure la variable de entorno FC_DEBUG = 3 y vuelva a ejecutar su búsqueda. Esto mostrará información de depuración que puede ser útil. No debería necesitar leer el código FontConfig.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.