[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 441.   LaTeX: 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.

441.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

441.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

441.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

441.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

441.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 controllarne 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, potessero 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

441.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

441.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

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome latex_spazi_e_scatole.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!