Numero 5 Aprile 2008 ArsT Xnica E A Rivista italiana di TEX e LTEX

guIt http://www.guit.sssup.it/arstexnica articoli potranno essere inviati in qualsiasi momen- to e troveranno collocazione, eventualmente, nei nica numeri seguenti. X Chiunque, poi, volesse collaborare con la rivi- E sta a qualsiasi titolo (recensore, revisore di boz- T ze, grafico, etc.) può contattare la redazione A all’indirizzo: [email protected]. guIt – Gruppo Utilizzatori Italiani di TEX rs Nota sul Copyright ArsTEXnica è la pubblicazione ufficiale del guIt Il presente documento e il suo contenuto è di- Comitato di Redazione stribuito con licenza CC Creative Commons 2.0

Gianluca Pignalberi – Direttore di tipo “Non commerciale, non opere derivate”. Claudio Beccari È possibile, riprodurre, distribuire, comunicare al Fabiano Busdraghi pubblico, esporre al pubblico, rappresentare, ese- Riccardo Campana guire o recitare il presente documento alle seguenti Massimo Caschili condizioni: Gustavo Cevolani BY: Attribuzione: devi riconoscere il contribu- Massimiliano Dominici Andrea Fedeli to dell’autore originario. Enrico Gregorio $ Non commerciale: non puoi usare \ Lapo Mori quest’opera per scopi commerciali. Ottavio Rizzo = Non opere derivate: non puoi alterare, Emiliano Vavassori Emanuele Vicentini trasformare o sviluppare quest’opera. Raffaele Vitolo In occasione di ogni atto di riutilizzazione o Emanuele Zannarini distribuzione, devi chiarire agli altri i termini della licenza di quest’opera; se ottieni il permesso dal A nica rsTEX è la prima rivista italiana dedicata a titolare del diritto d’autore, è possibile rinunciare TEX, a LATEX ed alla tipografia digitale. Lo scopo ad ognuna di queste condizioni. che la rivista si prefigge è quello di diventare uno Per maggiori informazioni: dei principali canali italiani di diffusione di infor- mazioni e conoscenze sul programma ideato quasi http://wwww.creativecommons.com trent’anni fa da . Le uscite avranno, almeno inizialmente, caden- Associarsi a guIt za semestrale e verranno pubblicate nei mesi di Fornire il tuo contributo a quest’iniziativa come Aprile e Ottobre. In particolare, la seconda uscita membro, e non solo come semplice utente, è un dell’anno conterrà gli Atti del Convegno Annuale presupposto fondamentale per aiutare la diffusione g It del u , che si tiene in quel periodo. di TEX e LATEX anche nel nostro paese. L’adesione La rivista è aperta al contributo di tutti coloro al Gruppo prevede una quota di iscrizione annuale che vogliano partecipare con un proprio artico- diversificata: 30,00 e soci ordinari, 20,00 (12,00) lo. Questo dovrà essere inviato alla redazione di e studenti (junior), 75,00 e Enti e Istituzioni. ArsTEXnica, per essere sottoposto alla valutazione di recensori. È necessario che gli autori utilizzino la Indirizzi classe di documento ufficiale della rivista; l’autore Gruppo Utilizzatori Italiani di TEX: troverà raccomandazioni e istruzioni più dettaglia- c/o Ufficio Statistica te all’interno del file di esempio (.). Tutto il Scuola Superiore Sant’Anna materiale è reperibile all’indirizzo web della rivista. Piazza Martiri della Libertà 33 Gli articoli potranno trattare di qualsiasi argo- 56127 Pisa, Italia. mento inerente al mondo di TEX e LATEX e non http://www.guit.sssup.it dovranno necessariamente essere indirizzati ad un [email protected] pubblico esperto. In particolare tutorials, rassegne Redazione A T Xnica: e analisi comparate di pacchetti di uso comune, rs E studi di applicazioni reali, saranno bene accetti, co- http://www.guit.sssup.it/arstexnica/ sì come articoli riguardanti l’interazione con altre [email protected] tecnologie correlate. Codice ISSN 1828-2369 Di volta in volta verrà fissato, e reso pubblico sulla pagina web, un termine di scadenza per la Stampata in Italia presentazione degli articoli da pubblicare nel nu- Pisa: 15 Aprile 2008 mero in preparazione della rivista. Tuttavia gli ArsTEXnica Rivista italiana di TEX e LATEX Numero 5, Aprile 2008

Editoriale Gianluca Pignalberi ...... 3 Consigli su come non maltrattare le formule matematiche Massimo Guiggiani, Lapo F. Mori ...... 5 Introduzione a X TE EX Massimiliano Dominici ...... 15 Macroistruzioni con argomenti delimitati Claudio Beccari ...... 27 HyPlain, più lingue insieme anche in Plain Enrico Gregorio ...... 35

Gruppo Utilizzatori Italiani di TEX

Editoriale

Gianluca Pignalberi

Come già annunciato dal mio predecessore Massi- realizzazione di quegli strumenti che verranno giu- miliano Dominici, attualmente presidente del guIt, dicati utili alla crescita della rivista, e del Gruppo questo numero di ArsTEXnica prevede un “cambio attraverso di essa. E dovrà necessariamente essere al vertice” dato che da questo numero, e fino alla mia cura proseguire, o terminare, lo sviluppo degli scadenza naturale del mandato, sarò io il direttore. strumenti che Massimiliano aveva già cominciato La proposta per questo delicato e coinvolgente a sviluppare. incarico mi è stata fatta per la mia precedente Basta chiacchiere e convenevoli; è ora di andare esperienza in campo editoriale, che va dalla col- al cuore del nostro interesse comune: i contenuti del laborazione come giornalista con varie riviste di numero di ArsTEXnica che vi apprestate a leggere. settore, alla collaborazione con Free Software Ma- Si comincia con l’ottimo articolo di Massimo gazine in qualità di programmatore della classe Guiggiani e Lapo Mori, che ci spiegano come (non) LATEX con cui la rivista è stata composta finché ne maltrattare le formule matematiche. L’articolo for- è esistita una versione stampata, e di compositore nisce un gran numero di esempi e controesempi, tout court. per mostrarci come si può ottenere una serie di Purtroppo, tale esperienza non è indice che il mio formule ben scritte e con un codice chiaro e coe- impiego come direttore sarà immediatamente ben rente, a partire da esempi palesemente sbagliati o focalizzato. Dunque mi perdonerete il periodo di confusi. Il loro articolo non può che fare bene ad “rodaggio”, indispensabile per prendere le misure una gran quantità di persone che, per faciloneria del lavoro che dovrò svolgere. La mia eventuale o misconoscenza, si accontentano di avere formu- crescita nel compito è merito di Massimiliano, che le che sembrano composte correttamente, ma che non mi ha negato il suo aiuto e la sua esperienza, invece non lo sono. e anzi si è prodigato in consigli e assistenza, e Il secondo articolo di questo quinto numero si si è premurato di seguire con discrezione la sua intitola Introduzione a X TE EX, ed è a cura di Mas- “creatura” man mano che cresceva il numero delle similiano Dominici. Nella sua introduzione, Massi- sue pagine. miliano focalizza la sua e nostra attenzione sullo È con grande onore e altrettanta preoccupazione standard di codifica Unicode e sulle tecnologie dei che ho accettato di candidarmi, ed è con gratitu- cosiddetti smart , e di come questi possono dine che ricevo l’investitura da parte dei membri essere integrati in un sistema di composizione ti- della redazione: non sarà facile ripetere in qualità pografica basato su TEX tramite X TE EX. L’autore i numeri passati diretti da Massimiliano, sebbene non lesina nella sua analisi, partendo da esempi di questo numero è la prova che si può raggiungere, codice a basso livello (Plain TEX) ed arrivando ad e anche superare, detta qualità. Se riusciremo co- esempi di alto livello, evidenziando l’uso di X TE EX stantemente in ciò, sarà esclusivamente merito di in LATEX e ConTEXt. tutta la redazione e degli autori. Non solo essi mi In un crescendo di difficoltà troviamo l’articolo hanno accordato la loro fiducia, ma si sono impe- di Claudio Beccari, incentrato sulle macroistruzioni gnati, e si impegnano costantemente, a non farmi con argomenti delimitati. Come spiegato dall’auto- mancare la loro professionalità, serietà e appoggio. re, l’argomento è adatto per chiunque abbia voglia Il risultato lo avete sotto gli occhi: il quinto di capire più profondamente i meccanismi di TEX, ma risulta essenziale solo a chi si debba cimentare numero di ArsTEXnica è un concentrato di vari argomenti ottimamente presentati e spiegati. Per con la scrittura di comandi. Gli autori puri do- quanto mi consta, per la prima volta gli articoli vrebbero astenersi dal mescolare dette istruzioni vengono presentati in ordine di difficoltà. Questo all’interno dei propri articoli. vuole essere un segno, seppur minimo, non già di Infine, la rivista che state leggendo si chiude critica o differenziazione da quanto ottimamen- con l’articolo di Enrico Gregorio, che ci spiega co- te svolto da Massimiliano, ma di contributo alla me abilitare la cesura a fine riga per documenti crescita di ArsTEXnica, che non può e non deve multilingua redatti in Plain TEX, fornendo anche fermarsi mai allo status quo. Personalmente ho ul- un’interfaccia per la definizione delle lingue. L’ar- teriori idee al riguardo, ma non è qui e ora la sede ticolo in questione ci introduce, con dovizia di per annunciarle; avremo modo di riparlarne nei spiegazioni e numerosi brani di codice, all’uso del prossimi numeri. Nell’intervallo tra un numero e pacchetto HyPlain. l’altro, sarà mia cura lavorare, in collaborazione Dopo aver fatto un ulteriore, doveroso ringrazia- con i volontari della redazione, alla definizione e mento a tutta la redazione e agli autori, non posso

3 ArsTEXnica Nº 5, Aprile 2008 Editoriale non ringraziare tutti voi lettori di ArsTEXnica, sia . Gianluca Pignalberi privati che istituzioni. Il vostro appoggio è fonda- g dot pignalberi at mentale per la rivista e il guIt. Appoggio sempre freesoftwaremagazine dot com maggiore con il passare del tempo. Grazie di cuore.

4 Consigli su come non maltrattare le formule matematiche

Massimo Guiggiani, Lapo F. Mori

Sommario fisici sperimentali, chimici e in genere coloro che trattano la matematica in quanto strumento) e non Accade spesso di imbattersi in formule matemati- a matematici in quanto la tradizione tipografica che corrette, ma scritte in modo ambiguo o inutil- per la matematica pura è in netto contrasto con le mente complicato. In effetti, raramente si insegna norme ISO non tanto per ragioni “sentimentali”, come scrivere le formule e quali aspetti valutare quanto per motivi attinenti alla matematica stessa al momento di scegliere una notazione. Questo (Gregorio, 2007a). articolo fornisce indicazioni per colmare queste Le considerazioni riportate nel seguito sono rivol- lacune. te a chiunque scriva documenti tecnico-scientifici, indipendentemente dallo strumento di composizio- Abstract ne tipografica utilizzato. Quando necessario, tutta- Mathematical formulæ are often correct but am- via, si riportano consigli su come applicare le regole biguous or uselessly complicated. Actually the rules suggerite con LATEX. Per queste parti, il testo pre- to follow and the aspects to take into account when sume che il lettore conosca già i rudimenti di LATEX, choosing a notation are very rarely taught. This ovvero che abbia letto una delle numerose guide di article provides some suggestions to fill this gap. base disponibili gratuitamente in rete (American Mathematical Society, 2002a; Baudoin, 1997; 1 Introduzione Flynn, 2005; Gregorio, 2007b; Oetiker et al., 2007; The Tutorial Team, 2000; Voß, 2007) Un ottimo modo per esprimere (certi) concetti ma- oppure un libro (Diller, 1999; Goossens et al., tematici è mediante le formule. Sembra una cosa 1995; Grätzer, 1999, 2000; Hahn, 1993; Higham ovvia, ma si è arrivati a questa conclusione attra- e Griffiths, 1997; Knuth, 1992; Kopka e Daly, verso un processo storico abbastanza faticoso. A 1995; Lamport, 1994). prima vista può sembrare che il linguaggio naturale sia più facile da usare, mentre le formule possono 2 La regola generale essere percepite come estranee. È tuttavia espe- rienza comune di tutti coloro che fanno scienza che La regola da seguire è molto semplice: le for- le formule siano insostituibili per comunicare in mule matematiche devono essere non ambigue e modo chiaro, non ambiguo e sintetico. sintetiche, ossia chiare e semplici. Le formule matematiche fanno quindi parte di In realtà questo vale (o dovrebbe valere) per un linguaggio e, come tali, dovrebbero rispettare molte forme di comunicazione, non solo scritte. determinate regole. Purtroppo, accade frequente- Quando si fa scienza, però, si dovrebbe porre mag- mente di imbattersi in formule “scritte male”, cioè giore attenzione a come si espongono i concetti per non chiare, ambigue, non sintetiche, con evidenti facilitarne la comprensione. conseguenze sulla leggibilità. Regole più dettagliate su come scrivere le for- Lo scopo di questo articolo è, appunto, quello di mule matematiche sono esposte nella norma ISO dare delle indicazioni di massima su come scrivere 31 (ISO 31/11, 1982; ISO 31/12, 1982), discussa certe semplici formule, o forse su come non scriver- ampiamente su Wikipedia (a,b,c,d) e nell’articolo le. In effetti, per imparare a scrivere nel linguaggio di Beccari (1997). naturale occorre andare a scuola, fare errori ed es- sere corretti. Tipicamente, chi non è scolarizzato sa 3 Operazioni comunicare nella propria lingua, ma scrive in mo- 3.1 Moltiplicazione do sgrammaticato, eppure comprensibile (chi non capisce “Io ho andato al mare”?). La stessa cosa L’errore più comune è l’uso del “pallino” per indi- è valida per le formule, però solo raramente viene care la moltiplicazione fra scalari. Per esempio le insegnato quali regole seguire e quali errori evita- seguenti formule re. Gli esempi che vengono esaminati sono tutti a · x2 + b · x + c = 0, σ · ε = 2 · α estratti da pubblicazioni, tesi di laurea e dispense universitarie. andrebbero scritte così L’articolo si rivolge prevalentemente ad autori di scritti di carattere tecnico-scientifico (ingegneri, ax2 + bx + c = 0, σε = 2α.

5 ArsTEXnica Nº 5, Aprile 2008 Consigli su come non maltrattare le formule matematiche

Infatti, in ossequio al principio di semplicità, la \operatorname{argmax} f(x) moltiplicazione fra lettere, o fra un numero e una lettera, non richiede nessun simbolo. Se invece si moltiplicano due numeri occor- Si noti che la definizione di un operatore non è re utilizzare il simbolo × oppure · per evitare equivalente all’uso di \mathrm1 perché la prima si ambiguità. Si scrive per esempio preoccupa anche di gestire lo spazio tra l’operatore 2 × 3 = 6 e non 2 3 = 6. e l’operando. Si noti per esempio la differenza tra

Lo stesso simbolo andrebbe utilizzato quando si sin x e sinx spezza una formula su più righe in corrispondenza di un prodotto, come mostrato nell’eq. (1). ottenuti rispettivamente con Improponibile l’uso dell’asterisco: \sin x a ∗ x2 + b ∗ x + c = 0, σ ∗ ε = 2 ∗ α. e Il pallino va utilizzato per indicare il prodotto \mathrm{sin}x scalare fra vettori. A tale scopo è possibile utiliz- zare sia il pallino sottile \cdot che un pallino più spesso \bcdot, definito con il seguente comando Gli operatori, inoltre, permettono anche un’ade- guata gestione di apici e pedici come nel caso dei \newcommand{\bcdot}{\boldsymbol{\cdot}} limiti. Per esempio

I due comandi producono rispettivamente 1 lim x→∞ x a · c = 0 e a · c = 0. si ottiene semplicemente con 3.2 Operatori matematici Gli operatori, incluso il simbolo del differenzia- \lim_{x\to\infty}\frac{1}{x} le, vanno indicati con carattere dritto, come nei seguenti esempi Per scrivere correttamente il simbolo del differen- ziale è richiesta una definizione un po’ particolare. Z dy Infatti è un operatore con spazio solo alla sua sin x dx, , lim cos x = 1. dx x→0 sinistra. In Beccari (2007b) viene proposta la seguente soluzione Si tratta infatti di abbreviazioni di parole e il font dritto contribuisce a ricordare questo fatto, oltre a \newcommand{\ud}{\mathop{}\!\mathrm{d}} evitare ogni ambiguità con possibili prodotti. Per esempio, tan x è indubbiamente la tangente di x, in cui si introduce un operatore vuoto, salvo poi mentre tanx potrebbe essere il prodotto di quattro eliminare lo spazio a destra con il comando \!.2 Si termini. Si confronti anche la diversa leggibilità. noti la differenza tra LAT X e il pacchetto amsmath definiscono i più E Z Z comuni operatori matematici tra cui \lim, \sin, sin xdx e sin x dx, \min, ecc. Se fosse necessario definirne di nuovi, il pacchetto amsmath mette a disposizione il coman- do \DeclareMathOperator, da utilizzarsi solo nel dove il differenziale è ottenuto rispettivamente con preambolo, e \operatorname, che permette di de- \mathrm{d} e con \ud. finirsi un nome di operatore ‘al volo’ senza bisogno 3.3 Equazioni su più righe di definire un comando apposito. Per esempio per scrivere Quando si trattano equazioni lunghe può accadere argmax f(x) di doverle spezzare su più righe. Vale come regola generale che i segni di operazione o relazione, cioè è possibile definire l’operatore nei seguenti modi: quelli che permettono di spezzare una formula, • dichiarando nel preambolo vanno indicati una sola volta, a termine riga in caso di formule in corpo, e ad inizio riga in caso di \DeclareMathOperator{\argmax}{argmax} 1. Per ottenere caratteri dritti in ambiente matematico e poi richiamandolo nel testo come è possibile utilizzare il comando \mathrm. Gli altri metodi per scrivere caratteri dritti in ambiente matematico sono \argmax f(x) descritti nel par. 5.1.1. 2. \! inserisce uno spazio negativo uguale a quello che TEX inserisce fra un operatore e una variabile (Beccari, • dichiarando direttamente nel testo 2007a).

6 Consigli su come non maltrattare le formule matematiche ArsTEXnica Nº 5, Aprile 2008

3 formule fuori corpo non è compilabile perché LATEX si aspetta che tut- ti i \left vengano chiusi dai rispettivi \right a  c   c  all’interno di ogni riga. f = sin + tan b d d Una soluzione consiste nel chiudere \left e   e   g  \right rispettivamente con \right. e \left. × 1 + sin − cos . (1) f h \begin{multline*} f(x,y,z)= (1+x+y-z)\left[\pi\right.\\ La doppia indicazione è sconsigliabile, oltre che \left.+\sin\left(\frac{a}{b}\right) +\cos\left( \frac{c}{d}\right)\right]. per ragioni estetiche, anche per evitare ambiguità. \end{multline*} Se per esempio si scrivesse ma il problema è che adesso la dimensione delle a = b + c + d− parentesi di ogni coppia \left e \right viene − e − f, calcolata indipendentemente e questo può produrre spiacevoli risultati come in questo caso non sarebbe chiaro quale delle due si debba intendere f(x, y, z) = (1 + x + y − z)[π a  c i + sin + cos . a = b + c + d − e − f b d a = b + c + d + e − f. La prima soluzione consiste nell’individuare il termine di altezza maggiore, in questo caso Questa regola si estende anche ai casi in cui sono a presenti più segni di uguaglianza come nel seguente , b esempio e inserirlo all’interno del comando \vphantom a = b + c + d nell’altra riga = −e − f \begin{multline*} ' g. f(x,y,z)= (1+x+y-z)\left[\pi\vphantom{ \left(\frac{a}{b}\right)}\right.\\ \left.+\sin\left(\frac{a}{b}\right) A 3.3.1 Comandi LTEX +\cos\left( \frac{c}{d}\right)\right]. \end{multline*} LATEX si preoccupa automaticamente di spezzare formule lunghe in corpo, mentre spezzare le formu- ottenendo le fuori corpo è compito dell’autore. Il pacchetto h amsmath mette a disposizione un certo numero f(x, y, z) = (1 + x + y − z) π di ambienti per gestire le formule. Tra questi si a  c i ricordano split, multline, gather, align, aligned, ali- + sin + cos . gnat; per i dettagli si veda la documentazione di b d amsmath (American Mathematical Society, In questi casi è però consigliabile utilizzare le 2002b). parentesi con dimensione fissa4 per evitare di do- 3.3.2 Gestione delle parentesi ver individuare l’elemento più alto. Per esempio il codice Se si usano i comandi \left e \right per far \begin{multline*} A scegliere in automatico a LTEX la dimensione delle f(x,y,z)= (1+x+y-z)\Bigl[\pi\\ parentesi, possono nascere problemi nel caso che +\sin\Bigl(\frac{a}{b}\Bigr) la formula sia spezzata tra \left e \right. Per +\cos\Bigl( \frac{c}{d}\Bigr)\Bigr]. esempio il codice \end{multline*}

\begin{multline*} produce f(x,y,z)= (1+x+y-z)\left[\pi\\ +\sin\left(\frac{a}{b}\right) h +\cos\left( \frac{c}{d}\right)\right]. f(x, y, z) = (1 + x + y − z) π \end{multline*} a  c i + sin + cos . b d 3. Con formula in corpo si intende una formula che com- pare all’interno di una riga di testo, come per esempio Si noti che questa soluzione è valida solo nei casi c = a + b, mentre con formula fuori corpo si intende una in cui non si debbano usare parentesi di dimensione che da sola occupa una riga, come per esempio maggiore a \Bigg (necessario solo con matrici). c = a + b. 4. La dimensione fissa può essere ottenuta con i comandi Le prime vengono ottenute in LATEX con il comando $...$ \bigx, \Bigx, \biggx e \Biggx (dove x è ‘l’ per le parentesi mentre le seconde vengono ottenute alternativamente con sinistre, ‘r’ per le parentesi destre, ‘m’ oppure anche niente il comando \[...\] oppure con l’ambiente equation. nel caso si voglia denotare un simbolo ordinario).

7 ArsTEXnica Nº 5, Aprile 2008 Consigli su come non maltrattare le formule matematiche

In aggiunta alle soluzioni presentate, si segnala In un testo di algebra lineare, che tratta quindi che il pacchetto breqn, sviluppato da Michael Dow- interamente di matrici e vettori, è perfettamente nes e preso in carico da Morten Høgholm, è proprio legittimo abolire il neretto e scrivere semplicemente finalizzato alla cesura automatica delle formule e il dimensionamento automatico delle parentesi. Tale Ax = b. pacchetto fa funzionare i comandi \left e \right anche in presenza di interruzione di riga. 4.1.2 Notazione per componenti 3.4 La punteggiatura In alcuni casi è necessario esprimere esplicitamente le componenti di vettori e matrici. Non è raro Esistono due scuole di pensiero sulla punteggiatura trovare in libri e tesi di laurea espressioni del tipo esterna, ovvero sulla punteggiatura in formule ma-       tematiche fuori corpo. Alcuni ritengono che questa a11 a12 a13 x1 b1 non andrebbe mai usata (Beccari, 2007a), altri a21 a22 a23 x2 = b2 . che ritengono tale punteggiatura necessaria ed es- a31 a32 a33 x3 b3 senziale.5 La cosa fondamentale, qualunque dei due metodi si scelga, è essere coerenti e usare sempre Questa notazione è sconsigliabile perché utilizza pa- un unico metodo. rentesi differenti per matrici e vettori e perché uti- Gli autori di questo articolo ritengono che le lizza le parentesi graffe per i vettori. Assai migliore formule, sia nel testo che fuori corpo, facciano parte la seguente: dell’argomentazione e, quindi, la punteggiatura a a a  x  b  vada usata per aiutare il lettore. Un esempio di 11 12 13 1 1 a a a x b . buon uso della punteggiatura è il seguente:  21 22 23  2 =  2 (2) a31 a32 a33 x3 b3 Dal momento che Sebbene non esista una normativa o una consue- a = b tudine sul tipo di parentesi da utilizzare quando si esprimono vettori e matrici in componenti, è e che consigliabile: b = c, • utilizzare parentesi tonde o quadre, evitando è provato che gli altri tipi (graffe, angolate, uncinate, ecc.); a = c. • mantenere la stessa notazione sia per i vettori7 che per le matrici lungo tutto il documento. 4 Variabili Per creare matrici e vettori in LATEX è consiglia- 4.1 Vettori e matrici bile l’impiego degli ambienti pmatrix (se racchiusi 4.1.1 Notazione sintetica da parentesi tonde) e bmatrix (se racchiusi da pa- rentesi quadre) forniti dal pacchetto amsmath. Per I vettori sono spesso indicati con le lettere esempio l’eq. (2) può essere scritta minuscole in neretto6 \begin{bmatrix} 3a + αc = v. a_{11}&a_{12}&a_{13}\\ a_{21}&a_{22}&a_{23}\\ Sono da evitare costruzioni come le seguenti a_{31}&a_{32}&a_{33}\\ \end{bmatrix} ~a, a, {a}, [a]. \begin{bmatrix} x_1\\ Lo stesso vale per le matrici, che possono essere x_2\\ indicate con lettere maiuscole in neretto x_3 \end{bmatrix}=\begin{bmatrix} Ax = b b_1\\ b_2\\ evitando, perché meno leggibili, espressioni di b_3 questo tipo \end{bmatrix} [A]{x} = {b}. Talvolta è necessario riportare le componenti di 5. La maggioranza dei libri italiani di matematica, nuovi un vettore all’interno del testo. In questi casi è e vecchi (compresi libri composti con il piombo a mano), consigliabile rappresentarlo come vettore riga tra- usa, anche se in modo non sempre coerente, punto e vir- gola, virgola e punto nelle formule fuori corpo (Bellac- sposto in modo da non dilatare eccessivamente lo chi, 1894; Bertini, 1907; Bianchi, 1899; Bonola, 1906; spazio tra le righe. Esistono almeno due conven- Burali-Forti, 1904; Caprilli, 1912; Cesaro, 1894; Dini, zioni per scrivere vettori riga nel testo. La prima 1878; Fubini, 1908; Gazzaniga, 1903; Peano, 1887; Sacchi, 1854; Veronese, 1891; Vivanti, 1916). 7. Infatti, quando scritto in componenti, un vettore cor- 6. Per ottenere in ambiente matematico lettere in neretto risponde a una matrice con una sola colonna (o riga, a dritto si può utilizzare il comando \mathbf. seconda della convenzione usata).

8 Consigli su come non maltrattare le formule matematiche ArsTEXnica Nº 5, Aprile 2008 consiste nell’utilizzare la convenzione dei vettori Un altro errore comune è quello di scrivere le for- T fuori corpo; per esempio v = [v1 v2 v3] . La secon- mule matematiche usando come simboli le variabili da, adottata per esempio da Strang (2005), è più dei programmi di calcolo. Per esempio compatta e consiste nel separare le componenti con A_fl + B_fl = d_k_fl virgole senza riportare il segno di trasposta, che è implicito; per esempio v = (v1, v2, v3). In entrambi invece di i casi, è consigliabile non utilizzare gli ambien- A + B = d. ti pmatrix e bmatrix, che produrrebbero parentesi 4.3 Apici e pedici troppo grandi. La scelta tra parentesi tonde e quadre dipen- L’uso dei pedici sarebbe da limitare ai soli casi de dai gusti personali. Le parentesi quadre hanno in cui è necessario e, anche in questi casi, devono come vantaggio una maggiore compattezza (occu- essere evitati pedici formati da abbreviazioni. Per pano meno spazio in orizzontale) e una migliore esempio è sconsigliato scrivere σnominale o σnom, do- resa grafica con matrici e vettori di molte righe. ve “nominale” ha il significato italiano; in questo caso si potrebbe semplicemente scrivere σn. Ovvia- 4.2 Un simbolo, una lettera mente è del tutto lecito usare pedici (o apici) per Un simbolo matematico è normalmente indicato gli indici, come in un tensore del terzo ordine σijk. da una lettera, non da due o tre. Se, per esempio, In questi casi si deve usare il corsivo matematico si vuole suggerire che il coefficiente di sicurezza è con il classico comando \sigma_{ijk}. pari a tre, non si deve scrivere I pedici e gli apici sottostanno alle stesse regole dei simboli (par. 5.1): devono essere in corsivo quan- CS = 3 do rappresentano grandezze fisiche o matematiche variabili, in dritto negli altri casi. Per esempio si perché CS può sembrare il prodotto di due deve scrivere AT se T rappresenta la temperatura quantità. Molto meglio usare un pedice ma AT se T rappresenta un nome come ad esempio A i C = 3. “traiettoria”; si deve scrivere i se rappresenta s l’indice di una sommatoria. Abbastanza frequente è l’uso di CG per indicare il L’uso delle parole come pedici può portare a baricentro (center of gravity). Non sarebbe meglio deturpare formule altrimenti semplici, come nel usare semplicemente G? seguente esempio Le norme ISO prevedono qualche eccezione, co- T me il numero di Mach Ma e il numero di Reynolds frenante,ruota = Re, che sono rappresentati da due lettere. In questi (Tmotore,erogata − Tmotore,richiesta) ∗ C rari casi in cui serve il carattere corsivo per un N simbolo formato da più lettere è necessario utiliz- che forse era meglio scrivere zare il comando \mathit per evitare problemi di C(Te − Tr) spaziatura tra i caratteri. Si noti per esempio la Tf = . (3) differenza tra Ma e Ma, ottenuti rispettivamente N con $Ma$ e $\mathit{Ma}$. Nel primo la distanza Dato che i pedici “f”, “e” ed “r” sono rispetti- tra M e a fa pensare che si stia considerando una vamente abbreviazioni di “frenante”, “erogata” e moltiplicazione mentre nel secondo caso lo spazio “richiesta” vanno in carattere dritto per quanto è corretto. detto sopra. Si dovrebbe anche evitare di inserire parole intere 4.4 Notazione opportuna nelle formule Per facilitare la comprensione di un testo scientifico massa × accelerazione = forza. è fondamentale usare una notazione opportuna. Per rendersi conto di quanta importanza abbia la Intanto, questa dovrebbe essere una relazione vet- notazione basta provare a fare una moltiplicazione toriale e ciò non viene comunicato dalla formula. usando i numeri romani Inoltre le parole andrebbero scritte in carattere dritto MMCDXXVIII × XIX invece di 2428 × 19. Un errore comune è usare tipi di lettere diversi massa × accelerazione = forza, per quantità dello stesso tipo: indicare, per esem- in modo da avere le giuste spaziature fra le lettere pio, alcune lunghezze con lettere minuscole (l, s, e non rischiare di suggerire al lettore che la parola a) e altre con lettere greche (α, γ) non aiuta. Cer- sia invece una moltiplicazione tra più grandezze tamente possono esserci delle eccezioni, ma un po’ scalari. In ogni caso il risultato non è comparabile di attenzione non guasta. in termini di chiarezza e sintesi con Anche i pedici devono essere scelti con cura. Si trovano figure in cui ω1 è la velocità angolare del ma = F. corpo 2 e ω2 è quella del corpo 1.

9 ArsTEXnica Nº 5, Aprile 2008 Consigli su come non maltrattare le formule matematiche

spazi, si può usare il comando \text. Si noti per esempio la differenza tra

vsezione ridotta e vsezioneridotta prodotti rispettivamente con v_\text{sezione ridotta}

e v_\mathrm{sezione ridotta} Figura 1: Esempio di variabili matematiche indicate con simboli in corsivo. \mathrm, rispetto a \text, fa sì che il pedice non diventi corsivo in contesto corsivo. Si consideri ad esempio 5 Grandezze fisiche e matematiche Vale la disuguaglianza Leff =6 L 5.1 Simboli eff Le norme ISO prescrivono l’uso di simboli in corsi- prodotto da vo per grandezze fisiche e matematiche che possono \textit{Vale la disuguaglianza% assumere valori differenti. Un esempio sono i no- $L_\text{eff}\ne L_\mathrm{eff}$} mi dei punti e degli angoli in geometria (Fig. 1).8 Rientrano in questa categoria anche tutte le co- Si ricorda, inoltre, che l’opzione italian del pacchet- stanti fisiche il cui valore non è “costante” perché to babel attiva anche i comandi \ap e \ped per migliori misure possono modificarlo.9 inserire rispettivamente un apice o un pedice sia Tutte le altre grandezze fisiche e matematiche de- in modo testo sia in modo matematico. Essi sono vono essere scritte con carattere dritto. Tra queste equivalenti a \mathrm se compaiono in ambiente rientrano l’unità immaginaria 2+4i e la base dei lo- matematico e a \text se compaiono nel testo. Per garitmi naturali e = 2,718 ..., nonché, ovviamente esempio il codice pi greco π = 3,141 592 ... (Beccari, 2007a). A\ped{sezione 1} e $A\ped{sezione 1}$ Si ricorda che, come detto nell’introduzione, la tradizione matematica ‘pura’ non fa uso di queste produce convenzioni perché sono utili in campo tecnico ma sarebbero dannose in matematica (Gregorio, Asezione 1 e Asezione1 2007a). I simboli di composti chimici devono essere scrit- Le lettere greche dritte sono fornite dal pacchetto ti con carattere dritto. Per la scrittura sia di singoli upgreek. Si noti ad esempio la differenza tra π e π composti chimici che di equazioni di reazioni chimi- ottenuti rispettivamente con \uppi e \pi. che si consiglia l’utilizzo di un pacchetto dedicato Gli esempi precedenti servono solo per mostrare come mhchem. il comportamento dei vari comandi, ma resta fermo quanto detto nei paragrafi precedenti: apici e pedici A 5.1.1 Tipo di carattere in LTEX non dovrebbero contenere abbreviazioni formate Di default le lettere scritte in ambiente matematico da più lettere. A in LTEX sono rappresentate in corsivo e quindi 5.2 Numeri rappresentano grandezze matematiche e fisiche non costanti. Per esempio produce a = b. I numeri devono sempre essere scritti con carattere $a=b$ 10 Per scrivere costanti, ovvero per utilizzare ca- dritto (123) invece che in corsivo (123). Questo A rattere dritto in ambiente matematico, è possi- comportamento è seguito di default da LTEX in am- bile utilizzare il comando \mathrm. Per esempio biente matematico, ma possono nascere problemi $a=\mathrm{b}$ produce a = b. \mathrm, pur nel testo. Per questo motivo è sempre consigliabile usando caratteri dritti, è sempre in modalità ma- utilizzare ambienti matematici per scrivere numeri tematica e quindi gli eventuali spazi non vengono anche nel testo. Se infatti il numero compare in considerati. Nel caso in cui sia necessario inserire una frase in corsivo, il fatto che sia in ambiente ma- tematico impone che sia rappresentato da caratteri 8. I punti e gli angoli, in quanto variabili matematiche, dritti. Per esempio devono essere scritti in corsivo. A questa regola si aggiunge la convenzione adottata dalla maggioranza degli autori di camminare \emph{al massimo 2 km} a piedi indicare con le lettere latine maiuscole i punti (A, B, C, ecc.), con quelle latine minuscole i segmenti (a, b, c, ecc.) produce e con quelle greche, di solito minuscole, gli angoli (α, β, γ, ecc.). 9. Rientrano, per esempio, in questa categoria la carica 10. Le date rappresentano un’eccezione a questa regola dell’elettrone e, la costante di Planck h, la costante di e possono essere scritte in corsivo se il contesto in cui Planck ridotta ~ e la costante di Boltzmann k. compaiono è in corsivo.

10 Consigli su come non maltrattare le formule matematiche ArsTEXnica Nº 5, Aprile 2008

camminare al massimo 2 km a piedi • La sostituzione del segno decimale. Indipen- dentemente da quale segno decimale sia usato nel codice LAT X, numprint rappresenta i nu- anziché la forma corretta E meri con il separatore adatto per la lingua utilizzata: . per l’inglese e , per l’italiano e le camminare al massimo 2 km a piedi altre lingue europee. Se, per esempio, si scri- ve in italiano \np{3.15} viene rappresentato che si ottiene con come 3,15. camminare \emph{al massimo $2$ km} a piedi • L’approssimazione dei numeri decimali al nu- Lesina (1986) fornisce alcune regole per scrivere mero di cifre significative impostato. Se per i numeri nel testo. Queste regole possono essere esempio si imposta l’uso di 3 cifre significative, riassunte in (Gregorio, 2005): \np{2.742647826672} produce 2,743. • I numeri inferiori a venti11 vanno in lettere. • La conversione dei caratteri E, e, D, d Per esempio: il pignone ha undici denti. nel formato esponenziale.12 Per esempio \np{1.234E-4} viene rappresentato come • Se un numero rappresenta una misura precisa, 1,234 · 10−4. va in cifre. Per esempio: il è lungo 1,5 m. • L’aggiunta automatica di zeri qualora necessa- • Se è una misura indicativa va in lettere, pur- rio. Ad esempio \np{.12} viene rappresentato ché il numero non sia troppo grande (quando come 0,12. è scritto). In questo caso è facile arrotonda- re, tanto non interessa se un posto è lontano 5.3 Cifre significative e notazione scienti- un chilometro o 1123 m (tranne alcuni casi fica specifici). Quando si riportano numeri appros- Le scienze sperimentali sono solite esprimere valu- simati anche le unità di misura vanno scritte tazioni e risultati con quantità numeriche. Certe per esteso. Si scrive dunque “tra circa venti quantità√ numeriche sono esatte, come ad esem- metri” e non “tra circa 20 m”. pio π, e, 2, 2/3. Le quantità derivanti, in modo diretto o indiretto, da misure o stime sono inve- • Se il numero appare accoppiato a un altro che ce approssimate (o più propriamente incerte). La va scritto in cifre, anche questo va in cifre. rappresentazione utilizzata per le quantità appros- Per esempio va scritto: ci sono 10 soggetti del simate, sia in virgola mobile che in virgola fissa, è primo tipo e 154 del secondo. di fondamentale importanza perché fornisce infor- • Mai cominciare un periodo con un numero mazioni sulla precisione con cui le quantità sono scritto in cifre. note. Per esempio I numeri romani, sebbene molto rari in testi h = 1,23 m e h = 1,230 00 m scientifici, devono essere sempre scritti in carattere seppure simili hanno due significati completamente dritto, allo stesso modo dei numeri arabi. Si deve diversi. Mentre nel primo caso h rappresenta una quindi scrivere XVI invece di XVI . lunghezza nota al meglio di ±5 mm e, quindi, Numeri lunghi andrebbero scritti con un piccolo deriva da misure piuttosto grossolane, nel secondo spazio ogni blocco di tre cifre: caso h rappresenta una lunghezza nota al meglio di ± 125 362 5 µm e, quindi, deriva da misure molto precise. Prestare attenzione al numero di cifre significati- , 0 398 276 ve con cui si rappresenta una quantità numerica è 12,345 4. dunque molto importante, talvolta più importante delle cifre stesse.13 Purtroppo spesso si rappresen- A Lo spazio è ottenibile in LTEX con il comando \,. tano quantità numeriche con un numero eccessi- Per fortuna questo può essere fatto in automatico vo di cifre significative, in particolare quando si con il comando \np del pacchetto numprint. Tra le riportano i risultati di qualche calcolo. funzioni di tale pacchetto si ricordano: La notazione scientifica, che è un modo di espri- • L’inserimento di un separatore ogni tre cifre mere i numeri approssimati utilizzando le potenze per le migliaia. Il separatore usato (, o . o \, intere di dieci, permette in primo luogo di utiliz- o ~) dipende dalla lingua in cui si sta scrivendo zare una notazione più concisa e in secondo luogo (definita dal pacchetto babel). Per l’italiano di identificare immediatamente il numero di cifre viene utilizzato di default lo spazio sottile significative e quindi se ne consiglia l’impiego. \,. Per esempio in italiano \np{15000000} 12. Questa funzione è particolarmente utile per riportare produce 15 000 000. dati prodotti da software come FORTRAN, MATLAB, ecc. 13. Per esempio, a seconda del contesto, può esserci più 11. Altri autori dicono numeri al massimo di una cifra. differenza tra 2,1 e 2,150 2 che tra 2,1 e 2,9.

11 ArsTEXnica Nº 5, Aprile 2008 Consigli su come non maltrattare le formule matematiche

χ C1 C2 a1 (N/rad)(N/rad)(m) 0 73 000,0 90 000,0 0,912 0,05 70 899,3 89 143,7 0,912 0,10 68 565,1 88 850,5 0,912

Tabella 1: Unità di misura fra parentesi tonde.

32, 1 µm

Il pacchetto, tra l’altro, permette di scrivere le unità di misura in carattere dritto e di inserire uno spazio insecabile tra il numero e l’unità di misura. Figura 2: Unità di misura fra parentesi tonde. Se si utilizza l’opzione italian di babel, è necessario usare l’opzione italian anche su SIunits; se si usa 5.4 Unità di misura il pacchetto amssymb, è necessario usare l’opzione squaren su SIunits perché il comando square viene Le unità di misura (Bureau International des già definito dal precedente. Poids et Mesures, 2006; ISO 1000, 1982) coin- Assolutamente sconsigliato è l’uso di abbrevia- volgono spesso più caratteri (kg, Pa, mm, MN, rad, zioni o acronimi come “mln” per “milioni” e “mld” ecc.) e devono seguire alcune regole: per “miliardi” il cui uso è ormai una prassi in cam- • devono essere scritte in carattere dritto; po giornalistico ma si sta diffondendo anche in testi scientifici (Beccari, 2007a). • non devono essere separate dalla quantità nu- Un altro errore comune è utilizzare la k maiusco- merica a cui si riferiscono da un’interruzione la per indicare il chilo. K, nell’ambito delle unità di riga; di misura, ha solamente il significato di kelvin,14 mentre chilo si scrive con la k minuscola. Si scri- • non devono essere racchiuse fra parentesi ve dunque kg, kB, ecc. per indicare chilogrammo, quadre. chilo byte ecc. Si ricorda che le unità si misura del sistema internazionale (SI) sono maiuscole quando Le parentesi quadre non devono essere usate con costituiscono le abbreviazioni del nome di illustri le unità di misura perché in metrologia significano scienziati (ad es. N, W, Pa, J) minuscole negli altri “unità di misura di” (Beccari, 2007a). Per esempio casi (ad es. m, lm, cd). Unica eccezione è il litro è lecito scrivere che in Europa può essere scritto maiuscolo o mi- nuscolo, negli USA obbligatoriamente maiuscolo a 2 a / 2 = 25 m/s e [ ] = m s (Bureau International des Poids et Mesu- res, 2006; Ceraolo, 2007). Quando scritte per ma non 2 esteso, le unità di misura devono essere scritte con a = 25 [m/s ]. iniziale minuscola (Ceraolo, 2007; NIST, 2001). Le parentesi tonde servono invece nelle tabelle e nei grafici quando l’unità di misura non compare 6 Ambiguità vicino al valore numerico a cui si riferisce, ma al simbolo della corrispondente grandezza fisica. Si Indicare lo zero con il simbolo ∅ nella scrittura a vedano per esempio la Tab. 1 e la Fig. 2. mano è un’inutile pignoleria. Infatti, il contesto A questi errori tipografici si aggiungono errori indica chiaramente che non si tratta di una “o” ∅ concettuali. Il più frequente consiste nell’indicare maiuscola. L’uso di è invece indispensabile nella il secondo (unità di tempo) con sec (che peraltro stesura a mano di programmi di calcolo, proprio significa secante in trigonometria) anziché con il perché sarebbe difficile capire se si intende “O” simbolo s. Una buona rassegna sull’uso delle uni- oppure “0”. tà di misura è riportata nella guida dell’ottimo 14. Sono ormai molti anni (dal 1968) che in ambito in- pacchetto SIunits (Heldoorn e Wright, 2007). ternazionale è stata abolita la parola “grado” per riferirsi Questo pacchetto permette di evitare di formattare ai kelvin. La ragione è che i “gradi” sono in qualche modo a mano le unità di misura. Per esempio misure convenzionali di grandezze fisiche, ed, in particolare, possono anche essere espresse da numeri negativi; le unità \unit{32,1}{\micro\metre} prive della parola grado sono più legate alla fisica reale della cosa che si intende misurare e hanno valore zero in produce corrispondenza dell’azzeramento della grandezza (Bureau International des Poids et Mesures, 1969; Ceraolo, 2007; Terrien, 1968).

12 Consigli su come non maltrattare le formule matematiche ArsTEXnica Nº 5, Aprile 2008

Nella composizione elettronica, invece, è forte- — (2007b). Introduzione all’arte della composizio- mente consigliato indicare i litri con la lettera elle ne tipografica. URL http://www.guit.sssup. maiuscola (L) anziché minuscola (l). Sebbene le it/downloads/GuidaGuIT.pdf. norme (Bureau International des Poids et Mesures, 1979; Giacomo, 1980; ISO 1000, 1982) Bellacchi, G. (1894). Introduzione storica alle prevedano l’uso di entrambe le forme,15 quella mi- funzioni ellittiche. Barbera, Firenze. nuscola rischia di confondersi con il numero uno Bertini, E. (1907). Introduzione alla geometria e con la i maiuscola. Si noti la somiglianza tra i proiettiva degli iperspazi. E. Spoerri, Pisa. seguenti: l, 1, I. Bianchi, L. (1899). Lezioni sulla teoria dei gruppi 7 Conclusioni di sostituzioni. E. Spoerri, Pisa. Queste note sono nate quasi per gioco, con l’inten- Bonola, R. (1906). La geometria non-euclidea. to di contribuire a ridurre, ci si passi il termine, Zanichelli, Bologna. l’analfabetismo con cui vengono talvolta scritte le Burali-Forti, C. (1904). Lezioni di geometria formule, magari assai interessanti e profonde. Da metrico-proiettiva. Fratelli Bocca, Torino. una prima breve bozza si è poi passati gradatamen- te a considerare anche altri aspetti fino a ottenere Bureau International des Poids et Mesu- un articolo serio e lungo ma, speriamo, non serioso res (1969). «Resolution 4». In Comptes Ren- e noioso. Tuttavia, mai sottovalutare l’importanza dus de la 13e Conférence Générale des Poids della chiarezza e dell’efficacia nella comunicazione, et Mesures (1967/68). p. 104. URL http: soprattutto scientifica. //www.bipm.org/en/CGPM/db/13/4/.

8 Ringraziamenti — (1979). «Resolution 6». In Comptes Rendus de la 16e Conférence Générale des Poids et Mesures. Desideriamo ringraziare Valeria Angeli, Luca Bal- p. 101. URL http://www.bipm.org/en/CGPM/ dini, Riccardo Bartolozzi, Marco Beghini, Massimo db/16/6/. Ceraolo, Andrea Domenici, Massimiliano Domini- ci, Beatrice Lazzerini, Caterina Mori, Pier Angelo — (2006). The International System of Units (SI). Mori, Sebastiano Schillaci ed Antonio Sponziello Pavillon de Breteuil, Sèvres, France, 8ª edizio- per gli utili suggerimenti forniti nelle fasi di stesura ne. URL http://www.bipm.org/en/si/si_ e revisione di questo articolo. Si ringraziano inoltre brochure/. Claudio Beccari ed Enrico Gregorio per le illumi- Caprilli, A. (1912). Nuove formole d’integrazione. nanti discussioni svolte sul forum di guIt (http: Belforte, Livorno. //www.guit.sssup.it/phpbb/index.php) su alcuni temi trattati in questo articolo. Ceraolo, M. (2007). Comunicazione privata. Cesaro, E. (1894). Corso di analisi algebrica Riferimenti bibliografici con introduzione al calcolo infinitesimale. Bocca, American Mathematical Society (2002a). Torino. A S-LAT X User’s Guide. URL ftp://ftp. M E Diller, A. (1999). LAT X Line by Line: Tips ams . org / pub / tex / doc / amsmath / amsldoc . E and Techniques for Document Processing. John pdf. Wiley & Sons. — (2002b). «User’s guide for the amsmath packa- Dini, U. (1878). Fondamenti per la teorica delle ge». URL ftp://ftp.ams.org/pub/tex/doc/ funzioni di variabili reali. Nistri, Pisa. amsmath/amsldoc.pdf. Flynn, P. (2005). A beginner’s introduction to A Baudoin, M. (1997). Apprends LTEX! URL http: typesetting with LATEX. URL http://ctan.tug. //tex.loria.fr/general/apprends-latex. org/tex-archive/info/beginlatex/. pdf. Fubini, G. (1908). Introduzione alla teoria dei Beccari, C. (1997). «Typesetting mathema- gruppi discontinui e delle funzioni automorfe. E. tics for science and technology according to Spoerri, Pisa. ISO31XI». TUGboat, 18 (1), pp. 39–48. Gazzaniga, P. (1903). Gli elementi della teoria — (2007a). Comunicazione privata. dei numeri. Drucker, Verona-Padova.

15. Le norme ISO prevedono l’uso dei litri anche se l’unità Giacomo, P. (1980). Metrologia, 16 (1), pp. 55–61. di misura del volume nel sistema internazionale (Bureau International des Poids et Mesures, 2006) è il m3 con Goossens, M., Mittelbach, F. e Samarin, A. i suoi multipli e sottomultipli. (1995). The LATEX Companion. Addison-Wesley.

13 ArsTEXnica Nº 5, Aprile 2008 Consigli su come non maltrattare le formule matematiche

Grätzer, G. (1999). First Steps in LATEX. Oetiker, T., Partl, H., Hyna, I. e Schlegl, Springer Verlag. E. (2007). The (Not So) Short Introduction to LATEX 2ε. URL http://www.ctan.org/get/ — (2000). Math into LATEX. Birkhauser. info/lshort/english/lshort.pdf.

Gregorio, E. (2005). Discussione sul forum Peano, G. (1887). Applicazioni geometriche del di guIt. URL http://www.guit.sssup.it/ calcolo infinitesimale. Bocca, Torino. phpbb/viewtopic.php?t=1220. Sacchi, G. (1854). Sulla geometria analitica delle — (2007a). Comunicazione privata. linee piane. Bizzoni, Pavia. Strang, G. (2005). Linear Algebra and Its — (2007b). LAT X: Breve guida ai pacchetti di uso E Applications. Brooks Cole, 4ª edizione. più comune. URL http://profs.sci.univr. it/~gregorio/breveguida.pdf. Terrien, J. (1968). «News from the international bureau of weights and measures». Metrologia, Hahn, J. (1993). LATEX for Everyone: A Reference 4 (1), p. 43. Guide and Tutorial for Typesetting Documents Using a Computer. Prentice Hall. The Tutorial Team (2000). On-line Tutorial on LATEX. Indian TEX Users Group. URL http: Heldoorn, M. e Wright, J. (2007). The //www.tug.org.in/tutorials.html. SIunits package: support for the Internatio- nal System of Units. URL http://tug. Veronese, G. (1891). Fondamenti di geometria ctan.org/cgi-bin/getFile.py?fn=/macros/ a più dimensioni e a più specie di unità rettili- latex/contrib/SIunits/SIunits.pdf. nee esposti in forma elementare. Tipografia del Seminario, Padova. Higham, D. e Griffiths, D. (1997). Lear- Vivanti, G. (1916). Elementi della teoria delle A ning LTEX. Society for Industrial and Applied equazioni integrali lineari. Hoepli, Milano. Mathematics. Voß, H. (2007). Mathmode. URL www . ISO 1000 (1982). «SI units and recommenda- ctan . org / tex-archive / info / math / voss / tions for the use of their multiples and of certain mathmode/Mathmode.pdf. other units». In ISO Standards Handbook N. 2, International Organization for Standardization, Wikipedia (a). URL http://en.wikipedia. Geneva. 2ª edizione. org/wiki/Typographical_conventions_in_ mathematical_formulae. ISO 31/11 (1982). «Mathematical sign and sym- bols for use in physical sciences and technology». — (b). URL http://en.wikipedia.org/wiki/ In ISO Standards Handbook N. 2, International ISO_31. Organization for Standardization, Geneva. 2ª — (c). URL http://en.wikipedia.org/wiki/ edizione. Mathematical_notation. ISO 31/12 (1982). «Dimensionless parameters». — (d). URL http://en.wikipedia.org/wiki/ In ISO Standards Handbook N. 2, International Mathematical_symbols. Organization for Standardization, Geneva. 2ª edizione. . Massimo Guiggiani Knuth, D. (1992). The TEXbook. Addison-Wesley. Dipartimento di Ingegneria Meccanica, Kopka, H. e Daly, P. (1995). A Guide to Nucleare e della Produzione A LTEX – Document Preparation for Beginners Università di Pisa and Advanced Users. Addison-Wesley. Pisa, Italia guiggiani at ing dot unipi dot Lamport, L. (1994). LAT X: A Document Pre- E it paration System, User’s Guide and Reference Manual. Addison-Wesley. . Lapo F. Mori Dipartimento di Lesina, R. (1986). Il manuale di stile. Zanichelli, Ingegneria Meccanica, Bologna, 2ª edizione. Nucleare e della Produzione Università di Pisa NIST (2001). NIST Special Publication 330: The Pisa, Italia International System of Units (SI). URL http: lapo dot mori at ing dot unipi //physics.nist.gov/Document/sp330.pdf. dot it

14 Introduzione a X TE EX

Massimiliano Dominici

Sommario grafia digitale si chiamano Unicode e smart font 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=tex-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 Macroistruzioni con argomenti delimitati

Claudio Beccari

Sommario che consentono di arrivare ad un modesto risultato senza troppa fatica1. La collezione di macro con- Il pacchetto di macroistruzioni comunemente de- tenuta nel file latex.ltx mette a disposizione del finito LAT X non tratta mai delle macro con ar- E compositore un numero sterminato di macro che gomenti delimitati; esso stesso ne mette a dispo- agevolano ulteriormente la composizione, lasciando sizione del compositore un numero minimo. Con l’autore e il compositore liberi di concentrarsi sul i comandi primitivi dell’interprete T X è possi- E contenuto, piuttosto che sulla sua estetica. Le cen- bile definire macro con argomenti delimitati che tinaia di pacchetti di estensione disponibili negli si possono usare anche con LAT X. Queste macro E archivi internazionali estendono ulteriormente le possono risultare estremamente comode in certe funzionalità delle macro di LAT X. circostanze, specialmente quando si creano file di E Lo stesso succede quando si usano altri program- classe o pacchetti di estensione, dove permettono mi di composizione quali Omega (Ω) e Lambda, di identificare con maggiore facilità il significato oppure Aleph e Lamed, oppure ConT Xt o X T X di ogni argomento. L’esposizione viene eseguita E E E e X LAT X. servendosi di un problema concreto: il Registro E E Per rendere più spedito l’avvio della compila- delle Lezioni. zione, fin dall’inizio TEX è stato progettato con la capacità di leggere una volta per tutte il file Abstract plain.tex, o il file latex.ltx, o altri simili file, The macro package commonly known as LATEX trasformandone il contenuto in linguaggio macchi- does not describe any means for defining macros na, per poi scaricare la parte di memoria occupata with delimited arguments; furthermore it offers a da questa trasformazione in un file, detto di ‘for- very small number of them to the user. By means of mato’, nella fattispecie plain.fmt e latex.fmt, the primitive commands of the TEX interpreter it così che in seguito è più veloce caricare il file bi- is easy to define macros with delimited arguments nario di formato e si risparmia tutto il lavoro di that may be used also while using the other LATEX interpretazione e di trasformazione in linguaggio macros. This kind of macros may be very useful in macchina già fatto una volta per tutte. Quando si some instances, particularly when writing class or lancia LATEX direttamente dalla linea di comando package files, where they make it easy to identify o cliccando su di un opportuno bottone dello shell the function that any argument plays in the macro editor, in realtà si dà il comando di lanciare l’inter- expansion. The subject is described with the aid prete dicendogli anche quale file di formato usare, of a practical problem: the Lecture Log. in questo caso il formato latex.fmt. Quando è in azione, l’interprete legge il flusso di 1 Introduzione dati che gli arriva dal file sorgente, e assegna una categoria ad ogni oggetto (token) che legge; poi, a Le macroistruzioni, comunemente chiamate ‘ma- seconda della categoria, esegue quanto ogni token cro’, servono per far eseguire all’interprete tex una dice di fare; se si tratta di una semplice lettera, serie complessa di operazioni, che il compositore la accoda al testo precedentemente raccolto, se si non è costretto a riscrivere ogni volta per disteso. tratta di un segno di interpunzione lo inserisce nel L’interprete, che sia tex stesso o pdfetex o altro, testo con le opportune spaziature, eccetera. è un programma eseguibile che interpreta quanto Ma se si tratta di un comando, esamina se si è scritto nel file sorgente .tex, per eseguire la tratta di un vero comando primitivo, nel qual caso composizione del testo che vi è contenuto insieme lo esegue, altrimenti si tratta di una macro: in que- ai comandi di mark-up che dichiarano certe parti sto caso ne va a cercare la definizione (nel formato del testo come appartenenti a certe categorie, che caricato in memoria oppure nella parte di memoria vanno composte in questa o quella maniera. dove ha raccolto le macro definite dall’utente o L’interprete nella totalità dei casi non costringe il compositore a scrivere il testo inframmezzato ai 1. Qui non si discutono i pregi e i difetti di questa o quella collezione di macro; gli estimatori di plain TEX hanno comandi di composizione, siano essi cambiamenti dei buoni motivi per preferire questa collezione minimale di font, variazioni della giustezza o della giustifi- di macro, perché essa consente loro di specificare quello cazione, passaggio alla composizione della mate- che vogliono per le parti della composizione che già non matica, eccetera; anche la semplicissima collezione hanno una macro definita. Il fatto è che per comporre bene plain TEX richiede una enorme esperienza e non poca di macro contenuta nel file plain.tex permette attenzione; in parole povere un gran lavoro e quindi una al compositore di usare un set essenziale di macro notevole fatica.

27 ArsTEXnica Nº 5, Aprile 2008 Macroistruzioni con argomenti delimitati lette dai pacchetti di estensione), cerca anche se 2 Macro con argomenti delimitati gli argomenti sono delimitati o non lo sono, ed in Dopo questa lunga introduzione vale la pena di ogni caso ‘tokenizza’ gli argomenti tratti dal file di descrivere come, tecnicamente, si possono definire ingresso, esegue le formali sostituzioni nei segna- macro con argomenti delimitati. posto di ogni argomento, esamina se la definizione Innanzi tutto non si possono creare simili defini- del comando fa ricorso ad altre macro, ripete il zioni usando i comandi di alto livello messi a dispo- processo per ogni altra macro che incontra, finché sizione da LAT X: \newcommand o \renewcommand ha completamente sviluppato la macro iniziale e E oppure il loro parente stretto \providecommand o, il suo contenuto ed ha solo una lista di token non infine, \DeclareRobustCommand e le loro versioni ulteriormente sviluppabili; a questo punto esegue asteriscate. Questi comandi, infatti, evitano al com- in sequenza tutti questi token. positore di doversi preoccupare di molti dettagli e Sembra complicato e lo è; il vantaggio per l’u- di molte verifiche, e perciò isolano il compositore tente del sistema TEX è che questi non deve preoc- dalla effettiva definizione eseguita durante l’esecu- cuparsene, perché l’interprete fa tutto da solo. Al zione di quei comandi, definizione che alla fine si massimo l’utente può trarre giovamento dalla com- riduce all’esecuzione di uno dei quatto comandi prensione di questo meccanismo quando incontra primitivi dell’interprete TEX: \def, \edef, \gdef degli errori e deve provvedere in merito. e \xdef. Come si è visto nella sommaria descrizione fatta Il problema di questi quattro comandi è che sono sopra, l’interprete vede se la definizione di ogni ma- ‘primitivi’ non solo nel senso che sono all’origine di cro prevede argomenti delimitati, oppure se questi qualunque altro comando (macro) che possa essere argomenti sono semplici token non ulteriormen- definito tramite loro, ma anche nel senso traslato te sviluppabili ovvero sono stringhe di lettere e, del termine: nel senso, cioè, che ‘senza ragionare’ talvolta, ulteriori comandi, racchiusi dal compo- eseguono incondizionatamente quello che devono sitore dentro una coppia di parentesi graffe, che fare, con il rischio che essi vengano usati mala- costituiscono i delimitatori espliciti di default di mente dal compositore quando involontariamente ciascun argomento. Per esempio, se il composito- ridefinisce un comando del nucleo di LATEX; a causa re vuol comporre una tabella e vi vuole collocare di questo errore, LATEX smette (o può smettere) una cella che occupi due colonne con l’argomento di funzionare. Se dovesse succedere una cosa del costituito da una parola centrata ed evidenziata genere, la caccia all’errore deve essere ricercata per con il comando \emph, inserisce nel file sorgente la prima cosa nelle definizioni imprudenti fatte dal dichiarazione compositore stesso. Per noi non anglofoni c’è un metodo molto sem- plice ed economico per definire comandi diversi \multicolumn2c{\emph{Pippo}} da quelli del nucleo di LATEX: basta usare nomi italiani, invece che inglesi, come sono invece tutti dove i token 2 e c non necessitano di parente- i comandi interni di LATEX. si di gruppo perché sono due token non ulterior- Però il metodo corretto, e valido indipenden- mente scomponibili, mentre il terzo argomento di temente dalla lingua del compositore, è quello \multicolumn richiede le parentesi graffe che lo di eseguire la verifica che il nome del comando delimitano, così come il terzo argomento stesso sia effettivamente disponibile per una definizio- contiene un comando con un argomento formato ne: basta scrivere le proprie definizioni all’inter- da più lettere, che va quindi racchiuso a sua volta no di un file di stile con estensione .sty, da leg- fra parentesi graffe. gere nel preambolo del file di ingresso median- Si noti l’ambiguità delle parole che si stanno te il comando \usepackage, oppure far precede- usando per descrivere la funzione delle parentesi re il comando \makeatletter alle nuove defini- graffe; esse definiscono il loro contenuto come un zioni, che a loro volta devono essere seguite da gruppo, e in un certo senso ne costituiscono i deli- \makeatother. Volendo per esempio definire la mitatori; tuttavia esse non delimitano l’argomento, macro \pipe mediante il comando \def, basta nonostante le apparenze, ma definiscono il gruppo. scrivere nel preambolo: La mancanza di delimitatori è ancora più evi- \maketatletter dente se si va a cercare nel file latex.ltx la defi- \@ifdefinable{\pipe}{hdefinizionei} nizione di \multicolumn che, semplificando molto, \makeatother si riduce a Il comando \@ifdefinable, che contiene nel suo nome la ‘non lettera’ @, è il motivo per il quale h i \def\multicolumn#1#2#3{ definizione } bisogna premettere \makeatletter prima di farne uso, e poi ripristinare @ con la categoria di ‘non e, come si vede i tre argomenti #1, #2, e #3 non lettera’ dopo averne fatto uso. Per altro, il suddetto sono separati da nulla, nemmeno da spazi. comando \@ifdefinable controlla che il comando

28 Macroistruzioni con argomenti delimitati ArsTEXnica Nº 5, Aprile 2008 proposto sia effettivamente non ancora definito, \show\Cognome che non cominci per \end2 e sia diverso da \relax, \end{document} visto che questi due ultimi comandi giocano un \show mostrerebbe sullo schermo che \Cognome è ruolo importantissimo nel nucleo di LATEX. Riferendoci alla predisposizione di una classe una macro la cui definizione vale proprio Rossi. per comporre i registri delle lezioni, è possibile che Il comando \expandafter serve per alterare la sia necessario separare il nome dal cognome del sequenza delle operazioni: prima viene sviluppa- docente, per associare al cognome un significato ta la macro temporanea \@docente, che ridiventa particolare; per non costringere il compositore a la stringa introdotta nel processo di composizio- ricordarsi troppe regole, decidiamo che la stringa di ne e memorizzata mediante il comando \docente, caratteri contenenti il nome e il cognome, che verrà poi questa stringa viene elaborata dal comando usata più volte nella composizione del registro, \getcognome che assegna il solo cognome alla sia introdotta dal compositore (verosimilmente il macro \Cognome. docente stesso) come una stringa contenente un solo spazio di separazione fra nome e cognome3. 3 Il Registro delle Lezioni Questo unico spazio ci servirà da delimitatore Presso il Politecnico di Torino ogni docente deve del nome; potremo usare un altro carattere per compilare un Registro delle Lezioni formato da delimitare il cognome, per esempio un punto escla- una camicia e tanti intercalari quanti bastano5. mativo, sicuramente non presente nel cognome. La La camicia sulla prima pagina, figura 1, riporta nostra definizione sarà composta di due macro; la le solite intestazioni presenti nei documenti di qua- prima serve al docente per impostare il suo no- lunque università, cioè il nome e il logo; contiene minativo, che verrà memorizzato in una macro di poi il tipo di corsi di studi e la sede di svolgimento servizio; il secondo servirà ad isolare il cognome e dell’insegnamento, il nome dell’insegnamento con il definirà un’altra variabile temporanea da usare in suo codice; se questo insegnamento aggrega anche altre macro, in relazione al significato che vorremo studenti di altri corsi di studi, vanno elencati tutti i assegnare al cognome. Ecco dunque che avremo: codici e in chiaro la sigla di ciascun corso di laurea; ci vuole evidentemente il nome del docente e la \let\@docente\empty% Default iniziale sua facoltà di appartenenza (non necessariamente \def\docente#1{\def\@docente{#1}} coincidente con quella della facoltà a cui afferisce \def\getcognome#1 #2!{\def\Cognome{#2}} l’insegnamento); ci vuole l’anno accademico e il Si noti lo spazio fra il primo e il secondo argomento periodo didattico6. di \getcognome e il punto esclamativo che delimita La quarta pagina della camicia, figura 2, contiene la fine del cognome. due tabelle: una serve per indicare quanta didattica Ecco, questa è la definizione di una macro ad riceve ogni studente secondo l’organizzazione del argomenti delimitati; se si preparasse il seguente corso, e la seconda indica quanta didattica hanno file .tex e lo si compilasse4: fornito il docente e i suoi collaboratori: il corso potrebbe essere diviso in squadre e, a seconda \documentclass{minimal} della tipologia di attività, potrebbero esserci diversi \makeatletter docenti compresenti; le attività sono divise per \let\@docente\empty tipologie identificate da sigle: L per le lezioni, EA \def\docente#1{\def\@docente{#1}} per le esercitazioni in aula, EL per le esercitazioni \def\getcognome#1 #2!{\def\Cognome{#2}} in laboratorio sperimentale, eccetera. \begin{document} Gli intercalari, figura 3, contengono una tabella \docente{Mario Rossi} per ogni docente (principale o collaboratore) che \makeatletter forma una ‘riga’ di una grande tabella che prende \expandafter\getcognome\@docente! tutta la pagina. Ogni riga deve contenere oltre la data, l’orario, 2. Tutti i comandi che terminano un ambiente sono indi- cati dal compositore con \end{hambientei}, ma, dopo un la tipologia di didattica a cui si riferisce quella poco di amministrazione e di pulizia eseguito dal comando registrazione, le ore complessive dedicate a quel- \end, il comando che effettivamente chiude l’ambiente è la tipologia di attività, la lingua in cui si svolge costituito dal nome stesso dell’ambiente preceduto da \end senza l’uso delle graffe. In altre parole, l’ambiente quote 5. La camicia è una cartellina costituita, volendo, da un viene effettivamente chiuso da \endquote. foglio A3 piegato a metà; ogni intercalare è un foglio A4 3. Per i nomi e/o i cognomi formati da più parole, biso- inserito ordinatamente dentro la cartellina. In pratica, vista gnerà unirle, lasciando le maiuscole, in modo che la stringa la rarità delle stampanti A3 negli uffici dei docenti, si può contenga effettivamente un solo spazio: PierPaolo, invece stampare tutto su fogli A4, mettere la quarta pagina di di Pier Paolo; DellaCasa invece di Della Casa. Non è una copertina come ultima pagina, con la parte scritta all’esterno regola troppo complicata da ricordare. del fascicolo, e infine pinzare il tutto con punti metallici. 4. Si ricorda che la classe minimal serve appunto per col- 6. In altre università i corsi, forse, sono solo annuali laudare le definizioni di nuove macro; che \begin{document} e/o semestrali; presso il Politecnico ci sono corsi annuali, esegue anche \makeatother e che il segno serve per semestrali, trimestrali e bimestrali; si svolgono in periodi evidenziare gli spazi fra i caratteri. successivi, detti periodi didattici.

29 ArsTEXnica Nº 5, Aprile 2008 Macroistruzioni con argomenti delimitati l’attività, la squadra per la quale l’attività è stata il titolare per la riga 1 e un collaboratore per la svolta, il numero di docenti compresenti; infine il riga 5; solo il contenuto della lezione deve variare, nome del docente specifico e la sua firma, che ovvia- evidentemente, ancorché esso debba essere lo stesso mente dovrà essere autografa, quindi la classe del per le tre righe 2, 3 e 4. documento deve provvedere solo alla composizione Il codice della riga 1, relativa al solo titolare il del riquadro destinato alla firma. Ovviamente il ri- cui nome è già stato memorizzato con i comandi quadro più grande di questa ‘riga’ contiene il testo specificati per creare la prima pagina della camicia, che descrive la materia trattata in quella lezione. dovrebbe essere semplicemente: Come si vede, il registro richiede una composi- zione piuttosto complessa; la necessità di ripetere \begin{lezione}{2004-09-22}% alcune informazioni in righe successive dove cam- {12:30--14:30}{L}{2} bia solo il nome del docente richiede la formazione Introduzione al corso. di liste; la necessità di eseguire i semplici calcoli richiesti implica altre liste, docente per docente; la Ripasso ... più comuni. necessità di eseguire un minimo di controlli richiede \end{lezione} ulteriori comandi. Il codice per la riga 5, relativo ad un solo collaboratore dovrebbe essere semplicemente: 4 La classe per la composizione dei registri \begin{lezione}{2004/09/24}% {10:30--12:30}{EA}{2}(1,2/2,EN)% L’idea di creare una classe per questo tipo di com- [GianPaolo Neri] posizione, non è solo quella di comporre bene il Esercizi 1.4, ..., 1.7 registro mediante l’uso dello strumento compositi- \end{lezione} vo migliore, ma anche di sfruttare LATEX per fargli eseguire le scritture ripetitive, nonché per fargli Infine per le tre righe 2, 3 e 4 occorre la lista dei fare i calcoli necessari; le capacità di calcolo di docenti: LATEX sono piuttosto limitate, ma, senza nemmeno ricorrere al pacchetto di estensione calc, si riesce a \begin{lezione}{2004/09/23}% fare tutte le somme necessarie per la quarta pagina {10:30--12:30}{EA}{2}(3,1/2)% della copertina sia per righe sia per colonne. [Mario Rossi,Fabio Bianchi,% Le liste di docenti e di tipologie di attività didat- GianPaolo Neri] tiche richiedono altre liste. I controlli potrebbero Nozioni elementari sui trasformatori. anch’essi avvantaggiarsi dalle macro con argomenti delimitati. Esercizi 1.1, 1.2, 1.3 Qui non si descriverà tutta la classe; la descri- \end{lezione} zione completa può essere ottenuta compilando con LATEX il codice documentato contenuto nel file Questa descrizione permette di capire che ci registro07.dtx, Beccari (2007). La documenta- vogliono due diversi tipi di argomenti facoltativi: zione serve per la corretta manutenzione del codice il primo è racchiuso fra parentesi tonde e contiene e non è certamente una lettura divertente. Qui ci nell’ordine: (a) il numero di docenti compresenti; si limita solamente a descrivere sommariamente (b) il numero della squadra riferito al numero totale quello che interessa per la spiegazione delle macro di squadre; (c) la lingua in cui si svolge l’attività. con argomenti delimitati. Il secondo tipo di argomento facoltativo, racchiu- Si prevede che il docente componga due file; so fra parentesi quadre, indica una lista di docenti il primo sarebbe il master-file che contiene solo i cui nomi e cognomi sono separati da virgole senza le informazioni per la camicia e per eseguire la spazi superflui8, eventualmente ridotta ad un solo lettura del secondo; questo secondo file dovrebbe nominativo se il docente corrispondente, diverso contenere solo le informazioni per gli intercalari; dal titolare, è l’unico presente in aula. Non c’è questa divisione dei ruoli non è essenziale, ma è mai bisogno di indicare espressamente il titolare, comoda per molti motivi, specialmente quando tranne nei casi in cui egli sia compresente con altri sono coinvolti corsi omonimi paralleli7. docenti. Per non dover riscrivere le righe 2, 3 e 4 del- Si noti che non è necessario specificare la lingua l’intercalare della figura 3, bisogna che il codice italiana, perché è quella di default; così non è ne- da inserire nel file sorgente sia ridotto al minimo cessario specificare le squadre se ce ne è una sola; indispensabile; nello stesso tempo il codice non non è nemmeno necessario specificare il numero deve essere molto diverso da quello usato per le di docenti compresenti se ce ne è uno solo; quindi righe 1 e 5, che si riferiscono ad un solo docente: l’argomento facoltativo fra parentesi tonde ha, per

7. Questi sono i corsi che dovrebbero procedere in modo 8. In generale non è necessario spezzare le righe come sincrono, visto che contengono allievi divisi fra i corsi in fatto sopra, ma se lo si fa, è necessario inserire i segni di base alla lettera iniziale del cognome. commento senza lasciare spazi superflui.

30 Macroistruzioni con argomenti delimitati ArsTEXnica Nº 5, Aprile 2008

Elettrotecnica II  Mario Rossi  07AUQBT, 07AUQBW, 07AUQCT/IFM+FIS+IFF POLITECNICO DI TORINO FACOLTÀ DI INGEGNERIA DELL’INFORMAZIONE

Corsi di Laurea – Sede di Torino

ORGANIZZAZIONE DEL CORSO

Tipologia di didattica Numero ore N. squadre N. docenti compresenti L Lezioni 40 1 1 AL Altre lezioni 0 0 EA Esercitazioni in aula 4 2 3 Registro del corso di ELETTROTECNICA II EL Esercitazioni in laboratorio 0 0 TU Tutorato 0 0 07AUQBT, 07AUQBW, VG Visite guidate 0 0 LI Laboratori progettuali 0 0 07AUQCT / IFM+FIS+IFF Carico didattico totale 44

Prof. MARIO ROSSI Dipartimento di Elettronica

NUMERO DI ORE DI ATTIVITÀ PRESTATA

Docente/coadiutore Qualica Facoltà L AL EA EL TU VG LI TOT Anno Accademico 2004/2005 Mario Rossi PO I3 38 2 40 1o PD Fabio Bianchi RC I3 4 4 GianPaolo Neri PA I3 4 4 Totale 38 10 48

Visto IL PRESIDE DELLA FACOLTÀ IL DOCENTE ...... (prof. Mario Rossi)

Figura 1: Prima pagina della camicia Figura 2: Quarta pagina della camicia

Insegnamento: Elettrotecnica II ...... Codici: 07AUQBT, 07AUQBW, 07AUQCT

Data Tipo No Docenti Argomento Docente compresenti Introduzione al corso. 2004-09-22 L 1 Ripasso di elettrotecnica; le leggi delle tensioni e delle corren- Mario Rossi ti, i nodi indipendenti, i tagli indipendenti, le maglie Orario N.ore Squadra indipendenti; le equazioni del connettore. Le leggi co- Lingua Firma di squadre stitutive dei componenti più comuni 12:3014:30 2 1/1 IT Data Tipo No Docenti Argomento Docente compresenti Nozioni elementari sui trasformatori. 2004/09/23 EA 3 Esercizi 1.1, 1.2, 1.3 Mario Rossi Orario N.ore Squadra Lingua Firma di squadre 10:3012:30 2 1/2 IT Data Tipo No Docenti Argomento Docente compresenti Nozioni elementari sui trasformatori. 2004/09/23 EA 3 Esercizi 1.1, 1.2, 1.3 Fabio Bianchi Orario N.ore Squadra Lingua Firma di squadre 10:3012:30 2 1/2 IT Data Tipo No Docenti Argomento Docente compresenti Nozioni elementari sui trasformatori. 2004/09/23 EA 3 Esercizi 1.1, 1.2, 1.3 GianPaolo Neri Orario N.ore Squadra Lingua Firma di squadre 10:3012:30 2 1/2 IT Data Tipo No Docenti Argomento Docente compresenti Esercizi 1.4, 1.5, 1.6, 1.7 2004/09/24 EA 1 GianPaolo Neri Orario N.ore Squadra Lingua Firma di squadre 10:3012:30 2 2/2 EN Data Tipo No Docenti Argomento Docente compresenti Alcuni accenni alle funzioni analitiche e alle loro proprietà. La 2004/09/29 L 1 distribFigurauzione di 3D:ir Primeac e la su righea trasf diorma unta. intercalare Mario Rossi Le proprietà delle trasformate di Laplace, in particolare quelle Orario N.ore Squadra che riguardano le operazioni integro-di"erenziali. Lingua Firma di squadre Esempi (#no all'esempio 2.8) 12:3014:30 2 1/1 IT Data Tipo No Docenti Argomento Docente compresenti Residui e loro applicazione allo31sviluppo in fratti semplici. 2004/09/30 L 1 Esercizi di trasformazione e di antitrasformazione. Mario Rossi Applicazione dei residui allo sviluppo in fratti semplici. Esempi. Orario N.ore Squadra Lingua Firma di squadre 10:3012:30 2 1/1 IT Data Tipo No Docenti Argomento Docente compresenti Esercizi del capitolo 2. 2004/10/01 L 1 Inizio della trattazione del metodo simbolico generalizzato. Primi Mario Rossi esempi (3.1). Orario N.ore Squadra Lingua Firma di squadre 16:3018:30 2 1/1 IT Data Tipo No Docenti Argomento Docente compresenti Esempi 3.2, 3.3, 3.4, 3.5 con chiari#cazioni di carattere teorico. 2004/10/06 L 1 Mario Rossi Orario N.ore Squadra Lingua Firma di squadre 12:3014:30 2 1/1 IT Data Tipo No Docenti Argomento Docente compresenti Normalizzazione 2004/10/07 L 1 Esempi 3.5, 3.6 e 3.7, 3.8, 3.9, 3.10 con chiari#cazioni di carat- Mario Rossi tere teorico e sui circuiti equivalenti dei trasformatori. Orario N.ore Squadra Lingua Firma di squadre 10:3012:30 2 1/1 IT ArsTEXnica Nº 5, Aprile 2008 Macroistruzioni con argomenti delimitati così dire, una importanza minore rispetto a quel- comando condizionale, oppure la seconda clausola lo racchiuso fra parentesi quadre e all’occorrenza oltre la fine dell’espressione condizionale; per esem- quello può mancare anche se questo è presente. pio, se si volesse controllare se questa pagina sia Similmente i tre parametri dell’argomento fa- dispari si potrebbe scrivere in termini di comandi coltativo fra parentesi tonde sono elencati gerar- primitivi, estesi con i due comandi di babel citati chicamente, nel senso che indicare il primo non sopra: richiede di indicare il secondo e il terzo, ma in- dicare il secondo richiede che si indichi il primo; \expandafter\ifodd\value{page}% all’occorrenza, se va bene il valore di default, gli \bbl@afterelse dispari\else argomenti non indicati possono essere omessi, pur- \bbl@afterfi pari\fi ché non si omettano le virgole; in altre parole va I separatori \else e \fi, benché siano anche dei bene scrivere (,,EN) ma non va bene indicare so- comandi primitivi, non vengono eseguiti, quando lamente (EN): al contrario si può indicare sia (2) sono letti come separatori, ma servono solo per deli- sia (2,,), perché producono lo stesso risultato. mitare la prima clausola dalla seconda; la chiusura A parte queste specificazioni, ci si rende subito dell’istruzione condizionale \ifodd viene eseguita conto che sia il primo, sia il secondo argomento dal comando \fi contenuto dentro la definizione. facoltativo sono liste di stringhe separate da virgo- Tornando alle liste formate dai comandi facolta- le; la tipica situazione nella quale per esaminarle tivi della classe dei registri, vediamo dunque che bisogna fare uso di macro con argomenti delimitati. la separazione dei parametri fra parentesi tonde si può eseguire facilmente con i comandi seguenti10: 5 Alcune macro con argomenti delimitati \def\set@numeri(#1){\lista@numeri#1,,,!} % In teoria una macro può avere simultaneamente \def\lista@numeri #1,#2,#3,#4!{% sia argomenti delimitati sia argomenti non deli- \def\@tempA{#1}% mitati; per chiarezza di programmazione sarebbe \ifx\@tempA\empty\NumDoc=\@ne\relax meglio non ridursi a queste situazioni ibride, ma \else\NumDoc=#1\relax\fi non è vietato. Una macro avente solo argomenti % delimitati segue la sintassi seguente9: \def\@tempA{#2}% \def\hmacroihdelim0i#1hdelim1i#2hdelim2i... % \ifx\@tempA\empty\def\Squadre{1/1}% #nhdelimni{hdefinizionei} \else\def\Squadre{#2}\fi % con n ≤ 9. Il nome della hmacroi può essere qual- \def\@tempA{#3}% siasi, ma per evitare inconvenienti è meglio fare \ifx\@tempA\empty\def\Lingua@{\@Lingua}% uso del test \@ifdefinable. Gli argomenti, come \else\def\Lingua@{#3}\fi è noto, non possono essere più di nove, e corri- }% spondentemente non ci possono essere più di dieci delimitatori. Questi a loro volta possono essere Il trucco è semplice: \set@numeri estrae l’ar- costituiti da qualunque stringa, anche dei semplici gomento facoltativo delimitato dalla coppia di spazi, o, eventualmente, delle stringhe che hanno parentesi tonde (i delimitatori), poi lo passa a la struttura di comandi veri o non definiti; solo \lista@numeri, allungandolo con altri tre ele- hdelim0i non può essere una lettera, perché po- menti della lista ‘vuoti’, poi completa la lista trebbe essere confusa con l’ultima lettera della delimitandola con un punto esclamativo. hmacroi. \lista@numeri a sua volta prende la lista, even- Esaminando il codice del pacchetto babel, si tualmente allungata, ma la separa in quattro ele- possono per esempio trovare le definizioni di due menti: il primo dovrebbe rappresentare il numero comandi usati molto frequentemente in quel codice, di docenti compresenti, il secondo il numero relati- introdotti apposta per rendere ‘robusti’ i comandi vo di squadre e il terzo la lingua; se il compositore condizionali; semplificando un poco, si tratta di: avesse specificato solo il primo, i tre elementi vuoti \def\bbl@afterelse#1\else#2\fi{\fi#1} aggiunti alla lista assicurano che l’insieme di ele- \def\bbl@afterfi#1\fi{\fi#1} menti che formano l’argomento facoltativo siano tutti presenti, eventualmente vuoti; se invece il La lettura di questi due comandi permette di capi- compositore li ha specificati tutti e tre, il quarto re che servono per ‘gettare’ la prima clausola di un argomento raccoglie tutto quel che resta della lista, 9. Qui si fa un esempio che usa \def come comando di eventualmente una sequenza di virgole. Le istru- definizione; si potrebbero usare anche \gdef, \edef e \xdef; zioni successive copiano ciascun valore della lista \def e \edef eseguono definizioni locali al gruppo entro il quale vengono eseguite, mentre \gdef e \xdef eseguono 10. \NumDoc è un contatore interno definito ‘alla plain definizioni globali; \def e \gdef eseguono le definizioni TEX’, con il quale è possibile fare le assegnazioni in modo senza sviluppare le macro eventualmente presenti nella più agevole, ma non li si può usare ‘alla LATEX’, per esempio, hdefinizionei, mentre \edef e \xdef le sviluppano. per i riferimenti incrociati.

32 Macroistruzioni con argomenti delimitati ArsTEXnica Nº 5, Aprile 2008 in una macro temporanea \@tempA; questa viene \@ripetihmacroi:=hlistai\do{hcomandii} confrontata con la macro vuota \empty; se entram- be sono vuote, allora assegna il valore di default, dove hmacroi e hlistai sono argomenti delimitati. altrimenti assegna il parametro specificato. Questo è un tipico costrutto informatico per La lista dei docenti è più complicata da separare ripetere una serie di hcomandii finché una certa nei suoi elementi, perché i nominativi dei docenti variabile segue una certa enumerazione rappresen- sono in numero imprecisato e, memoria dell’ela- tata da numeri, da lettere, o da elementi ordinati boratore permettendo, in numero arbitrariamente in una lista. Il nucleo di LATEX contiene una simile grande. Quindi bisogna estrarne uno alla volta e macro \@for la cui sintassi è identica a quella di ciclicamente verificare che cosa resta nella lista. \@ripeti, ma il cui svolgimento è diverso, perché è Ma per ciascun nominativo estratto bisogna an- prevista per un uso più generale. Nello stesso tempo che comporre la riga nel registro e raccogliere i i delimitatori := e \do, al di là della loro funzione dati numerici di impegno per ogni tipo di attività strettamente meccanica di delimitatori, esprimono eseguito dal docente che si sta elaborando. concetti che al compositore sono più chiari di qua- Un primo comando carica la lista dei docenti lunque altro segno scelto a caso, anche se potrebbe estraendola dall’argomento fra parentesi quadre: svolgere la stessa funzione delimitatrice. \@ripeti inizialmente esamina la lista dopo \def\set@docente[#1]{% averla copiata in \@tempA; se questa è vuota, non \edef\lista@docenti{#1}% fa nulla, ma se contiene qualcosa allora procede e % seguono altri comandi inessenziali per passa i suoi argomenti al comando ad argomenti % questa esposizione; infine si esegue: delimitati \@riciclo; si vede che la lista su cui \componi@scatole} operare è prolungata con altri due elementi vuoti Successivamente la \lista@docenti viene usata e il delimitatore finale è costituito dal delimitatore dal comando ciclico che ripete la composizione della \@@ prima di indicare gli ultimi due argomenti non riga dell’intercalare per ogni docente elencato: delimitati. \@riciclo prende cinque argomenti, i primi tre \def\componi@scatole{% dei quali sono delimitati da virgole e terminati con \@ripeti\@@@docente:=\lista@docenti\do{% \@@; ma si noti: i primi tre argomenti contengono \expandafter\getcognome\@@@docente!% rispettivamente il primo nominativo, il secondo \expandafter\ifx nominativo (eventualmente vuoto) e poi la lista \csname\Cognome\endcsname\relax% residua dei nominativi dopo i primi due (la lista re- \expandafter\gdef sidua potrebbe essere costituita da una lista vuota, \csname\Cognome\endcsname{EA=0}% contenente solo le virgole). \fi Viene assegnato il primo nominativo alla \start@@boxes\lez@i\lez@ii\lez@iii% hmacroi che nel nostro caso è \@@@docente, poi \lez@iv\lez@v\lez@vi\lez@vii si esegue la lista di comandi contenuta nel quinto \emettiscatola argomento. Fatto questo la macro deve decidere se }} proseguire o terminare. Per questo scopo assegna il secondo elemento del- \def\@ripeti#1:=#2\do#3{% la lista al quarto argomento, cioè a \@@@docente; \expandafter\def\expandafter% se questo è vuoto non bisogna continuare, altrimen- \@tempA\expandafter{#2}% ti bisogna cominciare un nuovo ciclo; nello stesso \ifx\@tempA\@empty \else tempo bisogna anche usare gli argomenti residui. \expandafter\@riciclo#2,,\@@#1{#3}\fi Se dunque il prossimo nominativo è vuoto, viene }% chiamato il comando \@finisci che si mangia tut- ta la lista rimanente e tutti gli argomenti rimanenti \def\@riciclo#1,#2,#3\@@#4#5{\def#4{#1}% senza fare assolutamente nulla d’altro; altrimenti #5% viene chiamato di nuovo il comando \def#4{#2}% \@riciclo accodando alla lista un oggetto qualsiasi, che non \ifx #4\@empty verrà mai esaminato, perché nella lista è preceduto \expandafter\@finisci% da almeno un nominativo vuoto. \else \expandafter\@riciclo\fi Un altro uso particolare delle macro con argo- #2,#3,\@nil\@@#4{#5}% menti delimitati è quello con il quale viene costruita } una lista di informazioni nella macro identica al cognome del docente. Si riprendono alcuni coman- \def\@finisci#1\@@#2#3{}% di riportati sopra, ma sui quali si è evitato di fare commenti: Il comando \componi@scatole esamina la lista e per ogni docente compreso nella lista definisce \expandafter\ifx \@@@docente; si noti il costrutto: \csname\Cognome\endcsname\relax%

33 ArsTEXnica Nº 5, Aprile 2008 Macroistruzioni con argomenti delimitati

\expandafter\gdef eseguite mediante i comandi primitivi; vi si tro- \csname\Cognome\endcsname{EA=0}% vano anche molti esempi di uso di simili macro. \fi Il file latex.ltx (che si trova nella distribuzio- Questa serie di brevi comandi serve per definire una ne del sistema TEX all’indirizzo .../texmf-dist/ macro col nome identico al cognome del docente: tex/latex/base/) ne contiene moltissime altre; se il nominativo del docente era Mario Rossi, il ovviamente si possono ristudiare le macro appena descritte nel file registro07.dtx, Beccari (2007) comando \Cognome, estratto con \get@cognome, o meglio, nella sua composizione mediante LAT X. contiene Rossi come sua definizione. E Quello che si è esposto qui non serve per spa- Ricordiamo che i comandi \csname e \end- ventare i possibili utenti, ma per indirizzare gli csname racchiudono una stringa con la quale co- scrittori di file di classe o di estensione verso co- struiscono il nome di una macro; l’\expandafter mandi che rendono il codice più leggibile e quindi messo prima del test \ifx serve per sviluppare più facile da correggere o da modificare. \csname prima di eseguire il test; \csname esami- Si consiglia di usare delimitatori intelligibili; non na i token successivi fino al comando \endcsname sempre è necessario, ma più complicato è un co- e, se ce ne è qualcuno sviluppabile, lo sviluppa; mando, tanto più espliciti dovrebbero essere i nomi nel nostro esempio sviluppa \Cognome e quindi la dei comandi e quelli dei delimitatori; così facen- coppia \csname e \endcsname crea il nome della do, il codice sarà immediatamente comprensibi- macro \Rossi con la particolarità che le assegna di le senza bisogno di complicati commenti o frasi default l’equivalenza con \relax nel caso che que- circonvolute. sto nome di macro non abbia già una definizione: la Certamente si sconsiglia vivamente di usare que- stessa cosa succede con il comando successivo. Tut- sti comandi nel corpo di un file sorgente di un to il costrutto nel nostro esempio diventa quindi documento da comporre; se li si usa, è bene far- equivalente a: lo in file di classe o di estensione. D’altra parte \ifx\Rossi\relax \gdef\Rossi{EA=0}\fi Leslie Lamport, il padre di LATEX, è stato piut- Tutta quella lunga sequela di comandi diventa un tosto esplicito: egli ha definito e usato moltissimi semplice trucco per procedere nella stessa maniera comandi con argomenti delimitati nel nucleo di qualunque sia il cognome del docente. LATEX, ma non ne ha lasciato praticamente nessu- In relazione alle righe 2, 3 e 4 della figura 3, no a disposizione dei compositori; questi li possono dopo l’esecuzione dei comandi ciclici eseguiti nello usare (senza saperlo: per esempio quando usano sviluppo della lista di nominativi, esisteranno le il comando \cline per comporre tabelle; quale macro \Bianchi che vale EA=0,EA=2; \Rossi che delimitatore viene usato?) e non ha creato nessun vale LL=2,EA=2 grazie al fatto che prima di quella comando di alto livello per definirli. Questo è un esercitazione in aula il docente aveva già fatto una segno evidente che si tratta di cose delicate da non lezione di due ore, e \Neri che vale EA=0,EA=2. lasciare in mano al compositore, il quale è invece Tutte queste liste verranno poi esaminate come invitato a concentrarsi sul contenuto, piuttosto che argomenti delimitati da altre macro; i delimitatori su come comporlo. ora sono alternativamente un segno di = e una virgola; quest’ultima serve per isolare un elemento Riferimenti bibliografici alla volta, mentre il primo serve per separare il tipo Beccari, C. (2007). «Il pacchetto registro07». di attività didattica dalle ore svolte. Nuovamente registro07.dtx. URL ftp://ftp.polito.it/ due macro ad argomenti delimitati serviranno per pub/tex/polito/registro/registro07.zip. estrarre gli elementi della lista e, all’interno di que- ste, il codice dell’attività e il tempo corrispondente. Knuth, D. E. (1990). The TEXbook, volume A Esse serviranno per comporre l’ultima tabella della di Computers and Typesetting. Addison Wesley, figura 2 per inserire i numeri giusti nelle caselle 18ª edizione. corrette e per fare le somme per colonne e per righe. . Claudio Beccari 6 Conclusione claudio dot beccari at alice.it Nel TEXbook, (Knuth, 1990, capitolo 20 e appen- dice D), si descrivono le macro con le definizioni

34 HyPlain, più lingue insieme anche in Plain

Enrico Gregorio

Sommario È bene ricordare una delle particolarità di TEX. All’avvio del programma, con un metodo che di- Si descrive un sistema per abilitare la cesura a pende dal sistema operativo e dalla distribuzione, fine riga in più lingue usando Plain T X, insie- E l’interprete T X (che può anche essere pdfT X) me a un’interfaccia per definire lingue e le loro E E carica un formato, cioè uno stato iniziale. La mag- convenzioni. gior parte degli utenti usa LATEX, ma non si è certo ristretti a questo. La creazione del formato Abstract coinvolge l’uso di iniTEX, una versione speciale We describe a system for enabling hyphenation in del programma, ed è eseguita automaticamente, di solito in fase di installazione; tuttavia a volte è several languages under Plain TEX, along with an interface to define the used languages and their necessario rifarla, per esempio proprio per abilitare A conventions. nuove lingue con babel in LTEX. In questo articolo si farà riferimento a TEX, ma tutto vale anche per 1 Introduzione pdfTEX o X TE EX. Nel 1989 arrivò TEX versione 3 (Knuth, 1989), Nella giovinezza di TEX, cioè prima della versio- con la possibilità di inserire in un singolo formato ne 3, ogni formato poteva contenere l’insieme delle le regole di cesura anche per 256 lingue diverse regole di cesura a fine riga per una sola lingua. Con e subito si cercò di sfruttare l’opportunità per un trucco piuttosto oscuro era in realtà possibile creare formati compatibili con più lingue. Il docu- inserire le regole per due lingue, ma la faccenda mento più semplice su cui far girare iniTEX per era davvero complicata. ottenere un formato in cui sia possibile scrivere A quell’epoca LATEX era poco usato per lavori di correttamente in inglese e in italiano è matematica, dato che gli ambienti per il trattamen- \input plain to delle formule si riducevano a equation e eqnarray. \language1 Di buono aveva la numerazione automatica e i rife- \input ithyph rimenti incrociati; troppo poco per farlo preferire \language0 a AMS-TEX, il formato basato su Plain creato \def\english{\language0 } da Michael Spivak per l’American Mathematical \def\italian{\language1 } Society. \dump Come si faceva per avere le cesure corrette in Con il formato creato da questo si possono ave- italiano, visto che la versione standard di Plain re le cesure corrette sia in inglese americano che forniva le regole per l’inglese americano? C’erano in italiano, basta dichiarare all’inizio del proprio due modi: la prima soluzione era di ignorare il pro- documento la lingua preferita. Si può anche avere blema, con cesure inaccettabili come ‘fas-tidio’. La un documento in cui le lingue coesistono, basta seconda era di modificare il formato Plain in modo dichiarare la lingua in un gruppo. che caricasse le regole per la cesura dell’italiano Non è qui il luogo per un’analisi di come funziona che Claudio Beccari aveva prodotto. la scelta delle regole di cesura; basti sapere che Il formato Plain viene creato con iniT X dal E T X tiene conto del valore assegnato alla variabile documento plain.tex il quale a un certo punto E \language e che contiene la riga \language=0 \input hyphen \language0 e bastava sostituirla con sono modi del tutto equivalenti di assegnare a questa variabile il valore zero. TEX associa un in- \input ithyph sieme di regole al valore della variabile; perciò, con l’esempio precedente, quando \language va- rinominando il documento come plainit.tex. le zero si useranno le regole inglesi (lette tramite Ai tempi la riga di comando non faceva molta \input plain), mentre quando vale uno si useran- paura: non c’erano altri modi per lavorare, su certe no quelle italiane. Conseguenza di questo è che piattaforme! Per chi usava il Macintosh c’erano per disabilitare le cesure è sufficiente assegnare il OzTEX o Textures con i quali creare un nuovo valore 255 a \language, visto che è alquanto impro- formato era molto semplice. babile che si siano definite le regole per 256 lingue,

35 ArsTEXnica Nº 5, Aprile 2008 HyPlain, più lingue insieme anche in Plain questo vale anche in LATEX. Tuttavia, se il valore è modo da rendere più facile il passaggio da una lin- un intero non compreso fra 0 e 255, verranno usate gua all’altra e offrire un’interfaccia per aggiungere le regole come per il valore 0. Si veda l’Appendice H codice da eseguire quando si passa a una lingua del TEXbook. diversa. È evidente che l’interfaccia proposta è troppo Lo scopo di questo articolo non è tanto di de- primitiva, in realtà occorre fare qualcos’altro; per scrivere un pacchetto di uso probabilmente molto esempio, per avere le cesure corrette con parole limitato, quanto di scoprire qualcuno dei trucchi precedute dall’apostrofo in italiano è necessario che ho usato e che possono essere utili anche in dare il comando altre situazioni.

\lccode‘\’=‘\’ 2 Il pacchetto HyPlain perché TEX abbandona la sillabazione se in una se- Il pacchetto consiste di tre documenti: hyplain, quenza di caratteri ne compare uno il cui \lccode hyrules e hylang, tutti con estensione .tex. Il sia zero.1 Inoltre l’italiano permette di spezzare primo è quello su cui si fa girare iniTEX, il secondo anche le ultime due lettere di una parola, a diffe- quello in cui si definisce l’interfaccia utente. Il terzo renza dell’inglese, che ne richiede almeno tre sulla è modificabile dall’utente, che può scegliere quali nuova riga. Dunque occorre che la definizione di lingue abilitare e definire le convenzioni da usare \italian sia modificata con nelle varie lingue. Non discuterò qui l’installazione del formato \def\italian{\language1 prodotto nelle varie distribuzioni, visto che chi usa \lccode‘\’=‘\’ Plain o i suoi derivati è abituato a mettere le mani \righthyphenmin2 } a basso livello. Su un sistema Unix, per esempio con TEX Live, è sufficiente la seguente sequenza di Analogamente occorre ridefinire \english per comandi: disfare ciò che \italian può avere fatto: $ tex -ini hyplain \def\english{\language1 ... \lccode‘\’=0 Beginning to dump on file hyplain.fmt \righthyphenmin3 } ... $ ln -s ‘which tex‘ hyplain Ovviamente la situazione si complica di molto se invece di due sole lingue se ne hanno di più, cia- per avere nella directory sia il formato che un scuna con le sue convenzioni e necessità. Si pensi eseguibile richiamabile dalla linea di comando con al francese che richiede spaziature prima di certi ./hyplain. Si può naturalmente trasferire il file segni di interpunzione e molte altre cose. hyplain.fmt e l’eseguibile in luoghi opportuni, Daniel Flipo e Laurent Siebenmann crearono quali siano dipende dalla distribuzione. proprio per le esigenze del francese il pacchetto Su questo formato è possibile poi sovrapporre HyMaster (Siebenmann, 1993), che risolveva in AMS-TEX al modo usuale: modo decente certi problemi. A partire da quello mi creai un sistema meno complesso che poteva $ tex -ini -jobname hyamstex \&hyplain servire le mie esigenze e quelle dei colleghi, allora a ... * \input amstex Catania. Poi me ne dimenticai, perché nel frattem- ... A po LTEX aveva incorporato, tramite il pacchetto * \dump amslatex, le funzionalità di AMS-TEX. Inoltre ba- ... bel (Braams, 1991) permetteva non solo di defini- Beginning to dump on file hyamstex.fmt re le regole di cesura per più lingue, ma anche di ... modificare ‘al volo’ le parole fisse. $ Non c’era quindi più bisogno di rimanere anco- rati a AMS-TEX e la maggior parte dei matema- (con $ indico l’invito della shell, con * quello di tici si trasferì a LATEX, soprattutto con l’uscita di TEX e con ... riassumo i messaggi inviati sullo LATEX 2ε, nel 1994. schermo). Fu con grande stupore che lessi sul forum del Il contenuto di hyplain.tex è molto semplice: g It un intervento2 in cui si chiedeva aiuto per in- u 1 \catcode‘\{=1 stallare un formato basato su Plain che riconobbi 2 \catcode‘\}=2 come le mie antiche macro! Da quella discussione 3 \catcode‘\@=11 si sviluppò l’idea di migliorare quel pacchetto, in 4 5 \let\@@input\input 1. La notazione ‘\’ permette di riferirsi al codice ASCII del carattere che compare dopo la barra rovescia. 6 2. http://www.guit.sssup.it/phpBB2/viewtopic.php? 7 \def\input hyphen {% t=1451 8 \let\input\@@input

36 HyPlain, più lingue insieme anche in Plain ArsTEXnica Nº 5, Aprile 2008

9 \input hyrules } Naturalmente l’utente non potrà scrivere diret- 10 tamente questi comandi, a cui si accede indiretta- 11 \@@input plain mente; infatti il codice di categoria di _ ritornerà 12 quello usuale. 13 \def\fmtname{plain % Uno di questi comandi è riservato: \zz_ZZ indica 14 (multiple language support)} una lingua universale, nella quale non sono definite 15 \def\hyplainversion{1.0} regole di cesura e che verrà usata in mancanza di 16 una definizione in . Trovo che questa sia una 17 \dump hylang strategia migliore di quella di babel, che invece usa Le righe 1 e 2 servono per definire le graffe come le cesure dell’inglese americano per quelle lingue caratteri di inizio e fine dei gruppi, perché questo di cui TEX non possieda le regole. non è stabilito da iniTEX. La riga 3 serve per di- Compariranno spesso costrutti del tipo chiarare @ come lettera, al modo solito, per definire comandi interni. \@xp\let\@xp\foo\csname bar\endcsname Nella riga 5 memorizzo il significato di \input. \@xp\edef\csname bar\endcsname{xyz} Infatti voglio evitare che sia caricato il file hyphen.tex. Una delle consegne di Knuth è che il in cui bar contiene i parametri #1 e #2. Non c’è file plain.tex non sia modificato che da lui stesso; da prenderne paura: il primo equivale a in questo file perciò ci sarà sempre (a meno che Knuth non cambi idea) la riga \let\foo\bar

\input hyphen perché il primo provoca l’espansione del secon- do che a sua volta espande \csname. Il secondo Con le righe 7–9 ridefinisco \input come una ma- equivale a cro delimitata dalla stringa hyphen , il cui effetto è di ridare a \input il suo significato originale e \edef\bar{xyz} di caricare hyrules. per motivi analoghi. Ricordo che \edef espande A seguire carichiamo plain.tex e durante l’e- ciò che è contenuto nelle graffe, ma nel caso di \the laborazione di questo verrà eseguita la macro seguito da un registro token si limita ad estrarne (ridefinita) \input, con il risultato detto prima. il contenuto. Inoltre Il resto del file è chiaro: si definiscono due macro che contengono un’identificazione del pacchetto e \csname ...\endcsname poi si esegue \dump che scrive il file hyplain.fmt. produce una sequenza di controllo il cui nome con- 3 hyrules.tex siste dei caratteri che risultano dall’espansione dei token compresi fra i due comandi, senza distinzione Esaminiamo ora il secondo file del pacchetto, quello sui codici di categoria. È importante ricordare che dove vengono introdotti i comandi dell’interfaccia dall’espansione devono risultare solo caratteri. Per- per usare più lingue. ciò, se l’argomento #1 è ab e #2 è CD, l’espansione di 1 \chardef\myh@us@catcode=\the\catcode‘\_ 2 \catcode‘\_=11 \csname #1_#2\endcsname 3 \let\@xp\expandafter 4 \newlinechar‘^^J produrrà un token equivalente alla sequenza (in genere illegale) \ab_CD. Fin qui nulla di complicato: si salva il codice di categoria del carattere _ che poi diventa una lette- 5 \def\selectlanguage#1#2{% ra, che userò per alcuni comandi interni. Si veda 6 \@xp\ifx\csname #1_#2\endcsname\relax Gregorio (2006) per informazioni sui codici di 7 \global\@xp\let categoria. Introduco anche un’abbreviazione per 8 \csname #1_#2\endcsname\zz_ZZ rendere meno pesante il codice che segue e poi de- 9 \myh@nel{#1}{#2}% 10 \fi finisco il carattere che, nei messaggi sullo schermo, 11 \csname #1_#2\endcsname provoca un ‘a capo’. 12 \ignorespaces} Ogni lingua che sarà caricata con hylang.tex è identificata da una macro della forma La macro \selectlanguage, come in babel, è quel- \hstringa1i_hstringa2i; queste stringhe possono es- la che sceglie una nuova lingua. A differenza del sere arbitrarie, ma consiglio di usare i codici ISO di comando di babel ha due argomenti, le due stringhe lingua e nazione; per esempio, l’inglese americano di cui si compone l’identificativo. Se si scrive sarà identificato da \en_US, l’italiano in Italia sarà \it_IT e l’italiano in Svizzera \it_CH. \selectlanguage{ab}{CD}

37 ArsTEXnica Nº 5, Aprile 2008 HyPlain, più lingue insieme anche in Plain la macro esamina per prima cosa se il comando Una strategia analoga, e più complessa, è usa- \ab_CD è definito. Le regole di TEX dicono che se ta da babel, che però ha molte cose di cui tenere conto, come i testi fissi, i registri, i caratteri atti- \csname ab_CD\endcsname vi e così via (Gregorio, 2007). Molti di questi aspetti vengono lasciati da HyPlain all’utente, che non corrisponde a un comando definito, il suo va- si suppone più addentro alla programmazione T X lore equivale a \relax; dunque, se \ab_CD non è E di quanto non sia quello normale di LAT X. definito, il condizionale è vero e si rende \ab_CD E In tutto quanto segue supporremo sempre che la equivalente a \zz_ZZ, emettendo un messaggio lingua da considerare abbia l’identificativo \ab_CD. di avviso. Poi il comando \ab_CD viene eseguito Oltre a questa macro ne vengono definite altre e ogni spazio che segua il secondo argomento di due, \extras@ab_CD e \noextras@ab_CD; la prima \selectlanguage è ignorato. contiene il codice IN di quella lingua, la seconda

13 \def\myh@nel#1#2{% il codice OUT. 14 \message{^^Jhyplain warning: 19 15 Language #1 for #2 undefined, \newtoks\myh@toks 20 16 using fallback instead^^J}} \def\addto#1#2#3#4{% 21 \@xp\let\@xp\myh@temp La macro \mhy@nel contiene il messaggio di avviso 22 \csname extras@#1_#2\endcsname che la lingua scelta non è definita, starà all’utente 23 \myh@toks=\@xp{\myh@temp}% correggere l’errore. 24 \myh@toks=\@xp{\the\myh@toks #3} 25 \@xp\edef\csname extras@#1_#2\endcsname 26 17 \def\addalias#1#2#3{% {\the\myh@toks}% 27 18 \@xp\let\@xp#1\csname #2_#3\endcsname} \@xp\let\@xp\myh@temp 28 \csname noextras@#1_#2\endcsname Questa macro è l’interfaccia per definire coman- 29 \myh@toks=\@xp{\myh@temp}% di abbreviati o più espliciti per la scelta di una 30 \myh@toks=\@xp{\the\myh@toks #4} lingua; per esempio si potrebbe dare, nel proprio 31 \@xp\edef\csname noextras@#1_#2\endcsname 32 {\the\myh@toks}% documento o in hylang, 33 } \addalias\IT{it}{IT} \addalias\usenglish{en}{US} Si comincia allocando un registro token. La macro \addto ha quattro argomenti: Così \IT e \usenglish diventano equivalenti, rispettivamente, a 1. la prima parte dell’identificativo,

\selectlanguage{it}{IT} 2. la seconda parte dell’identificativo, \selectlanguage{en}{US} 3. il codice ‘in ingresso’, che denoteremo con IN,

Ora viene la parte più complessa del pacchetto: 4. il codice ‘in uscita’, che denoteremo con OUT. quando si sceglie una lingua si deve anche esegui- re un certo codice, come abbiamo visto prima, e Si definisce una macro temporanea equivalente questo codice va anche ‘neutralizzato’ quando si a \extras@ab_CD, poi si carica il registro token passa a una lingua diversa. con la sua espansione di primo livello; l’istruzione Un modo potrebbe essere quello di scrivere il successiva aggiunge al contenuto del registro il comando \selectlanguage o le abbreviazioni sem- terzo argomento, cioè il codice IN, e, finalmente, pre dentro un gruppo; ma non si può contare su si ridefinisce \extras@ab_CD con il contenuto di questo, che potrebbe anche diventare pesante per questo registro. l’utente. Si pensi a un testo scritto prima in inglese Per non essere troppo astratti, l’effetto sarà que- e poi in italiano, per un lungo tratto, e poi ancora sto, se \extras@ab_CD vale \foo\bar=2 e il codi- in inglese: occorrerebbe mettere un inizio di grup- ce IN è \xyz=9 : alla fine del processo, sarà come po quando si comincia a scrivere in italiano e poi avere dato ricordarsi di chiuderlo e questo potrebbe portare a errori a volte incomprensibili. \def\extras@ab_CD{\foo\bar=2 \xyz=9 } Molto meglio definire un insieme di comandi da Lo stesso si fa al comando eseguire cominciando a scrivere in una lingua e il \noextras@ab_CD con il codice OUT. Il comando ha quindi effetto codice che annulla queste modifiche, da eseguire cumulativo. quando si comincia a scrivere in una lingua diversa. Se poi è dato in un gruppo, le \selectlanguage 34 \def\definebaselanguage#1#2#3{% modifiche saranno annullate automaticamente. Li 35 \message{***^^JDefining language chiameremo, rispettivamente, codice IN e OUT; sa- 36 #1 for #2 using^^J}% ranno ovviamente diversi per ciascuna delle lingue 37 \@xp\chardef\csname l@#1_#2\endcsname=0 abilitate. 38 \language\csname l@#1_#2\endcsname

38 HyPlain, più lingue insieme anche in Plain ArsTEXnica Nº 5, Aprile 2008

39 \input #3% C’è una curiosità alle righe 15–16; il comando 40 \message{This is \string\language \newlanguage è definito in Plain come \outer, 41 \@xp\the\csname l@#1_#2\endcsname quindi non può comparire così com’è nel testo di 42 ^^J***^^J}% sostituzione in \def. Con il trucco di immergerlo in 43 \myh@initialize{#1}{#2}} \csname...\endcsname,TEX non vede il coman- 44 \def\definelanguage#1#2#3{% do proibito. Inoltre possiamo sfruttare il fatto che 45 \message{***^^JDefining language ciò che compare fra \csname e \endcsname viene 46 #1 for #2 using^^J}% espanso; perciò l’ provoca l’espansio- 47 \csname newlanguage\@xp\endcsname \expandafter 48 \csname l@#1_#2\endcsname ne del comando che segue (\csname), risparmian- 49 \language\csname l@#1_#2\endcsname doci un po’ di lavoro; l’effetto sarebbe equivalente, 50 \input #3% nel solito esempio, a 51 \message{This is \string\language \newlanguage\l@ab_CD 52 \@xp\the\csname l@#1_#2\endcsname 53 ^^J***^^J}% 55 \def\definedialect#1#2#3#4{% 54 \myh@initialize{#1}{#2}} 56 \@xp\let\csname l@#1_#2\@xp\endcsname 57 \csname l@#3_#4\endcsname I due comandi definiti in questa parte di codice 58 \myh@initialize{#1}{#2}} sono molto simili. In effetti il primo si usa una volta sola per definire la lingua di base che è opportuno Alcune lingue possono condividere le regole di ce- sia l’inglese americano. sura; l’esempio classico è il tedesco parlato in Ger- A ogni lingua è associato un intero fra 0 e 255, mania e in Austria: sono la stessa lingua, ma con convenzioni leggermente diverse. Per esempio, in il cui valore è contenuto nel comando \l@ab_CD; la differenza fra il primo e il secondo comando è che il Germania il mese di gennaio si chiama Januar, in primo associa alla lingua che si definisce l’intero 0, Austria è Jänner. Con mentre il secondo impiega il meccanismo di alloca- \definedialect{ab}{CD}{ab}{EF} zione definito in Plain TEX tramite \newlanguage. Ci sono tre argomenti: si definisce effettivamente una nuova macro \ab_EF con le due associate a cui assegnare diversi codici 1. la prima parte dell’identificativo, IN e OUT, ma questo dialetto si comporta come la lingua di base per quanto riguarda le regole di 2. la seconda parte dell’identificativo, cesura.

3. il nome del file che contiene le regole per la 59 \def\refinelanguage#1#2#3#4{% cesura. 60 \@xp\def\csname extras@#1_#2\endcsname 61 {#3}% Si comincia associando alla lingua l’intero; se la 62 \@xp\def\csname noextras@#1_#2\endcsname macro è chiamata tramite 63 {#4}% 64 } \definelanguage{ab}{CD}{abhyphen} 65 \let\refinedialect=\refinelanguage

l’effetto complessivo (oltre all’emissione di un paio Nel file hylang l’utente dovrebbe provvedere i co- di messaggi) è di eseguire dici IN e OUT iniziali per le lingue che definisce. Questo viene fatto tramite \refinelanguage. L’u- \newlanguage\l@ab_CD tente potrà aggiungere codice tramite \addto nel \language\l@ab_CD proprio documento. Gli argomenti sono come già \input abhyphen descritto per \addto e non c’è bisogno di altre \myh@initialize{ab}{CD} spiegazioni.

Nel caso di \definebaselanguage il primo 66 \def\myh@initialize#1#2{% comando eseguito sarebbe 67 \@xp\def\csname #1_#2\endcsname{% 68 \language\csname l@#1_#2\endcsname \chardef\l@ab_CD=0 69 \myh@undo 70 \def\myh@lan{#1_#2}% Infatti un comando definito tramite \chardef si 71 \csname extras@#1_#2\endcsname}% 72 \@xp\def\csname extras@#1_#2\endcsname{}% comporta come un numero quando TEX se ne aspetta uno. 73 \@xp\def\csname noextras@#1_#2\endcsname{}} 74 \def\myh@undo{% È importante emettere \language\l@ab_CD pri- 75 \csname noextras@\myh@lan\endcsname} ma di caricare il file delle regole di cesura, per- ché iniTEX memorizza queste regole nel forma- La macro \myh@initialize è la principale to proprio associandole al valore della variabile del pacchetto. I suoi argomenti sono le com- \language in vigore. Discuteremo fra poco l’ulti- ponenti dell’identificativo della lingua. Con mo comando, che serve a eseguire gli opportuni \myh@initialize{ab}{CD} vengono eseguiti i codici OUT e IN. seguenti comandi:

39 ArsTEXnica Nº 5, Aprile 2008 HyPlain, più lingue insieme anche in Plain

\def\ab_CD{% il testo nel gruppo sarà composto secondo le regole \language\l@ab_CD valide per la lingua \ef_GH. La macro \myh@undo \myh@undo verrà ridefinita all’interno del gruppo, ma alla sua \def\myh@lan{ab_CD}% chiusura riotterrà il valore precedente. \extras@ab_CD} Dunque, in ogni caso, gli effetti del codice IN \def\extras@ab_CD{} relativo alla seconda lingua scelta, verranno annul- \def\noextras@ab_CD{} lati, per effetto di comandi espliciti oppure per via dell’uscita da un gruppo. Si definiscono cioè le macro \ab_CD e le due associa- te. Quando poi \selectlanguage{ab}{CD} esegue 76 \def\hyphenmins#1#2{% la macro \ab_CD, succedono le seguenti cose: 77 \lefthyphenmin=#1\relax 78 \righthyphenmin=#2\relax} 1. si passa alla lingua prescelta; 79 80 \input hylang 2. si esegue la macro \myh@undo; 81 82 \let\definebaselanguage\undefined 3. si definisce la macro \myh@lan che contiene 83 \let\definelanguage\undefined l’identificativo della lingua prescelta; 84 85 \def\myh@lan{} % initialization 4. si esegue il codice IN relativo. 86 \def\noextras@{} % initialization 87 \en_US Un’altra curiosità è la mancanza di \expandafter 88 prima di \language; questo comando è primitivo 89 \catcode‘\_=\myh@us@catcode ed è uno di quelli che si aspettano di essere segui- ti da un numero, quindi provocano l’espansione La fine del file hyrules contiene cose semplici; del token successivo. Analogamente, alla riga 7, il primo comando è l’interfaccia per definire la \global è una primitiva che deve essere seguita minima lunghezza dei tronconi di parola dopo la da un comando di assegnazione e quindi anch’essa cesura; andrà usato nel codice IN di ogni lingua espande il token successivo. e non sarà quindi necessario annullarne gli effetti La macro \myh@undo è definita come nel codice OUT. A questo punto viene caricato hylang.tex di \csname noextras@\myh@lan\endcsname cui ci occuperemo in seguito. Poi i comandi per le definizioni di nuove lingue sono disabilitati, perché e, quando è eseguita, causa l’espansione di non ha senso farlo se non quando si compila con \myh@lan, quindi produce l’identificativo della lin- iniTEX, e si definiscono due comandi per non far gua precedentemente in uso, come abbiamo visto arrabbiare TEX all’esecuzione di \en_US. Infatti poco fa e quindi l’esecuzione del codice OUT della a questo punto non c’è alcuna lingua precedente lingua che si sta abbandonando. e, se si guarda il codice di cui abbiamo discusso Facciamo un paio di esempi. Supponiamo che finora, ci si rende conto della necessità di queste l’utente scriva definizioni. Per ultimo, il codice di categoria di _ viene \selectlanguage{ab}{CD} riportato a quello in vigore quando si è cominciato. testo \selectlanguage{ef}{GH} 4 hylang.tex altro testo \selectlanguage{ab}{CD} Questo è il documento modificabile dall’utente a seconda delle sue esigenze. Qui vengono caricate le Il primo comando esegue \ab_CD e quindi il signifi- lingue che si vogliono usare; se si desidera cambiare cato di \myh@lan è, a questo punto, ab_CD. Quando la scelta, occorrerà modificare questo file e ricreare viene eseguita la scelta della seconda lingua, pri- il formato hyplain.tex. ma di \extras@ef_GH viene espansa \myh@undo, cioè precisamente la macro \noextras@ab_CD. In 1 %%% US English must always come first 2 \definebaselanguage{en}{US}{hyphen} seguito il comando \myh@undo si espanderà, come 3 \definelanguage{zz}{ZZ}{zerohyph} si desidera, in \noextras@ef_GH, per annullare, al 4 %%% don’t modify the lines above terzo \selectlanguage, gli effetti del codice IN 5 \refinelanguage{en}{US}{\hyphenmins{2}{3}}{} relativo alla lingua \ef_GH. 6 \refinelanguage{zz}{ZZ}{}{} Se invece l’utente scrive 7 8 %%% Italian \selectlanguage{ab}{CD} 9 \definelanguage{it}{IT}{ithyph} testo 10 \refinelanguage{it}{IT} {\selectlanguage{ef}{GH} 11 {\hyphenmins{2}{2}\lccode‘\’=‘\’} altro testo} 12 {\lccode‘\’=0 }

40 HyPlain, più lingue insieme anche in Plain ArsTEXnica Nº 5, Aprile 2008

13 \nonfrenchspacing} 14 %%% Add other languages if needed 15 L’utente che usa Plain è in genere abbastanza 16 %%% Aliases smaliziato per accorgersi di queste sottigliezze. Va 17 \addalias\US{en}{US} in OUT solo il codice di cui si sa che annulla ciò che 18 \addalias\IT{it}{IT} si produce con il codice IN. I valori dei parametri 19 \addalias\ZZ{zz}{ZZ} interni vanno sempre specificati nel codice IN e, 20 \addalias\nohyphens{zz}{ZZ} se li si cambia in una lingua, occorre modificarli Le prime due righe non commentate sono quelle in tutte. per definire la lingua di base che è, come già detto, l’inglese americano. Poi vediamo un esempio per 6 Sviluppi futuri l’italiano, con l’impostazione dei minimi di cesura e In babel c’è un meccanismo per conservare i valori il cambiamento del codice \lccode per l’apostrofo. delle variabili e dei comandi, probabilmente sarà Nelle moderne distribuzioni è presente il file incluso nella prossima versione di HyPlain. L’idea zerohyph.tex che non definisce alcuna regola di di babel è di mantenere in un comando il codice cesura. Scegliendo questa ‘lingua’ si inibisce del da eseguire a ogni cambio di lingua per ritornare tutto la sillabazione a fine riga. Come detto, questa a uno stato ‘iniziale’. è la lingua ‘universale’ che viene scelta se si dà un Dovrebbe essere sufficiente aggiungere l’espansio- comando per una lingua sconosciuta. ne di questo comando, che chiamerò \myh@saved, Per finire, alcuni sinonimi: per esempio, invece a ogni \selectlanguage, in modo da rimettere a di \selectlanguage{it}{IT} è possibile scrivere posto valori delle variabili e significati delle macro semplicemente \IT. modificate.

5 Commenti 1 \def\myh@saved{} L’interfaccia prevista è molto primitiva, ma am- 2 \newcount\myh@savecnt 3 \def\hyplainsave#1{% pliabile con una certa facilità. Supponiamo, per 4 \@xp\let\csname myh@% esempio, che si voglia, come nel modulo italia- 5 \number\myh@savecnt\endcsname #1\relax no di babel modificare i valori di \clubpenalty 6 \begingroup e \widowpenalty. Occorrerà modificare anche il 7 \toks@\@xp{\myh@saved \let#1=}% codice IN per le altre lingue, in modo che i valori 8 \edef\x{\endgroup desiderati per esse siano ripristinati al cambio di 9 \def\noexpand\myh@saved{% lingua. Vogliamo anche che in italiano si usi la 10 \the\toks@ \@xp\noexpand spaziatura ‘francese’, cioè che gli spazi dopo i segni 11 \csname myh@\number\myh@savecnt di interpunzione siano come quelli fra le parole.3 12 \endcsname\relax}}% Il contenuto di hylang dovrà diventare 13 \x (togliendo le cose superflue) 14 \advance\myh@savecnt\@ne} 15 \def\hyplainsavevariable#1{\begingroup \definebaselanguage{en}{US}{hyphen} 16 \toks@\expandafter{\myh@saved #1=}% \definelanguage{zz}{ZZ}{zerohyph} 17 \edef\x{\endgroup 18 \def\noexpand\myh@saved{% \refinelanguage{en}{US} 19 \the\toks@ \the#1\relax}}% {\hyphenmins{2}{3}% 20 \x} \clubpenalty150 \widowpenalty150 } È interessante vedere come funziona questo codice. {} Supponiamo di scrivere \hyplainsave\pippo e che il valore del contatore \myh@savecnt sia 25. \refinelanguage{zz}{ZZ} La prima cosa che viene eseguita è {\clubpenalty150 \widowpenalty150 } \let\myh@25\pippo {} La sequenza \myh@25 è illegale, se scritta co- \definelanguage{it}{IT}{ithyph} sì, ma in realtà accediamo a essa tramite \refinelanguage{it}{IT} {\hyphenmins{2}{2}\lccode‘\’=‘\’ \csname...\endcsname e, una volta che è entrata \clubpenalty3000 nel meccanismo di lettura e assorbita da TEX non \widowpenalty3000 è diversa dalle altre. \frenchspacing} Nel seguito indicheremo con il {\lccode‘\’=0 testo di sostituzione della macro \myh@saved. 3. Qualcuno obietta che non è questa la spaziatura fran- Viene poi aperto un gruppo e in esso eseguito cese; in effetti Knuth, con questo nome, intendeva riferirsi solo agli spazi dopo i segni di interpunzione. \toks@\@xp{\myh@saved \let\pippo=}

41 ArsTEXnica Nº 5, Aprile 2008 HyPlain, più lingue insieme anche in Plain cosicché il registro token temporaneo \toks@ \refinelanguage{it}{IT} contiene {\hyphenmins{2}{2}\lccode‘\’=‘\’ \clubpenalty3000 { \let\pippo=} \widowpenalty3000 \frenchspacing} Ora viene il bello. Si esegue un \edef che espande {\lccode‘\’=0 tutto ciò che c’è tra le graffe. Quindi questo diventa \nonfrenchspacing} equivalente a \hyplainsavevariable\clubpenalty \def\x{\endgroup \hyplainsavevariable\widowpenalty \def\myh@saved{ \let\pippo=\myh@25\relax} con evidente economia di pensiero: basta dichia- rare tutte le variabili o comandi che si vogliono La successiva esecuzione di \x ridefinisce preservare. Questi comandi potranno anche essere \myh@saved che quindi conterrà il codice neces- dati nel documento dell’utente, cambiando i valori sario a ridare a \pippo il suo significato originale. per mezzo di \addto. A questo punto il contatore viene fatto scattare di Ogni suggerimento o richiesta di nuove funzioni uno, in modo che il prossimo uso di \hyplainsave è bene accetto: ogni tanto è bene giocare un po’ usi un comando diverso dal precedente, in questo con Plain TEX. caso \myh@27. Il gruppo viene chiuso durante l’e- spansione di \x, così TEX dimentica la definizione Riferimenti bibliografici di questo e i valori assegnati nel gruppo. Con \hyplainsavevariable la faccenda è ana- Braams, J. (1991). «Babel, a multilingual style- A loga; se \pluto è un registro dimensionale il cui option system for use with LTEX’s standard valore è 42 pt, il registro \toks@ conterrà document styles». TUGboat, 12 (2), pp. 291–301. Gregorio, E. (2006). «Codici di categoria». { \pluto=} ArsTEXnica, 1, pp. 5–14. e la successiva definizione (con \edef) di \x — (2007). «Enjoying babel». TUGboat, 28 (2), pp. equivale a 247–255. \def\x{\endgroup Knuth, D. E. (1989). «The new versions of T X \def\myh@saved{ E and METAFONT». TUGboat, 10 (3), pp. 325– \let\pluto=42pt\relax} 328. In questo modo dovrebbe essere possibile far Siebenmann, L. (1993). «A format compilation diventare il file hyrules dell’esempio precedente framework for European languages». TUGboat, \definebaselanguage{en}{US}{hyphen} 14 (3), pp. 212–221. \definelanguage{zz}{ZZ}{zerohyph}

\refinelanguage{en}{US} . Enrico Gregorio {\hyphenmins{2}{3}}{} Dipartimento di Informatica Università di Verona \refinelanguage{zz}{ZZ}{}{} Enrico dot Gregorio at univr \definelanguage{it}{IT}{ithyph} dot it

42 Eventi e novità

BachoTEX 2008 BachoTEX 2008, the XVI BachoTEX conference, TEX Users Group 2008 Conference will take place from April 30 until May 4, 2008. It University College Cork TEX’s 30th birthday Cork, Ireland Interfaces to TEX is organized yearly since 1993 by the Polish TEX 21–24 July 2008 Workshops User Group – GUST, in Bachotek, near Brodnica, http://tug2008.ucc.ie/ Presentations in the north-east of Poland. ¡ th BachoTEX 2008 will celebrate its XVI , or 100002 or 1004 or 1016 jubilee! To whet your appetite here is a list of some speakers (for the current list of papers and schedule see the link provided below):

• Hans Hagen – author of ConTEXt, co-author of LuaTEX • Piotr Fuglewicz – Polish spellchecking expert; • Jean-Michel Hufflen – xml expert, author of MlBibTEX; Bogusław Jackowski – Polish T X and font • E Hosted by the Human Factors Research Group (http://hfrg.ucc.ie) guru, co-author of the Latin Modern and TEX Gyre families of fonts; • David Kastrup – maintainer of AUCTEX, author of bigfoot and other LATEXpackages; Il convegno è ospitato dallo Human Factors Re- • Jonathan Kew – author of X TE EX; search Group presso il Dipartimento di Psicologia • Robert Oleš book designer, lecturer in book Applicata. design, lead editor of the Polish edition of Per ulteriori informazioni: http://www.ucc.ie/ Bringhurst’s “The Elements of Typographic en/tug2008/ Style”; 2nd International ConT Xt User Meeting • Marek Ryčko – Polish TEX guru and E nd practitioner; The 2 ConTEXt user meeting will take place in • Martin Schröder – pdfTEX project admin; Slovenia from 20th-25th August 2008 in Bohinj, in • Andrzej Tomaszewski – typographer, book the heart of Triglav National Park, around a lake designer; in Alps. • Adam Twardoch – font expert; Organizers • Marcin Woliński – Polish LATEX guru, author of the Polish document classes mwcls. The ones responsible for your enjoyable stay: • prof. dr. Rudolf Podgornik; http : / / www . gust . org . pl / BachoTeX / 2008 / • Mojca Miklavec ; • assist. dr. Primož Peterlin. TUG Conference 2008 The two responsible for quality and professional Il convegno annuale 2008 del TEX Users Group si feeling of the meeting: terrà dal 21 al 24 Luglio 2008 presso lo University College Cork, in Irlanda. • Hans Hagen; Nel 2008 cade il trentesimo anniversario della • Taco Hoekwater. nascita di TEX. Temi del convegno saranno: Inter- With special thanks to our Faculty of Mathematics facce, LATEX, ConTEXt, METAFONT, METAPOST and Physics, University of Ljubljana and: e X T X. E E • prof. dr. Franc Forstnerič; Domenica 20 Giugno (prima della conferenza) • prof. dr. Vladimir Batagelj; si terranno alcuni seminari. Attualmente sono allo • prof. dr. Tomaž Pisanski. studio sessioni dedicate all’uso di base e avanzato di LATEX e a PSTricks. http://meeting.contextgarden.net/ Questa rivista è stata stampata presso Logo S.r.l. Servizi di Stampa Digitale, Borgoricco (PD) su carta ecosostenibile Vision Trend White prodotta da Steinbeis Temming Papier GmbH & Co.

o r

i t

a

I

z

t

z

a

i

l l

i

i

a

t

n U

i

d g It o i u p p T u EX ? G r

2008

Quinto convegno nazionale su TEX, LATEX e tipografia digitale Pisa, 18 ottobre 2008 Aula Magna, Scuola Superiore Sant’Anna

Call for Paper

Sabato 18 ottobre 2008 presso l’Aula Magna della Scuola Superiore Sant’Anna di Pisa si terrà il quinto Convegno annuale su TEX, LATEX e tipografia digitale organizzato dal Gruppo Utilizzatori Italiani di TEX. Il Convegno sarà un momento di ritrovo e di confronto per la comunità LATEX italiana, tramite una serie di interventi atti sia a contribuire all’arricchimento sia a supportarne lo sviluppo. Maggiori informazioni sul Convegno e sulle modalità di presentazione degli interventi sono disponibili all’indirizzo:

http://www.guit.sssup.it/guitmeeting/2008/ ArsTEXnica Rivista italiana di TEX e LATEX Numero 5, Aprile 2008

3 Editoriale Gianluca Pignalberi 5 Consigli su come non maltrattare le formule matematiche Massimo Guiggiani, Lapo F. Mori 15 Introduzione a X TE EX Massimiliano Dominici 27 Macroistruzioni con argomenti delimitati Claudio Beccari 35 HyPlain, più lingue insieme anche in Plain Enrico Gregorio