Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e...

48
Numero 1 Aprile 2006 g u It A rs T E X nica Rivista italiana di T E XeL A T E X http://www.guit.sssup.it/arstexnica

Transcript of Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e...

Page 1: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Numero 1Aprile 2006

guIt

ArsTEXnicaRivista italiana di TEX e LATEX

http://www.guit.sssup.it/arstexnica

Page 2: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

TEXnic

aArsguIt – Gruppo Utilizzatori Italiani di TEX

ArsTEXnica è la pubblicazione ufficiale del guIt

Comitato di Redazione

Claudio BeccariFabiano BusdraghiGustavo CevolaniMassimiliano Dominici (coordinatore)Andrea FedeliEnrico GregorioLapo MoriGianluca PignalberiOttavio RizzoEmiliano VavassoriRaffaele VitoloEmanuele Zannarini

ArsTEXnica è la prima rivista italiana dedicata aTEX, a LATEX ed alla tipografia digitale. Lo scopoche la rivista si prefigge è quello di diventare unodei principali canali italiani di diffusione di infor-mazioni e conoscenze sul programma ideato quasitrent’anni fa da Donald Knuth.

Le uscite avranno, almeno inizialmente, caden-za semestrale e verranno pubblicate nei mesi diAprile e Ottobre. In particolare, la seconda uscitadell’anno conterrà gli Atti del Convegno Annualedel guIt, che si tiene in quel periodo.

La rivista è aperta al contributo di tutti coloroche vogliano partecipare con un proprio artico-lo. Questo dovrà essere inviato alla redazione diArsTEXnica, per essere sottoposto alla valutazionedi recensori. È necessario che gli autori utilizzino laclasse di documento ufficiale della rivista; l’autoretroverà raccomandazioni e istruzioni più dettaglia-te all’interno del file di esempio (.tex). Tutto ilmateriale è reperibile all’indirizzo web della rivista.

Gli articoli potranno trattare di qualsiasi argo-mento inerente al mondo di TEX e LATEX e nondovranno necessariamente essere indirizzati ad unpubblico esperto. In particolare tutorials, rassegnee analisi comparate di pacchetti di uso comune,studi di applicazioni reali, saranno bene accetti, co-sì come articoli riguardanti l’interazione con altretecnologie correlate.

Di volta in volta verrà fissato, e reso pubblicosulla pagina web, un termine di scadenza per lapresentazione degli articoli da pubblicare nel nu-mero in preparazione della rivista. Tuttavia gli

articoli potranno essere inviati in qualsiasi momen-to e troveranno collocazione, eventualmente, neinumeri seguenti.

Chiunque, poi, volesse collaborare con la rivi-sta a qualsiasi titolo (recensore, revisore di boz-ze, grafico, etc.) può contattare la redazioneall’indirizzo:

[email protected].

Nota sul CopyrightIl presente documento e il suo contenuto è di-

stribuito con licenza CC© Creative Commons 2.0di tipo “Non commerciale, non opere derivate. Èpossibile, riprodurre, distribuire, comunicare alpubblico, esporre al pubblico, rappresentare, ese-guire o recitare il presente documento alle seguenticondizioni:

BY:© Attribuzione: devi riconoscere il contribu-to dell’autore originario.

$\© Non commerciale: non puoi usarequest’opera per scopi commerciali.

=© Non opere derivate: non puoi alterare,trasformare o sviluppare quest’opera.

In occasione di ogni atto di riutilizzazione odistribuzione, devi chiarire agli altri i termini dellalicenza di quest’opera; se ottieni il permesso daltitolare del diritto d’autore, è possibile rinunciaread ognuna di queste condizioni.

Per maggiori informazioni:

http://wwww.creativecommons.com

Associarsi a guIt

Fornire il tuo contributo a quest’iniziativa comemembro, e non solo come semplice utente, è unpresupposto fondamentale per aiutare la diffusionedi TEX e LATEX anche nel nostro paese. L’adesioneal Gruppo prevede un quota di iscrizione annualedi 25,00 e.

IndirizziGruppo Utilizzatori Italiani di TEX :c/o Ufficio StatisticaScuola Superiore Sant’AnnaPiazza Martiri della Libertà, 3356127 Pisa, Italia.http://[email protected]

Redazione ArsTEXnica:http://www.guit.sssup.it/arstexnica/[email protected]

Codice ISSN 1828-2369

Stampata in ItaliaPisa: 15 Aprile 2006

Page 3: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnicaRivista italiana di TEX e LATEX

EditorialeMassimiliano Dominici . . . . . . . . . . . . . . . . . . . . . . . . . . 3Intervista a Donald KnuthGianluca Pignalberi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5I registri token: questi sconosciutiClaudio Beccari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Ridefinire i comandi primitivi di TEX e applicazioni a LATEXEnrico Gregorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14L’ambiente pictureMassimo Caschili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Norme tipograficheG. Cevolani . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Numero 1 Aprile 2006Stampato a Pisa, Italia, guIt Gruppo Utilizzatori Italiani di TEX

Page 4: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di
Page 5: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Editoriale

Massimiliano Dominici

La realizzazione di ArsTEXnica, la prima rivistaitaliana di TEX, LATEX e tipografia digitale è l’ul-tima delle iniziative, in ordine di tempo, che lacomunità italiana degli utenti di TEX ha messoin campo per diffondere, anche nel nostro paese,la conoscenza e l’uso del programma ideato quasitrent’anni fa da Donald E. Knuth. Un programmache è diventato ormai, a livello internazionale, lostandard de facto nel mondo accademico per lepubblicazioni scientifiche (grazie anche al suppor-to dell’American Mathematical Society), ma che èanche anche riuscito ad attrarre, in generale, tutticoloro che sono interessati a produrre documentidi eccellente resa tipografica.

In Italia, bisogna aspettare l’inizio di questo de-cennio, perché si abbia la presenza di una comunitàorganizzata di utenti, con un netto ritardo rispettoad altri paesi. Il TUG (TEX Users Group) italiano,infatti, nasce in modo del tutto casuale, ad ope-ra di un gruppo di dottorandi costretti dal lorocoordinatore a presentare documenti redatti uni-camente in LATEX. Come sempre avviene in questicasi, superata la fase iniziale, rimasti conquistatidalla resa visiva e dalla semplicità del programma,i dottorandi si posero il problema di diffondere,attraverso un sito web corredato da un forum didiscussione, informazioni e suggerimenti per coloroche fossero interessati a entrare nel mondo LATEX.

La vera svolta nella storia di questa iniziativasi ebbe nei primi mesi del 2003, quando, grazieal supporto determinante della Scuola SuperioreSant’Anna di Pisa, fu possibile offrire un servizioancora più professionale ed organizzato. Fu deci-so allora di presentare al pubblico, sotto il nomecollettivo di guIt — Gruppo Utilizzatori Italiani diTEX — questa nuova comunità virtuale.

Il supporto e l’impegno profuso ha permesso alguIt di essere riconosciuto dalla comunità interna-zionale come TEX Users Group italiano. Ciò hareso necessario ampliare e riorganizzare, nei conte-nuti e nella forma, l’intera struttura del Gruppo,passando da un modello di comunità puramente“virtuale” ad una struttura in grado di organizzareeventi di portata nazionale ed internazionale. Que-sta trasformazione ha permesso quindi il lancio diuna serie di iniziative, la più importante delle qua-li è l’organizzazione dei convegni annuali su TEX,LATEX e tipografia digitale, a livello nazionale.

Tutte queste iniziative, (forum, corsi, convegni),e il loro successo, stanno a testimoniare una cre-scente vitalità della comunità italiana degli utentidi TEX. Ed è appunto di tale vitalità che la rivista

vuole farsi interprete, ponendosi come obbiettivoprincipale quello di essere il canale privilegiatodi comunicazione tra i membri di questa comuni-tà, per tutto ciò che riguarda la diffusione delleconoscenze e la produzione di materiale innovativo.

ArsTEXnica svolgerà questo compito ospitandonelle sue pagine i contributi più interessanti, prove-nienti non solo dalla comunità italiana, ma ancheda autori di lingua diversa. Rivolgendosi ad unpubblico ampio, in cui convivono i principiantiassieme ai programmatori più esperti, presenteràmateriale adatto alle diverse fasce di interesse: tu-torial di ogni livello, rassegne e analisi comparatedi pacchetti, ma anche studi di applicazioni reali earticoli riguardanti l’interazione con altri program-mi e tecnologie correlati (programmi di grafica,XML, linguaggi di programmazione, ecc.).

Questo è ciò che la rivista si propone di fare, edun assaggio è già presente in questo primo nume-ro. Chi volesse accostarsi per la prima volta allacreazione di semplici figure con LATEX può, ad esem-pio, consultare l’articolo di Massimo Caschili chespiega come utilizzare a questo scopo l’ambientepicture. Si rivolgono invece ad utenti che desidera-no addentrarsi nei meandri della programmazionevera e propria, gli articoli di Claudio Beccari edEnrico Gregorio. L’aspirante programmatore tro-verà in questi due articoli materiale preziosissimosu come utilizzare i registri token e altri trucchiper ridefinire comandi già esistenti o aggiungervinuove funzionalità. Gustavo Cevolani, infine, dàuna panoramica delle norme tipografiche per la lin-gua italiana. L’articolo, anche se mirato particolar-mente all’applicazione ad un ambiente LATEX, puòrisultare utile a chiunque utilizzi un programmadi videoscrittura per produrre i propri documen-ti. Inutile dire che l’articolo è risultato utilissimoanche per la composizione di questa rivista.

Naturalmente la rivista non poteva che comin-ciare con un omaggio al “padre” del TEX, DonaldE. Knuth. Gianluca Pignalberi ha tradotto perArsTEXnica la sua intervista a Knuth, già apparsain inglese su Free Software Magazine e riprodottasu TUGboat. Knuth, sollecitato dall’intervistato-re, ci rivela i suoi progetti, i suoi interessi, la suaposizione sui brevetti software. Se permettete unapiccola anticipazione, questa è la prima di una se-rie di interviste, realizzate da Gianluca Pignalberi,che avranno come protagonisti i personaggi piùimportanti nella storia del TEX e dei suoi svilup-pi. Non mancate, quindi, la prossima intervista a

3

Page 6: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Editoriale

Frank Mittelbach, uno degli sviluppatori del kerneldi LATEX 2ε.

Per concludere, un ringraziamento va a tutti coloroche hanno lavorato (su base del tutto volontaria, etuttavia profondendovi un impegno davvero am-mirevole) affinché questo primo numero vedesse laluce. Ai redattori, ai recensori, ai revisori di boz-ze, a tutte le persone che con i loro suggerimentihanno aiutato a superare le difficoltà man manoche si presentavano, a tutti costoro deve andare un

grazie di cuore, da parte di scrive, innanzitutto, maanche da parte dei lettori. Permettetemi, infine, diesprimere un ringraziamento personale a MaurizioHimmelmann, coordinatore del guIt, e a MichelaNatilli, che mi hanno aiutato a scrivere la parte“storica” di questo editoriale.

Buona lettura.

. Massimiliano [email protected]

4

Page 7: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Un numero primo di domande al Professore Emeritodell’Arte della Programmazione: intervista a Donald

Knuth

Gianluca Pignalberi

SommarioProponiamo qui la traduzione italiana dell’intervi-sta a Donald Ervin Knuth, apparsa per la primavolta su Free Software Magazine n. 7 e ripubblicatasu TUGboat Volume 26, Number 6.

La composizione della rivista Free Software Maga-zine è interamente basata su TEX. Forse qualcunonon sa ancora che il Professor Donald Knuth haprogettato TEX e l’ha fatto circa 30 anni fa. Daallora il progetto TEX ha generato molti strumenticorrelati (ad es., LATEX, ConTEXt, Ω e altri).

Nel 2005 ho avuto l’opportunità e l’onore diintervistare il professor Knuth. Sono orgoglioso,come giornalista e TEXnico di FSM, di vedere l’in-tervista ripubblicata sulla prima rivista italiana diTEX e LATEX.

Donald E. Knuth, Professore Emerito dell’Artedella Programmazione, professore di matematica(concreta), creatore di TEX e METAFONT, autoredi diversi libri fantastici (come Computers andTypesetting, The Art of Computer Programming,Matematica discreta1) e articoli, assegnatario delTuring Award, del Kyoto Prize e altri importantiriconoscimenti; membro della Royal Society (epotrei andare avanti). C’è qualche argomento cheavrebbe voluto padroneggiare e non l’ha fatto? Sesì, perché?

Grazie per le sue parole gentili, ma in realtàprovo costantemente ad imparare nuove cose nellasperanza di poter poi aiutare ad insegnarle ad altri.Vorrei inoltre poter capire lingue diverse dall’in-glese senza troppa difficoltà; sono spesso limitatodalla mia incompetenza linguistica, mentre vogliocapire la gente di altre culture ed altre ere.

I suoi algoritmi sono ben conosciuti e ben docu-mentati (citerò solamente, per amor di brevità, l’al-goritmo di string matching Knuth-Morris-Pratt),cosa che permette a chiunque di usarli, studiarli emigliorarli liberamente. Se non fosse chiaro dallesue azioni, in un’intervista al Dr. Dobb’s Jour-nal ha dichiarato la sua opinione circa i brevetti

1. È il poco significativo titolo italiano di Concrete Ma-thematics, dove Concrete è la contrazione di ‘continuous’ e‘discrete’

software, che costringono la gente a pagare dellequote qualora vogliano usare o modificare algoritmibrevettati. La sua opinione sui brevetti software ècambiata o si è rafforzata? In che modo? E comevede i desideri del Parlamento Europeo di adottareleggi sui brevetti software?

Menziono i brevetti in diverse parti di The Art ofComputer Programming. Per esempio, discutendouno dei primi metodi di ordinamento ad esserebrevettato, dico questo:

Purtroppo, abbiamo raggiunto la fine del-l’era in cui la gioia di scoprire un nuovo al-goritmo era una soddisfazione sufficiente!Fortunatamente l’ordinamento oscillantenon è particolarmente efficace; speriamoche le persone orientate alla comunità

Figura 1: Il prof. Knuth mentre legge una delleriviste composte dal suo programma TEX. Foto diJill Knuth (laureata al Flora Stone Mather College— un altro FSM)

5

Page 8: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Intervista a Donald Knuth

Figura 2: La porzione di pagina su cui Knuth harisposto alla seconda domanda di quest’intervista.Prego notate che cita e compone tipograficamen-te anche quando scrive a mano: la citazione daTAOCP e la parola TEX

che inventano i migliori algoritmi conti-nuino a rendere le loro idee liberamentedisponibili.

Non ho tempo per seguire gli attuali sviluppinell’ambito dei brevetti; ho paura però che le cosecontinuino a peggiorare. Non credo che sarei statoin grado di creare TEX se il clima odierno ci fossestato negli anni 70.

Nel mio recente viaggio in Europa, la gente miha raccontato che la UE aveva saggiamente decisodi non imporre i brevetti software. Ma un giornoo due prima che io ripartissi, qualcuno disse chei politici a Bruxelles avevano improvvisamente ri-baltato la loro decisione. Spero che non sia vero,perché penso che le odierne politiche dei brevettisoffochino l’innovazione.

Comunque, io non sono affatto un esperto diqueste cose; sono solo uno scienziato che scrive diprogrammazione.

Finora lei ha scritto tre volumi di The Art ofComputer Programming, sta lavorando al quarto,spera di finire il quinto volume entro il 2010, eancora pianifica di scrivere i volumi 6 e 7. Esclusala serie Selected papers, ci sono altri argomentidi cui lei ritiene di dover scrivere, ma non ne haavuto il tempo?, Se sì, vuole riassumere di qualeargomento parlerebbe?

Sto facendo progressi lenti ma costanti sui volu-mi 4 e 5. Ho anche molte annotazioni per i volumi6 e 7, ma questi libri trattano argomenti menofondamentali e potrei scoprire che c’è poco bisognodi questi libri quando sarò arrivato a quel punto.

Ho paura dei 20 anni di lavoro necessari primache io porti TAOCP ad una conclusione di successo.Dato che ho 67 anni ora, spero vivamente di starein salute ed essere in grado di fare un buon lavoropur invecchiando ed essendo ancor più decrepito.Fortunatamente, al momento mi sento bene comesempre.

Se avessi tempo per qualcos’altro, mi piacereb-be comporre musica. Naturalmente non so se ciòavrebbe successo; terrei la cosa per me se non fossebuona. Tuttora sento il bisogno di provare ogni tan-to e i computer rendono queste cose più semplici.

Circolano voci che lei ha iniziato il progetto TEXperché stanco di vedere i suoi manoscritti mal-trattati dall’American Mathematical Society. Allostesso tempo, afferma di aver scritto TEX dopoaver visto le prove di stampa del libro The Artof Computer Programming. Per piacere, raccontibrevemente ai nostri lettori cosa l’ha fatta decideread iniziare il progetto, quali strumenti ha usato,e quante persone facevano parte del nucleo dellasquadra di TEX.

No, le società matematiche non potevano essereincolpate per lo stato pietoso della tipografia nel1975. La cosa è dovuta al fatto che le industriedella stampa erano passate a nuovi metodi e inuovi metodi erano progettati per essere validi perle riviste, i giornali e i romanzi ma non per lascienza. Gli scienziati non avevano alcun potereeconomico, così a nessuno importava se i nostrilibri e articoli sembravano belli o brutti.

Racconto l’intera storia nel capitolo 1 del miolibro Digital Typography che è ovviamente un libroche spero tutti leggano e apprezzino.

Gli strumenti che ho usato sono stati tutti auto-prodotti e sono diventati famosi come Programma-zione Colta2. Sono enormemente influenzato dallaprogrammazione colta che è sicuramente la cosamigliore mai inventata. Io continuo ad usarla perscrivere programmi quasi ogni giorno e mi aiutaad ottenere codice efficiente, robusto e manuteni-bile con maggior successo di ogni altro metodo checonosco. Naturalmente, capisco che altre personepotrebbero ritenere altri approcci più di loro gusto;ma, wow, io amo gli strumenti che ho ora. Nonavrei potuto affatto scrivere programmi difficili co-me il metasimulatore MMIX se non avessi avutola programmazione colta; il compito sarebbe statotroppo arduo.

2. Traduzione letterale di Literate Programming, pre-ferita ad altre traduzioni su una mailing list di linux.it

6

Page 9: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Intervista a Donald Knuth ArsTEXnica Nº 1, Aprile 2006

Figura 3: Ritratto di Donald E. Knuth di Ale-xandra Drofina. Gli utenti commerciali dovrebberoscrivere a Yura Revich ([email protected])per il permesso

Nel nucleo della squadra di TEX avevo assistentiche leggevano il codice che scrivevo, che prepara-vano i driver per le stampanti e le interfacce e liportavano su altri sistemi. Ho avuto due studentiche hanno inventato gli algoritmi per la sillaba-zione e l’interruzione di riga. E ho avuto moltedozzine di volontari che si riunivano ogni venerdì

per diverse ore per aiutarmi a prendere le decisioni.Ma ho scritto da me ogni singola linea di codice.

Il capitolo 10 del mio libro Literate Programmingspiega perché penso che un progetto di prima ge-nerazione come questo sarebbe fallito se avessiprovato a delegare il lavoro.

Forse lei ritiene che qualcuna delle tecnologieattuali è ancora insoddisfacente. Se non fosse impe-gnato a scrivere i suoi capolavori, quale tecnologiaproverebbe a rivoluzionare e in che modo?

Be’, certamente proverei a lavorare per la pacee la giustizia nel mondo. Tendo a pensare a mestesso come un cittadino del mondo; sono piace-volmente eccitato quando vedo il mondo diventaresempre più piccolo e la gente di diverse culture la-vorare insieme rispettando le proprie differenze. Alcontrario sono addolorato quando vengo a saperedell’odio profondo o quando vedo la gente sfruttaregli altri o scacciarli preventivamente.

In che modo può accadere la rivoluzione deside-rata? Chissà. . . ma sospetto che “Ingegneri senzafrontiere” siano più vicini di chiunque altro ad unastrategia funzionante mediante cui i tecnologi comeme possono essere d’aiuto.

Grazie ancora per il suo tempo prezioso.Grazie per avermi posto domande eccellenti!

. Gianluca PignalberiFree Software [email protected]

7

Page 10: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

I registri token: questi sconosciuti

Claudio Beccari

Sommario

In questo tutorial viene mostrato come usare alcunicomandi e oggetti primitivi di TEX, non accessibilidirettamente con LATEX, per definire comode macroda usare con (pdf)LATEX. Si tratta dei token e deiregistri token che raramente, per non dire mai,vengono trattati nelle guide di LATEX.

1 Introduzione

Chi si è letto tutto (e diverse volte) il TEXbook1

ha capito che i token sono oggetti importanti perl’interprete TEX, nelle sue varie incarnazioni di“semplice” TEX, oppure pdfTEX, ε-TEX, pdf-ε-TEX. Siccome questi interpreti servono per tradurrei comandi di alto livello, per esempio le macro diLATEX, in comandi primitivi affinché il calcolatoresu cui opera svolga il suo compito di comporre untesto nel modo eccellente che tutti conosciamo, èimportante sapere che cosa siano i token e comegestirli al meglio.

Il TEXbook non contiene una definizione precisaintrodotta con l’ambiente “definition”, ma esponetante situazioni dalle quali il lettore induce checosa sia un token.

Qui proverò a dare una definizione; per evitareche la definizione si estenda per diversi capoversi,mi limiterò ad una definizione “dogmatica”, spe-rando che il lettore voglia documentarsi meglio allafonte, cioè sul TEXbook.

Un token è un oggetto presente nel file sorgentedi ingresso che l’interprete acquisisce come se fosseun unico oggetto, anche se è scritto con diverselettere; i token scritti mediante diverse lettere sonocostituiti tipicamente dalle sequenze di controllo;a ciascuna di queste è spesso associata una de-finizione a sua volta costituita da diversi token.Queste particolari sequenze di controllo sono tokensviluppabili; lo sviluppo è costituito dai token cheformano la definizione. Si chiamano sviluppabilianche i token primitivi che eseguono qualche azio-

1. Non ritengo necessario inserire nella bibliografia ilriferimento al TEXbook; esso dovrebbe essere la “Bibbia” diqualunque utente del sistema TEX; parto dal presuppostoche ogni lettore ne abbia una copia a portata di mano.Altrettanto realisticamente sono consapevole che questolibro, assolutamente essenziale anche se di difficile lettura,non è fra le letture preferite degli utenti di LATEX; questo siaallora un invito a documentarsi meglio facendo riferimentoal testo n. 1 da cui discendono tutti gli altri. Non c’è altromodo per capire il comportamento talvolta bizzarro diLATEX, e non c’è altro modo di porre rimedio se non con unaprofonda comprensione del programma che lo fa funzionare.

ne; in questo caso lo sviluppo è il risultato dellaloro azione.

È chiaro che, se TEX legge dei token sviluppabili,esso li sviluppa e il loro sviluppo, detto ancheespansione, sostituisce i token originari diventandoil nuovo flusso di informazioni che TEX deve gestire.

I token più frequenti sono le lettere e i segni cheil compositore introduce mediante la tastiera nelfile sorgente del documento che sta componendo.Ma alcuni token, come per esempio la tilde ~, nonsono semplici caratteri, ma sono sviluppabili in unasequenza di altri token. Tutte le macro compostedal segno di backslash seguito da una sequenza dilettere, oppure da un solo segno che non rappresentiuna lettera, sono dei token formati da uno o piùsegni che però l’interprete tratta come un oggettosolo.

Nello stesso tempo non confondiamo i token coni gruppi; le cose raggruppate fra parentesi graffeformano un gruppo, possibilmente fatto da diversitoken; per esempio se si scrive \tae per ottenereae, il file sorgente contiene 5 token, precisamente:\t, , a, e, e ; le vocali ae sono raggruppate fraparentesi graffe perché esse devono essere elaborateassieme.

La sequenza di controllo \the è un solo token;esso è un comando primitivo e quindi non ha unosviluppo in termini di altri token, ma il risulta-to della sua esecuzione è costituito dai token cherappresentano il contenuto del registro che ne co-stituisce l’argomento; per esempio, i due token\the\columnwidth restituiscono a TEX gli undicitoken che rappresentano la larghezza della colonnacorrente: 215.85414pt.

Invece la sequenza di controllo \TeX è inizial-mente un solo token; siccome esso rappresenta unadefinizione, cioè è una macro, l’interprete la rico-nosce come tale e la sostituisce con il suo sviluppo,cioè con la serie di token che comparivano nelladefinizione; in questo caso quella semplice macroviene sostituita con

T\kern-.1667em\lower.5ex\hboxE\kern-.125emX\@

Se si conta bene l’unico token \TeX diventa unasequenza di 29 token; le sequenze di controllo checompaiono nella definizione di \TeX sono quasitutte comandi primitivi, tranne \@, per cui haluogo una ulteriore sostituzione per sviluppare,appunto, \@.

Se si apre il file latex.ltx con un editor ASCII,facendo molta attenzione a non apportarvi modifi-che (se l’editor lo consente, si apra il file in “readonly mode”), e si cerca la stringa \toks, la si trova

8

Page 11: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

I registri token: questi sconosciuti ArsTEXnica Nº 1, Aprile 2006

molto spesso; essa viene usata all’interno del cuoredi LATEX per svolgere in modo ottimizzato unaquantità di funzioni che sarebbe difficile svolgerediversamente. Più avanti si mostrerà un esempiod’uso e si esamineranno le alternative alla soluzionetrovata.

Il problema con i token è che la prima operazio-ne che l’interprete esegue leggendo il file sorgenteè costituita proprio nel riconoscimento dei token;l’operazione è descritta da Knuth come tokeniz-zazione. Se questi token devono essere riutilizzati,si rischia di far perdere tempo all’interprete perriconoscere la natura di token ad oggetti che hagià riconosciuto e classificato. È per questo che èmeglio conservare gli oggetti da riutilizzare (insie-me alle loro classificazioni) in opportuni registri,che prendono il nome di token register.

Gli utenti LATEX non sono abituati a usarei registri; i pochi che si usano attraverso co-mandi LATEX sono le scatole (\newsavebox), icontatori (\newcounter) e le lunghezze elastiche(\newlength); altri comandi permettono di ese-guire le necessarie operazioni su questi oggetti. IlTEXbook informa il lettore che per ogni categoriadi registri se ne possono definire ed usare al mas-simo 256 (numerati da 0 a 255, senza però che ilcompositore debba preoccuparsi di gestire questinumeri); l’estensione ε-TEX ne può gestire moltidi più, ma anche in questo caso il compositore nondeve preoccuparsi dei dettagli.

LATEX non contiene nessun dispositivo, nessuncomando, per gestire i registri token; per usarlibisogna scendere ad un livello più basso di pro-grammazione, ad un livello “primitivo”, in quantooccorre servirsi di comandi primitivi.

Tuttavia anche l’utente LATEX un po’ avanza-to può trarre giovamento dall’uso intelligente deiregistri token.

2 Un semplice problema: estenderei comandi \caption di babel

Da quasi 20 anni ho messo a disposizione degliallievi del Politecnico di Torino un pacchetto dimacro per comporre le loro tesi; con il variaredegli ordinamenti e, ancor di più, con il grandeaumento dei nostri allievi che svolgono programmiinternazionali di “doppia laurea”, è stato necessariointegrare quei pacchetti con babel estendendone ledefinizioni alle necessità della composizione dellatesi.

Il pacchetto TOPtesi è scaricabile dagli archiviinternazionali ctan, oltre che dal sito ftp del no-stro Politecnico; l’ultima versione contiene anche imeccanismi per l’uso di un file di configurazionee per cambiare tutte le infix string in modo dapoterle rendere in una lingua qualsiasi.

Le infix string sono quelle sequenze di carat-teri (formanti parole di senso compiuto) inseritedirettamente dentro i comandi che eseguono de-

terminate funzioni; per esempio, quando si dà ilcomando \caption, TEX esegue diverse operazionie a un certo punto scrive la parola “Chapter”, op-pure “Capitolo”, oppure “Chapître”, . . . , a secondadella lingua in uso. Ebbene le parole “Chapter”,‘Capitolo”, “Chapître, sono sequenze di caratte-ri contenute, incorporate, dentro la definizione di\chapter; in italiano si potrebbero chiamare “strin-ghe incorporate” ma preferisco usare la locuzioneinglese infix string.

Mentre il nome “Relatore” deve essere cambiato“a mano” scrivendo una riga opportuna nel file diconfigurazione, in modo che la stringa diventi “Ad-visor”, “Supervisor”, “Superviseur”, o quant’altro,altri comandi sono più delicati.

Per esempio esiste un comando\ringraziamenti che serve per iniziare unasezione a livello di “capitolo” non numerato,inserita nell’indice generale, con un titolo fisso:“Ringraziamenti” in italiano, “Acknowledgements”in inglese, “Agradecimientos” in spagnolo, ecce-tera. Il comando non usa una infix string peril titolo del capitolo, ma usa una sequenza dicontrollo che contiene la parola giusta, che cambiaautomaticamente insieme alla lingua selezionata.

Il comando \ringraziamenti ha una definizioneche rispecchia molte altre definizioni del generepresenti in moltissime classi di documenti:

\newcommand*\ringraziamenti%\iffrontmatter\else\frontmattertrue\fi\if@openright\cleardoublepage

\else\clearpage\fi\global\@topnum\z@\@afterindentfalse\@schapter\acknowledgename%\addcontentslinetocchapter%

\acknowledgename%

Si vede chiaramente che il nome, variabile da linguaa lingua, è contenuto dentro \acknowledgename.

Il problema consiste nel “convincere” il comandodi babel \selectlanguage a cambiare anche ilnome che rappresenta il titolo di questo capitoloinsieme a tutte le altre parole inserite direttamentenei comandi.

Si vorrebbe che ogni utente potesse aggiungerealtre definizioni per altre lingue; babel consentedi comporre in lusazio (!); se mai ci fosse qualchestudente che dovesse comporre una tesi in lusa-zio, dovrebbe essere in grado di definire la parolacorretta anche per quella lingua.

3 Una soluzione ottenuta mediantei registri token

Il cambiamento delle infix string da parte dei co-mandi di babel avviene eseguendo una macro il cuinome si ottiene per agglutinamento della stringa\captions con il nome della lingua da usare; ogni

9

Page 12: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 I registri token: questi sconosciuti

language description file (con estensione .ldf), cheviene letto in accordo con le varie opzioni di linguaindicate nella chiamata a babel, definisce la ma-cro specifica per quella lingua; il file italian.ldfcontiene la definizione:\addto\captionsitalian%

\def\prefacenamePrefazione%\def\refnameRiferimenti bibliografici%\def\abstractnameSommario%\def\bibnameBibliografia%\def\chapternameCapitolo%\def\appendixnameAppendice%\def\contentsnameIndice%\def\listfigurenameElenco delle figure%\def\listtablenameElenco delle tabelle%\def\indexnameIndice analitico%\def\figurenameFigura%\def\tablenameTabella%\def\partnameParte%\def\enclnameAllegati%\def\ccnamee~p.~c.%\def\headtonamePer%\def\pagenamePag.%\def\seenamevedi%\def\alsonamevedi anche%\def\proofnameDimostrazione%\def\glossarynameGlossario%%

Analoghe definizioni esistono per le altre lingue2.Noi vorremo costruire un comando LATEX di alto

livello (cioè per l’utente finale) che gli consenta diaggiungere la definizione che desidera a qualunqueelenco di “captions” in ogni lingua fra quelle chel’utente ha indicato nella lista delle opzioni.

Ecco allora che bisogna scaricare i token cheformano la definizione di \captions〈lingua〉 in unregistro token e poi usarli per creare un’altra defi-nizione di \captions〈lingua〉 con l’aggiunta dellanuova definizione. Un comando di assegnazione diuna lista di token ad un registro token numera-to 〈treg〉 si esegue mediante un semplice segno diuguale, ma la lista dei token deve essere racchiusafra parentesi graffe; l’assegnazione pertanto saràla seguente

\toks〈treg〉=\expandafter\captions〈lingua〉

Siccome LATEX non ha un comando per assegnareun nome ad un registro token, accontentiamoci diusare il registro 0, sapendo che LATEX è comunqueconfigurato per associare i numeri identificativi deiregistri a partire da 10, lasciando cioè i primi 10(da 0 a 9) per operazioni di tipo scratch. Nello stes-so tempo è impossibile far eseguire delle istruzionidentro ad una lista di token; ecco perché compa-re il comando \expandafter prima della graffaaperta; esso dice all’interprete di sostituire il co-mando successivo alla graffa con la lista dei token

2. Il comando \addto potrebbe far pensare che bastiusare un altro comando simile per aggiungere altre defini-zioni; la cosa è effettivamente possibile, ma si tratta di uncomando “interno” di babel ed è meglio lasciarlo stare.

che formano la sua definizione, senza svilupparnenessuno, ma di rimettere la graffa prima della listain modo che la lista di token sia racchiusa fra graffecorrettamente appaiate.

Stando così le cose o si conosce il significatodi \captions〈lingua〉, oppure l’operazione nonpuò essere fatta; non avremmo nessun problema ascrivere

\toks0=\expandafter\captionsitalian

ma dovremmo mettere questa operazione all’inter-no della definizione di un comando che si riferi-sce solo all’italiano; se vogliamo rendere il nostrocomando parametrico, dobbiamo prima definirequalcosa di equivalente a \captionsitalian, o a\captionsenglish, o a \captionsfrench, o a . . .

Ecco allora che torna comodo il comando diequivalenza attraverso uno dei vari giochetti chesi possono fare con i comandi primitivi: sia #1 ilparametro che rappresenta la lingua per la qualevogliamo fare l’estensione; dobbiamo creare un uni-co token formato agglutinando \captions con ilparametro in questione. La soluzione è la seguente

\expandafter\let\expandafter\@tempA\csname captions#1\endcsname

La spiegazione di questa costruzione è abbastan-za semplice: \let è un comando che rende duetoken equivalenti; nel nostro caso rende il tokenrisultato dell’operazione eseguita mediante la cop-pia \csname e \endcsname equivalente al token\@tempA. Invece la coppia \csname e \endcsnameprende la sequenza di token che essa racchiude,eseguendo eventuali sostituzioni se qualche token èsviluppabile, e trasforma l’intera sequenza di tokenottenuta in un’unica sequenza di controllo, quindiin un unico token; i due comandi \expandafterservono per eseguire gli altri comandi nell’ordinegiusto; il primo rimanda al secondo, che a sua vol-ta rimanda a \csname che esegue insieme al suocorrispondente \endcsname la creazione di un to-ken il cui nome è ottenuto agglutinando la parolacaptions con l’argomento che sostituisce il para-metro #1; eseguita per prima questa operazionel’interprete torna indietro a considerare i due to-ken saltati, specificatamente \let e \@tempA; se#1 vale spanish il gioco congiunto dei comandisuddetti equivale a

\let\@tempA\captionsspanish

per cui \@tempA diventa del tutto equivalente alcomando interno di babel \captionsspanish.

Infine dobbiamo creare la nuova definizione ag-giornata del comando \captions〈lingua〉; dobbia-mo cioè usare i token della vecchia definizione cheabbiamo messo nel registro token 0 e gli ulteriori co-mandi che ci servono nel testo della (ri)definizionedel comando che ci interessa. Per fare questo ab-biamo bisogno di svuotare il registro token che

10

Page 13: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

I registri token: questi sconosciuti ArsTEXnica Nº 1, Aprile 2006

abbiamo appena caricato e lo dobbiamo fare all’in-terno della nuova definizione; in definitiva, aggiun-gendo qualche warning adeguato, il nostro nuovocomando LATEX è il seguente:

\newcommand*\ExtendCaptions[3]%\@ifundefinedcaptions#1%\PackageWarningtoptesi%Language option #1 not specified\MessageBreakSkipping any redefinition\MessageBreak%%\expandafter\let\expandafter\@tempA\csname captions#1\endcsname\toks0=\expandafter\@tempA%

\def\summaryname#2%\def\acknowledgename#3%

\expandafter\xdef\csname captions#1\endcsname\the\toks0%%

Si noti che il comando \the estrae da qualunqueregistro il suo contenuto; per i contatori LATEX essonon può essere usato, ma c’è il comando alternativo\value; per le scatole c’è il comando \usebox; perle lunghezze elastiche, invece, e per gli altri registri,\the funziona come per TEX. Per i registri token\the estrae i token che esso contiene.

Ora la lettura diventa abbastanza semplice; ilnuovo comando \ExtendCaptions accetta tre ar-gomenti; il primo è il nome della lingua per la qualesi vogliono eseguire i comandi che esso contiene;il secondo e il terzo sono le stringhe che sosti-tuiscono nella lingua specificata le parole italiane“Sommario” e “Ringraziamenti”.

Se si dà il comando

\ExtendCaptionsspanishResumen%Agradecimientos

viene esteso il significato di \captionsspanishin modo che quando viene eseguito il comando\selectlanguagespanish anche il titolo del ca-pitolo del sommario e quello dei ringraziamenti ven-gono correttamente e automaticamente compostiin spagnolo.

Il lettore attento potrebbe ora per esercizio ride-finire la macro \ExtendCaptions che non si limitia definire nella lingua giusta le infix string soloper il sommario e per i ringraziamenti; potrebbecreare una macro che definisce parametricamenteanche la sequenza di controllo che contiene la in-fix string desiderata. Con questa nuova macro sipotrebbe aggiungere alle altre definizioni quella di\definitionname, per esempio, affinché contenga“Definizione” in italiano, “Definition” in inglese oin francese, “Definición”3 in spagnolo, eccetera. Lamacro desiderata dovrebbe quindi richiedere tre ar-gomenti: (a) il nome della lingua, (b) la parte della

3. Si noti che per generalità è necessario scrivere gli ac-centi presenti nelle infix string con la loro corretta sequenzaTEX; nel caso di “Definición” bisognerebbe scrivere quindiDefinici\’on.

sequenza di controllo senza name che si intende de-finire, (c) la infix string da usare nella definizione.Si veda più avanti un esempio di applicazione diquesta macro. . .

Perché fare tutto ciò quando sarebbe bastato cor-reggere le definizioni all’interno di spanish.ldf?Ma perché nessun utente serio e corretto del si-stema TEX si azzarderebbe mai a modificare i filedi sistema; ogni utente serio e corretto sa infattiche se vuole fare qualcosa di personale, lo può faretranquillamente copiando e modificando quantogià si trova nei file di sistema, ma lo fa all’interno dipropri file contenenti macro personali; al massimose deve spedire un proprio documento sotto formadi file sorgente, avrà cura di allegare anche il pro-prio file di macro personali, o almeno una selezionedi queste macro, quelle veramente necessarie.

Si noti che nelle definizioni dell’esempio si è fattouso del carattere @; questo implica che le definizionicosì come sono non possono essere collocate nel pre-ambolo di nessun documento, a meno di non farleprecedere dal fatidico e pericoloso \makeatletter;fatidico, perché la maggior parte degli utenti diLATEX se ne dimentica assai spesso; pericoloso, per-ché togliendo la protezione fornita dal carattere“non lettera”, ma reso temporaneamente “lettera”,è possibile ridefinire per sbaglio qualche comandointerno di sistema, col risultato di produrre sfilzedi errori incomprensibili e difficili da correggere.Nel mio esempio tutte le sequenze sono controllate;ma se anche non lo fossero, tutto il lavoro eseguitoda \ExtendCaptions viene eseguito all’interno diun gruppo formato dalle due parentesi graffe che illettore attento avrà notato, una all’apertura delladefinizione e l’altra alla chiusura.

Forse si è domandato a cosa possano servire;servono appunto a rendere locali al gruppo le defi-nizioni di tutti i comandi intermedi; l’unico che tra-scende il gruppo è quello definito mediante \xdef.Esso esegue una definizione mediante la sostitu-zione eventuale di tutti i token sviluppabili checompaiono nella definizione, ma rende anche ladefinizione globale. LATEX manca di comandi equi-valenti a \edef (definisci espandendo i token del-la definizione) e a \xdef (definisci globalmenteespandendo i token della definizione); per fortunaLATEX manca di questi comandi, perché nelle ma-ni di persone inesperte potrebbero causare danni“irreparabili”.

LATEX è fatto, come tutti ben sappiamo, percomporre documenti composti bene; chi scrive co-mandi personali, o file di classe, o di estensione,non compone documenti, ma scrive programmi percomporre documenti; solo in questo caso è lecitoservirsi di tutti i possibili comandi di basso livello,avendo cura di controllare che tutto si svolga comeprevisto e che non si dissemini il terreno utilizzatocon mine vaganti che regolarmente esplodono nellemani altrui, oppure anche nelle proprie, ma dopo

11

Page 14: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 I registri token: questi sconosciuti

diverso tempo, quando non ci si ricorda più deidettagli del proprio programma.

4 Alternative alla soluzione trovata

È interessante esaminare le alternative, se esistono,alla soluzione trovata.

In versioni precedenti alla 4.00.00 di TOPtesi ave-vo cercato di risolvere il problema senza ricorrere aitoken; la soluzione trovata funzionava bene solo conle due lingue di default, l’italiano e l’inglese. Avevodefinito due comandi \italiano e \english che,oltre ad invocare il cambio di lingua fornito dalpacchetto babel, (ri)definivano il contenuto delledue stringhe \summaryname e \acknowledgenamein accordo con la lingua scelta. La soluzione erasemplice ma non estensibile ad altre lingue arbitra-riamente scelte dal laureando; essa non consentivanemmeno di cambiare le parole che quei comandiinserivano in quelle due infix string.

Un’altra alternativa avrebbe potuto essere quellausata dal pacchetto layout.sty; questo pacchettodefinisce un comando che permette di ottenere ildisegno del layout della pagina; esso è un disegnonel quale compaiono il rettangolo del testo, delletestatine e dei piedini, ma vi compaiono anche levarie misure e le varie distanze fra i vari oggettiche compongono quel layout; il pacchetto è mol-to utile quando si cerca di ridisegnare il layoutdelle pagine per ottenere non solo una hardcopydi quanto fatto, ma anche per meditarci sopra edeventualmente apportarvi le necessarie correzioni.Tutte le informazioni verbali riportate sul disegnosono nella lingua prescelta; nella versione ingle-se comparirà quindi “Header”, mentre in quellaitaliana comparirà “Testatina”, eccetera.

Bene, tutte queste serie di infix string inseritenei comandi interni che eseguono il disegno sonocontenute in sequenze di controllo che vengono atti-vate con l’opzione scelta nell’invocare il pacchetto;per esempio, invocando il pacchetto con

\usepackage[italian]layout

tutte le informazioni verbali verranno scritte initaliano. Non è però possibile cambiare lingua; ilmassimo che si può fare è di indicare la lingua sceltafra le opzioni globali della classe del documentoe la lingua di default sarà quella che verrà usatanei disegni. Cambiando lingua nel documento, essacambia ovunque tranne che nel disegno prodottoda layout.sty; inoltre non è possibile cambiarele infix string di default.

Ora per il pacchetto layout.sty non si puòdire che la soluzione trovata non vada bene; infondo si tratta di un pacchetto per generare del-l’informazione grafica che serve al compositore, mache verosimilmente non verrà inserita in nessundocumento da rendere di pubblico dominio.

Il pacchetto varioref.sty4 si trova in una posi-zione simile; ma la soluzione trovata ricorre ad unaparticolarità di babel; questo pacchetto accetta unaserie di infix string inserite nella definizione di unamacro ottenuta agglutinando la sequenza \extrascon il nome della lingua, così come lo riceve babelnella lista delle sue opzioni; esiste quindi una se-quenza \extrasitalian che contiene le parole initaliano, una sequenza \extrasenglish che contie-ne quelle in inglese, eccetera. Esistono le traduzioniin molte delle oltre 30 lingue gestibili con babel, maper alcune nessun volontario si è fatto avanti perfornire le traduzioni, per cui le sequenze relativea quelle lingue continuano ad usare le infix stringinglesi, ma al momento dell’uso viene emesso unmessaggio di avvertimento che presenta le “scuse”del pacchetto per non essere in grado di forniretraduzioni adeguate.

Il comando \selectlanguage oltre a cambiarei \captions delle diverse lingue cambia anche gli\extras di quelle lingue, quindi la semplice selezio-ne della lingua da usare attiva anche le infix stringspecifiche del pacchetto varioref.sty. Questa so-luzione è corretta ed elegante, ma presume che lesequenze \extras siano definite per tutte le linguegestibili da babel; in ogni caso non consente diridefinire le stringhe con parole diverse.

Concludendo: la soluzione ottenuta con l’usodei token e di un comando accessibile all’utentequale è \ExtendCaptions permette di limitarnel’uso alle sole lingue che veramente interessano neldocumento che il compositore sta scrivendo, nonrichiede “scuse” per le lingue mancanti (perché ilcompositore difficilmente scriverà in bahasa o inlusazio se non conosce quelle lingue; e se le cono-sce, sa anche come usare \ExtendCaptions) e inpiù permette di cambiare le stringhe anche per leparole che già vi compaiono di default. Se in ita-liano il compositore volesse, per esempio, scrivere“Indice generale” invece di “Indice”, basterebbe cheusasse la forma di \ExtendCaptions suggerita peresercizio al lettore semplicemente scrivendo

\ExtendCaptionsitaliancontents%Indice Generale

In questo modo verrebbe aggiunta in coda al-la lista di definizioni contenute all’interno di\captionsitalian la riga

\def\contentsnameIndice Generale

e questa seconda definizione di fatto sostituiscela prima, visto che nello scegliere la lingua italia-na si chiama implicitamente \captionsitalian equindi vengono eseguite le varie (ri)definizioni inessa contenute nell’ordine in cui sono scritte; se

4. Sia il file layout.sty sia il pacchetto varioref.sty sitrovano nella cartella /texmf/tex/latex/tools di qualun-que distribuzione del sistema TEX; i segni di barra diventanodi barra rovesciata per i sistemi Windows.

12

Page 15: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

I registri token: questi sconosciuti ArsTEXnica Nº 1, Aprile 2006

due definizioni si riferiscono alla stessa sequenzadi controllo, l’ultima eseguita è quella che vale.

In sostanza la soluzione ottimale dipende dall’u-so che si deve fare con le infix string; però a mepare che la soluzione ottenuta con l’uso dei tokene dei registri token sia la più versatile.

5 ConclusionePer usare i registri token bisogna servirsi di co-mandi di basso livello o di comandi primitivi delsistema TEX. Usando i registri token si possono farecose piuttosto utili, ma è anche possibile adden-trarsi in situazioni paludose, come succede semprequando si usano linguaggi di programmazione trop-po “potenti”; sebbene sembri rozzo, il linguaggio

primitivo del sistema TEX è potentissimo. Quindi:attenzione!

Nonostante questo avvertimento, il lettore non siscoraggi; programmare a basso livello consente difare cose che i comandi di alto livello generalmentenon possono fare; bisogna solo procedere con me-todo e controllare sistematicamente che i propricomandi non siano incompatibili con quelli di altripacchetti, ma, specialmente, che non interferiscanocon le macro di sistema.

. Claudio BeccariDipartimento di ElettronicaPolitecnico di [email protected]

13

Page 16: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Ridefinire i comandi primitivi di TEX e applicazionia LATEX

Enrico Gregorio

SommarioLa composizione tipografica eseguita da LATEX sibasa su alcuni comandi primitivi direttamente co-dificati nel programma TEX. È possibile, sapendociò che si fa, ridefinire questi comandi. Discuteròalcuni esempi di questo tipo che daranno idee peraltre ridefinizioni di comandi.

1 IntroduzioneTEX conosce circa trecento comandi primitivi, cioèche sono direttamente codificati nel programma.È sulla base di questi che vengono costruite leestensioni a tutti note: prima fra tutte il formatoPlain TEX, scritto dallo stesso D. E. Knuth (Knu-th, 1984), e il più noto LATEX, dovuto inizialmentea L. Lamport e poi sviluppato da un gruppo in-ternazionale (Braams et al.). In questo articoloassumerò che si lavori in LATEX.

Il comando primitivo più usato è \par. Forsequalcuno dei lettori non ha mai scritto la sequenzadi controllo \par nei suoi documenti; eppure hausato questo comando innumerevoli volte: infattiè TEX stesso che si occupa di convertire una rigavuota in un comando \par.

Un altro comando primitivo molto usato è\input, che ha una sintassi molto particolare: ilsuo argomento è la più corta stringa di caratterialfanumerici che lo segue (spazi e caratteri specialisono esclusi). “Un momento!” dirà più di qualcuno:si deve usare la sintassi

\input〈nomefile〉

come spiegato in tutti i manuali di LATEX. Ecco:questo è un esempio di ridefinizione di un comandoprimitivo.

Il comando \input originale ha una sintassi pe-culiare perché deve adattarsi a vari sistemi ope-rativi. D’altra parte l’autore di LATEX voleva na-scondere all’utente alcune difficoltà e, soprattutto,mantenere il più possibile l’uniformità della sintas-si. Un modo per risolvere il problema sarebbe didefinire

\newcommand\Input[1]\input #1

e quindi obbligare l’utente al comando \Input, cheavrebbe una forma non usuale (i comandi ‘pubblici’di LATEX sono tutti in minuscolo, tranne alcuni peraccenti o simboli).

Si noti l’uso di \newcommand, che è specifico diLATEX; una delle sue funzioni è di controllare che

il comando che si vuole introdurre non sia giàesistente; se è già definito un comando con quelnome, LATEX dà un errore. Questo controllo nonviene eseguito dal comando primitivo \def e dalsuo parente \let, che vedremo più avanti.

Come fare? La risposta è: ridefinire \input. Soloche qualcosa come

\renewcommand\input[1]\input #1

è destinato a fallire miseramente. Vedremo fra pococome si risolve il problema.

2 Il carattere @ e il comando \let

In molti comandi ‘interni’ di LATEX compare ilcarattere ‘@’. Questo carattere non può, normal-mente, essere usato in questo modo: i nomi deicomandi consistono (1) di una sola “non lettera”,(2) di una o più lettere (a–z, A–Z). Tuttavia, quan-do vengono letti i pacchetti e le classi (.sty e.cls) LATEX è in uno stato speciale nel quale ilcarattere @ è considerato come una lettera norma-le; a livello utente si può ottenere lo stesso conil comando \makeatletter che va poi annullatocon il comando \makeatother. I programmatoridi pacchetti usano questo trucco per scrivere co-mandi che non possano essere inavvertitamentemodificati. Ogni comando interno ha almeno uncarattere @ nel nome, proprio per questo.

Una delle prime righe di latex.ltx (checontiene le definizioni del nucleo di LATEX) è

\let\@@input\input

Anche qui vale la convenzione che @ è una lettera.Che cosa succede? Il comando \let seguito da duenomi di comando

\let\comandob\comandoa

fa in modo che \comandob abbia lo stesso signifi-cato attuale di \comandoa; successive ridefinizio-ni di \comandoa non influenzano il significato di\comandob. Attenzione: \let non esegue controllicome \newcommand e quindi è pericoloso, se usatoda mani non esperte.

Dunque abbiamo a disposizione un comandoequivalente a \input. Per inciso, questa è unaconvenzione usata in tutto il nucleo di LATEX: icomandi che cominciano con due caratteri @ sonodi solito equivalenti a uno dei comandi primitivi.Più in là in latex.ltx si trova qualcosa come

14

Page 17: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Ridefinire i comandi primitivi di TEX e applicazioni a LATEX ArsTEXnica Nº 1, Aprile 2006

\renewcommand\input[1]\@@input #1

e questo adesso funziona! A dire il vero la defi-nizione è un po’ più complicata: non importa, lafunzione essenziale che viene eseguita è questa.

Ora un comando come \inputpippo è, agliocchi di TEX, del tutto equivalente a

\@@input pippo

e, quando raggiunge le profondità del programmadove si eseguono solo comandi primitivi, fa ciò checi si aspetta: TEX legge il file pippo.tex.

Un altro comando primitivo ridefinito è \end. Ilsignificato di questo comando è ‘finisci qui’: quandoTEX lo incontra, considera chiuso l’ultimo paragra-fo ed emette tutte le pagine ancora da comporre(più parecchie altre cose che non sono rilevanti perla discussione).

Lamport decise che la struttura di LATEX fossead ambienti e che ciascuno di essi fosse delimitatoda \beginnome e da \endnome. Ovviamentesi rese necessario ridefinire il comando primitivocon lo stesso nome. Dunque

\let\@@end\end

dopo di che siamo liberi di definire \end come cipare, purché ci ricordiamo di usare \@@end per direa TEX di finire il lavoro. E infatti la definizione di\enddocument è

\def\enddocument%...\@@end

Già che ci sono, spiego a chi non lo sapesse cheil comando \beginnome esegue certe funzionie alla fine il comando \nome, mentre \endnomeesegue altre funzioni di controllo della situazionee il comando \endnome. Per questo \newcommandemette un messaggio di errore quando si cerca didefinire un comando il cui nome cominci con end.

Il comando \def è quello primitivo di TEX perintrodurre nuovi comandi. Il suo uso non è moltodifficile, ma va evitato se non si sa quello che sista facendo: come \let, infatti, non esegue alcuncontrollo sul nome del comando che si sta definen-do. Tuttavia è spesso l’unico modo di procedere.Vediamo un esempio, sempre da latex.ltx:

\def\@setpar#1\def\par#1\def\@par#1\def\@par\let\par\@@par\par\def\@restorepar\def\par\@par

Che fa il primo comando? Ha un parametro, primadi tutto. Quando viene eseguito, cambia la defi-nizione di \par e ridefinisce un comando \@parrendendolo equivalente a \par (ridefinito).

Il secondo comando definisce \@par; quando que-sta ‘incarnazione’ di \@par viene eseguita, il co-mando \par riprende il suo significato originale(che è ben conservato in \@@par) ed eseguito.

Il terzo comando, quando eseguito, fa diventare\par un comando che esegue \@par.

Confusi? Forse. L’idea è che \@setpar vengaeseguito dentro un ambiente (nel caso particolaretrivlist) e quindi le modifiche che fa a \par spa-riscono alla fine dell’ambiente stesso. Il coman-do \@restorepar viene usato nella definizione di\vspace e nelle funzioni di chiusura degli ambien-ti, per assicurarsi di ‘disfare’ eventuali modificheapportate a \par.

Usare \(re)newcommand in queste situazioninon sarebbe possibile per vari motivi.

L’idea di dare significati particolari a \par èstata usata dallo stesso Knuth nelle macro usateper comporre il TEXbook e gli altri volumi dellaserie Computers and Typesetting. Possiamo usareidee simili alle sue per fare una cosa un po’ stupida:

\makeatletter\let\ciao@@end\@@end\def\@@end\message^^J^^JCiao, %

ciao^^J^^J\ciao@@end\makeatother

nel preambolo fa in modo che alla fine di unacompilazione TEX ci saluti. Lo strano simbolo ^^Jserve a inserire nei messaggi a schermo un fine riga.Provatelo.

Che cosa abbiamo fatto? Semplicemente duplica-to la funzione di \@@end nel comando \ciao@@end(un nome come questo è difficilmente già definito)e poi ridefinito \@@end in modo che faccia appa-rire il messaggio e poi esegua \ciao@@end che èdel tutto equivalente al comando primitivo \endprima di qualsiasi ridefinizione.

3 Il pacchetto everyshiL’idea di ridefinire un comando primitivo è im-piegata nel pacchetto everyshi sul quale sono poibasati prelim2e e eso-pic. Il comando è uno di quellimisteriosissimi, \shipout.

Si tratta di un comando che nessuno usa maiesplicitamente: è quello che scarica nel .dvi o nel.pdf una pagina quando è completa con tanto dimateriale annesso (testatina, piè di pagina, note amargine e così via).

Il pacchetto è brevissimo, 31 righe di codice,ma molto efficiente e, soprattutto, indipendentedalle classi che si usano. Infatti la sua azione sisvolge dopo che LATEX ha composto una paginasecondo le impostazioni ricevute dalla classe e usasolo comandi di basso livello. Questo permette alpacchetto eso-pic di aggiungere alla pagina, peresempio, le filigrane (in inglese watermarks): unbel Top secret stampato in grigio sullo sfondo,se si vuole (si veda la documentazione di eso-picreperibile nella propria distribuzione o su CTAN1).

1. CTAN è l’acronimo di ‘Comprehensive TEX ArchiveNetwork, www.ctan.org.

15

Page 18: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Ridefinire i comandi primitivi di TEX e applicazioni a LATEX

Il pacchetto prelim2e scrive alcune cose nel piè dipagina, utili per identificare le versioni preliminaridi un documento.

Un altro uso della ridefinizione di \shipout èquello che si impiegava alcuni anni fa, quando lepossibilità di agire sui .dvi erano limitate e il pdfancora non esisteva. Un ingegnoso insieme di ma-cro permetteva di stampare due pagine, purché didimensioni appropriate, sullo stesso foglio e ren-deva possibile la produzione diretta di libretti informato A5. Oppure di risparmiare sui costosi foglidi acetato che servivano a produrre le lastre per lastampa offset2.

Al giorno d’oggi il problema è molto meno sen-tito: se si deve stampare un libro si manda al tipo-grafo un documento pdf con le pagine nel formatofinale e tutto finisce lì; con il pacchetto geometry èfacile definire un formato di ‘foglio’ arbitrario.

4 Usi veri delle ridefinizioniTutto quanto visto prima può sembrare complicato(e lo è); ma ci dà idee per cose che ci possono serviremolto più spesso.

Per esempio, vogliamo controllare se nel nostrolungo documento abbiamo abusato del corsivo dienfasi. Come fare perché ci salti agli occhi? Senzaperò modificare troppo il sorgente e senza doverandare in cerca dei comandi \emph.

Ridefiniamo \emph, questa è la risposta! Faremoin modo che il nostro corsivo di enfasi appaia inun vistoso rosso che a schermo balzerà evidente:

\usepackagecolor\newcommand\originalemph\let\originalemph\emph\renewcommand\emph[1]%

\originalemph\colorred#1

Ci sono altri modi per ottenere lo stesso risul-tato (Beccari, 2006), ma certamente questo èsemplice e molto efficace. A che cosa serve laseconda riga? Facile: siccome \let non control-la se il comando che segue sia già definito, usia-mo \newcommand per fare questo lavoro; così, seper caso \originalemph fosse già definito, LATEXreagirebbe con un messaggio di errore.

Supponiamo ora di voler stampare il nostro docu-mento senza che però compaiano le figure inseritecon \includegraphics; ovviamente vogliamo chelo spazio necessario sia lasciato bianco, quindi l’op-zione draft alla classe o al pacchetto graphicx nonè adatta, perché al posto dell’immagine stampa unriquadro con il nome del file grafico.

2. I fogli di acetato sono trasparenti e simili a quelli per letrasparenze; servivano da mastro per l’incisione delle lastremetalliche su cui veniva steso l’inchiostro per la stampa.Fra l’altro, andavano stampati in modo speculare perché iltoner doveva essere dal lato non a contatto con la lastra,sulla quale ovviamente andava incisa l’immagine specularedella pagina.

Un modo potrebbe essere quello di definirsi uncomando \myig per fare ciò che si desidera. Mail documento conterrebbe questo comando e nonl’usuale. Si può fare? Certo che si può.

\newcommand\origig\let\origig\includegraphics\renewcommand\includegraphics[2][]

\phantom\origig[#1]#2

Uso qui la possibilità di definire comandicon un argomento opzionale; nel nostro caso\includegraphics viene ridefinito con un ar-gomento opzionale e uno obbligatorio. Ciò cheviene sostituito all’argomento opzionale quandonon sia specificato è niente. Come in preceden-za, \newcommand\origig serve a evitare diridefinire un comando che abbia già un significato.

Esaminiamo ora una chiamata tipica:

\includegraphics[scale=.5]pippo

Questa viene tradotta in

\phantom\origig[scale=.5]pippo

Sappiamo che \phantom compone ciò che ha comeargomento, ma poi lascia solo lo spazio richiesto.Siccome \origig ha lo stesso significato originaledi \includegraphics abbiamo ottenuto quello chedesideravamo. Se scriviamo

\includegraphicspippo

questo risulta in

\phantom\origig[]pippo

ma a \includegraphics originale non dà alcunfastidio avere un argomento opzionale vuoto. Voi-là. Il documento ha gli stessi comandi che avreb-be normalmente e basterà cancellare le due ri-ghe in cui abbiamo definito \origig e ridefinito\includegraphics per avere un documento chenon usa alcun comando strano.

Un problema apparentemente più complicato èquello di colorare tutte le tabelle di verde; precisa-mente vogliamo che ogni elemento della tabella siaverde, testo e linee. Ovviamente vogliamo mante-nere la possibilità di specificare per un ambientetabular l’argomento opzionale di allineamento especificare l’ambiente con il suo nome usuale: sitratta di un espediente temporaneo per mettere inevidenza le tabelle.

Qui viene a proposito il modo con cui LATEXcomincia l’ambiente nome, ricordate? Viene ese-guita una serie di azioni, l’ultima delle quali èl’esecuzione del comando \nome.

\newcommand\origtabular\let\origtabular\tabular\renewcommand\tabular%

\colorgreen\origtabular

16

Page 19: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Ridefinire i comandi primitivi di TEX e applicazioni a LATEX ArsTEXnica Nº 1, Aprile 2006

Che succede quando si chiama tabular dopo averdato questi comandi? Le solite azioni di inizioambiente vengono svolte, per finire viene emesso ilcomando \tabular che ora significa

\colorgreen\origtabular

Quindi LATEX si prepara a scrivere in verde (me-glio, istruisce il driver a farlo) ed esegue il comando\origtabular che ha lo stesso significato dell’ori-ginale \tabular: questo allora va in cerca dei suoiargomenti al modo solito e quindi la sintassi è aposto.

Si noti che la dichiarazione di ‘scrivere in verde’avviene all’interno di un gruppo (che il comando\begin ha già aperto); quindi il corrispondente\endtabular ne annulla l’effetto: fuori da unambiente tabular il testo sarà nel colore normale.

Funziona tutto sempre? Be’, no. Supponiamodi non voler scrivere ogni volta \hline dopoogni riga di una tabella. Sfrutterò ora il fattoche all’interno di un ambiente tabular il comando\tabularnewline è equivalente a \\. Si potrebbepensare di scrivere

\newcommand\origtabular\renewcommand\tabular%\renewcommand\\\tabularnewline\hline%

\origtabular

cioè ridefinire \\ dopo aver cominciato l’ambiente,per avere ciò che ci aspettiamo. Giusto? No. Pro-vare per credere: nessun messaggio di errore, maniente linee orizzontali. Perché? Non è così facile: ilfatto è che lo stesso comando (originale) \tabularchiama un altro comando il quale ridefinisce a suavolta il comando \\. E ridefinire questo, che è diquelli che possono avere l’asterisco e un argomentoopzionale richiederebbe di ridefinirne un altro edi perdersi nel mare di definizioni: meglio scrivere\hline, dopo tutto (o magari evitarlo, in generale).

Ovviamente la strategia di definirsi nuovi am-bienti sulla base di ambienti dati rimane utilissima:se per caso abbiamo molte tabelle con un tipo fissodi struttura, è certamente conveniente definire

\newenvironmentfixtab\begintabularccc\endtabular

dove, ovviamente, ccc è il tipo di allineamentodesiderato. Questo ci permette, per esempio, dimodificare la struttura delle colonne di tutte letabelle di quel tipo agendo in un solo punto delsorgente.

5 ParametriMolti comandi hanno parametri (e quindi vannoin cerca, quando chiamati, dei loro argomenti).Quando si vogliono ridefinire, questi argomentipossono dare problemi.

Uno dei consigli che vanno maggiormente ascol-tati è quello di definirsi sempre comandi astrattiper le strutture logicamente distinte nel nostrodocumento. Per esempio, volendo usare notazioniuniformi per gli insiemi numerici (naturali, inte-ri, reali), è bene definirsi una struttura astratta edefinire i comandi in termini di quella:

\newcommand\nf[1]\mathbf#1\newcommand\N\nfN % naturali\newcommand\Z\nfZ % interi...

Ma qui c’è qualcosa di troppo che potremmo elimi-nare: ci si creda o no, la prima riga può diventaresemplicemente

\newcommand\nf\mathbf

(o addirittura, se si vuole essere un macho LATEXprogrammer, \let\nf\mathbf). In generale, è me-glio evitare di leggere gli argomenti quando nonè necessario, useremmo male la memoria di TEXe lo rallenteremmo. Vediamo infatti che cosa suc-cede con la prima definizione quando LATEX vede\nfX:

1. per prima cosa si cerca qual è l’argomento; nelcaso specifico, X;

2. viene sostituito \nfX con il suo sviluppo,cioè \mathbfX;

3. ora viene sviluppato \mathbf che va in cercadel suo argomento3.

C’è un passaggio di troppo: irrilevante qui, dovel’argomento è un singolo carattere. Può diventarloquando si deve valutare un argomento complessoe magari lungo parecchie righe.

Lo sviluppo della seconda definizione di \nfevita il problema.

Supponiamo, sempre per esempio, di voler farein modo che ogni sezione cominci una nuova paginae, come al solito, di non voler modificare sostan-zialmente il sorgente per poter tornare indietrofacilmente.

Il comando \section è ben diverso da\includegraphics: dare un argomento opzionalevuoto non è come non darlo. C’è anche il problemache l’argomento di \section è mobile e non lo sideve ‘agitare troppo’ per evitare problemi durantela composizione dell’indice. Per non parlare dellapossibilità che un asterisco segua il comando.

La soluzione dovrebbe essere ovvia, ormai:

\newcommand\oldsection\let\oldsection\section\renewcommand\section%

\clearpage\oldsection

3. Chi sa di inner LATEX obietterà che \mathbf non èveramente un comando con un argomento; di fatto quasinessuno dei comandi pubblici di LATEX ha argomenti. Ma,agli scopi pratici, questo è poco importante.

17

Page 20: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Ridefinire i comandi primitivi di TEX e applicazioni a LATEX

Lasciamo a \oldsection il problema di cercarel’asterisco, di vedere se c’è l’argomento opzionalee di valutare l’argomento obbligatorio. Notiamoche questo funziona anche quando si siano caricatipacchetti come titlesec o sectsty che modificano lostesso comando \section, purché la nostra ridefi-nizione avvenga dopo il caricamento del pacchettoe la relativa scelta del formato dei titoli di sezione.

6 Come distinguere le situazioni?Abbiamo visto due diverse situazioni in cui è ne-cessario adottare strategie diverse per ottenerelo scopo voluto. Se però ci pensiamo, non è cosìcomplicato scegliere quella più opportuna.

Nel caso di \includegraphics siamo forzati ascegliere di definire un comando con argomentiperché dobbiamo fornire il risultato come argo-mento di \phantom; siamo fortunati perché il co-mando \includegraphics accetta un argomentoopzionale vuoto senza alcun problema. Nel casodi \section, dobbiamo solo aggiungere qualcosaprima di eseguire il comando stesso.

Entriamo ora un po’ più a fondo nei meandri delnucleo di LATEX per vedere una diversa applicazio-ne. Come sempre sarà un’applicazione inutile, mal’idea può forse essere usata per cose più aderentialla realtà.

Usiamo la classe book; vogliamo che i titoli deicapitoli non numerati siano scritti in rosso.

Possiamo ridefinire semplicemente \chapter?Forse, ma dovremmo cominciare a vedere se ilcomando è seguito dall’asterisco oppure no. LATEXpermette di definire facilmente comandi con unargomento opzionale, ma non comandi con la formavariata.

Come possiamo agire? Guardiamo book.cls ecerchiamo la definizione di \chapter. Vedremo chealla fine di quelle righe c’è

\secdef\@chapter\@schapter

Un po’ di intuizione ci dice che \@chapter è ilcomando che viene chiamato quando non c’è l’a-sterisco. Quello che ci serve allora è \@schapter.Un’altra scorsa a book.cls rivela che \@schapterè un comando con un argomento.

La ricerca è finita: basterà dare

\makeatletter\let\old@schapter\@schapter\renewcommand\@schapter[1]%

\old@schapter\colorred#1

Un’applicazione certamente più intelligente èquella di aggiungere automaticamente una riga\addcontentsline basata sul titolo del capitolo ela lascio come esercizio al lettore. Una piccola com-plicazione: vogliamo che l’indice vada nell’indice?Il suggerimento è di rendere attiva una modificadel genere dopo aver composto l’indice e gli elenchidi tabelle e figure.

7 Evitare di leggere un argomentoinutilmente

Mi cimento ora con una ridefinizione più compli-cata di quelle viste prima. Il problema è quello discrivere in rosso il contenuto di ogni \mbox.

Userò il fatto che l’argomento di \mbox può es-sere delimitato anche da \bgroup e \egroup oltreche da e ; inoltre possiamo usare sia un tipo didelimitatore che l’altro. Do subito il codice.

\let\redmbox\mbox\def\mbox\afterassignment\doredmbox

\let\next= \def\doredmbox\redmbox\bgroup

\colorred

Qui uso \def perché sto facendo cose piuttostocomplicate e perciò mi servo di comandi a bassolivello (come i grandi programmatori che usanol’Assembler). In questo caso \newcommand sarebbeandato bene lo stesso.

La procedura è sempre la stessa: si definisce unequivalente del comando da modificare. Il proble-ma qui è che vogliamo entrare nell’argomento di\mbox, aggiungere la specifica del colore rosso e poifar eseguire il comando \mbox originale sul nuovoargomento.

Entra in gioco di nuovo \let. La descrizionedella sintassi di \let indicata in precedenza non ècompleta. In realtà

1. \let deve essere seguito da un nome dicomando;

2. subito dopo può esserci un carattere = il qualepuò essere seguito da uno spazio;

3. infine ci vuole un token (vedi Beccari (2006)per sapere che cos’è un token).

È perfettamente lecito scrivere \let\xxx=a; intal caso il comando \xxx si comporta quasi sem-pre come il carattere ‘a’. Siccome il carattere = èopzionale, andrebbe bene anche \let\xxx a, manon sarebbe altrettanto leggibile.

Nel nostro caso il comando \redmbox, dopo avereseguito

\afterassignment\doredmbox

esegue \let\next= e quindi fa diventare \nextequivalente alla parentesi graffa che segue \mbox4.

Che cosa fa \afterassignment\doredmbox? Ilsuo scopo è di eseguire \doredmbox dopo che èstato eseguito \let (che è un comando di assegna-zione). Che cosa fa \doredmbox? Il suo sviluppoè

4. Qui il carattere = è necessario; infatti, nel caso (im-probabile) che uno scriva \mbox= (che è lecito), LATEXassegnerebbe a \next il significato del token che segue.È un TEXnicismo, ma è meglio essere precisi; insomma,\let\next== assegna a \next il significato del carattere =,mentre \let\next= è ancora incompleto.

18

Page 21: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Ridefinire i comandi primitivi di TEX e applicazioni a LATEX ArsTEXnica Nº 1, Aprile 2006

\redmbox\bgroup\colorred

cosicché \redmbox ‘vede’ un argomento che è quellodato ma con aggiunta all’inizio la specifica delcolore rosso.

In definitiva, la parentesi graffa aperta che segue\mbox viene ‘mangiata’ con \let\next=, quindiTEX vede \redmbox che è equivalente a \mbox ori-ginale, poi la graffa aperta (\bgroup) e il comandodi scrivere in rosso. È come se scrivessimo ognivolta

\mbox\colorred...

invece che \mbox..., che è ciò che volevamo.Il comando \next viene definito, ma non fa nien-

te, se non ingoiare la graffa. È tradizione usarloproprio per scopi come questo, Knuth lo chiamascratch macro, cioè ‘macro per scarabocchi’, comese fosse un pezzo di carta per prendere appunti.

8 Impacchettare le modificheSupponiamo di aver deciso di modificare alcunicomandi a nostro uso durante la composizione (peresempio il rosso per il corsivo). Desideriamo rende-re ancora più semplice l’operazione di attivazioneo disattivazione delle modifiche.

Il modo più indolore per ottenere lo scopo è didefinirsi una propria classe nella quale incorporarequeste modifiche. A documento terminato, saràcosì necessario solo cambiare una riga del sorgente,scegliendo la classe definitiva, diciamo arstexnica.

Il compito sembra imponente, ma vedremo che èsemplicissimo. Apriamo un file myarstexnica.clsnel quale scriveremo

\NeedsTeXFormatLaTeX2e[1995/12/01]\ProvidesClassmyarstexnica\DeclareOption*%\PassOptionsToClass\CurrentOption%arstexnica

\ProcessOptions\relax

\LoadClassarstexnica\RequirePackagecolor

\let\myat@emph\emph\renewcommand\emph[1]%

\myat@emph\colorred#1

\let\myat@redmbox\mbox\def\mbox\afterassignment\myat@doredmbox

\let\next= \def\myat@doredmbox\myat@redmbox\bgroup

\colorred

A seguire scriveremo il codice delle altre modifi-che desiderate e termineremo con \endinput. Lanostra classe è pronta: non era poi così difficile.Possiamo tenere questo file nella stessa cartella

dove abbiamo il documento da comporre oppuretrasferirlo in una delle aree (locali) dove TEX cercaclassi e pacchetti.

Un paio di annotazioni. Le prime due righe sonodi identificazione, la terza e la quarta servono apassare le opzioni date alla classe myarstexnicanell’argomento opzionale di \documentclass allaclasse arstexnica che viene caricata in seguito. Lanostra classe privata non definisce alcuna nuovaopzione, anche se sarebbe possibile farlo.

La riga successiva è necessaria per elaborare leopzioni. Viene poi caricata la classe sulla quale lanostra si basa e anche il pacchetto color essenzialese vogliamo colorare di rosso qualcosa.

I caratteri ‘%’ servono per evitare di lasciarespazi bianchi non voluti nel documento finale; ingenerale è meglio usarli, quando si scrivono defini-zioni, nelle righe che non finiscono con un nomedi comando. Qui e in altri punti dell’articolo lerighe sono spezzate per esigenze tipografiche, nellapratica molte non lo sarebbero.

Ultima nota: quando si scrive una classe o unpacchetto, è conveniente usare come nomi privatidi comandi un prefisso seguito dal carattere ‘@’;se il prefisso è scelto bene, sarà improbabile chesi ridefiniscano comandi già esistenti. In questocaso ho scelto come prefisso myat; a parte la dif-ferenza di nomi, la tecnica è quella spiegata inprecedenza. Per esempio, \myat@emph corrispondea \originalemph della sezione 4.

A questo punto il nostro documento cominceràsemplicemente con

\documentclass[〈opzioni〉]myarstexnica

e ci basterà cancellare due lettere per ottenere ildocumento finale.

La classe arstexnica è quella usata per comporrequesta stessa rivista, la si può scaricare dal sitodi guIt all’indirizzo http://www.guit.sssup.it/downloads/arstexnica.zip

Riferimenti bibliograficiBeccari, C. (2006). «I registri token: questi

sconosciuti». ArsTEXnica.

Braams, J., Carlisle, D., Jeffrey, A., Lam-port, L., Mittelbach, F., Rowley, C. e Schö-pf, R. «The LATEX 2ε sources». Compreso nelladistribuzione di LATEX.

Knuth, D. E. (1984). The TEXbook. Addison-Wes-ley, Reading, MA, USA.

. Enrico GregorioDipartimento di Informatica, Univer-sità di [email protected]

19

Page 22: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Semplici figure con l’ambiente picture

Massimo Caschili

SommarioUna breve guida: come usare picture, l’ambientestandard di LATEX per creare semplici ma efficacifigure.

1 IntroduzioneL’ambiente picture delimita uno spazio all’inter-no del quale è possibile inserire degli oggetti. Glielementi sono inseriti con precisione usando unsistema di riferimento e le coordinate rispetto atale sistema. La posizione relativa degli oggettiformerà la figura complessiva. Gli oggetti, inseriticon un comando specifico, possono essere linee,vettori (o frecce), rettangoli, cerchi, ovali, curveo testo semplice. Il disegno, nel suo complesso, èquindi composto assemblando questi oggetti, lecui dimensioni sono espresse in unità. Le modali-tà d’utilizzo delle unità di misura meriterebberoun articolo dedicato, ma al momento occorre solosapere che il disegno costruito nell’ambiente pic-ture è proporzionale all’unità di misura indicatadal parametro \unitlength. Nel caso non vengaspecificato, il valore standard adottato è pari a unpunto tipografico (1pt, vedi tabella 1) che è possi-bile (e spesso conveniente) modificare nel seguentemodo:

\setlength\unitlength1mm

A partire dal punto in cui è stato inserito il coman-do, l’unità avrà il valore indicato, che, in questocaso, è stata posta pari a un millimetro. Se sidecidesse di modificarla, ponendola ad esempiopari a dieci millimetri, tutti gli oggetti all’inter-no dell’ambiente risulterebbero ingranditi di diecivolte fuorché il testo. La modifica del valore di\unitlength non ha effetti sul testo.

2 Dichiarazione dell’ambienteL’ambiente ha la seguente sintassi:\beginpicture(∆x, ∆y)(xa, ya)...Oggetti...\endpicture

Gli argomenti ∆x e ∆y indicano rispettivamentela larghezza e l’altezza dell’area che conterrà il dise-gno, espressi nelle unità correnti, mentre le coordi-nate xa e ya individuano l’angolo inferiore sinistro

in 1 in = 2, 54 cm1 in = 72, 27 pt

pt 1 pt = 0, 3515 mmbp 1 in = 72 bppc 1 pc = 12 ptdd 1157 dd = 1238 pt

1 dd = 0, 3759 mmcc 1 cc = 12 ddem Misura relativa pari all’altezza della

lettera M del carattere correnteex Misura relativa pari alla larghezza

della lettera x del carattere corrente

Tabella 1: Unità di misura

dell’area delimitata dall’ambiente rispetto all’ori-gine delle coordinate. Se si pone (0,0), l’originecoincide con l’angolo inferiore sinistro dell’area:omettere (xa, ya) equivale a porre (0,0).Esempio:

\beginpicture(50,40)(0,0)...\endpicture

Questo codice delimita un’area con le caratteristi-che evidenziate in figura 1. Le linee tratteggiate1

delimitano il perimetro dell’area con larghezza 50unità ed altezza 40 unità. Si noti la posizione del-l’origine delle coordinate (0,0): l’angolo superioredestro avrà di conseguenza coordinate (50,40).

larghezza 50

alte

zza

40

origine (0, 0)=

(50, 40)

Figura 1: Area delimitata dall’ambiente picture

Più esattamente il codice è:

1. Il tratteggio è usato solo per evidenziare l’area definitadall’ambiente, che in realtà, ha bordi invisibili.

20

Page 23: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

L’ambiente picture ArsTEXnica Nº 1, Aprile 2006

\begincenter\setlength\unitlength1mm\beginpicture(50,40)(0,0)

oggetti\endpicture\endcenter

L’ambiente center centra la figura e, nella secondariga, si fissa ad un millimetro l’unità di misura perl’ambiente \picture.

Proviamo ora a cambiare le coordinate dell’an-golo inferiore sinistro, portandole a (5,5) come infigura 2.

L’area delimitata ha le stesse dimensioni di pri-ma, come mostra il codice seguente usato pergenerarla:\beginpicture(50,40)(5,5)...\endpicture

Il punto di coordinate (0,0) risulterà fuori dall’area‘protetta’ dall’ambiente. Ciò significa che è possibi-le posizionare gli oggetti in qualunque punto dellapagina rispetto all’area individuata dall’ambiente,come ad esempio il punto di coordinate (-19,0); ov-viamente ciò comporterà possibili sovrapposizionicon altri elementi della pagina.

r origine (0,0)

(5,5)

(55, 45)

Haa

!son

ofu

orid

all’a

rea

prot

etta

(-19,0)

rFigura 2: Origine diversa da (0,0) e oggetti fuoriarea

Per inserire gli oggetti nell’ambiente si usa ilcomando \put, la cui sintassi è:

\put(x,y)oggetto

(x,y) Indicano le coordinate in cui inserirel’oggetto.

oggetto Indica uno qualunque degli oggetti del-l’ambiente, l’oggetto può anche essere delsemplice testo.

Per inserire più volte il medesimo oggetto:

\multiput(x,y)(∆x,∆y)noggetto

(x,y) Indicano le coordinate dalle quali partel’inserimento multiplo dell’oggetto.

(∆x,∆y) Indicano la distanza (orizzontale ∆x, everticale ∆y) che deve separare un oggettodall’altro.

n Indica quante volte deve essere ripetutol’inserimento, cioè quanti oggetti inserire.

oggetto Indica uno qualunque degli oggettidell’ambiente, o un testo.

Inserire un oggetto significa mettere il punto diriferimento dell’oggetto in coincidenza delle coor-dinate indicate. È bene chiarire cosa sia questopunto di riferimento: ogni oggetto ha il suo e sa-rà indicato nella sezione dedicata (es. il punto diriferimento di un rettangolo è l’angolo inferiore si-nistro). Per quanto concerne il punto di riferimentodei caratteri è bene far riferimento alla figura 3;si noti la posizione del punto di riferimento per icaratteri G e g. I punti di riferimento dei caratteridella stessa parola cadono tutti quanti sulla lineadi base.

Punto di riferimento -gqLinea di base - Giglioq

Gq iq gq lq iq oq

Figura 3: Linea di base e punto di riferimento

Semplificando, possiamo dire che TEX e LATEXtrattano i caratteri come oggetti inseriti in scatole:per ogni parola sarà costruita un’unica scatola con-tenente la sequenza delle scatole relative a ciascunalettera che forma la parola.

\put(35,45)Testo

(35,45) -Testo

\multiput(20,10)(10,10)3X

X

X

X

-

6

∆x = 10

∆y = 10(20,10)

@@R

Figura 4: Esempio dell’uso di \put e \multiput

3 RettangoliUn rettangolo2 può essere prodotto con uno deiseguenti comandi:

2. Nei manuali in inglese si parla genericamente di box,cioè scatola.

21

Page 24: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 L’ambiente picture

Opzioni Significato

t Alto, sul limite superiore del rettan-golo, centrato rispetto alla larghezza.

b Basso, sul limite superiore del rettan-golo,centrato rispetto alla larghezza.

l Sinistra, sul limite sinistro del ret-tangolo,centrato rispetto all’altezza.

r Destra, sul limite destro del rettan-golo,centrato rispetto all’altezza.

s Estende il testo orizzontalmente peroccupare tutta la lunghezza dellascatola, centrato verticalmente.

tl Alto e a sinistra, inserisce il testopresso l’angolo in alto a sinistra.

tr Alto e a destra, inserisce il testopresso l’angolo in alto a destra.

bl Basso e a sinistra, inserisce il testopresso l’angolo in basso a sinistra.

br Basso e a destra, inserisce il testopresso l’angolo in basso a destra.

Tabella 2: Le opzioni per i comandi \makebox,\framebox, \dashbox indicano in quale posizione,relativa al rettangolo sarà inserito il testo.

\makebox(∆x,∆y)[opzioni]ogg.\framebox(∆x, ∆y)[opzioni]ogg.\dashboxltratt(∆x,∆y)[opzioni]ogg.

Le opzioni sono riportate nella tabella 2.Il comando \makebox crea un rettangolo con

perimetro invisibile.Il comando \framebox crea un rettangolo con

perimetro continuo.Il comando \dashbox crea un rettangolo con pe-

rimetro tratteggiato e lunghezza del tratteggio paria ltratt; ∆x e ∆y definiscono rispettivamente lalarghezza e l’altezza del rettangolo.

\makebox

\framebox

\dashbox

Figura 5: Tipi di rettangoli con relativo comando,hanno tutti le stesse dimensioni, il primo ha i bordiinvisibili

Il comando \shortstack è un po’ particolare:crea un rettangolo con bordi invisibili e opera comeuna tabella a colonna singola. Il testo, accettatocome argomento, può essere disposto su più righeseparate dal comando \\. L’indicazione riguardo

t

rl

b

tl tr

bl br

nessuna opzione

Figura 6: La disposizione delle lettere corrispondealla disposizione data dalle relative opzioni.

l’allineamento del testo è opzionale e lo stile predefi-nito è quello centrato. Per ottenere un allineamentoa destra o a sinistra si usa rispettivamente r e l.La sintassi completa del comando è:

\shortstack[op]ogg \\ . . . \\. . .

lFraseincatastar Frase

incatastar

rFrase

incatastar

HHHHHHY

1

Punto di riferimento

cr clrt

c e n t r o c e n t r o

Figura 7: In alto esempi per il comando\shortstack (si notino i punti di riferimento). Inbasso risultato del comando \dashbox, senza op-zione, con opzione s, con tratteggio di 0,5 1 e2 millimetri, il testo indica l’opzione usata perposizionarlo.

4 Linee e frecceL’oggetto linea (che in realtà è un segmento) si ot-tiene con il comando \line, mentre l’oggetto frec-cia (o vettore) si ottiene con il comando \vector.La sintassi per questi due comandi è:

\line(∆x,∆y)lung

\vector(∆x, ∆y)lung

Gli incrementi ∆x e ∆y sono rappresentati davalori interi che vanno da −6 a +6 per \linee da −4 a +4 per \vector; lung è l’incrementodella variabile x che individua l’ascissa del secondoestremo del segmento.

Vediamo un esempio in figura 8.Il segmento AB è stato tracciato con il seguente

codice:

\put(10,10)\line(2,1)35

22

Page 25: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

L’ambiente picture ArsTEXnica Nº 1, Aprile 2006

-

6

x

y

35 -

10

10

P∆y = 1

∆x = 2

qA

q

Bq

45

27,5

\put(10,10)\line(2,1)35

Figura 8: Oggetto linea e il codice relativo

Il comando \put(10,10) fissa il punto d’in-serimento dell’oggetto \line, di coordinate(10,10), che indichiamo con A. L’istruzione\line(2,1)35 traccia il segmento e il suo ar-gomento, (2,1), indica di quanto incrementare levariabili per dare al segmento una specifica incli-nazione. In pratica, aumentando di 2 la variabilex (mi sposto verso destra di due unità) e di 1 lavariabile y (mi sposto verso l’alto di una unità),si individua il generico punto ‘successivo’ del seg-mento. Dato che per due punti passa una e unasola retta, è così determinata l’inclinazione del seg-mento. Aumentando la variabile x di 35 unità, sidetermina la lunghezza del segmento e il puntoB avrà ascissa x = 10 + 35 (l’ordinata risulterày = 35

2 = 17, 5).

\thinlines oggetto

6

?

\thicklines oggetto

6

?

Figura 9: Linee e vettori con spessore\thinlines, in alto, e \thicklines.

Gli elementi \line, \vector, \circle, \ovalpossono essere disegnati anche con linee un piùspesse, anteponendo il comando \thicklines alcomando che produce l’elemento. Infatti, da quelpunto in poi fino alla chiusura dell’ambiente, tuttigli oggetti saranno disegnati con una linea più spes-sa, a meno d’inserire il comando \thinlines per ri-portare lo spessore delle linee allo stato predefinito(più sottile).

Il comando \linethicknessspess stabili-sce lo spessore delle linee con spess qualunque,che deve essere indicato con l’unità di misura;\linethickness ha effetto solo su \vector, \line(a patto che siano in posizione orizzontale o vertica-le), sugli oggetti \framebox, \dashbox e sulle cur-ve ottenute con \qbezier. Bisogna fare attenzioneall’uso combinato di \linethicknessspess e\vector, infatti, all’aumentare di spess, s’inspes-sisce il segmento ma non la punta della freccia(che risulta inglobata già con spessori modesti del-la linea). In tal caso, vista la resa scadente, se nesconsiglia l’uso. Per la precisione, \linethicknessnon ha effetto su \circle e \oval.

\linethicknessxmm Oggetto

0.1

-

0.5

-

1

-

1.5

-

1.5

-

Figura 10: Linee e rettangoli con diverso spessore,si noti la pessima resa sul comando \vector e, perspessori notevoli, con \dashbox.

0 1 2 3 4 5

Figura 11: Una semplice applicazione del co-mando \multiput e \line, vedi il codice nellasezione 9.

5 Circonferenze e cerchiGli oggetti circonferenza e cerchio possono esseretracciati, rispettivamente, con i seguenti comandi:

\circlediam

\circle*diam

per i quali la misura del diametro è espressa nel-l’unità corrente. Il diametro massimo consentitoper \circle è di 40pt, mentre il disco massimo ri-producibile con \circle* ha diametro pari a 15pt.Se si utilizzano unità diverse dal punto tipogra-fico, è bene operare la conversione nell’unità dimisura che si intende usare, vedi tabella 1. Il cen-tro del cerchio rappresenta il punto di riferimentodell’oggetto, si veda la figura 12.

23

Page 26: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 L’ambiente picture

-

6

O 15

30

10

p

10 Unità

\put(15,30)\circle10

5 Unità\put(15,10)\circle*5

Figura 12: Si noti che il punto di riferimento èil centro. Non tutte le misure del diametro sonopossibili, il diametro massimo per \circle è di40pt, per \circle* il massimo è 15pt

6 Angoli arrotondati

Il comando \oval, a dispetto del nome, non co-struisce veri e propri ovali o ellissi, ma piuttosto deirettangoli con angoli smussati. L’effetto è ottenutousando quarti di cerchio raccordati con segmenti,al limite di lunghezza nulla; la massima curvaturadei quarti di cerchio è pari a \circle con diametromassimo. La sintassi del comando è la seguente:

\oval(∆x,∆y)[op]

Le opzioni op permettono di disegnare partidell’oggetto e se tali opzioni si omettono, comemostrato in figura 14, la figura sarà disegnata perintero. Si noti che in figura 13 il punto di riferi-mento dell’ovale coincide con il centro della figuraintera.

\oval(30,15)'&

$%

r(15,15)

30 unità

15 unità

\oval(30,15)[lb]

&r

(15,15)

30 unità

15 unità

Figura 13: In alto, \oval è inserito con\put(15,15) e manca l’opzione, per cui la figu-ra è intera; sotto, l’opzione è indicata e traccia solola porzione inferiore sinistra dell’oggetto. Si notiche le dimensioni dei due oggetti, sono le stessecosì come è la stessa la posizione relativa del puntodi riferimento.

&bl & %b %br

r r r

'&l r

'&

$%

senza opzioner$%rr

'tl

' $t

$trr r r

Figura 14: Panoramica delle opzioni per \oval

7 CurveDisegnare curve generiche non è cosa da poco. Ilcomando \qbezier consente di disegnare curvesotto forma di archi individuati da tre punti (vedifigura 15), dove i segmenti sono tangenti alla curva.La sintassi del comando è:\qbezier(x1, y1)(x2, y2)(x3, y3)\qbezier[n](x1, y1)(x2, y2)(x3, y3)

@@

@@

@@

@@@qq

q

(40,0)

(10,30)

(50,40)

Figura 15: Curva \qbezier e relative tangenti

Se l’opzione è omessa, il tratto della curva risul-terà continuo, altrimenti viene descritta una curvacon un numero di punti pari a n. Il primo e ilterzo punto fissano gli estremi della curva mentreil secondo punto è quello d’intersezione delle tan-genti alla curva nei punti uno e tre. Se i tre punti(x1, y1)(x2, y2)(x3, y3) sono allineati, il risultatoè rappresentato da una retta.

8 Ambienti annidatiCome si è visto, l’ambiente picture genera un’areale cui dimensioni sono specificate al momento delladichiarazione d’apertura dell’ambiente. Quest’a-rea è a tutti gli effetti una scatola come le altretrattate da LATEX, ma occorre fare attenzione adindividuare il suo punto di riferimento che chiamia-mo (xa, ya). Esso, infatti, coincide con l’angolo

24

Page 27: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

L’ambiente picture ArsTEXnica Nº 1, Aprile 2006

r(5,30)

r(35,45)

r(55,55)

r(10,15)

r(45,30)

r(60,5)

Figura 16: Curva \qbezier con opzione n = 30, ein alto il risutato con tre punti allineati, in evidenzai punti di riferimento.

inferiore sinistro solo nel caso di (xa, ya) = (0, 0).Detto ciò, è possibile annidare un ambiente pic-ture all’interno di un altro e la posizione indicatada \put(xi, yi) inserirà l’ambiente in modo che(xa, ya) = (xi, yi). L’esempio di figura 17 è co-struito inserendo due ambienti all’interno di unterzo: in ciascuno degli ambienti è stato inserito unrettangolo di dimensioni uguali all’area dichiaratadall’ambiente stesso.

er1

r2

Figura 17: Ambienti annidati, tutti gli ogget-ti sono stati inseriti in (0,0), si veda il codicerelativo.

Codice figura 171 \begincenter2 \setlength\unitlength1mm3 \beginpicture(40,40)(0,0)4 \put(0,0)\framebox(40,40)5 \put(0,0)\circle26 \put(0,0)\beginpicture(20,10)(0,0)7 \put(0,0)\framebox(20,10)8 \put(0,0)\circle*19 \put(0,0)1

10 \endpicture11 \put(0,0)\beginpicture(20,20)(-15,-25)12 \put(0,0)\framebox(20,10)13 \put(0,0)\circle*1

14 \put(0,0)215 \endpicture16 \endpicture

Come si legge alla riga 6 (xa, ya) = (0, 0), que-sto ambiente è inserito esattamente all’origine del-le coordinate con \put(0,0). Il secondo ambien-te (riga 11) risulterà traslato perché (xa, ya) =(−15,−25). L’annidamento degli ambienti sempli-fica la costruzione di disegni complessi, costruendoi singoli pezzi in ambienti distinti per poi assem-blarli alla fine. Questa tecnica è stata usata perrealizzare la figura 13, come indicato dal codiceseguente:

Codice figura 131 \beginpicture(45,55)(0,0)2 \put(22.5,53)\makebox(0,0)3 \texttt\char‘\\oval(30,15)4 \put(0,0)\circle*15 \put(0,28)6 \beginpicture(45,25)(0,0)7 \put(15,15)\oval(30,15)8 \put(15,15)\circle*19 \put(0,5)\line(1,0)30

10 \put(0,4)\line(0,1)211 \put(30,4)\line(0,1)212 \put(15,11)\makebox(0,0)%13 \texttt(15,15)14 \put(15,2)\makebox(0,0)%15 \texttt30 unità16 \put(32,14)\texttt15 unità17 \put(31,7.5)\line(0,1)1518 \put(30,7.5)\line(1,0)219 \put(30,22.5)\line(1,0)220 \endpicture21 \put(22.5,25)\makebox(0,0)22 \texttt\char‘\\oval(30,15)[lb]23 \put(0,0)24 \beginpicture(45,25)(0,0)25 \put(15,15)\oval(30,15)[bl]26 \put(15,15)\circle*127 \put(0,5)\line(1,0)3028 \put(0,4)\line(0,1)229 \put(30,4)\line(0,1)230 \put(15,11)\makebox(0,0)%31 \texttt(15,15)32 \put(15,2)\makebox(0,0)%33 \texttt30 unità34 \put(32,14)\texttt15 unità35 \put(31,7.5)\line(0,1)1536 \put(30,7.5)\line(1,0)237 \put(30,22.5)\line(1,0)238 \endpicture39 \endpicture

9 Esempi e codiceIn questa sezione sono presentati diversi esem-pi, con relativo codice commentato, e il codicedi alcune figure dell’articolo.

25

Page 28: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 L’ambiente picture

Leggiamo il codice che riproduce la figura 11;la riga 1 apre l’ambiente center, che centrerà oriz-zontalmente la figura, e che si chiude con la riga15. La riga 2 dichiara un contatore di nome num,il cui valore predefinito è zero e sarà usato nellariga 9. Nella riga 3 si fissa la dimensione dell’unitàdi misura. Con la riga 4, l’ambiente costruirà unrettangolo privo di bordi di 50 per 15 millimetri.L’angolo inferiore sinistro dell’area coincide conl’origine delle coordinate e nel caso in questionel’indicazione facoltativa (0,0) è stata esplicitata.Con le righe 5-6-7 s’inseriscono i segmenti per letacche di uno, mezzo e cinque millimetri. La riga 8indica d’inserire sei volte quanto eseguito dal suo ar-gomento, che si chiude nella riga 10; \arabicnumspecifica che sarà mostrato il valore del contatorenum in cifre arabe. Tale contatore ha valore inizialepari a zero e, di volta in volta, viene incrementatodi una unità tramite \addcounternum1 (riga10). Infine \multiput ripete l’inserimento del valo-re del contatore. Si noti che, per centrare al meglioi numeri, essi vengono racchiusi uno ad uno (riga 9)all’interno di scatole di dimensione zero in altezza elarghezza. Si realizza ciò per far sì che il loro puntodi riferimento coincida con il centro del numero,il quale sarà posto nel punto indicato. La riga 11dichiara \thicklines, col risultato d’inspessire lalinea di tracciatura degli oggetti che seguono (vedianche il codice della figura 9).

Codice del righello di figura 111 \begincenter2 \newcounternum3 \setlength\unitlength0.1cm4 \beginpicture(50,15)(0,0)5 \multiput(5,0)(10,0)5\line(0,1)56 \multiput(1,0)(1,0)49\line(0,1)37 \multiput(0.5,0)(1,0)50\line(0,1)28 \multiput(0,8.5)(10,0)6%9 \makebox(0,0)\arabicnum

10 \addtocounternum111 \thicklines12 \put(0,0)\line(1,0)5013 \multiput(0,0)(10,0)6\line(0,1)6.514 \endpicture15 \endcenter

Il codice che riproduce la figura 9 mostra l’usodei comandi \thinlines (riga 4) e \thicklines(riga 15). Il significato di tali comandi è immediato:il primo, una volta dichiarato, influenza il codiceche lo segue fino alla dichiarazione del secondo. Idue comandi sono usati all’interno di un ambiente,pertanto essi hanno dominio solo al suo interno.

Codice figura 91 \beginpicture(45,58)(0,0)2 \put(22.5,53)\makebox(0,0)3 \texttt\char‘\\thinlines oggetto4 \thinlines5 \put(0,30)\vector(0,1)10

6 \put(0,40)\vector(1,1)107 \put(10,50)\vector(0,-1)108 \put(10,40)\vector(-1,-1)109 \put(15,30)\line(1,2)10

10 \put(15,40)\line(1,1)1011 \put(15,50)\line(1,0)1012 \put(30,30)\framebox(10,20)13 \put(22.5,23)\makebox(0,0)14 \texttt\char‘\\thicklines oggetto15 \thicklines16 \put(0,0)\vector(0,1)1017 \put(0,10)\vector(1,1)1018 \put(10,20)\vector(0,-1)1019 \put(10,10)\vector(-1,-1)1020 \put(15,0)\line(1,2)1021 \put(15,10)\line(1,1)1022 \put(15,20)\line(1,0)1023 \put(30,0)\framebox(10,20)24 \endpicture%

?

m

-r r

Fv

Fh

Figura 18: Questa figura è composta da cinqueoggetti: \circle*, \circle, \framebox, \vector,\line

Il codice della figura 18 contiene un comandonuovo alla riga 2, \frame, che come argomentoracchiude l’intero ambiente picture. Il suo unicoscopo è quello d’inserire la cornice alla figura. Laprima riga contiene l’indicazione dell’unità di mi-sura e a questo proposito si ricorda che, modifi-cando tale unità, la figura risulterebbe alteratain rapporto all’entità della modifica apportata esolo il testo alle righe 4, 10, 11 non ne verrebbecoinvolto. Se si desidera ingrandire o rimpiccio-lire il disegno è quindi consigliabile usare un’al-tra strada, che non sia quella di scalare l’unitàdi misura. Una buona lente è data dal comando\scaleboxscaoggetto del pacchetto graphics,dove sca è un numero che indica il fattore d’in-grandimento. Tale estensione si può richiamare in-serendo \usepackagegraphics nel preambolodel documento.

26

Page 29: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

L’ambiente picture ArsTEXnica Nº 1, Aprile 2006

Codice figura 181 \begincenter\setlength\unitlength0.5cm2 \frame\beginpicture(12,13)(0,0)3 \put(2,4)\vector(0,-1)2.54 \put(1,4)\framebox(2,2)m5 \put(2,6)\line(0,1)56 \put(3,11)\circle27 \put(3,12)\vector(1,0)88 \put(3,11)\circle*0.29 \put(8,12)\circle*0.2

10 \put(2.5,2.5)$F_v$11 \put(10,11)$F_h$12 \endpicture%

Figura 19: Un disegno con 12 curve \qbezier

La figura 19 è ottenuta con il seguente codice:

Codice per la figura 191 \begincenter2 \setlength\unitlength1mm3 \beginpicture(60,60)(0,0)4 \qbezier(30,15)(15,15)(15,30)5 \qbezier(15,30)(15,45)(30,45)6 \qbezier(30,45)(45,45)(45,30)7 \qbezier(45,30)(45,15)(30,15)8 \qbezier(30,15)(0,0)(15,30)9 \qbezier(15,30)(0,60)(30,45)

10 \qbezier(30,45)(60,60)(45,30)11 \qbezier(45,30)(60,0)(30,15)12 \qbezier(30,15)(30,30)(15,30)13 \qbezier(15,30)(30,30)(30,45)14 \qbezier(30,45)(30,30)(45,30)15 \qbezier(45,30)(30,30)(30,15)16 \endpicture%17 \endcenter

La costruzione della figura 19 è semplice: le cur-ve si saldano in corrispondenza del primo e ter-zo punto di ciascuna dichiarazione; se si prova amodificare il secondo punto di ciascuna curva, ilrisultato sarà una maggiore o minore concavitàdella curva. Non è semplice immaginare il risultatofinale, occorre fare qualche prova compilando piùvolte il codice. Onde evitare di perdere tempo intentativi inutili, prima di ottenere quanto si desi-dera, è bene evitare di seguire la tentazione checi porta a scrivere immediatamente il codice del

disegno. È preferibile disegnare con cura tutti glielementi della figura su un foglio quadrettato odi carta millimetrata e aiutarsi con l’analoga gri-glia elettronica messa a disposizione dal pacchettographpap. Tale estensione deve essere richiamatanel preambolo attaverso \usepackagegraphpap.Nella figura 20 è riportato un esempio di griglia.La riga 24, che riporta il comando \graphpaper,costruisce la griglia con le stesse dimensioni di-chiarate per l’ambiente e con punto di riferimentol’origine del sistema di coordinate. Le righe dellagriglia sono spaziate di due unità.

f f

AA

AAf

AA

AA

???????????????????????????????????????????

L

0 10 200

10

Figura 20: Disegno con griglia di riferimento.

Codice per la figura 201 \begincenter2 \setlength\unitlength0.25cm3 \beginpicture(28,15)(0,0)4 \put(0,1)\line(1,0)75 \multiput(0.4,1)(0.5,0)14%6 \line(-1,-1)1.57 \put(2.5,1.5)\circle18 \put(4.5,1.5)\circle19 \put(1,2)\line(1,0)5

10 \put(1,2)\line(1,2)2.511 \put(6,2)\line(-1,2)2.512 \put(3.5,7)\circle113 \put(3.5,7)\line(1,0)2214 \put(22,2)\line(1,0)515 \put(22,2)\line(1,2)2.516 \put(27,2)\line(-1,2)2.517 \put(21,2)\line(1,0)718 \multiput(21.4,2)(0.5,0)14%19 \line(-1,-1)1.520 \multiput(3.5,11)(0.5,0)43%21 \vector(0,-1)3.522 \put(3.5,11)\line(1,0)2123 \put(3.5,12.5)\line(1,0)2124 \put(3.5,12)\line(0,1)125 \put(24.5,12)\line(0,1)126 \put(14,13)L27 \graphpaper[2](0,0)(28,15)28 \endpicture

10 ConclusioneCome si è visto, l’ambiente offre un metodo ve-loce per realizzare disegni semplici e man manoche i disegni diventano più complessi il codice si

27

Page 30: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 L’ambiente picture

‘appesantisce’ di pari passo. Per quanto l’ambientepicture possa dare le sue soddisfazioni, non è lostrumento più adatto per realizzare disegni com-plessi; pacchetti quali epic, eepic, xy-pic, pstricksoffrono qualche strumento in più rispetto a pic-ture. Esistono poi numerosi altri pacchetti graficiper quasi ogni necessità e la cui documentazione èfacilmente reperibile in rete.

Riferimenti bibliograficiHelmut Kopka, P. W. D. (2004). Guide to

LATEX. Addison-Wesley, Reading, MA, USA,

4ª edizione.

Lamport, L. (1994). LATEX: A Document Pre-paration System: User’s Guide and ReferenceManual. Addison-Wesley, Reading, MA, USA,2ª edizione. Aggiornato per LATEX 2ε.

. Massimo [email protected]

28

Page 31: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Norme tipografiche per l’italiano in LATEX

G. Cevolani∗

SommarioIl presente articolo descrive sinteticamente le prin-cipali norme tipografiche della lingua italiana, daseguire nella composizione di articoli, tesi o libridi carattere generale. Per ogni regola discussa, simostra come applicarla in LATEX; tuttavia, l’artico-lo può risultare utile agli utenti di qualsiasi altroprogramma di composizione del testo.

1 IntroduzioneIl presente articolo vuole offrire una sintesi delleprincipali “norme” tipografiche italiane, utili nellacomposizione di un normale testo quale un articolo,un libro o una tesi di carattere generale.

La parola “norme” va qui presa in senso piut-tosto ampio: in italiano, come in tutte le altrelingue, non esistono che pochissime regole tipo-grafiche realmente universali e vincolanti, mentremolti aspetti del testo dipendono piuttosto da con-venzioni e abitudini o dal gusto dell’autore o del-l’editore del testo. Per questo motivo, il presentedocumento non ha la pretesa di fornire un modellogenerale di scrittura ma semplicemente di riassu-mere le convenzioni più comunemente seguite nellacomposizione tipografica di un testo in italiano.

Inoltre, nel sèguito discuteremo soltanto le nor-me tipografiche più generali, ignorando questionirelative alla composizione di documenti in àmbitotecnico, scientifico o specialistico. Testi di questogenere seguono le norme proprie della disciplina inquestione, che sono differenti da quelle generichequi discusse e spesso le approfondiscono.

L’italiano in LATEX

Questo articolo è stato scritto pensando alla com-posizione di un testo al calcolatore col programmadi tipografia digitale LATEX. Dopo l’introduzionedi ogni regola, si ricorda quindi al lettore comeapplicarla utilizzando i comandi LATEX adatti. Ov-viamente, le norme in quanto tali sono del tuttoindipendenti dal programma usato per comporreil testo, e possono quindi venir lette dagli utentidi qualsiasi altro programma di scrittura.

Per quanto riguarda LATEX, conviene qui anti-cipare alcuni argomenti che verranno trattati nelsèguito.

∗Desidero ringraziare Cesare Cevolani e un recensoreanonimo per aver letto e commentato con grande attenzioneuna precedente versione di questo articolo, e gli utenti del fo-rum sulla tipografia del Gruppo Utilizzatori Italiani di TEX(www.guit.ssup.it/forum) per le domande, i suggerimentie le discussioni sui temi qui trattati.

Innanzi tutto, qualsiasi documento LATEX in ita-liano dovrebbe richiamare nel preambolo il pacchet-to babel con l’opzione italian (descritto nel § 5.1 ein Braams (2005, § 24)), che attiva la sillabazioneper la lingua italiana e imposta correttamente tut-te le stringhe predefinite (per esempio il comando\chapter produce “Capitolo” invece di “Chapter”).Il pacchetto babel offre anche alcune facilitazioniper scrivere le virgolette alte e basse (§ 3.3), leunità di misura, gli apici e i pedici (§ 5.8).

A questo proposito, va notato che dalla tastieraitaliana mancano alcuni caratteri (come il simboloper l’accento grave e la tilde, per esempio) utiliper introdurre alcuni comandi LATEX. In questicasi, occorre inserire questi caratteri nel sorgentepersonalizzando la tastiera o richiamandoli col cor-rispondente codice ascii (il modo per farlo dipendedal sistema operativo).

Infine, due altri pacchetti standard sono forte-mente consigliabili. Il primo è il pacchetto inputencche permette di inserire direttamente i caratteripresenti sulla tastiera, come le lettere accentate,che altrimenti non sono disponibili (§ 2.1). Occorrespecificare la codifica adatta al sistema operativousato, come riportato per esempio in Trettin(2004, § 2.2.6).

Il secondo (che non riguarda in particolare l’i-taliano) è il pacchetto fontenc, che permette diselezionare i caratteri da usare nel documento; lacodifica standard da usare in LATEX si chiama “T1”.Il preambolo di un documento in italiano dovrebbequindi contenere almeno le seguenti righe:

\documentclassarticle...\usepackage[italian]babel\usepackage[<codifica>]inputenc\usepackage[T1]fontenc...\begindocument

2 Accento e apostrofoL’italiano ha tre tipi di accento che possono ve-nir segnalati graficamente: il tonico, il fonico e ilcirconflesso.

2.1 Accento tonico e accento fonicoIl primo tipo è l’accento tonico che segnala, in unaparola, la vocale su cui appunto «cade l’accento».Per esempio, l’accento tonico permette di distin-guere “àmbito” (di ricerca) da “ambìto” (sinonimodi “desiderato”) o “pàssero” (uccello) da “passerò”(verbo).

29

Page 32: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Norme tipografiche

Vocale Esempi Codice LATEXà àmbito, città \‘ambito, citt\‘aè è, cioè, caffè, pèsca \‘e, cio\‘e, caff\‘eé né, perché, ché, pésca n\’e, perch\’e, ch\’e, p\’escaì ambìto, così! amb\‘\i to, cos\‘\i!ò però, sarò, còrso per\‘o, sar\‘o, c\‘orsoó córso c\’orsoù più pi\‘u

Tabella 1: Vocali accentate italiane e codice LATEX corrispondente.

Il secondo tipo è l’accento fonico, che segnalala pronuncia aperta o chiusa di una vocale. Peresempio, l’accento fonico permette di distinguere“pésca” (in mare) da “pèsca” (il frutto), o “bótte”(di vino) da “bòtte” (nel senso di percosse). No-tare che, per la fonetica italiana, solo la “e” e la“o” possono venire pronunciate aperte o chiuse (equindi hanno l’accento), mentre la “a”, la “i” e la“u” ammettono una sola pronuncia.1

Per distinguere questi due casi, l’accento fonicoassume due forme diverse, chiamate rispettivamen-te accento grave (da sinistra in alto a destra inbasso: `), che segnala un suono aperto della vocale,e accento acuto (da sinistra in basso a destra inalto: ´), che segnala un suono chiuso.

Forma Codice LATEX Codice asciiAcuto ´ \’ 39Grave ` \‘ 352

Benché i due tipi di accento, tonico e fonico,abbiano una funzione del tutto distinta, lo stes-so segno grafico, cioè la forma grave dell’accentofonico, viene usato anche per segnalare l’accentotonico. L’accento tonico è quindi sempre indicatocon un accento grave, ad eccezione di quei casi incui entrambi gli accenti, tonico e fonico (chiuso),cadono sulla stessa vocale: per esempio, in “perché”e nelle altre parole «tronche».2

Date le cinque vocali e le due pronunce (apertao chiusa) di “e” e di “o”, esistono in italiano settecasi di vocali accentate (vedi tabella 1). Si noti che,al contrario delle vecchie macchine da scrivere o dialtri programmi di composizione del testo (comeWord), LATEX permette di accentare senza proble-mi le lettere maiuscole (il codice \‘E producedirettamente «È»), che spesso vengono erronea-mente rese con un apostrofo («E’», che significa“ei, egli”). In effetti, LATEX permette di accentarequalsiasi lettera o carattere: per esempio \’m o\‘( producono rispettivamente “m” e “(”!

Naturalmente, è possibile definire nuovi comandiper inserire più comodamente le lettere accentate,sull’esempio di:

1. Si provi per esempio a pronunciare una “a” chiusa.2. Si noti che il termine “accento” viene quindi usato in

almeno tre sensi: per l’intonazione (fenomeno tonico), perla pronuncia della vocale (fenomeno fonico) e per il simbolografico impiegato per segnalare entrambi i primi due.

\newcommand\ah\‘a

nel qual caso occorre ricordarsi di forzare lo spazioin fine di parola: “sarà vero?” si ottiene col codicesar\ah\ vero?.

Alternativamente è possibile usare il pacchet-to inputenc per inserire i caratteri accentatidirettamente da tastiera; ad esempio

\usepackage[ansinew]inputenc

usa la codifica per l’ambiente Windows. Si notituttavia che per alcuni caratteri, ad esempio la “o”chiusa (ó), assenti dalla tastiera italiana, occorreràcomunque usare il codice esplicito.

2.2 Accento circonflessoIl terzo tipo di accento è l’accento circonflesso,ˆ, che viene usato a volte, e comunque non ob-bigatoriamente, per distinguere parole omografe,soprattutto nel caso dei plurali in -ii: per esempio,distingue odî (plurale di odio) da odi (voce delverbo udire), desiderî da desìderi, varî da vari,ecc.

In LATEX, si introduce col comando \^ postodavanti alla lettera da accentare, per esempio:var\^\i.

2.3 ApostrofoL’apostrofo, ’, segnala normalmente la caduta dellaparte finale di una parola, come in: un’altra, un po’,da’ (imperativo), ecc. Questa regola non è tuttaviafissa e sempre rispettata; fra le eccezioni (in cuil’uso prevale sulla regola) ci sono ad esempio piè (enon pie’) e fé (sia nel senso di “fede” che di “eglifece”), anche se in questo secondo caso l’uso non ècostante (Serianni, 1988, pp. 48, 68–69). Occorrequindi, caso per caso, consultare un dizionario.

A quanto pare (Serianni, 1988, p. 45) è lecitoandare a capo subito dopo l’apostrofo anche seLATEX tende sempre a evitarlo. In ogni caso sembrapreferibile cercare altre soluzioni, cosa che LATEXfa automaticamente.3

Fra gli usi particolari, l’apostrofo indica unariduzione delle cifre di un anno (per esempio: «il’68») ed è usato come simbolo per i minuti primi,di angolo e di tempo (per esempio: «ho impiegato

3. Ammesso naturalmente che sia stata attivata lasillabazione italiana come descritto nel § 5.1.

30

Page 33: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Norme tipografiche ArsTEXnica Nº 1, Aprile 2006

20’ a leggere questa guida»). Si noti che in contestimatematici LATEX cambia correttamente la resagrafica dell’apostrofo, come in P ′ (codice: $P’$),che risulta quindi equivalente al comando \prime:P ′ (codice: $P^\prime$).

2.4 Uso di accenti e apostrofiMolto spesso, nella scrittura quotidiana, sia l’accen-to tonico sia l’accento fonico non vengono segnalatigraficamente, lasciando al contesto il compito didistinguere fra parole omografe (si trovano quin-di normalmente “Il mio ambito di ricerca” e “Ilpremio è molto ambito”, o “Alla domenica vado apesca” e “Ho mangiato una buona pesca”, senzaaccento alcuno).

L’unico caso di uso obbligatorio è quello dell’ac-cento tonico sulle parole tronche, come “perché”,“cioè”, ecc.

In generale, è comunque consigliabile segnala-re un accento di qualsiasi tipo (tonico, fonico ecirconflesso) sulla versione meno usuale di paro-le omografe (per esempio «àncora» e «ancora»,quest’ultima senza accento perché di uso comune).Tuttavia, come per le parole straniere (§ 5.6), cheuna parola sia o meno «di uso comune» dipendeessenzialmente dal destinatario dello scritto: quindiin un testo di matematica (per esempio) si potràscrivere «funzione monotona» al posto di «mono-tòna» (o, per chiarezza, usare l’accento solo allaprima occorrenza della parola).

L’apostrofo si usa obbligatoriamente nei casiindicati sopra.

3 Punteggiatura e spaziaturaLa punteggiatura italiana comprende i segni di in-terpunzione, le parentesi, le virgolette, i puntini disospensione, i trattini e altri simboli come asteriscoe sbarretta.

Per quanto riguarda la spaziatura in LATEX, sitenga innanzi tutto presente che esistono, oltrea quello normale, due ulteriori tipi di spazio: lospazio sottile (comando: \thinspace) e lo spazioinsecabile (comando: ~, cioè tilde nel sorgente).Il primo serve appunto a inserire uno spazio piùsottile del normale, e se ne vedrà qualche esempiopiù avanti.

Il secondo serve per inserire uno spazio chenon può essere spezzato dalla sillabazione. È utilein varie occasioni, per esempio quando di scrive«Ing. Rossi» o «M. Rossi» ed è bene non sepa-rare le due parti dell’espressione: si scrive allora«Ing.~Rossi» e «M.~Rossi» (la tilde corrispon-de al codice ascii 126). Stessa cosa per quantoriguarda i riferimenti: per esempio conviene scri-vere «si veda la figura~\reffig» per impe-dire che il numero della figura in questione e laparola “figura” vengano separati.

Nello stile anglosassone, lo spazio dopo il puntofinale di un periodo è maggiore del normale spa-

zio fra parole. L’uso continentale non segue invecequesta regola. La tilde è utile anche dopo le ab-breviazioni, in modo che LATEX non lasci lo spazioaggiuntivo dopo il punto dell’abbreviazione stessainterpretandolo come punto fermo (di fine periodo).Il comando

\frenchspacing

nel preambolo elimina lo spazio aggiuntivo dopoqualsiasi punto in tutto il documento.

3.1 Punteggiatura e spaziEsistono alcune regole fisse relative all’uso deglispazi prima e dopo i segni di interpunzione:

Segni di interpunzione.Tutti i segni di interpunzione (punto, virgola, pun-to e virgola, due punti, punti interrogativo ed escla-mativo, ecc.) vanno attaccati alla parola che pre-cede e separati per mezzo di uno spazio da quellache segue. Quindi in generale dopo ogni segno diinterpunzione va battuto uno spazio.

Apostrofo.L’apostrofo segue la regola precedente, ad ecce-zione dei casi (che sono però i più comuni) come“un’oca”, “un’altra”, ecc., che non richiedono unospazio dopo l’apostrofo.

A volte l’apostrofo si “scontra” con le virgolet-te, per esempio in l’“unico”. Una soluzione pos-sibile è naturalmente usare le virgolette basse(vedi §3.3); se però si sono scelte le virgolettealte, conviene allora inserire uno spazio sottile(\thinspace) fra l’apostrofo e le virgolette: il codi-ce «l’\thinspace ‘‘unico’’» produce la forma,più leggibile, l’ “unico”.

Virgolette e parentesi.Sia le virgolette che le parentesi vanno attaccatealle parole che racchiudono, e separate con unospazio, sia prima sia dopo, dal resto della frase (ameno che non siano a fine frase, come qui). Quandoun segno d’interpunzione ricorre dentro a virgolet-te o a parentesi, la frase o il periodo finirà, comequesto, con un punto fuori dalla parentesi stessa(ovviamente!). Si noti che solo punto interrogativoe punto esclamativo stanno di norma dentro alleparentesi (Serianni, 1988, p. 67). (Si veda il §3.2per la possibilità di inserire un’intera frase o perio-do fra parentesi, in modo tale che, come in questocaso, il punto finisca dentro la parentesi.)

Puntini di sospensione.I puntini di sospensione sono sempre e solo tre, e,come gli altri segni di interpunzione, sono attaccatialla parola che precede e separati con uno spazioda quella che segue. . . in questo modo (Serianni,1988). Se usati per indicare un’omissione in unacitazione «è bene [. . . ] inserire i puntini entro pa-rentesi quadre o tonde» (Serianni, 1988, p. 64),come in questo caso.

31

Page 34: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Norme tipografiche

Il comando LATEX da usare è \dots o\textellipsis (mai inserire a mano tre pun-ti separati), eventualmente forzando uno spazio,\dots\, a meno che non sia a fine frase. Si ve-da tuttavia il § 5.5 per il corretto uso di questicomandi.

Trattini.Per il trattino lungo, o lineetta (vedi § 3.4), sembraconsigliabile usare la spaziatura doppia, prima edopo — come in questo caso.

Il trattino breve, invece, non richiede alcunospazio, né quando separa cifre, come in “pp. 23-24”,né quando separa parole, come in “guerra-lampo”.

3.2 ParentesiLe parentesi normalmente utilizzate in italiano so-no le parentesi tonde — ( ) — e le parentesi quadre

— [ ]. Le parentesi graffe — — e uncinate — 〈 〉(codice LATEX: $\langle$ $\rangle$) o < > (datastiera col pacchetto fontenc) — vengono usatesolo in ambiti tecnici, tipicamente in matematica.

L’uso normale delle parentesi è quello di inserireun inciso nel discorso (cioè una frase relativa aquella principale ma non strettamente necessaria,dal punto di vista logico, al discorso stesso, comein questo caso).

Le parentesi quadre vengono usate quasi solo indue casi: come parentesi interne a parentesi (come[anche se non mi sembra molto bello] in questocaso) e nelle citazioni per indicare «un commentodello scrivente [come in questo caso]» (Serianni,1988, p. 67) in modo che non sia confuso con paro-le dell’autore. In quest’ultimo caso rientra anchequello dell’omissione volontaria (che è comunqueun commento), segnalata con [. . . ] (§ 5.5).

Tutti i segni di interpunzione, eccetto i puntiesclamativo e interrogativo, vanno posti dopo laparentesi chiusa (vedi § 3.1).

In italiano sembra poco diffuso — ma comunquelecito (Lesina, 1987, pp. 94-95) — l’uso di racchiu-dere un intero periodo all’interno delle parentesi,abitudine invece piuttosto comune per esempio ininglese. (In questo caso, la punteggiatura vieneanch’essa compresa fra parentesi, come qui.)

3.3 VirgoletteIn italiano, esistono tre tipi di virgolette: le basse («», dette anche «francesi», «caporali» o «sergenti»),le alte (“ ”, dette anche «inglesi») e gli apici (‘ ’).La forma alto-basso (“ „) non è usata in tipografiama solo nella scrittura a mano (Serianni, 1988,p. 64).

Uso delle virgoletteIn generale, le virgolette servono a “staccare” gra-ficamente una parola o un’espressione dal restodel testo. Per esempio, sono usate per riportareparole altrui (come nel caso del discorso diretto) oper segnalare che una certa parola o frase è usata

in un senso speciale differente da quello ordinario.Alcuni usi tipici delle virgolette sono i seguenti:

– Citazioni (e “intercitazioni”, cioè citazioni den-tro a citazioni) di pensieri, discorsi e scrittialtrui;

– Menzione (invece che uso) di una espressio-ne, come in: “cane” ha quattro lettere, do-ve la parola “cane” non viene usata ma solomenzionata;

– Significato traslato o speciale di un’espressio-ne, per evidenziarne l’uso ironico, dispregiati-vo o semplicemente scherzoso, come in Questigrandi “esperti” dicono. . . o in È un “mago”del computer ;

– Parole inusuali o straniere, come in Il “guru”locale di LATEX ;

– Titoli di opere.

Non esistono regole fisse o comunemente accettateper l’uso dei vari tipi di virgolette nei vari casisopra elencati (e negli altri tanti possibili). Inoltre,in quasi tutti questi casi l’uso del corsivo (§ 4)concorre con quello delle virgolette.

La cosa fondamentale, quindi, è fare una sceltainiziale ragionevole ed attenersi coerentemente adessa nel resto del documento. Per quanto riguar-da il presente documento, le principali scelte distile, comprese quelle relative alle virgolette, sonoriportate nella tabella 5 a pagina 41.

Comandi LATEXAlcuni dei comandi LATEX per gestire le virgolettesono riassunti in tabella 2.

Il pacchetto babel con opzione italian (§ 5.1) ren-de attivo il carattere " (virgolette alte da tastiera) edefinisce i due comandi "< e "> rispettivamente perle virgolette basse aperte e chiuse (Braams, 2005,§ 24 ), che fra l’altro gestiscono automaticamentela spaziatura.

Un secondo metodo è utilizzare il pacchetto inpu-tenc (con codifica appopriata, ad esempio ansinewper l’ambiente Windows) e inserire le virgolettebasse direttamente nel sorgente, magari con uncomando definito come

\newcommand\caporali[1]«#1».

Per quanto riguarda le virgolette alte, si possonoinserire col codice ‘‘ ’’, che però risulta scomododato che l’accento grave ‘ manca dalla tastieraitaliana,4 o, sempre utilizzando il pacchetto babelcon opzione italian, col codice "" ’’.

Infine, gli apici si introducono col codice ‘ ’.La tabella 2 riassume i comandi LATEX per le

virgolette e i pacchetti necessari per introdurli.

4. Alcuni editor, come TEXnicCenter, rendono possibilesostituire automaticamente le normali virgolette da tastierain virgolette LATEX.

32

Page 35: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Norme tipografiche ArsTEXnica Nº 1, Aprile 2006

Virgolette Codice LATEX Codice ascii PacchettoBasse «testo» "< testo "> [tastiera] babel (opzione italian)

«testo» 174,175 idem + inputencAlte “testo” ""testo’’ [tastiera] babel (opzione italian)

‘‘testo’’ 352,39 —Apici ‘testo’ ‘testo’ 352,39 —

Tabella 2: I tre tipi di virgolette e i relativi comandi LATEX.

Si noti, nella prima riga, che gli spazi vengonoautomaticamente eliminati all’interno dei caporali,come vuole la tipografia italiana (ma non quellafrancese).

Risulta utile, a mio parere, definire tre nuovicomandi per gestire le virgolette. Nel preambolodel presente documento, ad esempio, si trovano leseguenti definizioni (i nomi sono completamentearbitrari):

\newcommand\cita[1]«#1»\newcommand\cit[1]‘‘#1’’\newcommand\citi[1]‘#1’.

Questo permette di separare il ruolo logico dellevirgolette (citazione, significato metaforico, ecc.)dal segno grafico utilizzato per indicarlo; se adesempio volessi eliminare i caporali dal presentedocumento, per utilizzare la virgolettatura inglese,mi basterebbe ridefinire \cita allo stesso modo di\cit.5

3.4 Trattino (o lineetta)

Il trattino (o «trattina», Fioravanti (1987)) hadue lunghezze nella stampa, breve e lunga.

Quello breve si usa per separare parole (per esem-pio nei composti) o cifre (come nell’indicazionedelle pagine di una citazione).

Quello lungo può introdurre un discorso diretto(normalmente usandolo solo in apertura, dopo idue punti; vedi § 5.7) o per racchiudere — come inquesto caso — un inciso. L’uso del tratto lungo perintrodurre il discorso diretto non è comune, datoche spesso vengono utilizzate le virgolette (vedi§ 3.3 e § 5.7).

Trattino LATEX UsoBreve - - a capo,

fra cifre,composti.

Lungo — --- discorso diretto,inciso.

“Meno” − $-$ matematica.

In italiano non sembra invece esistere il trattino“medio”, – (codice LATEX: --), usato in inglese per

5. In generale, occorre trovare un compromesso fra lacomodità e il numero di nuovi comandi definiti dall’utente(che, se esagerato, rischia di rendere il sorgente “illeggibile”);mi sembra che, in questo caso, la comodità superi il rischio.

separare numeri o cifre (Lamport, 1994, pp. 14,170).6

Un quarto tipo di trattino può essere consideratoil segno “meno” dell’operazione aritmetica, che siottiene con un normale trattino breve in ambientematematico ($-$).

3.5 Asterisco e sbarrettaLa sbarretta, /, si usa, senza spazi né prima né do-po, per indicare un’alternativa tra due possibilità,come nel tipico “e/o”. Quindi non dovrebbe esse-re usata per indicare giustapposizione o composti,per cui si usa il trattino (§ 3.4). Per esempio: “ipasseggeri diretti a Torino/Milano” (cioè a Torinoo a Milano) ma “la linea Torino-Milano”.7

La sbarretta si utilizza anche per scrivere le fra-zioni numeriche, come 3/4: si veda tuttavia il § 5.8per la corretta scrittura di quantità numeriche.Non si confonda ovviamente la sbarretta (slash: /),che può essere inserita direttamente da tastiera,con il backslash (\) riservato ai comandi LATEX.

L’asterisco, *, si usa praticamente solo in tre oc-casioni (Serianni, 1988, pp. 67-68): come simbolodella nota a piè di pagina, in numero di tre per indi-care omissione volontaria (“nel paese di * * *”, codi-ce: \mbox*\thinspace*\thinspace*8) e in lin-guistica per indicare forme non attestate, scorretteo inaccettabili (*che io vadi).

4 Stile del carattereI caratteri utilizzati in italiano oltre a quello nor-male del testo, a volte chiamati font dall’inglese,comprendono lo stile corsivo, grassetto e maiu-scoletto. Non sembra utilizzato invece lo stileslanted (“inclinato”).

Altri stili possono essere utilizzati (con parsimo-nia) per esigenze particolari: per esempio, nel pre-sente documento si usa il carattere tipo macchinada scrivere per evidenziare i comandi LATEX, e

6. (Meynet, 2000, p. 31) tuttavia chiama “trattino didivisione” il trattino breve, e “lineato”, rispettivamente“breve” e “lungo”, il trattino medio e il tratto lungo. Utilizzail lineato medio come segno di apertura di un paragrafo ecome segno di divisione per i nomi degli autori.

7. Un uso eccezionale della sbarretta si trova negli in-dirizzi postali, con «c/o» (che sarebbe l’abbreviazionedell’inglese care of, equivalente al nostro “all’attenzionedi”).

8. Meglio, a mio parere, usare lo spazio sottile che lospazio normale. A volte si trovano anche i tre asterischi nonspaziati.

33

Page 36: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Norme tipografiche

Stile Locale GlobaleCorsivo \textit<testo> \itshape <testo>Grassetto \textbf<testo> \bfseries <testo>Maiuscoletto \textsc<testo> \scshape <testo>

Enfatizzato \emph<testo> \em <testo>

Tabella 3: I comandi LATEX per gestire lo stile del carattere.

il carattere senza grazie per indicare i “pacchetti”LATEX.

I comandi LATEX per gestirli, nella versione lo-cale e in quella globale, sono indicati in tabella 3(Trettin, 2004, p. 9).

Lo stile “evidenziato” o “enfatizzato” è reso nor-malmente col corsivo ma riveste un ruolo logicodifferente, discusso nel § 4.4.

4.1 Corsivo

Il corsivo si usa nel testo principalmente:

– per enfatizzare le parole importanti o comun-que da evidenziare rispetto al resto del testo(vedi § 4.4);

– per le parole straniere (anche latine) non en-trate nell’uso italiano (vedi § 5.6), ad esempioguillemet o politically correct;

– per i titoli di opere citate, ad esempio LaDivina Commedia o The TEXbook;

In bibliografia, si usa per i titoli dei libri edelle collezioni, ma questo dipende dallo stilebibliografico utilizzato (vedi § 5.10).

4.2 Grassetto

Il grassetto si usa quasi esclusivamente per i titolidei paragrafi, capitoli e delle altre suddivisionidel testo, come nel presente documento. Si tendedi norma a non usarlo per enfatizzare le parole,uso per cui esiste già il corsivo, o comunque autilizzarlo con moderazione, per non appesantirel’aspetto della pagina.

LATEX usa automaticamente il grassetto per ititoli di tutti i sezionamenti (\chapter, \section,\paragraph, ecc.) ma non per il titolo genera-le del documento (\title, \author e \date),che occorre sistemare a mano (per esempio:\title\bfseries <titolo>) o ridefinendo ilcomando relativo.

4.3 Maiuscoletto

Il maiuscoletto viene usato in italiano, con unacerta regolarità, quasi esclusivamente per i nomidegli autori citati in bibliografia, come in questocaso: Lamport (1994). Questa convenzione, tut-tavia, dipende dallo stile bibliografico utilizzato(vedi § 5.10).

4.4 Corsivo vs enfatizzatoSpesso, come nel presente documento, il corsivoviene utilizzato per evidenziare parole importan-ti che vanno messe in risalto. Tuttavia, lo stessoscopo può essere talvolta raggiunto in altri modi,per esempio con una sottolineatura, a discrezionedell’autore e dello stile di pubblicazione.

Per questo motivo, è importante tenere separatii due ruoli logici del corsivo e dell’enfasi. A tal fine,LATEX mette a disposizione due comandi distin-ti, \textit (e \itshape) per il corsivo (che è unparticolare stile di carattere) e \emph (e \em, da“emphasize”) per indicare l’enfasi. La differenza sinota nell’esempio riportato in figura 1.

Utilizzare il comando appropriato nei due diversicasi è importante perché, se si decidesse a un certopunto di cambiare lo stile dell’enfasi (per esempiocon il pacchetto ulem), il comando \emph verrebbedi conseguenza ridefinito, mentre \textit rimar-rebbe (ovviamente) inalterato. Si noti, in tabella 2,la differenza di comportamento nei due casi, il pri-mo sbagliato e il secondo corretto, qualora si cambilo stile dell’enfasi (il pacchetto ulem fa sì che \emphsottolinei la parola invece di metterla in corsivo).

Usare \emph per scrivere in corsivo o, viceversa(errore meno comune), usare \textit per enfa-tizzare una parola può quindi portare a effettiindesiderati.

5 Composizione del testo5.1 SillabazioneIn LATEX, la sillabazione automatica viene attivatautilizzando il pacchetto babel con l’opzione italian.9Il pacchetto può venir richiamato normalmente nelpreambolo del documento:

\usepackage[italian]babel,

o globalmente come opzione di classe, per esempio:

\documentclass[italian]article,

in modo da venir riconosciuto automaticamenteanche da eventuali altri pacchetti. In questo mo-do, risultano anche definiti alcuni nuovi comandi e

9. Perché la sillabazione venga effettivamente attivataoccorre controllare che le definizioni per la lingua italia-na siano caricate: il procedimento per farlo dipende dalladistribuzione LATEX. In una distribuzione MiKTEX per Win-dows, per esempio, si attiva la lingua italiana selezionandola relativa casella nella scheda “Languages” delle MiKTEXOptions.

34

Page 37: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Norme tipografiche ArsTEXnica Nº 1, Aprile 2006

Questa è una \emphparolaenfatizzata in una frase normale

\textitQuesta è una \emphparolaenfatizzata in una frase in corsivo

Questa è una parola enfatizzata in una frasenormale

Questa è una parola enfatizzata in una frasein corsivo

Figura 1: La differenza fra lo stile di carattere corsivo e l’enfasi.

\usepackageulem

Questa parola è in \emphitalics,questa è \emphsottolineata.

Questa parola è in \textititalics,questa è \emphsottolineata.

Questa parola è in italics, questa è sottolineata.

Questa parola è in italics, questa è sottolineata.

Figura 2: La differenza fra \textit e \emph quando si cambia lo stile dell’enfasi. Il secondo caso èquello corretto.

“scorciatoie” per rendere più facile l’inserimento divirgolette (§ 3.3), apici e unità di misura (§ 5.8):si veda (Braams, 2005, pp. 148 e seguenti). (Un’u-tile sintesi delle funzioni del pacchetto babel perl’italiano, come di molti altri pacchetti, si trova inGregorio (2005).)

In alcuni casi, la sillabazione automatica puòspezzare in modo non corretto alcune paro-le. Tali parole vanno allora elencate nel pre-ambolo all’interno del comando \hyphenation,separate fra loro da uno spazio e dividen-do le sillabe con un trattino: per esem-pio \hyphenationCi-ce-ro-ne an-co-ra. Al-ternativamente, è possibile segnalare i punti in cuispezzare una parola direttamente nel testo, col co-mando \- (per esempio: Ci\-ce\-ro\-ne), cosautile in particolare durante la revisione finale deldocumento, quando si risolvono i casi di “bad box”.

Se il testo contiene frasi o interi periodi in altrelingue (per esempio, un abstract o una citazionelunga) occorre attivare la relativa sillabazione comeopzione del pacchetto babel o della classe (per esem-pio: \usepackage[english,italian]babel).In questo caso, la lingua principale è quellaindicata per ultima fra le opzioni; per introdurreporzioni di testo in una delle altre lingue spe-cificate si usano i comandi \selectlanguage,\foreignlanguage o l’ambiente otherlanguage.

Per esempio, \selectlanguageenglish atti-va la lingua inglese dal punto in cui viene richiama-to in poi (o all’interno dell’ambiente in cui vienerichiamato); \foreignlanguageenglish...scrive il testo contenuto nel secondo ar-gomento con le regole della lingua ingle-se (indicata nel primo); mentre l’ambiente\beginotherlanguageenglish attiva l’ingle-se fino alla fine dell’ambiente stesso.

5.2 Formato della paginaIl formato della pagina (margini, altezza e lar-ghezza del testo, spazio per le testatine e per lenote, ecc.) dipende dal tipo di pubblicazione e

dalle scelte dell’editore (per esempio, le tesi di lau-rea impongono normalmente requisiti espliciti sullayout).

Il layout predefinito di LATEX è solitamente deltutto insoddisfacente per le esigenze dell’utentemedio. Essendo stato pensato per il foglio stan-dard americano (la cosiddetta «quadrotta» o for-mato «letter»), produce margini troppo ampi esproporzionati.

È del tutto sconsigliabile modificare «a mano»il formato della pagina. Invece, conviene usare pac-chetti come layaureo (pensato appositamente per ilfoglio a4 e i formati di pagina “europei”) o geome-try, che permettono di modificare in modo coerentemargini e dimensioni varie.

Inoltre, specialmente per lavori di àmbito uma-nistico, si consideri la possibilità di usare classi didocumento come memoir, che fornisce un insiemeunitario di comandi per gestire tutti gli aspettidella pagina e molto altro.

5.3 ParagrafiUn paragrafo è un blocco di testo, contenente unoo più periodi, che logicamente individua una partedel discorso autonoma. Si noti che, in italiano,sia il paragrafo in questo senso sia nel senso disotto-sezione di un capitolo (chiamata appunto\section in inglese) hanno lo stesso nome (peresempio, il presente paragrafo 5.3 è formato dacinque paragrafi nel primo senso).

Solitamente, la prima riga di un paragrafo vienerientrata per evidenziare lo stacco da quello pre-cedente. In questo caso, in italiano viene rientrataanche quella del primo paragrafo di un capitolo(mentre in inglese solo il secondo paragrafo vienerientrato.) La stessa regola vale anche nel casodelle citazioni (Lanza, 1992, p. 9), quando si citiun intero paragrafo (vedi per esempio la citazionenel § 5.5). Se i paragrafi non vengono rientrati,vengono solitamente spaziati verticalmente l’unodall’altro (Lesina, 1987, § 3.2.2); è decisamenteconsigliabile usare almeno uno di questi due meto-

35

Page 38: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Norme tipografiche

di (rientro o spaziatura) per segnalare la fine di unparagrafo e l’inizio di uno nuovo, e facilitare cosìla lettura del documento.

In LATEX, un nuovo paragrafo viene iniziato dalcomando \par o lasciando una riga vuota nel sor-gente. Non usare mai \\ per iniziare un paragrafo:questo comando serve solo a spezzare la lineae iniziarne una nuova, senza tener conto dello spa-zio fra paragrafi e del rientro, come in questocaso.

Per avere il rientro anche nel paragrafo ini-ziale usare semplicemente il pacchetto indentfirstrichiamandolo nel preambolo con:

\usepackageindentfirst.

Sia il rientro iniziale (\parindent), che lo spazioverticale fra due paragrafi successivi (\parskip),come del resto tutti gli altri attributi della pa-gina di testo, possono venire modificati agendosui comandi LATEX appositi (per esempio tramite\setlength). Modificare questi parametri senzaun’adeguata considerazione del layout generale nonè mai buona norma. Si consideri anche la possi-bilità di usare il pacchetto parskip e si tenganocomunque presenti i consigli di (Trettin, 2004,pp. 5-6).

Vedove e orfaniIn tipografia, si usa chiamare «orfano» una rigasolitaria in fondo alla pagina (tipicamente la primariga di un paragrafo) e «vedova» una riga solitariain cima alla pagina seguente (tipicamente l’ultimariga di un paragrafo). Entrambi questi casi andreb-bero evitati, facendo in modo che ci siano almenodue righe di uno stesso paragrafo sia in cima chein fondo a ogni pagina.

LATEX è già programmato per ottenere questoeffetto.10

5.4 Note al testoLe note a piè di pagina sono normalmente nume-rate progressivamente e la numerazione ricominciaall’inizio di ogni capitolo.

In italiano, il numero di nota va messo sempredopo all’eventuale segno di interpunzione.11

In LATEX, le note si introducono col coman-do \footnote<testo>, che numera automati-camente le note ripartendo all’inizio di ogni capi-tolo. In molti libri italiani, non c’è alcuna lineaorizzontale fra la note a piè di pagina ed il te-sto principale, linea che invece viene normalmenteinserita da LATEX. Un modo molto semplice pereliminarla è ridefinire nel preambolo il comandorelativo in modo che non faccia nulla:

\renewcommand\footnoterule.

10. I relativi comandi, come \clubpenalty e\widowpenalty, e i possibili modi di cambiarne ilcomportamento, sono discussi nel TEXbook (Knuth, 1986).

11. Così.

Tolta la linea, è probabile che si desideri aumentarelo spazio fra il testo e la nota; un modo per farlo èaumentare la dimensione del relativo parametro:

\addtolength\skip\footins5mm

(Si noti che i comandi in questione sono comandiTEX di basso livello: vedi (Goossens et al., 1994,p. 70)).

L’uso delle note a piè di pagina (di cui comunqueè bene non abusare) con la numerazione qui pro-posta è preferibile sia alla scelta di ricominciare lanumerazione a ogni pagina sia a quella di non inter-rompere la numerazione a ogni capitolo. È anchela scelta di default in LATEX: se si ha qualche validaragione di cambiarla si può far uso del pacchettofootmisc, che raccoglie le funzionalità di vari altripacchetti e permette un’ampia personalizzazionedelle note.

La scelta di mettere le note a piè di pagina èla più comoda e intuitiva per il lettore, che ritro-va i riferimenti e le altre informazioni nella stessapagina. L’uso di riservare alle note un paragrafoseparato alla fine del documento o del capitolo (pa-ragrafo intitolato semplicemente Note) dipendevaspesso dalle difficoltà di impaginazione dovute allenote a piè di pagina (Lesina, 1987, capitolo 14),difficoltà ormai superate dagli attuali programmidi composizione e in particolare da LATEX. Se sipreferisce comunque l’elenco finale delle note si usiil pacchetto endnotes, che permette anche di avereelenchi di note separati per ogni capitolo.

5.5 Citazioni

Le citazioni vanno inserite fra virgolette del tiposcelto (vedi § 3.3) nel caso siano brevi (un paio difrasi al massimo) o come paragrafo separato nelcaso siano lunghe.

Le intercitazioni, cioé le citazioni dentro un’al-tra citazione, vanno inserite fra virgolette di tipodiverso; nel caso di citazioni fuori corpo del testo,il problema ovviamente non sussiste. Si veda latabella 5 per alcune scelte possibili.

Nel caso di citazioni fuori testo, il corpo del pa-ragrafo citato è minore del corpo del testo: questosignifica che margini, dimensioni del carattere, in-terlinea e tutte le altre caratteristiche del testodevono venire ridotte nelle citazioni. L’ambien-te quotation del LATEX risponde solo parzialmentea queste esigenze. Conviene dunque definire unnuovo ambiente citazione in questo modo:

\newenvironmentcitazione%\beginquotation%\small\ignorespaces%

\endquotation

che permette di ottenere una citazione come laseguente (mentre il codice qui sopra è stato scrittoall’interno di una quotation):

36

Page 39: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Norme tipografiche ArsTEXnica Nº 1, Aprile 2006

Col comando così definito è possibileracchiudere citazioni lunghe fra i coman-di \begincitazione e \endcitazione.\ignorespaces serve ad evitare uno spazioall’inizio della citazione stessa.

Se si è scelto di rientrare i paragrafi, anche nellecitazioni il periodo iniziale va rientrato (Lanza,1992, p. 9), cosa che risulta automatica se si stausando il pacchetto indentfirst.

Commenti all’interno di una citazione vannoinseriti fra parentesi quadre, per evitare che ven-gano confusi con parole dell’autore. Un’omissionevolontaria nella citazione è da considerare un com-mento e va quindi segnalata con [. . . ].12 Il codiceLATEX [\dots] o [\textellipsis] in questo casonon produce una spaziatura perfetta (lascia trop-po spazio dopo l’ultimo puntino). Per correggerla,utilizzare il pacchetto ellipsis, richiamandolo nelpreambolo con

\usepackageellipsis,

che modifica automaticamente il risultato.Un errore nel testo originale (se significativo) va

segnalato nella citazione con un [sic] (“così!” inlatino).

5.6 Parole straniereLe parole straniere vanno in corsivo, a meno chenon vengano esplicitamente «quoted» (come inquesto caso) o che non siano entrate nell’uso comu-ne. Quindi, per esempio, si scriverà: “ho visto unbel film” (comune) ma “ho mangiato un pudding”(non comune).

In realtà, dato che è molto difficile stabilire cosasia entrato o meno «nell’uso comune», la regola piùcorretta è quella suggerita per esempio da (Fio-ravanti, 1987, p. 14): vanno in corsivo le parolestraniere che si presumono non di uso correnteper il lettore a cui ci si rivolge. Ad esempio, in unlibro di informatica “software”, “computer”, ecc.potranno tutte andare normalmente in tondo.

Da notare che le parole straniere usate corrente-mente non assumono la forma plurale: quindi “homangiato due puddings” ma “ho visto due film”.

I nomi propri (come «Texas», «George», ecc.)o le denominazioni ufficiali (come «University ofCalifornia», «Magna Charta», ecc.) non sono con-siderati parole straniere, e quindi non vanno incorsivo.

La traduzione straniera di un’espressione italia-na usata nel testo può essere semplicemente messain corsivo e fra parentesi (bracket), come in questocaso. Se invece l’espressione tradotta ricorre in unacitazione, e si vuole indicare la forma originale, oc-corre inserirla fra parentesi quadre, come ogni altrocommento. Per esempio: «La visione del mondo[Weltanschauung]. . . ».

12. Spesso si usano i puntini semplici (Lesina, 1987, p.195), che però sono ambigui, potendo già appartenere altesto originale.

5.7 Dialoghi

Esistono diversi modi di introdurre nel testo dialo-ghi o parti di essi, a seconda che siano frasi brevie isolate o che l’intero testo sia composto da unasuccessione di discorsi diretti. Le virgolette o il trat-tino lungo sono i simboli più utilizzati per indicarela fine e l’inizio di un dialogo. Alcuni esempi:

– Quando lo incontrai mi disse: «Ciao!».

– Quando lo incontrai mi disse: — Ciao!

– «Salve!», dissi io.

«Ciao!», mi disse lui.

– Salve! — dissi io.

Ciao! — mi disse lui.

Quando non cambia il parlante e si vuole intro-durre un’interruzione si possono tenere aperte levirgolette e usare i trattini, come in un inciso:«Ciao! — dissi io — come va?».

5.8 Numeri

L’aspetto tipografico dei numeri o di espressioninumeriche è un argomento abbastanza vasto, cuiè dedicato l’ottavo capitolo di Lesina (1987). Cilimitiamo qui a descrivere alcune regole generali.

Lettere o cifre?

Qualsiasi numero può venir scritto altrettanto cor-rettamente in cifre o in lettere. La scelta dipendeanche dalla natura del testo: quelli umanistici ten-dono a usare le lettere, quelli tecnico-scientifici lecifre. Esistono comunque alcune regole generali(Lesina, 1987, pp. 129-131):

– per numeri inferiori a 10 si tendono a usarele cifre, per numeri maggiori o uguali a 10 lelettere (in questo caso «10» è scritto in cifreperchè non indica una quantità, vedi sotto);

– se un numero, anche maggiore di 10, è all’iniziodel periodo lo si scrive in lettere: «Trentatretrentini venivano da Trento. . . »;

– se una quantità è meramente indicativa, siusano le lettere o una forma mista: «ci sarannostate mille persone», «costa almeno 2 milionidi euro»;

– se un numero non indica una quantità, comein «a pagina 5», «articolo 3», «ho preso 4 inLatino», si usano le cifre.

– se un numero è decimale (per esempio 6, 5) siusano le cifre (fanno eccezione casi come «èalto un metro e ottanta»).

37

Page 40: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Norme tipografiche

OrdinaliAnche gli ordinali (primo, secondo, ecc.) si scrivonotipicamente in lettere se minori di 10 o in cifre semaggiori o uguali a 10.

Nella scrittura in cifre, l’ordinale si indica conun circoletto in posizione di apice (esponente): peresempio, “1” che si ottiene in LATEX col codice1\textsuperscript$\circ$, o semplicementecon 1° se si usa il pacchetto inputenc per inse-rire i simboli da tastiera. (Da notare che, ben-ché il circoletto indichi in origine la “o” finaledi “primo”, il simbolo relativo non è una “o” maappunto un circolo.) Per ordinali quali “prima”,“primi”, “prime”, ecc. sembra comunque correttousare come invariabile la forma col circoletto (Lesi-na, 1987, p. 136, nota 10). Altrimenti si può usarela forma “1a” (e relative) corrispondete al codiceLATEX: 1\textsuperscripta. Il pacchetto babelcon l’opzione italian permette di ottenere lo stessoidentico risultato col comando \ap (per “apice”).13

Quando, per indicare un ordinale, si usano inumeri romani al posto dei numeri arabi, non vausato il circoletto in esponente: per esempio, in“Carlo V” e “il XX secolo” i due numeri romani ven-gono letti rispettivamente “quinto” e “ventesimo”senza bisogno di altra indicazione.

Separazione fra cifrePer numeri di cinque o più cifre, è utile inserireuno spazio fra ogni gruppo di tre cifre (partendoda destra), per evidenziare le migliaia e facilitarela lettura del numero stesso. Lo spazio in questionenon dovrebbe essere un normale spazio (come in1 500 000) ma invece uno spazio sottile (come in1 500 000), che si ottiene col comando \thinspace,sia in ambiente matematico che in ambiente testo:

1\thinspace 500\thinspace 000.14

È bene evitare l’uso di virgola e punto (che rappre-sentano rispettivamente la pratica anglosassone equella europea) per separare le migliaia, uso cherischia di confondersi con la separazione decimalee di provocare gravi errori di lettura. L’uso dellospazio sottile è l’unico metodo universale corretto(Lesina, 1987, p. 131).

Nei numeri decimali, che si scrivono quasi sem-pre in cifre, il separatore fra la parte intera e quelladecimale è una virgola (26, 5), secondo l’uso eu-ropeo continentale (in quello anglossassone è unpunto). All’interno di un testo normale, si ten-de a ridurre al massimo il numero delle cifre de-cimali: quindi si scriverà “26, 5” e non “26, 50”.In questi casi è sempre bene inserire il numeroin ambiente matematico ($26,5$), che correggeopportunamente la spaziatura dopo la virgola.

13. Risulta anche definito e attivo il comando \ped peril pedice.

14. Lo stesso effetto si ottiene, in ambiente matematico,con lo spazio matematico \,: si veda (Knuth, 1986, p. 5,esercizio 2.5 e relativa soluzione).

Frazioni, percentuali, unità di misuraLe frazioni si possono esprimere in lettere (tre quar-ti) a meno che non indichino una quantità numericaprecisa. In questo caso si possono scrivere utiliz-zando la sbarretta, per esempio 3/4, o la formafrazionaria vera e propria, per esempio 3

4 (codiceLATEX: $\frac34$). Quest’ultimo uso diventapraticamente obbligatorio quando si aggiunge unafrazione a un numero intero, come in 2 3

4 . In que-sto caso risulta più soddisfacente (e più aderentealla pratica tipografica) usare il pacchetto xfracche permettere di scrivere le frazioni in modo piùcompatto ed elegante: il codice “1\sfrac34”produce 13⁄4.15

Le percentuali si scrivono normalmente in cifre(30%) a meno che il contesto non sia colloquiale, nelqual caso si può scrivere “30 per cento”. Ricordareche il simbolo “%” è riservato in LATEX ai commenti,e va quindi inserito con l’apposito comando “\%”.

Le quantità misurate sono costituite da numeriseguiti dall’unità di misura, espressa tipicamentedal simbolo relativo. In LATEX, è utile un coman-do messo a disposizione dal pacchetto babel conopzione italian, \unit, che permette di scrivere ilsimbolo dell’unità di misura, sia in ambiente testoche in ambiente matematico, nel modo corretto,cioè in tondo e con un’adeguata spaziatura (cor-rispondente allo spazio sottile \thinspace): peresempio, “20 cm” o “15 Kg”.16 Si noti che il simbolodell’unità di misura non vuole il puntino.

5.9 SigleGli acronimi sono espressioni formate dalle lettereo sillabe iniziali di parole componenti un’espres-sione che si vuole abbreviare. Esempi sono ISTAT,USA o guIt. Gli acronimi dovrebbero essere com-posti tutti da maiuscole, senza spazi né puntini fradi esse (Lesina, 1987, p. 148) anche se spesso sitrovano forme differenti. Quando un acronimo èampiamente entrato nell’uso e viene pronunciatocome parola, si può spesso scrivere come tale: “Fiat”e “radar” sono entrambi accettabili (Lesina, 1987,p. 149). A parte in questi casi, è sempre consiglia-bile, per acronimi meno noti, citarli per esteso laprima volta che li si utilizza nel testo, mettendofra parentesi la forma estesa (per esempio: GruppoUtilizzatori Italiani di TEX).

Le abbreviazioni (si veda l’appendice A) si ot-tengono invece dal troncamento di una parola, cheviene indicata dalla sua sola parte iniziale. In casiparticolari, come “sig.ra” o “Prof.ssa” comprendo-no anche la parte finale della parola originale. Iltroncamento viene indicato con un punto: se l’ab-breviazione dovesse cadere a fine periodo — casoraro, forse possibile col solo “ecc.” — il punto di

15. Un altro pacchetto simile, ma reso obsoleto da xfrac,è nicefrac.

16. Si consideri anche, soprattutto in lavori scientifi-ci, il pacchetto SIunits, interamente dedicato alla correttascrittura delle unità di misura.

38

Page 41: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Norme tipografiche ArsTEXnica Nº 1, Aprile 2006

testo testo testo testo

testo testo testo testo

testo testo testo1

1Leslie Lamport, LATEX:

a Document Preparation Sys-

tem, Addison-Wesley, New

York, 1985, p. 12.

testo testo testo testo

testo testo testo testo

testo testo testo1

1L. Lamport, LATEX: a Do-

cument Preparation System,

cit., p. 24.

testo testo testo testo

testo testo testo testo

testo testo testo1

1L. Lamport, LATEX, cit., p.

33.

testo testo testo1

testo

testo testo2

testo testo

testo testo testo3

1L. Lamport, op. cit., p. 4.2Ivi, p. 45.3Ibidem.

Figura 3: Un esempio del sistema tradizionale di riferimento bibliografico in nota a piè di pagina, coi6 livelli di citazione possibili. Da notare che l’uso di “Ivi” richiede che la citazione immediatamenteprecedente sia tratta dalla stessa opera, quello di “Ibidem” che sia tratta anche dalla stessa pagina.

troncamento funziona anche da punto fermo (cioè,ovviamente, non si trovano due punti successivi).

Le «abbreviazioni personali», di nome e di titolo,come già notato all’inizio del §3), vanno “incollate”al nome che segue (per esempio, “M. Rossi” o“Ing. Rossi”) con uno spazio insecabile (~) in modoche l’espressione complessiva non venga spezzataa fine riga.

5.10 Bibliografia

La bibliografia è forse il più tormentato fra gliaspetti tipografici della composizione di un docu-mento. Se in generale esistono poche regole assoluteper la tipografia, nel caso della bibliografia non neesiste sostanzialmente alcuna.

Lo stile dei riferimenti bibliografici, sia nel testosia nelle note, dipende essenzialmente dal tipo dipubblicazione, dall’editore, dai gusti del’autore eda altri fattori. Prendiamo qui in considerazionesolo un esempio, abbastanza tipico di molti docu-menti italiani (soprattutto in ambito umanistico),rimandando a una futura occasione la trattazioneesauriente della bibliografia da un punto di vistatipografico.

Lo stile qui considerato prevede l’uso del maiu-scoletto sia per i nomi degli autori che dei curatori(editors), il corsivo per i titoli di libri o antologie(collections) e per i nomi delle riviste (journals)e le virgolette basse per i titoli degli articoli odei contributi in antologie. Quindi un libro verràriportato come:

L. Lamport, LATEX: a Document Pre-paration System, Addison-Wesley, NewYork, 1985.

e un articolo come:

P. Flynn, «Typographers’ Inn», TUG-boat, 25, pp. 134-136, 2004.

Vale comunque la pena ripetere che queste so-no solo alcune delle tante scelte stilistiche pos-sibili, che solitamente vengono imposte all’autoredel documento dall’editore o dalla rivista per cuiscrive.

Anche la scelta fra riferimenti in nota (a pièdi pagina o in fondo al libro o articolo) o inveceraccolti in un’apposita bibliografia dipende spes-so dall’editore o dalla rivista. La prima scelta èpiuttosto diffusa nelle pubblicazioni italiane, madel tutto sconsigliabile (a mio parere) per qualsiasipubblicazione scientifica — in senso lato, compre-se le tesi di laurea, per esempio — a causa dellamaggior difficoltà di individuazione e lettura delriferimento. Un esempio illustrativo di questo si-stema è riportato in figura 3. Il pacchetto footbibpermette di inserire in nota, invece o oltre che inbibliografia, le citazioni.

La seconda scelta è quella standard in LATEX:l’ambiente thebibliography produce appunto unasezione del documento separata contenente l’elencodei riferimenti bibliografici. Questo ambiente nonpermette di personalizzare al meglio lo stile dellabibliografia e delle citazioni. A questo scopo, èmeglio utilizzare il programma BibTEX (magariassieme al pacchetto natbib), che separa l’aspettostilistico della bibliografia — gestito dal file di stile.bst — dai riferimenti stessi — contenuti del file.bib. Il programma Makebst permette infine dicostruire un file di stile bibliografico personalizzatonei minimi dettagli.

6 Conclusioni e approfondimenti

Il presente articolo è una semplice sintesi delleprincipali norme tipografiche usate in italiano. Perun trattamento approfondito di questo tema, siveda il Manuale di stile di Lesina (Lesina, 1987),che rimane il principale riferimento italiano (neesiste una nuova edizione del 1994, con una parte

39

Page 42: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Norme tipografiche

Abbreviazione Altre forme Significato Codice LATEX§, §§ paragrafo, paragrafi \S, \S\S(a cura di) a c. a cura dia.C. avanti Cristo a.C.app. ediz. appendicecap., capp. capitolo, capitolicfr. cf. confrontacit. citatod.C. dopo Cristo d.C.ecc. ecceteraed. ediz. edizioneeq. equazionees. esempioet al. et alii (e altri)fig., figg. figura/eIbidem Ibid. nello stesso passo della stessa

opera della nota precedente(Ivi) Ivi nella stessa opera della nota

precedenteop. cit. Op. cit. opera citata op. cit.n, nn. n°, nn numero/i n$^\circ$, nn.n.d.A. n.d.a. nota dell’Autore n.d.A.n.d.C. n.d.c. nota del Curatore n.d.C.n.d.T. n.d.t. nota del Traduttore n.d.T.(nota, note) nt.; n., nn. nota, notep., pp. pagina/e(passim) passimtab. tabellass. sg., sgg. seguentev. verso

Tabella 4: Le principali abbreviazioni italiane.

dedicata ai word processors, che non ho consulta-to). (Sempre della Zanichelli si può consultare ilManuale del grafico (Fioravanti, 1987), dedicatoalla progettazione e all’impaginazione del docu-mento.) Le Norme redazionali di Lanza (Lanza,1992) sono un piccolo riassunto, comodo come rife-rimento rapido ma non molto completo. In Rete sipossono trovare vari documenti simili al presente,a partire dalle sezione del sito dell’Accademia dellaCrusca (www.accademiadellacrusca.it, si veda-no per esempio Marzullo (2002) e Setti (2002))per arrivare a veri e propri manualetti liberamentedisponibili (per esempio, (Meynet, 2000) o (Sal-meri, 2001)), oltre alle tante norme redazionalimesse a disposizione dalle riviste per i loro autori.

Una buona grammatica italiana (come quella diSerianni, Serianni (1988)) risolve tutti i dubbirelativi ai contenuti (accenti, apostrofi, ecc.) oltre adare qualche indicazione utile a livello tipografico.

Per quanto riguarda LATEX, il riferimento prin-cipale soprattutto per le questioni tipografiche èsempre il TEXbook (Knuth, 1986). Quasi tutti imanuali standard comprendono anche alcune indi-cazioni tipografiche generali. Esistono infine guidededicate ad argomenti specifici, come la composi-zione in LATEX della tesi di laurea: si vedano Mori

(2005) e Beccari (1991).

A Abbreviazioni

La tabella 4 elenca, in ordine alfabetico rispettoalla forma abbreviata (con i simboli all’inizio), leprincipali abbreviazioni utilizzate in italiano. Fraparentesi si segnalano le forme che non vanno ab-breviate. Se della stessa abbreviazione esistono piùforme comunemente usate, esse vengono indicate;si segnala però solo il codice LATEX corrispondentea quella principale, cioé a quella scelta dall’autoredel presente documento.

Le abbreviazioni vanno usate con parsimonia,perché appesantiscono la lettura del documento,a meno che non siano molto comuni e ben note(come “p., pp.” per “pagina, pagine” che spostasubito l’attenzione del lettore sul numero o numeridi pagina). L’uso del calcolatore e dei program-mi di tipografia come LATEX facilita enormemente,rispetto alle vecchie macchine da scrivere o da ti-pografia, la composizione e la correzione del testo,rendendo spesso inutile l’uso massiccio di abbrevia-zioni (introdotte per risparmiare tempo e spazionella scrittura). Si consiglia quindi di usare le ab-breviazioni solo in assenza di spazio o nel caso

40

Page 43: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Norme tipografiche ArsTEXnica Nº 1, Aprile 2006

Stile EsempiEnfatizzato Corsivo (\emph) È proprio così!

In LATEX, un pacchetto è un. . .Parole straniere Corsivo (\textit) Un editor di testo.Citazioni Virgolette basse Dico io: «LATEX è meglio!».

Veniva chiamato «il Re Sole».Intercitazioni Virgolette alte «Mi disse: “Addio!”».Menzione Virgolette alte “Cane” in inglese si dice “dog”.

“Porta” ha due significati: . . .Significato traslato Virgolette alte Gli “esperti” non ci prendono mai.Titoli di libri Corsivo (\textit)Titoli di articoli Virgolette basseNomi di riviste Corsivo (\textit)

Tabella 5: Scelte stilistiche del presente documento, con alcuni esempi relativi.

siano molto utili e comuni.

B Pacchetti e comandi citatiSi elencano qui di seguito, in ordine alfabetico,i principali pacchetti e comandi LATEX citati neltesto e utili per comporre un normale testo initaliano seguendo le norme tipografiche discusse.

Pacchetti[italian]babel — Per usare LATEX con lingue diver-

se dall’inglese; imposta la sillabazione italiana,i nomi italiani dei sezionamenti e rende dispo-nibili alcuni comandi utili. § 5.1, § 3.3, § 5.8e § 2.3.

ellipsis — Corregge la resa tipografica del comandodi omissione \textellipsis. § 3 e § 5.5.

endnotes — Per avere l’elenco delle note alla finedel documento o alla fine di ogni capitoloinvece che a piè di pagina. La documentazioneè all’interno del file di stile endnotes.sty.§ 5.4.

[T1]fontenc — Consigliabile per usare nel docu-mento l’encoding standard di LATEX.

footmisc — Mette a disposizione vari comandi eopzioni per personalizzare le note al testo.L’opzione perpage, per esempio, ricomincia lanumerazione delle note a ogni pagina. § 5.4.

indentfirst — Rientra anche il primo paragrafo diun capitolo, secondo l’uso continentale. § 5.3.

[<codifica>]inputenc — Permette di inserire i sim-boli presenti direttamente da tastiera (richie-de in opzione la codifica adatta al sistemaoperativo usato).

natbib — Pacchetto bibliografico generale, dedica-to in particolare all’uso del sistema autore-anno. Si consideri anche l’uso del programmaMakebst. § 5.10.

SIunits — Pacchetto generale per la scritturacorretta delle unità di misura. § 5.8.

ulem — Permette di personalizzare lo stile dellasottolineatura. § 1.

xfrac — Migliore resa tipografica per le frazioni, so-prattutto se inserite nel testo. Da usare prefe-ribilmente al posto di nicefrac o altri pacchettidi cui rappresenta un superamento. § 5.8.

Comandi\, — Spazio sottile matematico, equivalente a

\thinspace. § 5.8.

\ap — Comando messo a disposizione dall’op-zione italian del pacchetto babel per scri-vere un’espressione in apice; equivalente a\textsuperscript. § 5.8.

\circ — Comando da usare in ambiente matema-tico per inserire un circoletto simile a quelloin esponente ai numeri ordinali. § 5.8.

\footnoterule — Linea che separa il testo princi-pale dalle note a piè di pagina, inserita subitodopo a \skip\footins. § 5.4.

\skip\footins — Comando TEX che controllala distanza verticale (lunghezza elastica) frala fine del testo e l’inizio delle note a piè dipagina. § 5.4.

\ignorespaces — Comando TEX per eliminarespazi indesiderati all’inizio di un testo. § 5.5.

\ped — Comando messo a disposizione dall’op-zione italian del pacchetto babel per scrivereun’espressione in pedice. § 5.8.

\sfrac — Comando messo a disposizione dal pac-chetto xfrac per scrivere le frazioni nel testoin modo elegante. § 5.8.

\textellipsis — I tre puntini di omissione. § 3e § 5.5.

41

Page 44: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnica Nº 1, Aprile 2006 Norme tipografiche

\textsuperscript — Prende come argomentoun simbolo da mettere in posizione di apice.§ 5.8.

\thinspace — Lo spazio sottile. § 3, § 5.8 e § 5.9.

\unit — Comando messo a disposizione dall’op-zione italian del pacchetto babel per scriverecorrettamente il simbolo delle unità di misura.§ 5.8.

Riferimenti bibliograficiBeccari, C. (1991). La tesi di laurea scientifica.

Hoepli, Milano.

Braams, J. (2005). «Babel, a multilingual packagefor use with LATEX’s standard document classes».CTAN.

Fioravanti, G. (1987). Il manuale del grafico.Zanichelli, Bologna.

Flynn, P. (2004). «Typographers’ inn». TUGboat,25, pp. 134–136.

Goossens, M., Mittelbach, F. e Samarin, A.(1994). The LATEX Companion. Addison-Wesley.

Gregorio, E. (2005). «LATEX: breve guida ai pac-chetti più comuni». Gruppo Utilizzatori Italianidi TEX.

Knuth, D. E. (1986). The TEXbook. Addison-Wesley.

Lamport, L. (1994). LATEX: a DocumentPreparation System. Addison-Wesley, 2ªedizione.

Lanza, A. (1992). Norme grafiche. De Rubeis,Anzio.

Lesina, R. (1987). Il manuale di stile. Zanichelli,Bologna.

Marzullo, M. (2002). «Uso della pun-teggiatura». Redazione Consulenza Lingui-stica, Accademia della Crusca, http://www.accademiadellacrusca.it/clic.shtml.

Meynet, R. (2000). Norme tipografiche per lacomposizione dei testi con il computer. PontificiaUniversità Gregoriana, Roma. Quinta edizione,prima edizione: Aprile 1995.

Mori, L. (2005). «Scrivere la tesi di laurea conLATEX 2ε». In Atti del guItMeeting 2005, a curadi Gruppo Utilizzatori Italiani di TEX,Pisa, pp. 69–92.

Salmeri, G. (2001). Piccolo manuale di stile.Mneme, http://mondodomani.org/mneme/gms.htm.

Serianni, L. (1988). Grammatica italiana. Ita-liano comune e lingua letteraria. Suoni, forme,costrutti. UTET, Torino.

Setti, R. (2002). «Uso delle sigle». RedazioneConsulenza Linguistica, Accademia della Cru-sca, http://www.accademiadellacrusca.it/clic.shtml.

Trettin, M. (2004). «Elenco dei “peccati” de-gli utenti di LATEX 2ε». CTAN. Traduzione ededizione italiana a cura di Emanuele Zannarini.

. G. Cevolanivia Marconi 3341057 SpilambertoModena – [email protected]

42

Page 45: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

Collegamenti utili del mondo TEX e LATEX

cn: China PRshort name: CTUG

full name: Chinese TeX Users Grouplanguage: chinese

email: info_at_mail.rons.net.cnweb site: www.rons.net.cn

Publication:title: CTUG Communications,

Free Software Magazineeditor: Hong Feng

editor email: fred_at_mail.rons.net.cnPolicy matters:

name: Hong Fengaddress: RON’s Datacom Co., Ltd.

Suite 3-3, WuZhong Street 200,DongXiHu District,Wuhan, Hubei Province,430040 China P.R.

email: info_at_mail.rons.net.cnphone: +862783222108

fax: +862783222108

cz: Czech Republicshort name: CSTUG

full name: Československé sdružení živateløu TeXulanguage: Czechmembers: 380

email: cstug_at_cstug.czweb site: www.cstug.cz

discussion list: cstex_at_cs.felk.cvut.czaddress: CSTUG c/o FEL ČVUT, Technická 2,

166 27 Praha, Czech RepublicPublication:

title: Zpravodaj CSTUGueditor: Zdenìk Wagner

editor email: bulletin_at_cstug.czBanking:

name: Komerèní bankaaccount: 34735021/0100address: Václavské námìstí 42, 114 07 Praha 1,

Czech RepublicPolicy matters:

name: Jaromír Kubenaddress: Univerzita obrany, katedra matematiky,

Kounicova 65, 612 00 Brno, CzechRepublic

email: president_at_cstug.czphone: +420 973 443 577

fax: fax.: +420 549 491 820 (Petr Sojka)General matters:

name: Helena Holovskáaddress: Matematický ústav AV ČR, Žitná 25, 115

67 Praha 1, Czech Republicemail: secretary_at_cstug.czphone: +420 222 090 763

Finance matters:name: Helena Holovská

address: Matematický ústav AV ČR, Žitná 25, 11567 Praha 1, Czech Republic

email: treasurer_at_cstug.czphone: +420 222 090 763

de: Germanyshort name: DANTE e.V.

full name: Deutschsprachige AnwendervereinigungTeX e.V.

language: germanmembers: 2034

email: dante_at_dante.deweb site: www.dante.de

discussion list: tex-d-l_at_listserv.gmd.dePublication:

title: Die TeXnische Komödieeditor: Gerd Neugebauer

editor email: dtk-redaktion_at_dante.dePolicy matters:

name: Volker Schaaaddress: Postfach 101840

D-69008 HeidelbergGermany

email: dante-v_at_dante.dephone: +49622129766

fax: +496221167906General matters:

name: Günter Partoschemail: secretary_at_dante.de

Finance matters:name: Tobias Sterzlemail: treasurer_at_dante.de

dk: Denmarkshort name: DK-TUG

full name: Danish TeX Users Grouplanguage: danishmembers: 84

email: board_at_tug.dkweb site: www.tug.dk

discussion list: dk-tug_at_tug.dksubscribe at: dk-tug-subscribe_at_tug.dk

address: Department of Mathematical SciencesNy MunkegadeDK-8000 Århus CDenmarkPolicy matters:

name: Kaja P. Christiansenaddress: Department of Computer Science

University of AarhusAabogade 34DK-8200 Århus CDenmark

email: president_at_tug.dkphone: +4589425713

fax: +4589425624Finance matters:

name: Arne Jørgensenaddress: Gammel Kongevej 7, 1. th.

DK-1610 Copenhagen VDenmark

email: treasurer_at_tug.dkphone: +4521650113

ee: Estoniafull name: Estonian User Group

Policy matters:address: Astrophysical Observatory, Toravere

Enn Saar, TartuEE 2444 Estonia

email: saar_at_aai.ee

es: Spain(CervanTeX)

short name: CervanTeXfull name: Grupo de Usuarios de TeX

Hispanohablanteslanguage: Spanishmembers: 45

email: secretario_at_cervantex.orgweb site: www.cervantex.org

discussion list: es-tex_at_listserv.rediris.essubscribe at: www.cervantex.org/listas.php

Publication:title: TeXemplares

editor: Enrique Meléndezeditor email: texemplares_at_cervantex.org

Policy matters:name: Juan L. Varona

address: University of La Rioja,26004 Logroño, Spain

email: presidente_at_cervantex.orgGeneral matters:

name: Roberto Herrero Santosemail: secretario_at_cervantex.org

Finance matters:name: Enrique Meléndezemail: tesorero_at_cervantex.org

esc: Spain (Catalan)short name: Tirant lo TeX

full name: Catalan TeX Users Grouplanguage: Catalanweb site: www.lsi.upc.edu/~valiente/tug-catalan.html

discussion list: catala-tex_at_ldist.upc.eduPolicy matters:

name: Gabriel Valienteaddress: Technical University of Catalonia

Jordi Girona, 1-3E-08034 BarcelonaSpain

email: valiente_at_lsi.upc.edu

fr: Franceshort name: GUTenberg

full name: Group francophone des Utilisateurs deTeX

language: frenchmembers: 500

email: gut_at_ens.frweb site: www.gutenberg.eu.org

Publication:title: Cahiers GUTenberg

editor: Jacques Andréeditor email: gut_at_irisa.fr

Policy matters:name: Maurice Laugier

address: c/o IrisaCampus universitaire de BeaulieuF-35042 Rennes cedexFrance

email: gut_at_irisa.frGeneral matters:

name: Sarah Grimaudaddress: Secrétariat GUTenberg

2, rue des Boutons-d’orF-05000 GAPFrance

email: secretariat_at_gutenberg.eu.orgphone: +33681665102

fax: +33492579667Finance matters:

name: Michèle Jouhetemail: Michele.Jouhet_at_cern.ch

fra: France (Astex)short name: AsTEX

full name: Association pour la diffusion de logicielsscientifiques liés à TeX

language: frenchemail: astex-admin_at_univ-orleans.fr

web site: www.univ-orleans.fr/EXT/ASTEX/astex/doc/en/web/html/astex000.htm

discussion list: astex_at_univ-orleans.frPolicy matters:

name: Michel Lavaud

address: Association AsTEXBP 653245066 Orleans cedex 2France

email: Michel.Lavaud_at_univ-orleans.frphone: +33238640994

Finance matters:name: Delombera Neggaemail: Delombera.Negga_at_wanadoo.fr

gr: Greecefull name: The Greek TeX Friends Grouplanguage: Greekmembers: 45

email: eft_at_ocean1.ee.duth.grweb site: obelix.ee.duth.gr/eft/

Publication:title: Eutupon

editor: Prof. Basil K. PapadopoulosPolicy matters:

name: Apostolos Syropoulosaddress: 366, 28th October Str.

GR-671 00 XanthiGreece

email: apostolo_at_obelix.ee.duth.grphone: +3054128704

hu: Hungaryshort name: MaTeX

full name: Magyar TeX Egyesületlanguage: Hungarianmembers: 15

email: matex_at_math.klte.huweb site: www.math.klte.hu/~matex/

discussion list: tex-l_at_tigris.klte.husubscribe at: www.math.klte.hu/~matex/LevLista.html

address: Inst of Mathematics and InformaticsUniversity of DebrecenH-4010 DebrecenP.O. Box 12HungaryPolicy matters:

name: Antal Járaiaddress: Department of Numerical Analysis

Eötvös Loránd UniversityPázmány Péter sétány 1/DH-1117 BudapestHungary

email: ajarai_at_moon.inf.elte.huGeneral matters:

name: Gyöngyi Bujdosóaddress: Institute of Mathematics and Informatics

University of DebrecenH-4010 DebrecenP.O. Box 12Hungary

email: ludens_at_math.klte.huphone: +36304280403

fax: +3652416857Finance matters:

name: Desző Miklósaddress: Alfréd Rényi Institute of Mathematics

Hungarian Academy of Sciences,Reáltanoda 13–15H-1053 BudapestHungary

ie: Irelandfull name: ITALIClanguage: irish

discussion list: ITALIC-L_at_listserv.heanet.iePolicy matters:

name: Peter Flynnaddress: University College

CorkIreland

email: peter_at_silmaril.ie

in: Indiashort name: TUGIndia

full name: Indian TeX Users Groupmembers: 90

email: tugindia_at_tug.org.inweb site: www.tug.org.in

discussion list: tugindia_at_tug.orgsubscribe at: www.tug.org/mailman/listinfo/tugindia

address: Floor III, SJP BuildingsCotton HillsTrivandrum 695014IndiaPublication:

title: TUGIndiaeditor email: tij_at_tug.org.in

Banking:name: HDFC Bank Limited

address: Keston TowersVazhuthacaudTrivandrum 695014IndiaPolicy matters:

name: K.S.S. Nambooripadaddress: Floor III, SJP Buildings

Cotton HillsTrivandrum 695014India

email: kssn_at_tug.org.inphone: +914712337501

fax: +914712333186General matters:

Page 46: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

name: Satish Babuaddress: Floor III, SJP Buildings

Cotton HillsTrivandrum 695014India

email: sb_at_tug.org.inphone: +914712337501

fax: +914712333186Finance matters:

name: K. Anil Kumaraddress: Floor III, SJP Buildings

Cotton HillsTrivandrum 695014India

phone: +914712337501fax: +914712333186

is: Icelandshort name: ÍsTeX

full name: Vefur íslenskra TeX notendalanguage: Icelandicweb site: rhi.hi.is/istex/

Publication:title: SamanTeXt

editor: Árni Magnússoneditor email: arnima_at_u.washington.edu

Policy matters:name: Árni Magnússon

address: Sudurgötu 33101 ReykjavíkIceland

email: arnima_at_u.washington.edu

it: Italyshort name: GuIT

full name: Gruppo Utilizzatori Italiani di TeXlanguage: italianmembers: 55

email: guit_at_sssup.itweb site: www.guit.sssup.itaddress: c/o Ufficio Statistica

Sant’Anna School of Advanced StudiesPiazza Martiri della Libertà, 3356127 Pisa, ItalyPublication:

title: ArsTEXnicaeditor: Massimiliano Dominici

editor email: arstexnica_at_sssup.itPolicy matters:

name: Maurizio Himmelmannemail: himmel_at_sssup.itphone: +39 050 883382

General matters:name: Onofrio ’Ninni’ de Bariemail: onodebari_at_gmail.com

kr: Koreashort name: KTUG

full name: Korean TeX User Grouplanguage: korean

email: info_at_mail.ktug.or.krweb site: www.ktug.or.kr

Policy matters:name: Kim Kangsuemail: director_at_ktug.or.kr

lt: Lithuaniafull name: Lietuvos TeX’o Vartotoju Grupemembers: 8

Policy matters:name: Vytas Statulevicius

address: Akademijos 4LT-2600 VilniusLithuania

email: vytass_at_ktl.mii.ltphone: +3702359609

fax: +3702359804

mx: Mexicofull name: TeX Méxicolanguage: Spanish

email: tex_at_linuxopensource.com.mxweb site: linuxopensource.com.mx/tex/

Policy matters:name: Cuauhtémoc Pacheco Díaz

address: Rayon No. 523, Centro 58000Morelia, MichoacanMexico

email: temo_at_ibiblio.orgphone: +52143128724

fax: +52143173945

nl: Netherlands,Belgium

short name: NTGfull name: Nederlandstalige TeX Gebruikersgroeplanguage: dutchmembers: 300

email: info_at_ntg.nlweb site: www.ntg.nl

discussion list: tex-nl_at_ntg.nlsubscribe at: LISTSERV_at_nic.surfnet.nl

address: Maasstraat 25836 BB SambeekThe NetherlandsPublication:

title: MAPS

editor: Wybo Dekkereditor email: maps_at_ntg.nl

Banking:name: Postbank

account: 1306238(swift) code: PSTBNL21routing no.: NL05PSTB0001306238

address: AmsterdamPolicy matters:

name: Hans Hagenaddress: Pragma

Ridderstraat 278061 GH HasseltThe Netherlands

email: ntg-president_at_ntg.nlphone: +31384775369

fax: +31384775374General matters:

name: Willi Eggeraddress: Maasstraat 2

5836 BB SambeekThe Netherlands

email: ntg-secretary_at_ntg.nlphone: +31485573896

Finance matters:name: Wybo Dekker

address: Deilsedijk 604158 CH DeilThe Netherlands

email: ntg-treasurer_at_ntg.nlphone: +31345652164

no: Nordic countriesfull name: Nordic TeX Users Grouplanguage: Nordic languagesmembers: 78web site: www.ifi.uio.no/~dag/ntug/

discussion list: nordictex_at_ifi.uio.noPolicy matters:

name: Dag Langmyhraddress: University of Oslo

PO Box 1080 BlindernN-0316 OsloNorway

email: dag_at_ifi.uio.nophone: +4722852450

fax: +4722852401

ph: Philippinesshort name: TUG-Philippines

full name: Philippines TeX Users GroupPolicy matters:

name: Felix P. Muga IIaddress: Ateneo de Manila University

Loyola HeightsQuezon CityPhilippines

email: fpmuga_at_admu.edu.phphone: +6324266001 ext 2515

fax: +6324266008

pl: Polandfull name: Polska Grupa Użytkowników Systemu

TeX – GUSTlanguage: Polishmembers: 276

email: sekretariat_at_gust.org.plweb site: www.GUST.org.pl

discussion list: gust-l_at_man.torun.pladdress: Polska Grupa Użytkowników Systemu

TeXPl. Rapackiego 1PL-87-100 ToruńPolandPublication:

title: Biuletyn GUSTeditor: Tomasz Przechlewski

editor email: ekotp_at_univ.gda.plBanking:

name: BIG Bank Gdański SA,OddziałMillenium, Toruń

account: 80 11602202 0000 0000 5530 4981Policy matters:

name: Jerzy Ludwichowskiaddress: Information & Communication

Technology CentreNicolaus Copernicus UniversityPl. Rapackiego 1PL-87-100 ToruńPoland

email: prezes_at_gust.org.plphone: +48 56 6112742

fax: +48 56 6221850Finance matters:

name: Jolanta Szelatyńskaaddress: Information & Communication

Technology CentreNicolaus Copernicus UniversityPl. Rapackiego 1PL-87-100 ToruńPoland

email: secretary_at_gust.org.plphone: +48 56 6112741

fax: +48 56 6221850

pt: Portugalshort name: GUTpt

full name: Grupo de Utilizadores de TeXlanguage: Portugueseweb site: gentzen.mat.uc.pt/~gutpt/

discussion list: gutpt_at_gentzen.mat.uc.ptPolicy matters:

name: Pedro Quaresma de Almeida

address: Coimbra University, Dep. MatemáticaLargo D.DinisApartado 30083001-454 COIMBRAPortugal

email: pedro_at_mat.uc.ptphone: +351239791181

ru: Russiashort name: CyrTUG

full name: Associaciia Polźovatelei KirillicheskogoTeXá

email: cyrtug_at_mir.msk.suweb site: www.cemi.rssi.ru/cyrtug/

Policy matters:name: Eugenii V. Pankratievemail: cyrtug_at_cemi.rssi.ru

General matters:name: Irina Makhovaya, Executive Director

address: Mir Publishers2, Pervyi Rizhskii PereulokMoscow 129820Russia

email: irina_at_mir.msk.suphone: +70952860622, +70952861777

fax: +70952889522

si: Sloveniafull name: TeXCeH

web site: vlado.fmf.uni-lj.si/texceh/texceh.htmPolicy matters:

name: Vladimir Batageljaddress: Jadranska 19

SI-61111 LjubljanaSlovenia

email: Tex.Ceh_at_fmf.uni-lj.si

uk: United Kingdomshort name: UKTUG

full name: UK TeX Users’ Grouplanguage: British Englishmembers: 150

email: uktug-enquiries_at_tex.ac.ukweb site: uk.tug.org

subscribe at: uk.tug.org/Membership/address: UKTUG (membership)

61 Victor RoadKensal GreenLondonNW10 5XBUKPublication:

title: Baskerville (dormant)editor: tba

editor email: baskerville_at_tex.ac.ukPolicy matters:

name: Jay Hammondemail: uktug-chairman_at_tex.ac.uk

General matters:name: David Osborne

address: UKTUG secretary c/o61 Victor RoadKensal GreenLondonNW10 5XBUK

email: uktug-secretary_at_tex.ac.ukFinance matters:

name: Tobias Wahlemail: uktug-enquiries_at_tex.ac.uk

us: TeX User Group(international)

short name: TUGfull name: TeX Users Groupmembers: 1800

email: office_at_tug.orgweb site: www.tug.org

discussion list: board_at_tug.orgaddress: TeX Users Group

P.O.Box 2311Portland, OR 97208-2311USAPublication:

title: TUGboateditor: Barbara Beeton

editor email: TUGboat_at_tug.orgPolicy matters:

name: Karl Berryaddress: 1466 Naito Ave NW, Suite 3141

Portland, OR 97209USA

email: president_at_tug.orgphone: +15032239994

fax: +12062033960General matters:

name: Sue DeMerittemail: secretary_at_tug.org

Finance matters:name: David Waldenemail: treasurer_at_tug.org

vn: Vietnamshort name: VietTUG

full name: Vietnamese TeX Users Grouplanguage: vietnamese

email: kyanh_at_o2.plweb site: www.viettug.org

Fonte TUG http://www.tug.org/usergroups.html – Aggiornato al 2006-01-06

Page 47: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

2006

G r u

p po

Uti

li

zzatoriItalia

ni

di

TEX ?

Igut

Terzo convegno nazionale su TEX, LATEX etipografia digitale

Pisa, 21 ottobre 2006Aula Magna, Scuola Superiore Sant’Anna

Call for Paper

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

http://www.guit.sssup.it/guitmeeting/2006/

Page 48: Numero 1 Aprile 2006 - guit.sssup.it · tecnologie correlate. Di volta in volta verrà ssato, e reso pubblico sulla pagina web, un termine di scadenza per la ... XML, linguaggi di

ArsTEXnicaRivista italiana di TEX e LATEX

Numero 1, Aprile 2006

3 EditorialeMassimiliano Dominici

5 Intervista a Donald KnuthGianluca Pignalberi

8 I registri token: questi sconosciutiClaudio Beccari

14 Ridefinire i comandi primitivi TEX e applicazioni a LATEXEnrico Gregorio

20 L’ambiente pictureMassimo Caschili

29 Norme tipograficheGustavo Cevolani