O que são codificações?

Vamos começar por definir dois conceitos, o caractere e o glifo. O caractere é a ideia abstrata do ‘átomo’ de uma linguagem ou outro diálogo: então, pode ser uma letra em uma linguagem alfabética, uma sílaba em uma linguagem silábica ou um ideograma em uma linguagem ideográfica. O glifo é a marca, criada na tela ou no papel, que representa um caractere. Claro, se a leitura deve ser possível, tem que haver alguma relação de concordância entre o glifo e o caractere, de forma que, enquanto a forma exata do glifo possa ser afetada por muitos outros fatores, como as capacidades do meio de escrita e o estilo do designer, a essência do caractere subjacente deve ser mantida. Sempre que um computador tem que representar caracteres, alguém tem que definir a relação entre um conjunto de números e os caracteres que eles representam. Esta é a essência de uma codificação: é um mapeamento entre um conjunto de números e um conjunto de coisas a serem representadas.

O TeX, obviamente, lida com caracteres codificados o tempo todo: os caracteres apresentados a ele em sua entrada estão codificados, e ele emite caracteres codificados em sua saída DVI ou PDF. Estas codificações possuem propriedades bastante diferentes.

O stream de entrada do TeX era muito rebelde nos dias em que Knuth implementou a linguagem pela primeira vez. O próprio Knuth preparou documentos em terminais que produziram todos os tipos de caracteres estranhos e, como resultado, o TeX contém algumas provisões para traduzir sua entrada (não importa como esteja codificada) para algo normal. Hoje em dia, o sistema operacional traduz toques nas teclas em um código apropriado para o idioma do usuário: a codificação utilizada é geralmente um padrão nacional ou internacional, embora alguns sistemas operacionais usem “páginas de código” (conforme definido pela Microsoft). Estes padrões e páginas de códigos geralmente contêm caracteres que podem não aparecer no stream de entrada do sistema TeX De alguma forma, esses caracteres devem ser tratados — de modo que um caractere de entrada como “é” precisa ser interpretado pelo TeX de uma forma que, pelo menos, imite a maneira como ele interpreta “\’e”.

O stream de saída do TeX está em uma situação um pouco diferente: os caracteres nele devem ser usados para selecionar glifos a partir das fontes a serem usadas. Assim, a codificação do stream de saída é como se fosse uma codificação de fonte (embora a fonte em questão possa ser uma Fonte virtual). Em princípio, uma boa parte do que aparece no stream de saída poderia ser uma transcrição direta do que chegou à entrada, mas o stream de saída também contém o resultado de comandos na entrada, e traduções da entrada, como ligaduras do tipo fi.

Codificação de fonte tornou-se um tema quente quando a codificação Cork apareceu por causa da possibilidade de supressão de comandos de \accent no stream de saída (e, portanto, melhoria da qualidade da hifenização do texto em idiomas flexionados, a qual é interrompida pelos comandos \accent — veja “Como a hifenização funciona”). Para tirar proveito dos caracteres acentuados representados nas fontes, é necessário arranjar para que sempre que a sequência “\’e” seja comandada (explicitamente ou implicitamente através do tipo de mapeamento de entrada mencionado acima), o caractere que codifica a colocação do glifo “é” seja usado.

Assim, poderíamos ter o estranho arranjo em que o caractere acentuado no stream de entrada do TeX é traduzido em comandos TeX que gerariam algo parecido com o caractere de entrada; esta sequência de comandos TeX é então traduzida no sentido contrário em um único glifo acentuado quando a saída é criada. Isso é precisamente o que os pacotes de LaTeX inputenc e fontenc fazem, se operados em conjunto com caracteres na codificação de entrada ISO Latin-1 e na codificação de fonte T1. À primeira vista, parece excêntrico ter o primeiro pacote fazendo uma coisa e o segundo fazendo exatamente o contrário, mas nem sempre acontece desse jeito: a maioria das codificações de fonte não combina tão bem com a codificação de entrada correspondente, e os dois pacotes fornecem o tipo de simetria que o sistema LaTeX precisa.


Do you have any question? Ask on: latex.net.br - we love qood questions!