TeX e LaTeX.
La codifica del file di output

Dopo la trasformazione in ASCII e in comandi di tutti quei caratteri speciali inseriti in una codifica di input diversa dal semplice ASCII, TeX si ritrova a dover andare a pescare i simboli giusti da mettere nel file di output.

I glifi sono associati ad un numero, in gruppo di 128 o 256 simboli. Queste tabelle di associazione rappresentano la codifica dei font.

La codifica dei font standard è la OT1 (vedi). TeX non fa nient'altro che prendere la posizione ASCII del carattere inserito, oppure la posizione indicata da un certo comando e va a prendere il corrispondente numero nella precedente tabella. Per esempio se si digita la lettera "d" nel sorgente, TeX prende in input la sequenza di bit (01100100) corrispondente al numero 100 in base decimale, inoltre capisce che è stata inserita in modo testo. Per questo motivo TeX prima di tutto va a prendere la tabella di caratteri OT1, e poi va a stampare la posizione 100 della tabella OT1 fornita dal font corrente, che di default è il Computer Modern Roman.

Nel caso delle lettere accentate ad esempio la lettera à (inserite sia con \'a o direttamente cambiando la codifica di input) la cosa è più complicata. TeX sa che è in modo testo e perciò prende la tabella OT1, dopodiché prende la 18esima posizione corrispondente all'accento grave e la sovrappone con la posizione 97 corrispondente alla lettera a.

OT1 ovviamente non è l'unica codifica per i font, altrimenti potremmo usare solamente i 128 simboli in essa definiti. Altre tabelle con altri simboli li si incontrano usando la matematica. Queste sono le codifiche OML, OMS and OMX (le tabelle sono prese dall'Introduzione all'arte della composizione tipografica di Claudio Beccari). Ad esempio scrivendo $d$, TeX prende la codifica OML ed estrae il carattere alla 100esima posizione, che in questo caso è una d corsiva. Altri comandi ad esempio $\lceil$ fanno scattare un'altra codifica ancora, la OMS e dicono a LaTeX di prendere la posizione 100, in questo caso.

Altre tabelle le si incontrano quando si vogliono inserire caratteri speciali oppure quando non si usa più l'alfabeto latino, ma ad esempio, quello greco o cirillico. In questi casi le codifiche dei font standard non bastano più.

Qui interviene il pacchetto fontenc che permette di dire a LaTeX quali codifiche usare. È da notare comunque che alcune codifiche vengono attivate da pacchetti specifici, senza passare per fontenc. Nell'esempio seguente si usa la codifica OT2 e la OT1 (l'ultima inserita è quella di default). La OT2 contiene i caratteri cirillici. Questi caratteri non possono però essere scritti direttamente nel sorgente a meno di usare una codifica di caratteri opportuna con la relativa opzione di inputenc (o inputenx).

Se si usa il semplice ASCII o in generale una codifica di caratteri che non contiene i caratteri cirillici per inserirli si usa la cosiddetta traslitterazione. Ad esempio scrivendo una d nel sorgente e specificando che si vuole usare la codifica di font OT2, TeX prenderà sempre la 100esima posizione ma stavolta essa corrisponderà non più alla lettera d ma ad una particolare lettera cirillica.

\documentclass[a4paper]{article}
\usepackage[OT2,OT1]{fontenc}
\usepackage[ascii]{inputenx}
\begin{document}
To the d character is always assigned the number 100
and it matches the symbol d in the OT1 encoding
whereas it matches the symbol
{\fontencoding{OT2}\fontfamily{wncyr}\selectfont d}
in the OT2 encoding,
and finally it matches the symbol
{\fontencoding{OMS}\selectfont d}
in the OMS font encoding.
\end{document}

Per stampare qualsiasi simbolo usando il numero di codifica anziché il carattere ASCII corrispondente a quel numero, si può usare il comando symbol (\symbol{number}). Ad esempio \symbol{100} dato in modo testo di default produce il carattere d come ci aspettavamo.

Comunque nella codifica dei caratteri OT1, come abbiamo visto, le lettere accentate a altri simboli sono composti mettendo insieme diversi simboli della stessa codifica. Questo approccio ha due effetti negativi. Il primo è che i caratteri così composti non possono essere cercati nel pdf finale ed inoltre il meccanismo di sillabazione non riesce a sillabare correttamente le parole con accenti.

Per risolvere questo problema basterebbe disporre di tabelle più grandi in cui compaiono più di 128 caratteri. TeX è capace di gestire tabelle di codifica dei font fino a 256 posizioni (8 bit). Sono nate così le codifiche a 8bit, tra le quali la più famosa, la T1. Essa comprende tutti i simboli della OT1 con in più altri 128 simboli, lettere accentate, ecc... coprendo praticamente quasi tutti i bisogni di scrittura delle lingue latine.

Ovviamente il font usato deve poter mettere a disposizione queste tabelle. Purtroppo i font Computer Modern, essendo molto vecchi, forniscono solo i caratteri per le codifiche OT1, OT2, OMS, ecc... ma non per la T1. Quindi se si scrive nel preambolo che si vuole usare la codifica T1 (\usepackage[T1]{fontenc}) e non si specifica un'altra famiglia di font diversa da quella standard, TeX cerca di caricare di default la famiglia cm-super. I font possono essere realizzati in svariati modi, ad esempio nei formati OpenType, Type3, Type1, TTF, ecc... Il TeX classico può usare solo i Type1 (vettoriali) e Type3 (raster). I cm-super esistono sia come Type1 che come Type3 ma spesso la versione Type1 non è installata. Pertanto il documento non avrà dei bei font vettoriali. Per ovviare a questo problema o si installano i cm-super in versione Type1 oppure un altro set di font che supportino la codifica T1, come i Latin Modern (da usarsi come descritto sopra).

Quando si usa la codifica T1, il comando \'a non dirà più a TeX di sovrapporre l'accento grave con la lettere a bensì si comporterà come una lettera normale, dicendo a TeX di prendere la posizione 224 della tabella T1 del font usato.

Il pacchetto textcomp fornisce la possibilità di usare un'altra codifica ancora (la tabella è presente nei cm-super, nei latin modern, ed altri). La codifica fornita si chiama TS1.

Quando si dà un comando definito da textcomp, ad esempio \textdegree, (oppure ° con l'opportuna codifica di input), textcomp cambia la tabella di codifica dei font passando dalla attuale alla TS1, prende il simbolo 176 e rimette la codifica come stava prima. Un po' come {\fontencoding{TS1}\selectfont\symbol{176}}.