Introduzione a X TE EX

Massimiliano Dominici

Sommario grafia digitale si chiamano Unicode e smart technologies. Unicode e smart font technologies rappresentano Unicode1 è l’implementazione ufficiale dello stan- l’attuale standard de facto nella tipografia digita- dard ISO/IEC 10646 per la codifica dei caratteri ap- le. Questo articolo mostra come è possibile, con partenenti ai sistemi di scrittura di tutto il mondo. X TE EX, integrarli in un sistema di composizione Ad ogni carattere “astratto”2 Unicode attribuisce tipografico basato su TEX. un codice numerico e un nome standard, evitando così il ricorso ad una pletora di codifiche parziali, Abstract spesso in conflitto l’una con l’altra (ad esempio “Windows cp1252” and “ISO/IEC 8859-1” che pre- Unicode and smart font technologies are the cur- tendono entrambe di rappresentare una codifica rent de facto standard in digital typography. This per “Latin 1”). Il suo uso facilita l’interscambio di article should explain how they can be incorpo- dati fra diverse applicazioni fornendo uno standard rated, with X TE EX, in a TEX-based typesetting condiviso per la codifica di ogni carattere. system. Gli smart font (“font intelligenti”), sono quei for- mati di font in grado di istruire l’applicazione che 1 Introduzione vi accede (e che è in grado di interpretarne le infor- mazioni) su come applicare al testo in entrata, in Per un sistema di composizione tipografica di alta maniera automatica, una serie di funzioni tipografi- qualità, quale è TEX, è necessario poter sfruttare che avanzate. Queste funzioni avanzate possono an- appieno quelle tecnologie che si sono affermate co- dare dalla semplice sostituzione di uno o più “glifi” me standard di fatto nel mondo della tipografia con legature o forme storiche, in maniera sensibile digitale. Nel corso della sua esistenza TEX ha di- al contesto oppure no, fino a complesse operazioni mostrato di sapersi adattare alle innovazioni che di posizionamento, tracciamento e riordino dei glifi di volta in volta si sono imposte nell’uso comune. rispetto a quelli che li precedono o seguono, ope- Nato in un contesto monolinguistico anglosassone razioni necessarie per visualizzare correttamente e pensato, quindi, per risolvere esigenze legate a alcuni sistemi di scrittura non occidentali. quel contesto; inizialmente in grado di ricevere so- I più comuni esempi di smart font technologies so- lo testo codificato a 7-bit (ASCII); munito di un no Apple Advanced Typograhy (AAT), sviluppato proprio formato particolare per il tracciamento dei da Apple, OpenType, sviluppato congiuntamente caratteri ( ); con il passare degli anni da Adobe e Microsoft, e Graphite, sviluppato da si è evoluto in modo da adattarsi ad un contesto SIL International. multilinguistico, accettare testo codificato a 8-bit Nonostante la tecnologia realizzata da Apple sia e usare quei formati di font (Type1 e TrueType) stata l’antesignana delle smart font technologies e divenuti di uso comune. rimanga tuttora superiore in alcuni settori, come Questo adattamento è avvenuto senza stravolge- quello dei complex scripts, il supporto di Adobe e re l’implementazione originaria; così, ad esempio, Microsoft, e alcuni innegabili fattori di superiorità l’uso di font Type1 e TrueType è possibile a come quello di poter immagazzinare indifferente- patto che le metriche di tali font siano state preven- mente i contorni dei glifi sia nel formato tipico dei tivamente trasformate nel formato comprensibile TrueType, che in quello, preferito dai tipografi da TEX(tfm, TEX Font Metrics), mentre la scelta professionali, dei Type13 hanno decretato il suc- della codifica del documento finale, o l’implemen- cesso del formato OpenType. A partire dal 1999, tazione di funzioni tipografiche avanzate (quali le con la decisione della stessa Adobe di convertire legature o i numeri “minuscoli”) è effettuata per l’intera propria collezione di font nel nuovo formato mezzo di “font virtuali” (vf, Virtual ). A OpenType, questo ha progressivamente soppian- livello di immissione del testo, i vari tipi di codifica sono gestiti traducendo l’input nel formato interno 1. http://www.unicode.org 2. E non alla sua “presentazione”: “A” e “a” sono due di TEX. caratteri distinti per Unicode; non così “A” e “A”: entrambi Questa filosofia, se ha garantito un adattamento rappresentano il carattere “U+0041 latin capital letter indolore e un alto grado di compatibilità all’indie- a”. tro, ha però i suoi limiti e le sue controindicazioni. 3. In realtà, i dati relativi al contorno dei glifi, nel caso di OpenType di tipo PostScript, sono contenuti nel formato Limiti e controindicazioni che sono più evidenti CFF (Compact Font Format), che è, in sostanza, una forma oggi che gli standard di fatto nel mondo della tipo- compressa del Type1.

15 ArsTEXnica Nº 5, Aprile 2008 Introduzione a X TE EX tato sia il Type1 che il TrueType, affermandosi Per maggiori dettagli su quanto verrà eaminato in come nuovo standard di fatto.4 questa sezione si può consultare Kew (2007). Sia l’uso di Unicode come codifica del testo in 2.1 Codifica del testo in ingresso ingresso, sia l’uso e l’inclusione di font OpenType o AAT è possibile con TEX, ma non in maniera X TE EX è stato progettato in modo tale da poter nativa. La codifica Unicode in ingresso deve essere interpretare un flusso di dati codificato indifferente- “tradotta” da appositi moduli (ne esistono per i mente in UTF-8 o UTF-16 (i due sistemi di codifi- principali sistemi di composizione basati su TEX: ca Unicode comunemente usati). Non è necessario, LATEX e ConTEXt), mentre l’accesso ai font deve quindi ricorrere a pacchetti, moduli aggiuntivi o co- essere effettuato tramite tfm e vf, rendendo mol- mandi particolari per compilare un testo espresso to complicata la loro installazione e perdendo per in questa codifica, a differenza di quanto avviene strada alcune caratteristiche (ad esempio l’unita- per LATEX, dove è necessario caricare un modulo rietà del font: TEX è costretto, dalla limitazione di inputenc o per ConTEXt, dove si deve passare al interna dei tfm ad un massimo di 256 caratteri, programma l’istruzione \enableregime[utf-8]. a considerare ogni font virtuale come un font se- Al contrario, bisogna segnalare a X TE EX se parato, anche se i singoli glifi sono immagazzinati è necessario tradurre in Unicode da una codifi- nello stesso contenitore). ca diversa. Le primitive \XeTeXinputencoding A questi inconvenienti si propone di porre rime- e \XeTeXdefaultencoding indicano a X TE EX di dio X TE EX, una reimplementazione di TEX svilup- operare questa traduzione, rispettivamente, per pata da Johnatan Kew, della SIL International, con un singolo file e per tutti i file che verranno lo scopo di facilitare la composizione di documenti letti durante la compilazione, e garantiscono co- in sistemi di scrittura non occidentali, e originaria- sì compatibilità con file preparati con sistemi mente disponibile solo per sistemi Macintosh.5 Le tradizionali. innovazioni che X TE EX introduce si concentrano È il caso di anticipare qui una caratteristica che essenzialmente su tre punti: a) supporto nativo logicamente dovrebbe apparire nella sezione 2.2, per Unicode; b) accesso diretto ai font installati in quanto si tratta di un’opzione che può esse- nel sistema operativo, senza l’intermediazione dei re specificata al momento della selezione di un tfm; c) capacità di interpretare direttamente le font. Tuttavia, trattandosi di un’opzione che ha istruzioni contenute nelle tabelle interne dei font effetto sul metodo di input, è bene esaminarla in AAT, OpenType o Graphite. Un effetto collatera- questa sezione. L’opzione in questione specifica co- le, dovuto al modo in cui vengono passate al driver me tradurre in codifica Unicode alcuni costrutti di stampa le informazioni relative ai font, è che particolari. In pratica viene usata generalmente non è più possibile produrre un output in dvi, ma (map=-text) per tradurre legature caratteristi- solo in pdf (vedi sezione 2.3). che dell’input TEX: “--” → “–”, “!‘” → “¡”, ecc. In questo modo l’uso, da parte dell’utente, di La traduzione viene fatta tramite un file .tec che nuovi font residenti nel sistema operativo viene reso è il risultato di una compilazione, a partire da un estremamente semplice, così come estremamente file ASCII .map, con TECKit, un programma svi- 6 semplice diventa l’accesso ad eventuali funzioni luppato da SIL International per creare, appunto, tipografiche avanzate presenti nel font stesso. tabelle di conversione da codifiche obsolete verso Unicode. Questo meccanismo può essere usato an- che per “effetti speciali”, come la traslitterazione 2 Nozioni di base in alfabeto latino di un testo in cirillico. In questa sezione verrà esposto, in linea di principio, 2.2 Accesso ai font il funzionamento di comandi di basso livello che l’utente di solito non ha bisogno di usare nei propri Per poter accedere ai font residenti nel sistema e documenti, ma il cui esame può essere utile per poter sfruttare le tabelle interne degli smart font, la primitiva \font ha dovuto essere reimplemen- comprendere il meccanismo con cui X TE EX opera. L’utente, viceversa, ha a disposizione, per atti- tata e la sua sintassi estesa in modo da accettare argomenti opzionali. vare le funzionalità avanzate di X TE EX, macro di alto livello, definite in appositi moduli, per quanto Mentre la sintassi originale di \font è essen- zialmente la seguente (si veda Knuth, 1984, p. riguarda LATEX, o all’interno del sistema stesso, per 276): quanto riguarda ConTEXt. Questi costrutti di alto livello saranno passati in rassegna nella sezione 3. \fonthcomandoi=hnome fontihdimensionii

4. Non tutti, però, condividono il giudizio entusiastico dove hdimensionii può indicare sia un corpo (co- largamente diffuso sui muovi smart font. Per un autorevole parere contrario, si veda lo “sfogo” di Luc Devroye in http: me in at 12pt) o un fattore di scala (come in //cg.scs.carleton.ca/~luc/opentyperant.html. scaled 500), nella nuova sintassi estesa è possibile 5. Attualmente esistono versioni sia per Linux che per Windows, incluse nelle maggiori distribuzioni come TEX 6. Il programma è disponibile, sotto forma di sorgenti Live e MiKTEX. compilabili, dall’archivio delle versioni di X TE EX.

16 Introduzione a X TE EX ArsTEXnica Nº 5, Aprile 2008 specificare una serie di opzioni relative alle caratte- lettere (‘tag’): all’utente basta quindi specificare ristiche generali di un font e a quali delle sue fun- uno di questi codici preceduto dal simbolo “+”, zioni tipografiche avanzate si vuole eventualmente se vuole attivare la funzione, o dal simbolo “-”, far ricorso: se vuole disattivarla. Gli OpenType prevedono anche due funzioni speciali: script e language, \fonthcomandoi=hnome fonti/hopzionii: tramite le quali è possibile selezionare il supporto hcaratteristiche avanzateihdimensionii per un sistema di scrittura o per una lingua par- ticolari. In questo caso è necessario far seguire al h i Innanzi tutto nome font accetta una sintassi nome della funzione il ‘tag’ relativo al sistema di leggermente diversa dall’omonimo argomento del scrittura o alla lingua che si desiderano attivare, comando tradizionale. Nelle sue prime implemen- con il consueto sistema “chiave = valore”. tazioni su sistemi Macintosh, X TE EX era in grado Poiché sia il hnome fonti che il nome delle fun- di accedere solo ai font installati nel sistema opera- zioni tipografiche avanzate in font AAT possono h i tivo. nome font doveva quindi specificare il nome contenere spazi bianchi al loro interno, è consi- del font, così come risulta al sistema operativo (ad gliabile racchiudere l’intera stringa rappresentante esempio: “Times Roman”). Nelle implementazioni h i 7 l’argomento di \font (tranne dimensioni ) tra successive, e solo nel caso in cui si usi xdvipdfmx apici doppi. per generare il pdf finale, la sintassi è stata estesa Per concludere, un paio di esempi serviranno per dar modo a X T X di accedere ai font ovun- E E a chiarire come è possibile usare questa sintassi que si trovino. Racchiudendo il nome del font tra estesa del comando \font. parentesi quadrate è possibile adesso indicare a 8 X TE EX di cercarlo all’interno della TDS, oppu- \font\hoefler="Hoefler Text/B:Letter Case% re, sempre all’interno delle parentesi quadrate, è =Small Caps" at 12pt possibile specificare l’indirizzo preciso del font. Tramite hopzionii è possibile specificare alcune Al comando \hoefler viene associata la selezio- caratteristiche generali del font: variante (/I; cor- ne del font “Hoefler Text”, installato nel sistema sivo, /B: neretto, ecc.), taglia ottica (/S=x, dove x operativo, nella variante “neretto”, con sostituzio- 9 indica il corpo), specifica smart font technology da ne del maiuscoletto alle lettere minuscole, in corpo utilizzare (/ATSUI per AAT, /ICU per OpenType 12.11 e /GR per Graphite).10 Ogni hopzionei, identificata da uno specifico ‘tag’, deve essere preceduta dal \font\juni="[/percorso/Junicode_Regular]% simbolo “/”. :script=latn:language=ISL:+hlig:+hist"% Per attivare (o disattivare) specifiche funzioni ti- at 11pt pografiche avanzate, l’utente può passare a X TE EX una lista di elementi preceduti dal simbolo “:”. La Il comando \juni seleziona il font “ sintassi dei singoli elementi dipende dal tipo di Regular” (non installato nel sistema operativo, né smart font technology implementata nel font. Nel nella TDS) in corpo 11, utilizzando il supporto caso di font AAT, ad ogni funzione avanzata viene specifico per l’alfabeto latino e la lingua islandese, assegnato un nome dallo sviluppatore, cosicché l’u- e attivando forme e legature storiche. tente dovrà specificare una coppia “chiave = valore” (per esempio: “Letter Case = Small Caps”). Nel ca- 2.3 Formato dell’output so di font OpenType, invece, le funzioni avanzate Il formato ultimo dei documenti compilati con sono identificate da codici convenzionali di quattro X TE EX è un pdf. Tuttavia X TE EX usa, nel corso 7. Si veda la sezione 2.3. del processo di compilazione, uno speciale formato 8. TEX Directory Structure, è l’insieme di cartelle in cui intermedio (xdv, “extended dvi”) allo scopo di 12 è distribuita un’installazione standard di TEX. trasmettere al driver di stampa le informazioni 9. Alcuni font sono distribuiti in versioni differenti per necessarie ad interpretare tutto ciò che riguarda specifiche gamme di corpi, in modo da evitare variazioni nel ‘colore’ della pagina (l’idea, ripresa dalla tipografia tradizio- le caratteristiche dei font da includere nel docu- nale, in cui un tipo di carattere ha un disegno leggermente mento finale. Questo formato, che non può essere diverso per ogni corpo, è stata sfruttata anche da Knuth nel interpretato dagli attuali visualizzatori di dvi, né disegnare il font ). Ciascuna di queste ver- correttamente disassemblato da programmi come sioni ha un suffisso proprio (ad esempio Caption o Subhead) ed è associata internamente ad una gamma di corpi. Le dvitype o dv2dt, viene successivamente “distilla- applicazioni in grado di avvalersi delle smart font technolo- to” nel pdf finale. Tutto ciò avviene in maniera gies, tra cui X TE EX, scelgono automaticamente la versione del tutto automatica e trasparente per l’utente, più appropriata per il corpo selezionato, cosicché non è che non deve compiere azioni aggiuntive; anzi, se necessario specificare tale opzione se non per sovrascrivere il comportamento di default. vuole disattivare, nelle compilazioni intermedie, la 10. Di solito non è necessario specificare quest’ultima generazione del pdf (che è la parte più dispendiosa opzione, in quanto X TE EX è in grado di riconoscere da sé il formato del font. Tuttavia, alcuni font possono contenere 11. L’esempio è tratto da Robertson (2007a). tabelle in più di un formato e l’utente può volerne attivare 12. Il termine “driver di stampa” non è forse del tutto uno in particolare, diverso da quello di default. corretto, in quanto l’output finale è un file.

17 ArsTEXnica Nº 5, Aprile 2008 Introduzione a X TE EX del processo, in termini di tempo), deve passare al \fontspec[ExternalLocation,\ LetterSpace=8,WordSpace=2,\ compilatore l’opzione --no-pdf. Color=AA4444]{texgyreschola-regular} X TE EX è in grado di usare due diversi driver di \begin{center} stampa, per ottenere il pdf finale. xdv2pdf è quello {\Large I PROMESSI SPOSI}\\[1ex] tradizionale, implementato nella versione originaria ALESSANDRO MANZONI \end{center} di X TE EX, ed è quello ancora abilitato di default su computer Macintosh. Ormai, però, le versioni I PROMESSI SPOSI per Linux e Windows utilizzano xdvipdfmx, una ALESSANDRO MANZONI versione appositamente estesa di dvipdfmx, che, a sua volta, era la reimplementazione di dvipdfm. Figura 1: Maiuscolo spaziato Tra i due driver ci sono alcune differenze, la più notevole è il supporto per i font non installati nel sistema operativo (vedi sezione 2.2), presente in che è l’istruzione da utilizzare in mezzo al docu- xdvipdfmx e assente in xdv2pdf. Lo stesso vale per mento, mentre gli altri tre comandi riguardano la la possibilità di interpretare gli \specials inseriti dichiarazione, nel preambolo, del font principale da PSTricks (vedi sezione 4.2.3). e del font senza grazie o a spaziatura fissa che eventualmente lo accompagnano. 3 Uso con LATEX e ConTEXt L’argomento hnome fonti può essere sia il nome interno del font (“Times Roman”, “Linux Liber- Per quanto l’uso di TEX nella sua versione più tine O”, ecc.), nel caso che questo sia installato “pura” (Plain TEX) sia ancora diffuso, tuttavia è nel sistema operativo, oppure il nome del file che certamente maggiore il numero di coloro che usa- contiene il font, se questo non è installato. In que- no TEX attraverso “macro pacchetti” come LATEX sto secondo caso, che come abbiamo visto nella e ConTEXt. Questi utenti sono abituati ad usare sezione 2.3 funziona solo se si usa xdvipdfmx co- un linguaggio di markup più astratto rispetto alle me driver di stampa pdf, è necessario specificare istruzioni di formattazione di basso livello tipiche tra le hopzionii ExternalLocation, eventualmen- di TEX. Per essi è poco conveniente dover ricorrere te seguito dal percorso, se il font non si trova nella ad espressioni come quelle esaminate nella sezio- TDS. ne 2.2, ogni volta che è necessario selezionare un Le hopzionii si dividono sostanzialmente in due determinato tipo di carattere o una sua specifica categorie: quelle che possono essere applicate a cia- caratteristica. Si aspettano che ciò possa essere fat- scun font indifferentemente (colore, spaziatura tra to per mezzo di dichiarazioni nel preambolo, per le lettere o tra le parole, ecc.) e quelle, invece, che istruzioni generali, o per mezzo di specifici comandi dipendono da ciò che si trova (o non si trova) nelle di markup da applicare a singole porzioni di testo. tabelle interne al font, nel caso questo disponga di Questa aspettativa è stata soddisfatta sotto forma funzioni tipografiche avanzate. Naturalmente non di specifiche estensioni (“pacchetti”) per quanto verranno qui esaminate tutte (si rimanda il lettore riguarda LATEX, o di nuove funzionalità aggiunte alla documentazione del pacchetto per un anali- 13 al nocciolo, per quanto riguarda ConTEXt. si dettagliata), ma verranno mostrati solo alcuni esempi che si ritengono significativi. 3.1 LATEX Nella figura 1 è possibile osservare un esempio 3.1.1 Fontspec di maiuscolo spaziato. Questa pratica, di uso co- La principale estensione che mette l’utente di mune quando si voglia rendere esteticamente più LATEX in grado di comporre i propri documenti gradevole l’aspetto di un titolo, non aveva, fino 14 con X TE EX è fontspec. Questo pacchetto, scritto a non molto tempo fa soluzioni realmente sod- da Will Robertson (Robertson, 2007b), mette disfacenti. Come si vede dal codice che precede a disposizione dell’utente una serie di istruzioni l’esempio, con fontspec è sufficiente passare ad per una coerente selezione dei font e delle funzioni uno dei comandi per la selezione dei font l’op- tipografiche avanzate ad essi associate. I comandi zione LetterSpace, impostata al valore x, dove principali definiti nel pacchetto sono: x rappresenta la dimensione dello spazio aggiun- to, in frazioni percentuali del corpo del font. Per \setmainfont[hopzionii]{hnome fonti} migliorare la resa visiva, è preferibile usare, conte- \setsansfont[hopzionii]{hnome fonti} stualmente, l’opzione WordSpace, che moltiplica lo \setmonofont[hopzionii]{hnome fonti} spazio normalmente inserito da TEX tra due paro- \fontspec[hopzionii]{hnome fonti} le per il valore fornito dall’utente (in questo caso ‘2’, raddoppiando quindi uno spazio normale). In Hanno tutti la medesima sintassi, per cui, nel realtà WordSpace accetta come valore una tripla seguito, gli esempi riguarderanno solo \fontspec, 14. Finché, cioè microtype non ha reso accessibili all’u- 13. Questo diverso tipo di approccio, modulare nel caso tente medio di LATEX le funzioni di microtipografia imple- di LATEX e monolitico nel caso di ConTEXt, rappresenta una mentate in pdftex. Il pacchetto soul forniva una soluzione delle differenze basilari tra i due programmi. limitata e poco robusta.

18 Introduzione a X TE EX ArsTEXnica Nº 5, Aprile 2008

PSALM LXVIII. , in fine. PSALM LXⅧ. , in fine. And unto God the Lord belong the issues of death (i.e. And unto God the Lord belong the issues of death (i.e. from death). from death). Buildings stand by the benefit of their foundations Buildings stand by the benefit of their foundations that sustain and support them, and of their buttresses that sustain and support them, and of their buttresses that comprehend and embrace them, and of their con- that comprehend and embrace them, and of their con- tignations that knit and unite them. The foundations tignations that knit and unite them. The foundations suffer them not to sink, the buttresses suffer them not to suffer them not to sink, the buttresses suffer them not to swerve, and the contignation and knitting suffers them swerve, and the contignation and kniing suffers them not to cleave. The body of our building is in the for- not to cleave. The body of our building is in the for- mer part of this verse. It is this: He that is our God is the mer part of this verse. It is this: He that is our God is the God of salvation; ad salutes, of salvations in the plural, so God of salvation; ad salutes, of salvations in the plural, so it is in the original; the God that gives us spiritual and it is in the original; the God that gⅳes us spiritual and temporal salvation too. temporal salvation too. (a) Numeri ‘oldstyle’ (b) Legature non comuni

PSALM LXVIII. , in fine. PSALM LXⅧ. , in fine. And unto God the Lord belong the issues of death (i.e. And unto God the Lord belong the iueſ of death (i.e. from death). from death). B       - Buildingſ ſtand by the benefit of their foundationſ      ,    that ſuſtain and ſupport them, and of their buttreeſ      , that comprehend and embrace them, and of their con-         tignationſ that knit and unite them. The foundationſ . T      , ſuffer them not to nk, the buttreeſ ſuffer them not to       ,  ſwerve, and the contignation and kniing ſufferſ them        not to cleave. The body of our building iſ in the former  . T        - part of thiſ verſe. It iſ thiſ: He that iſ our God iſ the God of     . I  : He that is our God ſalvation; ad ſaluteſ, of ſalvationſ in the plural, ſo it iſ in is the God of salvation; ad salutes,     the original; the God that gⅳeſ uſ iritual and temporal ,      ;  G   ſalvation too.      . (c) Forme storiche (d) Maiuscoletto

Figura 2: Funzioni tipografiche avanzate per il font Junicode di numeri, separati da virgola: i tre valori verranno Lining, Oldstyle, Monospaced e Proportional applicati, come fattore di scala, rispettivamente, al (‘normali’, ‘oldstyle’, a spaziatura fissa, a spazia- valore nominale dello spazio, al suo ‘allungamento’ tura variabile). Solo per font OpenType è possi- massimo (stretch) e al suo ‘accorciamento’ mas- bile specificare anche il valore SlashedZero, che simo (shrink). Specificare un solo valore significa sostituisce lo zero normale con uno zero barrato. assegnare lo stesso a ciascuno dei tre elementi della Nell’esempio seguente (figura 2b) sono state tripla. Abbiamo infine aggiunto un tocco di colore aggiunte alcune legature opzionali,16 aggiungen- (che nella versione stampata apparirà in una diver- do all’argomento opzionale di fontspec la stringa sa tonalità di grigio) con l’opzione Color, seguita Ligatures=Discretionary. Si può notare, infatti, da una tripla di valori RGB (ogni valore è formato che la forma di st, nella parola ‘stand’ di riga 4 è da due cifre espresse nel sistema esadecimale). È costituita da un’unico carattere. Se si esaminano possibile aggiungere anche un quarto valore per attentamente i quattro esempi, poi, ci si accorge indicare il grado di trasparenza. che il numero romano ‘LXVIII’ ha una forma di- Negli esempi seguenti (riassunti nella figura 215) versa, più compatta, negli esempi delle figure 2b verrà utilizzato il font Junicode per esaminare le e 2c: anche in questo caso si tratta, per l’appunto, opzioni relative alle funzioni tipografiche avanzate di una legatura. Non è qui il caso di riportare tutti contenute nelle tabelle OpenType. i possibili valori dell’opzione Ligatures; oltre ad Nell’esempio della figura 2a i numeri normali essere molti, infatti, variano anche a seconda che sono stati sostituiti da numeri ‘oldstyle’, trami- si abbia a che fare con un font AAT oppure Open- te l’opzione Numbers=Oldstyle. Numbers accetta Type. Si rimanda, quindi, per ulteriori dettagli, come valori possibili qualunque combinazione tra al manuale di fontspec già citato (Robertson,

15. Dove sono riprodotte le prime righe di Death’s Duel, 16. Legature comuni come fi, ecc. sono attivate auto- di John Donne, come appaiono nella versione E-Text di maticamente, ma possono eventualmente essere disattivate Project Gutenberg dell’originale Donne (1959). tramite l’opzione Ligatures=NoCommon.

19 ArsTEXnica Nº 5, Aprile 2008 Introduzione a X TE EX

2007b). rendere inutilizzabile l’accoppiata X TE EX+babel Nella figura 2c è stata aggiunta un’ulteriore fun- per ambiti linguistici quali il greco e l’ebraico. Ciò zione tipografica avanzata: alcuni caratteri sono avviene perché, nel momento in cui fu ideato e stati sostituiti con forme arcaiche degli stessi (in sviluppato, babel aveva bisogno di fare supposi- particolare è stata sostituita s con slong e tutte le zioni a proposito della codifica e dei font utilizza- sue legature). L’opzione da aggiungere, in questo ti, supposizioni che intralciano sostanzialmente il caso, è: Style=Historic. Anche in questo caso si funzionamento di X TE EX. rimanda al manuale di fontspec per informazioni Esistono dei modi per aggirare queste limita- più dettagliate, dal momento che l’opzione accet- zioni, ma tutti portano ad un uso subottima- ta un lungo elenco di valori predefiniti, diversi a le di babel. Ad esempio, se si vuole utilizzare seconda che il font incorpori la tecnologia AAT o il modulo di babel per il greco con X TE EX, è OpenType. possibile caricarlo come non predefinito (basta Infine, nell’esempio riportato nella figura 2d, che non appaia come ultimo nella lista dei mo- sono state sostituite le lettere dell’alfabeto mi- duli caricati) e usarne solo le funzionalità re- nuscolo con le rispettive forme del maiuscolet- lative alla corretta sillabazione, racchiudendo il to. È da notare che il testo in corsivo è rima- testo greco tra \begin{hyphenrules}{greek} e sto immutato: infatti la versione corsiva di Ju- \end{hyphenrules}. In questo modo, però, si per- nicode non possiede un maiuscoletto e di conse- dono, per esempio, tutti i nomi predefiniti per i vari guenza l’opzione è stata in questo caso ignora- elementi del testo (Capitolo, Figura, Bibliografia, ta.17 Letters=Smallcaps è quanto serve per atti- ecc.). vare la suddetta funzione. Altri possibili valori per Per ovviare a questo inconveniente è in via di Letters sono Uppercase, che trasforma tutto il sviluppo il pacchetto polyglossia, che dovrebbe co- testo in maiuscolo, Lowercase, che trasforma tut- stituire l’alternativa futura a babel per X TE EX e, to in minuscolo, e UppercaseSmallCaps che opera eventualmente, per gli altri sistemi di composizione nella direzione opposta a SmallCaps, trasforman- derivati da TEX e basati su Unicode (ad esempio do in maiuscoletto le maiuscole. I font AAT pos- LuaTEX). sono anche avere una funzione InitialCaps per Il pacchetto è ancora in una fase sperimentale e trasformare in maiuscolo tutte le lettere a inizio non si trova su ctan, ma è disponibile dall’archivio 18 parola. dei sorgenti di X TE EX. L’attuale versione sembra È possibile anche aggiungere o togliere deter- comunque funzionare già abbastanza bene. Non minate caratteristiche al font in uso al momen- esistendo una documentazione del pacchetto, biso- to, usando il comando \addfontfeature, il cui gna dedurre la sua interfaccia utente dagli esempi unico argomento accetta la stessa sintassi del- allegati. l’argomento opzionale di \fontspec. Inoltre, con Dopo aver caricato il pacchetto, i vari modu- \newfontfamilyhcomandoi[hopzionii]{hfonti}, o li vengono caricati nel preambolo con il coman- con \newfontface, che accetta la stessa sintassi, do \setdefaultlanguage, nel caso della lingua è possibile creare degli appositi comandi per la principale, o \setotherlanguage. Entrambi i co- selezione rapida e coerente di caratteri per contesti mandi, oltre all’argomento obbligatorio con il qua- specifici. le va indicata la lingua da attivare, specifican- Infine fontspec fornisce una serie di comandi done il modulo, prevedono anche un argomen- per definire nuove funzioni tipografiche avanza- to opzionale, sotto forma di una lista di elemen- te che non sono coperte dal pacchetto stesso, ti “chiave = valore”. Ad esempio tramite l’opzio- pur essendo presenti nel font. \newAATfeature, ne variant=ancient, passata al modulo greek, \newICUfeature e \newfontfeature servono, è possibile attivare il supporto per il greco an- appunto, a questo scopo. tico politonico. Ogni volta che si vorrà attivare, nel testo, una lingua differente da quella prede- 3.1.2 Polyglossia finita, basterà racchiudere il testo in questione X TE EX è stato ideato per lavorare con font Open- tra \begin{hlinguai} e \end{hlinguai}, oppure Type, AAT o Graphite, in codifica Unicode. Questi inserire l’istruzione \selectlanguage{hlinguai} font dispongono di solito di un insieme di caratteri Nelle figure 319 e 420 sono riportati due esempi che copre numerosi linguaggi e sistemi di scrittu- corredati del relativo codice. Nel preambolo sono ra. È quindi naturale considerarlo un programma state inserite le seguenti dichiarazioni: particolarmente adatto ad operare in un contesto multilinguistico. Peccato, quindi, che esistano pro- \usepackage{polyglossia} \setdefaultlanguage{italian} fondi conflitti tra X TE EX e il pacchetto babel, che è il pilastro portante del supporto multilinguistico 18. http://scripts.sil.org/svn-view/xetex/TRUNK/ per LATEX. Un conflitto profondo a tal punto da texmf/tex/xelatex/polyglossia/. 19. Il testo riproduce il primo capoverso delle Storie di 17. Ma di questa mancata applicazione rimane traccia Erodoto, come appare in Erodoto (2006). nel file di log, sotto forma di avviso da parte del pacchetto 20. Si tratta della prima strofa del poemetto di Vladimir fontspec. Majakovskij La nuvola in calzoni (Majakovskij, 1989).

20 Introduzione a X TE EX ArsTEXnica Nº 5, Aprile 2008

\fontspec{GFS Didot} \fontspec{ O} \begin{greek} \begin{russian} ῾Ηροδότου ῾Αλικαρνησσέος ἱστορίης ἀπόδεξις \begin{verse} ἥδε, ὡς μήτε τά γενόμενα ἐξ ἀνθρώπον τῷ χρόνῳ Вашу мыслб\\ ἐξίτηλα ψένται μήτε ἔργα μεγάλα τε καὶ мечтающую на размягченном мозгу,\\ θωυμαστὰ τὰ μὲν ῾´Ελλησι, τὰ δὲ βαρβάροισι как выжиревший лакей на засалеииой кушетке,\\ ἀποδεχθέντα ἀκλεᾶ γένται, τά τε ἄλλα καί δι' буду драэнить об окровавленный сердца лоскут;\\ ἥν αἰτίην ἐπολέμησαν ἀλλήλοισι. досыта изъиздеваюсьб нахальный и едкийю. \end{greek} \end{verse} \end{russian} ῾Ηροδότου ῾Αλικαρνησσέος ἱστορίης ἀπόδεξις ἥδε, ὡς μήτε τά γενόμενα ἐξ ἀνθρώπον τῷ χρό- Вашу мыслб νῳ ἐξίτηλα ψένται μήτε ἔργα μεγάλα τε καὶ θω- мечтающую на размягченном мозгу, υμαστὰ τὰ μὲν ῾´Ελλησι, τὰ δὲ βαρβάροισι ἀπο- как выжиревший лакей на засалеииой кушетке, δεχθέντα ἀκλεᾶ γένται, τά τε ἄλλα καί δι' ἥν буду драэнить об окровавленный сердца лоскут; αἰτίην ἐπολέμησαν ἀλλήλοισι. досыта изъиздеваюсьб нахальный и едкийю.

Figura 3: Greco antico Figura 4: Cirillico (russo)

\setotherlanguage{russian} del documento o relativamente a singole porzioni \setotherlanguage[variant=ancient]{greek} di esso. I font utilizzati sono, nel primo esempio, GFS 3.2 ConTEXt Didot e, nel secondo, LinuxLibertine. Il codice, invece, è composto in UM Typewriter. Gli utenti di ConTEXt non hanno bisogno di ri- correre a pacchetti aggiuntivi. Il supporto per le 3.1.3 Altri pacchetti funzionalità di X TE EX è incluso nel nocciolo del Oltre a fontspec e polyglossia esistono altri pacchet- programma. L’uso è semplice e ricalca la sintassi ti ‘minori’ dedicati a X TE EX. In genere si tratta o già vista per TEX puro, ovviamente adattata alle di pacchetti che l’utente non ha bisogno di caricare convenzioni in vigore in ConTEXt. direttamente ma che svolgono, ad esempio, com- Per usare le funzioni tipografiche avanzate di piti di supporto per quanto riguarda la codifica uno smart font una volta tanto, è sufficiente la (xunicode e euenc), oppure di pacchetti che offrono seguente istruzione: alcune funzionalità relative ad ambiti linguistici specifici (arabxetex, xgreek, xecyr). Gli unici due \definedfont["’Linux Libertine O’:% pacchetti che meritano qualche riga di descrizione, mapping=tex-text;+onum;+smcp"] in questa sede, sono xltxtra e philokalia. con la quale si comunica a ConTEXt di usare il font Il primo (Robertson, 2007c) comprende una Linux Libertine, installato nel sistema, nella forma serie di correzioni e di aggiunte al formato base “maiuscoletto”, corredato di numeri “oldstyle”. Si A di X LE TEX: incorpora, ad esempio, il pacchetto noti che è stata attivata anche l’opzione per tra- fixltx2e; ridefisce il logo di TEX e di alcuni pro- durre nei rispettivi codici Unicode i costrutti tipici grammi derivati (LAT X, X T X, X LAT X); ridefi- E E E E E di TEX (per esempio la legatura --, equivalente sce \textsuperscript e \textsubscript in mo- ad un trattino medio ‘–’) e che le varie opzioni do da usare automaticamente le cifre in apice e in possono essere separate da punto e virgola invece pedice fornite dal font; fornisce il comando \vfrac che da due punti. Nel caso che contenga degli spazi, per comporre frazioni all’interno del testo usando il nome del font deve essere racchiuso tra ulteriori le funzioni tipografiche avanzate del font; fornisce, apici. Questo non è necessario, come vedremo qui tramite \namedglyph{hnomeglifoi}, un’interfaccia sotto, nel caso di dichiarazioni globali. di alto livello alla primitiva di X TE EX che consente Il comando \definedfont è utile nel caso si di recuperare un carattere tramite il suo nome; in- debba ricorrere una sola volta ad una particolare fine ridefinisce il comando \showhyphens in modo istanza di un font. Se invece il font in questione che funzioni con X TE EX. deve essere impostato come carattere principale philokalia (Syropoulos, 2007), invece, accompa- del documento, in tutte le sue forme (normale, cor- gna l’omonimo font, riproduzione di un carattere sivo, maiuscoletto, ecc.) è necessario che le relative usato nella composizione di una serie di libri di de- dichiarazioni vengano organizzate in maniera coe- vozione, assemblati nel monastero del Monte Athos rente. ConT Xt adotta un approccio particolare 21 E in una collezione detta, appunto, ‘Philokalia’. Il che può essere considerato l’equivalente di un Font pacchetto, che si appoggia a fontspec, xunicode e Definition file per LATEX. Un possibile esempio di xltxtra, fornisce all’utente i comandi necessari ad tale organizzazione è il seguente: usare il font Philokalia come carattere principale

21. Si veda, per maggiori dettagli, http://orthodoxwiki. \starttypescript[serif][libertineos][uc] org/Philokalia.

21 ArsTEXnica Nº 5, Aprile 2008 Introduzione a X TE EX

\definefontsynonym[LibertineOS] che non c’è bisogno di un secondo livello di apici ["Linux Libertine O% attorno al nome del font, anche se questo contiene :mapping=tex-text:onum"] degli spazi. [encoding=uc] Questa interfaccia non è del tutto soddisfacente, \definefontsynonym[LibertineItalicOS] perché ancora troppo legata ad una sintassi di ["Linux Libertine O/I% basso livello, per quanto riguarda la specificazione :mapping=tex-text:+onum"] delle funzioni tipografiche avanzate da attivare. 22 [encoding=uc] Non a caso, nelle ultime versioni di ConTEXt \definefontsynonym[LibertineBoldOS] (successive alla pubblicazione di TEX Live 2007), ["Linux Libertine O/B% è stata sviluppata una nuova interfaccia, ancora :mapping=tex-text:+onum"] sperimentale, in grado di trattare ad un livello più [encoding=uc] astratto anche le funzioni tipografiche avanzate. Il \definefontsynonym[LibertineBoldItalicOS] seguente codice ["Linux Libertine O/BI% :mapping=tex-text:+onum"] \definefontfeature[OSC] [encoding=uc] [onum=yes,smcp=yes] \definefontsynonym[LibertineSCOS] \definefontsynonim[Libertine] ["Linux Libertine O% [Linux Libertine O] :mapping=tex-text:+smcp:+onum"] [feature=OSC] [encoding=uc] definisce il font Libertine, che potrà essere ri- chiamato in qualsiasi punto del testo tramite il \stoptypescript comando \definedfont, e gli applica l’insieme di funzioni tipografiche avanzate definite dal nome \starttypescript[serif][libertineos][name] simbolico OSC. A questo nome sono state in prece- denza, tramite il comando \definefontfeature, \definefontsynonym[Serif] associate le funzioni “maiuscoletto” (smcp) e “nu- [LibertineOS] meri oldstyle” (onum). Un discorso simile vale anche \definefontsynonym[SerifBold] per le definizioni globali. [LibertineBoldOS] Per concludere facciamo presente che per usare \definefontsynonym[SerifItalic] X T X insieme a ConT Xt il file sorgente deve [LibertineItalicOS] E E E essere compilato passando all’eseguibile texexec \definefontsynonym[SerifBoldItalic] l’opzione --xtx. [LibertineBoldItalicOS] \definefontsynonym[SerifSlanted] [LibertineItalicOS] 4 Formule e grafica \definefontsynonym[SerifBoldSlanted] 4.1 Formule [LibertineBoldItalicOS] \definefontsynonym[SerifCaps] Dal momento che X TE EX è in grado di usare anche [LibertineSCOS] i tradizionali font in versione tfm, le formule pos- sono essere composte senza problemi usando pac- \stoptypescript chetti e costrutti tradizionali. Tuttavia cominciano ad essere disponibili font matematici in formato \starttypescript [LinuxLibertineO][uc] OpenType: Microsoft distribuisce Cambria Math insieme al proprio sistema operativo, su ctan si 23 \definetypeface[LinuxLibertine][rm][serif] trova Asana Math, e i font STIX , che dovrebbero [libertineos][default][encoding=uc] diventare lo standard per le pubblicazioni scien- tifiche, sono appena usciti dalla fase beta dello \stoptypescript sviluppo e, a breve, ne dovrebbe essere disponibile la prima versione stabile. \usetypescript[LinuxLibertineO][uc] Per poter sfruttare questi nuovi font, e per poter \setupbodyfont[LinuxLibertine,10pt] usare un input in formato Unicode anche per le parti matematiche del testo, è necessario il pac- Nella prima parte si trova la mappatura tra il chetto unicode-math, per LATEX. Questo pacchetto, livello “fisico” (il font “reale”) e un primo livello ancora sperimentale e perciò reperibile solo dall’ar- astratto. Le mappature seguenti aumentano il livel- chivio delle versioni di X TE EX e non su ctan, è lo di astrazione, fino a giungere al nome simbolico composto da un file di stile, due file che mappano i (LinuxLibertine) che verrà usato nel documento simboli in codifica Unicode nella rappresentazione per identificare la collezione di font usata per il 22. Le informazioni che seguono sono tratte da Hagen testo principale. Si può notare, dal codice ripor- (2007). tato sopra, che la codifica usata è Unicode (uc) e 23. http://www.stixfonts.org.

22 Introduzione a X TE EX ArsTEXnica Nº 5, Aprile 2008

∫ ∫ 1 1 x+t 1 1 x+t ( ) = [ ( − ) + ( + )] + ( ) u(t, x) = [f(x − t) + f(x + t)] + g(s) ds. u t, x f x t f x t g s d s. 2 2 2 2 x−t x−t   j  m j k ∂ m u = f (t, x, u,∂ u,∂ u,...,∂ ∂ k u,...) ∂t u = f(t, x, u, ∂tu, ∂xu, . . . , ∂t ∂x u, . . .)  t t x t x P ≤ ≤ − ≤ (P ) 0 ≤ j ≤ m − 1, j + k ≤ m, ( )  0 j m 1, j + k m,   j ∂ j ( ) = ( ) ∂t u(0, x) = uj(x). t u 0, x uj x . (a) Computer Modern (b) Math Design

1 1 푥+푡 1 1 푥+푡 푢(푡, 푥) = ○푓(푥 − 푡) + 푓(푥 + 푡)￱ + ル 푔(푠) 푑푠. 푢(푡, 푥) = ○푓 (푥 − 푡) + 푓 (푥 + 푡)￱ + ル 푔(푠) 푑푠. 2 2 푥−푡 2 2 푥−푡

⎧ 푚 푗 푘 ⎧ 푚 푗 푘 ⎪휕푡 푢 = 푓(푡, 푥, 푢, 휕푡푢, 휕푥푢, ... , 휕푡휕푥푢, ...) ⎪휕 푢 = 푓 (푡, 푥, 푢, 휕푡푢, 휕푥푢,..., 휕 휕 푢,...) ⎪ ⎪ 푡 푡 푥 (풫)⎨ 0 ≤ 푗 ≤ 푚 − 1, 푗 + 푘 ≤ 푚, (풫)⎨ 0 ≤ 푗 ≤ 푚 − 1, 푗 + 푘 ≤ 푚, ⎪ 푗 ⎪ ⎪휕 푢(0, 푥) = 푢 (푥). ⎪휕푗푢(0, 푥) = 푢 (푥). ⎩ 푡 푗 ⎩ 푡 푗 (c) Asana Math (d) Asana Math colorato

Figura 5: Formule composte con X TE EX. interna di LATEX, e una serie di mappe compilate 4.2 Grafica con TECKit. 4.2.1 Inclusione di illustrazioni esterne All’utente viene fornito il comando \setmathfont con il quale è possibile sce- X TE EX supporta l’inclusione di illustrazioni pro- gliere il font per le formule e applicargli una serie dotte con programmi esterni, nei formati ricono- di opzioni. Queste opzioni possono essere applicate sciuti dal driver di stampa in uso. Vi sarà, quindi, anche solo ad una determinata serie di caratteri, differenza, a seconda che venga usato xdv2pdf o individuata per mezzo di codici Unicode, nomi xdvipdfmx. Il primo, che funziona, come si è detto, solo su sistemi Macintosh, si appoggia alle librerie LATEX, o nomi collettivi predefiniti (ad esempio \mathopen indica tutti i delimitatori di sinistra). di QuickTime ed è, dunque, in grado di operare Nella figura 5 sono riportati quattro esempi ri- l’inclusione di una gamma piuttosto estesa di for- mati, che vanno dal Bitmap al tiff, dall’eps al guardanti la composizione di formule con X TE EX, 24 usando il pacchetto amsmath. Nei primi due so- pdf, passando per pict, tga, ecc. xdvipdfmx, no stati usati font tradizionali, in particolare per invece, è in grado di includere nel documento gli l’esempio 5b è stato usato il pacchetto mathdesi- stessi formati supportati da dvipdfm: png, jpeg, gn con l’opzione garamond. Negli ultimi esempi il pdf, eps. font usato è Asana Math, ed è stato caricato nel Per effettuare l’inclusione, l’utente può avvaler- preambolo il pacchetto unicode-math. Per ottenere si, in maniera del tutto trasparente, dei comandi A la colorazione dell’esempio 5d (in tonalità di gri- usuali: quelli definiti da graphicx se usa LTEX, gio, nella versione a stampa), è stato impiegato il o quelli forniti di base da ConTEXt, nel caso usi seguente codice: quest’ultimo programma. 4.2.2 pgf \setmathfont[Range=ALL]{Asana Math} Dalla fine del 2007 la libreria di utilità grafiche \setmathfont[Range={\mathopen,\mathclose},% pgf, e quindi i programmi costruiti a partire da es- Color=FF0000]{Asana Math} sa, come Tikz, includono il file pgfsys-xetex.def \setmathfont[Range={\mathop},% che fornisce il supporto per il driver xdvipdfmx. Color=0000FF]{Asana Math} A patto, quindi, di compilare con questo driver \setmathfont[Range={\mathbin,\equal},% di stampa, è possibile inserire nel proprio docu- Color=00FF00]{Asana Math} mento grafici espressi nel linguaggio proprio di pgf. Tuttavia, non tutte le funzionalità avanzate sono Va notato che la selezione di opzioni per diverse al momento disponibili. Non è possibile, ad esem- gamme definite di simboli rallenta notevolmente il pio, riempire un’area dell’illustrazione con motivi processo, fino al punto, nel caso si cerchi di appli- carle a \mathalpha, di dover abortire il processo 24. È bene ricordare, però, che per l’inclusione di im- stesso (quest’ultima notazione, ovviamente, è vera magini in formato pdf, è preferibile usare la primitiva relativamente al computer su cui sono state ef- \XeTeXpdffile, piuttosto che \XeTeXpictfile, se si vuo- le che venga preservato il carattere vettoriale dell’immagine fettuate le prove, equipaggiato con un processore stessa, nel caso, ovviamente, che si stia usando xdv2pdf Athlon XP 1600+ e 512Mb di memoria RAM). come driver di stampa.

23 ArsTEXnica Nº 5, Aprile 2008 Introduzione a X TE EX

. .A .B .C .D .E .F .G . . . . . . . . .H .I .K .L .M .N .O . . . . . . . . .P .Q .R .S .T .V .W . . . . . . . . .X .Y .Z .Æ .J .U .Œ . . . . . . .

. . . . . . . .¶ .§ .â .ê .î .ô .û . . . . . .ſ . .ffi .à .è .ì .ò .ù .† .‡

.ä .ë .ï .ö .ü .ſt .k .á .é .í .ó .ú . .* . . . .[] .æ .œ .ç .` ' .s .() .? .! .; . .fl .& .e .ff . . .b .c .d .i .s .f .g . .ffl . .fi .j . .l .m .n .h .o .y .p .q .w .em .en .st . .z ., .: .v .u .t .space .a .r .quad . .x . .- .

Figura 7: Esempio di grafico con pstricks Figura 6: Una cassetta di caratteri disegnata con Tikz.

Per quanto questo progetto sia ancora in fase di ripetuti (tassellatura), né applicare ad un’immagi- sviluppo, i risultati sono già buoni, come si può ne esterna una maschera di trasparenza selettiva. vedere nella figura 7. pgf, infatti, pur mirando ad essere perfettamente portabile da un compilatore all’altro, dipende, per l’effettivo grado di supporto delle singole operazio- 5 Conclusioni ni, dai diversi driver di stampa, ed è ottimizzato Questo articolo mostra come X TE EX sia ormai un per funzionare con pdftex. Tutti gli altri driver, prodotto maturo, disponibile su tutte le piattafor- in misura maggiore o minore, mancano invece di me e utilizzabile insieme ai principali “dialetti” di qualche funzionalità. TEX (Plain TEX, LATEX, ConTEXt). Non è ancora Nella figura 6 è visibile il risultato di un grafico esente da imperfezioni: deve migliorare il supporto prodotto con tikzpicture e compilato con X TE EX. per alcune funzioni tipografiche avanzate imple- mentate dalle smart font technologies, ha bisogno 4.2.3 PSTricks di un sostituto per babel (polyglossia è il promet- PSTricks è, probabilmente, il sistema grafico più tente candidato), deve migliorare la gestione dei utilizzato in combinazione con LATEX. La possi- font matematici in codifica Unicode e il supporto bilità di inserire nel file dvi frammenti di codice per sistemi di applicazioni grafiche come PSTricks PostScript che dovranno poi essere interpretati e pgf. dai vari driver di stampa, lo rende uno dei più po- Malgrado queste piccole imperfezioni, la facili- tenti e flessibili strumenti per la grafica nel mondo tà d’uso che introduce in un settore, quello della di TEX. Non è sorprendente, perciò, che si stia cer- gestione dei caratteri da stampa, tradizionalmente cando di rendere PSTricks compatibile con X TE EX. tra i più complicati e ostici, nel mondo TEX, lo Anche in questo caso il supporto viene fornito per rende uno strumento utile e, in alcuni casi, come xdvipdfmx. Dall’archivio delle versioni di X TE EX è la composizione di documenti contenenti sistemi possibile scaricare il file xetex-pstricks.con che, di scrittura non occidentali, addirittura quasi in- una volta rinominato pstricks.con e copiato in dispensabile. Essendo un programma in fase di una cartella dove pstricks può trovarlo, configura attivo sviluppo e con una base di utilizzatori nu- quest’ultimo in modo da usare xdvipdfmx come mericamente non indifferente, possiamo tranquilla- driver di stampa.25 mente aspettarci ulteriori miglioramenti nel futuro Nel concreto, l’interpretazione del codice prossimo. PostScript inserito nell’xdv viene fatta per mez- Per concludere, vorrei aggiungere una nota finale zo di , di cui si consiglia di installare sui font. Per quanto l’utilità di X TE EX si dimostri una versione recente, se si vuole che vengano sup- anche soltanto nel caso in cui si voglia usare un portate operazioni di carattere avanzato, come, ad font senza bisogno di doverlo installare nel sistema esempio, effetti di trasparenza. TEX, il programma dà il meglio di sé quando si trova a gestire degli smart font. Questi font, che 25. Alternativamente, è possibile usare xdvipdfmx.con, siano AAT, OpenType o Graphite, si trovano oggi facente parte della distribuzione base di PSTricks, che però appare leggermente indietro nello sviluppo, rispetto al suo con facilità. Senza voler citare font commerciali, omologo distribuito da X TE EX. distribuiti da Adobe, Monotype, Linotype, e da

24 Introduzione a X TE EX ArsTEXnica Nº 5, Aprile 2008 quasi tutte le altre case, grandi, medie o piccole Donne, J. (1959). Devotions Upon Emergent Oc- che siano, la cui qualità è certamente garantita, è casions Together with Death’s Duel. Ann Arbor possibile ormai reperire smart font di buona qua- Paperbacks, University of Michigan Press. La lità anche nel circuito del software libero. Molti versione utilizzata è quella fornita da Project dei font prodotti da e-foundry per TEX (Latin Mo- Gutenberg: http://www.gutenberg.org/2/3/ dern, la collezione TEX Gyre, Antykwa Toruńska, 7/7/23772/. Iwona) sono disponibili anche in formato Open- Type ed è possibile scaricarli sia da ctan che Erodoto (2006). Le storie. UTET. A cura di dal sito dalla e-foundry.26 Ancora disponibili su Aristide Colonna e Fiorenza Bevilacqua. Con ctan sono UM Typewriter, un font a spaziatura testo a fronte. fissa codificato Unicode, e Asana-Math, font mate- Hagen, H. (2007). «ConTEXt MKII & MKIV.» Di- matico anch’esso in codifica Unicode, entrambi di sponibile all’indirizzo http://www.pragma-ade. Apostolos Syropoulos. com/general/manuals/mk.pdf. 27 Per uscire dal mondo TEX, Junicode, font per medievalisti e non solo, e Linux Libertine,28 sono Hosken, M., Hallissy, B., Cleveland, W., tra i più completi e ben fatti, rilasciati sotto i ter- Correll, S. e Ward, A. (2007). Graphite mini della licenza GNU GPL. Accanto a questi, Language Description. SIL Non-Roman Scrip- vanno ricordati i font prodotti da SIL International ts Initiative (NRSI). La versione elettronica con licenza OFL, in particolare , Doulos in formato pdf è disponibile all’indirizzo http: e Charis, corredati di tabelle sia OpenType che //scripts.sil.org/cms/scripts/page.php? Graphite; e quelli della Greek Font Society,29 an- site_id=nrsi&cat_id=RenderingGraphite. ch’essi con licenza OFL, soprattutto GFS Bodoni Kew, J. (2002). TECkit version 2.0. A Text Enco- e GFS Didot, che contengono, oltre ai caratteri ding Conversion toolkit. SIL Non-Roman Scrip- dell’alfabeto greco, anche l’alfabeto latino. ts Initiative (NRSI). La versione elettronica Né, infine, sono da dimenticare Old Standard, in formato pdf è disponibile all’indirizzo http: 30 di Aleksej Kryukov, e i font dedicati a sistemi di //scripts.sil.org/cms/scripts/page.php? 31 scrittura antichi prodotti da George Douros tra site_id=nrsi&item_id=TECkitDownloads. cui il bellissimo Alexander, il cui alfabeto greco è ricalcato su quello disegnato da Alexander Wil- — (2005). «X TE EX the Multilingual Lion: TEX son nel xviii secolo, purtroppo disponibile solo in meets Unicode and smart font technologies». versione corsiva. TUGboat, 26 (2), pp. 115–124. — (2007). «About X TE EX». Disponibile al- 6 Ringraziamenti l’indirizzo http://scripts.sil.org/xetex/ XeTeX-notes.pdf. Questo articolo non sarebbe mai stato scritto, se non mi fosse stato, praticamente, “commissionato” — (2008). «X TE EX Live». TUGboat, 29 (1), pp. da Lapo F. Mori, a cui vanno, quindi, per primo i 146–150. miei ringraziamenti. Desidero inoltre ringraziare l’anonimo recenso- Knuth, D. E. (1984). The TEXbook. Addison-Wes- re dell’articolo per avermi indicato i punti in cui ley, Reading, MA, USA. poteva essere migliorato, e per avermi aiutato a ret- Majakovskij, V. (1989). La nuvola in calzoni. tificare alcune inesattezze riguardo alla relazione Marsilio. A cura di Remo Faccani. Con testo a tra Unicode e lo standard ISO/IEC 10646. fronte.

Riferimenti bibliografici Microsoft Corporation (2004). «OpenType specification». http://www.microsoft.com/ Apple Computer (2002). TrueType Referen- typography/otspec/default.htm. ce Manual, Apple Computer, capitolo 6: Font Robertson, W. (2005). «Advanced font features files. http://developer.apple.com/fonts/ with X T X – the fontspec package». TUGboat, TTRefMan/RM06/Chap6AATIntro.html. E E 26 (3), pp. 215–223.

Beeton, B., Freytag, A. e Sargent III, M. — (2007a). «The X TE EX reference guide». (2007). «Unicode support for mathematics». Disponibile su ctan, all’indirizzo http:// http://www.unicode.org/reports/tr25/. www.ctan.org/tex-archive/info/xetexref/ XeTeX-reference.pdf. 26. http://www.gust.org.pl/projects/e-foundry/. 27. http://junicode.sourceforge.net. — (2007b). «The fontspec package.» Di- 28. http://linuxlibertine.sourceforge.net. sponibile su ctan, all’indirizzo http : / / 29. http://www.greekfontsociety.gr/. 30. http://www.thessalonica.org.ru/en/fonts.html. www.ctan.org/tex-archive/macros/xetex/ 31. http://users.telar.gr/~g1951d/downloads. latex/fontspec.pdf.

25 ArsTEXnica Nº 5, Aprile 2008 Introduzione a X TE EX

— (2007c). «The xltxtra package.» Disponibile ge.» Disponibile su ctan, all’indirizzo http:// su ctan, all’indirizzo http://www.ctan.org/ www.ctan.org/tex-archive/macros/xetex/ tex-archive/macros/xetex/latex/xltxtra. latex/philokalia.pdf. pdf. Unicode Consortium (2007). The Unicode stan- — (2008). «Experimental unicode mathemati- dard, Version 5.0. Addison-Wesley, Boston, cal typesetting: The unicode-math package». MA. http : / / scripts . sil . org / svn-public / xetex / TRUNK / texmf / source / xelatex / unicode-math/unicode-math.pdf. . Massimiliano Dominici Syropoulos, A. (2007). «The philokalia packa- [email protected]

26