L’ordine è quello perché TeX è come la bottega di un tipografo: prima il tipografo deve accertarsi di avere i caratteri che vuole mettere nel libro pronto e stampato (fontenc, nel PDF), e soltanto poi usa quelli (inputenc) per preparare le varie pagine. Ma un giorno te lo spiego meglio 😀 Enrico me l’ha spiegato per bene. Ti mando qualcosa.
Ciao
TommasoNon sarebbe meglio spiegarlo a tutti? 😆
Ciao
Gianni
Come promesso a Gianni, questo è il sunto di qualche scambio sulla faccenda con Enrico. In origine queste righe (qui con qualche piccolo rimaneggiamento) sono state preparate per essere inserite nell’Arte, ma a ragion veduta Lorenzo e io abbiamo deciso di non metterle, per via del taglio pratico della guida e del taglio troppo teorico di queste. Ad ogni modo, però, nell’Arte c’è scritta praticamente la stessa roba, anche se più condensata. Lorenzo ha ragione: l’ordine dei pacchetti c’entra con opzioni e istruzioni che l’uno passa all’altro. Quali, però, lo chiediamo ai guru. Tempo fa mi venne agli occhi un filone in cui Enrico dava a un utente l’ordine corretto dei pacchetti: intendo un ordine che superava il terzo pacchetto (babel) invocato qui. Se Enrico volesse rispiegarci qualcosa in merito, sarebbe cosa gradita 😀
Naturalmente questi argomenti potrebbero essere sondati più in profondità e trovare posto in un lavoro di più ampio respiro, che spiegasse chiaramente inputenc, fontenc, problemi di codifiche, comprendendo anche l’Introduzione a TeXworks.
Non sto chiedendo a nessuno di farlo, anche perché piacerebbe farlo a me (Ivan, ricordi? :D). Però rifletto: con l’avvento di XeTeX (che una volta sistemate le incompatibilità note, specie con la microtipografia e con biblatex, si candiderà davvero come alternativa prima e come possibile successore di LaTeX poi) non sarebbe piuttosto un dire e ridire cose che tra poco non serviranno più? fontspec e polyglossia sono almeno apparentemente più semplici da capire 😀
Mi piacerebbe sapere che ne pensate. Ecco qui, ad ogni modo: spero che sia quello che cerchi.
Come tutti i programmi, anche LaTeX non è perfetto e soffre di alcune limitazioni, due fra tutte. La prima è che un font non può avere più di 256 caratteri, e spesso nei documenti ne servono molti di più; la seconda risiede nella sillabazione: LaTeX non divide le parole che contengono accenti e caratteri particolari “espliciti” (cioè “costruiti” sovrapponendo un segno a una lettera semplice). Il programma, infatti, è stato ideato per comunicare in inglese, che com’è noto si scrive senza alcun accento, mentre la maggior parte delle altre lingue che usano l’alfabeto latino prevede nella scrittura una varietà di segni diacritici: accento, cediglia, tilde, umlaut, segni di alcune lingue slave, caratteri particolari delle lingue nordiche, eccetera.
Appena si cominciò a usare il calcolatore per scopi diversi dal “fare i conti”, fu evidente che i 95 caratteri stampabili del codice ASCII sufficienti appena per l’inglese non bastavano più per scrivere in altre lingue, tanto che tutti gli altri andavano composti “a mano” volta per volta. Per ottenere una à o una ö in stampa si dovevano scrivere perciò \’a oppure \”{o} nel sorgente, eccetera; alcune lingue richiedono procedure ben più laboriose. Il risultato è perfetto, ma a LaTeX non sempre piace. Ogni Paese cercò di risolversi la situazione “in casa”, in modo ovviamente incompatibile con tutti gli altri: era di fatto impossibile comunicare correttamente senza programmi di conversione.
La soluzione per aggirare i problemi dei caratteri “costruiti” viene dal pacchetto fontenc, che si comporta come una vecchia bottega di tipografia in cui i tipi per scrivere nelle varie lingue erano riposti negli scomparti di altrettante casse. La prima cosa da specificare dopo la dichiarazione di classe è appunto quale cassa di caratteri si intende usare per scrivere il documento: è la codifica di output, nel gergo di LaTeX, e va indicata nell’argomento facoltativo del pacchetto inputenc:
\documentclass[a4paper]{article}
\usepackage[]{fontenc} Per scrivere in italiano (e in altre lingue europee) si usa la
T1, che comprende caratteri accentati e particolari già disegnati e pronti per l’uso. Ci sono altre codifiche, come le varie T2 per scrivere in cirillico, la T3 per i caratteri fonetici dell’alfabeto IPA, la T4 per le lingue africane, la T5 per il vietnamita, la LGR per il greco, eccetera. Si ricorda che se un documento prevede parti in più lingue, si separeranno le relative
codifiche con una virgola, avendo cura di mettere per ultima quella
della lingua principale:\usepackage[T2A,T1]
per un documento scritto in italiano e russo, per esempio. Se fontenc non viene caricato, LaTeX usa la codifica interna OT1, di soli 128 caratteri, costruendosi tutti gli altri.
Si noti che T1 “funziona” perfettamente con tutte le moderne distribuzioni (TeX Live nelle sue incarnazioni e MiKTeX), ma potrebbe dare risultati non ottimali soltanto con MiKTeX Basic, perché quest’ultima non contiene dei font particolari che evitano possibili “sgranature” dei caratteri a schermo (è un altro buon motivo per non sceglierla, oltre al ristretto numero di pacchetti di cui è corredata).
Maggiori dettagli si possono trovare nel file encguide.pdf, consultabile per esempio con texdoc encguide.
Dopo aver scelto la cassa di caratteri, la seconda cosa da specificare sono le istruzioni affinché LaTeX possa “prendere” il carattere giusto nella cassa giusta. Queste costituiscono la codifica di input, nel gergo di LaTeX, che va indicata nell’argomento facoltativo del pacchetto inputenc:
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[]{inputenc} Per scrivere in italiano (e in altre lingue europee) si usa di solito la
latin1 , ma non è l’unica. In sostanza, inputenc indirizza LaTeX verso lo scomparto corretto di una sola cassa: infatti, a parità di input i due pacchetti presi singolarmente potrebbero visualizzare caratteri diversi (dipende dall’organizzazione interna di ciascuno). Ecco perché, pur essendo teoricamente indipendenti, le due codifiche devono essere in realtà compatibili.Si noti che, inglese a parte, la scrittura nelle diverse lingue richiede entrambi i pacchetti: con il solo inputenc il carattere accentato verrebbe costruito da LaTeX ogni volta (ma con i noti problemi di cesura), mentre il solo fontenc lo restituirebbe correttamente soltanto se presente nella cassa con cui è caricato. Se non si caricasse nessuno dei due, al posto di questi caratteri non verrebbe visualizzato nulla.
Con il passare degli anni, i programmi si sono adeguati alla torre di Babele erettasi nel frattempo, e oggi molti di essi non solo permettono di aprire un file in diverse codifiche, ma anche di decidere al momento di aprirlo quale codifica si voglia usare. Naturalmente occorre conoscerla in anticipo, altrimenti aprendo il file ci si troverà davanti a caratteri bizzarri. Questo accade perché la codifica con cui è impostato l’editor è diversa da quella data come opzione a inputenc nel documento. In queste situazioni, per non danneggiare il file è importante chiuderlo senza salvare e riaprirlo soltanto dopo aver reimpostato correttamente il programma. Se le due codifiche coincidono, invece, non ci sono problemi. Ogni editor gestisce le codifiche a modo proprio, e quelli più avanzati riescono anche ad adattarsi automaticamente a una qualunque di esse, per cui si raccomanda di leggerne con attenzione il manuale.
Una soluzione al problema viene dalle speciali righe di commento da scrivere in testa al file sorgente, che comunicano agli editor in grado di comprenderle (e solo a quelli) la codifica di input usata per scrivere il documento. La loro sintassi è spiegata da Enrico Gregorio nell’Introduzione a TeXworks. Qui si ricorda che essendo righe di commento sono “innocue” e molto utili allo stesso tempo: non creano problemi se l’editor usato non le comprende, e danno informazioni importanti a chi dovesse lavorare su un file ricevuto da terzi. Su questi problemi, si legga anche la parte relativa nell’Introduzione all’arte della composizione tipografica.
Da una ventina d’anni l’Unicode Consortium ha avviato un progetto per codificare tutti i possibili caratteri in uso nel mondo: il più noto di questi codici è l’UTF-8, che contiene un numero di segni (di alfabeti diversi ma disegnati in modo più o meno uniforme) enormemente superiore ai 256 caratteri di un font standard: si parla di alcune migliaia. La corrispondente opzione data a inputenc permette di usare questa gigantesca cassa in progressiva espansione, che si consiglia decisamente invece di latin1:
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}Se si dovessero usare caratteri non compresi neppure in utf8, si può ampliare il campo ulteriormente in questo modo:
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}ma si noti che il pacchetto ucs non è più mantenuto da tempo. Maggiori dettagli si possono trovare nel file inputenc.pdf, consultabile per esempio con texdoc inputenc.
Dopo aver caricato e impostato i pacchetti per le varie lingue, si può pensare alle scelte tipografiche, per le quali LaTeX dev’essere configurato almeno per produrre nella lingua scelta tutte le voci generate automaticamente e per sillabare correttamente le parole. A questo e ad altro pensa il pacchetto babel, come si sa.
Si osservino gli esempi seguenti e si provi a compilarli.
1. esempio con lettere accentate inserite dalla tastiera ma senza i due pacchetti descritti (tipico per un documento in inglese):
\documentclass{article}
\begin{document}
La pietà una virtù.
\end{document}2. esempio con lettere accentate costruite a mano ma senza i due pacchetti descritti:
\documentclass{article}
\begin{document}
La piet\`a \`e una virt\`u.
\end{document}3. esempio con caratteri particolari inseriti dalla tastiera con fontenc ma senza inputenc: si vede come un input possa produrre un risultato inaspettato:
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
Eugène Ysaÿe era amico
di Franz Strauß. Non credo.
\end{document}4. l’esempio precedente ma con in più inputenc: ora i caratteri sono al loro posto:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\begin{document}
Eugène Ysaÿe era amico
di Franz Strauß. Non credo.
\end{document}
Ciao
Tommaso