Como descobrir como o fc-match combina?


18

Quando corro fc-mach Sans, ele retorna, DejaVuSans.ttf: "DejaVu Sans" "Book"mas se for executado como fc-match "Sans "ou fc-match "Sans 9"retorna unifont.ttf: "unifont" "Medium". Prefiro sempre usar o DejaVu Sans, mas não consigo entender por que o fontconfig seleciona o unifont. Nem a configuração global nem a local parece mencionar unifont ( grep -ri unifont /etc/fonts/ ~/.fonts.confnão retorna nada). Brincar com LC_DEBUG também não me ajudou. Existe uma maneira de obter as informações por que o fontconfig se comporta dessa maneira?

Respostas:


11

Em uma rápida olhada, parece-me um verdadeiro erro de fontconfig, pois funciona corretamente aqui e eu tenho o DejaVu e o Unifont instalados:

$ 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"

Mas, olhando mais de perto, podemos ver mais alguns detalhes. Ainda pode haver um erro de fontconfig em algum lugar, mas fc-matchaparentemente retorna um valor padrão quando não encontra nada. É apenas o padrão é DejaVu no meu sistema:

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

A página de manual fc-match(1)confirma que o comando não faz a correspondência exata, mas retorna o que considera as melhores correspondências. Você pode vê-los todos com -aou o mais 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"

Sobre o qual você pode simplesmente dizer "dane-se" e adicionar outra pesquisa sobre ela para corresponder da maneira que você espera:

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

Mas, sua pergunta é sobre como exatamente ele faz a correspondência. FcFontMatch(3)e confirme, grosso modo, que ele usa um valor padrão / configurado e, definitivamente, confirma que modifica primeiro o termo de pesquisa que você passou para ele. Para algo ainda mais profundo, você terá que inspecionar o código (comece com a função mencionada acima).


5

O FontConfig correspondeu aos atributos com base na "distância" dos critérios de correspondência. Se você quiser ver o que está acontecendo nos bastidores, defina a variável de ambiente FC_DEBUG = 3 e execute sua pesquisa novamente. Isso mostrará informações de depuração que podem ser úteis. Você não precisa ler o código FontConfig.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.