11 2¢ £ £ ¢4
Transcript
11 2¢ £ £ ¢4
4 5 2 Testatine 6 Corpo del Testo Note al margine 7 9 10 3 8 11 1 1 3 5 7 9 11 Pie’ di pagina 2,54cm + \hoffset \oddsidemargin = -43pt \headheight = 0pt \textheight = 486pt \marginparsep = 10pt \footskip = 25pt \hoffset = 0pt \paperwidth = 398pt 2 4 6 8 10 2,54cm + \voffset \topmargin = -29pt \headsep = 0pt \textwidth = 341pt \marginparwidth = 48pt \marginparpush = 5pt (non mostrata) \voffset = 0pt \paperheight = 597pt LATEX con Linux&C. Riccardo Murri [email protected] I Installare e configurare il software 1 teTEX 1.1 Installare teTEX. . . . . . . . . . . . . . . . 1.2 Configurare TEX . . . . . . . . . . . . . . . 1.2.1 Preparare la sillabazione italiana . . 1.2.2 Configurare XDvi . . . . . . . . . . 1.2.3 Configurare DviPS . . . . . . . . . 1.2.4 Un rapido sguardo alle altre opzioni 2 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 3 3 3 6 8 Emacs 2.1 Installare XEmacs . . . . . . . . . . . . . . . 2.2 Personalizzare XEmacs . . . . . . . . . . . . 2.3 Installare AUC-TEX . . . . . . . . . . . . . . 2.3.1 Configurare le stampanti di AUC-TEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 9 11 11 II Scrivere con LATEX 13 3 14 14 14 15 16 16 16 17 17 Primi passi con TEX 3.1 I passi fondamentali . . . . . . 3.2 Il primo file . . . . . . . . . . 3.2.1 L’anteprima di stampa 3.2.2 Stampare . . . . . . . 3.2.3 Stampa su file . . . . . 3.3 Usare AUC-TEX . . . . . . . . 3.3.1 Compilare . . . . . . . 3.3.2 Anteprima . . . . . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3 3.3.4 4 5 6 Stampa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stampa su file . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 Qui comincia l’avventura 4.1 La struttura di un file LATEX . . . . . . . . . . . . 4.2 Un nuovo esempio . . . . . . . . . . . . . . . . 4.2.1 Cominciare un documento con AUC-TEX 4.2.2 Uno sguardo ravvicinato . . . . . . . . . 4.3 Anatomia di un comando . . . . . . . . . . . . . 4.4 Titoli ed autori . . . . . . . . . . . . . . . . . . 4.5 Varianti del carattere . . . . . . . . . . . . . . . 4.5.1 I comandi di stile con AUC-TEX . . . . . 4.6 Colorare il testo . . . . . . . . . . . . . . . . . . 4.6.1 Colorare lo sfondo delle pagine . . . . . 4.6.2 Definire nuovi colori . . . . . . . . . . . 4.7 I primi errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 20 20 20 22 23 24 24 26 26 26 27 Il testo in LATEX 5.1 Il testo ordinario . . . . . . . . . . . . . . . . . 5.1.1 Accenti . . . . . . . . . . . . . . . . . 5.2 Le note al testo . . . . . . . . . . . . . . . . . 5.2.1 Note al margine . . . . . . . . . . . . . 5.3 Dividere il documento in sezioni . . . . . . . . 5.3.1 Profondità di numerazione delle sezioni 5.3.2 Appendici . . . . . . . . . . . . . . . . 5.3.3 Personalizzare l’aspetto dei titoli . . . . 5.4 L’indice sommario . . . . . . . . . . . . . . . 5.5 Riferimenti incrociati . . . . . . . . . . . . . . 5.6 Altri errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 30 31 31 32 32 32 32 32 33 33 34 Gli ambienti testuali 6.1 Inserire ambienti con AUC-TEX . 6.2 Citazioni . . . . . . . . . . . . . . 6.3 Versi . . . . . . . . . . . . . . . . 6.4 Effetti tipografici . . . . . . . . . 6.4.1 Allineare il testo . . . . . 6.4.2 Ridimensionare il carattere 6.4.3 Cambiare lo stile del testo 6.5 Liste, elenchi ed enumerazioni . . 6.5.1 Elenchi puntati . . . . . . 6.5.2 Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 38 38 38 38 40 40 41 41 41 42 ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6 7 8 III 9 6.5.3 Inserire liste con AUC-TEX . . . . . 6.5.4 Enumerazioni . . . . . . . . . . . . 6.5.5 Riferimenti agli elementi di una lista Ancora errori . . . . . . . . . . . . . . . . Le classi di documento 7.1 Le classi standard di documento 7.1.1 Le opzioni comuni . . . 7.1.2 La classe ‘book’ . . . . 7.2 Dividere i file . . . . . . . . . . 7.2.1 Compilazioni parziali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 42 43 44 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 46 46 47 48 48 Gli ultimi ritocchi 8.1 Piccoli dettagli tipografici . . . . . . . . . 8.2 La spaziatura delle righe . . . . . . . . . 8.2.1 Overfull \hbox . . . . . . . . . . 8.2.2 Aggiustare la sillabazione . . . . 8.2.3 Allentare i criteri di composizione 8.2.4 Underfull \hbox . . . . . . . . . . 8.3 Aggiustare le pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 50 51 52 53 53 54 54 . . . . . . . . . . . . . . . . . . . . Matematica con LATEX 55 Formule matematiche 9.1 Un po’ di teoria . . . . . . . . . . 9.2 La modalità matematica di LATEX . . . 9.3 I comandi che producono simboli . . . 9.3.1 Spazi nelle formule . . . . . . 9.3.2 Testo nelle formule . . . . . . 9.4 Frazioni, radici e coefficienti binomiali 9.5 Esponenti e deponenti . . . . . . . . . 9.6 L’integrale e le grandi formule . . . . 9.7 Limiti, logaritmi, ed altre funzioni 9.8 Parentesi . . . . . . . . . . . . . . . . 9.9 Cambiare stile nelle formule . . . . . 9.9.1 Simboli in grassetto . . . . . 9.10 Accenti matematici . . . . . . . . . . 9.10.1 Accenti doppi . . . . . . . . . 9.10.2 Altri accenti matematici . . . 9.11 L’ultima parola . . . . . . . . . . . . iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 56 57 57 57 58 58 59 60 62 62 63 64 64 65 66 66 IV Argomenti specifici 67 10 Figure e illustrazioni 10.1 Corpi fluttuanti . . . . . . . . . . . . . . . 10.2 L’ambiente figure . . . . . . . . . . . . . 10.2.1 Didascalie . . . . . . . . . . . . . . 10.2.2 Riferimenti alle figure . . . . . . . 10.2.3 Figure nelle pagine con due colonne 10.3 L’ambiente table . . . . . . . . . . . . . . 10.4 Posizione di figure e tabelle . . . . . . . . . 10.4.1 Aggiustare la posizione . . . . . . . 10.5 Nuovi tipi di fluttuanti . . . . . . . . . . . 10.5.1 Numerazione delle figure . . . . . . 10.5.2 Decorazione delle figure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 68 68 69 69 69 69 70 70 71 72 72 11 Illustrazioni 11.1 Includere illustrazioni . . . . . . . . 11.2 Trasformazioni sull’immagine . . . 11.2.1 Cambiare le dimensioni . . 11.2.2 Ruotare l’immagine . . . . 11.2.3 Tagliare un riquadro . . . . 11.3 I formati grafici . . . . . . . . . . . 11.3.1 Convertire tra diversi formati 11.3.2 Creare diagrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 73 74 74 74 75 75 77 77 12 Estendere LATEX 12.1 Definire nuovi comandi . . . . . . . . . . 12.1.1 Comandi senza argomenti . . . . 12.1.2 Comandi con argomenti . . . . . 12.1.3 Comandi con argomenti facoltativi 12.1.4 Ridefinire i comandi . . . . . . . 12.2 Definire nuovi ambienti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 78 78 79 80 80 81 iv . . . . . . . . . . . . . . . . Parte I Installare e configurare il software 1 ne descritta in questo capitolo occorre assumere l’identità di root col comando ‘su’. ‘teTEX’ è una distribuzione di TEX per i sistemi UNIX, comprendente il compilatore TEX ed i necessari programmi complementari, i più diffusi pacchetti di macro come LATEX e Plain-TEX, ed infine un’abbondante documentazione. Questo capitolo spiegherà come installarli e come orientarsi nella configurazione iniziale. Un breve documento come questo non può coprire in tutti i dettagli un processo di installazione, ed esistono troppe piccole differenze per riportarle qui—applicate le istruzioni che darò con una certa elasticità :-) e incrociate le dita In caso di problemi, beh, ci sono sempre gli amici, no? Inoltre, il sistema teTEX si appoggia ai programmi esterni ‘G HOST S CRIPT’ e ‘LPRng’ per la stampa: questo documento non descrive nulla della loro installazione e configurazione, il che comunque non dovrebbe essere un problema, perché sono considerate parti essenziali di un sistema UNIX ed ogni distribuzione li installerà automaticamente. Tutte le operazioni di installazione e configurazione di teTEX e XEmacs devono essere eseguite da un utente con privilegi amministrativi: per ogni operazio- !"!#%$&$('*),+.- ‘teTEX’ è ormai incluso in tutte le maggiori distribuzioni di Linux e BSD: la tabella 1.1 elenca i pacchetti precompilati che dovrete installare, a seconda del sistema operativo che avete scelto. I comandi necessari per installare un pacchetto variano con la distribuzione, e sarebbe troppo lungo riportare qui tutti i dettagli per compiere passo-passo l’installazione in ogni sistema; generalmente dovrete: 1) trovare nel CD-ROM che contiene il sistema operativo un file il cui nome: comincia come riportato in tabella 1.1, è seguito da qualche strana sequenza di simboli e cifre, e termina con il suffisso ‘.deb’ (Debian) oppure ‘.tgz’ (Slackware) o ‘.rpm’ (tutti gli altri); 2) installare questo file con il comando ‘dpkg -i file’ (Debian), oppure ‘pkgtool -i file’ (Slackware) o ‘rpm -i file’ (tutti gli altri). Chi vuole compilare da sé tutti i programmi che installa, come pure chi usa qualche altro sistema, può trovare le sor2 hyphenation”: passerete ad una schermata in cui vi viene chiesto di indicare un formato per cui selezionare la sillabazione—scegliete ‘latex’. (Se ‘latex’ non compare tra le alternative possibili, l’installazione non è completa o qualcosa è andato storto.) Il vostro editor preferito sarà ora aperto su un file chiamato ‘language.dat’, che indica a teTEX quali lingue vogliamo che TEX sia in grado di sillabare. Per attivare una lingua, basta cancellare il carattere ‘%’ che compare all’inzio della riga; per disattivarla, basta reinserirlo. Potete attivare tutte le lingue che servono, ma è meglio non eccedere per non consumare inutilmente memoria. Le due principali varianti di inglese devono sempre essere attive, perché vengono usate internamente da LATEX. Cercate ora la riga “italian ithyph.tex”, attivatela (cfr. figura 1.2), salvate e uscite dall’editor: sul video scorreranno rapide le scritte che indicano che i formati TEX vengono ricostruiti, poi sarete di nuovo davanti al menu principale di ‘texconfig’: è fatta! Il comando ‘texconfig hyphen latex’ aprirà direttamente il file ‘language.dat’ senza passare dai menu. Attenzione! Se modificate direttamente il file ‘language. dat’, per rendere effettive le modifiche occorre ricostruire i formati TEX con il comando ‘fmtutil --all; texlinks’. genti di teTEX presso ftp://ftp.dante. de/tex-archive/systems/unix/teTeX/. /, 1012(3 #,!#%$'*),+ Dopo una corretta installazione, avrete a disposizione il comando ‘texconfig’. Lanciatelo, ora; impiegherà un po’ di tempo a partire, perché esegue alcuni controlli sull’integrità del sistema teTEX, poi stamperà un messaggio: “questo programma richiede che il terminale abbia almeno 80 colonne e 24 righe”, se il programma vi muore davanti, assicuratevi di avere le dimensioni giuste e riprovate! Se tutto è andato bene, a questo punto vedrete una schermata come quella di figura 1.1. All’interno dei menu di ‘texconfig’ ci si muove su e giù con i tasti cursore e si sceglie una voce con ‘Invio’; si accede alle opzioni ‘Ok’ e ‘Cancel’ premendo ‘TAB’. Attenzione! ‘texconfig’ non avviserà di eventuali errori durante la configurazione: usate sempre la voce di menu “LOG: view logfile” per controllare che tutto vada per il verso giusto: si può così consultare un registro con l’output di tutti i comandi eseguiti da ‘texconfig’ durante una sessione; se qualcosa non funziona come dovuto, è il primo posto dove guardare! Preparare la sillabazione italiana In questo passo, occorrerà modificare un file di configurazione; ‘texconfig’ invocherà l’editor ‘vi’—se ne preferite un altro, uscite da ‘texconfig’ e rientrate con la riga di comando: ‘VISUAL=editor texconfig’ dove editor è il programma di vostra scelta. Scegliete la voce di menu “HYPHEN: Configurare XDvi Scegliete la voce di menu “XDVI: xdvi configuration”: si accede ad una schermata dove l’unica opzione di rilievo è “default papertype”, selezionate questa, e poi indicate “a4” nella lista di formati che vi verrà presentata. Adesso XDvi è 3 Distribuzione Caldera Debian FreeBSD, OpenBSD Mandrake NetBSD Red Hat Slackware SuSE Pacchetti da installare TeTeX tetex-base, tetex-bin, tetex-doc, tetex-extra teTEX è fra i programmi che si possono installare con il sistema dei ports: usate quindi il relativo Makefile sotto la directory /usr/ports tetex, tetex-latex, tetex-afm, tetex-xdvi, tetex-dvips, tetex-dvilj (solo per vecchie stampanti HP LaserJet e compatibili PCL) teTeX, teTeX-bin, teTeX-share, teTeX-sharesrc tetex, tetex-latex, tetex-doc, tetex-xdvi, tetex-dvips, tetex-dvilj (solo per vecchie stampanti HP LaserJet e compatibili PCL) tetex.tgz, tex_bin.tgz e tex_doc.tgz (dalla serie tex1) tetex, te_ams, te_cont, te_kpath, te_latex, te_dvilj (solo per vecchie stampanti HP LaserJet o compatibili PCL) Tabella 1.1: I pacchetti da installare per avere una distribuzione teTEX funzionale, divisi per distribuzione Linux/BSD. Figura 1.1: La schermata iniziale di ‘texconfig’. 4 Figura 1.2: Il file ‘language.dat’ di configurazione della sillabazione; è stata evidenziata la riga relativa alla lingua italiana. 5 de alla voce “global settings” del menu di configurazione (vedi più avanti). Scegliete la voce di menu “DVIPS: dvips configuration”: nella schermata che segue, “global settings” permette di modificare i parametri del file ‘config. ps’, le altre voci servono rispettivamente per aggiungere, cancellare o modificare la configurazione ‘config.nome’ della stampante ‘nome’. Entrate nel sotto-menu “GLOBAL: global settings”’: per prima cosa vi verrà chiesto quale formato di carta userete normalmente—indicate “a4”—poi, tra le scelte seguenti, ignorate “MODE” e “OFFSETS” e invece selezionate “CMD”. Ora dovete scegliere: volete che il comando ‘dvips’ mandi automaticamente in stampa? In questo caso scrivete il comando che usate normalmente per stampare un file P OST S CRIPT (sarà ‘lpr’ oppure ‘lpr -Pnome-dellastampante’). Oppure volete che ‘dvips’ salvi quello che produce in un file ‘.ps’? Allora, lasciate vuota la casella di dialogo e premete ‘Invio’. È possibile fare tutto questo da riga di comando, scrivendo ‘texconfig dvips paper a4’ e poi ‘texconfig dvips printcmd comando-di-stampa’. Si possono configurare altre stampanti o modi di conversione usando le altre voci del menu “dvips configuration”: occorre scrivere un nome nella casella di dialogo, poi ‘texconfig’ creerà, cancellerà o modificherà il file ‘config.nome’ e da qui in poi tutto procede come nel menu “global settings”. Infine, con il vostro editor preferito, aprite il file ‘/etc/texmf/dvips/updmap’, già pronto: potete verificarlo con la voce “view a testfile”. Il resto della configurazione di XDvi si fa attraverso il meccanismo delle risorse di X/Windows, modificando il file ‘/usr/X11R6/lib/X11/app-defaults/ XDvi’. La versione di questo file distribuita con teTEX non richiede nessuna modifica; le opzioni che si possono aggiungere sono documentate nella pagina man ‘xdvi(1x)’. Il listato 1 riporta un esempio di come si possa giocare con le risorse di X/Windows per dare a XDvi un aspetto più moderno; le impostazione per tutti gli utenti vanno nel file ‘/etc/X11/Xresources’, quelle personali in ‘~/.Xresources’. Configurare DviPS ‘DviPS’ è il programma che trasforma i file ‘.dvi’, prodotti dal compilatore TEX, in file ‘.ps’ che possono essere stampati—direttamente o tramite il programma G HOST S CRIPT. La configurazione di DviPS consiste nel creare uno o più file che controllano le caratteristiche della conversione: se l’output debba essere inviato direttamente alla stampante o scritto su un file, le dimensioni della carta, se usare i font ‘PostScript Type 1’ oppure le versioni bitmap fornite con TEX, ecc. Possono coesistere diversi file di configurazione; il comando ‘dvips -Pnome” leggerà la configurazione dal file ‘config.nome’. Ciascuno di questi file individua una “stampante”, nel gergo di DviPS, ma non deve necessariamente riferirsi ad una stampante reale. Il file ‘config.ps’ è quello usato normalmente in assenza di altre richieste, e corrispon6 listingfig 1: Risorse X/Windows per XDvi. Le impostazioni qui riportate donano a XDvi un pannello grigio, con i pulsanti in leggero rilievo. ! Queste prime impostazioni sono quelle standard di teTeX; ! vedi la pagina man xdvi(1x ) per le spiegazioni . ! ! pagina ridotta a 1/8 delle dimensioni . XDvi 4 shrinkFactor : 8 XDvi 4 paper: a4 XDvi 4 wwwBrowser: netscape XDvi 4 thorough: true ! se manca questa linea , i caratteri accentati ! non appariranno bene sui video a colori . ! ! Queste altre risorse controllano l ’ aspetto del programma, e si ! possono alterare senza problemi ; sono spiegate nella documentazione ! della libreria libXaw. ! XDvi 4 cursorColor: red red XDvi 4 cursorColor: XDvi 4 BeNiceToColormap: 0 XDvi 4 ShapeStyle: Rectangle XDvi 4 ShadowWidth: 2 XDvi 4 XDvi 4 XDvi 4 XDvi 4 Text 4 Text 4 Text 4 Text 4 Background: white Foreground: black ThreeD 4 Background: gray Scrollbar 4 Background: gray 5 adobe 5 helvetica 5 medium 5 r 4 12 4 iso8859 5 1 XDvi 4 Command.Font: XDvi 4 Command.Background: gray XDvi 4 Command.highlightThickness:0 XDvi 4 Label.Background: XDvi 4 Label.ShadowWidth: gray 0 XDvi 4 Scrollbar.Background: gray XDvi 4 Form 4 Background: gray XDvi 4 Form 4 Text 4 Background: white XDvi 4 Form 4 Viewport 4 Background: white 7 one sono i?] va più che bene per XDvi e per la quasi totalità delle stampanti odierne. Per le stampanti “Apple LaserWriter” scegliete il modo ‘canonex’ se proprio volete essere pignoli. cercate la riga ‘type1_default=false’ e cambiatela in ‘type1_default=true’; a questo punto, eseguite il comando ‘/etc/ texmf/dvips/updmap’. Ora DviPS è abilitato ad usare di preferenza i font “P OST S CRIPT Type 1”, la configurazione è terminata. Un rapido sguardo alle altre opzioni “FONT: Directories for font creation” La configurazione standard va più che bene, meglio non toccarla: per scrupolo, controllate che sia barrata la casella “varfonts” nel menu “OPTIONS”. Se sperimentate errori con XDvi o DviPS dovuti ad un programma ‘mktexpk’ o all’impossibilità di scrivere in qualche directory, usate la voce di menu “FONTRW: add global write permissions to standard fonts tree”. “REHASH: rebuild ls-R database” Questa operazione va fatta dopo aver aggiunto dei file (formati TEX, pacchetti LATEX, font di caratteri, ecc.) nelle directory del sistema teTEX—le aggiunte per tutte gli utenti vanno fatte sotto l’albero ‘/usr/local/lib/texmf/’ e quelle personali sotto ‘~/texmf/’. “FORMATS: formats” Questa operazione permette di scegliere quali formati far compilare a TEX, fra quelli disponibili, e quali file di configurazione controlleranno questa operazione; se non avete un buon motivo per cambiare questo file, meglio lasciare le cose così come sono. Le altre opzioni sono auto-esplicative e, comunque, innocue :-). In ogni caso, troverete il manuale di teTEX nella directory ‘/usr/share/doc/texmf/tetex’ sotto il nome ‘TETEXDOC’ e nei più comuni formati. “MODE: default mode” Questa opzione controlla la generazione su richiesta dei font bitmap. Ormai tutti i font più usati hanno delle versioni P OST S CRIPT, quindi le versioni bitmap vengono ignorate da DviPS. Il modo standard ‘ljfour’ 8 76 ‘Emacs’ è il più potente editor per i sistemi UNIX, che alcuni programmi di supporto rendono particolarmente adatto ad essere usato in congiunzione con TEX. ‘Emacs’ esiste in due versioni maggiori, ‘GNU-Emacs’ e ‘XEmacs’. Questo capitolo spiega come installare la variante ‘XEmacs’, e come configurarla per l’uso con teTEX; vale anche qui l’avvertenza data nel capitolo 1: in questo poco spazio non si possono coprire tutti i dettagli dell’installazione, che a volte è complicata. Tutte le operazioni di installazione e configurazione di teTEX e XEmacs devono essere eseguite da un utente con privilegi amministrativi: per ogni operazione descritta in questo capitolo occorre assumere l’identità di root col comando ‘su’. XEmacs è disponibile in pacchetti precompilati per tutte le maggiori distribuzioni, oppure potete scaricare il codice sorgente da ‘http://www.xemacs.org/’; combattete per avere la versione 21 che è molto meglio della 20. Se non avete mai usato XEmacs prima di ora, è bene iniziare a prendere confidenza leggendo il documento ‘TUTORIAL’: premete insieme i tasti ‘Control’ e ‘h’, poi premete ‘t’, e cominciate /, /,9 $:# !;!;<!#%$=+ )?> @ La principale ragione per cui XEmacs è più amichevole di GNU-Emacs verso i principanti è la presenza di un menu “Options”, da cui si possono personalizzare molti aspetti del programma: la figura 2.1 mostra per esempio come sia possibile attivare la colorazione di un file in /, !"!#8$ base al programma contenuto (colorazioXEmacs ne sintattica o syntax highlighting). Qui Per scrivere in LATEX, avrete bisogno di un di seguito riporto due impostazioni pareditor di testi—uno qualunque, TEX non ticolarmente comode quando si scrive in fa differenze! Alcuni editor hanno pe- LAT X. E rò dei modi specifici per LATEX; fra questi, io consiglio ‘XEmacs’, che si trasfor- Attivare la colorazione sintattica Poma quasi in un editor dedicato grazie ai tete fare esattamente come in figura 2.1: assicuratevi che sia segnate le caselle pacchetti ‘AUC-TEX’ e ‘X-Symbol’. 9 [Aggiungere tabella con i pacchetti da installare per distribuzione, o istruzioni più dettagliate su dove reperire i binari precompilati.] [Spostare nel capitolo “Primi passi”?] Figura 2.1: Il menu di configurazione di XEmacs. L’opzione selezionata mostra come attivare la colorazione sintattica. 10 “Automatic” e “Colors”, scegliete il livello (“Least” è il minore, “Most” doA vrebbe colorare un po’ tutto), infine rendete permanente la modifica con “Save Options”. Chi usa GNU-Emacs può attivare la colorazione sintattica aggiungendo queste lare!] righe all’inizio del file ‘~/.emacs’: XEmacs viene distribuito insieme alla propria versione di ‘AUC-TEX’, mentre gli utenti di GNU-Emacs dovranno scaricarne una da ‘http://sunsite. auc.dk/auctex/’; le istruzioni di installazione sono chiare ed essenziali, e tutto filerà liscio, purché scriviate la giusta ‘lispdir’—se non sapete qual è, tentate il comando ‘locate -e site-lisp|grep ;; Colorazione sintattica [ font 5 lock] "site-lisp\$" ’ e ispezionate quello che ( setq 5 default font 5 lock 5 auto 5 fontify t ) viene fuori (require ’ font 5 lock) Adesso lanciate l’editor sul file Bilanciamento delle parentesi Il con- ‘.emacs’ (o sul file ‘site-start.el’ se trollo del bilanciamento delle parentesi volete attivare AUC-T X per tutti gli E consiste in questo, che XEmacs eviden- utenti) e aggiungete, all’inizio, le righe zierà la parentesi compagna di quella su seguenti: cui si trova il cursore: in verde se le pa;; AUC 5 TeX rentesi si corrispondono (graffa con graf- ( setq TeX 5 macro 5 global fa, ecc.), altrimenti in rosso. Il menu “Pa’( "/ usr / lib /texmf/ tex " )) ren highlighting” per attivare il controllo ( setq TeX 5 printer 5 list ’( del bilanciamento delle parentesi si tro(" Default " "dvips 5 f %s|lpr" "lpq" ))) va subito sotto quello della colorazione (require ’ tex 5 site ) sintattica (vedi figura 2.1). Ora riavviate Emacs e provate ad apriAnche chi usa GNU-Emacs può attivare un file ‘.tex’: se in alto compariranno re il controllo del bilanciamento delle padue nuovi menu “Command” e “LaTeX”, rentesi: aggiungete queste righe all’inizio complimenti, siete in AUC-TEX! lare!] del file ‘~/.emacs’: Configurare le stampanti di AUC-TEX (paren 5 set 5 mode ’paren) Si possono facilmente aggiungere e to(require ’ paren) gliere stampanti dal menu “Print” di /, B, !"!#8$DCFEGIH' ) + AUC-TEX. Occorre sapere qual è il comando per mandare in stampa un file su ‘AUC-TEX’ è un programma in Emacs- ogni stampante che volete installare; ci LISP che aggiunge a XEmacs e GNU- sono in genere due sole possibilità: Emacs un esteso supporto dei file TEX: controllo delle varie fasi di compilazio1. la stampante può stampare diretne/anteprima/stampa da menu, posizionatamente i file .dvi col comando mento automatico del cursore sul punto ‘dvips -Pnome’; che ha generato un errore, controllo orto2. la stampante può stampare i file .ps grafico e della sintassi LATEX, scorciatoie col comando ‘lpr -Pnome’. e menu per inserire comandi, ecc. 11 [includo le istruzioni di installazione?] [Cambio il carattere del listato con un \tt?] In entrambi i casi ‘nome’ è il nome della stampante. Aprite il file ‘~/.emacs’; cercate le righe: (se non ci sono, aggiungetele all’inizio del file!) ( setq TeX 5 printer 5 list ’( (" Default " "dvips 5 f %s|lpr" "lpq" ))) Ora, per ogni stampante bisogna aggiungere una riga tra queste due. Se la stampante stampa i file col metodo 1, aggiungete una riga ("nome" "dvips -Pnome %s" "lpq") altrimenti ci vuole ("nome" "dvips -f %s|lpr -Pnome" "lpq") Ad esempio, per aggiungere due stampanti, “karen” che stampa col metodo 1 e “monty” che usa il metodo 2, si metterà: ( setq TeX 5 printer 5 list ("karen" "dvips 5 P ("monty" "dvips 5 f (" Default " "dvips 5 ’( karen %s""lpq") %s|lpr 5 P monty""lpq") f %s|lpr" "lpq" ))) 12 Parte II Scrivere con LATEX 13 7J to in un file ‘nome.ps’ dal programma ‘dvips’, ed è pronto per la stampa. La prima trasformazione prende il nome di compilazione del file ‘.tex’: in questa fase, TEX dispone il testo sulle pagine, una alla volta, secondo il corpo, il carattere e la giustezza scelti dall’utente—un errore nei comandi LATEX interromperà il procedimento, o si rifletterà nella cattiva composizione del testo sulla pagina. La seconda trasformazione può richiedere molto più tempo, ma è completamente automatica e non ci saranno problemi se il software è installato correttamente; in questa fase vengono incorpo> $ B, LKM ?N rate eventuali immagini esterne, cambiati i colori e l’orientamento di porzioni di Accenniamo brevemente al funzionamentesto, ecc. to del sistema TEX: 1) con un qualunque > 0 $ editor di testi, si scrive un file ‘nome.tex’ B, /, ( O#* contenente il testo del documento ed i comandi LATEX; 2) il programma ‘tex’ pren- Aprite il vostro editor di fiducia e creade in ingresso il file ‘nome.tex’ e lo tra- te un file ‘prova1.tex’, in cui riporteresforma in un file ‘nome.dvi’ (questo è un te i contenuti del listato 2—ricordatevi di particolare formato che memorizza tutte salvare! Ora date il comando le informazioni necessarie per la resa tipografica di un documento, sia che questa latex prova1.tex sia fatta su una stampante o su un video); 3) il file ‘nome.dvi’ viene poi converti- Le scritte della figura 3.1 scorreranno raSia che siate arrivati qui freschi freschi con LATEX installato da un amico o che abbiate dovuto sudare per portare a termine una faticosa installazione, è tempo di cominciare: in questo capitolo scriveremo il primo file LATEX e cominceremo a familiarizzare con tutti i principali programmi del sistema. Raccogliamo gli strumenti di lavoro: serviranno certamente i programmi ‘latex’ e ‘xdvi’, ma prima servirà un editor di testi (uno qualsiasi) con cui abbiate quel po’ di confidenza necessaria per aprire un file, scriverci qualcosa dentro e salvarne i contenuti. 14 Figura 3.1: I messaggi che LATEX stampa a video durante la compilazione del file ‘prova1.tex’; una copia di questi messaggi si trova sempre nel file ‘prova1.log’. listingfig 2: Primo esempio: un classico in versione LATEX. 1 \documentclass[a4paper]{ article } 2 3 L’anteprima di stampa Per vedere l’anteprima di un documento, si usa il programma “XDvi”. Dopo aver compilato senza errori il file di esempio ‘prova1.tex’, nella directory troveremo un nuovo file ‘prova1.dvi’. Adesso lanciate il comando \ begin{document} 4 5 Ciao , mondo! 6 7 mente: questi file memorizzano le informazioni necessarie tra una esecuzione e l’altra. \end{document} pide sullo schermo. Se per caso LATEX si arrestasse per un errore, chiedendovi cosa fare, premete il tasto ‘X’ seguito da ‘Invio’, e controllate che ‘prova1.tex’ corrisponda al listato 2. Se gli errori persistono, consultare la sezione 4.7. LATEX potrebbe creare alcuni file ausiliari durante la compilazione del file: ‘prova1.aux’, ‘prova1.toc’, ecc.— non cancellateli finché non avrete finito di lavorare sul documento! Spesso LATEX ha bisogno di compilare più volte un documento per comporlo corretta- xdvi prova1.dvi e TEX ci metterà un po’ a preparare i font che servono, ma non vi preoccupate, restano memorizzati per vari giorni. (Questa è una caratteristica di teTEX: i font vengono creati al momento in cui servono, nella giusta dimensione e risoluzione.) Alla fine, comparirà una finestra simile a quella di figura 3.2. Se qualcosa non ha funzionato, la sezione 1.2.2 riporta alcuni suggerimenti per configurare XDvi. 15 Figura 3.2: Una finestra XDvi aperta sul file ‘prova1.dvi’. L’aspetto può cambiare a seconda delle impostazioni: probabilmente vedrete una finestra molto più alta e con i caratteri più piccoli. Dentro XDvi potrete muovervi con i tasti cursore, ‘PgSu’ e ‘PgGiù’ per andare alle pagine precedenti o successive, ‘<’ e ‘>’ per andare alla prima ed all’ultima pagina, ‘s’ per vedere la pagina intera, e infine ‘q’ vi farà uscire. Inoltre, tenendo premuto uno dei tre pulsanti del mouse sull’area dove viene visualizzato il file si può avere un ingrandimento; ogni pulsante attiva un ingrandimento diverso: sperimentate! Stampa su file Si può sempre forzare Dvips a scrivere in un file .ps invece di mandare direttamente un documento alla stampante: dvips nome.dvi -o nome.ps trasforma il file ‘nome.dvi’ nel file ‘nome.ps’ in formato P OST S CRIPT. Il file .ps si potrà stampare successivamente, col comando ‘lpr’, oppure trasferire su un altro computer per elaborazioni sucStampare cessive, o infine averne una anteprima a Per stampare si usa una combinazione dei [Che altro video col comando ‘gv’. comandi ‘dvips’ e ‘lpr’: provate a dare il c’è da dire comando: B, B, E !#8$DCFEGIH' ) + sulla stampa?] dvips prova1.dvi Questa sezione descrive i rudimenti delSe questo stampa, tutto bene :-). Altril’uso di AUC-TEX a chi usa XEmacs o menti, troverete un file ‘prova1.ps’ nelGNU-Emacs; se il vostro editor preferila directory, che si può stampare col to è un altro, potete senza dubbio saltarcomando: la. AUC-TEX permette di compiere tutlpr prova1.ps te le operazioni descritte prima per mez16 zo di un sistema di menu, senza uscire dall’editor Emacs. AUC-TEX abilita scorciatoie da tastiera per molti dei comandi che mette a disposizione di chi usa Emacs; queste sono sempre riportate alla destra della voce di menu corrispondente, seguendo la convenzione che ‘C-tasto’ indica di premere insieme i tasti ‘Control’ e ‘tasto’, e similmente ‘M-tasto’ richiede di premere ‘tasto’ simultaneamente al tasto ‘Alt’ (in alcune versioni di Linux bisogna invece premere il tasto ‘Windows’). Qui descriverò solo l’utilizzo di AUC-TEX dai menu, le scorciatoie si imparano col tempo cursore posizionato esattamente sulla riga che ha generato problemi! Anteprima Dopo aver compilato con successo un file, scegliete “View” dal menu “Command”, questo aprirà una finestra XDvi con l’anteprima del nostro file. Anche se, scorrendo il file, troverete delle cose da cambiare, non conviene chiudere la finestra: XDvi aggiorna automaticamente l’anteprima ogni volta che un file .tex viene ricompilato. Stampa Come si stampa un file con AUC-TEX? Basta scegliere “Print” dal menu “Com mand”: apparirà un elenco di stampanPer interrompere l’esecuzione di un ti (o forse solo una: “Default”) e basta comando di AUC-TEX basta premere scegliere quella da utilizzare. ‘Control+G’ (ovvero i tasti ‘Control’ e ‘G’ Stampa su file insieme). Si può anche stampare su file, ovvero tasformare il file .dvi in un file .ps: è quelCompilare lo che fa la voce “File”, sempre del menu Aprite il file ‘prova1.tex’ con Emacs; se “Command”. AUC-TEX ci presenterà una AUC-TEX è stato correttamente installalinea di comando per chiamare “DviPS”, to (cfr. la sezione 2.3), vedrete in ale noi potremo aggiungere opzioni, modito due nuovi menu: “Command” e “Laficare quelle già presenti, o infine semTeX”. Puntiamo il mouse sul primo, poi plicemente accettare il suggerimento di cerchiamo la voce “LaTeX”, come in fiAUC-T X premendo il tasto ‘ Invio ’. E gura 3.3. Immediatamente parte la compilazione del file, ma non vedremo i messaggi di TEX. A compilazione avvenuta, AUC-TEX ci avviserà con un breve messaggio in fondo alla finestra di Emacs. Se un errore nel documento interrompe la compilazione, AUC-TEX avviserà con un messaggio. Scegliamo allora la voce “Next Error” dal menu “LaTeX”: AUCTEX dividerà la finestra di Emacs in due parti: in una, mostrerà il messaggio di errore di LATEX, nell’altra, il nostro file col 17 Figura 3.3: Il menu di AUC-TEX che permette la compilazione di un file LATEX senza mouversi da Emacs. 18 7P In questo capitolo, esaminiamo da vicino la struttura di un file LATEX, e impariamo i comandi più semplici, ma già sufficienti per comporre il testo con vari stili e colori. Q R "# 3 " 3 RT ' ) + #, N 3?S0 $ ti principali, e la fine dei caratteri da leggere. Il corpo del documento contiene tutto il testo che viene reso effettivamente in stampa, ed è racchiuso tra i comandi \begin{document} e \end{document}. Il documento termina con \end{document}: nulla verrà più letto da TEX oltre questo punto. Il testo è scritto normalmente, cioè come con una comune macchina da scrivere. I paragrafi sono separati da una o più righe vuote; LATEX ignora ogni fineriga che non sia seguita da una riga vuota, ed accumula tutto il testo in un capoverso. Pure, non fa differenza la quantità di spazi tra una parola e l’altra: LATEX regola da sé la distanza tra le diverse parole, e giustifica il testo sui margini della pagina. In questo modo, si possono inserire tabulazioni e spazi in un file .tex per renderlo più leggibile (come si fa con il codice sorgente dei programmi), senza cambiare il risultato finale. Un file LATEX è un comune file di testo, dove vengono inserite opportune indicazioni (comandi) per controllare la composizione tipografica finale. Tutti questi comandi sono scritti con i normali caratteri ASCII (quelli di una tastiera americana, per intenderci). 1 Un file LATEX è diviso in due parti principali: il preambolo ed il corpo del documento. Per esempio, consideriamo il listato 2, che contiene il minimo file LATEX possibile: qualunque documento LATEX deve contenere i tre comandi ‘\documentclass’, ‘\begin{document}’ e ‘\end{document}’, perché segnalano a Il preambolo è costituito da tutto il maLATEX, rispettivamente, l’inizio del doteriale che si trova prima del comando cumento, la separazione tra le due par\begin{document}; per definizione, il pre1 I comandi LAT X fanno pesante uso delle parenE ambolo non può contenere testo da stamtesi graffe e quadre. Sulle tastiere italiane, Linux solitamente permette di ottenere le parentesi graffe pare, ma solo comandi LATEX che impostano la struttura globale del documento: premendo ‘AltGr’ insieme con le parentesi tonde. 19 ad esempio, istruzioni per cambiare le dimensioni della pagina, spostare i margini, o caricare Uestensioni LATEX per usi particolari. (Per chi conosce HTML, preambolo e corpo di un documento in LATEX corrispondono più o meno agli elementi ‘HEAD’ e ‘BODY’.) Q /, E G?3 <V,W$ $ > O Passiamo ad un esempio più complicato, il listato 3: copiatelo in un file ‘prova2. tex’. Prima di procedere con la lettura, scorretelo un attimo: quali comandi LATEXriuscite a trovare? quali sono nel preambolo? quali nel corpo del documento? Cominciare un documento con AUC-TEX Scriviamo il listato 3 con AUC-TEX. Apriamo un nuovo file, che chiameremo ‘prova2.tex’; poi, dal menu “LaTeX” scegliamo la voce “Insert Environment” e cerchiamo “document” nei sotto-menu. A questo punto, AUC-TEX chiederà la classe del documento: rispondiamo ‘article’; rispondiamo ‘a4paper’ alla successiva domanda sulla “opzioni del documento”. Ora, AUC-TEX ha creato la struttura minima di un file LATEX. Spostiamo ora il cursore tra le righe ‘\begin{document}’ e ‘\end{document}’; scegliamo la voce “Section” dal menu “LaTeX”, e poi “section” dal sotto-menu che appare: AUCTEX domanderà il titolo della sezione— rispondiamo ‘Premessa’—e poi un’etichetta per contrassegnare la sezione— rispondiamo ‘sec:premessa’. Premendo i tasti ‘Control+x’ e poi ‘u’, AUC-TEX annullerà l’ultima operazione eseguita, permettendoci di rimediare ad un errore. Da qui in poi, AUC-TEX ha finito il suo lavoro, ed il resto va aggiunto a mano, buon lavoro! Uno sguardo ravvicinato Esaminiamo il listato 3: i comandi LATEX cominciano tutti col simbolo ‘\’. Il corpo del documento è scritto liberamente, come in un normale file di testo; i due paragrafi sono separati da una riga vuota. Ogni riga che comincia con ‘%’ è un commento e come tale viene ignorato da LATEX. La riga ‘\section{Premessa}’ inizia una sezione intitolata appunto Premessa; il comando ‘\label’ serve a contrassegnare questa sezione per potervisi riferire in altre parti del documento. Il preambolo LATEX contiene tre comandi: \documentclass e \usepackage (usato due volte). \documentclass deve esse- \documentclass re sempre dichiarato nella prima riga utile del file (cioè le righe precedenti possono contenere solo commenti o spazi bianchi), perché specifica quale formato dovrà essere utilizzato da LATEX per l’impaginazione del documento. (Per chi conosce HTML, il suo scopo è affine alla dichiarazione ‘!DOCTYPE’.) La prima invocazione di \usepackage comunica a LATEX che il documento è in lingua italiana (in modo che scriva, ad esempio, “Capitolo” e non “Chapter” e, soprattutto, sappia sillabare correttamente le parole). La seconda chiamata a \usepackage permette a LATEX di interpretare correttamente le lettere accentate presenti sulla tastiera italiana. Tralasciamo per ora i dettagli su questi comandi; raccomando solo di usare queste due invocazioni di \usepackage in ogni documento che scriverete in Italiano—per l’Inglese sono 20 listingfig 3: L’inizio della Licenza Pubblica Generica GNU come file LATEX. (Stralcio della “GNU General Public License”, nella sua traduzione italiana realizzata da ILS e PLUTO, vedi http://www.linux.it/GNU/gpl.txt). Copiatelo in un file chiamato ‘prova2.tex’. 1 \documentclass[a4paper]{ article } 2 3 4 5 % Le due righe seguenti caricano estensioni di LaTeX \usepackage[ italian ]{babel} \usepackage[T1]{fontenc} 6 7 8 % qui finisce il preambolo LaTeX \ begin{document} 9 10 11 12 13 14 15 16 \ section {Premessa}\ label {sec :premessa} Le licenze per la maggioranza dei programmi hanno lo scopo di togliere all ’ utente la libertà di condividerlo e di modificarlo . Al contrario , la Licenza Pubblica Generica GNU è intesa a garantire la libertà di condividere e modificare il free software , al fine di assicurare che i programmi siano “ liberi ” per tutti i loro utenti . [...] Chiunque può usare questa Licenza per i propri programmi. 17 18 19 20 21 22 23 24 Quando si parla di “ free software ”, ci si riferisce alla libertà , non al prezzo . Le nostre Licenze ( la GPL e la LGPL) sono progettate per assicurarsi che ciascuno abbia la libertà di distribuire copie del free software (e farsi pagare per questo , se vuole ), che ciascuno riceva il codice sorgente o che lo possa ottenere se lo desidera , che ciascuno possa modificare il programma o usarne delle parti in nuovi programmi “ liberi ” e che ciascuno sappia di potere fare queste cose . 25 26 [...] 27 28 \end{document} 21 gli argomenti, se ce n’è più d’uno; tutte le seguenti forme danno lo stesso risultato (il simbolo indica uno spazio): entrambe inutili. Q B, C " > " N 3? @ > X ?N Vediamo da vicino com’è fatto un comando LATEX. La figura 4.1 riporta come esempio la prima riga del listato 3. Ogni comando comincia col carattere ‘\’, seguito da una o più lettere. Non sono ammessi caratteri non letterali nel nome di un comando: \interlinea_2 non è un nome ben formato, ma \InterlineaDoppia si. Con una eccezione: quando il nome di un comando è costituito da un solo simbolo, questo può essere qualunque carattere: per esempio, ‘$’, ‘ ’, ecc. LATEX distingue tra maiuscole e minuscole nei nomi di comandi: \large e \Large sono comandi diversi, che hanno effetti diversi. L’argomento di un comando è sempre del testo racchiuso tra parentesi graffe. Cosa accade a questo testo dipende, ovviamente, dal comando: \textcolor{red}{GNU}, \textcolor {red}{GNU}, \textcolor {red} {GNU}. Quando un argomento è costituito da un solo carattere, si possono omettere le parentesi graffe; ad esempio, si può scrivere ‘\textcircled c’ invece di ‘\textcircled{x}’. (Notate l’uso degli spazi: ‘\textcircledc’ sarebbe andato bene lo stesso? Perché?) Attenzione! Questa sintassi non dà modo a TEX di controllare che il numero di argomenti passati ad un comando sia quello giusto: quindi non avrete nessun errore sintattico se sbagliate il numero di argomenti, ma, se ne mettete di più, quelli residui verranno considerati come normale testo, se ne fornite di meno, quelli che mancano verrano presi dal testo che segue. Ad esempio, se nell’equazione ‘\frac 1 x = 2’ dimentichiamo ‘x’, LATEX metterà il segno ‘=’ al \documentclass{article} denominatore. comincia un documento di classe article Le opzioni sono sempre racchiuse fra (articolo), mentre parentesi quadre, e sono, come dice il nome, facoltative: selezionano varianti \textit{testo corsivo} nel comportamento di un comando. Per produce una scritta in carattere corsivo. esempio, Alcuni comandi accettano più di un ar\documentclass[a4paper]{article} gomento, ciascuno racchiuso dalle sue impagina un articolo per la stampa su carparentesi: ad esempio, ta di formato A4. I comandi che accettano \textcolor{red}{GNU} un solo argomento a volte accettano anscrive “GNU” in colore rosso (i dettagli che più di una opzione: in questo caso le separiamo con una virgola; per esempio, nella sezione ??). LATEX ignora eventuali spazi tra un co- \documentclass[a4paper,twocolumn] {article} mando ed il suo argomento, come pure tra 22 Figura 4.1: La struttura di un comando LATEX \documentclass [a4paper] {article} comando opzioni impagina l’articolo in formato A4 e su due colonne. (La sintassi delle opzioni è comunque molto variata: qui ho descritto il sistema più frequente, ma occorre poi vedere comando per comando; in ogni caso, però, le opzioni sono sempre racchiuse tra parentesi quadre.) Le opzioni sono chiamate argomenti facoltativi, perché il loro comportamento è in effetti del tutto simile a quello degli argomenti. Q Q 'YZ$ N 3 #* argomento Eventuali sottotitoli possono essere aggiunti separandoli con \\: \title{Licenza Pubblica Generica GNU \\ Versione 2} Anche il comando \author vuole un \author solo argomento, il nome dell’autore. Oltre al nome, si possono indicare altre informazioni come un recapito postale o l’indirizzo e-mail, basta separare le righe con \\: Cominciamo a lavorare un po’ sul docu- \author{Free Software Foundation, Inc. \\ mento di figura 3: come si fa ad aggiunge675 Mass Ave, \\ re un titolo, l’indicazione di chi ha scritto Cambridge, MA 02139, \\ la licenza e quando—un’intestazione inUSA} somma? LATEX divide questo compito in due parti: Si possono anche specificare più autori, basta separare le relative informazioni 1. dichiarazione di titolo, autore e dacon \and: ta con i comandi \title, \author e \date; 2. creazione della pagina del titolo con \maketitle. Ovviamente le tre dichiarazioni devono precedere la chiamata \maketitle. Tutti questi comandi vanno inseriti nel corpo del documento. Il comando \title accetta un solo argomento: il testo che comporrà il titolo del documento; per esempio, \and \author{Free Software Foundation, Inc. \\ 675 Mass Ave, \\ Cambridge, MA 02139, \\ USA \\ (originale inglese) \and Gruppo PLUTO e ILS \\ Casella Postale 400 \\ 17000 Savona \\ Italia \\ (traduzione italiana)} \title{Licenza Pubblica Generica GNU} Infine, \date specifica la data in cui 23 \date itle il documento è stato composto; in mancanza di questa istruzione, LATEX inserirà [ nella pagina del titolo la data del giorno in cui il file viene compilato. All’interno dell’argomento di \date, si può usare il comando \today per indicare la data odierna: \date{Scritto il 9/9/1999, ma compilato \today} Il comando \maketitle non prende argomenti e può essere posizionato dove si vuole all’interno del corpo del documento; \maketitle apre una nuova pagina per comporre l’intestazione, tutto quello che viene prima apparirà nelle facciate precedenti il titolo. Per prova, inserite \title, \author, \date e \maketitle nel listato 3, in modo da produrre un titolo come in figura 4.2. Q \,] !#*" N $:(@<!#,!"$:#%$ con la forma dichiarativa si possono evidenziare interi brani di testo, anche comprendenti più paragrafi, mentre la prima forma è limitata ad una porzione di paragrafo: LATEX darà errore se incontra una riga vuota (fine paragrafo) all’interno dell’argomento di \emph. Per prova, evidenziate Licenza Pubblica Generica GNU ogni volta che compare nel listato 3. LATEX permette molte altre varianti del carattere, e tutte ammettono le due forme sintattiche alternative: guardate la tabella 4.1 per un elenco completo. Osservate che i comandi che cambiano lo stile del carattere sono divisi in tre categorie: family, series e shape. I comandi appartenenti a categorie diverse combinano i loro effetti; nella stessa categoria, solo l’ultimo prevale. Così {\itshape Corsivo o \bfseries Corsivo grassetto} Il comando per evidenziare una porzio- produce una scritta in corsivo o corsivo ne di testo è \emph, che accetta un solo grassetto, mentre argomento: il testo da evidenziare. Ad {\itshape corsivo e esempio, \scshape maiuscoletto} \emph{Linux} vs. Linux scrive: corsivo e MAIUSCOLETTO. Un’ultima nota sull’enfatizzazione: i produce comandi \em e \emph, evidenziano, quindi il loro effetto non è di scegliere sempre un Linux vs. Linux carattere corsivo, ma di scegliere un caratEsiste anche un’altra forma di evi- tere che risalti (ma non troppo) rispetto a denziazione, che produce uguali effetti quello che lo circonda: cosicchè due \em tipografici, ma ha una sintassi differente: annidati ritornano al carattere dritto. I comandi di stile con AUC-TEX AUC-TEX ha un menu per semplificaQuesta seconda forma si chiama “dichia- re l’immissione dei comandi di stile in rativa”. La differenza sta in questo, che LATEX: cercate “Insert Font” nel menu {\em Licenza Pubblica Generica GNU} 24 Figura 4.2: La licenza pubblica generica GNU col suo bel titolo. \textrm{ \textsf{ \texttt{ \textmd{ \textbf{ \textup{ \textit{ \textsl{ \textsc{ } } } } } } } } } \emph{ } \textnormal{ } {\rmfamily } {\sffamily } {\ttfamily } {\mdseries } {\bfseries } {\upshape } {\itshape } {\slshape } {\scshape } Tondo o Roman Lineare o Sans Serif Typewriter Type {\em } {\normalfont } Medio Grassetto o Boldface Dritto o Upright Corsivo o Italic Inclinato o Slanted M AIUSCOLETTO o S MALL C APS Enfatizzato Il carattere normale del documento Tabella 4.1: Le varianti del carattere in LATEX. 25 si possono usare comandi per cambiare il colore del testo, analoghi a quelli che si usano per cambiare lo stile dei caratteri: {\em Evidenziare ^ {\em nell ’} evidenziazione } \textcolor{ b colore c }{ b testo c } {\color{ b colore c } b testo c } Evidenziare nell’evidenziazione Esempio 1: Doppie evidenziazioni “LaTeX” ed avrete un elenco completo di tutti i tipi di caratteri possibili in LATEX standard. Selezionando uno stile, AUC-TEX scriverà per voi il comando corrispondente. Per ogni voce del menu “Insert Font” è disponibile una scorciatoia da tastiera, per rendere più veloce l’immissione nel testo. I menu “Change Font” e “Delete Font” servono invece per cambiare lo stile di un blocco di testo già evidenziato, oppure per togliere ogni effetto e tornare al carattere normale. Per usarli, portate il cursore all’interno di un comando ‘\textqualcosa’ e selezionate la voce di menu che volete. Tutti questi comandi si possono applicare anche ad un’area di testo selezionata con il mouse: se evidenziate una regione di testo e poi scegliete una voce dal menu “Insert Font”, AUC-TEX metterà l’intera regione come argomento del corrispondente comando ‘\textqualcosa’. Q _ `#,!#%$a:$ \ textcolor {red} {Rosso di sera , bel tempo si spera} Rosso di sera, bel tempo si spera Esempio 2: Esempio di ‘\textcolor’ I nomi dei colori predefiniti sono elencati in figura 4.3; attenzione a rispettare le maiuscole e minuscole: ‘red’ e ‘Red’ sono in principio colori differenti! Colorare lo sfondo delle pagine Il comando ‘\pagecolor’ permette di \pagecolor cambiare il colore della pagina corrente e di tutte quelle seguenti, fino al successivo ‘\pagecolor’ oppure alla fine del documento. La sintassi è: \pagecolor{ b colore c } dove ‘ b colore c ’ è il nome di un colore, come nel comando ‘\textcolor’. Definire nuovi colori È possibile definire nuovi colori, con il comando ‘\definecolor’: \definecolor \definecolor{ b nome c }{ b spazio c } LATEX permette anche di colorare { b coordinate c } parti di testo: per usare il colore, inserite nel preambolo la riga dove ‘ b nome c ’ è il nome che vogliamo da‘\usepackage[usenames]{color}’. Così re al nuovo colore, per usarlo nei coman- 26 Figura 4.3: I colori disponibili con l’estensione ‘color’ e l’opzione‘usenames’. GreenYellow, Yellow, Goldenrod, Dandelion, Apricot, Peach, Melon, YellowOrange, Orange, BurntOrange, Bittersweet, RedOrange, Mahogany, Maroon, BrickRed, Red, OrangeRed, RubineRed, WildStrawberry, Salmon, CarnationPink, Magenta, VioletRed, Rhodamine, Mulberry, RedViolet, Fuchsia, Lavender, Thistle, Orchid, DarkOrchid, Purple, Plum, Violet, RoyalPurple, BlueViolet, Periwinkle, CadetBlue, CornflowerBlue, MidnightBlue, NavyBlue, RoyalBlue, Blue, Cerulean, Cyan, ProcessBlue, SkyBlue, Turquoise, TealBlue, Aquamarine, BlueGreen, Emerald, JungleGreen, SeaGreen, Green, ForestGreen, PineGreen, LimeGreen, YellowGreen, SpringGreen, OliveGreen, RawSienna, Sepia, Brown, Tan, Gray, Black, White di ‘\textcolor’, mentre b spazio c determina la forma delle b coordinate c nel modo seguente: rgb nello spazio ‘rgb’ le coordinate sono tre numeri decimali compresi tra 0 e 1, separati da virgole, che individuano le componenti del colore in termini di rosso, verde e blu (nell’ordine): ad esempio, \definecolor{lavanda} {cmyk}{0,0.48,0,0} Attenzione! Il programma TEX non è stato pensato per gestire la stampa a colori. L’uso dei colori è un’aggiunta esterna ed il suo trattamento ricade essenzialmente sul programma di conversione per la stampa; questo ha due conseguenze importanti: d \definecolor{grigio} {rgb}{0.5,0.5,0.5} d XDvi in genere non mostra i colori; sistemi di stampa diversi da DviPS richiedono opzioni appropriate per l’estensione ‘color’, e possono cambiare i nomi ed il numero dei colori disponibili. gray nello spazio ‘gray’ l’unica coordinata è un numero decimale compreso tra 0 e 1: 0 corrisponde al bianco, 1 al nero, e i numeri di mezzo variano tra le tonalità di grigio: ad Consultate il manuale “Packages in esempio, the ‘graphics’ bundle” [vedi /usr/doc/ texmf/latex/graphics/grfguide.ps], \definecolor{grigio} per un elenco completo delle opzioni e {gray}{0.5} dei possibili malfunzionamenti. cmyk nello spazio ‘cmyk’ le coordi- Q fe" O#* > ($(##8#* nate sono quattro numeri decimali compresi tra 0 e 1 che indivi- Gli errori, si sa, capitano; ma con LATEX duano le componenti del colore in capitano più spesso. Se state leggendo quadricromia: ad esempio, questa sezione perché siete incorsi in un 27 errore, consolatevi guardando quanti altri avete evitato :-) Quando LATEX incontra un errore, mostra un messaggio come quello di figura 4.4. Vediamo da vicino com’è fatto: la riga 1 riporta il messaggio d’errore vero e proprio; le righe 7–8 riportano la linea del file dove LATEX ha incontrato l’errore, spezzata proprio nel punto dove l’errore è occorso: la riga 7 contiene i caratteri letti prima dell’errore, la riga 8 contiene quelli ancora da leggere; infine il carattere ‘?’, segnala l’attesa di un comando da parte dell’utente. A questo punto ci sono poche scelte: si può rispondere ‘X’ per uscire da LATEX, ‘H’ per avere un breve messaggio di aiuto relativo all’errore appena prodotto, ‘Invio’ per chiedere a LATEX di ignorare l’errore e procedere oppure ‘S’ per proseguire ed evitare di fermarsi agli errori successivi, infine ‘?’ vi ricorderà tutte queste scelte. Il resto di questa sezione riporta un piccolo elenco, in ordine alfabetico, dei messaggi d’errore che più facilmente avreste potuto ottenere a questo punto. in cerca della parentesi errata. (Consiglio a chi usa Emacs di tenere sempre attivo ‘paren-mode’, cfr. 2.2.) “File ‘nome’ not found.” LATEX cerca i file, prima, nella directory che contiene il documento che sta compilando, poi, nelle sotto-directory di ‘/usr/lib/texmf/ tex/’—per far trovare cose in altre locazioni, occorre specificare il percorso completo. Se non avete mai visto un file col nome indicato da LATEX, è probabile che sia uno dei file interni: molti comandi assumono implicitamente che il proprio argomento sia il nome di un file, per esempio ‘\usepackage{babel}’ cerca il file ‘babel.sty’. Ecco un rapido ed incompleto elenco dei tipi di file cercati dai vari comandi: .bib : ‘\bibliography{math}’ vuole il file ‘math.bib’; .bst : ‘\bibliographystyle{plain}’ vuole il file ‘plain.bst’; .cls : ‘\documentclass{article}’ vuole il file ‘article.cls’; “(Please type a command or say ‘\end’)” Manca ‘\end{document}’ alla .sty : ‘\usepackage{babel}’ vuole il file fine del file. ‘babel.sty’; “Argument of \comando has an extra }.” Questo strano errore viene fuori quando un argomento opzionale viene chiuso scorrettamente con ‘}’ e non con ‘]’: LATEX continua a cercare fino alla fine del paragrafo. Il nome comando è spesso un comando interno di LATEX, e non ha alcuna rassomiglianza col comando che veramente ha causato l’errore: bisogna guardare la riga dove è occorso l’errore, e scorrere l’intero paragrafo .tex : ‘\include{cap1}’ vuole il file ‘cap1.tex’; “Missing \begin{document} .” Non può esserci testo a stampa nel preambolo del documento, cioè prima di ‘\begin{document}’. Saltare un ‘\’ in un comando nel preambolo del documento (per esempio ‘usepackage’ invece di ‘\usepackage’) è la causa più frequente di questo errore. 28 1 Figura 4.4: Un tipico messaggio di errore LATEX. ! LaTeX Error: \usepackage before \documentclass. 2 3 4 5 See the LaTeX manual or LaTeX Companion for explanation. Type H <return> for immediate help. ... 6 7 8 9 l.4 \usepackage[italian]{ babel} ? “Runaway argument?” Mancano le si può continuare la compilazione senza parentesi graffe a chiudere l’argomento di eccessivi danni. Le cause più comuni: un comando. Questo messaggio si acd Scambio di maiuscole/minuscole: compagna sempre ad uno più specifico, TEX distingue le lettere maiuscocome: “File ended while scanning use of le da quelle minuscole nei nomi \comando.” oppure “Paragraph ended bedi comandi: ‘\documentclass’ e fore \comando was complete.”; purtrop‘ \Documentclass ’ sono due comandi po, ‘\comando’ di solito è il nome di un diversi, ed il secondo non esiste. A comando interno di LTEX. Prendete nod ta della riga dove è avvenuto l’errore e Il nome del comando è errato: alzi la esaminate tutto il paragrafo alla ricerca mano chi non ha mai scritto ‘\textt’ della parentesi graffa perduta. (Chi usa invece di ‘\texttt’! AUC-TEX prema ‘Control+c’ seguito da d Manca ‘\documentclass’: se ‘‘’.) ‘\documentclass’ non è all’inizio “Too many }’s.” Il bilanciamento deldel documento, il primo comando le parentesi è sbagliato: avete chiuso più produrrà questo errore; anche uno gruppi di quanti ne abbiate aperti, oppure spazio tra ‘\’ e ‘documentclass’ ne avete aperti troppi. Spesso capita che causerà questo errore (‘\ ’ è un il punto in cui TEX si accorge dell’errocomando!). re sia più avanti del punto in cui effettivamente manca una parentesi. In questi casi, ‘paren-mode’ di Emacs può essere di aiuto (cfr. 2.2). “Undefined control sequence.” TEX ha incontrato un comando sconosciuto. Questo è un errore disastroso nel preambolo, ma nel corpo del documento spesso 29 g In questo capitolo vediamo meglio come scrivere il testo ordinario in LATEX, e dargli la prima struttura: una divisione in capitoli, sezioni, ecc. \, ($ "h`# N #* Il testo ordinario è la cosa più naturale da scrivere con TEX: si scrivono i paragrafi come in un comune file ASCII. LATEX osserva le seguenti regole quando compone un capoverso. 1. LATEX ignora il numero degli spazi tra una parola e l’altra, e regola automaticamente la distanza quando compone la pagina. I caratteri di fine-riga e di tabulazione vengono considerati come spazi. 2. Un paragrafo è terminato da una o più righe vuote, oppure dal comando ‘\par’. 3. LATEX rientra un poco la prima riga di ogni nuovo capoverso, tranne quando il capoverso segue un titolo. 4. Tutti i caratteri possono apparire nel testo, eccetto quelli elencati nella tabella 5.1, che hanno un significato speciale per TEX. Si usa un comando per produrre il simbolo corrispondente ai caratteri speciali. Facciamo una precisazione a quanto detto poco sopra: TEX ignora ogni carattere bianco (spazio, carattere di fine-riga o di tabulazione) che segue un comando, in particolare LATEX ignorerà ogni spazio dopo comandi che producono simboli (come quelli della tabella 5.1). Una maniera di mettere uno spazio dopo un comando senza argomenti è di farlo seguire dal comando ‘\ ’ (barra inversa+spazio), per esempio: ‘\LaTeX\ ’: ‘\ ’ inserisce forzosamente uno spazio nella riga. LATEX rientra un poco la prima riga di ogni capoverso che non segue un titolo (di capitolo, di sezione, ecc.). Occasionalmente, può essere necessario eliminare questo rientro: in tal caso, basta cominciare il paragrafo col comando ‘\noindent’ (senza farlo seguire da ‘\ ’). \noindent Per forzare il rientro, invece, si usa il comando ‘\indent’. \indent Il carattere ‘%’ si usa per introdurre un commento: TEX ignora il resto della riga. Il carattere ‘~’ si usa per produrre uno spazio che “lega” due parole: TEX non spezzerà mai una riga di testo in corrispondenza di ‘~’. 30 ote Accenti Se inserite la riga ‘\usepackage[latin1]inputenc’ nel preambolo del documento, non dovrete preoccuparvi delle lettere accentate: LATEX riconoscerà tutti i caratteri che sono su una tastiera italiana. Tuttavia, può capitare di dover ricorrere ad altri accenti (magari per scrivere nomi non italiani). La tabella 5.2 riporta i comandi che si possono usare per queste evenienze. Questi comandi permettono di scrivere lettere accentate anche in un file di testo contenente solo i caratteri ASCII, o avendo a disposizione una tastiera americana. Tutti i comandi che producono accenti sono implementati in modo da sovrapporre un segno all’argomento: un po’ come se in una macchina da scrivere battessimo un apostrofo, poi tornassimo indietro e scrivessimo una ‘a’ per ottenere ‘á’. Se XDvi si lamenta che “overstrike characters may look incorrect”, aggiungete la riga ‘XDvi*thorough: true’ al file ‘/etc/X11/Xresources’. Notate che si possono omettere le parentesi graffe quando l’argomento di un comando è costituito di una sola lettera: possiamo scrivere \’e invece di \’{e}: i due modi sono del tutto equivalenti. automaticamente le note, e ricomincia a contare da ‘1’ con ogni nuovo capitolo. Don’t use footnotes in your books, Don.\ footnote { Jill Knuth, citazione in “ The {\TeX}book ”, pag.~125} Don’t use footnotes in your books, Don.a a Jill Knuth, citazione in “The T Xbook”, E pag. 125 Esempio 3: Esempio di ‘\footnote’ Quando si usano parecchie note a pié di pagina, è meglio caricare l’estensione ‘footmisc’, che estende il supporto di LATEX per le note a pié di pagina e lo irrobustisce: inserite nel preambolo del documento la riga \usepackage[ b opzioni c ]{footmisc} dove le b opzioni c sono scelte dalla lista seguente e separate da una virgola: multiple da usare quando si ha necessità di apporre più note alla stessa parola o frase; para compone le note di una pagina tutte in un solo capoverso, nello stile che \, /,R $ $W!($ " è comune nelle edizioni critiche—da usare quando occorre inserire nella Per inserire note a pié di pagina, si usa il stessa pagina un gran numero di note comando ‘\footnote’, che prende un solo piuttosto brevi; argomento: il testo della nota. Questo comando deve seguire la frase a cui si rife- perpage ricomincia a numerare le note risce la nota, senza alcuno spazio tra l’ulda ‘1’ con ogni nuova pagina, invece tima parola e ‘\footnote’. LATEX numera che con ogni nuovo capitolo; 31 footmisc stable permette di mettere note a pié di pagina anche nei titoli; [È giusto il apre una sezione intitolata “Nubi di ieri ”. Attenzione! Nella classe di titolo? Elio e documento ‘article’ manca la divisione le Storie Per le altre opzioni e possibilità offerte ‘\chapter’. tese, etc.]alla dall’estensione footmisc, vi rimando relativa documentazione.[vedi /usr/doc/ Profondità di numerazione delle sezioni texmf/latex/footmisc/footmisc.dvi] Normalmente, le sotto-sezioni sono nuNote al margine merate e le sotto-sotto-sezioni no, ma, ocÈ possibile mettere anche note al margine casionalmente, occorre numerare anche le del testo, con il comando suddivisioni più fini; il comando \marginpar{ b testo c } \setcounter{secnumdepth}{b livello c } Le note appariranno sul margine esterno; specificando un argomento facoltativo a ‘\marginpar’, è possibile posizionare una nota sul margine interno: \marginpar[ b interno c ]{ b esterno c } nel preambolo del documento istruisce LATEX a numerare le divisioni del testo fino alla profondità ‘ b livello c ’ (inclusa): un livello di 6 indica ‘\subparagraph’, mentre -1 identifica ‘\part’ (tranne che nella classe ‘article’ dove è 0). il testo ‘ b interno c ’ finirà, appunto, sul margine interno, mentre ‘ b esterno c ’ sul- Appendici l’altro margine. Il comando ‘\appendix’comincia le ap- \appendix > $ \, B,i V( N $:#8$& N @ 3 7 pendici: dopo questo comando, ogni istruzione ‘\chapter’inizierà una divi $:;X sione intitolata “Appendice” e non più A LTEX definisce 7 comandi per dividere “Capitolo”. il testo in capitoli, sezioni, paragrafi, ecc.; dal più “esterno” al più “interno” Personalizzare l’aspetto dei titoli sono: ‘\part’, ‘\chapter’, ‘\section’, L’estensione ‘titlesec [vedi http: titlesec er ‘\subsection’, ‘\subsubsection’, //www.ctan.org/macros/latex/contrib/ permette di ‘\paragraph’, ‘\subparagraph’. Tutti supported/titlesec]’ on ction questi comandi hanno la stessa sintassi: personalizzare l’aspetto dei titoli, per bsection accettano un solo argomento, il titolo, soddisfare le più diverse necessità. raph e devono comparire all’inizio della Tuttavia l’autore avverte che titlesec è ragraphdivisione di testo che individuano. Per un pacchetto “per il professionista della tipografia che sa bene cosa vuole fare, esempio, più che per l’utente occasionale di LATEX, \section{Nubi di ieri sul nostro che è grossomodo soddisfatto delle classi domani odierno} standard.” Uomo avvisato 32 er* on* \, Q R:j 1N @k$ >l> !#* apre una sezione intitolata “Grunt grunt Uno dei grossi vantaggi di LATEX è che ge- grunt” (argomento) ma nel sommario nera automaticamente l’indice sommario. questo titolo sarà riportato come “Grunt, ecc.” Per inserire l’indice sommario nel > $ documento, si usa il comando: \, \,m Kn$(#* ( @k#8@k"! \tableofcontents che verrà sostituito da una o più pagine. Normalmente, vengono riportate nell’indice solo i titoli del testo fino alla profondità di sotto-sezione; se occasionalmente si desidera un indice più (o meno) dettagliato, si può mettere nel preambolo il comando: \setcounter{tocdepth}{b livello c } dove ‘ b livello c ’ ha gli stessi valori che in ‘secnumdepth’ (vedi la sezione 5.3.1). Talvolta si vuole che una sezione non sia numerata ma non appaia nell’indice sommario: esistono varianti dei comandi di divisione del testo che assolvono questo compito: basta appendere un ‘*’ al nome del comando di titolazione: ‘\chapter*’, ‘\section*’, ecc. La sintassi rimane la stessa. Infine, a volte capita che un titolo sia troppo lungo per una riga dell’indice; i comandi di sezionamento hanno quindi una sintassi alternativa per gestire questi casi: LATEX può generare automaticamente riferimenti ai numeri di sezioni, capitoli, ecc. oppure alle rispettive pagine. Per ottenere questo effetto, bisogna marcare una sezione (o capitolo, o paragrafo, ecc.) col comando ‘\label’. Questo comando vuole \label un solo argomento, un’etichetta composta di soli caratteri ASCII (niente lettere accentate!) con cui identificare la divisione nei riferimenti: \section{Riferimenti incrociati} \label{sec:text/ref} Con il comando ‘\ref’ ci si può riferire \ref ad una sezione marcata in qualunque altra parte del documento; questo comando accetta un solo argomento, l’etichetta identificativa della sezione, e viene sostituito da LATEX col numero di sezione (quello che accompagna il titolo). Esiste anche un comando ‘\pageref’, con la stessa sin- \pageref tassi di ‘\ref’, che invece viene sostituito da LATEX con il numero di pagina del corrispondente comando ‘\label’. \section[ b titolo-per-sommario c ] { b titolo c } Vedi la sezione ~\ ref {sec : text / ref }, a pagina~\ pageref{sec : text / ref }. Per esempio: Vedi la sezione 5.5, a pagina 33. \section[Grunt, ecc.]{Grunt grunt bla scrunf burp burp bla blo dribble dribble roll roll grunt} Esempio 4: Esempio di ‘\ref’ e ‘\pageref’ 33 bels Attenzione! Per inserire i riferimenti corretti, LATEX ha bisogno di compilao il file. Se alla fine della sere due volte conda compilazione vedrete il messaggio “there were unresolved references”, può darsi che qualche etichetta usata in \ref non abbia una corrispondente \label. In questi casi può essere utile ricompilare il file caricando l’estensione ‘showlabels’ (‘\usepackage{showlabels}’ nel preambolo) che mostra sul margine del foglio tutte le etichette definite nel documento, proprio nel punto in cui sono definite da un comando \label. L’estensione ‘varioref’ L’estensione ‘varioref’ definisce un comando ‘\vref’, con la stessa sintassi di ‘\ref’, che inserisce automaticamente dopo il riferimento al numero di sezione anche un rimando alla pagina del documento in cui appare. Il vantaggio di ‘\vref’ sull’uso combinato di ‘\ref’ e ‘\pageref’ sta nel fatto che ‘\vref’ ometterà ogni riferimento al numero di pagina se la destinazione è sulla facciata corrente, oppure inserirà una coda come “a fronte” se il bersaglio del riferimento si trova sulla facciata opposta. \,_ C#*($:## `#* Ecco una carrellata sugli errori che potrebbero venire dai nuovi comandi descritti in questo capitolo. Ovviamente, potrebbe capitarvi anche uno degli errori descritti nel capitolo precedente; sappiate essere sportivi :-). Andate alla sezione \ vref {sec :env/quote }, direttamente e senza passare dal via , poi rileggete la sezione \ vref {sec : text / ref } Andate alla sezione 6.2 a pagina 38, direttamente e senza passare dal via, poi rileggete la sezione 5.5 nella pagina precedente Esempio 5: Esempio di ‘\vref’ (vedi la descrizione di questo stesso errore in sezione 4.7), oppure volevate scrivere ‘\}’ ma avete saltato ‘\’. Questo errore occorre anche se cercate di mettere un comando ‘\footnote’ nel titolo di una sezione, senza aver caricato l’estensione ‘footmisc’ con l’opzione ‘stable’. “Command unavailable in encoding OT1.” Manca la riga ‘\usepackage{T1}{fontenc}’ nel preambolo del documento: state cercando di inserire un carattere che non esiste nel font corrente. “Misplaced alignment tab character &.” Può essere causato dal carattere riservato ‘&’: per introdurre “&” nel testo, si deve usare ‘\&’: vedi tabella 5.1. “Missing \endcsname inserted.” Può essere causato da un carattere “proibito” all’interno dell’argomento di \label, “Argument of has an extra }.” Un \ref, \pageref, ecc. I caratteri proibiti argomento opzionale è stato chiuso con variano a seconda delle estensioni caricauna parentesi graffa invece che quadra te: è bene in genere limitarsi alle lettere 34 (non accentate!), i simboli ‘+’ e ‘-’, ed i segni di interpunzione. “Missing $ inserted.” Può essere causato dai caratteri riservati ‘ˆ’, ‘_’ o ‘$’: per introdurre uno di questi nel testo, si devono usare ‘\^’, ‘\_’ o ‘\$’ (vedi tabella 5.1). “Missing number, treated as zero.” Manca il secondo argomento di un comando ‘\setcounter’, oppure non è un numero. “Paragraph ended before was complete.” Manca la parentesi (graffa o quadra) di chiusura dell’argomento di qualche comando. Oppure, manca del tutto un argomento obbligatorio ed il comando appare in fine di paragrafo. “Too many }’s.” C’è una parentesi graffa di troppo (vedi la descrizione di questo stesso errore in sezione 4.7), oppure volevate scrivere ‘\}’ ma avete saltato ‘\’. “Too many unprocessed floats.” Troppi comandi ‘\marginpar’ all’interno dello stesso paragrafo (in genere il limite è 7). 35 # $ & _ § \# \$ \& \_ \S { % < ^ ¡ \{ \% \textless \textasciicircum \textexclamdown } \ > ~ ¿ \} \textbackslash \textgreater \textasciitilde \textquestiondown Tabella 5.1: I caratteri speciali in LATEX, ed i comandi per produrne i simboli nel testo. \‘o \v{o} \.o {\i} ò ǒ ȯ ı \’o \H{o} \b{o} ó ő o ¯ \=o \"o \t{oo} ō ö oo p \^o \d{o} \c{c} ô o. ç \u{o} \~o \r{o} ŏ õ o̊ Tabella 5.2: I comandi che producono accenti in LATEX. Si può mettere ogni tipo di accento sopra ogni lettera. La ‘ı’ si usa in combinazione con i comandi di accento per produrre ‘i’ correttamente accentate. 36 7q LATEX può comporre automaticamente [...] una frase di Groucho Marx, i testi impaginando le varie porzioni se- \begin{quote} All’infuori del cane, il libro è condo le convenzioni tipografiche opporil miglior amico dell’uomo; dentro tune: se, ad esempio, ora volessi inserire il cane è troppo buio per leggere. 1 una frase di Groucho Marx — All’infuori del cane, il libro è il miglior amico dell’uomo; dentro il cane è troppo buio per leggere. \end{quote} mi basterebbe indicare a \LaTeX\ che questa frase costituisce, appunto, una citazione [...] L’esempio qui sopra mostra la forma più generale di queste indicazioni: — mi basterebbe indicare a LATEX che questa frase costituisce, appunto, una ci- \begin{ b tipo c } testo \end{ b tipo c } tazione, per far sì che LATEX la impagini Questi blocchi \begin{} \end{} si in un paragrafo a sé stante e con i margini chiamano ambienti (in inglese environrientrati. ments) nel gergo di LATEX. Gli ambienti Poiché LATEX non può capire il contesono usati in LATEX per modificare temponuto di un testo né discernere le varie parti raneamente le convenzioni tipografiche, e e la loro rilevanza, sta all’autore istruirlo per contrassegnare ogni porzione del file con appositi comandi, che indicano quache non sia composta da testo ordinario. le sia il ruolo logico delle porzioni di teTra gli utilizzi tipici degli ambienti delsto, oppure se alcune parti debbano rila prima famiglia rientrano, ad esempio: cevere un trattamento tipografico particousare un carattere più piccolo per evidenlare (una tabella, una figura, ecc.). Per ziare che un paragrafo può essere omesso esempio, la citazione precedente è stata in prima lettura, centrare un gruppo di riprodotta così: ghe anziché giustificarlo ai margini, ecc. 1 Questa e le altre battute di Groucho Marx soNella seconda classe di ambienti rientrano tratte dal libro “Se mi sposi, non guarderò mai no, per esempio, citazioni lunghe, enunpiù un altro cavallo”, curato da Marco Spagnoli per le edizioni Stampa Alternativa (http://www. ciati di teoremi, gruppi di versi, tabelle, stampalternativa.it). listati di un programma, ecc. 37 ion >lr $ _ $:#*#8$W "(@k CFEGIH' ) + AUC-TEX ha un menu per semplificare l’immissione di ambienti in un file LATEX: cercate “Insert Environment” nel menu “LaTeX” ed avrete un elenco di circa 70 ambienti possibili in LATEX: selezionatene uno, e AUC-TEX scriverà per voi la corrispondente coppia di istruzioni. Al posto del menu, è possibile usare una scorciatoia da tastiera; attivandola, AUC-TEX chiederà il nome di un ambiente da inserire: così è possibile immettere anche ambienti non elencati nel menu. Il menu “Change Environment” permette di cambiare l’ambiente che racchiude la porzione di testo su cui insiste il cursore; si usa allo stesso modo che “Insert Environment”. Tutti questi comandi si possono applicare anche ad un’area di testo selezionata con il mouse: se evidenziate una regione di testo e poi scegliete una voce dal menu “Insert Environment”, AUC-TEX racchiuderà l’intera regione nell’ambiente selezionato. tazioni. La differenza tra i due è solo estetica: ‘quotation’ rientra la prima riga della citazione, mentre ‘quote’ no. Il primo dei due è più adatto per riportare lunghi brani di testo; il secondo si usa meglio per citazioni più brevi. Per rendervi conto della differenza, provate a sostituire ‘quote’ con ‘quotation’ nell’esempio fatto prima; provate anche a cambiare la citazione con una più lunga. Cosa succede se si cerca di inserire più paragrafi all’interno di un ambiente ‘quotation’, cioè se si inserisce una riga vuota? (Guardate la figura 6 per la soluzione.) _ B,] $(# Inserire una strofa in versi in un documento LATEX richiede ancora un ambiente testuale, ma, a differenza di quanto accadeva con le citazioni, la divisione in versi ci richiede di adottare convenzioni leggermente differenti per l’inserimento del testo. LATEX definisce un ambiente ‘verse’ verse per inserire parti in poesia. Guardiamo l’esempio 7: i versi si separano con \\ e le strofe con una o più righe vuote. Perché i _ /, s !;X due versi di mezzo hanno l’ultima parola a capo, un poco rientrata? Cosa succede Le citazioni forniscono il più semplice mettendo lo stesso esempio da solo in una esempio di ambiente testuale: un para- pagina? grafo interamente citato da un’altra fonte deve risaltare tipograficamente (quindi _ Q ) KMKM$:"," O 2 #, 0 @k occorre richiedere a LATEX un trattamento speciale), ma continua ad essere costitui- Gli ambienti tipografici si possono usato da testo ordinario (quindi non devono re anche per forzare LATEX a comporre il valere convenzioni speciali come per le testo in una particolare maniera: i priformule, dove gli spazi vengono ignorati). mi esempi sono gli ambienti che cambiaLATEX mette a disposizione gli ambien- no l’allineamento del testo e quelli che ti ‘quotation’ e ‘quote’ per indicare ci- modificano la dimensione dei caratteri. 38 Ancora Groucho Marx: Ancora Groucho Marx: \ begin{ quotation } Non sono contrario ad adottare l ’usanza giapponese di dormire sul pavimento . [\ dots ] Qui se un uomo alza il gomito finisce a dormire sul pavimento , magari sotto il tavolo . Non sono contrario ad adottare l’usanza giapponese di dormire sul pavimento. [ ] Qui se un uomo alza il gomito finisce a dormire sul pavimento, magari sotto il tavolo. In Giappone, invece, sarebbe già a letto. In Giappone, invece , sarebbe già a letto . \end{quotation} Esempio 6: Una citazione lunga più paragrafi. Il limite a cui tendeva Veloce successione, La semplice espressione Del seno e del cosen. \ begin{verse} Il limite a cui tendeva \\ Veloce successione , \\ La semplice espressione \\ Del seno e del cosen. La tesi del teorema Dimostrò tutta or ora Se una funzion maggiora Nel senso di Lebesgue. La tesi del teorema \\ Dimostrò tutta or ora \\ Se una funzion maggiora \\ Nel senso di Lebesgue. \end{verse} Esempio 7: Due stanze scritte utilizzando l’ambiente ‘verse’. (Frammento attribuito ad anonimo di scuola barbecuista, ricopiato in LATEX. Per maggiori informazioni su Nicolas Barbecue e la sua scuola, vedi http://www.mat.uniroma1.it/~mascia/bbq.html.) 39 eft ight Allineare il testo LATEX definisce tre ambienti che modifi[ cano l’allineamento del testo ai margini: ‘flushleft’, ‘flushright’ e ‘center’. I primi due allineano il testo al margine sinistro e a quello destro, rispettivamente, mentre l’ultimo centra ogni riga. Le righe all’interno di uno di questi ambienti possono essere separate col comando \\. In mancanza di questa indicazione esplicita, LATEX spezzerà una riga quando questa è troppo larga per stare entro i margini della pagina, ma eviterà di allargare lo spazio tra le parole per giustificare il testo: provate gli esempi delle figure 8 e 6.1, e confrontateli. Cosa succede se si inserisce un paragrafo flushright dentro un ambiente quotation? Figura 6.1: Paragrafi di testo sbandierato. Il testo di ogni paragrafo è scritto senza indicare esplicitamente le interruzioni tra una riga e l’altra. \begin{flushleft} Per quanto ne so io, non c’è una parola di vero in quello che ho scritto, ma mi sento abbastanza al sicuro. [ ] nessuno avrà il tempo di controllare la veridicità di qualsiasi affermazione. (Groucho Marx) \end{flushleft} Ridimensionare il carattere Ci sono dieci dimensioni del caratte- \begin{center} re sempre disponibili in LATEX; dal- La mia punteggiatura non va mai oltre la virgola ed il punto. Le cose più la più piccola alla più grande, sono: complicate mi fanno venire le vertigini. tiny, scriptsize, footnotesize, small, (Groucho Marx) normalsize, large, Large, LARGE, huge, \end{center} Huge. Per ciascuna di queste esiste un ambiente che compone il testo in quel cor- \begin{flushright} Non pretendo che comprendiate il po (vedi figura 6.2). È possibile usare i significato di quello che ho scritto senza comandi di ridimensionamento in forma averlo riletto un certo numero di volte. [ dichiarativa: ad esempio, si può scrivere ] Io l’ho letto sei volte ed ancora non {\small b testo c } l’ho capito. (Groucho Marx) \end{flushright} invece di \begin{small} b testo c \end{small} I due modi hanno gli stessi effetti. Le dimensioni del carattere sono relative a normalsize: le opzioni 10pt, 11pt, 12pt di \documentclass impostano la grandezza di normalsize, e tutte le altre dimensioni sono calcolate a partire da 40 Figura 6.2: Le varie dimensioni del carattere disponibili in LATEX. \begin{tiny} \begin{scriptsize} \begin{footnotesize} LATEX LATEX LATEX \end{tiny} \begin{small} LATEX \end{small} \end{scriptsize} \begin{normalsize} LATEX \end{footnotesize} \begin{large} LATEX \end{normalsize} \begin{LARGE} \end{large} \begin{huge} \begin{Large} LATEX \end{Large} LATEX LATEX \end{LARGE} \end{huge} \begin{Huge} \begin{...} \LaTeX \end{...} LATEX \end{Huge} queste. È molto complicato convincere LATEX ad usare per un paragrafo un carattere in corpo 18 (ad esempio!). Fissare la dimensione del carattere usato in un brano di testo rende difficile cambiare poi il formato della pagina o altri parametri tipografici; siccome LATEX mira a svincolare quanto più possibile un documento dai particolari formati di pagina, caratteri, ecc., rende complesso controllare questi parametri uno alla volta. Cambiare lo stile del testo Tutti i comandi che abbiamo già visto per cambiare lo stile del testo, come \bfseries o \itshape o \ttfamily, hanno un corrispondente ambiente; perciò possiamo scrivere: si possono annidare questi ambienti di stile uno dentro l’altro, e gli effetti si sovrappongono secondo quanto già spiegato nel capitolo 4. _ \,R "$t8$:$ @kus,$ N $ 13 > $(#,;X LATEX permette di introdurre nel testo liste, elenchi ed enumerazioni tramite gli ambienti ‘itemize’, ‘description’ e ‘enumerate’. Elenchi puntati L’ambiente itemize racchiude un elenco itemize puntato: si marca l’inizio dei singoli elementi della lista col comando \item. Un argomento opzionale (cioè racchiuso tra parentesi quadre ‘[’ e ‘]’) ad un comando \begin{itshape} \item permette di mettere del testo al poQuesto testo è in corsivo. sto del puntino di elenco. Gli elenchi pos\end{itshape} sono essere annidati uno dentro l’altro, fial posto di no ad una profondità massima di quattro. ‘{\itshape Questo testo è in corsivo.}’LATEX userà per ogni elenco un contrassee con lo stesso risultato. Ovviamente gno diverso (per il più esterno un puntino, 41 Le serie del calcio: Le serie del calcio : \ begin{itemize} \item A; \item B; \item[x ] poi : \begin{itemize} \item C 1; \ item C2; \end{itemize} \item ecc . \end{itemize} d d A; B; x poi: – C1; – C2; d ecc. Esempio 10: Un elenco puntato poi una lineetta, ecc.) Cosa succede se si essere numerate le voci dell’elenco. Più mettono più paragrafi di testo fra un \item precisamente: ed un altro? \begin{enumerate}[ b numerazione c ] Liste \item prima voce ption L’ambiente description permette di so\item seconda voce stituire delle etichette ai puntini che mar cano l’inizio di un elemento della lista: \end{enumerate} il testo dell’etichetta va indicato come arSe ‘ b numerazione c ’ non è specificato, gomento facoltativo per ciascun comando le voci dell’elenco vengono contrasse\item. gnate con il numero d’ordine progressiInserire liste con AUC-TEX vo, in cifre arabe. Altrimenti, ogni caAUC-TEX inserisce un comando ‘\item’ rattere in ‘ b numerazione c ’ viene copiato ogni volta che si preme ‘Alt+Invio’; al- nell’etichetta di ciascuno degli elementi l’interno di un ambiente ‘description’, dell’elenco, fatta eccezione per i seguenti: AUC-TEX chiederà anche il testo dell’etichetta, e lo accosterà al comando ‘\item’ 1 sostituito col numero d’ordine dell’elemento, in cifre arabe; tra le parentesi quadre. I sostituito col numero d’ordine dell’eleEnumerazioni mento, in cifre romane maiuscole; L’estensione ‘enumerate’ (‘\usepackage{enumerate}’ nel preami sostituito col numero d’ordine dell’eleate bolo) definisce un ambiente ‘enumerate’ mento, in cifre romane minuscole; per produrre, ovviamente, enumerazioni: questo ambiente ha la stessa sintassi A sostituito col numero d’ordine deldi itemize, ma accetta un argomento l’elemento, rappresentato con una opzionale che specifica come debbano lettera maiuscola dell’alfabeto; 42 \ begin{ flushleft } ^ \LaTeX \\ a sinistra ! \end{ flushleft } \ begin{center} \LaTeX \\ al centro ! \end{center} \ begin{ flushright } \LaTeX \\ a destra ! \end{flushright } \ begin{Large} Ti ringrazio per aver lodato il mio libro , \ begin{small} anche se si trattava di una {\ tiny spudorata } menzogna. \end{small}\end{Large} \ begin{huge} Groucho Marx \end{huge} LATEX a sinistra! Ti ringrazio per aver lodato il mio libro, anche se si trattava di una spudorata menzogna. LATEX al centro! Groucho Marx Esempio 9: Cambiare la dimensione del testo LATEX a destra! Esempio 8: Paragrafi di testo sbandierato. Le interruzioni di riga sono esplicitamente indicate. a sostituito col numero d’ordine dell’elemento, rappresentato con una lettera minuscola dell’alfabeto; I caratteri ‘{’ e ‘}’ proteggono il testo che racchiudono da questa espansione: ogni cosa tra le parentesi graffe verrà inserita come testo ordinario nell’etichetta, compresi i 5 caratteri speciali qui sopra. Si possono includere anche comandi di stile nell’etichetta, per produrre, ad esempio, una numerazione in carattere grassetto. Tuttavia, le parentesi graffe conservano la loro funzione di protezione del testo, quindi gli unici comandi effettivamente usabili sono quelli che cambiano lo stile del testo, solo nella forma lunga (dichiarativa), e privi delle parentesi graffe che usualmente li racchiudono (quelle dell’argomento di enumerate svolgeranno questa funzione); ad esempio, provate una enumerazione che comincia con la riga: \begin{enumerate}{\Huge\sffamily% \bfseries A.} \item \end{enumerate} Riferimenti agli elementi di una lista Una istruzione \label all’interno di un ambiente enumerate (ma anche itemize o description) si riferisce sempre al comando \item precedente; ogni comando \ref che vi si riferisce verrà sostituito dal numero d’ordine progressivo dell’elemento nell’elenco. Si possono usare anche tutte le varianti di \ref: \pageref, \vref, ecc. 43 \ begin{enumerate}[{Assioma} I.] Assioma I. v \item\ label {ax} Per un punto del piano passano infinite rette . \item Per due punti : Assioma II. \begin{enumerate}[({II}.a )] \item non ne parliamo proprio ! \item un po ’ più che in \ ref {ax}\ ldots \item \ ldots ma un po’ meno che per tre . \end{enumerate} \end{enumerate} Per un punto del piano passano infinite rette. Per due punti: (II.a) non ne parliamo proprio! (II.b) un po’ più che in I www (II.c) www ma un po’ meno che per tre. Esempio 12: Esempio riassuntivo di ‘enumerate’ xyxykz{1|X}~,I:~~ }`~* “Environment nome undefined.” L’ambiente indicato non esiste: può esseEcco una carrellata sugli errori che po- re un semplice errore di battitura, oppure trebbero venire dai nuovi comandi de- l’ambiente è definito in una estensione, scritti in questo capitolo. Ovviamente, che non è stata caricata con un comando potrebbe capitarvi anche uno degli errori ‘\usepackage’ nel preambolo. descritti nei capitoli precedenti; sappiate “File ended while scanning use of www essere sportivi :-). ” Un argomento (anche facoltativo) non è stato chiuso; vedi la discussione di “\begin{xxx} ended by \end{yyy}.” “Runaway argument?” nella sezione 4.7. C’è ‘\end{yyy}’ dove avrebbe dovuto es“Missing \endcsname inserted.” serci ‘\end{xxx}’. A volte però gli amL’argomento facoltativo di ‘\item’ o bienti sono chiusi nella maniera corretta, dell’ambiente enumerate contiene un e qualcosa ha fatto saltare a LATEX la ficomando che lì non è permesso; vedi ne di xxx: occorre ricontrollare con molta anche la discussione di questo stesso cura il file. In questo caso, può essere utierrore nelle sezioni 5.6 e 4.7. le far indentare il file a XEmacs: premete ‘Control+Spazio ’ all’inzio della regio- “There’s no line here to end.” Ci sone sospetta, mouvetevi col cursore fino al- no due comandi ‘\\’ di seguito in un amla fine, e poi premete ‘Alt+Control+\ ’: XE- biente ‘verse’, ‘flushleft’, ‘flushright’ macs daraà al testo una struttura “a scalet- o ‘center’, o, peggio ancora, nel mezzo ta”, in cui il testo racchiuso in una coppia del testo ordinario. ‘\begin–\end’ sarà più distante dal margine sinistro, e tanto più distante quanti più sono gli ambienti che lo racchiudono. 44 \ begin{ description } \item[ flushleft ] allinea ogni riga al margine sinistro ; \item[ flushright ] allinea ogni riga al margine destro ; \item[center ] centra le righe . \end{ description } flushleft allinea ogni riga al margine sinistro; flushright allinea ogni riga al margine destro; center centra le righe. Esempio 11: Una lista 45 } }7 In questo capitolo si descrivono le classi standard di documento fornite con LATEX, e le opzioni possibili. Per finire, vediamo come suddividere un file in più parti e come compilarle separatamente. yy&|k "L"Y" !{1F!~% }|X?l:{1} Ci sono tre classi di documento che sono standard in LATEX: ‘article’, ‘report’ e ‘book’. Il nome della classe di documento è l’unico argomento obbligatorio di \documentclass (cfr. la sezione 4.3). Praticamente tutti i comandi descritti fin qui sono definiti nella classe di documento— non fanno parte del nucleo di LATEX, ma solo della “interfaccia” tra i meccanismi interni e l’utente. In teoria, altre classi di documento potrebbero implementare comandi del tutto diversi da quelli descritti qui; in pratica, le classi di documento alternative si limitano a specializzare quelle standard per scopi particolari: lettere, tesi, curriculum vitae, ecc. e dunque i comandi standard sono disponibili (salvo poche eccezioni, ma è sempre bene controllare la documentazione). La classe ‘article’ si usa per documenti brevi: questa classe non permette la divisione in capitoli (manca il comando ‘\chapter’). La classe ‘book’ è stata pensata come base per libri da pubblicare a stampa, e abilita comandi addizionali per separare il corpo del libro dagli apparati. La classe ‘report’ è intermedia fra le due: ha la divisione in capitoli in più di ‘article’, però manca della separazione tra corpo ed apparati propria di ‘book’. Le opzioni comuni Tutte le classi standard riconoscono le stesse opzioni; eccone un elenco: opzioni che si escludono reciprocamente sono raggruppate in uno stesso paragrafo. La tabella 7.1 riporta quali opzioni vengono considerate attive in una classe in mancanza di indicazione contraria. 10pt, 11pt, 12pt Scelgono il corpo del carattere con cui sarà composto il documento. Questa è la dimensione ‘\normalsize’. Corpi maggiori o minori richiedono estensioni di LATEX oppure altre classi di documento. a4paper, a5paper, b5paper, letterpaper, legalpaper, executivepaper Il formato della carta su cui deve essere stampato il documento. I primi tre sono formati europei, gli ultimi tre sono americani. 46 oneside, twoside Scegliete ‘twoside’ se stamperete fronte-retro. La tabella 7.1 è la scelta naturale per ogni riporta qual classe di documento. Tabella 7.1: Le opzioni normalmente abilitate nelle classi standard. onecolumn, twocolumn Scegliete ‘twocolumn’ per impaginare il documento su due colonne. Attenzione! L’impaginazione delle figure su due colonne richiede un trattamento diverso: consultate le sezioni 10.2.3 e 10.3. twoside openright titlepage letterpaper onecolumn final 10pt article report book no N/A no si si si si no no si si si si si si si N/A si si si si openright, openany Con ‘openright’ LATEX aprirà un nuovo capitolo solo su una pagina dispari (fronte), lasciando eventualmente bianca la pagina precedente; con ‘openany’ si elimina questa re- pagine con numeri romani; un comando strizione. (Questa opzione non ha effetto \chapter inserito quando \frontmatter è nella classe ‘article’.) attivo non produrrà un numero accanto al titolo, ma segnerà ugualmente una riga titlepage, notitlepage Con ‘titlepage’ nel sommario (cfr. sezione 5.4). il titolo del documento apparirà su una paTra ‘\mainmatter’ e ‘\backmatter’, \mainmatter gina a sé stante; con ‘notitlepage’, inc’è il testo vero e proprio del libro; A vece, LTEX inizierà il testo subito dopo, tutti i capitoli, comprese le appendici. senza passare ad una nuova pagina. ‘\mainmatter’ ricomincia la numerazione final, draft Quando ‘draft’ è attiva, da ‘1’ e passa alle cifre arabe. LATEX segnerà con un rettangolo nero a laInfine, dopo ‘\backmatter’, seguono in \backmatter to tutte le righe che sforano nel margine genere gli indici analitici, eventuali postdella pagina (“Overfull hbox”). fazioni, bibliografie, ecc. La numerazione dopo \backmatter continua quella della La classe ‘book’ La classe ‘book’ prevede una tripartizione parte principale del libro. dei contenuti del documento, segnate dai Poiché la prima pagina di un libro comandi ‘\frontmatter’, ‘\mainmatter’ deve contenere molte più informazioe ‘\backmatter’. Tutti e tre que- ni che non autore-titolo-data, il comanste istruzioni devono comparire dopo do \maketitle è quasi inutile per i li‘\begin{document}’. bri, e LATEX definisce un ambiente (cfr. matter Dopo ‘\frontmatter’ (e prima di capitolo 6) ‘titlepage’: tutto ciò che ‘\mainmatter’), stanno gli apparati inizia- è compreso tra ‘\begin{titlepage}’ e li del libro: le pagine col titolo, copyright, ‘\end{document}’ verrà composto insieprefazioni, dediche, ecc. Il comando me in una pagina priva di numerazione e \frontmatter inizia la numerazione delle di intestazioni. 47 de y ,y(:~8&Z1 Quando un documento si fa lungo, è bene spezzarlo e tenere in file diversi le diverse parti logicamente indipendenti: potremo così ridurre i tempi di compilazione mentre lavoriamo intensamente (?!) su un capitolo www LATEX definisce due comandi per suddividere i file in ingresso: ‘\input’ e ‘\include’. Il comando \input viene immediatamente sostituito da LATEX con i contenuti del file indicato come argomento; aggiunge automaticamente una estensione .tex se manca. Il comando \include comincia una nuova pagina, e poi inserisce i contenuti del file .tex indicato nell’argomento; l’estensione .tex viene sempre aggiunta! Ecco un esempio per chiarire la differenza: Compilazioni parziali LATEX permette di onorare solo alcuni dei comandi ‘\include’. Esiste un comando ‘\includeonly’ il cui unico argomen- \includeonly to è una lista di nomi, separati da virgole: solo le istruzioni \include relative ad una di questi nomi verranno eseguite. Per esempio, % solo cap1.tex e cap3.tex \includeonly{cap1,cap3} \begin{document} \include{cap1} \include{cap2} \include{cap3} \end{document} compila il documento come se contenesse solo il primo ed il terzo file. Tuttavia, se la prima volta abbiamo eseguito una compilazione dell’intero contenuto (senza \includeonly), nelle compilazioni (parziali) successive i numeri di pagina % inserisce i contenuti saranno quelli giusti, anche se nel mezzo % del file capitolo1.tex abbiamo saltato qualche capitolo per via \input{capitolo1.tex} di \includeonly! Io consiglio di tenere sempre il corpo % comincia una nuova pagina, del documento in un file a parte (p. es. % ed inserisce capitolo2.tex ‘corpo.tex’), e di includerlo in un generi\include{capitolo2} co “contenitore” come quello del listato 4. Una istruzione ‘\input’ può comparire Questo rende più facile “riciclare” i conovunque in un file, mentre ‘\include’ può tenuti di un articolo per trasformarlo, ad stare solo nel corpo del documento. Ol- esempio, in capitolo di un libro. (I lettotre alla piccola differenza sintattica, c’è ri attenti avranno degli azzeccati sospetti una differenza più sostanziale tra \input e sul modo con cui è stato messo insieme questo quaderno. :-) \include: il secondo memorizza i numeri di pagina (e di capitolo, di sezione, ecc.) del testo che viene incluso, e permette di avere un documento numerato correttamente anche se si eseguono compilazioni parziali. 48 listingfig 4: Un generico file contenitore: ha la struttura minima necessaria ad un file LATEXe include ‘corpo.tex’. 1 2 3 % master.tex ` Generico file contenitore di scritti in LaTeX % \documentclass[a4paper, notitlepage , twoside , italian ]{ article } 4 5 6 7 % aggiungere sotto le estensioni usate \usepackage[ italian ]{babel} \usepackage[T1]{fontenc} 8 9 \ begin{document} 10 11 12 % i veri contenuti di questo file sono in ‘ corpo. tex ’ \ include{corpo} 13 14 \end{document} 15 16 17 18 19 20 21 22 %%% (Le righe qui sotto sono per AUC TeX/Emacs; nel file "corpo. tex " %%% scrivete " master. tex " al posto di ’ t ’ nella riga ‘ TeX master’) %%% %%% Local Variables: %%% mode: latex %%% TeX master: t %%% End: 49 } }7 A conclusione di questa prima parte sulla scrittura di un documento con LATEX, passiamo rapidamente in rassegna i comandi per aggiustare nei dettagli la veste tipografica finale. Questo capitolo non può sostituire un buon manuale di stile (ad esempio [3]): non spiega quali siano i ritocchi più opportuni da fare, ma solo i metodi disponibili in TEX per affrontare un certo problema; anche in questo, poi, la trattazione sarà panoramica e superficiale: per conoscere la vera potenza di TEX e il funzionamento degli algoritmi interni il riferimento insostituibile è [1]. L’ordine delle sezioni in questo capitolo rispecchia l’ordine di questi interventi finali sul documento. Ultima avvertenza: questi ritocchi sono in genere di minima entità, e possono essere annullati da una piccola modifica del testo; conviene sempre procedere agli aggiustamenti finali solo quando si è certi che non si faranno ulteriori interventi sul testo! le virgolette chiuse). Mettendone due in fila, TEX produrrà la giusta coppia di virgolette alte. Per le ottenere le virgolette basse, si possono usare i comandi ‘\guillemotleft’ e ‘\guillemotright’ \guillemotleft (se la vostra tastiera vi permette di scrive- \guillemotright re direttamente i caratteri ‘«’ e ‘»’, potete usarli direttamente nel documento caricando l’estensione ‘inputenc ’ con l’opzione ‘latin1’). La tabella 8.1 elenca tutti i diversi tipi di virgolette disponibili in LATEX. “ www ” \guillemotleft w ww \guillemotright \guilsinglleft w ww \guilsinglright \quotedblbase \quotesinglbase “ www ” « www » ‹ www › „ ‚ Tabella 8.1: I diversi tipi di virgolette disponibili in LATEX. Per gli ultimi tre tipi, occorre caricare l’estensione ‘fontenc’ con la riga ‘\usepackage [T1] {fontenc}’ nel preambolo. yy1|k|k}` Z:" !Z :"O}(~,!1|X Si può usare il comando ‘\,’ per met- \, Virgolette. Non si usa il carattere ‘"’ tere un po’ di spazio tra le virgolette ed per produrre le virgolette con TEX, beneventuali apostrofi: sì la coppia di caratteri ‘‘’ (accento, per ‘‘Di spazio un altro po’\,’’ le virgolette aperte) e ‘’’ (apostrofo, per 50 Trattini. TEX permette tre specie di tratti: il trattino ‘-’, il tratto medio ‘–’, ed il tratto lungo ‘—’. Il primo si produce con un carattere ‘-’, il secondo con due in successione, il terzo con tre. ‘ssh add’ ` il programma di gestione delle chiavi private ssh ` \’e trattato alle pagg. 21 22. Non si usa il comando “\ ” se l’abbreviazione termina un periodo. Per forzare TEX a inserire uno spazio più largo dopo un punto (quando un punto fermo segue una lettera maiuscola), si inserisce il comando ‘\@’ prima del punto \@ fermo: www I segni ‘?’, ‘!’ e ‘:’ seguono le stesse regole del punto fermo. Tutta la discussione qui sopra si applica anche se il segno di punteggiatura è seguito da una parentesi chiusa, oppure dalle virgolette. ‘ssh-add’ —il programma di gestione delle chiavi private ssh— é trattato alle pagg. 21–22. Puntini di sospensione. Non si fanno con tre punti di seguito, bensì col comando ‘\ldots’. \ldots Esempio 13: Esempi di tratti Punteggiatura. Dopo un punto fermo, TEX inserisce uno spazio un po’ più largo che tra due parole all’interno di una frase. Poiché TEX non può distinguere un punto che termina una frase da uno usato in una abbreviazione, segue un semplice criterio: un punto fermo termina una frase se non segue una lettera maiuscola. Ad esempio, TEX non inserisce alcuno spazio extra dopo il punto in Legare le parole. A volte una riga di testo viene spezzata tra due parole che sono legate a formare un tutto unico (p. es. “Appendice X”); per evitare questo si può usare il carattere ‘~’ in vece dello spa- ~ zio: “Appendice~X”. È difficile enunciare un criterio generale per usare il carattere di legame ‘~’; uno molto grossolano è il seguente: si inserisce un legame tra due parole quando una riga non può terminare con la prima o non può iniziare con la seconda, per esempio “Mr.” e “Blisset”: L. Blisset è appena stato qui. Mr.~Blisset, I presume. In alcuni casi, però questo criterio fallisce e bisogna inserire dei comandi correttivi. Quando il punto fermo segue una abbreviazione a sua volta seguita da uno spazio, come: “ecc. ”, si usa il comando ‘\ ’ (barra-inversa spazio) dopo il punto: ad esempio, scriveremo Mr.\ Blisset, I presume. vitamine A, C, E\@. Una discussione completa si trova in [1, pp. 91–93]. y ,y1"!X"!?~,.: a~*Zs Il più frequente intervento per dare la veste finale ad un documento consiste nell’eliminare le righe troppo spaziate (“Underfull \hbox”, nel gergo di LATEX) oppure 51 quelle troppo lunghe, che sporgono oltre il margine destro (“Overfull \hbox”). TEX compone le righe seguendo criteri piuttosto rigidi, per garantire il migliore aspetto dell’impaginato, ma, di quando in quando, l’algoritmo fallisce1 e occorre intervenire manualmente, modificando il testo, oppure aiutando TEX nella sillabazione di una parola, o infine rendendo più permissivi i criteri di impaginazione di LATEX per un capoverso. Una descrizione approfondita dell’algoritmo usato da TEX per impaginare i documenti e di come controllarlo, come anche un’analisi più dettagliata dei rimedi suggeriti qui, si trova in [1, Capitolo 6, spec. pp. 28–30, e Capitolo 14]. paragrafo che nel nostro file è compreso tra le righe 496 e 503 c’è una riga troppo larga, che sporge di circa 5 punti tipografici; da questi dati possiamo individuare esattamente il punto in cui intervenire. LATEX riporta anche le righe di codice in cui si manifesta il problema, ma nel suo proprio formato interno, per cui bisogna “ripulire” il messaggio per risalire al testo che l’ha generato. Talvolta, però, da un esame di questi messaggi si può capire in cosa l’algoritmo di impaginazione di TEX ha fallito, e trovare così la soluzione migliore. I due esempi che seguono illustrano le situazioni più comuni. Come primo esempio, esaminiamo il messaggio: Overfull \hbox L’opzione ‘draft’ di \documentclass evidenzierà le righe troppo larghe con un rettangolo nero al margine, cosicché si trovino subito i punti del documento su cui intervenire. L’opzione opposta ‘final’ sopprime ogni segnalazione grafica di questo tipo. Se nessuna di queste due opzioni viene passata a \documentclass, LATEX assumerà ‘final’. Inoltre, ogni underfull e overfull \hbox viene riportato nel file ‘.log’ (la compilazione di un file ‘nome.tex’ produce anche un file ‘nome.log’ che contiene tutti i messaggi che LATEX stampa a video ed altri ancora). Un overfull \hbox viene segnalato da una riga di questo tipo: Overfull \hbox (3.80861pt too wide) in paragraph at lines 322--327 \OT1/ptm/m/n/10 este-so sup-por-to dei fi-le T[]X: con-trol-lo del-le va-rie fa-si di com-pi-la-zio-ne/anteprima/stampa Dobbiamo ignorare lo strano ‘\OT1/ www /10’: è il codice interno di LATEX per rappresentare un cambiamento di stile del carattere; ignoriamo anche la coppia di parentesi ‘[]’ in ‘T[]X’: sono una specie di ‘[omissis]’ per la sequenza di caratteri che produce la ‘E’ abbassata del logo ‘TEX’—in genere i segni ‘[]’ stanno per qualche combinazione complicata di caratteri che non può essere mostrata in un messaggio di testo. Rimane una serie di parole, che TEX ha sillabato correttamenOverfull \hbox (5.42711pt too wide) te, tranne le ultime due: lì occorre intervein paragraph at lines 496--503 nire per aggiustare la lunghezza della riga In questo caso LATEX ci informa che nel (v. sezione 8.2.2 per maggiori dettagli). 1 In questo quaderno, ad esempio, c’è in media Spesso è impossibile aggiustare una riun overfull hbox ogni due pagine di testo. ga troppo lunga ricorrendo alla sillabazio52 www ne discrezionale, quando la riga contiene elementi indivisibili (p. es. formu le matematiche, nomi di comandi, ecc.). Esaminiamo ad esempio il messaggio: compilazione/an\-te\-pri\-ma/stam\-pa www In questo caso, però, sarebbe forse meglio terminare la riga in corrispondenza di un segno ‘/’: per ottenere questo effetto si può usare un comando ‘\discretionary{}{}{}’ subito dopo il carattere ‘/’: Overfull \hbox (13.72679pt too wide) in paragraph at lines 358--363 \OT1/ptm/m/n/10 ma vol-ta ab-bia-mo ese-gui-to una com-pi-la-zio-ne del-l’in-te-ro con-te-nu-to (sen-za \OT1/pcr/m/n/10 \includeonly \OT1/ptm/m/n/10 ), www Ignoriamo al solito i comandi ‘\OT1/ www /10’; tutte le parole sono sillabate correttamente; guardando il codice LATEX alle righe 358–363, scopriamo che ‘\includeonly’ ha uno status diverso da quello di una ordinaria parola, e quindi non può essere sillabata: l’unica via d’uscita è di comporre l’intero paragrafo in un ambiente ‘sloppypar’, che rilassa le regole di composizione delle righe tipografiche normalmente usate da LATEX(v. sezione 8.2.3 per una spiegazione più dettagliata). compilazione/\discretionary{}{}{}anteprima/ www Il comando ‘\discretionary’ serve \discretionary per realizzare sillabazioni eccezionali: i primi due argomenti sono, rispettivamente, il testo da mettere in fondo e in inizio riga quando una parola viene spezzata in corrispondenza di \discretionary, e l’ultimo è il testo da inserire nel documento se invece non occorre sillabare in quel punto; ad esempio, per sillabare ‘stampa’ scriveremo ‘\discretionary{stam-}{pa}{stampa}’; il comando ‘\-’ equivale a ‘\discretionary{-}{}{}’. Per maggiori informazioni, ed una descrizione completa di \discretionary, si consulti [1]. Aggiustare la sillabazione Quando TEX non riesce a sillabare correttamente una parola, si può ovviare all’inconveniente inserendo dei comandi ‘\-’ tra le varie sillabe; riprendendo l’esempio precedente, Allentare i criteri di composizione L’ambiente ‘sloppypar’ rilassa i cri- sloppypar teri con cui LATEX compone le righe di testo; questo ambiente deve racchiudere un intero paragrafo: LATEX comincerà un nuovo capoverso prima di ‘\begin{sloppypar}’ e dopo Overfull \hbox 3.80861pt too wide ‘\end{sloppypar}’. in paragraph at lines 322--327 www com-pi-la-zio-ne/anteprima/stampa Per ottenere lo stesso effetto solo per poche righe all’interno di un paragraosserviamo che le parole finali ‘antepri- fo, si deve usare la coppia di comandi ma’ e ‘stampa’ non sono state sillaba- ‘\sloppy’ e ‘\fussy’: il primo ha lo stes- \sloppy te (ma ‘compilazione’ si): correggiamo so effetto di ‘sloppypar’ (ma non comin- \fussy allora nel file .tex in questo modo: cia un nuovo capoverso), finché non si ri53 torna alle normali regole di composizione con ‘\fussy’. fetto di \sloppy, LATEX non Sotto l’ef produrrà quasi mai “overfull \hbox”, ma è più prono a comporre “underfull \hbox”. Underfull \hbox Un “underfull \hbox” è una riga in cui lo spazio tra le parole è eccessivo. TEX riporta nei messaggi d’avvertimento anche una misura di questo spazio, chiamata badness: Underfull \hbox (badness 2326) in paragraph at lines 151--151 Seguono poi, nel file .log, le righe del file di ingresso interessate, come nei messaggi di “overfull \hbox”. Gli “underfull \hbox” sono meno visibili degli “overfull”, tanto che molti possono essere tranquillamente ignorati senza compromettere troppo la composizione delle pagine. In generale, gli interventi possibili per correggere un “underfull \hbox” sono gli stessi già descritti nelle sezioni 8.2.2 e 8.2.3. Frequentemente gli “underfull \hbox” occorrono quando TEX deve comporre un paragrafo con piccola ampiezza, come accade nelle tabelle o nelle didascalie. In questi casi, può essere conveniente passare al testo sbandierato. to, la lunghezza da aggiungere all’altezza della colonna di testo; una lunghezza negativa accorcia la pagina. Per esempio, “\enlargethispage{6ex}” allunga la pagina di circa due righe, “\enlargethispage{-3ex}” la accorcia di una. Il comando ‘\nopagebreak’, usato tra due paragrafi o dopo un titolo, serve per scoraggiare LATEX dal terminare una pagina in corrispondenza del punto indicato da \nopagebreak. Viceversa, il comando ‘\pagebreak’ incoraggia la separazione delle pagine nel punto in cui appare. Attenzione! Entrambi questi comandi devono apparire fuori da un paragrafo, o non avranno alcun effetto. Infine, i comandi ‘\newpage’, ‘\clearpage’ e ‘\cleardoublepage’ forzano LATEX a cominciare una nuova pagina. La differenza fra i tre sta in questo: quando il testo è composto su due colonne, \newpage inizia una nuova colonna, mentre \clearpage inizia una nuova pagina; \cleardoublepage inizia una nuova pagina destra, cioè inserisce una pagina vuota se necessario. y ¡,ykz(Z¢" !~%= =!({1 In ultimo, è necessario fare piccoli aggiustamenti nei punti in cui TEX separa le pagine, per evitare righe isolate alla fine o all’inizio di un foglio. gethispage Il comando ‘\enlargethispage’ permette di aumentare un poco l’altezza del testo su una pagina. Questo comando accetta un solo argomen54 \nopagebreak \pagebreak \newpage \clearpage \cleardoublepage Parte III Matematica con LATEX 55 } }7£ “TEX è progettato in modo da permettere di scrivere facilmente espressioni matematiche complesse. L’idea alla base è che una formula complicata è composta di formule meno complicate combinate in maniera semplice; le formule meno complicate sono, a loro volta, fatte di combinazioni semplici di formule ancora meno complicate; e così via. [ www ] Partiamo allora da quelle semplici e apriamoci una strada verso l’alto.” — da: Donald E. Knuth, “The TEXbook”, 1986 ¤yy¥={GO}O¦§:":}~*"©¨§¨ª¨ Il paragrafo di Knuth qui sopra spiega praticamente tutto quello che c’è da sapere per capire come TEX costruisce le formule: TEX legge il testo che corrisponde ad una formula e ne divide i contenuti in formule più semplici, e prosegue fino a scomporre queste in formule elementari; costruite queste, le combina a seconda del modo in cui sono legate insieme (per esempio, numeratore e denominatore di una frazione), poi combina le espressioni così ricavate, e via via risale fino a comporre la formula originaria. Vediamo cosa succede in pratica. Le formule più semplici sono costituite da una singola lettera oppure un singolo numero; per inserirle in un documento LATEX dovremo scrivere, ad esempio, \(x\) o \(2\). Se scriviamo \(2 x\), allora TEX scomporrà questa formula nei due costituenti elementari, e poi accosterà il prodotto di questi due. Se invece scriviamo \(x = 2\), questa volta LATEX inserirà un leggero spazio tra “x” e “=”, come anche tra “=” e “2”: TEX riconosce che il segno “=” lega le due formule semplici ai suoi lati in maniera diversa da uno spazio. Schematicamente, ecco le differenze principali fra il modo matematico (math mode) e quello di testo. 56 1. Ogni spazio è ignorato nel modo matematico, perchè indica la semplice giustapposizione delle espressioni. Per inserire spazi in una formula sono necessari comandi speciali. 2. Non è permesso comprendere più paragrafi tra le parentesi matematiche. Ogni riga vuota ed ogni comando \par fermeranno TEX con un errore. Vedremo più avanti come fare per mostrare più formule o equazioni di seguito. 3. Il modo matematico ha i suoi pro- razioni e relazioni: alcuni sono già presenti sulla tastiera (+, -, =, ecc.), per gli altri LATEX ha una serie di comandi specifici. TEX tratta tutti questi comandi come se fossero un nome lungo per un solo carattere: ad esempio, il comando \cup produce il simbolo di unione di insiemi, e LATEX lo tratta allo stesso modo del segno +. Ricordate di mettere sempre uno spazio alla fine di questi comandi: \alpha X Fin qui la teoria; vediamo allora in pra- e non ‘\alphaX’ altrimenti T X cercherà E tica con quali comandi LATEX si combi- di chiamare il comando dal nome alphaX, nano le varie espressioni a formare una che non è definito. formula. Una formula si può allora scrivere mettendo insieme, come se scrivessimo ¤y ,yDI«}F! ¬¢!:!|< un’espressione con carta e penna: :¯®±°*²(³ pri font; ad esempio, tutte le lettere vengono rese in corsivo matematico (math italic), ed anche altri segni come “-” e “*” hanno un aspetto leggermente diverso. Quel che è più importante è che i comandi che cambiano il carattere corrente sono diversi nel modo testo e nel modo matematico. d lettere e numeri, lettere greche (la Per prima cosa, ogni documento LATEX figura 9.3 riporta i comandi necesche utilizzi notazioni matematiche dosari), simboli speciali (alcuni sono vrebbe caricare le estensioni ‘amsmath’ riportati in figura 9.2); con il comando ‘\usepackage{amsmath}’ d i simboli delle operazioni (+, -, *, /, nel preambolo. Tutti gli esempi nel www ); seguito usano questa estensione. Ogni formula matematica deve essed i simboli di relazione (<, >, =, www ); re racchiusa tra i comandi ‘\(’ e ‘\)’. d Il primo di questi comandi pone TEX in i segni di interpunzione (!, :, ;, www modo matematico, ed il secondo ne esce. ); Le formule matematiche seguono regole d parentesi di ogni tipo: ricordate però di composizione tipografica differenti dal che le parentesi { e } hanno un signitesto ordinario; perciò è necessario racficato speciale per TEX, quindi occhiudere le formule tra i due particolari corre precederle con una barra inverindicatori ‘\(’ e ‘\)’ (math brackets, o sa \ per produrre il corrispondente parentesi matematiche): in questo modo segno. TEX userà le convenzioni tipografiche e di input proprie delle formule. La figura 9.1 riporta alcuni esempi. ¤y ¡,y´Y|k}`!{1(|k?&O~ }s|k}{?} Spazi nelle formule Per inserire dello spazio in una formula si usano i comandi ‘\quad’ e ‘\qquad’; il \quad Il modo più semplice per combinare del- secondo produce uno spazio maggiore del \qquad le espressioni è tramite i simboli di ope- primo. "lµ}` 57 Codice LATEX x + y + z = 0 xy - 1 < z (a+b)/(a-b) \geq 1 f(x,y,z) = n! \Theta(t) A \cap B \subseteq C \langle x,y \rangle = \alpha c \cdot x \land y = z \lor t Tabella 9.1: semplici. º Formula ‘\usepackage{amsfonts} ’ xdi¶ un y ¶ documento. z· 0 xy ¸ 1 ¹ z a ¶ b »½¼ºOperazioni a ¸ b »*¾ 1 binarie f º x ¿ y¿ z+»Z· n!Θ º t » \cap -A À B Á C \cup *  x ¿ y Ã(· α \setminus c Ä x/Å y · z Æ t \cdot Relazioni binarie Esempi di formule molto = \approx \in \ni \sim \Doteq Testo nelle formule Per inserire qualche parola come testo ordinario, si può usare il comando ‘\text’. Questo comando accetta un solo argomento, la frase da inserire. Provate a vedere cosa viene fuori da: < \geq \subset \supset \simeq \propto ¶ \lor \land \oplus \otimes À Æ ¸ Ç Å È É Ê ¼ Ä · > \leq \subseteq \supseteq \perp \mid Ë ¹ Ì Í ¾ Î Ï Ð Á Ñ Ò Ó Ô Õ Ö ∝ × Ø Segni di interpunzione : . ; ! , \ldots : \{ \} \lceil \rceil º ¿ ; ! w www Parentesi \(f(x)=0 \quad \text{se e solo se} \quad( g(x)=0\) [ ) ] E se leviamo i comandi ‘\quad’? Se to\langle \lfloor gliamo ‘\text’ e lasciamo “se e solo se” \rangle \rfloor in mezzo? Se invece di ‘\text’ mettiamo Simboli ordinari ‘\textbf’? E ‘\textit’? Tutti i comandi \forall \exists ‘\text www ’ descritti nella sezione 4.5 si \partial \nabla possono usare per inserire del testo in una \infty \emptyset formula matematica. \Re \Im Un catalogo dei simboli più comuni è in figura 9.2; una lista completa si può trovare alle pagine 19–21 della “Users’ guide to AMSFonts”, che troverete nel file amsfndoc.dvi sotto la directory /usr/ doc/texmf/fonts/amsfonts/. Chi usa AUC-TEX può attivare il menu matematico premendo Control-c ~ e poi scegliere il simboli che gli servono dalle voci del menu. Per accedere a tutti questi simboli è necessario caricare l’estensione ‘amsfonts’, aggiungendo il comando al preambolo \complement \hbar \circ \ell Ù » Ü Â Ý Ã á Ú Û ∂ ∞ ℜ à â ∇ 0/ ℑ Tabella 9.2: Alcuni dei simboli che si possono inserire con LATEX in una formula matematica. Una lista molto più completa si trova in “Users’ guide to AMSFonts”, pp. 19–21 ¤yçyè<~,X}{1"é ~,|XZ |k}`(ên1|k({?":µ{1}l"! Il comando ‘\frac’ serve a combinare \frac due espressioni matematiche in una frazione. Questo comando accetta due argo- 58 Þ ß ã ä å æ c c \alpha \epsilon \iota \nu \rho \phi \Delta \Pi \Psi \beta \zeta \kappa \xi \sigma \chi \Theta \Sigma \Omega \gamma \eta \lambda o \tau \psi \Lambda \Upsilon \vartheta \varsigma \varkappa \varphi \varpi \delta Codice α LATEXβ γ δ \theta ε ζ η θ \frac{x}{2} \mu ι κ λ µ \frac{1}{x+2y} \pi ν ξ o π \frac{\partial x} \upsilon ρ σ f}{\partial τ υ \omega φ χ ψ ω \frac{n!}{k!(n-k)!} \Doteq \binom{n}{k} \Xi ∆ Θ Λ Ξ \Phi \binom{n}{k} Π Σ = \binom{n}{n-k} ϒ Φ Formula x 2 1 xì 2y ∂f ∂x n n! × k k! í n î kï ! n n · k nî k Ψ Ω \varrho ϑ ë ϖ ρ 1+\cfrac{1}{1+\cfrac{1}{1+\dotsb}} ς ϕ Tabella 9.3: I comandi TEX per produrre le lettere greche, minuscole e maiuscole. La lettera omicron è identica alla “o” latina, come pure molte le maiuscole che non compaiono nell’elenco: non c’è quindi bisogno di comandi particolari. L’ultima riga contiene i comandi per produrre alcune varianti grafiche. menti: il primo è il numeratore, il secondo il denominatore. Qualunque espressione matematica può andare al numeratore o al denominatore: guardate gli esempi di figura 9.4. ‘\cfrac’ è una variante di ‘\frac’ adatta alla composizione di frazioni continue. Cosa succede se usate le varianti ‘\lcfrac’ o ‘\rcfrac’ al suo posto? Il comando ‘\binom’ combina due espressioni a formare un coefficiente binomiale; accetta due argomenti, nello stesso ordine di ‘\frac’. ‘\sqrt’ pone un segno di radice quadrata sopra l’espressione matematica che ne costituisce l’argomento. È possibile specificare un argomento opzionale, che indica l’ordine della radice: \sqrt[3]{x} è la radice cubica, ecc. Alcuni esempi si trovano in figura 9.5. Cosa succede 1 1¶ 1 1 ¶ðÄÄÄ 1¶ Tabella 9.4: Esempi di frazioni e coefficienti binomiali. se si mette un’espressione matematica più complicata (per esempio \frac{p}{q}) come radicando? E come ordine della radice? Codice LATEX Formula ñ 2 \sqrt{2} ñ \sqrt[3]{8} = 2 3 8· 2 1ì<ò 5 2 \frac{1 + \sqrt{5}}{2} \sqrt[\alpha]{x+t} + \sqrt[\beta]{x-t} \sqrt[n]{\frac{x+y}{x-y}} Tabella 9.5: Esempi di radici. ¤y ó,y ² "O}{1:{1,=:}`{1:{1" Si può aggiungere un esponente a fianco di qualunque simbolo col comando ‘\sp’ \sp o un indice con ‘\sb’. Come per quasi \sb tutti i comandi, se l’argomento di ‘\sp’ o ‘\sb’ consta di più di un carattere, occorre racchiuderlo entro le parentesi { e }. Al 59 ñ α x¶ t¶ ñ β n x¸ t xì y xî y espressioni ‘F_3’ e ‘{}_2’, che vengono poi accostate, cosicché l’effetto finale è quello di un deponente “2” alla sinistra della “F”. Cosa succede se, dimenticando ‘{}’, uno scrive ‘X + _2F_3’? Formula Attenzione! TEX considera un errore 2 n2 ¿ scrivere m2 ¿ p2 ¿ qdue esponenti o due deponenti di x^y^z ’ e ‘x_y_z’ sono sintattiseguito: ‘ x2 ¿ y2 ¿ z2 ¿ t2 camente ambigui; occorre perciò usare le Aij ¿ Bijgraffe per raggruppare correttaparentesi mente i 2n termini: ‘x_{yz}’ o ‘x_{y_z}’, a Cxì y ¿ D seconda di ciò che si intende. Il carattere aì b 2 aî b ’ (apostrofo) è considerato un esponente d c in modo matematico: perciò non si deve ab scriverep‘F’^2’ ma ‘{F’}^2’ (Quiz: perché n ô 1 î n î ’ pnon va bene?). ‘WF^{’2} posto di ‘\sp’ e ‘\sb’ si possono usare i caratteri “^” e “_”. Esempi di espressioni con esponenti e deponenti sono in figura 9.6. Codice LATEX n^2, m^{2}, p\sp 2, q\sp{2} x_2, y_{2}, z\sb 2, t\sb{2} A^i_j, B_j^i C^{x+y}, D_{2n} {\left(\frac{a+b}{a-b}\right)}^2 a^{b^{c^d}} W^{n, 1-\tfrac{p}{n-p}} ¤yxXy¶ :¦ 2F {13((~,! a= &(~,!{1 X + {}_2F_3 jk êM}`~*l? Til ¿ Ri jk l T_{il}^{jk}, R_i{}^{jk}{}_l Tabella 9.6: Espressioni con esponenti e deponenti. Negli ultimi due esempi si usa la formula nulla {} per forzare la posizione di indici che altrimenti verrebbero spostati a sinistra. Qualunque espressione matematica può comparire come esponente o indice di un’altra, purché racchiusa tra { e }. In particolare, gli esponenti possono a loro volta contenere altri esponenti, deponenti, ecc. (cfr. figura 9.6) Cosa succede se si mette una frazione come esponente? Provate con H^{p+\frac{n}{m}}. E se si usano le varianti ‘\dfrac’ e ‘\tfrac’? Un simbolo può avere anche simultaneamente esponenti e deponenti, e non conta l’ordine con cui sono indicati. Ancora, l’espressione nulla ‘{}’ può a sua volta avere esponenti o deponenti, e questo permette di metterne alla sinistra di un simbolo: ‘{}_2F_3’ produce le due I caratteri ‘^’ e ‘_’ vengono usati in TEX anche per indicare gli estremi di integrazione: nella figura 9.7 introduciamo le prime formule con integrali e sommatorie, che altro non sono, per il TEX, che nuovi simboli, un po’ più grandi. Oltre ai simboli mostrati in figura 9.7, LATEX definisce anche ‘\iint’, ‘\iiint’, ‘\iiint’ e ‘\idotsint’ per gli integrali doppi, tripli, quadrupli e multipli; troviamo anche le versioni operatoriali di operazioni binari come \lor, \land, \otimes, ecc.: abbiamo così \bigvee, \bigwedge, ecc. Tutti questi simboli accettano “estremi” che possono essere inseriti come se fossero esponenti e deponenti; non è necessario che questi estremi siano presenti: è permesso specificarne uno solo, entrambi o nessuno. L’intestazione della figura 9.7 distin- 60 \iint \iiint \iiint \idotsint Codice LATEX \int_0^1 x dx = 1/2 \oint J = 0 \sum_{n=1}^\infty n = \infty gue due colonne, chiamate inline math e display math, cui corrispondono dimensioni diverse per i simboli matematici nella tabella. Il modo matematico di TEX ha infatti due varianti: la prima serve per comporre vengono inserite Inline math formule Displayche math in una riga di testo (in corpo o inline), e 1 1 · 1 ¼ 2 per formule la seconda che appariranno a 0 xdx xdx · 1 ¼ 2 sé stanti, interrompendo il normale flus0 so della parola scritta (fuori corpo o diJ · 0 la figura 9.6 riporta un esempio splayed); J· 0 di entrambe. Le formule in corpo sono racchiuse dai comandi ∞ \( e \), quelle fuo∑∞ 1n · ∞ nriõ corpo sono circondate ∑ n · dai∞comandi \[ e nõ 1 \]. ∑ ∑ ai j ∑i ∑ j ai j \sum_i \sum_j a_{ij} i \prod_{i=0}^\infty (1+a_i) ∏∞ iõ 0 º 1 ¶ ai » j ∞ Data una serie ∏ º 1 ¶ ai » iõ 0 \[ \sum_{n=0}^\infty a_n f ö \]U A f Af fö U definiamo la successione delle somme parziali \(\{ S_n \}\) Uα ö A Uα: \( S_n = \ sum_{i=0}^n α come a_i \). \coprod_{f \in U} A_f \bigcap_{\alpha \in A} U_\alpha αö A Tabella 9.7: Formule con integrali, sommatorie ed altri operatori. Tutti questi costituiscono una classe di simboli che ha lo stesso comportamento in TEX: hanno due dimensioni possibili, e usano la notazione degli indici per fissare gli “estremi”. Il posizionamento degli indici cambia se la formula è nel mezzo di un brano di testo (inline math) o a sé stante (display math). Data una serie ∞ ∑ an nõ 0 definiamo la successione delle somme parziali Ú Sn Ü come: Sn · ∑niõ 0 ai . Esempio 14: Differenza tra formule in-corpo e fuori-corpo 61 ¤y yl"é* }`!~*l"é (÷! ~8 êMs{1X}{?¨§¨ª¨ Le funzioni matematiche più comuni vengono di solito rese in carattere tondo per farle risaltare all’interno di una formula e distinguerle dalle variabili, che sono in corsivo. Perciò LATEX definisce i comandi ‘\log’, ‘\sin’, ‘\cos’, ecc. La figura 9.8 riporta un elenco completo. \arccos \cot \exp \lim \sec \arcsin \coth \gcd \liminf \sin \arctan \csc \hom \limsup \sinh \arg \deg \inf \log \sup math: un operatore avrà gli estremi sopra e sotto, mentre un simbolo di funzione avrà esponenti e deponenti a fianco. La figura 9.9 riporta alcuni esempi. È possibile definire anche nuovi operatori, tramite il comando ‘\DeclareMathOperator*’: la \DeclareMathOperator* sintassi è identica a quella di ‘\DeclareMathOperator’, l’unica differenza sta nella possibilità di specificare gli estremi con la notazione degli \cos \cosh esponenti. \det \dim \ker \lg \max \min \lim_{x\to \infty} f(x) \tan \tanh Tabella 9.8: Funzioni e operatori comuni predefiniti in LATEX. \sup_n \{a_n\} anche possibile definire nuove funzioni, tramite il comando reMathOperator ‘\DeclareMathOperator’; questo comando vuole due argomenti, il primo dei quali è un comando da definire (completo di \) ed il secondo il testo che apparirà come nome della funzione. Per esempio, se volessimo chiamare “sen” la funzione seno, potremmo dare a LATEX il comando \DeclareMathOperator{\sen}{sen} poi scrivere formule sup Ú an Ü n \max_{1\leq i \leq N} a_i È e lim f º x » xø ∞ come \(y = \sen x\). Alcuni dei comandi riportati in figura 9.8 non corrispondono in realtà a delle funzioni matematiche, ma a degli “operatori”, intendendo con questo che TEX permette di specificare degli estremi come per i simboli di integrale, sommatoria, ecc. La differenza con un simbolo di funzione si vede solo in modalità display max ai 1ù iù N Tabella 9.9: Esempi di simboli di operatori: il posizionamento dei deponenti è analogo a quello dei simboli di integrale, sommatoria, ecc. ¤yy!~%({?"" Se avete provato a scrivere qualche formula in TEX, mentre leggevate questo capitolo, non vi sarà sfuggito che le parentesi (e più in generale ogni delimitatore di TEX) non si ingrandiscono automaticamente a coprire le formule che racchiudono: il dimensionamento corretto delle parentesi intorno ad una formula è un compito complesso, quindi occorre istruire appositamente LATEX. I comandi ‘\left’ e ‘\right’ tentano \left il dimensionamento automatico delle pa- \right 62 ‘\left’ e ‘\right’, tutte le parentesi, calcolando la minima altezza necessaria a racchiudere tutta l’espressione rentesi hanno la stessa dimensione ú che circondano. Ciascuno di questi co(perché tanto basta per racchiudere mandi deve essere seguito da un delimiun’espressione); tatore valido: una parentesi oppure uno 3. le dimensioni dei delimitatori non dei simboli della figura 9.2. ‘\left’ e variano con continuità, ma a piccoli ‘\right’ devono sempre essere appaiati, salti: superare di poco la soglia per ma i loro argomenti no: è possibile, ad un salto farà scegliere automaticaesempio, aprire un’espressione con una mente le parentesi della dimensione parentesi tonda e chiuderla con una quasuccessiva. dra. In particolare, se l’argomento di uno dei due è il carattere ‘.’, allora il corriSi può ricorrere al dimensionamento spondende delimitatore è invisibile: que- manuale con i comandi riportati in figusto si può usare come nel terzo esempio di ra 9.8; la sintassi è la stessa di ‘\left’ e figura 9.10. L’uso di ‘\left’ e ‘\right’ è ‘\right’. \left \bigl \right Ù xy Û \bigr \left[ x^y \right] \left\lvert \frac{1}{1+x} \right\rvert x y x y 1¶ x x y x y \biggl \biggr x y Tabella 9.11:d fLe varie dimensioni disponibili per il dimensionamento manuale delle dx xõ 0 parentesi. \left. \frac{df}{dx} \right|_{x=0} aû \Bigl\lvert \frac{a’}{b’} \Bigr\rvert ¤y¤y !lµ"b!û ~%ü" &{1: êM}`~*l? Tabella 9.10: Esempi di dimensionamento delle parentesi. adeguato nella maggior parte dei casi, ma ci sono tre situazioni in cui è opportuno dimensionare manualmente le parentesi: 1. quando l’espressione racchiusa tra ‘\left’ e ‘\right’ contiene esponenti o deponenti: in questi casi la dimensione calcolata automaticamente risulta essere maggiore di quella necessaria; 2. se, annidando diverse coppie di 1 \Bigl \Bigr L’uso dei diversi stili di caratteri nelle formule serve in genere a produrre varianti grafiche di lettere o simboli, per aumentare il numero di segni disponibili, piuttosto che per marcare la diversa significatività di un brano, come avviene nel testo ordinario; dunque i comandi che andiamo ad esaminare si applicheranno raramente a formule più lunghe di un piccolo gruppo di caratteri. Abbiamo già visto come i comandi per cambiare lo stile dei caratteri abbiano un 63 \Biggl \Biggr x y funzionamento diverso nel modo matematico: permettono di inserire testo ordinario in una formula, secondo lo stile indicato. Come si fa allora per inserire una “A” in carattere grassetto in una formula? Si usano comandi simili, sostituendo però il prefisso \math al prefisso \text: la figura 9.12 riporta un elenco. Ognuno di questi comandi accetta un solo argomento: la formula da rendere nello stile corrispondente. Tutti i simboli sono disponibili in tutti gli stili? Provate ad ottenere lettere greche con ‘\mathbf’, ‘\mathsf’ o ‘\mathtt’. Il simbolo “<” si può avere in ‘\mathsf’? Ed in ‘\mathbf’? E il simbolo di “maggiore-o-uguale”? Simboli in grassetto Dato che le lettere greche e molti simboli non alfabetici non si possono ottenere con ‘\mathbf’, LATEX definisce i comandi ‘\boldsymbol’ e ‘\pmb’ per raggiungere questi effetti. La figura 9.13 mostra le \mathbf{0123456789 AaBbCc \dots Zz} 0123456789AaBbCc www Zz differenze tra i due ed il normale carattere \mathfrak{0123456789 AaBbCc \dots Zz} ýXþ8ÿ www matematico. ‘\boldsymbol’ accetta un so\mathrm{0123456789 AaBbCc \dots Zz} 0123456789AaBbCc www Zz !"#$&%(')*,+ www.-/ {} \mathbf{} \boldsymbol{} 0132465676869:6;6<6=6>?6@A wwwBC 0 0 0 0 DFaEHG wwwJI a a a K,LNM wwwPO \mathsf{0123456789 AaBbCc \dots Zz} \mathtt{0123456789 AaBbCc \dots Zz} \mathcal{ABC \dots Z} \mathbb{ABC \dots Z} Tabella 9.12: I vari stili disponibili per i caratteri matematici. Negli ultimi due è possibile produrre solo lettere maiuscole. Alcune precauzioni d’uso: Q \alpha + \infty α ¶ ∞ α 0 a α ∞ ∞ α ¶ ∞ \pmb{} ¶ ¶ Tabella 9.13: Differenze tra il normale carattere matematico, e le varie specie di grassetto disponibili in LATEX. \boldsymbol ‘\mathfrak’ e ‘\mathbb’ sono disponibili solo se si è caricata l’estensione amsfonts nel preambolo, con la riga: ‘\usepackage{amsfonts}’. lo argomento, che deve essere una lettera, una cifra od un comando che produce un simbolo (ad esempio, \pi o \cap), e disegna una versione in grassetto del simbolo, cifra o lettera indicato. Q il comando ‘\mathnormal’ permet‘\pmb’ ha la stessa sintassi di \pmb te di ritornare temporaneamente al‘\boldsymbol’, ma effetti grafici lo stile normale di scrittura malievemente differenti. tematica, nel mezzo di una formula composta con un carattere ¤y6Rykz.|k|k:{1: !":!|k differente. TEX utilizza lo stesso sistema per comporQ ‘\mathcal’ e ‘\mathbb’ seleziona- re le lettere accentate del testo ordinario no font che hanno solo le lettere (come à, é, ï) ed i simboli che si usano maiuscole. nella scrittura matematica per distingue64 Codice LATEX Formula re differenti specie di variabili (segni di vettore, tilde, ecc.); questi ultimi prendo\widehat{Ma} Ma S no perciò il nome di “accenti matemati\widetilde{Ma} Ma ci” nel gergo TEXnico. Abbiamo già visto \overline{xyz}, \underline{xyz} xyz, xyz i comandi per produrre accenti nel testo \overleftarrow{xyz}, \underleftarrow{xyz} xyz, U ¸ xyz U ¸ corrente, la figura 9.14 riporta i comandi ¸V \overrightarrow{xyz}, \underrightarrow{xyz} xyz, xyz ¸WV disponibili in LATEX per produrre accen\overleftrightarrow{xyz}, \underleftrightarrow{xyz} xyz, xyz U V ti matematici. Esistono dunque due tipi U V \overbrace{xyz}, \underbrace{xyz} xyz , xyz di questi comandi, uno da utilizzare solo nel modo matematico per comporre formule, e l’altro da usare solo nel testo or- Tabella 9.15: I comandi per ornare formule dinario; TEX riporta un errore se usate un più larghe di una lettera. comando nel contesto sbagliato. Formula Codice LATEX k volte Formule Formule \(\overbrace{x+\dots+x}^{\text{\(k\) volte}}\) \Acute a á \Grave a à x ¶ÄÄı¶ x \Bar a ā \Hat a â T1 T2 www Tn \(\underbrace{T_1 T_2 \dots T_n}_{=S^{-1}}\) \Breve a ă \Tilde a ã õ SX 1 \Check a ǎ \Vec a aT ... a \Ddot a ä \dddot a Tabella 9.16: Esempi di testo a completare .... \Dot a ȧ \ddddot a a l’ornamento di una formula. Tabella 9.14: I comandi che producono accenti in LATEX. Gli ultimi tre accenti sono usati solo nel modo matematico. LATEX definisce dei comandi speciali per ornare formule più larghe di una lettera: la figura 9.15 ne riporta l’elenco completo. Tutti questi comandi accettano argomenti di lunghezza arbitraria, ad eccezione di ‘\widehat’ e ‘\widetilde’ che possono allargarsi al più su 3 lettere (provare per credere). brace e I comandi ‘\underbrace’ race ‘\overbrace’ permettono di disporre delle scritte sopra o sotto il segno che appongono su una formula, tramite la consueta notazione degli esponenti e deponenti: un esponente ^{...} dopo ‘\overbrace’ indicherà il testo da collo- care sopra la parentesi graffa, così come un deponente _{...} dopo ‘\underbrace’ specifica quello da porre sotto la parentesi graffa. Esaminiamo gli esempi di figura 9.16: siccome ‘\underbrace’ e ‘\overbrace’ funzionano solo in modo matematico, sia l’argomento di questi comandi, che l’eventuale esponente o deponente vengono interpretati come formule. Nel primo esempio di figura 9.16, si usano il comando ‘\text’ per inserire del testo (che a sua volta contiene una formula!). Accenti doppi Gli accenti di figura 9.14 si possono raddoppiare: ad esempio, \Bar{\Bar A} (Quiz: perché il secondo accento è tra pa- 65 e ‘\underset’ si possono usare solo nel modo matematico. Come si può mettere un accento sopra le lettere “i” o “j”? Provando, noterete che il puntino sta pressappoco all’altezza dell’accento, e dà un risultato esteticamente poco piacevole; TEX definisce \imath e \jmath da usare in combinazione con i comandi che producono accenti per ottenere “i” e “j” correttamente accentate: \Grave\imath renderà appunto una lettera “ì”. Come dice il nome, questi due comandi funzionano solo nel modo matematico. \accentedsymbol{\Ttildetilde}{\Tilde{\Tilde T}} Il comando ‘\not’ permette di sovrap- \not porre una barra “ ¼ ” al simbolo che lo crea il comando ‘\Ttildetilde’ che disegue; si possono creare così i segni segna una “T” sormontata da una doppia “diverso-da”, “non-equivalente”, ecc. in tilde. Sono possibili anche combinaziouna formula. Sebbene ‘ \not ’ non sia proni molto più orribili. I manuali di LATEX priamente un accento, il principio di funconsigliano di definire nel preambolo del zionamento di questo comando è lo stesso documento un comando per ogni simbolo accentato di cui ci sarà bisogno in seguito. di ‘\Acute’„ ‘\Bar’, ecc. rentesi graffe?) produce una lettera “A” sormontata da una doppia riga. Questa Yoperazione di raddoppiamento è complicata e può rallentare TEX se eseguita troppo spesso; LATEX definisce pertedsymbol ciò il comando ‘\accentedsymbol’, che permette di costruire comandi che producono combinazioni complesse di accenti. ‘\accentedsymbol’ accetta due argomenti: il primo è il nome di un comando da definire (completo di \) ed il secondo è il codice LATEX per produrre il simbolo accentato che vogliamo: et set Attenzione! ‘\accentedsymbol’ si può ¤yy:¦ s "I!~8} " usare solo nel preambolo di un documento; metterlo nel mezzo del testo pro- Un’ultimo avviso: LATEX permette di usavocherà un errore “Undefined control re il carattere “$” al posto di \( e \), ed in alcune situazioni questo è necessario sequence.” (\( e \) non funzionano in alcuni contesti, Altri accenti matematici vedremo in quali in una prossima puntaLATEX mette a disposizione anche un cota). Analogamente, $$ è un sinonimo di mando per approssimare i tipi di accen\[ e \]. Io vi consiglio di usare la forti non disponibili coi comandi standard; ma con le parentesi matematiche, perchè il comando ‘\overset’ accetta due argorende più immediato capire dove inizia e menti, il primo dei quali è un simbolo finisce il modo matematico: se dimentiche verrà collocato sopra il testo indicate un $ alla fine di una formula, allora cato nel secondo argomento. Ad esemsi che cominciano i guai www pio, \overset{*}{X} scriverà un asterisco sopra la lettera “X”. Esiste anche un comando ‘\underset’ che pone il simbolo nel primo argomento sotto il testo. Attenzione! I comandi ‘\overset’ 66 Parte IV Argomenti specifici 67 } }[Z]\ to: ‘figure’ comincia le didascalie con la dicitura “Figura”, mentre ‘table’ con “Tabella”. Figure e tabelle sono numerate separatamente, e sono riportate in elenchi diversi. L’estensione ‘float’ permette di defini6Ryy }~O_^1?".!{1 re nuovi tipi di corpi fluttuanti, ciascuno con la sua numerazione e il suo proprio Una “figura” è una qualunque porzione elenco. di materiale tipografico che può essere disaggregata dal corpo del testo che la 6Ry ,y:¦ lµ({1 figure circonda e posizionata indipendentemente sulle pagine, a seconda delle esigenze L’ambiente ‘figure’ racchiude materia- figure di composizione. Infatti, mentre LATEX le tipografico che può essere posizionato può separare le righe di testo di un pa- sulla pagina dove compare nel documenragrafo per spezzarlo tra due pagine suc- to o su quelle successive. Tutto il codicessive, non può fare lo stesso con un’il- ce LATEX che può apparire in un paragralustrazione: dunque muoverà la figura fi- fo può apparire all’interno di un ambienno a trovare un pagina con spazio a suf- te figure: testo semplice, formule mateficienza. Illustrazioni, tabelle, ecc. ven- matiche, comandi grafici, ecc. Ecco un gono detti “corpi fluttuanti” (floating bo- esempio: dies) nel gergo di LATEX, proprio perché \begin{figure} “fluttuano” sopra il testo fino a trovare {\em Questa inutile figura è una opportuna collocazione. composta di solo testo.} LATEX definisce due ambienti per in\end{figure} cludere corpi fluttuanti in un documento: ‘figure’ e ‘table’. Il primo serve per illu- che produce un corpo fluttuante fatto da strazioni e grafici, il secondo per le tabel- un paragrafo con il testo “Questa inutile le; non c’è però differenza sintattica tra i figura è composta di solo testo”. Ancora due, né vera differenza di comportamen- un altro esempio: Questo capitolo spiega i comandi LATEX che servono ad includere illustrazioni, schemi, tabelle, ed altro materiale sganciato dal testo che lo circonda, ad apporvi didascalie e a generare indici. 68 on inserito in un documento con il comando \begin{figure} \[\int^a_b 3x^2 dx = a^3-b^3\] ‘\listoffigures’. \listoffigures \end{figure} Si possono inserire più comandi \caption in un ambiente figure: LATEX in questo caso, la figura è una formula. Un ambiente figure non può essere contenuto in altri ambienti, ma può essere messo all’interno di un paragrafo: LATEX di fatto comporrà il testo precedente e seguente la figura in un unico capoverso. L’uso più comune di un ambiente figure è comunque quello di inserire illustrazioni grafiche per mezzo del comando ‘\includegraphics’. Per esempio, apporrà diverse didascalie (numerate) alla figura, nell’ordine in cui sono specificate dai comandi \caption. Riferimenti alle figure Ogni figura viene numerata; LATEX può memorizzare il numero di una figura per riferirvisi in altri punti del documento: si inserisce un comando \label all’interno dell’ambiente figure, e si possono poi utilizzare i comandi \ref e \pageref \includegraphics[width=0.33\textwidth] come nella sezione 5.5: {luther.eps} Didascalie Per inserire una didascalia sotto una figura si usa il comando ‘\caption’ all’interno dell’ambiente figure; questo comando accetta un solo argomento, il testo della didascalia. Un esempio: \begin{figure} . . . \label{fig:figura1} \end{figure} . . . Vedi la figura~\ref{fig:figura1} www Figure nelle pagine con due colonne Quando un documento è impaginato su due colonne la larghezza di un ambiente figure è quella di una colonna; per creare una figura che si estende su due colonne (ovvero per tutta l’ampiezza della pagina), si deve usare un ambiente ‘figure*’. figure* Il testo della didascalia viene anche in- Questo ambiente ha la stessa sintassi di serito nell’indice delle figure: quando è figure; ‘figure’ e ‘figure*’ condividono troppo lunga, si può specificare il testo la numerazione e l’elenco. da inserire nell’indice come argomento 6Ry ¡,y:¦ lµ({1 table opzionale al comando \caption: \begin{figure} \[\int_0^1 x dx = 1\] \caption{Una formula sbagliata, che molto scandalo ha sollevato su Linux\&C.} \end{figure} Le classi di documento standard di LATEX definiscono un ambiente ‘table’, per table creare tabelle che possono scorrere rispetL’elenco delle figure viene tenuto in un to al testo che le circonda e possono essefile con estensione .lof. L’indice viene re posizionate sulla pagina dove compa\caption[  titolo-per-indice à ] {  didascalia à } 69 iono nel documento o su quelle successive. Gli ambienti table hanno una numerazione ed un elenco separati e distinti da quelli delle figure. La sintassi dell’ambiente table è la stessa dell’ambiente figure; tutto quanto detto per le didascalie e i riferimenti incrociati agli ambienti figure valgono anche per gli ambienti table. Gli ambienti table mantengono un elenco in un file con estensione .lot. L’indice delle tabelle viene inserito in un documento con il ftablescomando ‘\listoftables’. Corrispondentemente, esiste un ambiente ‘table*’ per creare tabelle che si estendono su due colonne. ti a larghezza doppia ‘figure*’ e ‘table*’; t (top, in alto) tenta di inserire la figura in cima alla pagina corrente o in una successiva; b (bottom, in basso) tenta di inserire la figura in fondo alla pagina corrente o in una successiva; p (page, pagina) crea una pagina separata per contenere solo figure e tabelle. Ad esempio, il codice 6RyçyO}D!}{1©(1Zs~8a \begin{figure}[hp] . . . \end{figure} !µ: tenta di inserire la figura nel punto in cui A EX utilizza un meccanismo piuttosto appare; se LTEX non riesce, la metterà in una pagina a parte, possibilmente con complicato per posizionare i corpi flutaltre figure e tabelle. tuanti all’interno di un capitolo, che dà Se nulla è specificato, LATEX assume le buoni risultati quando si hanno poche figure, ma richiede un aggiustamento ma- indicazioni ‘tbp’. nuale quando le illustrazioni sono troppe Aggiustare la posizione o troppo grandi. Come tutti gli aggiustamenti, quello delGli ambienti figure e table accettano la posizione di figure e tabelle andrebbe un argomento opzionale che suggerisce a fatto per ultimo, seguito solo dai piccoli LATEX una buona posizione per la figura o ritocchi alla dimensione delle pagine (cfr. tabella; questo argomento opzionale è una sezione 8.3). combinazione di uno o più dei seguenti Un primo tentativo sarà quello di concaratteri: trollare attentamente le indicazioni di posizionamento per le figure e le tabelle, h (here, qui) tenta di inserire la figu- cercando di tenere per ciascun fluttuanra nella stessa posizione, relativa- te solo quelle indicazioni effettivamente mente al testo corrente, di quella utili. I tentativi ‘htb’ possono anche falche occupa il suo codice nel file lire, ma il tipo ‘p’ avrà sempre succes.tex—attenzione! la posizione ‘h’ so (cioè LATEX saprà sempre creare una non si può usare con gli ambien- nuova pagina per le figure). LAT 70 Successivamente, si può usare il co- essfloats mando ‘\suppressfloats’ che impedisce vere mo di nare e? [2, il posizionamento di fluttuanti nella pagina in cui appare (e solo in quella!); un argomento opzionale ‘t‘ o ‘b’ proibisce a LATEX di ancorare figure in quella posizione, cioè ‘\suppressfloats[t]’ impedirà di avere fluttuanti in cima alla pagina corrente. Infine, un segno di punto esclamativo ‘!’ dopo una (ed una sola) delle lettere di posizione, istruisce LATEX a rilassare i suoi vincoli per l’inserimento di una figura in quella posizione (in particolare ignorare ogni ‘\suppressfloats’ in effetto); così, Il principale comando definito da ‘float’ è ‘\newfloat’; con la sintassi \newfloat \newfloat{  nome à }{  pos à }{  ext à } si definisce un ambiente per corpi fluttuanti chiamato  nome à , il cui elenco viene tenuto in un file con estensione ‘  ext à ’, posizionati secondo la specifica ‘  pos à ’. Ad esempio, \newfloat{formula}{p}{fml} definisce un ambiente formula con una sua propria numerazione; le figure di tipo ‘formula’ saranno posizionate di preferenza su una pagina apposta, ed il loro indice sarà tenuto in un file .fml. \begin{figure}[h!] Con il comando ‘\floatname’ si può \floatname . . impostare il nome di ogni nuovo tipo di . figure, quello che aprirà una didascalia; \end{figure} questo comando accetta due argomenti, è la migliore approssimazione all’indica- il primo è il nome di un nuovo ambienzione “metti proprio qui questa figura!”. te fluttuante, ed il secondo il testo che Allo stesso modo, inizierà ogni didascalia. Ad esempio, \begin{table}[t!] . . . \floatname{formula}{Formula} farà in modo che le didascalie degli ambienti ‘figure’ si aprano con “Formula” in combinazione con ‘\suppressfloats’ seguito dal numero progressivo. può servire per forzare LATEX a inserire Per includere l’indice delle figure di un una tabella in cima ad una pagina. certo tipo si usa il comando ‘\listof’: \listof \end{table} 6Ry ó,ya`?}<::"OZ_^1?¢!{1 \listof{  nome à }{  titolo à } L’estensione ‘float’ permette di definire nuovi ambienti per corpi fluttuanti, ciascuno col suo elenco e una numerazione separata. Inoltre ‘float’ permette di modificare l’aspetto grafico delle decorazioni intorno ai nuovi tipi di figure (p. es. riquadrarle). che viene sostituito da un elenco degli ambienti di tipo ‘  nome à ’, intitolato ‘  titolo à ’. Ad esempio, per ottenere un indice degli ambienti ‘formula’ definiti prima, scriveremo: 71 \listof{formula}{Elenco delle formule} È bene definire un tipo distinto di flut- Per esempio, le figure di questo quatuante per ogni tipo di figura inclusa in un derno sono prodotte con il comando Y documento: per esempio, questo quader- “\floatstyle{ruled}”. no ha un ambiente per i listati, uno per le schermate, uno per gli esempi di LATEX, ecc. Numerazione delle figure Un quarto argomento, opzionale, di \newfloat permette di numerare le figure di un certo tipo all’interno di una unità sezionale del documento: \newfloat{  nome à }{  pos à }{  ext à } [  unità-sezionale à ] Per esempio, \newfloat{formula}{p}{fml}[chapter] farà in modo che gli ambienti di tipo ‘formula’ siano numerati all’interno di un capitolo (cioè la numerazione riparte da 1 con ogni nuovo capitolo). Decorazione delle figure Il comando ‘\floatstyle’ permette di decorare tutti i tipi di figure definiti dai successivi comandi \newfloat (fino ad un altro ‘\floatstyle’). Il comando style ‘\floatstyle’ accetta un solo argomento, il nome di uno dei tre stili di decorazione predefiniti: plain nessuna decorazione intorno alla figura, la didascalia in basso; boxed il corpo della figura è racchiuso in un riquadro, la didascalia sotto il riquadro; ruled righe orizzontali separano la didascalia dalla figura ed entrambe dal corpo del testo, la didascalia è in alto. 72 } }[ZaZ Questo capitolo spiega come introdurre illustrazioni ed altri elementi grafici generati con un programma esterno in un documento LATEX. Si discute anche di come convertire le immagini in un formato compatibile col sistema teTEX, e di quali programmi possano essere utili per creare immagini, diagrammi, grafici, ecc. Poiché le illustrazioni sono in genere fuori corpo del testo, questo capitolo si accompagna al numero 10. \ includegraphics { figure / mozilla .eps} yy´{1|k s(~%& ¢"~,!!}{1 L’estensione ‘graphicx’ serve per l’inclusione di illustrazioni nei formati grafici più diffusi: .eps, .png, .jpg, ecc. Bisogna caricare questa estensione nel preambolo, con il comando ‘\usepackage{graphicx}’. Il principale comando definito da degraphics ‘graphicx’ è ‘\includegraphics’; questa istruzione vuole un solo argomento, il nome del file da inserire. Un esempio è in figura 15. Il comando \includegraphics si può usare in corpo di testo: in questo caso inserisce la figura all’interno della riga corrente, eventualmente allontanando questa dalle precedenti per evitare sovrapposizioni col testo, per cui è bene usar- x Esempio 15: Inclusione di una illustrazione esterna lo solo per piccoli segni grafici. Nel caso di illustrazioni di maggiori dimensioni, è bene usare un ambiente figure (cfr. capitolo 10): 73 \begin{figure}[htbp] \includegraphics{luther.eps} \caption{Il vero volto di Luther Blisset.} \end{figure} y ,y°<~,Z"êM}~* !X}{? "s ¦ l!({? Una sintassi alternativa di ‘\includegraphics’ permette di compiere alcune operazioni sulle immagini da includere in un documento LATEX, come cambiare le dimensioni ed il fattore di scala, ruotare l’immagine o mostrarne solo una porzione. La sintassi generale per queste operazioni è: \includegraphics[  opzioni à ]{  file à } dove ‘  file à ’ è il nome del file che contiene l’immagine, e ‘  opzioni à ’ è una lista di opzioni separate da virgole. Cambiare le dimensioni In assenza di indicazioni, \includegraphics calcolerà le dimensioni di una immagine considerando ogni pixel grande circa un punto tipografico.1 Per molte immagini, ad esempio le schermate, questa dimensione è eccessiva: \includegraphics permette di variarla con le opzioni ‘width’, ‘height’ e ‘scale’. Le opzioni ‘width=  ampiezza à ’ e ‘height=  altezza à ’ permettono di riscalare l’immagine alle dimensioni date; ‘  ampiezza à ’ e ‘  altezza à ’ devono essere indicazioni di dimensione valide (cfr. appendice ??). Ad esempio, \includegraphics[width=5cm, height=10cm]{figura.eps} 1 Per la precisione, \includegraphics considera 1pixel b 1bp (big point), dove 1bp c 1 d 004pt (punto tipografico). inserisce nel documento un’immagine delle dimensioni 5 e 10. È possibile specificare una sola tra le misure di altezza e ampiezza, purché si aggiunga l’opzione ‘keepaspectratio’: l’altra misura verrà calcolata in modo da conservare il rapporto esistente nell’immagine originale. È più utile indicare le dimensioni in relazione a quelle della pagina di testo. Per ‘width’ si possono usare le ampiezze speciali ‘\textwidth’ (ampiezza della pagina), ‘\columnwidth’ (ampiezza della colonna di testo), ‘\linewidth’ (ampiezza della riga di testo); per esempio, ‘\includegraphics [width=\columnwidth] {figura.eps}’ inserisce l’immagine ‘figura.eps’ ridimensionandola in modo che l’ampiezza sia pari a quella della colonna di testo. Ciascuna di queste lunghezze può essere ulteriormente ridotta, precedendola con un numero decimale compreso tra 0 e 1: ‘\includegraphics [width=0.8\textwidth] {figura.eps}’ inserisce l’immagine ‘figura.eps’ riscalandola in modo che l’ampiezza sia 80% della pagina. Per ‘height’ si può usare l’altezza speciale ‘\textheight’, con le stesse regole: ‘\includegraphics [height=0.5\textheight] {figura.eps}’ inserisce ‘figura.eps’ riscalandola la solita in modo che l’altezza sia metà di quella della pagina. Ruotare l’immagine L’opzione ‘angle= f angolo g ’ ruota l’immagine dell’ f angolo g specificato. L’opzione ‘origin= f pos g ’ individua il centro della rotazione; ‘ f pos g ’ è una in- 74 dicazione composta da una delle seguenti sintassi: ‘viewport= f rettangolo g ’, dove lettere: ‘ f rettangolo g ’ è formato da quattro coordinate, separate da uno spazio, nell’ordit il centro di rotazione è sul margine ne: l’ascissa dell’angolo in basso a sinisuperiore della figura; stra, l’ordinata dell’angolo in basso a sinic il centro di rotazione è il centro della stra, l’ascissa dell’angolo in alto a destra, l’ordinata in alto a destra. figura; b il centro di rotazione è sul margine inferiore della figura; i6i6j kjalnmponqsrut(v3wyx,qt{z}|]w Il supporto per la grafica è esterno al programma TEX, e dipende in modo essenziale dalle capacità dei programmi di l il centro di rotazione è sul margine stampa e visualizzazione (XDvi, Dvips, sinistro della figura; ecc.), per cui ‘graphicx’ permette di indic il centro di rotazione è il centro della care quale sistema usare tramite una opzione; ecco la lista delle opzioni più cofigura; muni, e per ciascuna il tipo di immagini r il centro di rotazione è sul margine che si possono includere: destro della figura. dvips da usare in abbinamento col proLa figura 16 mostra alcuni esempi di gramma di conversione Dvips (cfr. rotazione. sezione 3.2.2), permette immagini nei formati .eps (anche compresTagliare un riquadro so!), .pcx, .bmp, .msp, .pntg e Per tagliare un’immagine si aggiun.pict; ge l’opzione ‘clip’ in un comando ‘\includegraphics’. Ci sono poi due diverse sintassi per indicare il rettangolo di pdftex da usare col programma PDFTEX, che genera direttamente un file immagine da mostrare. .pdf invece del .dvi, permette imL’opzione ‘trim’ permette di ritagliare magini nei formati .png, .jpg, .mps un rettangolo dell’immagine da mostrare, e .pdf; con la sintassi: e da una delle seguenti: dvipdfm da usare col programma ‘dvipdfm’, che converte i file .dvi dove ‘ f s g ’ è il numero di pixel da tagliare in file .pdf, permette immagini nei alla sinistra dell’immagine, ‘ f b g ’ quelli da formati .jpg, .bmp e .pdf. tagliare in basso, ‘ f d g ’ a destra e ‘ f a g ’ in alto. Per un elenco completo si veda la docuAnche l’opzione ‘viewport’ permet- mentazione dell’estensione graphicx. Se te di ritagliare un rettangolo dall’imma- nessuna opzione è specificata, ‘graphicx’ gine da mostrare; ma con una diversa assumerà ‘dvips’. trim= f s ghf b gHf d gHf a g 75 [Mi sa che i da .pcx in poi sono formati solo per la versione DOS ~~~ ] 1. \ includegraphics [width=18pt, angle=36]{ figure / tetex . eps} \ hrule 2. \ includegraphics [width=36pt, angle=72, origin =cc] { figure / tetex . eps} \ hrule 3. \ includegraphics [width=54pt, angle=108, origin = tl ] { figure / tetex . eps} \ hrule 4. \ includegraphics [width=72pt, angle=144, origin =br] { figure / tetex . eps} 1. 2. 3. 4. Esempio 16: Esempi di figure ruotate \ includegraphics [width=\ linewidth , trim =30 105 45 30, clip ] { figure / mozilla .eps} Esempio 17: Ritagliare un’immagine 76 to elenco di software liberamente disponibile per il disegno tecnico con Linux/BSD. Convertire tra diversi formati Il programma ‘convert’ è in grado di convertire (quasi) ogni formato grafico in (quasi) ogni altro; la sintassi è semplicissima: convert f file1 gHf file2 g ‘convert’ riconosce automaticamente il formato di ‘ f file1 g ’ e ‘ f file2 g ’ dall’estensione del nome; consultate la pagina man ‘convert(1)’ per un elenco di tutti i formati supportati. ‘convert’ può operare una serie infinita di modifiche alle immagini, consultate la pagina man ‘convert(1)’ per informazioni. Creare diagrammi I due programmi più diffusi per creare diagrammi da includere in LATEX sono “XFig” e “DIA”; entrambi girano sotto X/Windows e permettono di vedere i diagrammi mentre li si disegna. “XFig” ha pulsanti e menu per quasi ogni esigenza, può esportare i suoi grafici in diversi formati (compreso .eps per l’inclusione nei documenti LATEX) ed ha la possibilità di caricare una libreria di simboli da usare come “mattoncini” per la costruzione di un diagramma: in questo modo si possono realizzare diagrammi circuitali, schemi di reti, ecc. “XFig” è disponibile presso http: //www.xfig.org/. “DIA” è sicuramente più semplice ed amichevole da usare rispetto a XFig, ma risente della sua giovane età: ha un minore assortimento di strumenti di disegno e di simboli già disegnati. Presso http://sal.kachinatech.com/ E/2/index.shtml troverete un comple77 t(NwJvonJo[] i3ji6jayz}wJq}o&_w|]onrt{w già definiti; per via dei meccanismi interni di LATEX, non si possono definire Ormai vi sarete accorti che la scrittura in TEX tende a volte ad essere un po’ verbo- neanche comandi il cui nome comincia sa, e che le stesse sequenze di comandi ri- con “\end”. (Per esempio, ‘\endymione’.) L’espansione di un comando può concorrono più volte nel corso di uno stesso tenere altri comandi, ma non il comando documento; per fortuna e per comodità, che si sta definendo: LATEX permette ai suoi utenti di definire nuovi comandi. Il comando per fare ciò \newcommand{\gnu}{\gnu’s Not si chiama, appunto, ‘\newcommand’, ed ha \textsc{Unix}} diverse forme sintattiche. Comandi senza argomenti Il più semplice utilizzo di ‘\newcommand’ sta nel definire abbreviazioni per parti di testo frequentemente ricorrenti; in questa sua forma più semplice, \newcommand prende due argomenti, il primo dei quali è il nome del comando da definire (completo di \) ed il secondo è una stringa che dovrà essergli sostituita; questa stringa si dice “espansione” del comando. Ad esempio, è una definizione circolare, e provoca un errore “TEX capacity exceeded”. Il 99% delle volte questi errori sono causati da definizioni circolari, e non da una reale necessità di aumentare la memoria a disposizione di TEX. Attenzione! TEX sostituisce l’espansione di un comando quando lo incontra nel testo, e non al momento della definizione: se quindi definite il comando ‘\gnu’ come sopra, TEX riporterà un errore solo alla pri\newcommand{\gnu}{GNU’s Not ma occorrenza di questo comando nel \textsc{Unix}} documento. definisce un nuovo comando ‘\gnu’ il cui Per via della sintassi usata da TEX per effetto sarà di produrre il testo “GNU’s individuare gli argomenti da passare ai Not U NIX”. comandi, tutti gli spazi che seguono un Non si possono definire con comando senza argomenti sono ignora\newcommand dei comandi che siano ti. Si può usare il comando \ (bar78 ra inversa-spazio) per inserire uno spazio dopo un comando. Ancora, si può usare \newcommand per definire notazioni di uso comune: ad esempio, Comandi con argomenti È anche possibile definire nuovi comandi che accettano argomenti (fino a 9; questo è un limite di TEX), usando una forma alternativa di \newcommand: \newcommand{ f comando g }[ f numero degli argomenti g ]{ f espansione g } \newcommand{\R}{\mathbb{R}} permette di usare ‘\R’ per produrre il simbolo del campo dei numeri reali. L’espansione di questo comando contiene ‘\mathbb’ che funziona solo nel modo matematico, perciò anche il nuovo comando \R funzionerà solo nel modo matematico: dovremo perciò scrivere: Se le combinazioni di caratteri #1, P , #9 compaiono nell’espansione, verranno sostituite con il primo, il secondo, P , il nono argomento. (Quiz: perché allora non ci possono essere più di nove argomenti in un comando?) Un esempio chiarirà meglio le cose: \newcommand{\lasecondachehaidetto}[2]{\emph{#2}} il campo \( \R \) dei numeri reali, e non il campo \R \ dei numeri reali. (Perché nell’ultimo esempio ‘\R’ è seguito da barra inversa-spazio?) LATEX permette di aggirare questa limitazione: il comando ‘\ensuremath’ compila in modo matematico il suo unico argomento, indipendentemente dal contesto in cui occorre. Adattando l’esempio precedente, definisce un comando che stampa il suo secondo argomento enfatizzato ed ignora il primo; più in dettaglio, se inseriamo \lasecondachehaidettoperchéquando nel mezzo di un documento, durante la compilazione del documento accade che: 1. TEX lo sostituisce con la sua espansione \emph{#2}; 2. scorre questa alla ricerca delle combinazioni di caratteri #1 e #2; 3. trova #2 e la sostituisce con il secondo argomento “quando”. \newcommand{\R}{\ensuremath{\mathbb{R}}} Alla fine è come se avessimo scritto definisce un comando ‘\R’ che si può usare indifferentemente e con gli stessi effetti sia in mezzo ad un paragrafo di testo che ad una formula. Insomma, i comandi definiti con \newcommand possono funzionare sia nel modo di testo (LR mode) che in quello matematico: tutto dipende dalla loro espansione. \emphquando nel documento. Cosa succede se al posto di #2 si scrive #1? E se ci mettiamo #3? Un esempio più complicato: \newcommand{\D}[2]{\frac{\partial #2}{\partial #1}} Cosa fa questo comando? Quanti argomenti accetta? Si può usare in modo testo? (cfr. figura 12.1) 79 Comandi con argomenti facoltativi Attenzione! TEX sostituisce ad un coUn’ultima forma di \newcommand consen- mando la sua espansione quando quete di definire un comando il cui primo sto comando occorre nel documento, quindi anche con \renewcommand bisoargomento è opzionale: gna prestare attenzione alle definizioni \newcommand{ f comando g }[ f numero<deglicircolari: argomenti g ][ f valore del primo argomento g ]{ f espansione g } Il primo argomento dovrà essere posto fra parentesi quadre, altrimenti il valore indicato nella definizione verrà sostituito a #1 nell’espansione. Non è possibile rendere facoltativi altri argomenti oltre il primo. Per esempio, definiamo un comando ‘\Ho’ con un solo argomento (facoltativo) che produce una lettera “H” seguita dal suo primo argomento in esponente; se il primo argomento non è specificato, dovrà mettere in esponente un asterisco: \renewcommand{\Vec}[1]{\Vec{\boldsymbol{#1}}} Ridefinire i comandi Non si può usare \newcommand per definire un comando esistente, ma occorre usare la variante ‘\renewcommand’; questa ha esattamente la stessa sintassi di \newcommand, ma permette di costruire solo comandi già definiti. Ad esempio, supponiamo di decidere che vogliamo rappresentare i vettori in stile grassetto, e non con la consueta freccettina; la via più breve per farlo è di ridefinire il comando ‘\Vec’ in modo che stampi il suo argomento in grassetto: \title{Il lavoro mi perseguita, ma io sono più veloce} non produce un comando che pone una freccettina sopra un simbolo in stile grassetto, ma genera invece un errore: TEX non può distinguere \Vec nel secondo argomento da quello nel primo. Ancora, questo distrugge la vecchia definizione di \Vec, e non è più possibile sovrapporre la freccettina ad un carattere! Analizziamo meglio questa situazione: ‘\Vec’ è un comando la cui interpretazione è “metti una freccina sopra il simbo\newcommand{\Ho}[1][*]{\ensuremath{H^{#1}}} lo che segue”, e non “il simbolo che seProvate: cosa produce \(\Ho(X)\)? e gue rappresenta un vettore”; \Vec fornisce \(\Ho[n](X)\)? e con \(\Ho{4}(X)\) quindi una indicazione tipografica. Vicecosa si ottiene? Come estendereste il versa, il comando ‘\title’ fornisce una comando \D definito prima per scrivere indicazione sulla categoria logica del suo derivate di ordine superiore? argomento: implica che il testo “Il lavoro mi perseguita, ma io sono più veloce” è il titolo del documento, quindi deve ricevere un trattamento tipografico particolare (per esempio, sarà stampato in grassetto e con un carattere grande, oppure in maiuscoletto, ecc.); il fatto di aver marcato quel testo come “titolo” permette anche ad esempio di riprenderlo nell’intestazione di ogni pagina, cosa che non sarebbe stata possibile se lo avessimo semplicemente indicato a TEX di impaginarlo \renewcommand{\Vec}[1]{\mathbf{#1}} come “grassetto 18pt.” 80 LATEX non può fornire comandi per marcare la categoria logica di ogni pos sibile brano di testo, ma ciascuno può definire i propri tramite \newcommand e \renewcommand: l’espansione di questi comandi indicherà il trattamento tipografico da riservare a queste particolari parti di testo. Il modo consigliato nei manuali di LATEX per gestire queste situazioni consiste nel definire comandi che indichino la categoria o la funzione logica che un simbolo ha, e usare questi comandi per produrre gli effetti tipografici desiderati. Un esempio per chiarire meglio: l’accento ‘\Bar’ è usato in matematica per svariate notazioni; se in un documento usiamo questo comando per indicare due costrutti diversi (“ P dal contesto risulterà chiaro di cosa si sta parlando P ”), saremo in difficoltà non appena dovremo usarle entrambe in una formula (per la legge di Murphy, questo capiterà quasi certamente). Se invece definiamo: riportare brevi citazioni o parole straniere. Il comando ‘\emph’ ha in effetti una interpretazione come “enfatizza il testo in argomento”, ma non esistono comandi specifici per gli altri due scopi. Potremmo perciò definire: \newcommand{\citazione}[1]{\emph{#1}} \newcommand{\parolastraniera}[1]{\emph{#1}} e poi permetterci di cambiare idea e decidere che vogliamo mettere le citazioni tra virgolette; basterà allora cambiare una sola riga del documento: \newcommand{\citazione}[1]{‘‘#1’’} i3j ja_zwJqo&ywnt{rwJ_vw LATEX permette di definire nuovi ambienti testuali, in maniera parallela a quanto già visto per i comandi. La forma più semplice di definizione di un ambiente è: \newenvironment{ f nome g }{ f inizio g }{ f fine g } dove f nome g è il nome che vogliamo dare \newcommand{\cl}[1]{\Bar{#1}} % chiusura topologica all’ambiente e f inizio g e f fine g sono por\newcommand{\grad}[1]{\Bar{#1}} % parità dell’elemento zioni di codice LATEX che verranno sosti\newcommand{\ext}[1]{\Bar{#1}} % estensione tuite, rispettivamente, a \begin{nome} e potremo scrivere tranquillamente \cl{A}, \endnome. Per esempio, definiamo un am\grad{a}, \ext{f} e cambiare ad esempio biente per le citazioni, derivato da quote ma utilizzi un carattere corsivo: \newcommand{\grad}[1]{|#1|} se dobbiamo applicare sia ‘\grad’ che ‘\ext’ ad un elemento; in questo modo è possibile cambiare consistentemente e facilmente la notazione in tutto un documento. Un altro esempio: il corsivo è usato normalmente nel testo per enfatizzare parole, oppure, invece delle virgolette, per \newenvironment{iquote} { \begin{quote}\begin{itshape} } { \end{itshape}\end{quote} } Il comando \newenvironment non permette di ridefinire ambienti già esistenti; in questi casi occorre usare \renewenvironment. I due comandi hanno la stessa sintassi. 81 Si possono definire anche ambienti che accettano parametri; questi parametri vengono dati come ulteriori argomenti al comando \begin che comincia il nostro ambiente. Ad esempio, l’estensioEffetto attiva un ambiente multicols ne multicol che impagina il testo in più colonne: Codice LATEX \newcommand{\C}{\mathbb{C}} \renewcommand{\H}{ \ensuremath{\mathbb{H}} } Introduciamo ora il campo \(\C\) dei numeri complessi, ed il corpo \H\ dei quaternioni\ldots \newcommand{\D}[2]{ \frac{\partial #2} {\partial #1} } La derivata prima \(\D{x}{f}\) \ldots \newcommand{\D}[3][{}]{ \frac{\partial^{#1} #3} {\partial #2^{#1}} } La derivata prima \(\D{x}{f}\) e la derivata seconda \(\D[2]{x}{f}\) \ldots \renewcommand{\vec}[1]{ \mathbf{#1} } Consideriamo vettori \(\vec a\), \(\vec b\) \ldots Introduciamo ora il \begin{multicols}{2} campo dei numeQuesto testo viene impaginato da \LaTeX\ su due colonne. complessi, Ilri numero di colonneed si il passa come argomento supplementare acorpo \verb’\begin{multicols}’ dei quater- Per usare l’ambiente \texttt{multicols} si deve inserire la riga nioni \verb’\usepackage{multicol}’ nel preambolo. \end{multicols} La vedere derivata Potete come prima LATEX compone questo ∂ f esempio in figura 12.1. ∂x ( Figura 12.1: Testo impaginato su due colonne con l’ambiente multicols Questo testo viene a \begin{multicols} La derivata prima usare l’ambienimpaginato da LATEX Per su due colonne. Il te multicols si de∂f la derivata numero ve inserire la riga ∂x die colonne si passa come argo∂2 f \usepackage{multicol} seconda mento supplementare ∂x2 nel preambolo. Per definire ambienti con paraConsideriamo vetmetri si usa la seguente forma di \newenvironment tori a, b :( \newenvironment{ f nome g }[ f numero g ]{ f inizio g }{ f fine g } Tabella 12.1: Esempi di definizione di nuovi comandi. dove f numero g è il numero di parametri aggiuntivi che si passeranno a \begin{ f nome g }, e tutti gli altri argomenti hanno lo stesso significato che nella forma più semplice di \newcommand. Come già per i comandi, ogni occorrenza di #1 82 in inizio verrà sostituita dal primo parametro, #2 dal secondo, e così via. Atten zione! Nessuna di queste sigle può comparire nella sequenza fine, pena un errore “Illegal parameter reference in definition of P ”. Vediamo un esempio: definiamo un ambiente per produrre una sezione di testo, preceduta e seguita da una riga orizzontale; il titolo della sezione verrà indicato come parametro all’ambiente: \newenvironment{ f nome g }[ f numero g ][ f valore g ]{ f inizio g }{ f fine g } In questo caso, il primo parametro diventa un argomento opzionale di \begin{nome}, e come tale andrà tra parentesi quadre; l’espressione f valore g verrà utilizzata come primo parametro se quest’ultimo è stato omesso. Come esempio, costruiamo un ambiente per impaginare una sezione di testo su più colonne; il numero di colonne sarà il primo parametro, il secondo darà il titolo alla sezione; omettendo il numero di colonne LATEX assumerà ‘3’: \newenvironment{hrulesec}[1] { \newenvironment{colsec}[2][3] \hrulefill % riga orizzontale per tutta l’ampiezza di pagina { \section{#2}\begin{multicols}{#1} } \section{#1} { \end{multicols} } } { ed ecco come si usa: \par % termina il paragrafo precedente e va a capo. \begin{colsec}[2]{Titolo} \hrulefill Notate che il numero di colonne qui sopra è tra } parentesi quadre ‘[’ e ‘]’. Usiamo questo nuovo ambiente con la \end{colsec} sintassi: Provate a inserire un testo più lungo in \begin{hrulesec}{Tutto (o quasi) su Nicolas Barbecue} un ambiente ‘colsec’, e poi ad ometDella sua opera poco si conosce in tere confronto alla quantità di come in il numero di colonne, scritti che egli ideò e realizzò (tristemente famosa è la sua \begin{colsec}{Titolo}. affermazione: ’’Più cose dico più possibilità c’è che qualcheduna di esse sia esatta’’), ed ancor meno si sa della sua vita. \end{hrulesec} Provate questo nuovo ambiente hrulesec: perché rimane dello spazio a sinistra delle righe orizzontali? E se si aggiunge un comando \noindent prima di ogni \hrulefill? E togliendo il comando \par? Infine, sostituite \dotfill al posto di \hrulefill. L’ultima variante di \newenvironment permette di assegnare un valore predefinito al primo parametro: 83 [1] Donald E. Knuth. The TEXbook. Addison-Wesley, 1996. [2] Leslie Lamport. LATEX: A Document Preparation System. Addison-Wesley, 2nd edition, 1994. [3] Roberto Lesina. Il nuovo manuale di stile. Zanichelli, Bologna, 2.0 edition, 1994. 84