Ajustando Fontconfig

Visão Geral do Fontconfig

Se você ler texto somente em inglês e estiver feliz com as fontes livres comuns listadas na próxima página, possivelmente nunca precise se preocupar com os detalhes do como Fontconfig funciona. Mas, existem muitas coisas que podem ser alteradas se não atenderem às tuas necessidades.

No entanto, antes de passar muito tempo experimentando configurações diferentes, por favor, esteja ciente de que aplicativos modernos e ambientes de área de trabalho podem ignorar as configurações do fontconfig - veja-se Itens que conseguem substituir Fontconfig.

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, por que elas nem sempre funcionam e para identificar informações on-line que não mais são apropriadas.

Infelizmente, parte da terminologia é ambígua (por exemplo, 'face da fonte' pode significar um nome conhecido pelo Fontconfig, ou as variações comuns, condensadas, etc. de uma fonte) e 'estilo' pode ser usado para diferenciar 'comum' de 'itálico' ou na descrição de algumas classes de fontes Serif.

Os links a seguir são para auxiliar a navegação nesta página.

O Protocolo de Fonte Xft

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, quaisquer fontes do X não foram instaladas em um local conhecido para o Fontconfig. Links simbólicos foram criados a partir dos diretórios de fontes OTF e TTF do X para /usr/share/fonts/X11-{OTF,TTF} em Fontes do Xorg. 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.

Comandos Úteis

Os comandos a seguir podem ser úteis ao se trabalhar com Fontconfig, especialmente se você estiver interessado(a) em substituir qual fonte será escolhida.

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 e ela não aparecer, então o diretório onde ela está contida 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 não tenha instalada fosse solicitada, mas você também pode usá-lo se o sistema estiver fornecendo uma fonte diferente da que esperava (talvez porque o Fontconfig não pense que a fonte suporte o teu idioma).

fc-match TIPO : mostra qual fonte será usada no idioma atual para esse TIPO (Monospace, Sans, Serif (letra maiúscula inicial é opcional)). Se essa fonte não mapear um ponto de código, Fontconfig poderá obter um glifo a partir de qualquer fonte disponível, mesmo se ela não for do tipo especificado. Qualquer outro valor para TIPO será presumido que seja Sans.

fc-match 'Serif :lang=ja:weight=bold' informará qual fonte e espessura serão escolhidas para o texto japonês em negrito. Isso não significa que a fonte informada será necessariamente capaz de mostrar ideogramas japoneses, de forma que uma substituta poderá ser usada ou alguns glifos possivelmente estarão ausentes. Para códigos de idioma, use valores ISO-639 como 'fr', 'ja', 'zh-cn'. Observe que um valor não reconhecido como apenas 'zh' não retornará nenhuma correspondência. Para ilustrar a substituta, em um sistema onde Noto Sans Mono e DejaVu Sans Mono estejam instaladas, fc-match 'monospace :lang=en mostrará que Noto Sans Mono será usada, mas se o idioma for mudado para 'ar' (árabe) DejaVu Sans será usada.

Se você quiser determinar se um arquivo de fonte tem dicas (muitas fontes mais antigas não tem, porque foram patenteadas) use fc-query /caminho/para/arquivo_fonte | grep 'fonthashint:': que informará 'True(s)' ou 'False(s)'. Algumas fontes recentes com versões TTF e OTF terão dicas nos arquivos TTF.

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.54.0 e o ImageMagick-7.1.1-36 - 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, como zh-sg ou zh-tw).

Os arquivos de configuração

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/).

As regras para escolher uma fonte

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.

No entanto, 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.). Observe que existem apelidos fracos e fortes, de modo que os apelidos para uma forma, como Helvetica ou Times New Roman, podem ser satisfeitos pelo outro estilo, ou seja, qualquer coisa que seja um apelido de Arial ou Times nesses exemplos. Alguns exemplos de fontes latinas com as mesmas métricas podem ser encontrados nos PDFs 'Substitutes' em typosetting.co.uk.

Depois disso, uma fonte desconhecida será procurada em 45-latin.conf: 'Latin' cobre cirílico e grego, e agora também mapeia fontes system-ui que são usadas para mensagens da interface de usuário(a) em outros alfabetos. Se a fonte for encontrada, ela será mapeada como serif, sans-serif, monospace, fantasy, cursive ou system-ui. Caso contrário, 49-sansserif.conf assumirá que é Sans.

Então 60-latin.conf fornece listas ordenadas de substitutas - Fontes Noto será usada se você as instalou. O cirílico e o grego parecem ser tratados da mesma maneira. Todos esses arquivos preferem fontes comerciais, se estiverem presentes, embora as fontes livres modernas sejam frequentemente pelo menos iguais. Finalmente, se um ponto de código ainda não for encontrado, ele poderá ser obtido a partir de qualquer fonte disponível do sistema. Os detalhes a seguir mencionam somente fontes livremente disponíveis.

As fontes persas padrão são tratadas em 65-fonts-persian.conf. Parece como se todas as fontes listadas sejam comerciais. Usar fontes que suportam persa (que tem a própria variante dele do alfabeto árabe e os próprios estilos dele de fonte) está fora das habilidades dos(as) editores(as) do BLFS.

Todos os conjuntos de comandos sequenciais restantes para os quais Fontconfig tem preferências (scripts CJK, scripts índicos) são tratados em 65-nonlatin.conf. Esses são novamente agrupados nominalmente como Serif, Sans-Serif, Monospace. Das fontes livres, WenQuanYi Zen Hei (Pan-CJK Sans) vem em primeiro lugar, tanto para Serif quanto para Sans. Portanto, se você instalar isso como substituta, mas quiser usar fontes diferentes para japonês ou coreano, precisará configurar uma preferência. Da mesma forma, a antiga fonte fireflysung Serif também está listada para Sans.

Depois das fontes Pan-CJK e chinesas, vem várias fontes japonesas e, em seguida, várias fontes coreanas (ambas divididas apropriadamente entre Sans e Serif). Finalmente vem as várias famílias Lohit Indic (um arquivo de fonte por conjunto de comandos sequenciais), rotuladas como Sans e Serif.

As fontes Monospace listadas em 65-nonlatin.conf não incluem WenQuanYi Zen Hei, embora elas estejam disponíveis como substitutas se instaladas. Várias fontes góticas japonesas estão listadas, seguidas por AR PL KaitiM GB (uma fonte zh-sc 'Brush'), fontes AR PL Serif para zh-sc (SungtiL) e zh-tw (Mingti2L), algumas fontes coreanas Sans e as várias Famílias Lohit Indic.

Para fontes de Interface de Usuário(a), várias fontes de Interface de Usuário(a) Noto Sans são as únicas fontes livres listadas.

As diversas fontes Noto CJK não estão entre as fontes listadas; possivelmente os(as) desenvolvedores(as) do RedHat preferiram outras fontes. Agora elas vem em muitas variações, e a maioria dos(as) usuários(as) que as usam não instalará quaisquer outras fontes CJK.

Antes do Fontconfig-2.14, a primeira família de fontes latinas preferida era a Bitstream Vera. Na prática, isso raramente era usado porque cobria pouquíssimo. Depois disso, DejaVu foi a próxima família preferida, de forma que as pessoas foram recomendadas a instalá-la. Isso agora mudou; Bitstream Vera foi substituída pelas fontes Noto relevantes (Serif, Sans, Sans Mono), portanto essas serão preferidas se tiverem sido instaladas, seguidas pela DejaVu.

Para serif, Times New Roman poderia ter sido apelidado a partir de Liberation Serif ou Tinos, e Times a partir de TeX Gyre Termes, de forma que, embora as fontes nomeadas não sejam livres, as fontes compatíveis em métricas podem ser usadas. Ignorando outras fontes não livres, a ordem restante para serif é: Times New Roman, Luxi Serif, Nimbus Roman No9 L e Times. Na prática, isso significa que é improvável que as fontes no final da lista sejam usadas, a menos que uma página da web as solicite.

Para sans-serif, a ordem restante é qualquer coisa mapeada para Arial, Luxi Sans, Nimbus Sans L e qualquer coisa mapeada para Helvetica.

As alternativas restantes para monospace são Inconsolata, qualquer coisa mapeada para Courier New, Luxi Mono, Nimbus Mono e qualquer coisa mapeada para Courier.

Para 'fantasy' não existem fontes livres, portanto Fontconfig retornará para sans-serif.

Para 'cursive', a única fonte livre é TeX Gyre Chorus como um apelido para a chancelaria ITC Zapf, caso contrário Fontconfig novamente retornará para sans-serif.

A categoria system-ui é incomum. É para mensagens de interface, portanto alguns conjuntos de comandos sequenciais precisam de versões especiais para caber no espaço disponível. Para latim, grego e cirílico, uma fonte sans comum deveria caber sem problemas. No entanto, a primeira fonte preferida é Cantarell, seguida por Noto Sans UI. Cantarell começou como uma fonte latina sans-serif, que foi bifurcada no Gnome sob o mesmo nome, mas eles(as) fornecem somente o fonte. As fontes Noto Sans UI são para outros idiomas.

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.

Dicas e Suavização

É 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ê pode precisar sair do Xorg e então executar startx novamente, de forma que todos os aplicativos usem as novas configurações. Várias coisas podem substituir as configurações do fontconfig; veja-se Itens que conseguem substituir Fontconfig abaixo para mais detalhes. Para explorar as possibilidades, crie um arquivo para teu(tua) 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 alinha bem à
    grade de células de caracteres, mas ao custo do formato adequado
    dela. No entanto, qualquer coisa que use Pango >= 1.44 não suportará
    dicas completas; o Pango agora usa harfbuzz para dicas. Aplicativos que
    usam Skia (por exemplo, Chromium, Firefox) não deveriam ser afetados por isso.

    hintmedium: é informado que está quebrado.
    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

Agora você precisará editar o arquivo no teu editor preferido. Muitas das diferentes configurações apresentam diferenças muito sutis e os resultados podem diferir para algumas das fontes que você usar.

[Nota]

Nota

A dica, se habilitada, é feita em FreeType. Desde o FreeType-2.7, o interpretador TrueType padrão é v40. O hinter v35 original poderia ser habilitado por uma variável de ambiente, mas só é realmente apropriado para fontes originais TTF da Microsoft (Arial, etc). O hinter v38 (Infinality) não é construído por padrão e todas as opções para ajustá-lo foram removidas. Para detalhes completos, veja-se subpixel-hinting (Spoiler: NÃO existem dicas de subpixel; o código simplesmente ignora todas as instruções de dicas horizontais).

O Xorg assume que as telas tem 96 pontos por polegada (DPI). A maioria das telas LCD está próxima disso, mas algumas pessoas detectam distorções de cores se a tela delas divergir desse tamanho. Veja-se calc-dpi.

Se você tiver uma tela de alto DPI (geralmente descrita como '4K' ou maior), provavelmente usará tamanhos de fonte maiores e se beneficiará ao desabilitar as dicas.

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

Desabilitando as Fontes "Bitmap"

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

Mudanças sintéticas

Em 90-synthetic.conf existem exemplos de aplicação de inclinamento e negritamento sintéticos a uma fonte. O negritamento sintético pode ser aplicado a uma fonte visivelmente esmaecida, mas os resultados nem sempre são os esperados: apenas com o negritado, o Epiphany mostrou fontes mais escuras, enquanto o Firefox não - então, embora Cairo agora seja usado pelo firefox, o comentário acerca da configuração do Peso ainda é válido. Mas configurando ambos, Epiphany mostrará texto em negrito por padrão, mas mostrará texto pesado se a marcação para negrito for usada. Em ambos os casos, nem o libreOffice nem o falkon mostraram texto mais negritado.

Adicionando diretórios extras de fontes

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-20240312" coloca muitas fontes em "/opt/texlive/2024/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:

  1. Existem centenas de arquivos, o que torna difícil selecionar fontes.

  2. 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.

  3. Várias fontes tem vários tamanhos e nomes curtos impenetráveis, o que torna ainda mais difícil selecionar a fonte correta.

  4. 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, 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/2024/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
  <dir>/opt/texlive/2024/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.

Preferindo certas fontes

Com exceção de páginas da web que usam fontes WOFF e as fornecem ou vinculam ao Google para baixá-las, as páginas da web tradicionalmente sugerem uma lista de nomes de famílias de fontes preferidas, se assim o desejarem (por exemplo, Times New Roman, Serif). Existem muitos motivos pelos quais as pessoas podem desejar que páginas que especificam uma fonte preferida usem uma fonte diferente ou prefiram fontes específicas em Monospace, Sans ou Serif. Como você esperará, existem várias maneiras de conseguir isso.

Documentação de usuário(a) do Fontconfig

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.15.0/: mude a versão se você instalou uma diferente.

Prefira uma fonte específica

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 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/".

Prefira fontes escolhidas "CJK"

O exemplo a seguir de uma configuração local (ou seja, uma que se aplica a todos os(as) usuários(as) da máquina) faz várias coisas. Ela é particularmente apropriada onde nenhum idioma for especificado, ou para leitura de texto CJK em uma localidade não CJK, e onde as formas japonesas dos pontos de código compartilhados com o chinês são preferidas. Em particular, abordagens alternativas seriam especificar uma fonte chinesa antes da fonte japonesa, significando que somente símbolos Kana serão usados a partir da fonte japonesa, ou não especificar DejaVu, de forma que a primeira fonte em cada conjunto de preferências seja preferida para texto usando alfabetos latinos.

  1. Se uma fonte Serif for especificada, ela prefere Fontes Dejavu. Se pontos de código Han forem encontrados ou o idioma japonês for especificado, a fonte Mincho oriunda de Fontes IPAex será usada. Se pontos de código Hangul forem encontrados ou o idioma coreano for especificado, UnBatang (veja-se Fontes coreanas) será usado: Mude essa linha se você instalou uma fonte serif coreana diferente. Depois disso, WenQuanYi ZenHei (Sans, mas um padrão para Serif e monospace) é usado. Uma versão anterior desta página mencionou o uso de UMing, que é uma fonte do chinês tradicional que vem com um antigo arquivo de configuração, preferindo-a para códigos de idioma zh-tw e zh-hk (e para sans-serif e monospace). Mas sem o arquivo de configuração, Fontconfig somente a tratará como adequada para zh-hk. O arquivo de configuração precisa ser editado para o estilo atual e então será anexado; portanto, especificar UMing não pertence a esse arquivo local.conf.

  2. Para preferências de Sans Serif, comece novamente com Fontes Dejavu, depois VL Gothic para japonês antes de voltar para WenQuanYi Zen Hei, que é Sans e abrange Hangul chinês e coreano.

  3. As fontes Monospace são forçadas para as fontes preferidas Sans. Se o texto estiver em chinês ou 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 (mas variantes japonesas dos glifos compartilhados com o chinês Han serão usadas). 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>DejaVu Serif</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>DejaVu Sans</family>
             <family>VL Gothic</family>
         <!-- Isto assume WenQuanYi; é boa o suficiente para Sans Coreana -->
         </prefer>
    </alias>
    <alias>
         <family>monospace</family>
         <prefer>
             <family>DejaVu Sans Mono</family>
             <family>VL Gothic</family>
         <!-- Isto assume WenQuanYi; é boa o suficiente para Monospace Coreana -->
         </prefer>
    </alias>
</fontconfig>
EOF

Editando Arquivos de Configuração no Estilo Antigo

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, 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(as) não CJK, o Fontconfig geralmente fará um bom trabalho sem essas regras. A origem delas remonta a quando os(as) usuários(as) CJK precisavam que os bitmaps feitos à mão fossem legíveis em tamanhos pequenos, e eles pareciam feios perto dos glifos latinos suavizados - eles(as) preferiam usar a mesma fonte CJK para os glifos latinos. Existe um efeito colateral em fazer isso: a fonte (Serif) frequentemente também é 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 desconfortável ler.

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>

Acerca de espessuras de fonte

Quando esta página e a próxima foram criadas, as fontes latinas vinham com no máximo duas espessuras - Regular ou Livro (Livro normalmente tem uma altura X maior para facilitar a leitura em grandes blocos de texto) e Negrito - e talvez um estilo itálico (ou inclinado). Algumas fontes também tinham faces condensadas (para caber mais texto em uma linha e geralmente usadas somente quando especificado). Sem a marcação CSS (Cascading Style Sheets), o texto usava a espessura Regular ou Book, exceto quando marcação <b> ... </b> era usada para texto em negrito. Os estilos em itálico seriam invocados por marcação <i> ... </i>, juntamente com a marcação em negrito para Bold Italic.

Algumas faces agora contêm até 9 espessuras, possivelmente também com uma fonte variável (para economizar espaço incluindo todas as alternativas em um arquivo e possivelmente permitindo espessuras intermediárias). Para a maioria dos(as) usuários(as) de área de trabalho que não precisam dessa ampla gama de espessuras para criar conteúdo, é mais simples instalar somente uma ou duas espessuras. Se uma face tiver espessuras individuais mais uma fonte variável, a fonte variável geralmente estará no nível superior do diretório fornecido, com espessuras individuais em um subdiretório static/. Exceto na revisão inicial de uma fonte, não faz sentido instalar estática e variável, nem todas as espessuras possíveis.

As espessuras são rotuladas de 100 (fina) a 900 (preta ou pesada) na terminologia CSS, sendo 400 normal e 700 negrito. O conjunto completo de espessuras está descrito em Tabela de espessuras CSS de fontes.

Se você tiver instalado uma fonte com várias espessuras, você pode copiar font-weights.html para a tua máquina local. Conforme enviado, ele usará tua fonte Serif padrão, presumindo que você tenha uma. Edite-o para apontar para uma fonte específica instalada usando o nome conhecido para Fontconfig (também nos itens de texto *EDITME FONTNAME*) e abra-o a partir do teu navegador da área de trabalho. Você também pode usá-lo para visualizar uma fonte com apenas duas espessuras instaladas, por exemplo, para testar para ver se você prefere outras espessuras.

Apesar dos detalhes naquele link da Mozilla, parece que se apenas as espessuras normal e negrito forem instaladas, SemiBold (600) será mostrada usando negrito.

Parece haver pouca margem para mudar quais espessuras são usadas para normal e negrito se apenas duas espessuras tiverem sido instaladas. O Firefox, e provavelmente outros navegadores, procurarão a próxima espessura mais pesada que o normal. Se for menor que negrito (Médio, talvez SemiBold - incerto) será usada para normal e então a próxima espessura maior, se houver, será usada para negrito, permitindo que você deixe as fontes um pouco mais escuras. Por outro lado, se apenas uma espessura menor que o normal tiver sido instalada, como Light, ela será usada tanto para espessura normal quanto para negrito (a busca ascendente acontece primeiro).

Se remover algumas espessuras de uma fonte do sistema, você possivelmente necessitará executar fc-cache como o(a) usuário(a) root e, em seguida, deslogar-se completamente para limpar os caches associados ao teu(tua) usuário(a).

Itens que conseguem substituir Fontconfig

Vários ambientes de área de trabalho, assim como alguns programas, usarão Fontconfig para achar fontes, mas possivelmente substituam certas coisas.

GNOME: As configurações em org.gnome.desktop.interface podem ser atualizadas com dconf-editor. Você pode configurar as fontes de acordo com tua preferência e tamanho desejado de ponto. Para usar as fontes escolhidas pelo Fontconfig especifique, por exemplo, 'Sans 12', 'Serif 11', 'Mono 10' conforme desejado. Revise também as configurações de antialiasing, dicas e rgba. Alternativamente, gnome-tweaks-46.1 também pode atualizar as configurações de fonte em um formato de GUI.

LXQt: Mude as configurações de fonte conforme necessário para corresponder ao Fontconfig em lxqt-config-appearance.

KDE Plasma: As configurações podem ser ajustadas em Configurações do Sistema sob Aparência -> Fontes ou em Editar -> Preferências do aplicativo individual.

Xfce desktop: As configurações podem ser ajustadas em Configurações -> Aparência -> Fontes. Especifique tuas fontes preferidas, por exemplo. 'Sans Regular' (para usar a face e espessura normais em vez de Negrito e (ou) Itálico) e ajuste o tamanho do ponto na opção. Revise as opções de renderização e DPI.

Firefox: Esse navegador te permite especificar as fontes padrão dele. Para a série 128esr use o menu 'Hamburger' para ir para Preferências, Geral e sob Fontes -> Avançado selecione Sans Serif, Serif ou Monospace conforme apropriado, se você desejar usar as fontes que correspondam ao Fontconfig. Configure os tamanhos dos pontos conforme desejado. Nas versões posteriores, as configurações estão em Preferências -> Fontes.

Libreoffice: Testes usando texto em inglês com uma antiga fonte japonesa (HanaMinA), que suporta vários idiomas europeus, mas tinha somente uma espessura e sem itálico ou inclinação, mostraram que, embora o Libreoffice use Fontconfig para encontrar a fonte, ele criou o próprio texto dele em negrito ou inclinado. Não está claro se fará o mesmo quando uma fonte realmente tiver espessura de negrito ou um estilo de itálico. Além disso, a documentação mostra que o Libreoffice tem as próprias regras dele de substituição para quando um ponto de código não é encontrado na fonte selecionada, mas não está claro se essas regras se aplicam no Linux usando Fontconfig.

Pango: conforme observado no exemplo ~/.config/fontconfig acima, qualquer coisa que use Pango-1.44 (a partir de 2019) ou posterior agora usa Harfbuzz para dicas, não FreeType, e hintfull não é suportado.

Thunderbird: As configurações de fonte podem ser mudadas indo-se para "Editar -> Configurações" e, a seguir, rolando para baixo até "Fontes & Cores".

Links Externos

Eu olhei fixamente para o "fontconfig" ...

As entradas do blog de Eevee são particularmente úteis se o Fontconfig não pensar que tua fonte escolhida suporta teu idioma e para preferir algumas fontes japonesas não MS quando uma fonte feia MS já estiver instalada.

subpixel-hinting

A documentação do interpretador FreeType v40 em documentos do freetype explica como o hinter atual funciona e por que o intérprete Infinality anterior (lento) foi substituído.

Calculando DPI

Uma resposta antiga em askubuntu fornece alguns detalhes acerca de como calcular pontos por polegada de uma tela, mas essencialmente você apenas mede a largura e a altura do painel visível, converte para polegadas se usar medidas métricas e divide pelo número de pixeis. Você pode então passar -dpi 90 ao iniciar o Xorg, usando teu próprio valor.

Tabela de espessuras CSS de fontes

Talvez mais que você gostaria de saber esteja em documentos CSS da Mozilla.

Aplicando dicas automáticas para uma fonte

Se você estiver usando dicas e tiver uma fonte TTF (não OTF) que carece de dicas, mas te permite bifurcá-la, você poderá aplicar dicas usando ttfautohint que é baseado no antigo autohinter. A partir da versão 1.8.4, ele falha para construir sem o Qt5.

"Fontconfig" no "wiki" do "Arch"

"Arch" tem muitas informações no "wiki" dela em "font_configuration".

"Fontconfig" no "wiki" do "Gentoo"

"Gentoo" tem algumas informações no "wiki" dela em "Fontconfig", embora muitos detalhes (o que habilitar e "Infinality") sejam específicos para "Gentoo".