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.
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, ele será ignorado e as informações serão
obtidas a partir das próprias fontes (isso pode levar alguns
segundos se você tiver muitas fontes instaladas).
Se você tiver instalado o Xorg em
qualquer prefixo diferente de /usr
,
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' : informa 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 pense que a fonte suporte o teu idioma).
fc-match -a 'Tipo' | less : fornece 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.14" e o "ImageMagick-7.1.1-15" - 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 (tais como suavização)
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.
Entretanto, 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), 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,
será mapeada como Serif ou Monospace ou Sans; caso contrário, 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, iguais.
Desde fontconfig-2.12.5, também existe correspondência genérica de família para algumas fontes de emoji e matemáticas; por favor, 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 startx novamente, de forma que todos os aplicativos usem as novas configurações. E, se você usa GNOME, KDE, ou LXQt, 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 de bitmap, 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-20230313" coloca muitas
fontes em "/opt/texlive/2023/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 torna difícil selecionar fontes.
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/2023/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
<dir>/opt/texlive/2023/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, 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 antigos arquivos de configuração podem ser
corrigidos se você desejar usá-los. O seguinte exemplo é 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 o bloco inteiro, 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".