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

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

Cuando lo ejecuto fc-mach Sans, regresa DejaVuSans.ttf: "DejaVu Sans" "Book", pero si se ejecuta me gusta 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.confno devuelve nada). Jugar con LC_DEBUG tampoco me ayudó. ¿Hay alguna manera de obtener información de por qué fontconfig se comporta así?

Respuesta1

A simple vista, me parece un error genuino de fontconfig, ya que aquí funciona correctamente y tengo instalados DejaVu y 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, si lo miramos más de cerca, podemos ver algunos detalles más. Es posible que todavía haya un error de configuración de fuente en alguna parte, pero fc-matchaparentemente devuelve un valor predeterminado cuando no encuentra nada. Simplemente 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 realiza coincidencias exactas, pero devuelve las que cree que son las mejores coincidencias. Puedes verlos todos con -ao el 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"

Luego de lo cual puedes simplemente decir "que te jodan" y agregar otra búsqueda encima para que coincida de la manera que esperas:

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

Pero su pregunta es sobre cómo exactamente hace la coincidencia. FcFontMatch(3)y además confirme aproximadamente que utiliza un valor predeterminado/configurado y definitivamente confirma que primero modifica el término de búsqueda que le pasó. Para algo aún más profundo, tendrás queinspeccionar el código(comience con la función mencionada anteriormente).

Respuesta2

FontConfig coincidió con los atributos según la "distancia" de los criterios de coincidencia. Si quieres ver lo que sucede detrás de escena, entoncesestablecer la variable de entornoFC_DEBUG=3 y vuelva a ejecutar su búsqueda. Esto mostrará información de depuración que podría resultar útil. No debería necesitar leer el código FontConfig.

información relacionada