Capitolo 50.   LaTeX

$ 50.13.1 $$ 50.13.1 & 50.11.2 array 50.13.7 center 50.8.2 chapter 50.4.2 displaymath 50.13.1 document 50.1.5 enumerate 50.8.3 enumi 50.8.3 enumii 50.8.3 enumiii 50.8.3 enumiv 50.8.3 equation 50.4.2 50.13.1 figure 50.4.2 50.8.7 flushleft 50.8.2 flushright 50.8.2 footnote 50.4.2 50.6.5 itemize 50.8.3 list 50.8.3 longtable 50.11.3 lrbox 50.9.6 makeindex 50.10.3 math 50.13.1 page 50.4.2 50.6.4 paragraph 50.4.2 part 50.4.2 picture 50.12.1 quotation 50.8.4 quote 50.8.4 section 50.4.2 subparagraph 50.4.2 subsection 50.4.2 subsubsection 50.4.2 tabbing 50.11.1 table 50.4.2 50.8.7 50.8.7 tabular 50.11.2 thebibliography 50.10.4 verbatim 50.8.6 verse 50.8.5 \# 50.7.1 \$ 50.7.1 \% 50.7.1 \& 50.7.1 \> 50.11.1 \( 50.13.1 \) 50.13.1 \= 50.11.1 \above 50.13.6 \addcontentsline 50.10.1 \addtocontents 50.10.1 \addtocounter 50.4.2 \addtolength 50.4.1 \addvspace 50.9.2 \Alph 50.4.2 \alph 50.4.2 \appendix 50.1.5 50.5.4 \arabic 50.4.2 \atop 50.13.6 \author 50.1.5 50.5.2 \baselineskip 50.8.1 \begin{document} 50.5.3 \bfseries 50.7.3 \bibitem 50.10.4 \big 50.13.4 \Big 50.13.4 \bigg 50.13.4 \Bigg 50.13.4 \Biggl 50.13.4 \biggl 50.13.4 \Biggr 50.13.4 \biggr 50.13.4 \Bigl 50.13.4 \bigl 50.13.4 \Bigr 50.13.4 \bigr 50.13.4 \bigskip 50.9.2 \bigskipamount 50.9.2 \caption 50.8.7 \centerline 50.8.2 \chapter 50.1.5 50.5.4 \choose 50.13.6 \circle 50.12.1 \cite 50.10.4 \cleardoublepage 50.6.2 50.8.7 \clearpage 50.6.2 50.8.7 \cline 50.11.2 \closeout 50.14.3 \dashbox 50.12.1 \date 50.1.5 50.5.2 \displaystyle 50.13.5 \documentclass 50.1.5 50.5.1 \dotfill 50.9.1 \doublespacing 50.9.4 \emph 50.7.3.1 \endfoot 50.11.3 \endhead 50.11.3 \end{document} 50.5.3 \epsfig 50.12.2 \evensidemargin 50.6.1 \fbox 50.7.5 50.9.5 \fboxrule 50.9.5 \fboxsep 50.9.5 \flushbottom 50.6.2 \fnsymbol 50.4.2 \fontencoding 50.7.4 \fontfamily 50.7.4 \fontseries 50.7.4 \fontshape 50.7.4 \fontsize 50.7.3 50.7.4 \footnote 50.6.5 \footnotemark 50.6.5 \footnotesize 50.7.2 \footnotetext 50.6.5 \footskip 50.6.1 \frac 50.13.6 \frame 50.7.5 50.12.1 \framebox 50.9.5 \frenchspacing 50.3.4 50.3.6 \headheight 50.6.1 \headsep 50.6.1 \hfill 50.9.1 \hline 50.11.2 50.13.7 \hoffset 50.6.1 \hrulefill 50.9.1 \hspace 50.9.1 \Huge 50.7.2 \huge 50.7.2 \hyphenation 50.6.6 \immediate 50.14.3 \include 50.14.1 \includegraphics 50.12.2 \includeonly 50.14.1 \indent 50.8.1 \index 50.10.3 \input 50.14.1 \item 50.8.3 \itemsep 50.8.3 \itshape 50.7.3 \jobname 50.14.3 \kill 50.11.1 \label 50.10.2 \labelitemi 50.8.3 \labelitemii 50.8.3 \labelitemiii 50.8.3 \labelitemiv 50.8.3 \LARGE 50.7.2 \Large 50.7.2 \large 50.7.2 \leftskip 50.8.1 \line 50.12.1 \linebreak 50.6.2 \linespread 50.9.4 \linethickness 50.12.1 \linewidth 50.8.1 \listoffigures 50.8.7 50.10.1 \listoftables 50.8.7 50.10.1 \makebox 50.9.5 50.12.1 \makeindex 50.10.3 \maketitle 50.1.5 50.5.3 \markboth 50.6.3 \markright 50.6.3 \mathbf 50.7.3 \mathcal 50.7.3 \mathit 50.7.3 \mathrm 50.7.3 \mathsf 50.7.3 \mathtt 50.7.3 \mbox 50.6.6 50.9.5 \medskip 50.9.2 \medskipamount 50.9.2 \minipage 50.9.5 \newcommand 50.2.1 \newcounter 50.4.2 \newenvironment 50.2.1 \newlength 50.4.1 \newline 50.6.2 \newpage 50.6.2 \newtheorem 50.13.8 \newwrite 50.14.3 \noindent 50.8.1 \nopagebreak 50.6.2 \normalfont 50.7.3 \normalsize 50.7.2 \numberline 50.10.1 \oddsidemargin 50.6.1 \onecolumn 50.6.2 \onehalfspacing 50.9.4 \openout 50.14.3 \oval 50.12.1 \over 50.13.6 \overbrace 50.13.4 \overline 50.7.5 50.13.4 \pagebreak 50.6.2 \pagenumbering 50.6.4 \pageref 50.10.2 \pagestyle 50.6.3 \paperheight 50.6.1 \paperwidth 50.6.1 \par 50.8 \paragraph 50.1.5 50.5.4 \parbox 50.9.5 50.11.1 \parindent 50.8.1 \parskip 50.8.1 \part 50.1.5 50.5.4 \poptabs 50.11.1 \printindex 50.10.3 \pushtabs 50.11.1 \put 50.12.1 \raggedbottom 50.6.2 \raggedleft 50.8.2 \raggedright 50.8.2 \raisebox 50.7.6 \ref 50.10.2 \refstepcounter 50.4.2 \renewcommand 50.2.1 \renewenvironment 50.2.1 \rightskip 50.8.1 \rmfamily 50.7.3 \roman 50.4.2 \Roman 50.4.2 \rule 50.9.7 \samepage 50.6.2 \scriptscriptstyle 50.13.5 \scriptsize 50.7.2 \scriptstyle 50.13.5 \scshape 50.7.3 \section 50.1.5 50.5.4 \selectfont 50.7.3 50.7.4 \setcounter 50.4.2 \setlength 50.4.1 \settodepth 50.4.1 \settoheight 50.4.1 \settowidth 50.4.1 \sffamily 50.7.3 \singlespacing 50.9.4 \slshape 50.7.3 \small 50.7.2 \smallskip 50.9.2 \smallskipamount 50.9.2 \sqrt 50.13.6 \stackrel 50.13.6 \stepcounter 50.4.2 \stretch 50.9.3 \string 50.14.3 \subparagraph 50.1.5 50.5.4 \subsection 50.1.5 50.5.4 \subsubsection 50.1.5 \tableofcontents 50.1.5 50.5.3 50.10.1 \textasciicircum 50.7.1 \textasciitilde 50.7.1 \textbackslash 50.7.1 \textbf 50.7.3 \textheight 50.6.1 \textit 50.7.3 \textnormal 50.7.3 \textrm 50.7.3 \textsc 50.7.3 50.7.3 \textsf 50.7.3 \textsl 50.7.3 \textstyle 50.13.5 \texttt 50.7.3 \textup 50.7.3 \textwidth 50.6.1 \thanks 50.5.2 \the 50.4 50.4.2 \theenumi 50.8.3 \theenumii 50.8.3 \theenumiii 50.8.3 \theenumiv 50.8.3 \thispagestyle 50.6.3 \tiny 50.7.2 \title 50.1.5 50.5.2 \topmargin 50.6.1 \ttfamily 50.7.3 \twocolumn 50.6.2 \underbrace 50.13.4 \underline 50.7.5 50.13.4 \unitlength 50.12.1 \upshape 50.7.3 \usebox 50.9.6 \usefont 50.7.4 \usepackage 50.1.5 \usepackage[italian]{babel} 50.3.1 50.3.6 \usepackage[T1]{fontenc} 50.3.5 50.3.6 \usepackage[utf8x]{inputenc} 50.3.5 50.3.6 \usepackage{float} 50.8.7 \usepackage{latexsym} 50.13.3 \usepackage{longtable} 50.11.3 \usepackage{makeidx} 50.10.3 \usepackage{setspace} 50.9.4 \usepackage{verbatim} 50.14.2 \value 50.4.2 \vector 50.12.1 \verb 50.8.6 \verbatiminput 50.14.2 \vfill 50.6.2 50.9.2 \voffset 50.6.1 \vspace 50.9.2 \write 50.14.3 \[ 50.13.1 \\ 50.11.1 50.11.2 \] 50.13.1 \_ 50.7.1 \{ 50.7.1 \} 50.7.1 ^ 50.13.6 _ 50.13.6

50.1   LaTeX: introduzione

LaTeX è un pacchetto di macro per TeX molto comune, per facilitare la realizzazione di documenti tipici. Si fa riferimento implicito a questo pacchetto di macro utilizzando un comando specifico per la composizione, come già descritto nella sezione 49.1.3. Pertanto, di solito si ottiene la composizione di un sorgente TeX scritto usando macro LaTeX attraverso il comando seguente:

latex file_sorgente

Normalmente, il file sorgente scritto con macro LaTeX ha la solita estensione .tex; inoltre si usano le stesse procedure per la rielaborazione dei file DVI generati dalla composizione.

In generale, la scrittura di un sorgente LaTeX deve seguire le regole imposte dal suo pacchetto di macro. Ciò significa che le istruzioni o le macro del linguaggio TeX originale potrebbero creare dei conflitti, se l'uso di queste non è previsto espressamente.

Quando si usano solo le macro LaTeX, lasciando da parte TeX, queste macro possono essere viste come comandi del linguaggio LaTeX, mentre le macro diventano quelle definizioni create con il linguaggio LaTeX stesso.

50.1.1   Comandi e modelli sintattici

La necessità di avere il controllo della situazione, fa sì che LaTeX definisca anche un modo proprio per la creazione di altre macro; inoltre, esiste la possibilità di avere degli argomenti opzionali, che si indicano tra parentesi quadre. In generale, è difficile definire in modo completo come possono essere conformate le chiamate ai comandi e alle macro di LaTeX, comunque il modello sintattico seguente dovrebbe darne un'idea sufficiente per cominciare.

\comando[opzioni]...{argomenti}...

È già noto il fatto che le parentesi graffe fanno parte dell'istruzione; inoltre, le parentesi quadre devono essere usate per gli argomenti opzionali, ma se queste opzioni mancano, si omettono anche le parentesi quadre stesse. Per esempio, si può scrivere:

\documentclass[a4paper]{book}

oppure soltanto:

\documentclass{book}

Infine, c'è anche da considerare che alcuni comandi prevedono l'uso opzionale di un asterisco alla fine del loro nome, come nel caso della dichiarazione del titolo di una sezione:

\section{Bla bla bla}

Oppure:

\section*{Bla bla bla}

Il significato dell'asterisco dipende dal comando.

Ricapitolando, un modello sintattico riferito a comandi o macro di LaTeX deve essere letto in modo speciale: le parentesi graffe, le parentesi quadre e l'asterisco fanno parte dell'istruzione; inoltre, se non si indicano opzioni, le parentesi quadre che le delimitano non vanno usate.

50.1.2   Opzioni e argomenti

Fino a questo punto si è visto che le opzioni sono argomenti facoltativi che, se utilizzati, vanno delimitati attraverso delle parentesi quadre. La loro posizione è stabilita dalla sintassi del comando stesso, anche se di solito dovrebbero trovarsi prima degli argomenti normali.

Un comando potrebbe prevedere l'uso di più opzioni in sequenza, o alternate con gli argomenti. Ma oltre a questo, un'opzione potrebbe essere interpretata in modo da estrapolare più sotto-opzioni, delimitate generalmente attraverso una virgola.

Sugli argomenti c'è poco da aggiungere, tranne ripetere che il loro utilizzo è obbligatorio; inoltre, anche in questo caso, ci possono essere situazioni in cui un argomento è composto da più sotto-argomenti separati da virgole.

Segue la descrizione di alcuni esempi.

50.1.3   Esempio iniziale

Prima di affrontare l'analisi della struttura del sorgente LaTeX, conviene vedere un esempio introduttivo abbastanza completo:

\documentclass{article}

% Inizia il preambolo.

\setlength{\textwidth}{11cm}
\setlength{\textheight}{11cm}

% Fine del preambolo.

\begin{document}

% Inizia il documento vero e proprio.

\section{Introduzione a \LaTeX}

Questo \`e un esempio di documento scritto con \LaTeX .
Come si pu\`o vedere \`e gi\`a stato definito uno stile
generale del documento: article.

\subsection{Suddivisione del documento}

Lo stile article prevede una suddivisione in sezioni
sottosezioni ed eventuali sotto-sottosezioni.

\subsection{Paragrafi}

Il testo di un paragrafo termina quando nel sorgente viene
incontrata una riga vuota (una riga bianca).

Questo \`e l'inizio di un nuovo paragrafo e si nota perch\'e
la prima riga \`e leggermente rientrata.

\subsection{Gli ambienti}

\LaTeX utilizza gli ambienti per definire dei comportamenti
circoscritti a zone particolari del testo.
Per esempio, la centratura si ottiene utilizzando l'ambiente
center.

\begin{center}
Questo \`e un esempio di testo centrato.
\end{center}

% Fine del documento.

\end{document}

Supponendo di attribuire a questo file il nome primo.tex, si può procedere con la composizione nel modo seguente:

latex primo[Invio]

Se non vengono rilevati errori, durante l'elaborazione si vedono diverse informazioni sul procedimento della composizione, come già descritto nella sezione 49.1.3 a proposito di TeX. Nello stesso modo di TeX vengono generati dei file contenenti informazioni e la composizione nel file primo.dvi. Ma a differenza di TeX puro e semplice, si ottiene anche il file primo.aux, contenente delle porzioni di codice da riutilizzare nelle composizioni successive.

Il risultato della composizione di questo esempio si può vedere nella figura 50.11. La conversione del file DVI in qualcosa di più conveniente, è descritta nella sezione 26.3.

Figura 50.11. Il risultato della composizione del sorgente LaTeX di esempio.

risultato della composizione

50.1.4   Sopravvivere nel caos

Nella sezione 49.1 è descritto in che modo si comporta TeX quando si presentano degli errori di composizione. Il pacchetto di macro che compone LaTeX aggiunge informazioni in fase di composizione. Per esempio, si può provare a realizzare un file contenente dei problemi, per vedere come si comporta LaTeX effettivamente:

\documentstyle{article}
\begin{document}
\section{Problemi con \LaTeX}
Quanti problemi con \LaTeX!
\end{document}

Leggendo il file delle registrazioni (il file con estensione .log) si può trovare un avvertimento che riguarda il comando \documentstyle, considerato superato e da non utilizzare.

         Entering LaTeX 2.09 COMPATIBILITY MODE
*************************************************************
   !!WARNING!!    !!WARNING!!    !!WARNING!!    !!WARNING!!   

This mode attempts to provide an emulation of the LaTeX 2.09
author environment so that OLD documents can be successfully
processed. It should NOT be used for NEW documents!

New documents should use Standard LaTeX conventions and start
with the \documentclass command.

Compatibility mode is UNLIKELY TO WORK with LaTeX 2.09 style
files that change any internal macros, especially not with
those that change the FONT SELECTION or OUTPUT ROUTINES.

Therefore such style files MUST BE UPDATED to use
         Current Standard LaTeX: LaTeX2e.
If you suspect that you may be using such a style file, which
is probably very, very old by now, then you should attempt to
get it updated by sending a copy of this error message to the
author of that file.
*************************************************************

Un avvertimento non è niente di eccezionalmente grave, soprattutto se poi non pregiudica la riuscita della composizione. Ma un avvertimento può segnalare il sorgere di un problema che più avanti può aggravarsi e diventare insuperabile. Se nell'esempio mostrato sopra si aggiunge un comando incompatibile si arriva al punto di crisi.

\documentstyle{article}
\usepackage{epsfig}
\begin{document}
\section{Problemi con \LaTeX}
Quanti problemi con \LaTeX!
\end{document}

Come si vede, è stato aggiunto il comando \usepackage{epsfig}, il cui scopo è solo quello di incorporare lo stile epsfig.sty che si trova da qualche parte, dove LaTeX può trovarlo.

Ciò che dovrebbe succedere è che lo stile richiesto sia incompatibile con una vecchia versione di LaTeX, oppure che sia incompatibile con il funzionamento che si impone a LaTeX quando si utilizza il comando \documentstyle.

! LaTeX Error: LaTeX2e command \usepackage in LaTeX 2.09 document.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.

Ecco la segnalazione di errore. Fortunatamente, viene indicato precisamente il punto in cui appare l'errore, esattamente come succede con la composizione in TeX puro e semplice: si tratta proprio del comando \usepackage che appare nella riga numero due del testo sorgente.

l.2 \usepackage
               {epsfig}

Subito dopo appare l'invito consueto di TeX, che chiede all'utente di prendere una decisione al riguardo. Per il resto, tutto funziona come per TeX.

A differenza dell'utilizzo di TeX puro e semplice, può succedere che LaTeX mostri degli errori nell'ambito delle sue stesse macro, quando ci si spinge ai limiti delle possibilità di queste. Naturalmente, in questi casi occorre cercare il problema nelle istruzioni usate nel file sorgente, lasciando stare i file che compongono il pacchetto di macro di LaTeX.

50.1.5   Struttura essenziale di un documento LaTeX

Il sorgente di un documento scritto in TeX, utilizzando il pacchetto di macro LaTeX, ha una struttura che segue delle regole precise. La prima cosa a essere definita è il tipo di documento, ovvero lo stile generale a cui si vuole fare riferimento. A questo segue eventualmente un preambolo, cioè l'indicazione più o meno facoltativa di altri elementi stilistici insieme alle informazioni che servono a comporre il titolo del documento. Quindi inizia il documento vero e proprio.

Lo stile generale del documento viene definito all'inizio del sorgente LaTeX attraverso la dichiarazione seguente:

\documentclass[opzioni]{classe}

Per esempio:

\documentclass[a4paper,11pt]{book}

definisce l'uso della classe book, utilizzando un foglio A4 con il corpo normale dei caratteri a 11 punti tipografici; mentre il comando

\documentclass{book}

definisce l'uso della classe book, senza opzioni, che così viene impostata in modo predefinito.

Il preambolo è quella parte di sorgente LaTeX che sta tra la dichiarazione della classe (o dello stile generale) e la dichiarazione di inizio del documento. Normalmente viene usata per specificare l'utilizzo di stili aggiuntivi e per l'inserimento di tutti quegli elementi che compongono il titolo del documento e gli indici eventuali.

Una dichiarazione molto importante del preambolo è l'inclusione di uno stile aggiuntivo, secondo la sintassi seguente:

\usepackage[opzioni]{pacchetto}

Le opzioni utilizzabili dipendono dal tipo particolare di stile a cui si fa riferimento. Un file di stile può anche essere scritto dall'utilizzatore, solitamente partendo da un altro già esistente.

\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}

L'esempio mostra l'inclusione del pacchetto inputenc allo scopo di ammettere la codifica dei caratteri UTF-8 nel sorgente LaTeX, assieme al pacchetto fontenc per ottenere una composizione con un tipo di carattere che contenga le lettere accentate e i simboli speciali più importanti utilizzati in Europa.

Così come è possibile aggiungere altri stili, è possibile utilizzare direttamente delle dichiarazioni riferite a singoli elementi stilistici. Nell'esempio presentato all'inizio si utilizzavano due dichiarazioni:

\setlength{\textwidth}{11cm}
\setlength{\textheight}{11cm}

In questo caso, si definiva la larghezza e l'altezza del testo, senza fare riferimento a un formato standard.

Il preambolo serve anche per definire gli elementi che fanno parte del titolo del documento. Questi dipendono dal tipo di stile generale utilizzato, ma di solito comprendono almeno il titolo, l'autore e la data, come nell'esempio seguente:

\title{Usare \LaTeX}
\author{Pinco Pallino}
\date{11/11/2011}

L'inizio del documento è contrassegnato dalla dichiarazione \begin{document} e la fine da \end{document}. Tutto quello che appare dopo la conclusione del documento viene semplicemente ignorato.

Subito dopo l'apertura del documento viene collocata normalmente l'istruzione di creazione del titolo, \maketitle, seguita eventualmente da quello di creazione dell'indice, \tableofcontents.

\begin{document}
\maketitle
\tableofcontents
...
...
\end{document}

Il corpo del documento può essere normalmente suddiviso, a seconda del tipo di classe utilizzato.

\livello_di_suddivisione[opzioni_eventuali]{titolo_della_suddivisione}

I nomi dei livelli di suddivisione possono essere i seguenti, elencati in ordine decrescente di importanza:

Per esempio,

\section{Introduzione a \LaTeX}

definisce l'inizio di una sezione che ha il titolo indicato tra le parentesi graffe.(1)

In particolare esiste un comando speciale, \appendix che viene utilizzato così, senza opzioni, esclusivamente per modificare il modo in cui vengono numerate le suddivisioni, che da quel punto vengono trattate come parte di un'appendice.

\chapter{Bla bla bla}
...
\appendix
\chapter{Appendice bla bla}
...

L'esempio mostra proprio questo: il capitolo denominato «Appendice bla bla» è la prima appendice.

50.1.6   Composizione per approssimazione successiva

Tra i vari automatismi offerti da LaTeX, esiste la possibilità di generare degli indici e dei riferimenti incrociati. Per ottenere questo risultato, LaTeX deve annotare inizialmente la posizione dei riferimenti da leggere poi in una fase successiva.

Queste annotazioni vengono fatte in file ausiliari, con estensione .aux e altre, che vengono letti automaticamente attraverso la ripetizione del processo di composizione. Osservando il file ausiliario principale generato dalla composizione dell'esempio iniziale, si può notare che si tratta di istruzioni LaTeX:

\relax 
\@writefile{toc}{\contentsline {section}{\numberline \
  \{1}Introduzione a \LaTeX }{1}} \@writefile{toc}{\contentsline {subsection}{\numberline \
  \{1.1}Suddivisione del documento}{1}} \@writefile{toc}{\contentsline {subsection}{\numberline \
  \{1.2}Paragrafi}{1}} \@writefile{toc}{\contentsline {subsection}{\numberline \
  \{1.3}Gli ambienti}{1}}

Nel caso particolare dell'esempio mostrato, si tratta solo di istruzioni necessarie alla costruzione dell'indice generale; intuitivamente si comprende il significato dei dati che appaiono: il numero della sezione, il titolo e la pagina in cui si trova.

Gli indici e i riferimenti incrociati vanno a modificare l'impaginazione; si pensi al caso dell'indice generale, dapprima assente del tutto, che in una seconda fase può impegnare da solo più pagine. Pertanto, sono indispensabili tre rielaborazioni per arrivare a una composizione ragionevolmente corretta: la prima fase genera i dati che inizialmente sono assenti del tutto; la seconda incorpora i dati, che però si riferiscono all'impaginazione precedente, in cui mancavano, rigenerando una nuova serie di dati aggiornati; la terza rielaborazione utilizza i dati aggiornati nella seconda fase. Teoricamente, una quarta elaborazione potrebbe generare un risultato ancora più sicuro, che però di solito non risulta necessario.

È importante chiarire che LaTeX non dispone di un procedimento automatico in grado di avviare e riavviare la composizione per tutte le volte in cui ciò possa risultare necessario, pertanto è l'utente stesso che riavvia la composizione in base alle esigenze:

latex file_sorgente[Invio]

latex file_sorgente[Invio]

latex file_sorgente[Invio]

50.2   Personalizzazione

Come accennato all'inizio del capitolo, LaTeX mette a disposizione dei comandi appositi per la creazione di nuove macro. In queste sezioni viene mostrato come creare e ridefinire una macro di LaTeX e come importare un file di stile, ovvero un file contenente delle macro.

In particolare, negli esempi si fa riferimento spesso a comandi comuni di LaTeX che però non sono ancora stati descritti. In questa fase è sufficiente comprendere i meccanismi con cui si definiscono le macro e si utilizzano i file esterni.

50.2.1   Definizione e ridefinizione di macro

Nel momento in cui si lavora con documenti di grandi dimensioni, oppure si sta preparando una veste grafica per le proprie pubblicazioni, è importante creare una serie di istruzioni personalizzate per la creazione di ambienti, anche se queste non sono altro che una copia di istruzioni già esistenti. Il vantaggio di questo modo di procedere sta nella possibilità successiva di cambiare tutta la veste grafica semplicemente modificando il funzionamento delle istruzioni personalizzate.

LaTeX prevede anche la possibilità di ridefinire istruzioni già esistenti, ma in tal caso è importante attribuire un senso particolare (e personale) a quelle istruzioni.

L'istruzione \newcommand permette di creare un comando nuovo, mentre \renewcommand permette di ridefinirne uno già dichiarato in precedenza.

\newcommand{comando}[n_argomenti]{definizione}
\newcommand{comando}[n_argomenti][primo_argomento_fisso]\
  \{definizione}
\renewcommand{comando}[n_argomenti]{definizione}
\renewcommand{comando}[n_argomenti][primo_argomento_fisso]\
  \{definizione}

Se il comando può avere degli argomenti, è necessario indicarne la quantità, attraverso una sola cifra numerica da uno a nove; inoltre, è possibile specificare un contenuto fisso del primo argomento, che viene aggiunto al primo argomento della chiamata. Quando si prevedono degli argomenti, questi vengono inseriti nella stringa di definizione del comando utilizzando delle metavariabili nella forma #n, dove il numero rappresenta l'n-esimo argomento.

In generale, non c'è alcun motivo di usare la dichiarazione in cui si prevede un primo argomento fisso, dal momento che quel testo può essere inserito direttamente nella definizione del comando.

Una volta dichiarato o ridichiarato il comando, questo può essere utilizzato attraverso una sintassi riassumibile nel modo seguente, dove gli argomenti eventuali, appaiono tra parentesi graffe.

\comando | \comando{argomento}...

L'utilizzo più semplice, riguarda la definizione di un comando senza argomenti, come nell'esempio seguente, dove viene dichiarato \bftt il cui scopo è quello di iniziare l'uso di un carattere neretto e dattilografico.

\newcommand{\bftt}{\bfseries\ttfamily}

Come si vede, lo scopo è solo quello di sostituire a \bftt, i comandi \bfseries e \ttfamily. Quello che segue è un esempio di come potrebbe essere utilizzato.

Il file \bftt mio-file \normalfont contiene...

Secondo l'esempio, la parola «mio-file» viene evidenziata in neretto e dattilografico, mentre subito dopo, attraverso il comando \normalfont, riprende lo stile normale.

L'esempio seguente definisce un comando che richiede un argomento. Ciò che si ottiene serve a delimitare una zona in neretto dattilografico.

\newcommand{\bftt}[1]{\textbf{\texttt{#1}}}

Lo scopo è quello di sostituire al comando \bftt{...}, i comandi \textbf{\texttt{...}}. Quello che segue è un esempio di come potrebbe essere utilizzato; si può osservare che in questo caso non occorre riconvertire il testo dopo la zona delimitata con le parentesi graffe.

Il file \bftt{mio-file} contiene...

L'esempio seguente, utilizzando sempre un solo argomento, ha lo scopo di replicarlo cambiandone leggermente lo stile.

\newcommand{\triplo}[1]{\textit{#1} \textbf{#1} \texttt{#1}}

Utilizzandolo nel modo seguente, si ottiene la ripetizione della parola «tanto» per tre volte, ognuna con uno stile differente: corsivo, neretto e dattilografico.

Ti amo \triplo{tanto}...

Prima di proseguire, vale la pena di vedere un esempio in cui si dichiara un comando che prevede l'uso di più argomenti.

\newcommand{\somma}[3]{\texttt{#1}+\texttt{#2}=\texttt{#3}}

Utilizzando il comando appena creato nel modo seguente, si ottiene esattamente il testo 5+6=11, dove i numeri sono in dattilografico e i segni sono composti con caratteri normali.

\somma{5}{6}{11}

Oltre a questo è possibile definire, o ridefinire, degli ambienti da utilizzare nei comandi \begin{...} e \end{...}. Per queste operazioni si utilizzano le istruzioni \newenvironment e \renewenvironment.

\newenvironment{ambiente}[n_argomenti]{def_iniziale}{def_finale}
\newenvironment{ambiente}[n_argomenti][argomento_predefinito]\
  \{def_iniziale}{def_finale}
\renewenvironment{ambiente}[n_argomenti]{def_iniziale}{def_finale}

Se la dichiarazione del nuovo ambiente può avere degli argomenti, è necessario indicarne il numero, attraverso una sola cifra numerica da uno a nove. Questi possono essere utilizzati solo nella definizione di inizio, attraverso le metavariabili #n. Come nel caso della dichiarazione di un nuovo comando, è possibile specificare il primo argomento predefinito, da utilizzare nel caso non ne sia fornito alcuno.

Una volta dichiarato o ridefinito l'ambiente, questo può essere utilizzato attraverso una sintassi riassumibile nel modo seguente, dove gli argomenti eventuali, appaiono tra parentesi graffe.

\begin{ambiente}
testo_contenuto
...
\end{ambiente}
\begin{ambiente}{argomento}...
testo_contenuto
...
\end{ambiente}

L'utilizzo più semplice riguarda la definizione di un ambiente senza argomenti, come nell'esempio seguente, dove viene dichiarato l'ambiente \bftt il cui scopo è quello di iniziare l'uso di un carattere neretto e dattilografico.

\newenvironment{bftt}{\bfseries\ttfamily}{\normalfont}

Come si vede, si intende sostituire \begin{bftt} con il comando \bfseries\ttfamily e rimpiazzare \end{bftt} con il comando \normalfont.

50.2.2   File di stile

La personalizzazione di istruzioni LaTeX può avvenire all'interno del documento stesso, ma generalmente è preferibile creare un file di stile da includere con l'istruzione \usepackage{file_di_stile}.

Quando si crea un nuovo stile conviene fare una copia di uno di quelli già utilizzati da LaTeX e quindi modificarlo.

Quando si utilizza teTeX, questi file di stile dovrebbero trovarsi nella directory texmf/tex/latex/base/.

50.3   Localizzazione

I problemi legati alla localizzazione del funzionamento di LaTeX riguardano in particolare i termini generati automaticamente dalla composizione (come Chapter, Index e simili) e la separazione in sillabe.

50.3.1   Terminologia

A seconda dello stile generale del documento che si scrive, quasi sempre, il risultato finale contiene parole inserite automaticamente da LaTeX. Questi termini sono definiti all'interno del file di stile che identifica la classe del documento.

Per modificare questo comportamento si può utilizzare uno stile aggiuntivo, scelto tra quelli contenuti nella directory texmf/tex/generic/babel/, oppure si può creare uno stile personalizzato in cui si ridefiniscono le istruzioni che dichiarano questi termini.

Lo stile aggiuntivo viene caricato normalmente con il comando seguente, posto nel preambolo del documento.

\usepackage[italian]{babel}

50.3.2   Sillabazione

La sillabazione è configurata attraverso il file texmf/tex/generic/config/language.dat, il quale a sua volta fa riferimento a file contenuti in texmf/tex/generic/hyphen/.

Se all'interno di questo file sembra non essere attivata la sillabazione per la lingua italiana, conviene modificarlo attraverso il sistema di configurazione di TeX, descritto nella sezione 49.1.

Se la lingua italiana, o quella che interessa, risulta già attivata, oppure se è stata fatta la procedura per attivarla, si può controllare nel file texmf/web2c/latex.log, soprattutto per determinare il numero corrispondente che gli è stato assegnato. Se si trova una riga simile a quella seguente, significa che la sillabazione in italiano è disponibile.

\l@italian=\language3

50.3.3   Inconvenienti legati alla sillabazione

Se quello che si scrive è un documento tecnico pieno di termini che non fanno parte della lingua italiana, forse conviene disabilitare la sillabazione per evitare la suddivisione di termini stranieri in modo errato. Per farlo, dovrebbe essere sufficiente prevedere l'uso della sillabazione nulla (nohyphenation), attivandola nel documento esattamente come si farebbe per un linguaggio normale.

Per esempio, se nel file texmf/web2c/latex.log si trova la riga seguente,

\l@nohyphenation=\language4

molto probabilmente dovrebbe essere sufficiente utilizzare il comando \language4 nel documento. Se però, per qualche ragione questo non dovesse funzionare, si possono sempre usare metodi drastici: configurare il file texmf/tex/generic/config/language.dat commentando tutte le direttive e annullando in ogni caso il sistema di sillabazione.

Eventualmente, se il problema è solo quello di evitare che qualche termine sia separato in sillabe, lo si può inserire in una scatola (come viene descritto meglio in seguito):

\mbox{parola}

50.3.4   Spaziatura orizzontale

Secondo una regola della tipografia del passato, ormai condannata generalmente, è necessario aumentare lo spazio che divide la fine di un periodo dall'inizio del successivo. Per qualche ragione si trovano ancora documenti in lingua inglese che seguono questa regola, anche quando si tratta di file di testo.

Purtroppo TeX segue quella filosofia e tende a rendere più grande lo spazio orizzontale che c'è tra un punto finale e la parola successiva se questa ha l'iniziale maiuscola. Oltre a tutto, questo sistema crea delle difficoltà nella scrittura degli acronimi o delle abbreviazioni. Si pone rimedio utilizzando anche con LaTeX il comando \frenchspacing nel preambolo del documento (si veda anche la sezione 49.12 a questo proposito).

50.3.5   Codifica

LaTeX permette l'uso di diverse codifiche, cioè diverse sequenze di simboli nei tipi di carattere utilizzati. Per la precisione, si distingue tra la codifica usata nel sorgente e il tipo di insieme di caratteri da usare. Nel primo caso, si usa normalmente il pacchetto inputenc, nel modo seguente, all'interno del preambolo, in modo da stabilire l'uso della codifica UTF-8 nel sorgente:

\usepackage[utf8x]{inputenc}

Per quanto riguarda l'insieme di caratteri, il tipo più vecchio è OT1, definito anche TeX text; il più recente e più usato è T1, definito anche TeX text extended. L'utilizzo dell'insieme di caratteri T1 è necessario se si vuole scrivere un documento che nel sorgente fa uso delle lettere accentate delle lingue europee occidentali.

La selezione dell'insieme di caratteri TeX avviene attraverso il caricamento del pacchetto fontenc, indicando come opzione la sigla dell'insieme desiderato.

\usepackage[T1]{fontenc}

L'esempio mostra il caricamento dell'insieme di caratteri T1, che è quello che dovrebbe essere utilizzato nella maggior parte dei casi.

50.3.6   Localizzazione in pratica

La definizione del sistema di sillabazione è sempre necessario, mentre si è accennato poco sopra al problema dei termini da tradurre. Il modo più semplice per risolvere il problema della localizzazione (dopo avere sistemato la sillabazione) è quello di utilizzare le istruzioni seguenti nel preambolo.

\documentclass...
...
\usepackage[italian]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\frenchspacing
...
\begin{document}
...

In questo modo, se è stata definita una sillabazione italiana, questa viene attivata automaticamente; i termini come «capitolo», «pagina»,... sono tradotti in italiano; la codifica del sorgente è UTF-8, avendo richiesto l'insieme di caratteri tipografici T1 (quindi il sorgente può essere scritto utilizzando le lettere accentate senza la necessità di utilizzare codici macro particolari).

Se per qualche ragione si vuole redigere un testo multilingua, è possibile utilizzare il pacchetto babel con l'indicazione di più linguaggi, come nel modo seguente:

\usepackage[italian,english]{babel}

Successivamente, per selezionarne uno, basta usare il comando \selectlanguage, con il nome prescelto. Ciò ha effetto fino all'uso di un altro comando \selectlanguage che cambi tale indicazione.

...
\selectlanguage{italian}
...
\selectlanguage{english}
...

È importante non confondere \selectlanguage con \languagen. Nel primo caso si fa riferimento a un comando del pacchetto babel; nel secondo si fa riferimento alla sillabazione. Il primo è in grado di condizionare il secondo, ma non viceversa: non esiste un «linguaggio» corrispondente alla sillabazione nulla. Se si intende definire la sillabazione nulla occorre passare per un comando \languagen conforme.

50.4   Variabili e tipi di dati

Nella sezione 49.3 è descritto l'uso delle variabili nel linguaggio TeX, ma quando si usa LaTeX è bene utilizzare comandi appositi, ignorando la gestione che c'è a basso livello. A ogni modo, rimane la possibilità di usare l'istruzione \the per trasformare il contenuto di una variabile LaTeX in testo della composizione finale.

50.4.1   Lunghezze

Le variabili adibite a contenere le lunghezze, si creano secondo LaTeX attraverso il comando \newlength:

\newlength\nome_lunghezza

Successivamente, si assegna un valore alle variabili di questo tipo con il comando \setlength:

\setlength{\nome_lunghezza}{lunghezza}

Come per TeX, le lunghezze che si assegnano in questo modo a una variabile, possono essere rigide oppure elastiche, secondo la stessa notazione di TeX:

lunghezza_richiesta [plus lunghezza_in_estensione] \
  \              [minus lunghezza_in_contrazione]

La lunghezza che costituisce il secondo argomento del comando \setlength, può essere il comando corrispondente a una lunghezza già definita in precedenza; in questo modo si può salvare un valore da richiamare in un momento successivo, quando si intende variare temporaneamente la dimensione di una lunghezza già esistente. Per esempio:

\newlength\salvataggio
\setlength{\salvataggio}{\textwidth}
\setlength{\textwidth}{10cm}
...
\setlength{\textwidth}{\salvataggio}

Quanto appare sopra, mostra il salvataggio della lunghezza originale di \textwidth nella variabile \salvataggio, quindi la modifica del valore di \textwidth temporaneamente, alla fine il ripristino del valore di \textwidth leggendo il contenuto di \salvataggio.

L'elenco seguente riepiloga i comandi utili per la creazione e la modifica delle lunghezze:

\newlength\nome_lunghezza
crea una lunghezza nuova, corrispondente al comando \nome_lunghezza;
\setlength{\nome_lunghezza}{lunghezza}
assegna alla lunghezza indicata il valore dell'ultimo argomento, che può essere sia una lunghezza rigida, sia una lunghezza elastica;
\addtolength{\nome_lunghezza}\
  \{lunghezza_rigida}
aggiunge alla lunghezza indicata il valore dell'ultimo argomento, che deve essere una lunghezza rigida;
\settodepth{\nome_lunghezza}{testo}
assegna alla lunghezza il valore della profondità del testo che appare come ultimo argomento;
\settoheight{\nome_lunghezza}{testo}
assegna alla lunghezza il valore dell'altezza del testo che appare come ultimo argomento;
\settowidth{\nome_lunghezza}{testo}
assegna alla lunghezza il valore della larghezza del testo che appare come ultimo argomento.

Figura 50.45. Dimensioni di una scatola.

scatola

50.4.2   Contatori

LaTeX gestisce dei contatori a cui si accede attraverso parole chiave, nell'ambito di comandi che ne consentono la creazione, la modifica e la lettura. L'elenco seguente riguarda una parte dei comandi coinvolti nella gestione dei contatori:

Comando Descrizione
\newcounter{nome_contatore}\
  \[contatore_già_esistente]
crea un contatore con il nome indicato, il cui valore viene azzerato ogni volta che quello opzionale (tra parentesi quadre) viene incrementato;
\setcounter{nome_contatore}{valore}
assegna il valore indicato al contatore (deve trattarsi di un valore intero, che eventualmente può essere negativo);
\stepcounter{nome_contatore}
incrementa il contatore di una singola unità e azzera eventualmente i contatori che dipendono da questo;
\refstepcounter{nome_contatore}
si comporta come \stepcounter, con la differenza che coinvolge la creazione di un riferimento se seguito dal comando \label;
\addtocounter{nome_contatore}{valore}
aggiunge al contatore il valore indicato (deve trattarsi di un valore intero, che eventualmente può essere negativo);
\arabic{nome_contatore}
traduce il valore del contatore in un numero arabo nella composizione finale;
\thenome_contatore
quando viene creato un contatore, si crea implicitamente questo comando, con il quale si ottiene il valore del contatore nella composizione finale, espresso in modo predefinito (di solito si tratta di un numero arabo);
\alph{nome_contatore}
traduce il valore del contatore in una lettera minuscola singola, pertanto si possono rappresentare solo valori da 1 a 26;
\Alph{nome_contatore}
traduce il valore del contatore in una lettera maiuscola singola, pertanto si possono rappresentare solo valori da 1 a 26;
\roman{nome_contatore}
traduce il valore del contatore in un numero romano con lettere minuscole, pertanto non si possono rappresentare valori negativi;
\Roman{nome_contatore}
traduce il valore del contatore in un numero romano con lettere maiuscole, pertanto non si possono rappresentare valori negativi;
\fnsymbol{nome_contatore}
traduce il valore del contatore in un simbolo, ma sono disponibili solo nove simboli, pertanto si rappresentano valori da 1 a 9;
\value{nome_contatore}
ottiene il valore del contatore, da usare all'interno di un'espressione (non riguarda la composizione).

Per esempio, si crea un contatore prova con il comando seguente, assegnandogli implicitamente il valore iniziale zero:

\newcounter{prova}

Al contatore è possibile assegnare esplicitamente un valore:

\setcounter{prova}{-35}

In alternativa, si può assegnare al contatore il valore di un contatore già esistente; in questo caso si assegna il valore del contatore della pagina:

\setcounter{prova}{\value{page}}

Infine, si può inserire il valore del contatore nella composizione finale, per esempio in forma di numero arabo normale:

\arabic{prova}

Per comprendere la dipendenza che ci può essere tra i contatori, viene proposto un esempio più articolato, seguito dal risultato che si ottiene con la composizione:

\newcounter{uno}
\newcounter{due}[uno]

\stepcounter{uno}

\theuno . \thedue

\stepcounter{due}

\theuno . \thedue

\stepcounter{due}

\theuno . \thedue

\stepcounter{uno}

\theuno . \thedue

Come si può notare, in questo caso è stata usata la forma \thecontatore per visualizzare il valore del contatore preso in esame:

contatori

Per quanto riguarda l'uso di \refstepcounter, le cose si complicano e richiedono la conoscenza dei comandi \label e \ref (sezione 50.10). Qui viene mostrato un esempio che dovrebbe consentire una comprensione intuitiva della cosa:

\newcounter{prova}
\stepcounter{prova}
Il contatore ha raggiunto il valore \arabic{prova}.\par
\stepcounter{prova}
Il contatore ha raggiunto il valore \arabic{prova}.\par
\refstepcounter{prova}\label{qui}
Ciao.\par
\stepcounter{prova}
Il contatore ha raggiunto il valore \arabic{prova}.\par

Quando si mostrava la parola ``ciao'', il contatore aveva il
valore \ref{qui}.

Si osservi che in questo caso, avendo a che fare con riferimenti incrociati, la composizione deve essere eseguita almeno due volte:

contatori

Il comando \thecontatore può essere ridefinito, se si desidera ottenere una forma di visualizzazione standard differente:

\newcounter{prova}
\renewcommand{\theprova}{\Roman{prova}}
\stepcounter{prova}
Il contatore ha raggiunto il valore \theprova.\par
\stepcounter{prova}
Il contatore ha raggiunto il valore \theprova.\par

contatori

LaTeX definisce e gestisce automaticamente un certo numero di contatori, a cui può essere conveniente fare riferimento. La tabella seguente elenca i contatori predefiniti più importanti:

Contatore Descrizione
part
contatore delle parti;
chapter
contatore dei capitoli;
section
contatore delle sezioni;
subsection
contatore delle sottosezioni;
subsubsection
contatore delle sotto-sottosezioni;
paragraph
contatore dei paragrafi;
subparagraph
contatore dei sottoparagrafi;
page
contatore delle pagine;
equation
contatore delle equazioni;
figure
contatore delle figure;
table
contatore delle tabelle;
footnote
contatore delle note a piè di pagina;
enumi
enumii
enumiii
enumiv
contatori usati negli elenchi numerati.

50.5   Struttura del documento

LaTeX semplifica la scrittura di un documento, rispetto al linguaggio TeX puro e semplice, ma per questo richiede l'uso di una struttura particolare nel sorgente.

50.5.1   Dichiarazione dello stile generale

Lo stile generale del documento viene definito all'inizio del sorgente LaTeX attraverso la dichiarazione seguente:

\documentclass[opzioni]{classe}

Le classi possono essere:

Classe Descrizione
slides
rappresenta una sequenza di diapositive (presentazioni).
letter
rappresenta una lettera vera e propria, dove non si ammette la separazione del testo in sezioni;
article
corrispondente a un documento senza tante pretese, ma ugualmente strutturato, che può ammettere la suddivisione in parti e sezioni (sono esclusi i capitoli);
report
corrispondente a un documento strutturato in parti e capitoli, inteso come una relazione;
book
permette di realizzare un libro suddiviso in parti e capitoli, ma a differenza della classe report, le parti e i capitoli iniziano su pagine dispari (destre);

Il comando \documentclass ammette l'uso di una sola opzione, ma al suo interno possono essere indicate diverse sotto-opzioni, rappresentate da delle parole chiave, separate attraverso una virgola. Ogni classe di documento può gestire il suo gruppo particolare di sotto-opzioni, ma in generale, sono disponibili quelle seguenti che dovrebbero essere valide in ogni circostanza.

Dimensione dei caratteri:

Opzione Descrizione
10pt
il testo normale usa caratteri con un corpo di 10 punti (predefinito);
11pt
il testo normale usa caratteri con un corpo di 11 punti;
12pt
il testo normale usa caratteri con un corpo di 12 punti.

Dimensione del foglio:

Opzione Descrizione
a4paper
formato A4;
a5paper
formato A5;
b5paper
formato B5;
letterpaper
formato Lettera (8,5 in × 11 in);
legalpaper
formato Legal (8,5 in × 14 in);
executivepaper
formato Executive (7,25 in × 10,5 in);.

Altre caratteristiche:

Opzione Descrizione
portrait
orientamento verticale della pagina (predefinito);
landscape
orientamento orizzontale della pagina;
draft
bozza, evidenzia con una riga verticale il testo che non rispetta i bordi;
final
versione finale, senza segnalazioni sul debordamento del testo (predefinito);
twocolumn
divide il corpo in due colonne.

Per esempio:

\documentclass[a4paper,11pt]{book}

definisce l'uso della classe book, utilizzando un foglio A4 con il corpo normale dei caratteri a 11 punti tipografici; mentre il comando

\documentclass{book}

definisce l'uso della classe book, senza opzioni, che così viene impostata in modo predefinito.

50.5.2   Preambolo

Il preambolo è quella parte di sorgente LaTeX che sta tra la dichiarazione della classe (o dello stile generale) e la dichiarazione di inizio del documento. In questo spazio si possono inserire dei comandi di LaTeX, ma non del testo da comporre. In particolare si inseriscono qui le dichiarazioni di stili aggiuntivi da incorporare, con il comando \usepackage:

\usepackage[opzioni]{pacchetto}

Un gruppo abbastanza comune di comandi che di norma vengono inseriti nel preambolo, è quello con cui si definiscono i dati necessari a costruire poi la pagina del titolo:

Comando Descrizione
\title{titolo}
titolo del documento (si può usare la sequenza \\ per ottenere un'interruzione di riga);
\author{autore}
autore o autori del documento (si può usare la sequenza \\ per ottenere un'interruzione di riga);
\date{data}
data del documento;
\thanks{annotazione}
nota a piè di pagina riferita al titolo.

50.5.3   Inizio e fine del documento

L'inizio del documento è contrassegnato dalla dichiarazione \begin{document} e la fine da \end{document}. Tutto quello che appare dopo la conclusione del documento viene semplicemente ignorato.

Subito dopo l'apertura del documento viene collocata normalmente l'istruzione di creazione del titolo, \maketitle, seguita eventualmente dal comando di creazione dell'indice, \tableofcontents:

\begin{document}
\maketitle
\tableofcontents
...
...
\end{document}

Segue il riepilogo dei comandi che riguardano in particolare l'inserimento dell'indice generale e di quelli specifici di figure e tabelle:

Comando Descrizione
\maketitle
genera la pagina del titolo, traendo i dati dai comandi \title, \author, \date e \thanks usati nel preambolo;
\tableofcontents
inserisce l'indice generale del documento;
\listoffigures
elenca le figure che appaiono nel documento;
\listoftables
elenca le tabelle che appaiono nel documento.

A seconda della classe del documento, i comandi elencati nella tabella, che servono per la creazione di un indice, prevedono l'inserimento di un titolo automatico, attraverso un comando di dichiarazione di un capitolo o di una sezione non numerati (con un asterisco, come spiegato nella sezione successiva).

Si osservi che, a differenza dell'indice generale, la creazione di un indice analitico è un processo più complicato, descritto nella sezione 50.10.

50.5.4   Suddivisione del documento

Normalmente, il corpo del documento può essere suddiviso, a seconda del tipo di classe utilizzato. Si usano per questo i comandi elencati nella tabella seguente (anche l'asterisco fa parte dell'istruzione):

Comando Descrizione
\part[opzioni]{titolo_della_parte}
\part*[opzioni]{titolo_della_parte}
inizia una parte (solo per le classi article, report e book);
\chapter[opzioni]{titolo_del_capitolo}
\chapter*[opzioni]{titolo_del_capitolo}
inizia un capitolo (solo per le classi report e book);
\section[opzioni]{titolo_della_sezione}
\section*[opzioni]{titolo_della_sezione}
inizia una sezione;
\subsection[opzioni]\
  \{titolo_della_sottosezione}
\subsection*[opzioni]\
  \{titolo_della_sottosezione}
inizia una sottosezione;
\subsubsection[opzioni]\
  \{titolo_della_sotto_sottosezione}
\subsubsection*[opzioni]\
  \{titolo_della_sotto_sottosezione}
inizia una sotto-sottosezione;
\paragraph[opzioni]{titolo_del_paragrafo}
\paragraph*[opzioni]{titolo_del_paragrafo}
inizia un paragrafo;
\subparagraph[opzioni]\
  \{titolo_del_sottoparagrafo}
\subparagraph*[opzioni]\
  \{titolo_del_sottoparagrafo}
inizia un sottoparagrafo;
\appendix
definisce l'inizio delle appendici.

In pratica, tutti questi comandi, escluso \appendix, dichiarano un titolo, che a seconda del caso appartiene all'inizio di una parte, di un capitolo o di una suddivisione inferiore. Come si vede dai modelli sintattici, questi comandi prevedono la presenza di opzioni, che però in pratica non si usano; inoltre, esistono due versioni del comando, con o senza asterisco.

I comandi da \part a \subsection, vengono utilizzati per la costruzione dell'indice generale (che si può poi ottenere con il comando \tableofcontents); inoltre, questi comandi prevedono la numerazione automatica delle voci, a seconda del livello di importanza. Se si usano questi comandi con l'asterisco, viene a mancare la numerazione e l'inserimento nell'indice generale. Le suddivisioni di livello inferiore non prevedono la numerazione e l'inserimento nell'indice, pertanto l'asterisco è praticamente privo di effetto.

\documentclass{report}
...
\begin{document}

\chapter{\LaTeX}

Bla bla bla bla bla bla bla...

\section{Suddivisione del documento}

Bla bla bla bla bla bla bla...

\section*{Sezione non numerata}

Questa sezione non è numerata e non ha una voce nell'indice
generale.

\subsection{Sottosezioni}

Questa è una sottosezione normale, bla bla bla...

\subsubsection{Sotto-sottosezione}

Questa è una sotto-sottosezione normale, bla bla bla...

\paragraph{Paragrafo normale}

Questo è un paragrafo normale, bla bla bla...

\subparagraph{Sottoparagrafo normale}

Questo è un sottoparagrafo normale, bla bla bla...

\end{document}

L'esempio, in cui non appare il preambolo (nel quale si deve definire l'uso della lingua italiana, la codifica adatta e una classe del documento che consenta la suddivisione in capitoli), si traduce nel risultato visibile nella figura 50.69, dove si può osservare in che modo procede la numerazione delle sezioni e l'aspetto normale delle suddivisioni di importanza minore.

Figura 50.69. Esempio nell'uso dei comandi di suddivisione del documento.

suddivisione del documento

Quando si incontra il comando \appendix, la numerazione dei capitoli cambia, diventando alfabetica. Se nell'esempio già mostrato si inserisce il comando \appendix prima della dichiarazione del capitolo, si ottiene il risultato che vi vede nella figura 50.71

\appendix

\chapter{\LaTeX}

Bla bla bla bla bla bla bla...

...

Figura 50.71. Appendici.

suddivisione del documento

50.5.5   Ambienti

LaTeX introduce un tipo nuovo di comando che serve a definire degli ambienti. L'istruzione \begin{ambiente} delimita l'inizio di un ambiente le cui caratteristiche sono definite dal nome contenuto tra le parentesi graffe; l'istruzione \end{ambiente} delimita la fine dell'ambiente dichiarato in precedenza. Per esempio, l'ambiente document definisce la zona in cui appare il corpo del documento.

A titolo di esempio, vengono elencati alcuni ambienti comuni, utilizzati frequentemente per definire le caratteristiche di paragrafi particolari:

Comando Descrizione
\begin{center}testo\end{center}
centra orizzontalmente il testo;
\begin{quote}testo\end{quote}
\begin{quotation}testo\end{quotation}
fa rientrare leggermente il testo a destra e a sinistra;
\begin{verbatim}testo\end{verbatim}
mantiene il testo esattamente come digitato nel sorgente.

L'esempio seguente mostra i comandi necessari a centrare il testo «Ciao a tutti!».

\begin{center}
Ciao a tutti!
\end{center}

50.6   LaTeX: la pagina

La pagina di LaTeX viene definita automaticamente, in base alle opzioni usate nella definizione della classe del documento; eventualmente è possibile intervenire per cambiare l'impostazione predefinita, ma in tal caso tutto diventa piuttosto complesso.

50.6.1   Dimensioni della pagina

Le dimensioni della pagina sono definite da una serie di lunghezze rigide che possono essere modificate facilmente, ma per questo occorre conoscere le varie competenze di queste variabili. In particolare, occorre tenere presente che, a seconda della classe, ci può essere o meno una distinzione tra pagine destre e sinistre.

Figura 50.74a. Lunghezze che definiscono la forma della pagina: pagina sinistra, o pagina pari.

forma della pagina sinistra

Figura 50.74b. Lunghezze che definiscono la forma della pagina: la pagina destra o pagina dispari.

forma della pagina destra

La figura 50.74 mostra schematicamente la competenza delle varie lunghezze utilizzate; in particolare, si osservi che si fa riferimento sempre a pagine destre, salvo il caso di classi che distinguono tra pagine destre e sinistre. La tabella 50.76 descrive le varie lunghezze, mostrando il valore predefinito in presenza della classe book, con l'opzione a4paper.

Tabella 50.76. Elenco dei comandi che intervengono nella definizione delle dimensioni della pagina.

dimensioni della pagina

È importante osservare i margini (\topmargin, \oddsidemargin o \evensidemargin) fanno riferimento a un punto di inizio spostato di un pollice, sia dal margine interno, sia dall'alto; pertanto, se si vogliono avere margini inferiori a 2,54 cm, i valori delle lunghezze di scostamento relative possono essere negativi.

50.6.2   Flusso verticale del testo, colonne e salti pagina

Con LaTeX, il testo viene distribuito verticalmente in modo analogo a quanto fa già TeX; tuttavia, cambiano i comandi per interrompere le righe e per il salto pagina, inoltre si inseriscono comandi per richiedere di non saltare pagina in un certo punto. La tabella seguente elenca i comandi che consentono un controllo del salto pagina:

Comando Descrizione
\newline
interrompe il flusso del blocco per iniziare una riga nuova;
\linebreak[0|1|2|3|4]
richiede un'interruzione di riga con un grado di intensità pari al numero tra parentesi quadre (il numero maggiore richiede l'interruzione di riga con maggiore insistenza);
\newpage
salta all'inizio della prossima colonna;
\clearpage
esegue un salto pagina, assicurando che vengano inseriti gli oggetti fluttuanti che non hanno ancora trovato posto nella composizione;
\cleardoublepage
esegue un salto pagina, in modo da iniziare con una pagina destra (dispari), assicurando che vengano inseriti gli oggetti fluttuanti che non hanno ancora trovato posto nella composizione;
\pagebreak[0|1|2|3|4]
richiede un salto pagina con un grado di intensità pari al numero tra parentesi quadre (il numero maggiore richiede il salto pagina con maggiore insistenza);
\nopagebreak[0|1|2|3|4]
richiede che non venga fatto un salto pagina nel punto in cui appare il comando, con un grado di intensità pari al numero tra parentesi quadre (il numero maggiore richiede che non si faccia il salto pagina con maggiore insistenza);
{\samepage testo}
richiede che il testo indicato rimanga nella stessa pagina;
\vfill
inserisce uno spazio verticale elastico.

I comandi \newline, \newpage, \clearpage e \cleardoublepage sono drastici (il particolare legato agli oggetti fluttuanti viene chiarito nel capitolo in cui si descrive l'inserimento di immagini e di tabelle fluttuanti), mentre \linebreak, \nolinebreak, \pagebreak e \nopagebreak, con o senza opzione, dipendono dalla calcolo di convenienza che viene fatto in fase di composizione.

Per tenere unita una porzione di testo, il metodo più efficace è dato dal comando \samepage, che deve essere inserito in un raggruppamento tra parentesi graffe, come si vede nella tabella riepilogativa. Tuttavia, anche in questo caso, non si può garantire che tutto il pezzo richiesto rimanga nella stessa pagina: la probabilità che sia inserita un'interruzione di pagina aumenta con l'allontanarsi dal comando.

Tra questi comandi, \vfill non serve per ottenere o per evitare dei salti pagina, ma consente di spostare in basso del testo, quando viene usato con la richiesta di un salto pagina. Si osservi l'esempio seguente:

\noindent Bla bla bla bla bla bla...

\vfill

\noindent Copyright © 2002-2022 Tizio Tizi

\noindent This work is free; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version
2 of the License, or (at your option) any later version.

\noindent This work is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for
more details.

\noindent You should have received a copy of the GNU General
Public License along with this work; if not, write to the
Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
02139, USA.

\newpage

La figura 50.79 mostra il risultato della composizione, simulando una pagina molto corta, per questioni di spazio.

Figura 50.79. Allineamento in basso del testo con l'aiuto di \vfill.

allineamento in basso del testo con l'aiuto di \\vfill

È da osservare che, a differenza del linguaggio TeX puro e semplice, i comandi per il salto pagina provvedono da soli ad aggiungere uno spazio elastico adeguato, per evitare che il contenuto della pagina venga allungato in modo inopportuno.

I comandi che richiedono un salto pagina, non si possono cumulare. In pratica, due comandi \newpage in sequenza, generano un salto solo. Per riuscire a ottenere un salto pagina aggiuntivo, occorre scrivere qualcosa, come uno spazio non interrompibile, prima di un nuovo salto pagina. È per questo che esiste il comando \cleardoublepage che permette di raggiungere l'inizio di una pagina destra.

LaTeX consente di controllare in modo complessivo l'allineamento verticale, attraverso due comandi molto semplici:

Comando Descrizione
\raggedbottom
lascia che il testo si distribuisca verticalmente in modo naturale, senza tentare di allungarlo per occupare tutto lo spazio a disposizione;
\flushbottom
se possibile, allunga verticalmente gli spazi per occupare tutto lo spazio verticale della pagina.

LaTeX utilizza in modo predefinito una o l'altra forma, a seconda della classe del documento. Come già accennato, i comandi per il salto pagina inseriscono automaticamente uno spazio elastico sufficiente a evitare che in quel punto si tenti di allungare il testo fino alla fine della pagina; tuttavia, ci sono situazioni in cui con la modalità corrispondente al comando \flushbottom si ottengono pagine troppo allungate.

In condizioni normali, LaTeX genera una composizione su una sola colonna verticale; tuttavia è possibile distribuire il testo su due colonne, con l'uso di due comandi particolari, che consentono di cambiare da una modalità all'altra:

Comando Descrizione
\onecolumn
inizia una nuova pagina con una sola colonna;
\twocolumn
inizia una nuova pagina con due colonne;
\twocolumn[testo]
inizia una nuova pagina con due colonne, mettendo il testo che appare tra parentesi quadre all'inizio, ma distribuito orizzontalmente su entrambe le colonne.

L'esempio seguente consente di vedere in pratica una composizione a due colonne. Si può osservare il fatto che la frase iniziale viene posta a cavallo delle due colonne.

\twocolumn[Bla bla bla bla... questo testo va a cavallo
delle due colonne]

Qui inizia la suddivisione del testo in due colonne
verticali. Bla bla bla...

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla...

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla...

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla...

\newpage

Qui inizia un'altra colonna, a seguito dell'uso del comando
di salto pagina semplice. Bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla...

Come si può osservare nella composizione finale che appare nella figura 50.83, il comando \newpage genera un salto fino all'inizio della colonna successiva, indipendentemente dal fatto che questa si trovi nella pagina corrente o in quella successiva. Al contrario, i comandi \clearpage e, necessariamente, cleardoublepage, fanno ricominciare la composizione effettivamente in una pagina nuova.

Figura 50.83. Esempio di composizione a due colonne.

composizione a due colonne

Il comando \twocolumn crea due colonne di larghezza uguale, utilizzando lo spazio definito dalla lunghezza \textwidth, meno lo spazio di \columnsep. Pertanto, se si desidera cambiare la larghezza dello spazio interno alle colonne occorre intervenire prima nella lunghezza \columnsep e quindi usare il comando \twocolumn.

50.6.3   Stile della pagina

LaTeX definisce in modo automatico l'aspetto della riga di intestazione e di quella del fondo pagina, in base alla classe del documento, inserendo eventualmente delle varianti all'inizio delle parti e dei capitoli. I comandi elencati nella tabella seguente, consentono di interferire nello stile della pagina:

Comando Descrizione
\pagestyle{plain}
\thispagestyle{plain}
richiede lo stile più semplice, in cui viene mostrato soltanto il numero di pagina;
\pagestyle{empty}
\thispagestyle{empty}
richiede che venga eliminata qualunque indicazione, sopra e sotto il corpo del testo;
\pagestyle{headings}
\thispagestyle{headings}
richiede che si utilizzino intestazioni e righe in fondo alla pagina in modo predefinito, secondo la classe del documento;
\pagestyle{myheadings}
\thispagestyle{myheadings}
richiede che si utilizzino intestazioni e righe in fondo alla pagina secondo quanto richiesto espressamente con i comandi \markboth o \markright;
\markboth{intestazione_sinistra}\
  \{intestazione_destra}
definisce delle righe di intestazione personalizzate, distinte per le pagine sinistre e per le pagine destre;
\markright{intestazione_destra}
definisce la riga di intestazione personalizzata per le pagine destre (si usa quando la classe del documento prevede di non distinguere tra pagine sinistre e destre);

Nell'elenco, sono stati messi assieme i comandi \pagestyle e \thispagestyle, ma il primo interviene su tutte le pagine, a partire da quella in corso, fino al prossimo comando del genere, mentre il secondo riguarda esclusivamente la pagina in corso, come eccezione rispetto allo stile normale. LaTeX utilizza proprio questa tecnica per fare in modo che la pagina iniziale di un capitolo o di una parte sia diversa nello stile rispetto alle altre pagine normali.

Generalmente, le righe di intestazione sono definite automaticamente in modo appropriato, secondo la classe prescelta del documento. Per modificare manualmente queste righe di intestazione, si deve definire lo stile personalizzato, con il comando \pagestyle{myheadings}, specificando il contenuto delle intestazioni con \markboth o con \markright. La definizione personalizzata delle intestazioni si limita a una riga di testo molto semplice, che viene allineata in modo appropriato (a sinistra nella pagine destre e a destra nelle pagine sinistre), per lasciare il posto al numero della pagina che viene inserito da LaTeX, senza poter intervenire su questo particolare.

A proposito dell'uso di \markboth e di \markright, è interessante osservare che, se ci si trova in una pagina sinistra, viene preso in considerazione l'ultimo comando \markboth che rientri nella pagina, mentre se ci si trova in una pagina destra, viene preso in considerazione il primo comando \markboth o \markright che si trovi nella pagina stessa.

50.6.4   Numerazione delle pagine

LaTeX gestisce la numerazione delle pagine in modo automatico, attraverso il contatore page. A seconda della classe del documento, il contatore viene inizializzato in certi punti chiave, mostrando eventualmente una sequenza di numerazione differente. Se necessario, è possibile intervenire sul contatore e sull'aspetto della sequenza di numerazione.

Comando Descrizione
\pagenumbering{arabic}
richiede una sequenza numerica normale (numeri arabi);
\pagenumbering{roman}
richiede una sequenza numerica con numeri romani fatti di lettere minuscole;
\pagenumbering{Roman}
richiede una sequenza numerica con numeri romani fatti di lettere maiuscole;
\pagenumbering{alph}
richiede una sequenza alfabetica minuscola;
\pagenumbering{Alph}
richiede una sequenza alfabetica maiuscola;
\setcounter{page}{n}
assegna alla pagina corrente il numero indicato; anche se si assegna un numero negativo, la progressione rimane in senso positivo.

Nella sezione 50.4.2 è stato descritto l'uso dei contatori; per modificare il contatore della pagina, è sufficiente agire sul nome page, per esempio reinizializzandolo in questo modo:

\setcounter{page}{1}

Naturalmente, per intervenire in questo modo ci deve essere un buon motivo, perché la classe del documento provvede già a definire il modo migliore per reinizializzare il contatore al momento più opportuno.

Nello stesso modo, potrebbe essere interessante cambiare il modo in cui viene mostrato il numero della pagina, attraverso il comando \pagenumbering, come descritto nella tabella.

50.6.5   Note a piè di pagina

Le note a piè di pagina vengono definite normalmente attraverso il comando \footnote, che provvede da solo a incrementare il contatore delle note, corrispondente a footnote, e a inserire la nota nella collocazione appropriata. Tuttavia, volendo fare riferimento alla stessa nota in più punti distinti, occorre separare la fase di dichiarazione da quella in cui si definisce il testo associato.

Comando Descrizione
\footnote{testo}
incrementa il contatore delle note, inserisce il numero ad apice nel testo e mette la nota a piè di pagina;
\footnotemark[\value{footnote}]
lascia inalterato il contatore delle note e inserisce il numero attuale del contatore ad apice nel testo;
\footnotemark[n]
lascia inalterato il contatore delle note e inserisce il numero n ad apice nel testo;
\footnotemark
incrementa il contatore delle note, inserisce il numero ad apice nel testo, ma per la nota a piè di pagina attende il comando \footnotetext;
\footnotetext{testo}
mette la nota a piè di pagina, associandole il numero attuale del contatore footnote.
\footnotetext[n]{testo}
mette la nota a piè di pagina, associandole il numero n.

50.6.6   Sillabazione

Come per TeX, si può usare il comando \hyphenation per dichiarare la sillabazione di parole che in qualche modo non vengono separate correttamente; per esempio così:

\hyphenation{car-tel-lo-ne ma-nu-a-le}

Eventualmente, come già annotato in un'altra sezione, se c'è la necessità di mantenere unita una parola, o più parole assieme, si può usare una scatola:

\mbox{file system}

In questo caso, oltre che impedire la separazione delle parole, si vuole anche evitare che la riga venga interrotta in corrispondenza dello spazio che le separa.

50.7   Caratteri

In generale, LaTeX eredita la gestione dei caratteri da stampa del linguaggio TeX puro e semplice. In questo senso, valgono praticamente le stesse regole per ottenere le lettere accentate e gli altri simboli speciali, con la differenza che è possibile istruire LaTeX in modo che accetti la codifica UTF-8, con le istruzioni seguenti, da inserire nel preambolo, come descritto nella sezione 50.1.

\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}

Anche con LaTeX funzionano i legati in modo automatico, inoltre si definiscono i contesti matematici nello stesso modo di TeX.

La differenza importante di LaTeX sta nella definizione di una veste grafica complessiva e nel modo di fare riferimento ai caratteri da stampa, che avviene attraverso comandi differenti, con comportamenti diversi rispetto a TeX.

Negli esempi, salvo indicazione diversa, si suppone di utilizzare nel preambolo i comandi necessari all'utilizzo della codifica UTF-8:

\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}

50.7.1   Caratteri che hanno un significato speciale

Alcuni simboli (caratteri) usati nel sorgente hanno necessariamente un significato speciale, nel senso che non si traducono nel segno corrispondente nella composizione. Questo problema esiste già con TeX, ma LaTeX offre delle alternative leggermente diverse nel modo di ottenere i simboli mancanti nella composizione. La tabella 50.92 riepiloga i simboli che hanno un significato speciale nel sorgente LaTeX, con l'indicazione del codice necessario per ottenere i segni corrispondenti nella composizione.

Tabella 50.92. Elenco dei caratteri che hanno significati particolari.(2)

Carattere
speciale
Utilizzo normale Trasformazione per l'uso letterale
\
Prefisso di un comando o di un simbolo di controllo.
\textbackslash
{
}
Apre e chiude un gruppo.
\{
\}
%
Inizia un commento fino alla fine della riga.
\%
&
Tabulazione orizzontale.
\&
~
Spazio non interrompibile.
\textasciitilde
$
Inizia e conclude un contesto matematico.
\$
^
Apice, in un contesto matematico.
\textasciicircum
_
Il trattino basso rappresenta un pedice, in un contesto matematico.
\_{}
#
Definisce la collocazione di un parametro.
\#
<SP>
Uno o più spazi vengono ridotti a uno solo.
\<SP>
[
]
Alle volte, le parentesi quadre delimitano un'opzione e non vengono inserite nella composizione.
{[}
{]}

Per quanto riguarda gli accenti ottenuti sovrapponendo il simbolo alla lettera successiva, il funzionamento è uguale a quello di TeX, come descritto nelle sezioni 49.10.2 e 49.17.1.

50.7.2   Corpi uniformi

Lo scopo principale di LaTeX è quello di impostare una veste grafica uniforme, dove, tra le altre cose si specificano inizialmente i corpi e gli stili dei caratteri da stampa da usare nei vari contesti. In particolare, con il comando iniziale \documentclass è possibile indicare la dimensione normale del testo, attraverso un'opzione (come 11pt), a cui si adegua proporzionalmente tutto il resto (sezione 50.1).

Alcuni comandi definiscono il corpo del carattere in base a delle definizioni relative:

Comando Descrizione
{\Huge testo}
\begin{Huge}testo\end{Huge}
il corpo più grande della serie;
{\huge testo}
\begin{huge}testo\end{huge}
{\LARGE testo}
\begin{LARGE}testo\end{LARGE}
{\Large testo}
\begin{Large}testo\end{Large}
{\large testo}
\begin{large}testo\end{large}
{\normalsize testo}
\begin{normalsize}
testo
\end{normalsize}
la dimensione normale del testo;
{\small testo}
\begin{small}testo\end{small}
{\footnotesize testo}
\begin{footnotesize}
testo
\end{footnotesize}
{\scriptsize testo}
\begin{scriptsize}
testo
\end{scriptsize}
{\tiny testo}
\begin{tiny}testo\end{tiny}
il corpo più piccolo nell'ambito della veste grafica scelta.

In condizioni normali, questi comandi non vengono usati direttamente da chi scrive un documento in LaTeX; tuttavia, se c'è la necessità di ingrandire o di rimpicciolire il testo, con questi c'è la certezza di rimanere nelle dimensioni standard usate dallo stile prescelto:

Questo è un testo normale, che può diventare più
{\large grande} o più {\small piccolo}, a seconda delle
esigenze.

corpi standard

50.7.3   Caratteri da stampa

A differenza di TeX, i comandi di LaTeX che definiscono lo stile del carattere sono cumulabili. Per esempio, la definizione di un testo in corsivo può essere cumulata con quella del neretto, per ottenere un neretto corsivo.

Le caratteristiche principali di un carattere sono lo stile, la serie e il corpo. Lo stile e la serie possono essere definite utilizzando istruzioni del tipo seguente:

  1. \stile_serie_a{testo}
    
  2. {\stile_serie_b testo}
    
  3. \begin{stile_serie_b}...\end{stile_serie_b}
    

I nomi delle istruzioni cambiano a seconda che si utilizzi un modo oppure l'altro. Per esempio, per scrivere un testo in corsivo, si possono utilizzare questi tre modi.

\textit{Testo in corsivo}

{\itshape Testo in corsivo}

\begin{itshape}Testo in corsivo\end{itshape}

Tutte le forme consentono di cumulare gli effetti; per esempio, si può scrivere \textit{\textbf{testo}}, {\itshape\bfseries testo}, oppure \begin{itshape}\begin{bfseries}testo\end{bfseries}\end{itshape} per ottenere un neretto corsivo.

La tabella seguente elenca i comandi che possono essere usati in un contesto normale (non matematico):

Comando Descrizione
\textrm{testo}
{\rmfamily testo}
\begin{rmfamily}testo\end{rmfamily}
tondo;
\textsf{testo}
{\sffamily testo}
\begin{sffamily}testo\end{sffamily}
lineare;
\texttt{testo}
{\ttfamily testo}
\begin{ttfamily}testo\end{ttfamily}
dattilografico;
\textbf{testo}
{\bfseries testo}
\begin{bfseries}testo\end{bfseries}
neretto;
\textup{testo}
{\upshape testo}
\begin{upshape}testo\end{upshape}
normale, in contrapposizione al neretto;
\textit{testo}
{\itshape testo}
\begin{itshape}testo\end{itshape}
corsivo;
\textsl{testo}
{\slshape testo}
\begin{slshape}testo\end{slshape}
inclinato;
\textsc{testo}
{\scshape testo}
\begin{scshape}testo\end{scshape}
maiuscoletto;
\textnormal{testo}
{\normalfont testo}
\begin{normalfont}
testo
\end{normalfont}
testo normale.

La tabella successiva riguarda invece il contesto matematico:

Comando Descrizione
\mathnormal{testo}
testo matematico normale;
\mathrm{testo}
tondo;
\mathbf{testo}
neretto;
\mathsf{testo}
lineare;
\mathtt{testo}
dattilografico;
\mathit{testo}
corsivo;
\mathcal{testo}
calligrafico;
\mathsc{testo}
maiuscoletto.

A titolo di esempio, la tabella 50.99 consente di confrontare le varianti seriali dello stile normale di scrittura.

Tabella 50.99. Combinazioni a coppie di serie per il testo normale.

combinazioni a coppie di serie e forme.

Oltre allo stile e alla serie del carattere può essere definito il corpo, con i comandi già mostrati nella sezione precedente, oppure in modo diretto, nel caso si debba andare al di fuori della veste grafica preimpostata. In tal caso, si usano dei comandi nella forma:

\fontsize{corpo}{distanza_tra_le_righe}\selectfont

Per esempio, per ottenere un corpo di 5 mm, con un'altezza della riga di 6 mm (il 120 % del corpo), si può usare il comando \fontsize{5mm}{6mm}\selectfont:

Questo è un testo normale; {\fontsize{5mm}{6mm}\selectfont
questo carattere ha un corpo particolare}; qui il testo
torna a essere normale.

controllo diretto del corpo del carattere

50.7.3.1   Enfatizzazione

Quando non ha importanza stabilire esattamente l'aspetto di un carattere, ma si vuole semplicemente enfatizzarlo rispetto al contesto in cui si trova, si può usare il comando \emph. L'esempio seguente mostra cosa accade quando in una situazione in cui il carattere è corsivo si usa questo comando:

\begin{itshape}Bla bla bla bla bla bla \emph{testo
enfatizzato} bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla...\end{itshape}

enfatizzazione

50.7.4   Definizione dettagliata del carattere da stampa

Generalmente, i comandi già descritti a proposito della definizione del carattere da stampa sono più che sufficienti per l'utente normale di LaTeX; eventualmente, sono disponibili anche altri comandi più dettagliati, che si prestano particolarmente per la realizzazione di macro particolari. Questi comandi hanno in comune la necessità di usare alla fine il comando \selectfont per attuare le modifiche al carattere da stampa. La tabella seguente elenca i comandi che riguardano la definizione dettagliata del carattere da stampa (appare anche \fontsize che è già descritto nella sezione precedente):

Comando Descrizione
\fontencoding{OT1|T1|altro_insieme}
definisce l'insieme di caratteri (T1 rappresenta quello utile per le lingue europee occidentali);
\fontfamily{cmr|cmss|cmtt|altro_stile}
definisce lo stile del carattere (cmr sta per Computer modern roman, cmss è il Computer modern sans serifs, cmtt è il Computer modern typewriter text);
\fontseries{m|b|c|bc|bx|altra_serie}
definisce la serie del carattere (m sta per Medium, b sta per Bold, c sta per Condensed, bc sta per Bold condensed e bx sta per Bold extended);
\fontshape{n|it|sl|sc|ui|ol}
definisce una variante della serie del carattere (n sta per Normal, it sta per Italic, sl sta per Slanted, sc sta per Small caps, ui sta per Upright italic e ol sta per Outline, ma naturalmente non tutti i tipi di carattere hanno a disposizione tutte le varianti possibili);
\fontsize{corpo}{altezza_riga}
definisce il corpo del carattere e l'altezza della riga;
\selectfont
abilita le modifiche fatte in precedenza al carattere (tipo, stile e dimensione);
\usefont{insieme}{stile}{forma}
definisce simultaneamente tutte le caratteristiche del carattere, escluso il corpo e la distanza tra le righe, senza nemmeno bisogno di \selectfont per attivare la scelta fatta.

A proposito del comando \usefont, si osservi che il secondo argomento si riferisce alle sigle utilizzabili con il comando \fontseries, mentre il terzo argomento richiede una sigla riferita al comando \fontshape. La suddivisione delle varianti seriali in questi due gruppi deriva dall'organizzazione di LaTeX riguardo alla cumulabilità tra stili. In pratica, le varianti seriali di \fontseries non sono cumulabili tra di loro; per esempio, per ottenere un carattere stretto e neretto è già prevista una voce unica: bc. Lo stesso ragionamento vale per le varianti seriali di \fontshape, mentre una variante di \fontseries è cumulabile con una variante di \fontshape.

Viene mostrato un esempio completo, in cui si può notare anche l'uso delle lettere accentate, a seguito della selezione dell'insieme T1:

\documentclass{article}
\usepackage[italian]{babel}
%\usepackage[utf8x]{inputenc}
%\usepackage[T1]{fontenc}
\frenchspacing
\pagestyle{empty}
\setlength{\textwidth}{12cm}
\begin{document}

Questo \`e un testo normale;
{\fontencoding{T1}\fontfamily{cmss}\fontseries{n}
\fontshape{it}\fontsize{5mm}{7mm}\selectfont questo \`e
invece un carattere senza grazie, chiaro, corsivo, con un
corpo di 5 mm, in una riga alta 7 mm.} Questo \`e di nuovo
un carattere normale. \usefont{T1}{cmss}{n}{it}Questo \`e
ancora un carattere senza grazie, chiaro, corsivo, con un
corpo normale. \fontsize{5mm}{7mm}\selectfont Qui il
carattere si ingrandisce di nuovo. \normalfont Qui si
ritorna a un carattere di stile e serie normale, ma la
dimensione rimane inalterata.

\end{document}

controllo dettagliato del carattere da stampa

50.7.5   Linee e cornicette attorno al testo

Per LaTeX vale lo stesso problema di TeX a proposito della sottolineatura, nel senso che non fa parte dello stile e della serie del carattere. Tuttavia, LaTeX facilita anche altre forme di evidenziamento analoghe:

Comando Descrizione
\underline{testo}
mette una linea sotto al testo;
$\overline{\hbox{testo}}$
mette una linea sopra al testo;
\frame{testo}
racchiude il testo in un rettangolo;
\fbox{testo}
racchiude il testo in un rettangolo, lasciando un po' di spazio.

In tutti i casi, il testo evidenziato si trova inserito in una scatola orizzontale, che come tale non può essere spezzata, creando eventualmente dei problemi di impaginazione.

Si osservi che il comando \overline è fatto per l'ambito matematico. Nella tabella, la sintassi mostra il modo corretto per poterlo utilizzare in un contesto normale, con l'aggiunta del comando \hbox, allo scopo di comporre il testo sopralineato in un contesto normale.

Segue un esempio riepilogativo di queste forme di evidenziamento del testo:

Qui inizia un testo normale, in cui questa
\underline{parola} appare sottolineata; ma è possibile
anche sopralineare $\overline{\hbox{questa
piccola frase}}$, così come si possono creare delle
\frame{cornicette schiacciate}, oppure \fbox{un po' più
distanziate} dal testo.

sottolineature, sopralineature e cornicette

50.7.6   Spostamento verticale del testo

A volte può essere necessario lo spostamento verticale di alcuni caratteri rispetto alla base della riga. Per fare questo si usa il comando \raisebox, con cui si delimita il testo da spostare, specificando di quanto questo debba essere alzato (per abbassarlo si possono usare valori negativi):

\raisebox{spostamento_verticale}{testo}

Si osservi l'esempio seguente in cui si gioca con la parola «ciao»:

c\raisebox{1mm}{i}\raisebox{2mm}{a}\raisebox{1mm}{o}
c\raisebox{-1mm}{i}\raisebox{-2mm}{a}\raisebox{-1mm}{o}

esempio di spostamento verticale del testo

50.8   LaTeX: blocchi di testo

LaTeX impagina il testo in paragrafi, in modo analogo a quanto fa già il linguaggio TeX puro e semplice. Anche per LaTeX funziona il comando \par, allo scopo di concludere un paragrafo in modo esplicito, oppure è sufficiente lasciare almeno una riga bianca tra un blocco e l'altro.

50.8.1   Caratteristiche normali di un paragrafo

Il paragrafo di LaTeX è costruito in maniera molto simile a quella di TeX, con la differenza che il controllo sulla sua estensione orizzontale dipende dall'impostazione della pagina e dalla suddivisione in colonne. Anche con LaTeX rimane il rientro della prima riga dei paragrafi, con l'eccezione normale del primo paragrafo dopo un titolo. La tabella 50.112 mostra alcuni dei comandi che controllano l'aspetto del paragrafo.

Tabella 50.112. Alcuni dei comandi che intervengono nella definizione del paragrafo.

dimensioni del paragrafo

Senza intervenire nella lunghezza definita dal comando \parindent, è possibile annullare il rientro della prima riga con il comando \noindent, così come è possibile usare \indent per ottenere l'effetto opposto in presenza di un paragrafo che non ha il rientro per qualche ragione. Tuttavia, anche annullando il rientro con il comando \noindent, rimane il problema della distanza tra i paragrafi, che in condizioni normali risulta troppo piccolo per consentirne l'individuazione senza rientri. Pertanto, quando si intende scrivere un documento che non fa uso di rientri in modo sistematico, conviene modificare le lunghezze che contano, direttamente nel preambolo, per esempio così:

\setlength{\parindent}{0pt}
\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}

Si osservi però, che in questo modo non può funzionare nemmeno il comando \indent, perché si limiterebbe a porre un rientro di zero punti.

Segue il riepilogo degli ultimi comandi descritti:

Comando Descrizione
\indent
richiede espressamente il rientro della prima riga secondo il valore di \parindent;
\noindent
annulla il rientro della prima riga per il paragrafo in cui si trova.

50.8.2   Allineamento del testo

In condizioni normali, il testo dei paragrafi risulta allineato simultaneamente a sinistra e a destra. Per modificare questo comportamento si interviene normalmente attraverso degli ambienti, ma sono disponibili anche dei comandi alternativi che provengono da TeX:

Comando Descrizione
\begin{center}testo\end{center}
centra il testo;
\centerline{riga_di_testo}
centra la riga;
\begin{flushleft}testo\end{flushleft}
{\raggedright testo\par}
allinea il testo a sinistra;
\begin{flushright}
testo
\end{flushright}
{\raggedleft testo\par}
allinea il testo a destra.

È interessante osservare che, mentre i comandi \raggedright e \raggedleft richiedono l'inserimento in un raggruppamento, dove l'ultimo paragrafo deve terminare in modo esplicito, prima della fine del raggruppamento, gli ambienti dichiarano implicitamente l'inizio e la fine di un paragrafo.

Il comando \centerline consente di centrare una riga soltanto, senza inserire la spaziatura che riguarda un paragrafo normale.

Questo è un paragrafo normale, che serve come riferimento.
Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla.

\begin{center}
Questo è un paragrafo centrato, attraverso l'ambiente
{\ttfamily center}. Bla bla bla bla bla bla bla bla bla
bla bla.
\end{center}

Questo è un paragrafo normale, a cui segue una riga
centrata:

\centerline{riga centrata.}

\begin{flushleft}
Questo è un paragrafo allineato a sinistra, attraverso
l'ambiente {\ttfamily flushleft}. Bla bla bla bla bla bla
bla bla bla bla bla.
\end{flushleft}

\begin{flushright}
Questo è un paragrafo allineato a destra, attraverso
l'ambiente {\ttfamily flushright}. Bla bla bla bla bla bla
bla bla bla bla bla.
\end{flushright}

allineamento del testo

50.8.3   Elenchi

Alcuni ambienti sono predisposti per la realizzazione di elenchi di vario tipo. Quelli più comuni sono description, enumerate e itemize, ma esiste anche il modo di definire un tipo di elenco libero, attraverso l'ambiente generico list. L'elenco puntato classico si ottiene con l'ambiente itemize:

\begin{itemize}
\item testo
\item testo
...
\item testo
\end{itemize}

All'interno dell'ambiente itemize, il comando \item serve a indicare l'inizio di una voce dell'elenco; la voce può contenere del testo piuttosto articolato, anche in più paragrafi, per esempio con dei sottoelenchi o ambienti di altro genere. L'esempio seguente mostra un elenco contenente un sottoelenco:

\begin{itemize}
\item Primo.
\item Secondo.
      \begin{itemize}
      \item Questa voce è una suddivisione ulteriore del
            secondo punto.

            Questo è un paragrafo ulteriore.
      \item Questa è una voce ulteriore della
            sottoclassificazione appartenente al secondo
            punto.
      \end{itemize}
\item Terzo.
\end{itemize}

elenco con sottoelenco

Teoricamente, è possibile modificare il simbolo usato per evidenziare l'inizio delle voci, ridefinendo i comandi \labelitemi, \labelitemii, \labelitemiii e \labelitemiv, che si riferiscono rispettivamente all'elenco principale e di seguito a sottoelenchi fino a un massimo di quattro livelli di annidamento. Per esempio, si può fare in modo che si utilizzi il segno «+» per l'elenco principale intervenendo in questo modo:

\renewcommand{\labelitemi}{\normalfont +}

Ecco come si presenta l'elenco già mostrato se si aggiunge questa istruzione all'inizio:

elenco con sottoelenco con simbolo modificato

In modo analogo si ottengono degli elenchi numerati, con l'ambiente enumerate:

\begin{enumerate}
\item testo
\item testo
...
\item testo
\end{enumerate}

L'esempio già visto viene riproposto usando l'ambiente enumerate; si può osservare che la numerazione delle voci cambia quando si inseriscono dei sottoelenchi:

\begin{enumerate}
\item Primo.
\item Secondo.
      \begin{enumerate}
      \item Questa voce è una suddivisione ulteriore del
            secondo punto.

            Questo è un paragrafo ulteriore.
      \item Questa è una voce ulteriore della
            sottoclassificazione appartenente al secondo
            punto.
      \end{enumerate}
\item Terzo.
\end{enumerate}

elenco numerato con sottoelenco

La sequenza dei valori attribuita alle voci viene determinata attraverso dei contatori, che sono rispettivamente: enumi, enumii, enumiii e enumiv. In pratica, il primo contatore controlla l'elenco più esterno, mentre l'ultimo riguarda quello più interno (di conseguenza ci possono essere un massimo di quattro annidamenti). Inoltre, il tipo di numerazione usata negli elenchi dipende rispettivamente dai comandi: \theenumi, \theenumii, \theenumiii e \theenumiv. L'esempio seguente è una variante di quello già visto, in cui, l'elenco più esterno parte dal numero tre, mentre l'elenco annidato utilizza i numeri romani:

\begin{enumerate}
\setcounter{enumi}{2}
\item Primo.
\item Secondo.
      \renewcommand{\theenumii}{\roman{enumii}}
      \begin{enumerate}
      \item Questa voce è una suddivisione ulteriore del
            secondo punto.

            Questo è un paragrafo ulteriore.
      \item Questa è una voce ulteriore della
            sottoclassificazione appartenente al secondo
            punto.
      \end{enumerate}
\item Terzo.
\end{enumerate}

elenco numerato con sottoelenco, con sequenze modificate

Gli elenchi descrittivi sono leggermente diversi, perché devono consentire la descrizione delle voci. L'ambiente usato per questo è description:

\begin{description}
\item [etichetta] testo
\item [etichetta] testo
...
\item [etichetta] testo
\end{description}

Ciò che è stato indicato come etichetta è ciò che rappresenta simbolicamente la voce che viene descritta dal testo successivo; come si vede dalla sintassi, potrebbe essere omessa, anche se questo fa perdere di significato a un elenco descrittivo. Viene riproposto l'esempio già visto in precedenza per gli altri tipi di elenco, con l'aggiunta delle etichette:

\begin{description}
\item [marrone] Primo.
\item [rosso] Secondo.
      \begin{description}
      \item [oro] Questa voce è una suddivisione ulteriore
            del secondo punto.

            Questo è un paragrafo ulteriore.
      \item [argento] Questa è una voce ulteriore della
            sottoclassificazione appartenente al secondo
            punto.
      \end{description}
\item [arancio] Terzo.
\end{description}

elenco descrittivo con sottoelenco

Come si vede dal risultato della composizione, l'annidamento non fa cambiare l'aspetto dell'elenco.

Eventualmente, si può omettere l'indicazione della voce distintiva dei vari punti, se a questo si provvede da soli con gli evidenziamenti che si preferiscono; tuttavia, può risultare difficile inserire le parentesi quadre all'inizio di queste voci. Per inserire le parentesi quadre con un significato letterale, basta fare in modo che LaTeX comprenda che il testo è già iniziato, attraverso l'inserzione di gruppi vuoti, oppure inserendo le parentesi stesse tra parentesi graffe:

\begin{description}
\item [marrone] Primo.
\item {[rosso]} Secondo.
\item {}[arancio] Terzo.
\end{description}

elenco descrittivo senza la voce indicativa, con parentesi quadre

Gli ambienti riferiti agli elenchi gestiscono in modo autonomo la distanza verticale di separazione tra le voci, impostando internamente il comando \itemsep. Volendo, si può interferire in questa lunghezza per modificare la distanza tra le voci di un elenco, ma solo all'interno dell'elenco stesso:

\begin{itemize}
\item Primo. In questo contesto, il valore predefinito di
      {\ttfamily \textbackslash{}itemsep} è \the\itemsep{}.
\setlength{\itemsep}{1cm}
\item Secondo.
      \begin{itemize}
      \item Questa voce è una suddivisione ulteriore del
            secondo punto.

            Questo è un paragrafo ulteriore.
      \item Questa è una voce ulteriore della
            sottoclassificazione appartenente al secondo
            punto.
      \end{itemize}
\item Terzo.
\end{itemize}

elenco con spaziatura alterata

Infine, si può realizzare un elenco in modo libero, attraverso l'ambiente list:

\begin{list}{etichetta}{comandi_di_spaziatura}
\item testo
\item testo
...
\item testo
\end{list}

In pratica, al posto di etichetta si inseriscono i comandi necessari a produrre l'etichetta che contrassegna le voci dell'elenco, mentre al posto di comandi_di_spaziatura si possono mettere i comandi che servono a definire le lunghezze relative alla costruzione dell'elenco. Per cominciare, conviene mostrare un esempio banale di elenco puntato, dove il punto delle voci è rappresentato da un asterisco:

\begin{list}{*}{}
\item Primo.
\item Secondo.
\item Terzo.
\end{list}

elenco libero semplice

Per controllare la distanza tra i punti, si può modificare la distanza \itemsep:

\begin{list}{*}{\setlength{\itemsep}{1cm}}
\item Primo.
\item Secondo.
\item Terzo.
\end{list}

elenco libero con controllo della distanza tra i punti

Per costruire un elenco numerato, occorre intervenire con maggiore abilità nella definizione dell'etichetta:

\newcounter{elenco}

\setcounter{elenco}{0}
\begin{list}{\stepcounter{elenco}\arabic{elenco}}{\setlength{\itemsep}{1cm}}
\item Primo.
\item Secondo.
\item Terzo.
\end{list}

elenco numerato con controllo della distanza tra i punti

50.8.4   Citazioni

Sono disponibili due ambienti per rappresentare facilmente del testo rientrato rispetto al flusso normale:

Comando Descrizione
\begin{quote}testo\end{quote}
\begin{quotation}testo\end{quotation}
rientra a destra e a sinistra il testo, in un modo conveniente per includere una citazione.

La differenza tra i due ambienti sta nel fatto che quote non fa rientrare la prima riga dei paragrafi, mentre quotation si comporta come al solito. In ogni caso, entrambi gli ambienti possono contenere più paragrafi o blocchi di altro tipo. Segue un esempio:

Bla bla bla bla bla...

\begin{quote}

    This program is free software; you can redistribute it
    and/or modify it under the terms of the GNU General
    Public License as published by the Free Software
    Foundation; either version 2 of the License, or (at your
    option) any later version.

\end{quote}

Bla bla bla bla bla...

\begin{quotation}

    This program is distributed in the hope that it will be
    useful, but WITHOUT ANY WARRANTY; without even the
    implied warranty of MERCHANTABILITY or FITNESS FOR A
    PARTICULAR PURPOSE.  See the GNU General Public License
    for more details.

    You should have received a copy of the GNU General
    Public License along with this program; if not, write
    to the Free Software Foundation, Inc., 675 Mass Ave,
    Cambridge, MA 02139, USA.

\end{quotation}

citazioni

50.8.5   Versi

LaTeX facilita la scrittura di versi poetici attraverso l'ambiente verse. Si osservi l'esempio seguente:

\section{La Divina Commedia -- Inferno}

canto XV

\begin{verse}
Ora c'en porta l'un de' duri margini;\par
e 'l fummo del ruscel di sopra aduggia,\par
sì che dal foco salva l'acqua e li argini.\par
\end{verse}

versi

Come si può osservare, le strofe devono occupare ognuna un paragrafo separato. L'ambiente verse si occupa in pratica di rientrare in modo particolare i paragrafi, per consentire di riconoscere anche le strofe lunghe. Si osservi cosa accade con una strofa più lunga dello spazio che può avere a disposizione la riga:

strofe lunghe

50.8.6   Testo letterale

Per riprodurre del testo in modo letterale, è disponibile l'ambiente verbatim e il comando \verb:

Comando Descrizione
\begin{verbatim}
testo_preformattato
\end{verbatim}
compone il testo in modo letterale, rispettando anche le interruzioni di riga, usando un carattere dattilografico;
\begin{verbatim*}
testo_preformattato
\end{verbatim*}
come nel caso precedente, evidenziando gli spazi con un segno speciale.
\verbxtesto_letteralex
compone il testo, che non può superare la riga di lunghezza, in modo letterale, usando un carattere dattilografico;
\verb*xtesto_letteralex
come nel caso precedente, evidenziando gli spazi con un segno speciale.

Come si può comprendere dalla spiegazione data nella tabella riepilogativa, l'ambiente verbatim consente di rappresentare facilmente dei blocchi di testo letterali, da riprodurre così come sono nel sorgente, anche nelle interruzioni di riga; al contrario, il comando \verb va usato nel testo normale.

Nel caso dell'ambiente verbatim, il contenuto del testo non ha limitazioni, salvo il fatto che non può includere il comando di chiusura dell'ambiente (\end{verbatim}); mentre il comando \verb delimita il testo letterale con un carattere a scelta, inserito all'inizio e alla fine del testo. Gli esempi seguenti mostrano l'uso dei due modi di indicare testo letterale, in modo normale o con l'asterisco:

\$ \verb@cat -n /bin/bash@ [Invio]

\begin{verbatim}
     1  ^?ELF^A^A^A^@^@^@^@^@^@^@^@^@^B^@^C^@^A^@^@^@M-PM-^Q
     2  ^F^@^@M-w^B^@^@^_^F^@^@M-^^^D^@^@^@^@^@^@^^^F^@^@^K^
     3  ^D^@^@b^F^@^@^@^@^@^@_^C^@^@M-^[^C^@^@M-^[^@^@^@M-^J
    ...
\end{verbatim}

testo letterale

\$ \verb*@ls -l /@ [Invio]

\begin{verbatim*}
drwxr-xr-x    2 root     root         4096 mag  3 22:46 bin
drwxr-xr-x    4 root     root         4096 apr 20 16:15 boot
drwxr-xr-x    7 root     root        20480 mag  5 08:49 dev
drwxr-xr-x  123 root     root         8192 mag  5 08:49 etc
drwxr-xr-x   21 root     root         4096 feb 10 20:59 home
drwxr-xr-x    7 root     root         8192 mag  3 22:48 lib
...
\end{verbatim*}

testo letterale

Si veda anche la sezione 50.14.2 per l'importazione di file esterni da rappresentare in modo letterale.

50.8.7   Ambienti fluttuanti

LaTeX dispone di due ambienti fluttuanti nel testo, preparati idealmente per incorporare tabelle o figure:

\begin{figure}[permesso_di_collocazione]
    figura
\end{figure}
\begin{table}[permesso_di_collocazione]
    tabella
\end{table}

Per il momento, per come sono mostrati i modelli sintattici dell'utilizzo di questi ambienti, non c'è differenza tra un ambiente o l'altro. La collocazione dell'oggetto contenuto nell'ambiente fluttuante, viene concessa attraverso l'uso di alcune lettere alfabetiche, con il significato seguente:

Lettera Significato mnemonico Descrizione
h
here si concede la collocazione nel punto in cui si trova la dichiarazione della tabella o della figura;
t
top si concede la collocazione all'inizio della pagina attuale;
b
bottom si concede la collocazione alla fine della pagina attuale;
p
page si concede la collocazione in una pagina a parte, riservata a questo.

Queste lettere possono essere sommate assieme e conta l'ordine in cui sono dati i permessi di collocazione. Per esempio,

\begin{table}[tbp]
    ...
\end{table}

dichiara una tabella fluttuante che può essere collocata nell'ordine: all'inizio della pagina, alla fine, oppure in una pagina a parte. In pratica, viene esclusa la collocazione nel punto in cui viene dichiarata, a meno che questo coincida con una delle alternative concesse.

Se i permessi di posizionamento dell'oggetto non vengono specificati, LaTeX intende l'uso della sigla tbp, cioè in alto, in basso o in una nuova pagina, escludendo la posizione naturale.

Dal momento che un oggetto inserito in un ambiente fluttuante non può essere suddiviso, risulta difficile imporre la collocazione nello stesso punto in cui si trova, quando ciò costringe a lasciare molto spazio vuoto alla fine di una pagina. Pertanto, l'uso del solo permesso h, senza alternative, diventa privo del suo significato nella maggior parte dei casi. Se la collocazione di questi oggetti deve avvenire necessariamente nella loro posizione naturale, lo si può imporre incorporando il pacchetto float nel preambolo e indicando il permesso H (la lettera H maiuscola):

\usepackage{float}
\begin{document}
...
\begin{table}[H]
    ...
\end{table}

La differenza tra gli ambienti si avverte solo quando si inseriscono le didascalie, attraverso il comando \caption:

\begin{figure}[permesso_di_collocazione]
    \caption{didascalia}
    figura
\end{figure}
\begin{table}[permesso_di_collocazione]
    \caption{didascalia}
    tabella
\end{table}

Il comando \caption può essere inserito in qualunque punto, all'interno dell'ambiente, purché ciò possa avere senso in fase di composizione (generalmente si sceglie l'inizio o la fine, per avere una didascalia superiore o inferiore). L'inserimento del comando fa incrementare il contatore delle figure o delle tabelle, corrispondente rispettivamente a figure o table; inoltre la didascalia risulta arricchita della definizione «figura» o «tabella» con l'aggiunta del numero relativo. Infine, il numero della figura o della tabella viene accumulato per generare un indice specifico, attraverso i comandi \listoffigures e \listoftables.

L'esempio seguente mostra la costruzione di una tabella molto povera, che serve a comprendere quanto si indifferente per LaTeX cosa sia il contenuto effettivo di questi ambienti:

\begin{table}[htbp]
    \begin{verbatim}
            .---------------------------------------------.
            | n. | cognome  | nome          | professione |
            |----|----------|---------------|-------------|
            |  1 | Tizi     | Tizio         | tramviere   |
            |----|----------|---------------|-------------|
            |  2 | Cai      | Caio          | pasticcere  |
            |----|----------|---------------|-------------|
            |  3 | Semproni | Sempronio     | falegname   |
            `---------------------------------------------'
    \end{verbatim}
    \caption{Una tabella molto semplice}
\end{table}

citazioni

Nella sezione 50.6.2 sono descritti i comandi con cui si può ottenere un salto pagina. In particolare, i comandi \clearpage e \cleardoublepage si occupano anche di inserire gli oggetti fluttuanti che non fossero già stati collocati secondo i permessi attribuiti. In pratica, se degli oggetti fluttuanti non hanno ancora potuto essere collocati, questi comandi per il salto pagina forzano il loro l'inserimento nella composizione, probabilmente in una pagina a parte. Di solito, i comandi che in qualche modo implicano un salto pagina, fanno uso di questi comandi \clearpage o \cleardoublepage, proprio per chiudere anche con gli oggetti fluttuanti ancora sospesi.

50.9   Spazi e scatole

LaTeX evita di dare la stessa libertà che dà TeX nella gestione degli spazi e delle scatole. In questo senso, sono disponibili una serie di comandi, spesso simili tra loro, che possono creare un po' di confusione all'utilizzatore.

50.9.1   Spazi orizzontali

A proposito di spazi orizzontali, esistono ovviamente due possibilità: spazi rigidi e spazi elastici. Nel secondo caso, sono disponibili anche comandi che inseriscono puntini o linee in modo elastico, come quando si compila un indice e si vuole guidare la vista verso il numero della pagina.

Comando Descrizione
\hspace{lunghezza}
\hspace*{lunghezza}
Inserisce uno spazio orizzontale rigido. Il valore dell'argomento può essere negativo; in tal caso si ottiene un arretramento. Se lo spazio inserito viene a trovarsi all'inizio di una riga, viene ignorato, a meno che sia usato l'asterisco.

L'esempio seguente vuole mettere a confronto uno spazio normale, che viene soppresso perché si trova all'inizio di una riga, con uno spazio con asterisco, che risulta inserito in ogni caso:

1 Bla bla bla \hspace{3cm} bla bla bla...

2 Bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla \hspace{5cm} bla bla
bla...

3 Bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla \hspace*{5cm} bla bla
bla...

spazi orizzontali rigidi

Comando Descrizione
\hfill
Inserisce uno spazio orizzontale elastico che, in condizioni normali, va a riempire tutto lo spazio disponibile.
\dotfill
Inserisce uno spazio orizzontale elastico contenente dei puntini.
\hrulefill
Inserisce uno spazio orizzontale elastico contenente una linea orizzontale.

Generalmente, lo spazio orizzontale elastico si usa per allineare qualcosa al centro o a destra, come nell'esempio seguente:

\noindent sinistra\hfill centro\hfill destra\par
\noindent sinistra\dotfill centro\hrulefill destra\par

Come si vede dal risultato, questi comandi hanno tutti lo stesso grado di elasticità:

spazi orizzontali elastici

È importante osservare che i comandi per gli spazi elastici non funzionano se si trovano all'inizio o alla fine di una riga. Eventualmente, se è necessario, si può inserire uno spazio non interrompibile (~) primo o dopo il comando:

\noindent ~\hrulefill destra\par
\noindent sinistra\dotfill ~\par

spazi orizzontali elastici

50.9.2   Spazi verticali

I comandi per l'inserimento di spazi verticali riprendono la stessa logica di quelli orizzontali (escludendo il riempimento con puntini o linee). In generale, gli spazi rigidi sono cumulabili.

Comando Descrizione
\vspace{lunghezza}
Inserisce uno spazio verticale rigido. Se si trova all'inizio di una pagina, viene ignorato.
\vspace*{lunghezza}
Inserisce uno spazio verticale rigido. Se si trova all'inizio di una pagina, viene inserito regolarmente.
\addvspace{lunghezza}
Aggiunge uno spazio verticale rigido. Se nello stesso punto vengono usati più comandi \addvspace, viene preso in considerazione solo quello con la lunghezza maggiore.
\vfill
Inserisce uno spazio verticale elastico, che in condizioni normali va a riempire tutto lo spazio disponibile.

L'esempio seguente riguarda l'inserzione di spazi rigidi attraverso i comandi \vspace e \addvspace:

1 Bla bla bla...

\vspace{0.5cm}
2 Bla bla bla...

\vspace{0.5cm}
\vspace{0.5cm}
3 Bla bla bla...

\vspace{0.5cm}
\addvspace{0.5cm}
\addvspace{1.5cm}
4 Bla bla bla...

Si può osservare che i comandi \vspace si sommano tra loro, mentre \addvspace no, limitando ad aggiungere lo spazio più grande:

spazi verticali rigidi

Lo spazio verticale elastico consente di allineare il testo verticalmente, come nell'esempio seguente, in cui si individua un blocco centrale e un blocco in fondo alla pagina:

1 Sopra, bla bla bla...

\vfill
2 Centro, bla bla bla...

\vfill
3 Sotto, bla bla bla...

\newpage

spazi verticali elastici

Per l'uniformità della veste grafica del testo, è importante standardizzare gli spazi verticali, attraverso dei comandi appositi, che cambiano a seconda dello stile generale:

Comando Descrizione
\smallskip
spazio piccolo;
\medskip
spazio medio;
\bigskip
spazio grande.

L'entità dello spazi verticale introdotto da questi comandi dipende da altri comandi:

Comando Descrizione
\smallskipamount
lunghezza piccola;
\medskipamount
lunghezza media;
\bigskipamount
lunghezza grande.

In pratica, i comandi per l'inserzione di spazi verticali standard corrispondono all'uso di \vskip con queste lunghezze uniformi:

spazi verticali standard

L'esempio seguente mostra in pratica l'uso di questi comandi per l'inserzione di spazi verticali standard:

Bla bla bla...\bigskip

Lo spazio prima di questa riga è grande;\medskip

lo spazio prima di questa riga è medio;\smallskip

lo spazio prima di questa riga è piccolo;

lo spazio prima di questa riga è quello normale.

spaziature verticali standard

50.9.3   Elasticità controllabile

È possibile definire in modo semplice una lunghezza elastica da usare poi con comandi come \hspace e \vspace:

Comando Descrizione
\stretch{n}
restituisce una lunghezza elastica pari a n.

Maggiore è il valore attribuito all'argomento di \stretch, maggiore è di conseguenza l'elasticità. A titolo si esempio si può vedere come si trasforma questo comando:

\\stretch

50.9.4   Interlinea

La distanza tra le righe di un blocco di testo normale si può controllare modificando la lunghezza \baselineskip; tuttavia, con l'aiuto del pacchetto setspace, si possono usare comandi che semplificano questo tipo di intervento:

Comando Descrizione
\usepackage{setspace}
dichiara l'utilizzo del pacchetto necessario alla gestione dei comandi sottostanti;
\singlespacing
richiede un'interlinea normale;
\onehalfspacing
richiede un'interlinea maggiore;
\doublespacing
richiede un'interlinea doppia.

L'esempio seguente mostra l'uso e l'effetto di questi comandi:

...
\usepackage{setspace}
...
\begin{document}

\singlespacing
Questo paragrafo ha un'interlinea normale. Bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla...

\onehalfspacing
Questo paragrafo ha un'interlinea pari a una volta e mezza
quella normale. Bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

\doublespacing
Questo paragrafo ha un'interlinea doppia. Bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla...

\end{document}

uso del pacchetto setspace

Anche senza il pacchetto setspace, si può usare nel preambolo il comando seguente:

Comando Descrizione
\linespread{fattore}
moltiplica la distanza tra le righe del fattore indicato.

Per esempio, così:

...
\linespread{2.5}
...
\begin{document}

La distanza tra le righe è di due volte e mezza quella
normale. Bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla...

\end{document}

uso del pacchetto setspace

50.9.5   Scatole

LaTeX offre una serie di comandi per la realizzazione di scatole, bordate e non, alcuni dei quali sono già apparsi in altri capitoli. Oltre alla presenza del bordo, le scatole si distinguono per la capacità o meno di rimpaginano il testo al loro interno.

Comando Comando Descrizione
\mbox{testo}
\fbox{testo}
Inserisce il testo in una scatola larga quanto il testo stesso; nel secondo caso si ottiene una scatola bordata.
\makebox[ampiezza]\
  \[c|l|r|s]{testo}
\framebox[ampiezza]\
  \[c|l|r|s]{testo}
Inserisce il testo (di una sola riga) in una scatola; nel secondo caso si ottiene una scatola bordata.

Quelli appena mostrati sono i comandi più comuni per ottenere delle scatole, in cui il testo occupa sempre una riga. Si può intuire che i comandi \makebox e \framebox, usati senza argomenti opzionali, sono equivalenti rispettivamente a \mbox e \fbox. Il secondo argomento opzionale di \makebox e \framebox è una lettera che indica l'allineamento orizzontale che deve avere il testo contenuto:

Lettera Significato mnemonico Descrizione
c
center testo centrato orizzontalmente nella scatola;
l
left testo allineato a sinistra;
r
right testo allineato a destra;
s
stretch testo allargato per tutta l'ampiezza della scatola.

L'esempio seguente dovrebbe chiarire l'utilizzo di questi comandi:

Bla bla bla \mbox{ciao ciao} bla bla bla \fbox{ciao ciao}
bla bla bla...

Bla bla bla \makebox{ciao ciao} bla bla bla \framebox{ciao
ciao} bla bla bla...

Bla bla bla \makebox[4cm]{ciao ciao} bla bla bla
\framebox[4cm]{ciao ciao} bla bla bla...

Bla bla bla \makebox[4cm][c]{ciao ciao} bla bla bla
\framebox[4cm][c]{ciao ciao} bla bla bla...

Bla bla bla \makebox[4cm][l]{ciao ciao} bla bla bla
\framebox[4cm][l]{ciao ciao} bla bla bla...

Bla bla bla \makebox[4cm][r]{ciao ciao} bla bla bla
\framebox[4cm][r]{ciao ciao} bla bla bla...

Bla bla bla \makebox[4cm][s]{ciao ciao} bla bla bla
\framebox[4cm][s]{ciao ciao} bla bla bla...

scatole

Le scatole bordate con \fbox e \framebox sono controllate da due dimensioni, molto utili per gestirne l'estetica:

Comando Descrizione
\fboxrule=dimensione
\setlength{\fboxrule}{dimensione}
definisce lo spessore della linea usata per il bordo;
\fboxsep=dimensione
\setlength{\fboxsep}{dimensione}
definisce la distanza tra la linea del bordo e il contenuto della scatola.

L'esempio seguente dovrebbe chiarire in che modo usare questi valori per controllare le scatole bordate:

\fbox{scatola bordata normale}
{\fboxrule=3mm\fbox{scatola con bordo più spesso}}
\fbox{scatola bordata normale}
{\fboxsep=3mm\fbox{scatola più spaziosa}}
\fbox{scatola bordata normale}
{\fboxrule=3mm\fboxsep=3mm\fbox{scatola spaziosa con bordo
spesso}}

Si può osservare che le scatole «speciali» sono state racchiuse tra parentesi graffe, per evitare che la modifica delle caratteristiche legate allo spessore della linea e alla distanza dal contenuto, possa coinvolgere il resto del testo. L'alternanza con scatole normali dimostra il funzionamento di questo sistema di contenimento:

scatole bordate

Per inserire in una scatola più di una riga di testo, si possono usare due tipi di istruzioni, ottenendo risultati leggermente differenti:

\parbox[c|t|b][altezza]\
  \[c|t|b|s]{larghezza}{testo}
definisce una scatola, senza bordo, per contenere del testo impaginato nell'ambito della larghezza stabilita;
\begin{minipage}[c|t|b]{larghezza}
testo
\end{minipage}
definisce una scatola, senza bordo, per contenere del testo impaginato nell'ambito della larghezza stabilita.

La differenza più importante tra questi due tipi di scatole sta nel fatto che \parbox consente l'inserimento di testo non troppo complesso, mentre l'ambiente minipage è letteralmente una piccola pagina, in cui anche le note a piè pagina rimangono al suo interno.

In entrambi i casi, il primo argomento opzionale indica la collocazione della scatola, in senso verticale, rispetto alla base della riga in cui ci si trova; pertanto:

Lettera Significato mnemonico Descrizione
c
center richiede una scatola centrata verticalmente rispetto alla riga;
t
top richiede una scatola che parte dalla riga e si espande in basso;
b
bottom richiede una scatola che parte dalla riga e si espande in alto.

L'esempio seguente consente di confrontare il comportamento dei due tipi di scatole per ciò che riguarda l'allineamento di queste rispetto alla riga. Per facilitare il paragone visivo, queste scatole vengono bordate attraverso il comando \fbox:

Bla bla bla bla bla...

Bla bla \fbox{\parbox{2cm}{Questa frase è in una scatola}}
bla \fbox{\parbox[c]{2cm}{Questa frase è in una scatola}}
bla \fbox{\parbox[t]{2cm}{Questa frase è in una scatola}}
bla \fbox{\parbox[b]{2cm}{Questa frase è in una scatola}}
bla bla.

Bla bla bla bla bla...

Bla bla \fbox{\begin{minipage}{2cm}Questa frase è in una
scatola\end{minipage}} bla
\fbox{\begin{minipage}[c]{2cm}Questa frase è in una
scatola\end{minipage}} bla
\fbox{\begin{minipage}[t]{2cm}Questa frase è in una
scatola\end{minipage}} bla
\fbox{\begin{minipage}[b]{2cm}Questa frase è in una
scatola\end{minipage}} bla bla.

Bla bla bla bla bla...

Come si vede dal risultato della composizione, per il momento non si notano differenze:

scatole per contenere testo impaginato

Dalla sintassi mostrata a proposito di \parbox, si nota la possibilità di indicare l'altezza della scatola, assieme a un terzo argomento opzionale che serve a collocare il testo nella scatola:

Lettera Significato mnemonico Descrizione
c
center testo centrato verticalmente nella scatola;
t
top testo in alto;
b
bottom testo in basso;
s
stretch testo allungato per tutta l'altezza della scatola.

L'esempio seguente riguarda esclusivamente \parbox, per mostrare l'uso dei due ulteriori argomenti opzionali:

Bla bla bla bla bla...

Bla bla bla \fbox{\parbox[c][2cm]{2cm}{Questa frase è in una
scatola}}
\fbox{\parbox[c][2cm][c]{2cm}{Questa frase è in una scatola}}
\fbox{\parbox[c][2cm][t]{2cm}{Questa frase è in una scatola}}
\fbox{\parbox[c][2cm][b]{2cm}{Questa frase è in una scatola}}
\fbox{\parbox[c][2cm][s]{2cm}{Questa frase è in una scatola}}

Bla bla bla bla bla...

Si può osservare che nell'ultima scatola, l'opzione di allungamento verticale del testo non funziona, perché il testo non possiede spazi elastici:

scatole con \\parbox

50.9.6   Testo da salvare e da recuperare

LaTeX ha una capacità limitata di memorizzare del testo in modo da poterlo inserire successivamente nella composizione:

Comando Descrizione
\begin{lrbox}{n}testo\end{lrbox}
accumula nel registro n il testo indicato;
\usebox{n}
inserisce nella composizione il testo corrispondente al registro n, in una scatola orizzontale.

La spiegazione dei due modelli sintattici dovrebbe essere sufficiente a comprendere il funzionamento della cosa; tuttavia è importante sottolineare che il testo accumulato può essere composto da una sola riga e viene poi rappresentato come se fosse inserito in una scatola \mbox. Segue un esempio:

\begin{lrbox}{1}
ciao a tutti
\end{lrbox}

\begin{lrbox}{2}
ma che bello
\end{lrbox}

Bla bla bla \usebox{2} bla bla bla \usebox{1} bla bla bla
\usebox{2} bla bla bla \usebox{1} bla bla bla...

scatole salvate e riprese

50.9.7   Linee

Con LaTeX, si ottengono linee orizzontali o verticali con il comando \rule. Per la precisione, si disegnano dei rettangoli neri di ampiezza e altezza stabiliti; pertanto, per ottenere una linea orizzontale si utilizza un rettangolo molto largo e molto basso, mentre per una linea verticale si usa un rettangolo molto stretto. Questi rettangoli sono collocati a loro volta nella parte superiore di una scatola, che in condizioni normali è alta quanto basta per contenere l'oggetto.

\rule{larghezza}{altezza}
\rule[spazio_verticale_aggiuntivo]{larghezza}{altezza}

L'esempio seguente riguarda la realizzazione di alcune linee, verticali e orizzontali, senza spazi verticali aggiuntivi:

Bla bla bla...

Bla bla bla \rule{0.5mm}{1cm} \rule{0.6mm}{1cm}
\rule{0.7mm}{1cm} \rule{0.8mm}{1cm} \rule{0.9mm}{1cm}
\rule{1mm}{1cm} bla bla bla...

\rule{\textwidth}{0.5mm}

\rule{\textwidth}{0.6mm}

\rule{\textwidth}{0.7mm}

\rule{\textwidth}{0.8mm}

\rule{\textwidth}{0.9mm}

\rule{\textwidth}{1mm}

Bla bla bla...

linee

L'esempio seguente è una variante con l'aggiunta di spazi verticali aggiuntivi:

Bla bla bla...

Bla bla bla \rule[1mm]{0.5mm}{1cm} \rule[2mm]{0.6mm}{1cm}
\rule[3mm]{0.7mm}{1cm} \rule[4mm]{0.8mm}{1cm}
\rule[5mm]{0.9mm}{1cm} \rule[6mm]{1mm}{1cm} bla bla bla...

\rule[1mm]{\textwidth}{0.5mm}

\rule[2mm]{\textwidth}{0.6mm}

\rule[3mm]{\textwidth}{0.7mm}

\rule[4mm]{\textwidth}{0.8mm}

\rule[5mm]{\textwidth}{0.9mm}

\rule[6mm]{\textwidth}{1mm}

Bla bla bla...

linee

50.10   Riferimenti incrociati

LaTeX gestisce diversi tipi di riferimenti incrociati, di cui il più importante è l'indice generale, ottenuto attraverso il comando \tableofcontents. La gestione dei riferimenti incrociati avviene attraverso la creazione di file temporanei, adibiti ad accumulare le informazioni, da riutilizzare attraverso rielaborazioni successive. In pratica, è proprio la presenza di questi riferimenti incrociati che obbliga a ripetere il procedimento di composizione più volte.

50.10.1   Indice generale, indice delle tabelle e delle figure

La creazione dell'indice generale, dell'indice delle tabelle e dell'indice delle figure, parte dall'accumulo delle informazioni sulla collocazione di queste voci. Per la precisione, i comandi che definiscono la suddivisione del documento annotano il titolo, il numero della sezione e la pagina in un file con estensione .toc (Table of contents); i comandi \caption inseriti nell'involucro fluttuante di una tabella o di una figura, annotano il numero e la pagina in cui si trovano in file con estensione .lot (List of tables) e .lof (List of figures).

Nella rielaborazione successiva (quando il comando di composizione viene ripetuto), questi file possono essere incorporati attraverso i comandi \tableofcontents, \listoftables e \listoffigures, per ottenere rispettivamente l'indice generale, l'indice delle tabelle e delle figure.

Dal momento che l'inserzione modifica la lunghezza del testo, a meno che gli indici siano collocati alla fine del documento, si rende necessaria almeno una terza rielaborazione.

Comando Descrizione
\tableofcontents
inserisce nella composizione l'indice generale, ottenuto dal file .toc, generato dalla composizione precedente;
\listoftables
inserisce nella composizione l'indice delle tabelle, ottenuto dal file .lot, generato dalla composizione precedente;
\listoffigures
inserisce nella composizione l'indice delle figure, ottenuto dal file .lof, generato dalla composizione precedente.

L'inserimento di voci in questi elenchi può avvenire anche in modo manuale, attraverso due comandi appositi:

Comando Descrizione
\addtocontents{toc|lot|lof}{testo}
aggiunge il testo indicato nell'ultimo argomento, nell'indice corrispondente alla sigla del primo argomento (indice generale, indice delle tabelle o indice delle figure);
\addcontentsline\
  \{toc|lot|lof}{livello}{testo}
aggiunge la voce nell'indice corrispondente alla sigla del primo argomento.

Il funzionamento del comando \addtocontents è relativamente semplice, nel senso che ci si limita ad aggiungere del testo nell'indice prescelto:

\tableofcontents

\section{Prima}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

\addtocontents{toc}{Ciao a tutti\par}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

\section{Seconda}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

Si può osservare che nel testo inserito è stata aggiunta la richiesta esplicita di concludere il paragrafo; ciò si rende necessario per evitare problemi imprevisti nel momento dell'incorporazione del file .toc.

indici

L'uso di \addcontentsline è più complesso, perché richiede anche l'indicazione del «livello» della voce. Se si tratta dell'indice generale, il livello è rappresentato dalle parole chiave da part a subparagraph, mentre negli altri casi è ammesso l'uso di table o figure. Così si intende che la voce inserita sia da trattare allo stesso modo del livello corrispondente, per ciò che riguarda la composizione. Nell'esempio che segue, la voce si inserisce al livello di una sottosezione:

\tableofcontents

\section{Prima}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

\addcontentsline{toc}{subsection}{Ciao a tutti}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

\section{Seconda}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

Come si vede, in questo caso non c'è più bisogno di concludere il paragrafo nel testo, cosa che al contrario genererebbe qui solo un errore:

indici

Volendo, si può spiare il contenuto del file .toc generato, per scoprire come si può aggiungere una cifra davanti alla voce inserita manualmente:

\contentsline {section}{\numberline {1}Prima}{1}
\contentsline {section}{Ciao a tutti}{1}
\contentsline {section}{\numberline {2}Seconda}{1}

Intuitivamente si comprende l'uso del comando \numberline:

\tableofcontents

\section{Prima}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

\addcontentsline{toc}{subsection}{\numberline{1.1}Ciao a
tutti}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

\section{Seconda}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

indici

50.10.2   Riferimenti liberi

LaTeX mette a disposizione pochi comandi per la creazione di riferimenti incrociati all'interno del testo. Attraverso il comando \label è possibile definire un'etichetta alla quale si può fare riferimento con i comandi \ref o \pageref:

Comando Descrizione
\label{stringa_identificativa}
mette un punto di riferimento invisibile, identificato dalla stringa contenuta nell'argomento;
\ref{stringa_identificativa}
inserisce nella composizione il numero corrispondente alla stringa di identificazione indicata, secondo il contesto;
\pageref{stringa_identificativa}
inserisce nella composizione il numero della pagina corrispondente alla stringa di identificazione indicata.

La posizione in cui viene collocato il comando \label è importante, in quanto \ref si comporta diversamente a seconda del contesto. Se l'etichetta viene dichiarata all'interno di testo normale, il riferimento generico a questa restituisce un numero, più o meno articolato, che indica la sezione o il capitolo in cui si trova; se invece l'etichetta viene dichiarata all'interno di un ambiente numerato, come una tabella, una figura, un'equazione o altro, il riferimento a questa genera il numero corrispondente a tale elemento.

A titolo di esempio, viene mostrato come si potrebbe procedere per la costruzione manuale di un indice generale, senza l'ausilio del comando \tableofcontents:

\section*{Indice}

\noindent\ref{sec:Prima} Prima, pag. \pageref{sec:Prima}

\noindent\ref{sec:Seconda} Seconda, pag.
\pageref{sec:Seconda}

\section{Prima} \label{sec:Prima}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

\section{Seconda} \label{sec:Seconda}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla...

riferimenti

È bene ribadire che LaTeX inserisce implicitamente le etichette generate con il comando \label in un contesto particolare, per cui il risultato del comando \ref cambia di conseguenza. Tuttavia, il numero che viene mostrato da \ref non è accompagnato dal contesto in fase di composizione, pertanto è compito dell'autore scrivere di cosa si tratta (capitolo, sezione, tabella, figura o altro). In questo senso, diventa importante ricordare a cosa si riferisce una certa stringa di identificazione, pertanto, la stessa documentazione originale di LaTeX propone di usare un prefisso diverso in base al contesto:

Comando Descrizione
\label{cha:stringa_successiva}
etichetta di identificazione di un capitolo;
\label{sec:stringa_successiva}
etichetta di identificazione di una sezione di livello inferiore al capitolo;
\label{tab:stringa_successiva}
etichetta di identificazione di una tabella;
\label{fig:stringa_successiva}
etichetta di identificazione di una figura;
\label{eq:stringa_successiva}
etichetta di identificazione di un'equazione.

Le stringhe di identificazione generate dal comando \label, sono annotate in un file con estensione .aux (assieme ad altre informazioni estranee). Quando LaTeX viene riavviato in una fase di composizione successiva, carica in memoria i dati contenuti nel file .aux e lo utilizza per risolvere i riferimenti con i comandi \ref e \pageref.

50.10.3   Indice analitico

La realizzazione di un indice analitico, ovvero un indice che raccoglie una serie ordinata di voci che possono essere inserite in varie parti del documento, è più complessa rispetto a quella dell'indice generale. In special modo, in questo caso è necessario provvedere a riordinare e riorganizzare i dati nel modo corretto. I comandi coinvolti per la realizzazione dell'indice analitico, sono riassunti brevemente nell'elenco seguente:

Comando Descrizione
\usepackage{makeidx}
si usa questo comando nel preambolo per importare il codice necessario alla gestione dell'indice analitico;
\makeindex
si usa questo comando, sempre nel preambolo, per attivare la gestione dell'indice analitico;
\index{voce}
inserisce la voce indicata nel file .idx, dal quale si ottiene poi l'indice analitico;
\printindex
inserisce l'indice analitico contenuto nel file .ind, ottenuto attraverso un'elaborazione esterna a LaTeX.

Come si vede, è necessario utilizzare un pacchetto esterno, denominato makeidx, quindi si deve attivare la costruzione dell'indice, con il comando \makeindex. Pertanto, si inseriscono le istruzioni seguenti nel preambolo:

\usepackage{makeidx}
\makeindex

Lo scopo particolare di \makeindex è quello di aprire un file con estensione .idx, in cui il comando \index può poi annotare le sue voci. Si osservi l'esempio seguente:

...
\usepackage{makeidx}
\makeindex
...
\begin{document}

\section{Prima} \index{resistenza}\index{induttanza}

Qui si parla di resistenze e di induttanze, bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla...

\section{Seconda} \index{capacità}

Qui si parla di capacità e simili, bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla...

\end{document}

Nella composizione finale, i comandi \index non producono alcun risultato e si comportano in modo simile al comando \label:

riferimenti

Dopo l'elaborazione normale con LaTeX si ottiene un file con estensione .idx, con il contenuto seguente:

\indexentry{resistenza}{1}
\indexentry{induttanza}{1}
\indexentry{capacit\`a}{1}
\indexentry{resistenza}{1}

Si può osservare che le voci sono state inserite nella sequenza in cui appaiono nel sorgente LaTeX, senza tenere conto di eventuali ripetizioni. Ma LaTeX non è nelle condizioni di usare questo file direttamente nell'elaborazione successiva; prima occorre riordinare e riorganizzare le voci attraverso il programma makeindex:

makeindex nome_file_senza_estensione

Per esempio, se si sta facendo la composizione del file prova.tex, è sufficiente il comando:

makeindex prova[Invio]

In questo modo, makeindex cerca di leggere il file prova.idx (quello generato dall'elaborazione di LaTeX) e produce il file prova.ind, che, seguendo l'esempio, dovrebbe contenere quanto segue:

\begin{theindex}

  \item capacit\`a, 1

  \indexspace

  \item induttanza, 1

  \indexspace

  \item resistenza, 1

\end{theindex}

Come si può vedere, la voce resistenza contiene un riferimento unico, dal momento che appare due volte, ma nella stessa pagina finale.(3)

Se il sorgente LaTeX contiene il comando \printindex, in quel punto viene inserito il contenuto del file con estensione .ind, a partire da una pagina nuova, con l'aggiunta di un titolo adeguato:

...
\usepackage{makeidx}
\makeindex
...
\begin{document}

\section{Prima} \index{resistenza}\index{induttanza}

Qui si parla di resistenze e di induttanze, bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla...

\section{Seconda} \index{capacità}

Qui si parla di capacità e simili, bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla...

\printindex

\end{document}

riferimenti

riferimenti

È da osservare che la voce indicata come argomento del comando \index può essere più articolata, in base alle capacità elaborative di makeindex. In pratica, si utilizzano dei simboli per separare la voce in più parti. L'elenco seguente dovrebbe aiutare a comprendere il meccanismo:

Comando Descrizione
\index{voce}
questa è la situazione normale, in cui si inserisce la voce indicata, così come inserita, nell'indice;
\index{voce_principale!voce_secondaria}
il punto esclamativo permette di separare una voce principale da una parte secondaria, che poi può essere mostrata con un leggero rientro rispetto alla prima parte;
\index{voce_principale@voce_abbellita}
la chiocciola separa una prima parte, da prendere in considerazione ai fini dell'ordinamento, dalla seconda parte che invece viene mostrata nell'indice, consentendo l'uso di comandi che modificano l'aspetto del carattere;
\index{voce\
  \|comandi_per_il_numero_della_pagina}
la barra verticale separa la voce dell'indice dai comandi per controllare l'aspetto del numero della pagina (comandi da usare senza la barra obliqua inversa iniziale).

L'esempio seguente è una variante di quanto già visto, per mostrare l'uso del comando \index con questi simboli particolari:

\section{Prima}
\index{resistenza}\index{resistenza!induttiva|textit}

Qui si parla di resistenze e di induttanze, bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla...

\section{Seconda} \index{resistenza!capacitiva|textit}
\index{resistenza@\texttt{resistenza}}

Qui si parla di capacità e ancora di resistenza, bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla...

Ecco come si presenta l'indice; si può osservare che la voce resistenza appare due volte, perché il tipo di carattere è stato modificato:

riferimenti

50.10.4   Bibliografie

LaTeX offre una gestione molto semplice delle bibliografie attraverso l'uso dell'ambiente thebibliography. I comandi coinvolti sono descritti brevemente nell'elenco seguente:

Comando Descrizione
\begin{thebibliography}\
  \{stringa_di_esempio}...\
  \\end{thebibliography}
dichiara l'ambiente che contiene le informazioni bibliografiche;
\bibitem[sigla]\
  \{stringa_identificativa_della_voce}
all'interno dell'ambiente thebibliography dichiara l'inizio di una voce bibliografica;
\cite[testo_aggiuntivo\
  \{stringa_identificativa_della_voce}}
si usa al di fuori dell'ambiente thebibliography, per richiamare il riferimento a una voce bibliografica.

In pratica, l'ambiente thebibliography serve a raccogliere le voci bibliografiche, ognuna dichiarata attraverso il comando \bibitem. Nel risultato della composizione, le voci vengono precedute da una sigla, come indicato dal comando \bibitem, oppure da un numero gestito in modo automatico; pertanto, per garantire un allineamento corretto, la dichiarazione dell'ambiente richiede un argomento composto da una stringa di esempio, che rappresenti l'ampiezza massima di questa sigla, sia gestita manualmente, sia automatica.

Al di fuori dell'ambiente thebibliography, di solito prima di questo, si usa il comando \cite per fare riferimento a una voce bibliografica, attraverso la stringa identificativa che usa lo stesso comando \bibitem. Se viene usato l'argomento opzionale di \cite, si ottiene l'aggiunta di quella stringa dopo la sigla usata per identificarlo.

Per cominciare conviene mostrare un esempio molto semplice, in cui non si usano argomenti opzionali:

\section{Resistenze e condensatori}

Qui si parla di resistenze \cite{res} e di condensatori
\cite{con}, bla bla bla bla bla bla bla bla bla...

\begin{thebibliography}{99}
\bibitem{res} Tizio Tizi, \textit{Resistenze elettriche},
2002
\bibitem{con} Caio Cai, \textit{Condensatori e correnti
alternate}, 2001
\end{thebibliography}

Come si vede, l'argomento della dichiarazione dell'ambiente thebibliography contiene la stringa 99, perché si sa che la sigla usata per distinguere le voci non può essere più lunga di un numero di due cifre:

bibliografie

Volendo aggiungere un riferimento a una certa pagina del primo libro citato, basta sfruttare l'argomento opzionale di \cite:

Qui si parla di resistenze \cite[pag. 1]{res} e di
condensatori \cite{con}, bla bla bla bla bla bla bla bla
bla...

bibliografie

Infine, per usare delle sigle più significative, si può sfruttare l'argomento opzionale del comando \bibitem, ma in questo caso occorre intervenire anche nella dichiarazione dell'ampiezza massima di queste stringhe:

\begin{thebibliography}{ZZZZZ}
\bibitem[TIZ]{res} Tizio Tizi, \textit{Resistenze
elettriche}, 2002
\bibitem[COND]{con} Caio Cai, \textit{Condensatori e
correnti alternate}, 2001
\end{thebibliography}

bibliografie

Come si intuisce, l'uso di riferimenti bibliografici di questo tipo richiede delle rielaborazioni successive, anche se in questo caso non intervengono programmi esterni.

Eventualmente, se questo tipo di gestione bibliografica si mostra insufficiente, è disponibile BibTeX, che consente di gestire una bibliografia molto dettagliata in un file esterno, dove solo le voci richieste espressamente vengono poi mostrate nella composizione finale.

50.11   Tabelle

LaTeX offre due ambienti per la costruzione di tabelle: tabbing e tabular. Il primo dei due riguarda la realizzazione di tabelle attraverso delle tabulazioni, mentre il secondo è invece più completo, anche se poi offre meno libertà.

50.11.1   Tabella fatta di tabulazioni

Attraverso l'ambiente tabbing, si può allineare il testo in colonne, fissando gli stop di tabulazione attraverso scatole orizzontali di riferimento, che di solito si ottengono con del testo opportuno. Si osservi subito un esempio molto semplice:

\begin{tabbing}
marrone \= 10 \% \= quattro \kill

nero \> 0 \> zero \\
marrone \> 1 \> uno \\
rosso \> 2 \> due \\
arancio \> 3 \> tre \\
giallo \> 4 \> quattro \\
verde \> 5 \> cinque \\
blu \> 6 \> sei \\
viola \> 7 \> sette \\
grigio \> 8 \> otto \\
bianco \> 9 \> nove \\

argento \> 10 \% \\
oro \> 5 \% \\
\> 2 \% \\
\> 1 \% \\
\end{tabbing}

Si può già comprendere intuitivamente il significato delle istruzioni inserite nell'esempio. In particolare, si può osservare nel risultato della composizione che la prima riga non appare, ma serve solo per indicare alle righe successive la collocazione degli stop di tabulazione; infatti, si può vedere che la prima riga contiene l'esempio del testo più lungo utilizzato in ogni colonna:

tabella

La sintassi per l'utilizzo di questo ambiente tabbing è rappresentata in modo semplificato dal modello seguente:

\begin{tabbing}
testo \= testo [\= testo]... \kill
testo \> testo [\> testo]... \\
[testo \> testo [\> testo]... \\]
...
\end{tabbing}

Il modello non esaurisce tutte le possibilità, ma rende l'idea dell'utilizzo più frequente: all'inizio si dichiara la distanza degli stop di tabulazione con una riga di esempio, che poi non viene prodotta nella composizione. Tra le alternative possibili, c'è da considerare la possibilità di definire gli stop di tabulazione in una riga che poi viene comunque emessa anche nella composizione (in tal caso si sostituisce \kill con \\); inoltre, è possibile modificare gli stop di tabulazione con un'altra riga contenente comandi \=. Segue la descrizione dei comandi più importanti che riguardano l'ambiente tabular:

Comando Descrizione
\=
fissa uno stop di tabulazione nella posizione in cui si trova;
\>
salta allo stop di tabulazione successivo;
\kill
prende in considerazione i comandi che fissano gli stop di tabulazione, ma non mostra la riga corrispondente nella composizione finale;
\pushtabs
\poptabs
salva e ripristina le posizioni degli stop di tabulazione, quando si vuole avere una suddivisione diversa in un ambito temporaneo della tabella.

In realtà, i comandi specifici dell'ambiente tabbing sono molti di più; in particolare, la sovrapposizione di accenti alle lettere funziona in modo diverso dal solito. Onde evitare di creare confusione per questo motivo, si preferisce mostrare un modo alternativo di usare l'ambiente tabbing, allo scopo di raggirare questo inconveniente:

\begin{tabbing}
testo [\= testo]... \kill
\parbox{\textwidth}{testo} [\> \parbox{\textwidth}{testo}]... \\
[\parbox{\textwidth}{testo} [\> \parbox{\textwidth}{testo}]... \\]
...
\end{tabbing}

In pratica, si inserisce il testo di ogni cella dentro l'ambiente definito dal comando \parbox, che ripristina le condizioni di funzionamento normale.

Per definire in modo preciso gli stop di tabulazione, ci si può avvalere del comando \hspace, il cui scopo è quello di produrre uno spazio orizzontale ben definito:

\begin{tabbing}
\hspace*{largh_col} [\= \hspace*{largh_col}]... \kill
\parbox{\textwidth}{testo} \
  \[\> \parbox{\textwidth}{testo}]... \\ [\parbox{\textwidth}{testo} \
  \[\> \parbox{\textwidth}{testo}]... \\] ... \end{tabbing}

L'asterisco che appare nel comando \hspace è un'opzione necessaria a evitare che lo spazio finale venga eliminato (diversamente non si otterrebbe l'effetto desiderato). Viene ripreso l'esempio iniziale, modificato con le tecniche appena descritte, aggiungendo una colonna ulteriore per dei commenti:

\begin{tabbing}
\hspace*{3cm} \= \hspace*{2cm} \= \hspace*{3cm} \= \hspace*{4cm} \kill

\parbox{\textwidth}{nero}    \> \parbox{\textwidth}{0}
    \> \parbox{\textwidth}{zero} \\
\parbox{\textwidth}{marrone} \> \parbox{\textwidth}{1}
    \> \parbox{\textwidth}{uno} \\
\parbox{\textwidth}{rosso}   \> \parbox{\textwidth}{2}
    \> \parbox{\textwidth}{due} \\
\parbox{\textwidth}{arancio} \> \parbox{\textwidth}{3}
    \> \parbox{\textwidth}{tre} \\
\parbox{\textwidth}{giallo}  \> \parbox{\textwidth}{4}
    \> \parbox{\textwidth}{quattro} \\
\parbox{\textwidth}{verde}   \> \parbox{\textwidth}{5}
    \> \parbox{\textwidth}{cinque} \\
\parbox{\textwidth}{blu}     \> \parbox{\textwidth}{6}
    \> \parbox{\textwidth}{sei} \\
\parbox{\textwidth}{viola}   \> \parbox{\textwidth}{7}
    \> \parbox{\textwidth}{sette} \\
\parbox{\textwidth}{grigio}  \> \parbox{\textwidth}{8}
    \> \parbox{\textwidth}{otto} \\
\parbox{\textwidth}{bianco}  \> \parbox{\textwidth}{9}
    \> \parbox{\textwidth}{nove} \\

\parbox{\textwidth}{argento} \> \parbox{\textwidth}{10 \%}
  \> \> \parbox{\textwidth}{bla bla bla bla bla bla bla bla bla bla bla} \\
\parbox{\textwidth}{oro} \> \parbox{\textwidth}{5 \%} \\
                         \> \parbox{\textwidth}{2 \%} \\
                         \> \parbox{\textwidth}{1 \%} \\
\end{tabbing}

Per il momento, le tecniche mostrate non risolvono ancora il problema del traboccamento del testo da una colonna a quella successiva. A questo proposito, nell'esempio si può osservare che il commento nella quarta colonna, per la quale si prevede una larghezza di 4 cm, va oltre lo spazio a disposizione.

tabella

Per ovviare a questo inconveniente, occorre controllare meglio il comando \parbox, specificando esattamente la larghezza, nello stesso modo usato per la definizione degli stop di tabulazione:

\begin{tabbing}
\hspace*{3cm} \= \hspace*{2cm} \= \hspace*{3cm}
              \= \hspace*{4cm} \kill

\parbox{3cm}{nero}    \> \parbox{2cm}{0}
    \> \parbox{3cm}{zero} \\
\parbox{3cm}{marrone} \> \parbox{2cm}{1}
    \> \parbox{3cm}{uno} \\
\parbox{3cm}{rosso}   \> \parbox{2cm}{2}
    \> \parbox{3cm}{due} \\
\parbox{3cm}{arancio} \> \parbox{2cm}{3}
    \> \parbox{3cm}{tre} \\
\parbox{3cm}{giallo}  \> \parbox{2cm}{4}
    \> \parbox{3cm}{quattro} \\
\parbox{3cm}{verde}   \> \parbox{2cm}{5}
    \> \parbox{3cm}{cinque} \\
\parbox{3cm}{blu}     \> \parbox{2cm}{6}
    \> \parbox{3cm}{sei} \\
\parbox{3cm}{viola}   \> \parbox{2cm}{7}
    \> \parbox{3cm}{sette} \\
\parbox{3cm}{grigio}  \> \parbox{2cm}{8}
    \> \parbox{3cm}{otto} \\
\parbox{3cm}{bianco}  \> \parbox{2cm}{9}
    \> \parbox{3cm}{nove} \\

\parbox{3cm}{argento} \> \parbox{2cm}{10 \%}
    \> \> \parbox{4cm}{bla bla bla bla bla bla bla
                       bla bla bla bla} \\
\parbox{3cm}{oro} \> \parbox{2cm}{5 \%} \\
                         \> \parbox{2cm}{2 \%} \\
                         \> \parbox{2cm}{1 \%} \\
\end{tabbing}

In questo modo, finalmente, il testo che eccede lo spazio a disposizione viene suddiviso automaticamente in più righe; inoltre, è possibile controllare la posizione verticale del testo nella cella, attraverso le opzioni di \parbox.

tabella

L'ultimo problema che vale la pena di prendere in considerazione in questo tipo di ambiente, è la definizione di tabulazioni relative all'ampiezza del testo. Ciò si ottiene anteponendo un numero davanti al comando che restituisce già questo valore. Per esempio, 0.5\textwidth rappresenta esattamente la metà dell'ampiezza orizzontale a disposizione. Viene riproposto l'esempio consueto con l'indicazione di ampiezze relative:

\begin{tabbing}
\hspace*{0.2\textwidth} \= \hspace*{0.1\textwidth}
    \= \hspace*{0.2\textwidth}
    \= \hspace*{0.8\textwidth} \kill

\parbox{0.2\textwidth}{nero}    \> \parbox{0.1\textwidth}{0}
    \> \parbox{0.2\textwidth}{zero} \\
\parbox{0.2\textwidth}{marrone} \> \parbox{0.1\textwidth}{1}
    \> \parbox{0.2\textwidth}{uno} \\
\parbox{0.2\textwidth}{rosso}   \> \parbox{0.1\textwidth}{2}
    \> \parbox{0.2\textwidth}{due} \\
\parbox{0.2\textwidth}{arancio} \> \parbox{0.1\textwidth}{3}
    \> \parbox{0.2\textwidth}{tre} \\
\parbox{0.2\textwidth}{giallo}  \> \parbox{0.1\textwidth}{4}
    \> \parbox{0.2\textwidth}{quattro} \\
\parbox{0.2\textwidth}{verde}   \> \parbox{0.1\textwidth}{5}
    \> \parbox{0.2\textwidth}{cinque} \\
\parbox{0.2\textwidth}{blu}     \> \parbox{0.1\textwidth}{6}
    \> \parbox{0.2\textwidth}{sei} \\
\parbox{0.2\textwidth}{viola}   \> \parbox{0.1\textwidth}{7}
    \> \parbox{0.2\textwidth}{sette} \\
\parbox{0.2\textwidth}{grigio}  \> \parbox{0.1\textwidth}{8}
    \> \parbox{0.2\textwidth}{otto} \\
\parbox{0.2\textwidth}{bianco}  \> \parbox{0.1\textwidth}{9}
    \> \parbox{0.2\textwidth}{nove} \\

\parbox{0.2\textwidth}{argento}
    \> \parbox{0.1\textwidth}{10 \%}
    \> \> \parbox{0.3\textwidth}{bla bla bla bla bla bla bla
                                 bla bla bla bla} \\
\parbox{0.2\textwidth}{oro}
    \> \parbox{0.1\textwidth}{5 \%} \\
    \> \parbox{0.1\textwidth}{2 \%} \\
    \> \parbox{0.1\textwidth}{1 \%} \\
\end{tabbing}

tabella

Questo tipo di tabella, ottenuta attraverso degli stop di tabulazione, è fatta per poter essere separata anche in più pagine; inoltre, non si adatta facilmente all'inserimento di bordi attorno alle celle. Tuttavia, per la gestione dei bordi si preferisce di solito l'ambiente tabular.

50.11.2   Tabella fatta di colonne e righe

Anche se in pratica si tratta sempre della stessa cosa, l'ambiente tabular non fa riferimento a degli stop di tabulazione, ma a delle colonne, definite contestualmente alla dichiarazione iniziale dell'ambiente:

\begin{tabular}{definizione_delle_colonne}
testo & testo [& testo]... \\
[testo & testo [& testo]... \\]
...
\end{tabular}

Il modello appena mostrato è semplificato rispetto alle possibilità complessive dell'ambiente tabular. Come si può intuire, il simbolo & viene usato per identificare la fine di una colonna e l'inizio di quella successiva; inoltre, come già avveniva per l'ambiente tabbing, si usa il comando \\ per dichiarare la fine di una riga della tabella.

La definizione delle colonne avviene attraverso una stringa particolare che può essere anche molto articolata. Per cominciare in modo semplice, si può usare una lettera per ogni colonna, dove la lettera ha un significato specifico:

Lettera Descrizione
l
rappresenta una colonna il cui contenuto deve essere allineato a sinistra;
r
rappresenta una colonna il cui contenuto deve essere allineato a destra;
c
rappresenta una colonna il cui contenuto deve essere allineato al centro.

Inoltre, esiste la possibilità di segnalare l'inserzione di una linea verticale alle estremità oppure tra una colonna e l'altra:

Simbolo Descrizione
|
rappresenta una separazione attraverso una linea verticale.

Per esempio, la tabella che viene dichiarata nel modo seguente, indica la presenza di tre colonne, dove la prima e la terza ha il testo allineato a sinistra, mentre quella centrale ha il testo allineato a destra; inoltre, definisce un bordo verticale sinistro, un bordo destro e un bordo tra la prima e la seconda colonna.

\begin{tabular}{|l|rl|}

Viene riproposto un esempio già mostrato a proposito dell'ambiente tabbing, secondo questa definizione di colonne:

\begin{tabular}{|l|rl|}
nero            & 0     & zero          \\
marrone         & 1     & uno           \\
rosso           & 2     & due           \\
arancio         & 3     & tre           \\
giallo          & 4     & quattro       \\
verde           & 5     & cinque        \\
blu             & 6     & sei           \\
viola           & 7     & sette         \\
grigio          & 8     & otto          \\
bianco          & 9     & nove          \\
argento         & 10 \% &               \\
oro             & 5 \%  &               \\
                & 2 \%  &               \\
                & 1 \%  &               \\
\end{tabular}

tabella

Come si vede, non è stata dichiarata l'ampiezza delle colonne, pertanto questa viene determinata automaticamente, prendendo in considerazione l'ampiezza della cella che contiene il testo più lungo, anche se questo può produrre una tabella più larga dello spazio a disposizione nel corpo del documento.

Sempre rimanendo a un livello realizzativo molto semplice, si possono inserire delle linee orizzontali, attraverso il comando \hline, come nella variante seguente, in cui si aggiunge anche un'intestazione molto semplice:

\begin{tabular}{|l|rl|}
\hline
Colore          & Numero        &       \\
\hline
nero            & 0     & zero          \\
marrone         & 1     & uno           \\
rosso           & 2     & due           \\
arancio         & 3     & tre           \\
giallo          & 4     & quattro       \\
verde           & 5     & cinque        \\
blu             & 6     & sei           \\
viola           & 7     & sette         \\
grigio          & 8     & otto          \\
bianco          & 9     & nove          \\
argento         & 10 \% &               \\
oro             & 5 \%  &               \\
                & 2 \%  &               \\
                & 1 \%  &               \\
\hline
\end{tabular}

tabella

Per quanto visto fino a questo momento, si intende che non si possono ottenere celle in cui il testo utilizzi più di una riga. Tuttavia, come già mostrato a proposito dell'ambiente tabbing, si può sfruttare il comando \parbox:

\documentclass{article}
\usepackage[italian]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\frenchspacing
\pagestyle{empty}
\setlength{\textwidth}{14cm}
\begin{document}

\begin{tabular}{|l|rl|l|}
\hline
\parbox{0.2\textwidth}{Colore}
    & \parbox{0.1\textwidth}{Numero}  &   &      \\
\hline
\parbox{0.2\textwidth}{nero}    & \parbox{0.1\textwidth}{0}
    & \parbox{0.2\textwidth}{zero}      &        \\
\parbox{0.2\textwidth}{marrone} & \parbox{0.1\textwidth}{1}
    & \parbox{0.2\textwidth}{uno}       &        \\
\parbox{0.2\textwidth}{rosso}   & \parbox{0.1\textwidth}{2}
    & \parbox{0.2\textwidth}{due}       &        \\
\parbox{0.2\textwidth}{arancio} & \parbox{0.1\textwidth}{3}
    & \parbox{0.2\textwidth}{tre}       &        \\
\parbox{0.2\textwidth}{giallo}  & \parbox{0.1\textwidth}{4}
    & \parbox{0.2\textwidth}{quattro}   &        \\
\parbox{0.2\textwidth}{verde}   & \parbox{0.1\textwidth}{5}
    & \parbox{0.2\textwidth}{cinque}    &        \\
\parbox{0.2\textwidth}{blu}     & \parbox{0.1\textwidth}{6}
    & \parbox{0.2\textwidth}{sei}       &        \\
\parbox{0.2\textwidth}{viola}   & \parbox{0.1\textwidth}{7}
    & \parbox{0.2\textwidth}{sette}     &        \\
\parbox{0.2\textwidth}{grigio}  & \parbox{0.1\textwidth}{8}
    & \parbox{0.2\textwidth}{otto}      &        \\
\parbox{0.2\textwidth}{bianco}  & \parbox{0.1\textwidth}{9}
    & \parbox{0.2\textwidth}{nove}      &        \\

\parbox{0.2\textwidth}{argento}
    & \parbox{0.1\textwidth}{10 \%}
    & & \parbox{0.3\textwidth}{bla bla bla bla bla bla bla
                               bla bla bla bla} \\
\parbox{0.2\textwidth}{oro}
                            & \parbox{0.1\textwidth}{5 \%}
    &   &        \\
                            & \parbox{0.1\textwidth}{2 \%}
    &   &        \\
                            & \parbox{0.1\textwidth}{1 \%}
    &   &        \\
\hline
\end{tabular}

\end{document}

tabella

Per ottenere un risultato molto simile a questo, si potrebbe usare una dichiarazione particolare nella definizione delle colonne:

\begin{tabular}{|p{0.2\textwidth}|\
  \p{0.1}\textwidth}p{0.2\textwidth}|p{0.3\textwidth}|}

In tal modo si semplifica l'indicazione dei dati nelle celle:

\begin{tabular}{|p{0.2\textwidth}|p{0.1\textwidth}
p{0.2\textwidth}|p{0.3\textwidth}|}
\hline
Colore          & Numero        &       &       \\
\hline
nero            & 0     & zero          &       \\
marrone         & 1     & uno           &       \\
rosso           & 2     & due           &       \\
arancio         & 3     & tre           &       \\
giallo          & 4     & quattro       &       \\
verde           & 5     & cinque        &       \\
blu             & 6     & sei           &       \\
viola           & 7     & sette         &       \\
grigio          & 8     & otto          &       \\
bianco          & 9     & nove          &       \\
argento         & 10 \% &               & bla bla bla bla
                                          bla bla bla bla
                                          bla bla bla \\
oro             & 5 \%  &               &       \\
                & 2 \%  &               &       \\
                & 1 \%  &               &       \\
\hline
\end{tabular}

tabella

Come si può intuire, quella p{} è un modo per dire che il contenuto delle celle deve essere racchiuso all'interno del comando \parbox e il funzionamento è molto simile.

Oltre alla possibilità di usare il comando \hline per ottenere una linea orizzontale che divida le righe della tabella, si può ottenere una linea che intervenga solo nell'ambito di alcune colonne, attraverso il comando \cline. Si osservi l'esempio seguente che è solo una piccola variante dell'ultimo già presentato:

\begin{tabular}{|p{0.2\textwidth}|p{0.1\textwidth}
p{0.2\textwidth}|p{0.3\textwidth}|}
\hline
Colore          & Numero &       &       \\
\hline
nero            & 0      & zero  &       \\
marrone         & 1      & uno   &       \\
...
\cline{1-3}
argento         & 10 \%  &       & bla bla bla
                                               bla bla bla
                                               bla bla bla
                                               bla bla \\
oro             & 5 \%   &       &       \\
\cline{2-4}
                & 2 \%   &       &       \\
                & 1 \%   &       &       \\
\hline
\end{tabular}

In pratica, \cline{1-3} genera una linea orizzontale che parte dall'inizio della prima colonna, fino alla fine della terza colonna; nello stesso modo, \cline{2-4} genera una linea dalla seconda colonna fino alla quarta inclusa:(4)

tabella

50.11.3   Tabella a cavallo di più pagine

L'ambiente tabular genera un blocco che non può essere diviso tra le pagine; per ottenere una tabella che può continuare nelle pagine successive, si può usare l'ambiente longtable, che però richiede un pacchetto esterno con lo stesso nome. Il funzionamento generale dell'ambiente longtable è molto simile a quello di tabular, con l'aggiunta di qualche comando che consente di individuare un'intestazione e un piede da ripetere quando la tabella si interrompe e riprende nella pagina successiva:

Comando Descrizione
\usepackage{longtable}
dichiara l'utilizzo del pacchetto necessario alla gestione delle tabelle «lunghe»;
\begin{longtable}{descrizione_colonne}
...
\end{longtable}
dichiara l'ambiente di una tabella lunga;
\endhead
dichiara la fine delle righe da usare come intestazione;
\endfoot
dichiara la fine delle righe da usare alla base della tabella.

In generale, una volta dichiarato l'ambiente, si inseriscono le righe da usare come intestazione e subito dopo quelle da usare alla base della tabella; infine si inseriscono le righe del corpo della tabella.

Per il funzionamento dell'ambiente longtable non è indispensabile individuare delle righe di intestazione e di conclusione della tabella; tuttavia, per ottenere un risultato gradevole al cambio pagina, conviene sfruttare questa caratteristica.

L'esempio seguente è solo una piccola variante di un altro già apparso a proposito dell'ambiente tabular. Si osservi in particolare l'uso dei comandi \endhead e \endfoot:

...
\usepackage{longtable}
...
\begin{document}
...
\begin{longtable}{|p{0.2\textwidth}|p{0.1\textwidth}
p{0.2\textwidth}|p{0.3\textwidth}|}
\hline
Colore          & Numero &       &       \\
\hline
\endhead
\hline
\endfoot
nero            & 0      & zero  &       \\
marrone         & 1      & uno   &       \\
...
                & 1 \%   &       &       \\
\end{longtable}

Come si vede nell'esempio, ciò che viene messo alla base della tabella è semplicemente un comando \hline, per ottenere una linea orizzontale quando la tabella si interrompe; così facendo, alla fine della tabella non viene aggiunto un comando \hline, perché altrimenti i due si sommerebbero:

tabella

Le tabelle ottenute con l'ambiente longtable hanno degli inconvenienti. Quello più appariscente riguarda l'incapacità di tenere in considerazione le note a piè di pagina, le quali vengono tranquillamente sovrascritte da una tabella che scorre anche sulla pagina successiva.

50.12   LaTeX: figure

Esistono diversi modi di realizzare dei disegni o di importare delle immagini esterne con LaTeX. Probabilmente, la tecnica più comune è quella di incorporare un'immagine o un disegno realizzato con strumenti interattivi esterni, ma è comunque importante conoscere più possibilità a disposizione, anche se non nel dettaglio.

50.12.1   Disegnare con LaTeX

LaTeX offre un ambiente particolare, picture, nel quale è possibile realizzare dei disegni utilizzando eventualmente dei comandi specifici. In generale, si tratta soprattutto di grafici, che contengono anche del testo collocato in modo preciso. L'esempio seguente serve per dare un punto di riferimento visivo alla descrizione che viene fatta successivamente a proposito di questo ambiente:

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla 

\setlength{\unitlength}{1cm}
\begin{picture}(3,2)(0,0)
\put(0,0){0,0}
\put(0,0){\line(1,0){3}}
\put(0,2){\line(1,0){3}}
\put(0,0){\line(0,1){2}}
\put(3,0){\line(0,1){2}}
\put(3,2){3,2}
\end{picture}

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla 

Ecco il risultato della composizione. Il testo prima e dopo la figura, serve a comprendere in che modo LaTeX la allinea e quanto viene spaziata verticalmente:

figura

L'ambiente picture viene dichiarato in modo insolito rispetto agli altri comandi di LaTeX:

\setlength{\unitlength}{dimensione}

...

\begin{picture}(ampiezza,altezza)(coordinata_iniziale_x,\
  \          coordinata_iniziale_y) \put(coordinata_x,coordinata_y){oggetto} ... ... \end{picture}

In pratica, da qualche parte del documento, prima dell'uso dell'ambiente picture, occorre assegnare un valore (non elastico) alla lunghezza \unitlength; questa lunghezza diventa poi l'unità di misura delle lunghezze e delle coordinate usate nell'ambito dell'ambiente picture. Naturalmente, il valore di \unitlength può essere cambiato successivamente, prima di altre figure.

Come si può vedere, l'ambiente picture utilizza degli argomenti tra parentesi tonde, che non si trovano altrimenti in LaTeX, ma la cosa più interessante è che la seconda parentesi tonda è facoltativa.(5)

La prima coppia di numeri tra parentesi tonde serve a delimitare un rettangolo ideale, all'interno del quale si intende collocare la figura. Nel caso dell'esempio, dal momento che \unitlength è di 1 cm, si tratta di un rettangolo largo 3 cm e alto 2 cm. La seconda coppia di numeri, opzionale, specifica le coordinate dell'angolo inferiore sinistro. Di solito si assegna a queste coordinate il valore zero, come si vede nell'esempio.

Gli «oggetti» grafici o testuali che vengono piazzati nella figura possono anche essere collocati al di fuori del rettangolo che la dovrebbe contenere, ma ovviamente, in tal modo viene meno il senso della definizione all'inizio dell'ambiente picture.

Tutto ciò che appare all'interno dell'ambiente picture viene inserito tramite il comando \put, dove, sempre tra parentesi quadre, si individuano le coordinate iniziali di un oggetto da collocare. Queste coordinata iniziali si intendono sempre relative alle coordinate iniziali del rettangolo in cui si colloca la figura.

L'esempio introduttivo, mostra un riquadro, disegnato sul bordo esterno del rettangolo che rappresenta l'area della figura. Inoltre, vengono collocate due etichette testuali, a partire dall'angolo inferiore sinistro di questo rettangolo e a partire dall'angolo superiore destro, per consentire di comprendere in che modo viene collocato il testo. In effetti, si può vedere che quanto scritto a partire dall'angolo superiore destro si trova in pratica al di fuori del rettangolo della figura.

All'interno del controllo di \put possono essere usati diversi comandi specifici, con i quali si realizzano facilmente linee, riquadri, ovali e cerchi. Viene mostrato un elenco parziale di questi.

Comando Descrizione
\circle*{diametro}
Disegna un cerchio con centro nelle coordinate iniziali, del diametro indicato, espresso in quantità di \unitlength. Se si usa l'asterisco, si ottiene un cerchio pieno (nero).
\dashbox{lunghezza_del_tratteggio}\
  \(ampiezza,altezza)\
  \[t|l|b|r|tl|bl|br|tr]{testo}
Disegna un rettangolo tratteggiato, con le coordinate iniziali corrispondenti all'angolo inferiore sinistro. L'ampiezza e l'altezza sono numeri che esprimono quantità di \unitlength. All'interno del rettangolo si può collocare del testo, contenuto nell'ultimo argomento, che di solito appare al centro, salvo il suo riposizionamento con l'uso di lettere particolari nell'argomento opzionale tra parentesi quadre.
\makebox(ampiezza,altezza)\
  \[t|l|b|r|tl|bl|br|tr]{testo}
Delimita un rettangolo, senza bordo, con le coordinate iniziali corrispondenti all'angolo inferiore sinistro. L'ampiezza e l'altezza sono numeri che esprimono quantità di \unitlength. All'interno del rettangolo si può collocare del testo, contenuto nell'ultimo argomento, che di solito appare al centro, salvo il suo riposizionamento con l'uso di lettere particolari nell'argomento opzionale tra parentesi quadre.
\frame{oggetto}
Disegna una cornice attorno all'oggetto, senza aggiungere altro spazio.
\line(scostamento_x,scostamento_y)\
  \{lunghezza}
Disegna una linea a partire dalle coordinate iniziali, passante idealmente nelle coordinate descritte tra parentesi tonde, come valore che va a sommarsi alle coordinate iniziali. Questo punto passante può essere indicato solo con valori interi, da zero a sei, e serve in pratica a descrivere l'inclinazione della linea.
\vector(scostamento_x,scostamento_y)\
  \{lunghezza}
Disegna una linea, come il comando \line, aggiungendo una freccia all'estremità finale.
\oval(ampiezza,altezza)\
  \[t|l|b|r|tl|bl|br|tr]
Disegna un ovale, oppure, se molto grande, un rettangolo smussato. Le lettere tra parentesi quadre, opzionali, consentono di mostrare solo una porzione dell'ovale.
\linethickness{lunghezza}
Consente di fissare lo spessore delle linee diritte generate da alcuni comandi. È importante osservare che la lunghezza della linea deve essere un valore positivo, espresso in modo indipendente da \unitlength.

Viene mostrato un esempio complessivo dei comandi descritti (escluso \linethickness):

\setlength{\unitlength}{1cm}
\begin{picture}(9,6)(0,0)
\put(0,0){\frame{\makebox(9,6){}}}
\put(1,1){\frame{tizio}}
\put(4,3){\dashbox{0.1}(1,0.5){caio}}
\put(4,3){\line(-3,-2){2.6}}
\put(4.5,3){\vector(0,-1){1}}
\put(4.5,1.5){\circle{1}}
\put(7,1.5){\oval(2,1)}
\put(5,1.5){\line(1,0){1}}
\end{picture}

figura

Come si intende, la realizzazione di disegni attraverso l'ambiente picture, può risultare impegnativo, quando il disegno diventa complesso. Tuttavia esiste la possibilità di usare XFig (sezione 29.6.4), che è in grado di esportare i propri disegni in formato LaTeX, con le limitazioni grafiche necessarie. A titolo di esempio, si suppone di avere realizzato il file FIG disegno.fig, corrispondente a ciò che si può vedere sotto:

disegno realizzato con XFig

Per trasformare questo file in codice adatto a un sorgente LaTeX si può usare fig2dev nel modo seguente, allo scopo di generare il file disegno.tex:

fig2dev -L latex disegno.fig disegno.tex[Invio]

Il file che si ottiene è piuttosto complesso e probabilmente qualche comando non viene individuato correttamente da LaTeX. Per ovviare all'inconveniente, dovrebbe essere sufficiente eliminare i comandi che creano dei problemi. In generale dovrebbe trattarsi del comando \color:

cat disegno.tex \
  \| sed "s/[\]color\\[rgb\\][{][0-9,]*[}]//" \
  \> disegno_2.tex
[Invio]

Ecco cosa si ottiene alla fine, con la composizione LaTeX:

figura

50.12.2   Importazione di file EPS esterni

Un modo più semplice di inserire delle immagini nel testo realizzato con LaTeX è quello di incorporare delle immagini esterne attraverso il pacchetto epsfig, il quale si incorpora con il comando seguente, inserito preferibilmente nel preambolo:

\usepackage{epsfig}

Successivamente è possibile usare il comando \epsfig per fare riferimento a un file EPS (Encapsulated PostScript) da inserire nella composizione finale. Semplificando si può indicare come nel modello sintattico seguente:

\epsfig{file=file_eps,height=altezza,width=larghezza,\
  \angle=rotazione}

Il file rappresenta il percorso assoluto o relativo di un file EPS (oppure PostScript), ma senza estensione: il pacchetto epsfig si attende di trovarlo con l'estensione .ps. La larghezza e l'altezza vengono espresse nell'unità di misura desiderata; infine, l'angolo di rotazione permette di girare l'immagine, ma di solito si lascia il valore zero.

Non tutte le informazioni sono necessarie; per esempio, se si omettono le informazioni su altezza e larghezza, si fa riferimento alle dimensioni originali; nello stesso modo, se si mette solo la larghezza, si ottiene un'altezza proporzionale. In pratica, si individuano delle opzioni separate da virgole che possono essere omesse.

L'uso del pacchetto epsfig è compatibile con pdfLaTeX, il quale invece incorpora immagini in formato PNG. Questi file vengono cercati nello stesso percorso, ma con estensione .png.

In alternativa esiste anche un altro pacchetto adatto all'inserimento di immagini EPS. Si tratta di graphicx che si incorpora con il comando seguente inserito nel preambolo del sorgente LaTeX:

\usepackage{graphicx}

Successivamente si può usare il comando \includegraphics:

\includegraphics\
  \[width=larghezza,height=altezza,scale=scala,angle=rotazione]\
  \{file_eps}

A differenza di quanto visto con \epsfig, c'è anche la possibilità di definire una scala, attraverso un valore, dove l'unità rappresenta un rapporto pari al 100 %.

Con \includegraphics esiste anche una differenza più importante rispetto a \epsfig: è necessario indicare anche l'estensione del file, la quale non è più determinata automaticamente. In questo modo, se si intende usare pdfLaTeX, è necessario fare riferimento a formati grafici differenti, cambiando di conseguenza l'estensione.

50.12.3   Estrazione di file EPS dal file PostScript finale

All'interno di un file PostScript, generato attraverso LaTeX e Dvips, le immagini inserite incorporando file EPS, come descritto nella sezione precedente, sono delimitate da due direttive molto precise:

%%BeginDocument: nome_file
codice_eps_della_figura
%%EndDocument

Sapendo questo, è possibile recuperare le immagini da un file PostScript di questo tipo attraverso un procedimento manuale, o automatico. Quello che segue è un piccolo programma Perl che legge dallo standard input il file PostScript e crea tutti i file che trova dichiarati come appena descritto (una copia di questo file dovrebbe essere disponibile anche qui: allegati/ps-latex-picture-save.pl):

#!/usr/bin/perl
#
my ($line)    = "";
my ($picture) = "";
my ($save)    = 0;
#
while ($line = <STDIN>)
  {
    if    ($line =~ m/^\%\%BeginDocument: (\S+)$/)
      {
        $save = 1;
        $picture = $1;
        open (PICTURE, "> $picture");
      }
    elsif ($line =~ m/^\%\%EndDocument$/)
      {
        close (PICTURE);
        $picture = "";
        $save = 0;
      }
    else
      {
        if ($save)
          {
            print PICTURE ("$line");
          }
      }
  }

Supponendo che questo programma sia stato salvato nel file ps-latex-picture-save e che sia stato reso eseguibile, si potrebbe usare come nell'esempio seguente:

ps-latex-picture-save < mio_file.ps[Invio]

Si osservi che questo procedimento può funzionare solo se il file PostScript di partenza è stato ottenuto direttamente da Dvips, tenendo conto che non ci devono essere state delle rielaborazioni successive, altrimenti si perdono i riferimenti descritti.

50.13   Ambienti matematici

Come avviene per TeX, anche LaTeX distingue una modalità di composizione normale, da una modalità matematica. A differenza di TeX, esistono degli ambienti speciali per la dichiarazione della modalità matematica, ma è ancora ammissibile l'uso del simbolo $ e di $$ per individuare l'inizio e la fine degli ambienti matematici.

Molto di quanto già descritto a proposito di TeX (sezione 49.16), vale ovviamente anche per la composizione matematica di LaTeX. Pertanto, alcuni dettagli non vengono descritti nuovamente.

Si tenga presente che la gestione degli ambienti matematici potrebbe essere ancora più raffinata con l'utilizzo del pacchetto amsmath (\usepackage{amsmath}).

50.13.1   Definizione della modalità matematica

La modalità matematica si può definire con LaTeX in diversi modi. Anche con LaTeX si distingue se la composizione matematica vada inserita nell'ambito del testo normale, oppure in un blocco indipendente. L'elenco seguente riepiloga le istruzioni necessarie a delimitare gli ambienti matematici:

Comando Descrizione
\begin{math}testo_matematico\end{math}
\(testo_matematico\)
$testo_matematico$
compone il testo matematico nel blocco già esistente;
\begin{displaymath}
   testo_matematico
\end{displaymath}
\[testo_matematico\]
$$testo_matematico$$
compone il testo matematico in un blocco separato;
\begin{equation}
   testo_matematico
\end{equation}
compone il testo matematico in un blocco separato, annotando sul bordo il numero dell'equazione.

Come si vede dall'elenco, vengono offerte delle alternative per ottenere lo stesso tipo di ambiente. Vengono mostrati due esempi molto semplici, già apparsi nel capitolo riferito a TeX, che riguardano l'inserimento di una formula nel testo normale e la sua separazione in un blocco a sé stante:

Se $R$ è il ritardo di ogni singola consegna, $T$
è il tempo a disposizione per la consegna, $I$ è il valore
della merce, il ritardo medio si esprime come
\begin{math}{\sum {R \over T} \cdot I}\over{\sum I}
\end{math}.

formula nel testo normale

Se $R$ è il ritardo di ogni singola consegna, $T$
è il tempo a disposizione per la consegna, $I$ è il valore
della merce, il ritardo medio si esprime secondo la formula
seguente:

\begin{displaymath}{\sum {R \over T} \cdot I}\over{\sum
I}\end{displaymath}

formula in un blocco

A parte le situazioni normali, merita attenzione l'ambiente equation, con il quale si può inserire un'equazione in un blocco separato, al quale si può fare riferimento tramite un'etichetta. Si osservi l'esempio:

L'equazione \ref{ritardo-medio} mostra in che modo si
calcola il ritardo medio, dove $R$ è il ritardo di ogni
singola consegna, $T$ è il tempo a disposizione per la
consegna e $I$ è il valore della merce.

\begin{equation}\label{ritardo-medio}
{\sum {R \over T} \cdot I}\over{\sum I}
\end{equation}

equazione

50.13.2   Spazi orizzontali e punteggiatura

LaTeX si comporta nello stesso modo di TeX a proposito della spaziatura orizzontale negli ambienti matematici. In pratica, gli spazi orizzontali vengono ignorati, a meno che si usino comandi appositi per inserirli:

Sequenza Significato
\qquad
Due quadratoni.
\quad
Un quadratone.
\<SP>
Uno spazio «normale».
$\;$
Uno spazio spesso (5/8 di quadratone).
$\>$
Uno spazio medio (2/9 di quadratone).
$\.$
Uno spazio molto sottile (1/6 di quadratone).
$\!$
Uno spazio negativo (-1/6 di quadratone).

Per inserire del testo descrittivo all'interno di un ambiente matematico, lo si può delimitare in una scatola orizzontale, con il comando \makebox, o più semplicemente con \mbox:

$prima durante e dopo$\par
$prima \mbox{ durante } e dopo$\par

Come si può intendere, si vuole isolare e spaziare la parola «durante» rispetto al resto, mostrandola con caratteri normali.

spaziatura negli ambienti matematici

Anche la spaziatura attorno ai simboli di punteggiatura funziona esattamente come con TeX puro e semplice. L'esempio seguente riassume i casi principali:

$123456.7890$\par
$123456,7890$\par
$123456{,}7890$\par
$123456;7890$\par
$123456:7890$\par
$123456:=7890$\par
$123456\colon 7890$\par

punteggiatura nel contesto matematico

50.13.3   Caratteri e simboli

LaTeX è più ricco di simboli rispetto a TeX, se si utilizza il pacchetto latexsym:

\usepackage{latexsym}

Le tabelle che seguono riepilogano i simboli a disposizione, inclusi quelli provenienti dal pacchetto latexsym.

Tabella 50.282. Accenti nell'ambiente matematico.

accenti nell'ambiente matematico

Tabella 50.283. Lettere greche.

lettere greche

Tabella 50.284. Simboli matematici comuni.

simboli comuni nell'ambiente matematico

Tabella 50.285. Operatori binari comuni.

operatori binari comuni

Tabella 50.286. Operatori di relazione.

operatori binari di relazione

Tabella 50.287. Frecce.

frecce

Tabella 50.288. Ellissi.

ellissi

Tabella 50.289. Altri simboli matematici.

altri simboli matematici

50.13.4   Delimitatori

LaTeX dispone degli stessi delimitatori di TeX, mantenendo la disponibilità dei comandi \big... e \Big... per gli ingrandimenti controllati. La tabella seguente serve a richiamare l'uso di questi delimitatori, tenendo conto che l'uso dei comandi \big... e \Big... può essere esteso anche oltre gli esempi mostrati.

Tabella 50.290. Delimitatori.

delimitatori

Esiste comunque la possibilità di usare comandi \big... \Big..., senza la lettera l o r che specifica trattarsi di un delimitatore sinistro o destro:

delimitatori

LaTeX offre anche qualche delimitatore speciale; precisamente delle parentesi graffe orizzontali, da usare sopra o sotto qualcosa:

Comando Descrizione
\overbrace{testo}
sovrappone una parentesi graffa sopra il testo;
\underbrace{testo}
sovrappone una parentesi graffa sopra il testo.

Sono ancora validi con LaTeX i comandi \overline e \underline, per sopralineare e sottolineare nell'ambiente matematico.

50.13.5   Modifica delle caratteristiche del carattere

Anche con LaTeX sono disponibili i comandi che permettono di controllare la dimensione del carattere negli ambienti matematici. In ordine decrescente, si tratta di: \displaystyle, \textstyle, \scriptstyle e \scriptscriptstyle. Viene mostrato un esempio già apparso a proposito di TeX:

$$x+{y\over x+{y\over x+{y\over x+{y\over x+{y\over
z}}}}}$$\par
$$x+{y\over \displaystyle x+{y\over \displaystyle x+{y\over
\displaystyle
x+{y\over \displaystyle x+{y\over z}}}}}$$\par

esempio-dimensione-testo

A differenza di TeX, LaTeX aggiunge dei comandi cumulabili, anche per la definizione dello stile e della forma del carattere matematico. Nella sezione 50.7.3 è già stato trattato questo argomento, comunque viene riportato nuovamente l'elenco di questi comandi:

Comando Descrizione
\mathnormal{testo}
testo matematico normale;
\mathrm{testo}
tondo;
\mathbf{testo}
neretto;
\mathsf{testo}
lineare;
\mathtt{testo}
dattilografico;
\mathit{testo}
corsivo;
\mathcal{testo}
calligrafico;
\mathsc{testo}
maiuscoletto;

50.13.6   Espressioni varie

LaTeX consente di usare i comandi per la realizzazione di frazioni e simili, già disponibili con TeX:

Inoltre, LaTeX mette a disposizione un comando aggiuntivo per le frazioni, che forse può risultare comodo in alcune situazioni:

Comando Descrizione
\frac{numeratore}{denominatore}
frazione normale.

Gli apici e i pedici funzionano con LaTeX esattamente come in TeX:

Per ottenere una radice, LaTeX utilizza il comando \sqrt, che però si comporta in modo leggermente diverso da TeX:

Comando Descrizione
\sqrt[n]{argomento}
produce la radice n dell'argomento indicato.

Seguono alcuni esempi:

LaTeX mette a disposizione gli stessi comandi di TeX per la scrittura dei nomi delle funzioni (sezione 49.17.8). Tuttavia, se si desidera scrivere il nome di una funzione in modo differente, lo si può inserire in una scatola orizzontale:

$$\mbox{sen}(2x)$$

sen(2x)

Per sovrapporre qualcosa si può usare il comando \stackrel:

$$\stackrel{a}{B}$$

sen(2x)

50.13.7   Matrici e sistemi di equazioni

Con LaTeX si rappresentano le matrici in modo molto simile alle tabelle:

\begin{array}{definizione_delle_colonne}
testo & testo [& testo]... \\
[testo & testo [& testo]... \\]
...
\end{array}

La definizione delle colonne avviene, come per l'ambiente tabular, attraverso una stringa composta da tre lettere possibili:

Lettera Significato mnemonico Descrizione
l
left rappresenta una colonna il cui contenuto deve essere allineato a sinistra;
r
right rappresenta una colonna il cui contenuto deve essere allineato a destra;
c
center rappresenta una colonna il cui contenuto deve essere allineato al centro.

Comunque, come nell'ambiente tabular, è possibile anche inserire il simbolo | per ottenere una linea verticale e si può usare il comando \hline per inserire una linea orizzontale.

Segue un esempio molto semplice:

$$\left (
\begin{array}{cc|c}
a & b & c \\
d & e+f & g \\
\hline
h & i & j \\
\end{array}
\right )$$

Come si può osservare, l'ambiente array crea la tabella in cui vanno inseriti gli elementi della matrice, mentre la delimitazione esterna deve essere aggiunta espressamente:

matrice

Trattandosi di una matrice, l'ambiente array si presta in pratica anche per realizzare un sistema di equazioni; è sufficiente regolare correttamente l'allineamento delle colonne, come nell'esempio seguente:

$$|x| =
\bigg \{
\begin{array}{rl}
x & x \geq 0 \\
-x & x \leq 0 \\
\end{array}
$$

valore assoluto

L'ambiente array può essere usato in pratica nello stesso modo di tabular, consentendo così la realizzazione di schemi più complessi di quanto mostrato qui. Eventualmente si consulti la sezione 50.11.2.

Tuttavia, esiste un ambiente speciale per elencare delle equazioni allineate a cui poter fare riferimento; si tratta di eqnarray:

\begin{eqnarray}
testo & testo & testo \\
testo & testo & testo \\
...
\end{eqnarray}

In pratica, si tratta di una tabella in cui si presuppone la presenza di tre colonne, allineate rispettivamente a sinistra, al centro e a sinistra. Sarebbe semplicissimo realizzare questo con l'ambiente array, ma la differenza sta nel fatto che ogni riga viene numerata in qualità di equazione. Si osservi l'esempio, in cui si inseriscono anche delle etichette che poi consentono di farvi riferimento:

\begin{eqnarray}
x & = & 2y \label{equazione_xy} \\
y & = & 3z \label{equazione_yz}
\end{eqnarray}

L'equazione \ref{equazione_xy} dice che... mentre
l'equazione \ref{equazione_yz} fa riferimento a...

Si osservi il fatto che l'ultima riga della matrice non è terminata con il simbolo \\, perché diversamente si otterrebbe un'equazione in più, numerata, anche se invisibile:

equazioni abbinate

Ancora più importante è notare che l'ambiente eqnarray viene dichiarato in un contesto normale, ma delimita un ambiente matematico particolare.

Eventualmente, per evitare di numerare una certa riga, si può usare il comando \nonumber; inoltre, se si aggiunge un asterisco al nome dell'ambiente, non viene mostrata la numerazione di alcuna equazione:

\begin{eqnarray*}
x & = & 2y \label{equazione_xy} \\
y & = & 3z \label{equazione_yz}
\end{eqnarray*}

L'equazione \ref{equazione_xy} dice che... mentre l'equazione
\ref{equazione_yz} fa riferimento a...

equazioni abbinate

50.13.8   Teoremi, corollari e dichiarazioni simili

LaTeX ha una gestione sofisticata delle dichiarazioni riconducibili a teoremi, corollari e simili. Si parte dalla dichiarazione di un ambiente, al quale si associa un contatore, in modo tale da non porre limitazioni al genere di dichiarazioni che si vogliono gestire.

Inizialmente si definisce il tipo di contesto a cui appartiene un certo gruppo di dichiarazioni:

\newtheorem{ambiente}{Titolo}[contatore_di_riferimento]
\newtheorem{ambiente}[ambiente_collegato]{Titolo}

La seconda delle due forme permette di definire un ambiente la cui numerazione deve seguire quella di un altro già definito. In questo senso, nel campo indicato come ambiente_collegato, va messo il nome di quello già esistente.

Per cominciare, si osservi l'esempio seguente, senza l'indicazione di alcun contatore di riferimento:

\newtheorem{teorema}{Teorema}

In questo modo si dichiara l'ambiente teorema, con il titolo «Teorema», assieme al contatore teorema (a cui si accede facilmente con il comando \thetheorem, creato implicitamente), usato in modo trasparente.

Nel dichiarare un ambiente di questo tipo, occorre evitare di scegliere nomi giù usati da LaTeX.

Dopo la definizione dell'ambiente teorema, si può usare in pratica questo ambiente; per esempio così:

\begin{teorema}
In teoria, non c'è differenza tra pratica e teoria.
\end{teorema}

\begin{teorema}
In pratica, la teoria è diversa dalla pratica.
\end{teorema}

Dal risultato della composizione si può osservare che il titolo, ovvero la parola «Teorema», viene messo in evidenza con un carattere nero, assieme al numero del contatore; subito dopo appare il testo del teorema in un carattere corsivo:

teoremi

Nella definizione dell'ambiente teorema è stato omesso il contatore di riferimento, pertanto il conteggio dei teoremi parte da uno e prosegue di conseguenza. Si osservi invece l'esempio seguente, che presuppone un documento di tipo article:

\newtheorem{teorema}{Teorema}[section]

In questo modo, si ottiene una numerazione subordinata al contatore section, ovvero alla sequenza delle sezioni:

\section{Alcuni teoremi interessanti}
\begin{teorema}
In teoria, non c'è differenza tra pratica e teoria.
\end{teorema}

\begin{teorema}
In pratica, la teoria è diversa dalla pratica.
\end{teorema}

\section{Un'altra sezione}
\begin{teorema}
Un altro teorema.
\end{teorema}

Si può osservare che il numero mostrato dopo il titolo è strutturato, essendo composto da un prefisso che contiene il numero della sezione e da un suffisso che costituisce il numero relativo all'ambito della sezione:

teoremi

Con questa tecnica della dipendenza da un altro contatore, si possono costruire dei corollari la cui numerazione dipende dal teorema appena enunciato. Nell'esempio seguente si mostra anche la definizione degli ambienti usati:

\newtheorem{teorema}{Teorema}[section]
\newtheorem{corollario}{Corollario}[teorema]

\section{Alcuni teoremi e corollari interessanti}

\begin{teorema}
In teoria, non c'è differenza tra pratica e teoria.
\end{teorema}

\begin{corollario}
Bla bla bla bla.
\end{corollario}

\begin{teorema}
In pratica, la teoria è diversa dalla pratica.
\end{teorema}

\begin{corollario}
Bla bla bla bla.
\end{corollario}

teoremi

Volendo invece usare una numerazione unica, sia per i teoremi, sia per i corollari, si può usare la seconda forma per la definizione dell'ambiente:

\newtheorem{teorema}{Teorema}[section]
\newtheorem{corollario}[teorema]{Corollario}
...

Ecco il risultato seguendo l'ultimo esempio già mostrato:

teoremi

Naturalmente si possono definire anche ambienti di tipo diverso, a seconda delle esigenze; quello che conta è non usare nomi che possono creare conflitti per LaTeX.

Dal momento che queste definizioni sono numerate, diventa importante potervi fare riferimento. Per questo è necessario dichiarare un'etichetta con il comando \label all'interno dell'ambiente:

\newtheorem{teorema}{Teorema}[section]

\section{Alcuni teoremi e corollari interessanti}

\begin{teorema} \label{teorema-della-teoria}
In teoria, non c'è differenza tra pratica e teoria.
\end{teorema}

Purtroppo, il teorema \ref{teorema-della-teoria} viene
confutato dal teorema \ref{teorema-della-pratica}:

\begin{teorema} \label{teorema-della-pratica}
In pratica, la teoria è diversa dalla pratica.
\end{teorema}

teoremi

50.14   File esterni

LaTeX prevede alcuni comandi per l'inclusione di file esterni; inoltre, è possibile creare file con informazioni ottenute in fase di composizione, in modo da poterle rielaborare successivamente con altri programmi.

50.14.1   Importazione

Esistono due comandi molto simili per dire a LaTeX di incorporare un file esterno:

Comando Descrizione
\input{nome_file}
include il file nel punto in cui appare il comando (può essere usato anche nel preambolo);
\include{nome_file}
include il file nel punto in cui appare il comando, dopo un salto pagina (non può essere usato nel preambolo);
\includeonly{nome_file_1,nome_file_2,...\
  \          nome_file_n}
usato nel preambolo, consente di selezionare quali file possono essere inclusi effettivamente con il comando \include.

Se i nomi dei file non contengono l'estensione, si intende che questa sia .tex; inoltre, come si può intuire dal nome, il comando \includeonly può interferire solo con le inclusioni attraverso \include.

50.14.2   Importazione letterale

Se si utilizza il pacchetto verbatim viene messo a disposizione un comando particolare per l'inserimento di file esterni da rappresentare nella composizione in modo letterale:

Comando Descrizione
\usepackage{verbatim}
include il pacchetto verbatim (nel preambolo);
\verbatiminput{nome_file}
include il file nel punto in cui appare, rappresentandolo tale e quale.

50.14.3   Creazione di file

Per creare un file si deve prima definire il flusso in uscita, attribuendogli un nome, quindi questo deve essere aperto, inserendovi dei dati, infine lo si chiude. Di solito si creano file con una radice uguale a quella del file contenente il sorgente, attraverso il comando \jobname:

Comando Descrizione
\newwrite\nome_flusso}
dichiara il nome del flusso da aprire in scrittura;
\immediate\openout\nome_flusso\
  \\jobname.estensione
crea il file con estensione .estensione e lo associa al flusso indicato;
\immediate\write\nome_flusso{testo}
aggiunge in coda al file una riga di testo, come indicato nell'argomento;
\immediate\closeout\nome_flusso
chiude il file corrispondente al flusso indicato;
\jobname
si espande nella stringa corrispondente alla radice del nome del file LaTeX sorgente.

L'esempio seguente mostra in che modo si potrebbe realizzare un indice generale elementare:

...
\chapter*{Indice generale}
\input{\jobname.indice}
...
\newwrite\miofile
\immediate\openout\miofile\jobname.indice
...
\chapter*{Introduzione}
\immediate\write\miofile{Introduzione {\arabic{page}}\par}
...
\chapter{Bla bla bla}
\immediate\write\miofile{Bla bla bla {\arabic{page}}\par}
...
\appendix
\chapter{Appendice}
\immediate\write\miofile{Appendice {\arabic{page}}\par}
...
\immediate\closeout\miofile

All'inizio dell'esempio si vede l'inclusione di un file con lo stesso nome del sorgente LaTeX ed estensione .indice. Come si può intendere, la prima volta questo file non esiste e l'inclusione non produce alcun risultato. Successivamente si crea questo file, quindi, all'inizio di ogni sezione principale si annota il titolo di questa e la pagina in cui si trova. Nella composizione successiva, il file viene incluso e successivamente rigenerato, probabilmente con numeri di pagina diversi, a causa dell'allungamento del documento; nella terza composizione si dovrebbe ottenere un risultato soddisfacente. Ecco come si potrebbe presentare il file generato in questo modo:

Introduzione {1}\par 
Bla bla bla {10}\par 
Appendice {25}\par 

Nell'esempio si deve osservare che \arabic{page} si è trasformato correttamente nel numero della pagina e \par è rimasto intatto. Nel caso si inserissero delle macro, si potrebbe ottenere un risultato indesiderabile. Per esempio, si potrebbe voler separare il titolo dal numero della pagina con dei puntini di sospensione elastici:

\immediate\write\miofile{Introduzione\dotfill{\arabic{page}}\par}

Il file generato si presenterebbe così:

Introduzione\unhbox \voidb@x \cleaders \
  \\hbox to.44em{\hss .\hss }\hfill \kern \z@ {1}\par

In questi casi si può usare il comando \string per evitare che la barra obliqua inversa del comando \dotfill venga presa in considerazione:

\immediate\write\miofile{Introduzione\string\dotfill{\arabic{page}}\par}

50.15   Riferimenti


1) Tutti i comandi che definiscono un livello di suddivisione del documento, da \part a \subparagraph, consentono di utilizzare un asterisco alla fine del nome (come per esempio \section*{...)); l'utilizzo di questo porta a sopprimere la numerazione della voce e il suo inserimento nell'indice generale (ammesso che queste due cose siano previste normalmente).

2) Eventualmente, per ottenere il carattere «tilde», oltre a usare il comando \textasciitilde si può usare invece $\sim$, per produrre un carattere che a volte viene ritenuto più grazioso.

3) Naturalmente, makeindex può essere usato anche specificando delle opzioni; in tal caso si può consultare la pagina di manuale makeindex(1).

4) È bene ricordare che la tabella si compone di quattro colonne, dove la seconda e la terza non sono separate da una linea verticale.

5) Qui non sono state usate della parentesi quadre sintattiche per non creare confusione.

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net