Como construir "dígitos minúsculos" (ou seja, figuras de texto)?

12

Existe uma maneira aceita de ajustar glifos de fonte para simular figuras de texto ?

insira a descrição da imagem aqui

fundo

As figuras de texto são dígitos "minúsculos". Você normalmente usa dígitos em minúsculas, onde também usa texto em minúsculas (por exemplo, no meio de uma frase).

Os teclados nunca foram criados com dígitos maiúsculos e minúsculos; e o Unicode não os codifica especificamente, pois "eles não são considerados caracteres separados das figuras de revestimento, apenas uma maneira diferente de escrever os mesmos caracteres".

O que me leva à minha pergunta; qual é a maneira aceita de criar números minúsculos dos "maiúsculos" padrão de uma fonte?

A Wikipedia menciona que normalmente :

  • 012são de xaltura
  • 68 ter ascendentes
  • 34579 tem descendentes

insira a descrição da imagem aqui

Minha primeira tentativa (no photoshop) seria:

  • smush 012
  • cutucar 34579 para baixo
  • deixe 68 onde estão:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Mas as figuras esquecidas (0, 1, 2) parecem claramente desagradáveis.

Se o consórcio Unicode sugerir que "dígitos minúsculos" podem ser simplesmente construídos com caracteres "maiúsculos" - o que eles recomendam que eu faça?

Idealmente em HTML

Meu objetivo final é exibir texto em minúsculas em um navegador. Eu sei que algumas fontes (por exemplo, Geórgia) já exibem todos os seus dígitos em minúsculas:

insira a descrição da imagem aqui

Mas não estou perguntando como mudar para o uso da Geórgia ; Estou perguntando como construir figuras de revestimento a partir de figuras não-revestimento.

E como isso é para exibição na Web, eu percebo que provavelmente acabaria tendo que aplicar a formatação por caractere:

<!doctype html">
<html>
<head>
    <style type="text/css">
        body {
            font-family: "Segoe UI", "Calibri", sans-serif;
            font-size: larger;
        }

        .xheight {
            font-size: 1.5ex;
        }

        .descender {
            position: relative;
            bottom: -0.4ex;
        }
    </style>
</head>
<body>
    <p>In the year <span class="xheight">21</span><span class="descender">5</span><span>6</span> the Romulan war...
</body>
</html>

Renderizando como:

insira a descrição da imagem aqui

O que, novamente, não parece tão agradável quanto eu acho que deveria.

Ei, olha, um centavo!

insira a descrição da imagem aqui

Ian Boyd
fonte

Respostas:

11

A resposta muito curta é "Não".

Figuras antigas ("minúsculas") são desenhadas especificamente dessa maneira. As fontes Postscript e TrueType herdadas, na maioria das vezes, contêm apenas figuras tabulares, que são alinhadas ou antigas, de acordo com a maneira como a fonte é projetada.

O Unicode Consortium não está sugerindo que os números de revestimento possam ser distorcidos em números antigos, simplesmente que existe apenas um conjunto de valores Unicode para os dígitos de 0 a 9, independentemente de haver vários glifos para cada dígito.

Muitas fontes OpenType contêm figuras de alinhamento e de estilo antigo, nas larguras tabular e proporcional, sendo as figuras de alinhamento tabular o padrão usual. Todos estão disponíveis para aplicativos compatíveis com OpenType, geralmente por meio de uma configuração de preferência em um estilo de caractere ou parágrafo. Eles compartilham valores Unicode, mas são glifos alternativos desenhados separadamente que existem (ou não) como contornos no software da fonte. (Das famílias de fontes em seu CSS, o Calibri possui figuras antigas, mas a interface do Segoe não.)

Do ponto de vista tipográfico, além de não haver uma maneira aceita de fazer o que você pede, eu diria que também não há uma maneira aceitável . Como você descobriu, tentar chegar lá alterando as linhas de base e distorcendo as figuras de revestimento parece horrível.

Alan Gilbertson
fonte
Boa resposta, mas parece implorar a pergunta quando os navegadores serão totalmente compatíveis com o OpenType, a ponto de poder especificar em CSS qual estilo de números usar quando uma fonte contiver ambos.
e100
1
Também é importante ressaltar que não há como garantir que "Segoe UI", "Calibri" nem mesmo serifa seja a fonte real exibida. Os valores exatos da linha de base e da altura x usados ​​podem parecer ainda mais terríveis no Estilo Arbitrário Olde, que o usuário instalou.
Horatio
Qualquer visão sobre por que o Consórcio Unicode não codificar glifos separados para maiúsculas e minúsculas dígitos, mas fez codificar glifos separados para maiúsculas A( U+0041), minúsculas a( U+0061), e até mesmo cᴀᴘɪᴛᴀʟ sᴍᴀʟʟ ( U+1D00)? Ou seja, qual pode ser o raciocínio que exclui dígitos maiúsculos e minúsculos separados, mas inclui letras maiúsculas e minúsculas separadas?
22612 Ian Boyd
E, finalmente, você pode nomear uma fonte OpenType que contenha dígitos "maiúsculos" e "minúsculos" ?
22612 Ian Boyd
1
@IanBoyd: caracteres regulares em maiúsculas e minúsculas têm um significado distinto e, portanto, alternar entre eles é muito mais que uma escolha estilística. Os números em maiúsculas e minúsculas são idênticos em significado, e, portanto, simplesmente não são nada que o Unicode deseja codificar - pelo mesmo motivo que não há codificações específicas para itálico, letras maiúsculas, minúsculas e similares. Os caracteres de letras pequenas que você encontra são codificados apenas porque têm um significado distinto na fonética e não devem ser usados ​​para enfatizar (para isso, você deve usar os recursos do OpenType ou similares).
Wrzlprmft
5

A maneira correta de renderizar dígitos / números em minúsculas ou "figuras à moda antiga" é usar CSS para selecionar um recurso de fonte adequado. Obviamente, a fonte usada deve suportar esse recurso de fonte em primeiro lugar. O suporte do mundo real com as fachadas da web não parece ser muito forte.

A configuração CSS que você está procurando é

font-feature-settings: "onum";

e a documentação:

A documentação dos recursos do OpenType, onumem particular, pode ser encontrada no registro de tags OpenType Layout da Microsoft .

Documentação alternativa sobre recursos de fonte está disponível no artigo Como codificar recursos OpenType em CSS .

Oficialmente, você deveria usar

font-variant-numeric: oldstyle-nums;

mas o suporte a isso parece ser ainda mais fraco, de acordo com a referência de compatibilidade do navegador da Mozilla .

Em teoria, isso é melhor porque não se refere diretamente aos recursos do OpenType, portanto, também deve funcionar com fontes que não sejam do OpenType. Da mesma maneira que você deve usar:

font-variant: small-caps; 

para ativar letras minúsculas . Você não usar a colocação como recurso OpenType

font-feature-settings: "smcp";

para alcançar esse efeito porque a font-variantpropriedade já está bem suportada.

Mikko Rantalainen
fonte
Não, você nunca deseja usar, font-variant: small-caps;porque isso cria letras maiúsculas FAKE . Sempre use o outro e sempre use fontes OpenType. Simples e resolvido.
tchrist 24/02
De acordo com a definição ( w3.org/TR/CSS21/fonts.html#propdef-font-variant ), é acceptablese o small-capsrecurso está falsificado. Isso não é um requisito e o agente do usuário de alta qualidade faria a coisa certa (mapeie-o para o recurso OpenType). Concordo que, se você preferir não mudar, em vez de letras maiúsculas falsificadas, você deve usá-lo font-feature-settings. Normalmente, as letras minúsculas falsas são melhores do que não surtir efeito algum.
Mikko Rantalainen