Se você lê texto somente em inglês e está satisfeito(a) com as fontes livres comuns listadas na próxima página, [então] possivelmente você nunca precise se preocupar com os detalhes do como o "fontconfig" funciona. Mas existem muitas coisas que podem ser alteradas se não atenderem às tuas necessidades.
Embora esta página seja longa, ela mal arranha a superfície e você estará apto(a) a encontrar muitas visões alternativas na "web" (mas, por favor, lembre-se de que algumas coisas mudaram ao longo dos anos; por exemplo, o "autohinter" não mais é o padrão). O objetivo aqui é o de te fornecer informações suficientes para entender as mudanças que você está fazendo.
Observações de Usuário(a): https://wiki.linuxfromscratch.org/blfs/wiki/Fontconfig
O protocolo de fonte "Xft" fornece renderização de fonte suavizada
por intermédio do "freetype", e as
fontes são controladas a partir do lado cliente usando o
"fontconfig" (exceto para o
"rxvt-unicode-9.31", que consegue usar
fontes listadas em "~/.Xresources
" e
o "AbiWord-3.0.5" que usa somente a fonte
especificada). O caminho de pesquisa padrão é "/usr/share/fonts
" e "~/.local/share/fonts
" embora, no momento, o
antigo e obsoleto local "~/.fonts
"
ainda funcione. O "Fontconfig"
pesquisa diretórios no caminho dele recursivamente e mantém um
"cache" das características da fonte em cada diretório. Se o
"cache" parecer desatualizado, [então] ele será ignorado e as
informações serão obtidas a partir das próprias fontes (isso pode
levar alguns segundos se você instalou muitas fontes).
Se você tiver instalado o "Xorg"
em qualquer prefixo diferente de "/usr
", {então} nenhuma fonte do "X" foi instalada em um local conhecido para o
"Fontconfig". Links simbólicos
foram criados a partir dos diretórios de fontes do "X" "OTF
" e
"TTF
" para "/usr/share/fonts/X11-{OTF,TTF}
". Isso permite que
o "Fontconfig" use as fontes
"OpenType" e "TrueType" fornecidas pelo "X", embora muitas pessoas preferirão usar
fontes mais modernas.
O "Fontconfig" usa nomes para definir fontes. Os aplicativos geralmente usam nomes genéricos de fontes, como "Monospace", "Sans" e "Serif". O "Fontconfig" resolve esses nomes para uma fonte que tenha todos os caracteres que cubram a ortografia do idioma indicado pelas configurações de localidade.
Os seguintes comandos possivelmente sejam úteis ao se trabalhar com o "fontconfig":
fc-list | less : mostra uma lista de todas as fontes disponíveis (/caminho/para/nome_do_arquivo: Nome da Fonte:estilo). Se você instalou uma fonte há mais de tinta (30) segundos, mas ela não aparece, então ela ou um dos diretórios dela não está legível pelo(a) teu(ua) usuário(a).
fc-match 'Nome da Fonte' : informará qual fonte será usada se a fonte nomeada for solicitada. Normalmente você usaria isso para ver o que acontece se uma fonte que você não tenha instalado for solicitada, mas você também pode usá-lo se o sistema estiver fornecendo uma fonte diferente da que você esperava (talvez porque o "fontconfig" não concorde que a fonte suporte o teu idioma).
fc-match -a 'Tipo' | less : fornecerá uma lista de todas as fontes que podem ser usadas para esse tipo ("Monospace", "Sans", "Serif"). Observe que, no extremo, o "fontconfig" pegará um glifo a partir de qualquer fonte disponível, mesmo que ela não seja do tipo especificado, e, a menos que saiba a respeito do tipo da fonte, ele assumirá que é "Sans".
Se você deseja saber qual fonte será usada para uma sequência de
caracteres de texto (ou seja, um ou mais glifos, precedidos por um
espaço), {então} cole o seguinte comando e substitua o
"xyz
" pelo texto de teu interesse:
FC_DEBUG=4 pango-view --font=monospace -t xyz | grep family : isso exige o "Pango-1.50.12" e o "ImageMagick-7.1.0-61" - ele invocará "display" para mostrar o texto em uma pequena janela, e, depois de fechá-la, a última linha da saída gerada mostrará qual fonte foi escolhida. Isso é particularmente útil para idiomas "CJK", e você também pode passar um idioma, por exemplo, "PANGO_LANGUAGE=en;ja" (inglês, então assuma o japonês) ou apenas "zh-cn" (ou outras variantes - "zh" por si só não é válido).
Os arquivos principais estão em "/etc/fonts/conf.d/
", que foi destinado a ser um
diretório povoado por links simbólicos para alguns dos arquivos em
"/usr/share/fontconfig/conf.avail/
".
Mas, muitas pessoas, e alguns pacotes, criam os arquivos
diretamente. Cada nome de arquivo precisa estar na forma de dois
dígitos, um travessão, "algumnome.conf" e eles são lidos em
sequência.
Por convenção, os números são atribuídos conforme segue:
00-09 diretórios extras de fontes
10-19 padrões de renderização do sistema (suavização, etc.)
20-29 opções de renderização de fontes
30-39 substituição de família
40-49 mapeiam família para tipo genérico
50-59 carregar arquivos alternativos de configuração
60-69 apelidos genéricos, mapeia genérico para família
70-79 ajustar quais fontes estão disponíveis
80-89 correspondência de varredura de alvo (modificar padrões escaneados)
90-99 síntese de fontes
Você também pode ter um "fonts.conf
"
pessoal em "$XDG_CONFIG_HOME" que é "~/.config/fontconfig/
".
Se a fonte solicitada estiver instalada e desde que contenha os
pontos de código exigidos
para o idioma atual (no fonte, veja-se os arquivos ".orth" no
diretório "fc-lang/
"), [então] ela
será usada.
Mas, se o documento ou página solicitou uma fonte que não está
instalada (ou, ocasionalmente, não contém todos os pontos de código
exigidos), [então] as seguintes regras entram em jogo: Primeiro,
"30-metric-aliases.conf
" é usado para
mapear apelidos para algumas fontes com as mesmas métricas (mesmo
tamanho, etc.). Depois disso, uma fonte desconhecida será procurada
em "45-latin.conf
" - se for
encontrada, [então] será mapeada como "Serif" ou "Monospace" ou
"Sans"; caso contrário, [então] será considerada "Sans". Então
"50-latin.conf
" fornece listas
ordenadas de substitutas - as "Fontes
"Dejavu"" serão usadas se você as instalou. O cirílico e o
grego parecem ser tratados da mesma forma. Existem arquivos
semelhantes com um prefixo "65-" para o Persa e outros sistemas de
escrita não latinos. Todos esses arquivos preferem fontes
comerciais, se elas estiverem presentes, embora as fontes livres
modernas frequentemente sejam, pelo menos, os iguais delas.
Desde "fontconfig-2.12.5", também existe correspondência genérica de família para algumas fontes "emoji" e matemáticas; veja-se "{45,60}-generic.conf".
Nos raros casos em que uma fonte não contém todos os pontos de código esperados, veja-se "Trial the First:" em "Eu olhei fixamente para o "fontconfig"" para os detalhes longos.
É possível mudar como, ou se, as fontes são sugeridas. O arquivo de
exemplo a seguir contém as configurações padrão, mas com
comentários. As configurações dependem muito das preferências do(a)
usuário(a) e da escolha das fontes, de forma que uma mudança que
melhora algumas páginas possivelmente piore outras. O local
preferido para esse arquivo é: "~/.config/fontconfig/fonts.conf
"
Para testar configurações diferentes, você possivelmente precise sair do "Xorg" e então executar novamente o "startx" de forma que todos os aplicativos usem as novas configurações. E, se você usa "Gnome" ou "KDE", [então] as áreas de trabalhos deles podem substituir essas mudanças. Para explorar as possibilidades, crie um arquivo para o teu(ua) usuário(a):
mkdir -pv ~/.config/fontconfig &&
cat > ~/.config/fontconfig/fonts.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<match target="font" >
<!-- autohint era o antigo prompt automático quando as dicas eram protegidas
por patente, de forma que desligue-o para garantir que qualquer informação de
dicas na própria fonte seja usada; esse é o padrão -->
<edit mode="assign" name="autohint"> <bool>false</bool></edit>
<!-- a dica está habilitada por padrão -->
<edit mode="assign" name="hinting"> <bool>true</bool></edit>
<!-- para o "lcdfilter", veja-se https://www.spasche.net/files/lcdfiltering/ -->
<edit mode="assign" name="lcdfilter"> <const>lcddefault</const></edit>
<!-- opções para estilo de dica:
hintfull: é presumido fornecer uma fonte nítida que se alinhe bem à
grade de células de caracteres, mas ao custo do formato adequado dela.
hintmedium: mal documentado, talvez um sinônimo para "hintfull".
"hintslight" é o padrão: - presumido ser mais confuso, mas mantém a forma.
hintnone: parece desligar a dica.
As variações são marginais e os resultados variam com diferentes fontes -->
<edit mode="assign" name="hintstyle"> <const>hintslight</const></edit>
<!-- a suavização está ligada por padrão e realmente ajuda para caracteres fracos
e também para fontes "xft": fontes usadas em "rxvt-unicode" -->
<edit mode="assign" name="antialias"> <bool>true</bool></edit>
<!-- subpixels são usualmente "rgb"; veja-se
http://www.lagom.nl/lcd-test/subpixel.php -->
<edit mode="assign" name="rgba"> <const>rgb</const></edit>
<!-- agradecimentos ao "wiki" da "Arch" pelos links "lcd" e subpixel -->
</match>
</fontconfig>
EOF
Você precisará agora editar o arquivo no teu editor preferido.
Para mais exemplos, veja-se o tópico do "blfs-support" que começou em "2016-09/00128", particularmente o "2016-09/00137", e a solução preferida do postador original em "2016-09/00147". Existem outros exemplos em ""Fontconfig" no "wiki" do "Arch"" e ""Fontconfig" no "wiki" do "Gentoo"".
Nas versões anteriores do BLFS, as feias e antigas fontes de
"bitmap" do "Xorg" foram instaladas. Agora, muitas pessoas não
precisarão instalar nenhuma delas. Mas, se por algum motivo, você
tiver instalado uma ou mais fontes "bitmap", [então] você consegue
evitar que elas sejam usadas pelo "fontconfig" criando o seguinte arquivo como
o(a) usuário(a) "root
":
cat > /etc/fonts/conf.d/70-no-bitmaps.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- Rejeita fontes de "bitmap" -->
<selectfont>
<rejectfont>
<pattern>
<patelt name="scalable"><bool>false</bool></patelt>
</pattern>
</rejectfont>
</selectfont>
</fontconfig>
EOF
Normalmente, as fontes do sistema e as fontes do(a) usuário(a) são
instaladas em diretórios abaixo dos locais especificados em
"O Protocolo de Fonte Xft" e
não existe razão óbvia para colocá-las em outro lugar. No entanto,
uma instalação completa do BLFS do "texlive-20220321" coloca muitas
fontes em "/opt/texlive/2022/texmf-dist/fonts/
" nos
subdiretórios "opentype/
" e
"truetype/
". Embora extrair todos
esses arquivos possivelmente pareça útil (permite usá-los em
aplicativos que não sejam do "TeX"), existem vários problemas com essa
abordagem:
Existem centenas de arquivos, o que dificulta a seleção da fonte.
Alguns dos arquivos fazem coisas estranhas, como exibir sinalizadores de semáforo em vez de letras "ASCII" ou mapear pontos de código cirílicos para formas de caracteres apropriadas ao antigo eslavo eclesiástico em vez das formas atuais esperadas: ótimo se for isso que você precisa, mas doloroso para uso normal.
Várias fontes tem vários tamanhos e nomes curtos impenetráveis, o que torna ainda mais difícil selecionar a fonte correta.
Quando uma fonte é adicionada ao "CTAN", ela é acompanhada por pacotes do "TeX" para usá-la nos motores antigos ("xelatex" normalmente não precisa disso), e então a versão frequentemente é congelada enquanto a fonte é mantida separadamente. Algumas dessas fontes, como as "Fontes "Dejavu"", provavelmente já estão instaladas em teu sistema BLFS em uma versão mais recente, e se você tiver múltiplas versões de uma fonte, [então] não fica claro qual delas será usada pelo "fontconfig".
No entanto, às vezes é útil olhar para essas fontes em aplicativos
não "TeX", se somente para ver se você deseja instalar uma versão
atual. Se você tiver instalado todo o "texlive", [então] o exemplo a seguir
disponibilizará uma das fontes "Arkandis Open Type" para outros
aplicativos e todas as três fontes "TrueType" "ParaType". Ajuste ou
repita as linhas conforme desejado para, ou disponibilizar todas as
fontes "opentype/
" ou "truetype
", ou para selecionar diferentes
diretórios de fontes. Como o(a) usuário(a) "root
":
cat > /etc/fonts/conf.d/09-texlive.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<dir>/opt/texlive/2022/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
<dir>/opt/texlive/2022/texmf-dist/fonts/truetype/paratype</dir>
</fontconfig>
EOF
Se você fizer isso, [então] lembre-se de mudar todas as instâncias do ano nesse arquivo ao atualizar o "texlive" para um lançamento posterior.
Existem muitos motivos pelos quais as pessoas possivelmente desejem que páginas que especifiquem uma fonte específica usem uma fonte diferente ou prefiram fontes específicas em "Monospace", "Sans" ou "Serif". Como você esperará, existem várias maneiras de conseguir isso.
O "Fontconfig" instala a
documentação de usuário(a) que inclui um exemplo de "Arquivo de
usuário(a) de configuração" que, entre outras coisas, prefere a
"WenQuanYi ZenHei" (uma fonte "Sans")
se uma fonte "Serif" for
solicitada para chinês (essa parte pode ser anacrônica, a menos que
você tenha fontes chinesas não-livres, porque em "65-nonlatin.conf
" essa fonte já está entre as
fontes preferidas quando "Serif" é especificada para chinês) e
prefere a moderna fonte "VL Gothic"
se uma fonte "Sans" for especificada em uma página em japonês (caso
contrário, algumas outras fontes seriam preferidas se tivessem sido
instaladas).
Se você tiver instalado a versão atual, [então] a documentação de
usuário(a) estará disponível em versões "HTML", "PDF" e texto em
/usr/share/doc/fontconfig-2.14.2/
:
mude a versão se você instalou uma diferente.
Como um exemplo, se por algum motivo você desejou usar a fonte "Nimbus Roman No9 L" sempre que a "Times New Roman" for referenciada (ela é metricamente semelhante e preferida para "Times Roman", mas a fonte "Serif" originária das "Fontes Liberation" será preferida para a fonte "Times New Roman" se instalada), como um(a) usuário(a) individual, você poderia instalar a fonte e então criar o seguinte arquivo:
mkdir -pv ~/.config/fontconfig/conf.d &&
cat > ~/.config/fontconfig/conf.d/35-prefer-nimbus-for-timesnew.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- prefira a "Nimbus Roman No9 L" para "Times New Roman", bem como para "Times";
sem isso, "Tinos" e "Liberation Serif" tem precedência para "Times New Roman" antes
que o "fontconfig" volte para o que corresponde a "Times" -->
<alias binding="same">
<family>Times New Roman</family>
<accept>
<family>Nimbus Roman No9 L</family>
</accept>
</alias>
</fontconfig>
EOF
Isso é algo que você normalmente faria nas configurações de um(a)
usuário(a) individual, mas o arquivo nesse caso recebeu o prefixo
"35-", de forma que pudesse, se desejado, ser usado abrangente a
todo o sistema em "/etc/fonts/conf.d/
".
O exemplo a seguir de uma configuração local (ou seja, uma que se aplica para todos(as) os(as) usuários(as) da máquina) faz várias coisas:
Se uma fonte "Serif" for especificada, [então] ela preferirá as variantes "UMing", de forma que nos idiomas "zh-cn", "zh-hk" e "zh-tw" as coisas deveriam parecer boas (também "zh-sg" que na verdade usa as mesmas configurações que "zh-cn") sem afetar o japonês.
Ela prefere as "Fontes IPAex" do japonês se elas tiverem sido instaladas (embora a "VL Gothic" terá precedência para a "Sans" (japonês) se ela também tiver sido instalada.
Como a "WenQuanYi ZenHei" abrange glifos
"Hangul" coreanos e também é preferida para "Serif" em
"65-nonlatin.conf
", se
instalada, ela será usada por padrão para "Serif" coreano.
Para obter uma fonte "Serif" adequada, a fonte "UnBatang" é
especificada aqui - mude essa linha se você instalou uma
fonte "Serif" diferente da escolha das "Fontes coreanas".
As fontes "Monospace" são forçadas para as fontes preferidas "Sans". Se o texto estiver em coreano, então a "WenQuanYi ZenHei" será usada.
Em uma localidade não "CJK", o resultado é que fontes adequadas
serão usadas para todas as variantes de chinês, japonês e coreano
"Hangul". Todos os outros idiomas já deveriam funcionar se uma
fonte estiver presente. Como o(a) usuário(a) "root
":
cat > /etc/fonts/local.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<alias>
<family>serif</family>
<prefer>
<family>AR PL UMing</family>
<family>IPAexMincho</family>
<!-- "WenQuanYi" é preferida como "Serif" em "65-nonlatin.conf";
substitua isso, de forma que uma fonte real coreana possa ser usada para "Serif" -->
<family>UnBatang</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>WenQuanYi Zen Hei</family>
<family>VL Gothic</family>
<family>IPAexGothic</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>VL Gothic</family>
<family>IPAexGothic</family>
<family>WenQuanYi Zen Hei</family>
</prefer>
</alias>
</fontconfig>
EOF
Algumas fontes, especialmente fontes chinesas, vem com arquivos de
configuração que podem ser instalados em "/etc/fonts/conf.d
". No entanto, se você fizer
isso e então usar um terminal para executar qualquer comando que
use o "fontconfig", [então] você
possivelmente veja mensagens de erro como:
Aviso do Fontconfig:
"/etc/fonts/conf.d/69-odofonts.conf", linha 14: Ter-se várias
<famílias> em <apelido> não é suportado e possivelmente
não funcione conforme o esperado
.
Na prática, essas regras antigas não funcionam. Para usuários não "CJK", o "fontconfig" geralmente fará um bom trabalho sem essas regras. A origem delas remonta a quando os usuários "CJK" precisavam que os "bitmaps" feitos à mão fossem legíveis em tamanhos pequenos, e eles pareciam feios perto dos glifos latinos suavizados - eles preferiam usar a mesma fonte "CJK" para os glifos latinos. Existe um efeito colateral em fazer isso: a fonte ("Serif") também é frequentemente usada para "Sans", e em tal situação o texto (em inglês) nos menus do "Gtk" usará essa fonte - comparadas às fontes do sistema, além de ser serifada, é fraca e bastante pequena. Isso pode tornar a leitura desconfortável.
No entanto, esses arquivos antigos de configuração podem ser
corrigidos se você desejar usá-los. O exemplo a seguir é a primeira
parte do "64-arphic-uming.conf
"
originário de "UMing" - existem muitos outros itens semelhantes
que também precisam de mudanças:
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-cn</string>
<string>zh-sg</string>
</test>
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>AR PL UMing CN</string>
</edit>
</match>
O processo para corrigir isso é simples, mas tedioso - para cada
item que produzir uma mensagem de erro, usando o teu editor (como
o(a) usuário(a) "root
") edite o
arquivo instalado para repetir todo o bloco tantas vezes quantas
forem as múltiplas variáveis, então reduza cada exemplo para ter
somente uma delas. Você possivelmente deseje trabalhar em um erro
de cada vez, salvar o arquivo depois de cada correção e, a partir
de um terminal separado, executar um comando como "fc-list 2>&1 | less" para
ver se a correção funcionou. Para o bloco acima, a versão corrigida
será:
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-cn</string>
</test>
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>AR PL UMing CN</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-sg</string>
</test>
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>AR PL UMing CN</string>
</edit>
</match>
As entradas do blog de "Eevee" são particularmente úteis se o "fontconfig" não pensar que a tua fonte escolhida suporta o teu idioma e para preferir algumas fontes japonesas não "MS" quando uma fonte feia "MS" já estiver instalada.
"Arch" tem muitas informações no "wiki" dela em "font_configuration".
"Gentoo" tem algumas informações no "wiki" dela em "Fontconfig", embora muitos detalhes (o que habilitar e "Infinality") sejam específicos para "Gentoo".