[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 233.   TeX: paragrafi, righe, spazi, scatole e linee

Il testo scritto con TeX viene reimpaginato in paragrafi, corrispondenti ai blocchi separati da almeno una riga bianca o vuota, oppure dalla parola di controllo \par.

Lo spazio orizzontale all'interno del quale viene inserito il paragrafo inizia normalmente da \hoffset e si estende a destra per una larghezza pari a \hsize. In condizioni normali, il testo risulta allineato simultaneamente a sinistra e a destra, ovvero giustificato orizzontalmente; inoltre, normalmente la prima riga risulta leggermente rientrata.

233.1   Caratteristiche normali di un paragrafo

Le caratteristiche comuni dei paragrafi vengono definite dai valori contenuti in alcune variabili, a cui si accede attraverso altrettante parole di controllo. Si tratta della giustezza, corrispondente a \hsize, della dimensione del rientro della prima riga, corrispondente a \parindent, della distanza tra le righe (tra la base delle righe), corrispondente a \baselineskip, della distanza tra i paragrafi, corrispondente a \parskip.

Tabella 233.1. Parole di controllo che regolano o condizionano le caratteristiche dei paragrafi comuni.

Parola di controllo Competenza Condizione o valore predefinito
\hoffset Posizione iniziale dei paragrafi nella pagina. 0
\hsize Larghezza del paragrafo a partire da \hoffset. 6,5 pollici
\parindent Rientro della prima riga. 20 punti
\baselineskip Distanza tra la base di una riga e la base della riga successiva. 12 punti
\parskip Distanza aggiuntiva tra i paragrafi. 0
\raggedright Allinea il testo a sinistra. allineato simultaneamente a sinistra e a destra
\leftskip Rientro sinistro complessivo. 0
\rightskip Rientro destro complessivo. 0

Si può provare a verificare i valori predefiniti con l'esempio seguente:


hoffset = \the\hoffset \par
hsize = \the\hsize \par
parindent = \the\parindent \par
baselineskip = \the\baselineskip \par
parskip = \the\parskip \par
leftskip = \the\leftskip \par
rightskip = \the\rightskip \par

allineamento

Sia \parskip che \baselineskip consentono l'attribuzione di lunghezze elastiche. Come si può osservare dall'esempio, il valore predefinito di \baselineskip non prevede elasticità, mentre \parskip consente un leggero allungamento. Si tenga presente che, anche se è stato indicato un allungamento di un solo punto, in pratica, nella composizione finale si possono ottenere allungamenti molto maggiori in caso di necessità.

Come si intende, in condizioni normali i paragrafi iniziano con un rientro, senza essere distanziati tra di loro. Se questo tipo di approccio è ciò che si desidera, quando eccezionalmente si vuole un paragrafo senza rientro, come si fa di solito dopo un titolo, basta usare la parola di controllo \noindent, che ha effetto solo nel paragrafo in cui si trova.

Per modificare la posizione verticale e la larghezza dei paragrafi, invece di intervenire sul valore controllato dalla parola di controllo \hsize (su \hoffset non si può intervenire, perché riguarda la pagina intera), conviene usare invece \leftskip e \rightskip, che si riferiscono rispettivamente a un rientro sinistro e a un rientro destro. In pratica, se invece si vuole estendere il paragrafo oltre il margine sinistro fissato da \hoffset, oppure si vuole andare oltre il margine destro stabilito da \hsize, basta usare valori negativi per i rientri. L'esempio seguente mostra il caso di un paragrafo rientrato a sinistra e a destra per scrivere un'annotazione che risalti agli occhi del lettore:


\leftskip=1cm
\rightskip=1cm
{\bf Attenzione}: 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 bla bla bla.

\leftskip=0cm
\rightskip=0cm
Questo \`e invece un paragrafo 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 bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla.

allineamento

Si vede dall'esempio la necessità di intervenire successivamente per ripristinare i valori normali dei rientri.

I rientri definiti attraverso \leftskip e \rightskip, possono essere gestiti anche attraverso la macro \narrower, con cui si incrementa il loro valore di \parskip. In pratica, usando l'istruzione \narrower i margini del testo vengono aumentati di quanto contenuto in \parskip. Naturalmente, l'effetto di tale istruzione vale per tutti i paragrafi successivi, a meno che sia inserita in un raggruppamento; in alternativa si può intervenire nuovamente su \leftskip e \rightskip per ripristinare dei valori normali.

Un paragrafo risulta normalmente allineato simultaneamente a sinistra e a destra. Se si vuole eliminare l'allineamento destro, si utilizza la parola di controllo \raggedright:


Questo \`e un paragrafo normale allineato a sinistra e a destra, ma non
tutti gli autori gradiscono questo sistema di impaginazione orizzontale.
Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla.

{\raggedright In questo paragrafo, invece, l'allineamento del testo al
margine destro, non ha luogo. Purtroppo, non c'\`e una parola di
controllo opposta per ripristinare l'allineamento normale, pertanto,
occorre racchiudere l'istruzione in un raggruppamento. Si osservi che il
paragrafo viene concluso prima della fine del raggruppamento. Bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla. \par}

Questo \`e un altro paragrafo normale allineato a sinistra e a destra.
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.

giustificazione

233.2   Spaziatura orizzontale automatica e separazione automatica dei paragrafi in righe

TeX utilizza una regola tipografica del passato, ormai condannata generalmente, secondo cui era necessario aumentare lo spazio che divide la fine di un periodo dall'inizio del successivo. Si pone rimedio a questa anomalia utilizzando l'istruzione \frenchspacing. Si osservi l'esempio seguente, il cui risultato di composizione viene ingrandito per permettere di scorgere meglio la differenza nella spaziatura orizzontale alla fine del primo periodo:


Prima frase. Seconda frase. \par
\frenchspacing
Prima frase. Seconda frase. \par

spaziatura orizzontale alla fine del periodo

È bene sottolineare che \frenchspacing interviene a livello di paragrafi dal punto in cui viene utilizzato. Se successivamente si desidera ripristinare la spaziatura orizzontale «normale» per TeX, basta usare l'istruzione \nonfrenchspacing.

TeX impagina automaticamente i paragrafi, dividendo le righe dove ritiene più corretto, in base ai suoi calcoli, considerando le interruzioni di riga nel sorgente come equivalenti a uno spazio orizzontale, suddividendo eventualmente le parole in sillabe (come verrà spiegato meglio in una sezione successiva). Tuttavia, ci sono spazi che fanno parte di un nome o che comunque si vuole evitare siano utilizzati per dividere in quel punto il testo. Per evitarlo si può inserire la tilde (~), che rappresenta uno spazio non interrompibile. L'esempio seguente mostra il caso in cui si vuole evitare di separare il titolo da un nome:

Ing.~Bianchi

Quando non si usa la spaziatura orizzontale uniforme che si otterrebbe con \frenchspacing, l'inserzione di questi spazi non interrompibili evita anche l'allargamento dello spazio, che in situazioni come quella dell'esempio sarebbe inopportuno. In alternativa, sempre allo scopo di ottenere uno spazio di ampiezza normale dopo un punto che non conclude una frase, di può usare il simbolo di controllo \<SP> (barra obliqua inversa, spazio).

233.3   Rientri particolari

Attraverso due variabili, a cui si accede per mezzo delle parole di controllo \hangindent e \hangafter, è possibile organizzare un paragrafo in modo che una parte iniziale o finale delle righe che lo compongono sia rientrata rispetto al margine sinistro, oppure rispetto al margine destro.

Un valore positivo, esprimente una lunghezza, contenuto nella variabile controllata dalla parola di controllo \hangindent, indica un rientro verso destra della stessa lunghezza rispetto al margine sinistro; al contrario, un valore negativo indica un rientro verso sinistra dal margine destro. Un valore positivo, esprimente una quantità di righe, contenuto nella variabile controllata dalla parola di controllo \hangafter, indica dopo quante righe far intervenire il rientro dichiarato con \hangafter; invece, un valore negativo indica per quante righe iniziali deve valere il rientro. Si osservi l'esempio seguente:


\hangindent=5cm
\hangafter=2
Paragrafo in cui, dopo le prime due righe, si passa a un rientro
sinistro di cinque centimetri. 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 bla bla bla.

\hangindent=-5cm
\hangafter=-2
Paragrafo in cui le prime due righe hanno un rientro destro di cinque
centimetri. 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
bla bla bla.

La composizione che si ottiene potrebbe contenere degli errori estetici e degli errori nella separazione in sillabe delle parole. Questi problemi verranno trattati in seguito:

incolonnamenti particolari dei paragrafi

Dall'esempio non si vede, per cui è bene sottolineare che le parole di controllo \hangindent e \hangafter hanno effetto esclusivamente nel paragrafo in cui vengono utilizzate.

Un modo più complesso di definire un paragrafo è disponibile attraverso la parola di controllo \parshape, che va utilizzata secondo la sintassi seguente:

\parshape n_righe rientro_1 lunghezza_1  [rientro_2 lunghezza_2]...

In pratica, \parshape permette di descrivere il rientro sinistro e la lunghezza delle prime n righe; in base alla quantità di righe indicate, altrettante saranno le coppie delle indicazioni sulla lunghezza del rientro e sulla lunghezza della riga relativa. Si osservi l'esempio seguente:


\parshape 3 2cm 5cm 4cm 6cm 6cm 7cm
Paragrafo in cui, la prima riga \`e rientrata di due centimetri dal
margine sinistro ed \`e lunga cinque centimetri, la seconda riga \`e
rientrata di quattro centimetri ed \`e lunga sei centimetri, la terza
riga \`e rientrata di sei centimetri ed \`e lunga sette centimetri. Le
righe successive sono impaginate come la terza riga.

Paragrafo 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 bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla

controllo del paragrafo riga per riga

È importante osservare che la prima riga risulta avere un rientro maggiore, pari al valore restituito da \parindent. Si osservi lo stesso esempio, con l'eliminazione del rientro normale dei paragrafi:


\noindent
\parshape 3 2cm 5cm 4cm 6cm 6cm 7cm
Paragrafo in cui, la prima riga \`e rientrata di due centimetri dal
margine sinistro ed \`e lunga cinque centimetri, la seconda riga \`e
rientrata di quattro centimetri ed \`e lunga sei centimetri, la terza
riga \`e rientrata di sei centimetri ed \`e lunga sette centimetri. Le
righe successive sono impaginate come la terza riga.

Paragrafo 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 bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla

controllo del paragrafo riga per riga, senza rientro standard

233.4   Paragrafi etichettati

La macro standard \item consente di porre all'inizio di un paragrafo un'etichetta, cosa che si fa normalmente per realizzare degli elenchi:

\item{etichetta}

Il paragrafo che si ottiene ha una struttura particolare: L'etichetta viene inserita in modo che termini subito prima della posizione del rientro della prima riga, ovvero subito prima di \hoffset+\leftskip+\parindent; il testo successivo inizia dal rientro e nelle righe successive mantiene quel rientro iniziale. La parola di controllo \noindent non ha effetto.

Esiste anche un'altra parola di controllo simile, che ha lo scopo di generare un paragrafo dello stesso genere, rientrato del doppio del valore restituito da \parindent. Si tratta di \itemitem, il cui utilizzo è quindi conveniente solo quando si usa normalmente il rientro della prima riga, altrimenti l'effetto generato è lo stesso di \item. Si osservino i due esempi seguenti, che differiscono per la presenza o meno del rientro della prima riga.


Questo \`e un paragrafo normale che introduce un elenco, 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:
\item{1)} questa \`e la prima voce dell'elenco;
\item{2)} questa \`e la seconda voce dell'elenco, che contiene molte
informazioni, bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla;
\item{3)} questa \`e la terza voce dell'elenco che si articola in voci di
livello inferiore:
\itemitem{a)} questa \`e la prima sotto-voce del terzo punto;
\itemitem{b)} questa \`e la seconda sotto-voce del terzo punto;
\item{4)} questo \`e la quarta e ultima voce dell'elenco principale.

paragrafi etichettati

Come si può vedere, le macro \item e \itemitem introducono un paragrafo nuovo, indipendentemente dal fatto che siano o meno separate dal testo precedente. Nell'esempio seguente si mostra cosa accade se si elimina il rientro della prima riga dei paragrafi:


\parindent=0pt
Questo \`e un paragrafo normale che introduce un elenco, 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:
\item{1)} questa \`e la prima voce dell'elenco;
\item{2)} questa \`e la seconda voce dell'elenco, che contiene molte
informazioni, bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla;
\item{3)} questa \`e la terza voce dell'elenco che si articola in voci di
livello inferiore:
\itemitem{a)} questa \`e la prima sotto-voce del terzo punto;
\itemitem{b)} questa \`e la seconda sotto-voce del terzo punto;
\item{4)} questo \`e la quarta e ultima voce dell'elenco principale.

paragrafi etichettati

Volendo approfondire un po' di più l'uso di queste macro, si può osservare che \item assegna a \hangindent il valore di \parindent; inoltre assegna a \hangafter il valore uno. Al termine, tutto viene ripristinato, in modo da non coinvolgere il paragrafo successivo. Nello stesso modo interviene \itemitem, assegnando però a \hangindent il doppio di \parindent.

233.5   Attuazione dei comandi riferiti ai paragrafi

Le istruzioni che definiscono l'aspetto del paragrafo, vengono prese in considerazione quando il paragrafo è stato analizzato completamente; pertanto, se in un paragrafo si modifica più volte un certo valore che ne controlla la forma, solo l'ultimo valore disponibile sarà quello che viene preso in considerazione. Si osservi l'esempio seguente:


\baselineskip=5cm
Questo paragrafo viene composto con una distanza tra la base delle righe
di 14 punti. Provare per credere. 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.
\baselineskip=14pt

modifica della distanza tra le righe

In pratica, all'inizio viene dichiarata una distanza di 5 cm, mentre alla fine, prima che sia concluso definitivamente il paragrafo, si dichiara nuovamente una distanza di soli 14 punti. L'ultima istruzione che modifica il valore, rimanendo nell'ambito del paragrafo, è quella che viene presa in considerazione.

Il problema può sembrare di poco conto; tuttavia, quando si usano i raggruppamenti per evitare di estendere l'effetto di un comando particolare anche ai paragrafi successivi, le cose si complicano un po'. Si osservi l'esempio seguente:


{\baselineskip=5cm Questo paragrafo che dovrebbe avere una distanza tra
la base delle righe di ben cinque centimetri, ma qualcosa non funziona
come si vorrebbe. 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.}

modifica fallita della distanza tra le righe

Il raggruppamento limita l'effetto della modifica dello spazio tra le righe, controllato da \baselineskip, all'interno del paragrafo. Tuttavia, il paragrafo finisce dopo la parentesi graffa di chiusura, ovvero quando viene ripristinato il valore precedente per la distanza tra le righe. Per risolvere il problema occorre concludere il paragrafo prima della parentesi graffa finale:


{\baselineskip=0.5cm Questo paragrafo ha effettivamente una distanza tra
la base delle righe di mezzo centimetro, perch\'e prima della parentesi
graffa finale si conclude esplicitamente il paragrafo.\par}

modifica corretta della distanza tra le righe nell'ambito di un raggruppamento

233.6   Tolleranza estetica

Quando la composizione che si genera non può rispettare gli spazi e le elasticità fissati, TeX calcola un indicatore, definibile come penalità estetica, che in pratica rappresenta la «bruttezza» del risultato che si ottiene.

Per la precisione, si distinguono due casi: la necessità di introdurre una quantità di spazio eccessiva, tra le parole o tra le righe, oppure la necessità di andare leggermente oltre il margine.

Quando si superano le tolleranze orizzontali stabilite, si ottiene nella composizione finale un segno evidente sul margine destro, corrispondente a un rettangolino nero.

La parola di controllo \hbadness consente di definire il livello consentito per l'espansione delle righe. Il valore predefinito è 1 000, che rappresenta un livello qualitativo molto buono. Elevando questo valore, si ottengono meno segnalazioni; si può arrivare fino a un massimo di 10 000, con cui si esclude qualunque segnalazione di cattiva qualità estetica dovuta a un allargamento eccessivo delle righe.

Una riga può eccedere il limite del margine destro per una lunghezza massima pari al valore che si ottiene dalla parola di controllo \hfuzz. Se anche questo limite viene superato, si crea un altro tipo di problema estetico, controllato dalla parola di controllo \tolerance. Anche in questo caso, se si assegna alla tolleranza in eccesso un valore pari a 10 000, si annullano tutte le segnalazioni di errore.

La qualità verticale è controllata dal valore contenuto in \vbadness e nello stesso modo esiste la possibilità di eccedere l'altezza del testo del valore di \vfuzz.


hbadness = \the\hbadness \par
hfuzz = \the\hfuzz \par
vbadness = \the\vbadness \par
vfuzz = \the\vfuzz \par
tolerance = \the\tolerance \par

badness

L'esempio precedente consente di verificare i valori predefiniti abbinati alla tolleranza estetica del testo, nella sua distribuzione orizzontale. Le istruzioni che seguono, consentono di annullare tutte le segnalazioni di carenze estetiche, consentendo però di generare un risultato pessimo:


\hbadness=10000
\vbadness=10000
\tolerance=10000

In alternativa, si possono lasciare invariati i valori di tolleranza estetica, eliminando semplicemente l'indicazione del problema nella composizione finale. L'inserimento del rettangolo nero è controllato dalla parola di controllo \overfullrule, a cui si assegna la grandezza della linea con cui rappresentare questo rettangolo. Indicando un valore nullo, si elimina tutto questo:


\overfullrule=0pt

È utile sapere interpretare i messaggi di avvertimento che vengono generati da TeX durante la composizione di testo con carenze estetiche. La tabella 233.2 riepiloga le varie situazioni.

Tabella 233.2. Messaggi di errore riferiti a carenze estetiche.

Tipo di messaggio Significato
Underfull \hbox La spaziatura orizzontale è eccessiva.
Overfull \hbox Lo spazio orizzontale a disposizione è stato superato.
Underfull \vbox La spaziatura verticale è eccessiva.
Overfull \vbox Lo spazio verticale a disposizione è stato superato.
badness n Livello di carenza estetica: 10 000 è il massimo a essere annotato.

233.7   Sillabazione

In condizioni normali, TeX gestisce la separazione in sillabe per la lingua inglese. Eventualmente, è possibile indicare delle eccezioni attraverso l'uso della parola di controllo \hyphenation:

\hyphenation{parola_suddivisa...}

Per esempio, per annotare la suddivisione di «cartellone» e «manuale», si può indicare l'istruzione seguente:


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

È possibile anche usare una separazione facoltativa attraverso il simbolo di controllo \- all'interno di una parola in una posizione precisa. Tuttavia, l'uso di queste istruzioni, annulla la possibilità di formarsi un legato. Per esempio, scrivendo dif\-fi\-ci\-le si impedisce la formazione del legato tra la coppia di lettere «f».

La frequenza della separazione delle parole alla fine delle righe può essere regolata tramite il valore attribuito a una variabile, cui si accede attraverso la parola di controllo \pretolerance: Valori bassi producono una separazione frequente, mentre valori elevati riducono l'uso della suddivisione delle parole. In particolare, se si assegna il valore 10 000, non avviene alcuna separazione in sillabe.

\pretolerance=n

Il valore predefinito di \pretolerance è 100.

È importante sottolineare che \pretolerance interviene a livello di paragrafo, per cui non è possibile isolare un gruppo all'interno di un paragrafo, perché queste modifiche non avrebbero effetto.

Nel capitolo 229 è descritto brevemente come abilitare la separazione delle parole in sillabe per una lingua differente. Supponendo che la sillabazione italiana sia abbinata al numero 1, è sufficiente iniziare il proprio documento con l'istruzione seguente:


\language 1

233.8   Spaziature verticali

È già stato descritto il significato delle parole di controllo \baselineskip e \parskip. Entrambe le variabili a cui fanno riferimento queste parole di controllo possono contenere una lunghezza elastica, anche se normalmente \baselineskip non prevede tolleranze.

Oltre allo spazio verticale tra i paragrafi, controllato dal valore restituito dalla parola di controllo \parskip, si possono inserire degli spazi aggiuntivi(1) attraverso due parole di controllo alternative, \vskip e \vglue:

\vskip lunghezza_elastica

\vglue lunghezza_elastica

Il secondo tra i due tipi di inserimento, corrispondente alla parola di controllo \vglue, è il più semplice, perché inserisce lo spazio verticale in modo incondizionato: se non c'è lo spazio sufficiente nella pagina in cui appare, viene messo integralmente all'inizio della pagina successiva. Invece, nel caso di \vskip, lo spazio viene inserito effettivamente solo se c'è lo spazio sufficiente nella pagina in cui appare, provocando un salto pagina se questo spazio manca, ma in tal caso non viene più inserito all'inizio della pagina successiva.

È importante osservare che in entrambe le situazioni, se lo spazio alla fine della pagina non basta, si provoca un salto pagina. Se è attiva la modalità di allineamento verticale del testo, corrispondente alla parola di controllo \normalbottom, ciò significa che il testo precedente viene allungato per completare la pagina, così come avviene quando si inserisce la parola di controllo \eject.

A titolo informativo, vale la pena di vedere in che modo si possa ottenere l'inserimento di uno spazio incondizionato, come fa \vglue, ma utilizzando solo \vskip:


\null\par
\vskip ...

In pratica, l'istruzione \null serve a iniziare un paragrafo (passando così in modalità orizzontale). Il paragrafo deve essere terminato, quindi si può inserire \vskip con l'indicazione dello spazio da saltare. L'istruzione \null corrisponde a un carattere nullo, come un gruppo vuoto, che però permette di iniziare un paragrafo (verrà descritta in seguito).

È già stato fatto osservare che il valore predefinito che si ottiene dall'espansione di \parskip è 0pt plus 1pt. Volendo mantenere la coerenza con la spaziatura tra i paragrafi, quando si usano le parole di controllo \vskip e \vglue, conviene mantenere la stessa elasticità in espansione, con l'aggiunta eventuale di un'elasticità equivalente in contrazione:

\vskip lunghezza plus 1pt minus 1pt

\vglue lunghezza plus 1pt minus 1pt

In effetti, TeX offre già delle parole di controllo che si traducono in salti standardizzati. Si tratta di \smallskipamount, \medskipamount e \bigskipamount. Si può sperimentare facilmente a cosa corrispondono:


smallskipamount = \the\smallskipamount \par
medskipamount = \the\medskipamount \par
bigskipamount = \the\bigskipamount \par

verifica dei salti di dimensione standard

Queste parole di controllo sono fatte per essere sostituite agli argomenti delle istruzioni che provocano un avanzamento verticale. Per esempio,


\vskip\smallskipamount

provoca quello che viene considerato convenzionalmente un piccolo avanzamento verticale.

Per semplificare ulteriormente la gestione dei salti verticali, con la parola di controllo \vskip, sono disponibili delle macro che richiamano direttamente l'entità dello spazio da inserire. Si tratta di \smallskip, \medskip e \bigskip, che corrispondono in pratica a \vskip\smallskipamount, \vskip\medskipamount e \vskip\bigskipamount.

Quando si vuole indicare uno salto verticale di lunghezza indefinita, si utilizzano le parole di controllo \vfil e \vfill. Entrambe generano un salto dal punto in cui si trovano, fino alla fine della pagina, qualsiasi sia la distanza, ma se la parola di controllo appare più volte, lo spazio necessario viene distribuito equamente. Si osservi l'esempio seguente in cui si simula una pagina di piccole dimensioni:


\hsize=4cm
\vsize=7cm
Questa \`e una pagina fittizia in cui il testo ha a disposizione solo
quattro per sette centimetri. \par
\vfil
I paragrafi sono spaziati verticalmente in modo da riempire la pagina.
\par
\vfil
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. \par
\vfil
Fine della pagina. \par
\eject

funzionamento di \\vfil

La stessa cosa si poteva ottenere sostituendo le parole di controllo \vfil con \vfill:


\hsize=4cm
\vsize=7cm
Questa \`e una pagina fittizia in cui il testo ha a disposizione solo
quattro per sette centimetri. \par
\vfill
I paragrafi sono spaziati verticalmente in modo da riempire la pagina.
\par
\vfill
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. \par
\vfill
Fine della pagina. \par
\eject

Tuttavia, \vfill è più elastico rispetto a \vfil. Si osservi cosa accade se si inserisce un solo \vfill tra altri \vfil:


\hsize=4cm
\vsize=7cm
Questa \`e una pagina fittizia in cui il testo ha a disposizione solo
quattro per sette centimetri. \par
\vfil
I paragrafi sono spaziati verticalmente in modo da riempire la pagina.
\par
\vfill
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. \par
\vfil
Fine della pagina. \par
\eject

funzionamento di \\vfil e \\vfill assieme

Esiste un altro tipo di spazio verticale elastico, controllato dalla parola di controllo \vss. Si ottiene un risultato molto simile a \vfil, con la differenza che in questo caso viene intesa esplicitamente anche un'elasticità in contrazione di livello equivalente.

Le parole di controllo \vfil[l] e \vss corrispondono in pratica alle definizioni seguenti:

\vfil | \vskip 0pt plus 1fil
\vfill | \vskip 0pt plus 1fill
\vss | \vskip 0pt plus 1fil minus 1fil

233.9   Righe

Il testo di una riga viene generato posando le lettere su una linea invisibile che corrisponde alla base della stessa. Nel capitolo 220 è già stato affrontato in generale l'argomento relativo alle dimensioni di un carattere. Per quanto riguarda TeX le cose si semplificano come si vede nella figura 233.17.

Figura 233.17. Le dimensioni del carattere secondo TeX.

     /\                     |  |                           ^   altezza
    /  \                    |  |                           |
   /    \    /--\/   /--\/  |  |   /--\    /--\ /--\       |
  /------\  |    |  |    |  |  |  |    |  |    |    |      | corpo
_/        \__\--/|___\--/|__|__|___\--/___|    |    |__*__ | ______________base
                 |       |                                 |
                _/      _/                                 v   profondità

Le righe di un paragrafo sono distanziate, da una basa alla successiva, della distanza fissata con \baselineskip. Ma questo non può impedire che si formino degli accavallamenti, soprattutto se si ingrandisce il corpo del carattere. Pertanto, entra in gioco il valore contenuto nella variabile \lineskiplimit, che rappresenta l'interlinea minima, ovvero lo spazio minimo tra la profondità massima della riga precedente e l'altezza massima della riga successiva. Se si supera questo valore, viene inserita un'interlinea pari alla lunghezza contenuta nella variabile \lineskip. Si osservi l'esempio seguente in cui a un certo punto viene cambiato il corpo del carattere, per dimostrare l'adattamento che si ottiene nella distanza tra le righe:


\font\prova=cmss17 scaled 2000

Questo \`e un paragrafo di prova in cui, a un certo punto, si usa un
carattere pi\`u grande del solito, provocando un aumento automatico della
distanza tra le righe, {\prova per evi\-ta\-re accavallamenti}. 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. \par

aggiustamento della distanza tra le righe

È possibile sollevare o abbassare una parte del testo, attraverso le istruzioni \raise e \lower. Queste devono essere seguite da una «scatola», contenente ciò che si vuole sollevare o abbassare rispetto alla base della riga in cui ci si trova. Il concetto di scatola viene spiegato nella sezione 233.12.

\raise altezza scatola

\lower altezza scatola

L'esempio seguente mostra due situazioni, in cui si sposta una parte del testo in alto e in basso rispetto alla base normale delle righe:


Nel testo c'\`e una parte leggermente sollevata di
\raise 5pt \hbox{cinque punti} e un'altra parte
leggermente abbassata di \lower 3pt \hbox{tre punti} tipografici.

spostamento in alto e in basso

Quando una riga singola ha una sua propria autonomia nel testo che si vuole scrivere, si possono utilizzare una serie di parole di controllo per gestirne la collocazione e l'aspetto.

La prima cosa da analizzare è la possibilità di interrompere il flusso normale di un paragrafo, imponendo di iniziare una riga nuova. Ciò si ottiene con la parola di controllo \break:


Questo \`e un paragrafo normale, contenente alcune informazioni, bla bla
bla bla bla bla bla bla bla bla bla bla,\break ma questa riga deve
apparire sempre da sola, pur senza dover iniziare un paragrafo nuovo.

interruzione volontaria della riga

L'esempio mostra proprio una situazione di questo tipo, dove si può osservare che il testo della riga incompleta viene allungato per raggiungere il margine destro. Per evitare che succeda questo, si utilizza uno spazio orizzontale allungabile, che può essere ottenuto a scelta da tre parole di controllo: \hfil, \hfill e \hfilll. Così come avviene negli spazi verticali, la prima di queste parole di controllo ha un'elasticità minore rispetto alle altre, così come la seconda ha un'elasticità maggiore della prima e minore della terza. Generalmente, si usa \hfill prima di \break, come si vede dall'esempio seguente:


Questo \`e un paragrafo normale, contenente alcune informazioni, bla bla
bla bla bla bla bla bla bla bla bla bla,\hfill\break ma questa riga deve
apparire sempre da sola, pur senza dover iniziare un paragrafo nuovo.

interruzione volontaria della riga

Quando si vuole controllare una riga completamente autonoma, si possono usare le macro \leftline, \rightline, \centerline e \line. La prima allinea a sinistra il testo, la seconda lo allinea a destra, la terza lo allinea al centro, l'ultima lo stira in modo da allinearlo simultaneamente a sinistra e a destra. Si osservi l'esempio:


\leftline{Questa riga \`e allineata a sinistra.}
\centerline{Questa riga \`e allineata al centro.}
\rightline{Questa riga \`e allineata a destra.}
\line{Questa riga \`e allineata a sinistra e a destra.}

controllo delle righe singole

Si potrebbe essere portati a pensare che la macro \line serva a poco, perché l'effetto che si ottiene è abbastanza sgradevole. In realtà, la possibilità di inserire degli spazi orizzontali allungabili consente di creare degli effetti molto utili. Si osservi l'esempio seguente in cui si fa uso di \hfil per separare degli allineamenti indipendenti:


\line{Sinistra \hfil Centro \hfil Destra}

allineamento multiplo con \\hfil

In particolare, \headline e \footline funzionano nello stesso modo, perché sono controllate in pratica dalla parola di controllo \line.

Si osservi che la definizione delle macro \[left|center|right]line isola il testo in un raggruppamento, come se fosse racchiuso tra parentesi graffe.

233.10   Spazi orizzontali

È possibile inserire degli spazi orizzontali ben definiti attraverso la parola di controllo \hskip, a cui si assegna l'indicazione di una lunghezza elastica:

\hskip lunghezza_elastica

Come nel caso di \vskip, l'indicazione di un'elasticità in estensione, consente in pratica di allargare lo spazio in modo indefinito.

L'esempio seguente mostra diversi casi di utilizzo di \hskip, in una situazione in cui la riga che lo contiene viene allineata simultaneamente a sinistra e a destra:


\line{Riga allineata a \hskip 2cm sinistra e a destra.}
\line{Riga allineata a \hskip 2cm plus 1pt sinistra e a destra.}
\line{Riga allineata \hskip 2cm plus 1pt a sinistra \hfil e a destra.}
\line{Riga allineata \hskip 0pt plus 1fil a sinistra \hfil e a destra.}
\line{Riga allineata \hskip 0pt plus 2fil a sinistra \hfil e a destra.}

\\hskip

Esiste un altro tipo di spazio orizzontale molto elastico, controllato dalla parola di controllo \hss. Si ottiene un risultato molto simile a \hfil, con la differenza che in questo caso viene intesa esplicitamente anche un'elasticità in contrazione di livello equivalente.

Le parole di controllo \hfil[l[l]] e \hss corrispondono in pratica alle definizioni seguenti:

\hfil | \hskip 0pt plus 1fil
\hfill | \hskip 0pt plus 1fill
\hfilll | \hskip 0pt plus 1filll
\hss | \hskip 0pt plus 1fil minus 1fil

Esiste infine un gruppo di parole di controllo che consentono di inserire spazi orizzontali rigidi o poco elastici, corrispondenti all'elenco seguente:

Se si intende iniziare un paragrafo con un rientro prodotto da un'istruzione \hskip, o altre che comunque producono uno spazio orizzontale determinato, occorre tenere presente la presenza del rientro definito da \parindent. In pratica, se si vuole iniziare un paragrafo con un rientro iniziale di due centimetri usando l'istruzione \hskip 2cm, occorre fare in questo modo:


\noindent \hskip 2cm Bla bla bla...

Diversamente, il rientro finale risulterebbe aumentato del valore di \parindent.

Un'ultima cosa da considerare sono gli spazi orizzontali della stessa ampiezza di un certo carattere. Quando per qualche ragione si ha la necessità di incolonnare delle informazioni, soprattutto dati numerici, può essere utile la macro \phantom, che genera effettivamente lo spazio orizzontale equivalente al carattere indicato:

\phantom{x}

Anche se l'utilizzo più importante riguarda i numeri, viene proposto qualcosa di diverso, per consentire di verificare visivamente che lo spazio viene calcolato in modo corretto:


\font\prova=cmss12
\prova
Ciao ciao ciao ciao \par
\hskip 0pt\phantom{C}iao ciao c\phantom{i}ao ciao \par

\\phantom

Come si vede, si utilizza un carattere senza grazie, in modo da poter verificare che l'inserzione dello spazio corrispondente a una lettera «i» viene fatta correttamente, così come è corretto lo spazio corrispondente alla lettera «C» maiuscola. L'istruzione iniziale \hskip 0pt serve a imporre che si tenga conto dello spazio iniziale, che altrimenti verrebbe perduto nell'inizio del paragrafo.

233.11   Spazio rigido

Lo spazio rigido per definizione viene richiesto attraverso l'istruzione \kern, che richiede semplicemente l'indicazione della distanza da compiere:

\kern lunghezza

Lo spazio in questione può essere orizzontale o verticale, in base al contesto. Pertanto, se ci si trova in modalità orizzontale, si ottiene uno spazio orizzontale; diversamente si otterrà uno spazio verticale. Per questo, quando si vuole scrivere una macro con cui iniziare sicuramente la modalità orizzontale e inserire quindi uno spazio rigido, si usa spesso la macro \leavevmode per questo scopo.

Lo spazio rigido viene usato spesso in modo negativo, per avvicinare delle lettere o altri simboli, garantendo che non avvenga la separazione della riga in quel punto. Infatti, gli spazi rigidi che si ottengono con \kern non sono separabili. L'esempio tipico di utilizzo di \kern per avvicinare le lettere è quello della macro \TeX, che è dichiarata nel modo seguente:


\def\TeX{T\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX}

Come si vede, non c'è alcun bisogno di richiedere espressamente il passaggio alla modalità orizzontale, perché le istruzioni \kern appaiono dentro un testo che ha già fatto questo in ogni caso.

233.12   Scatole

TeX tratta tutti gli oggetti da collocare nella composizione come tanti rettangoli, o scatole, di dimensione appropriata, distanziati in base a delle regole determinate. In questo senso, gli spazi che si inseriscono nel file sorgente, corrispondenti al carattere <SP>, comprese le tabulazioni orizzontali (il carattere <HT>), assieme alle righe vuote e a quelle bianche, sono solo la separazione logica delle istruzioni (intendendo anche il testo come istruzioni), pertanto non conta la loro quantità, essendo sufficiente che siano presenti dove serve.

Attraverso alcune parole di controllo è possibile creare della scatole di tipo orizzontale o verticale, per ottenere dei comportamenti particolari che vanno al di fuori della gestione normale dei paragrafi e delle righe.

Una scatola ha tre misure che ne definiscono la forma: una larghezza, un'altezza che parte dalla base della riga di riferimento e una profondità, che è rappresentata dall'altezza della scatola che si espande sotto la base di riferimento.

Figura 233.26. Dimensioni di una scatola.

                .-------------------.
                |                   |
                |                   |
                |                   |
                |                   | altezza
                |                   |
                |      scatola      |
                |                   |
                |                   |                    base di riferimento
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                |                   |
                |                   | profondità
                |                   |
                `-------------------'
                      larghezza

Una scatola orizzontale è un rettangolo in cui si inserisce una sola riga di testo, dove l'altezza e la profondità dipendono dalle dimensioni del testo stesso. Una scatola verticale è invece un'area in cui il testo può scomporsi in più righe; inoltre, se la scatola viene inserita in una riga di testo, questa conclude il paragrafo.

Si utilizzano anche delle scatole vuote. Una scatola orizzontale vuota può servire per inserire un testo sporgente, a sinistra o a destra rispetto alla stessa; inoltre, può servire per imporre una certa altezza e profondità al testo della riga in cui viene inserita.

Una scatola orizzontale si definisce generalmente con la parola di controllo \hbox, che può essere usata in due modi differenti:

\hbox {espressione_stringa}

\hbox to larghezza {espressione_stringa}

Nel primo caso si definisce una scatola orizzontale, contenente il testo che si ottiene dall'espansione dell'espressione racchiusa nel raggruppamento, larga quanto la giustezza del testo stesso; nel secondo caso, si impone la larghezza indicata.

È importante osservare che \hbox non è propriamente una macro e il suo argomento è precisamente un gruppo, per cui l'espressione contenuta è isolata dal testo successivo. Lo stesso dicasi per le parole di controllo che definiscono delle scatole verticale, descritte più avanti.

Esistono una serie di parole di controllo per la gestione delle scatole orizzontali vuote a vario titolo:

\llap {espressione}

\rlap {espressione}

\null

\strut

\mathstrut

Le parole di controllo \llap e \rlap definiscono un gruppo vuoto, in cui l'espressione del gruppo che viene indicato risulta sporgere rispettivamente a sinistra e a destra. I nomi usati per queste parole di controllo ricordano mnemonicamente i termini left overlap e right overlap. Tra le altre possibilità, queste istruzioni si prestano per consentire la sovrapposizione del testo; per esempio, si può sbarrare un lettera «o» con una barra obliqua inversa semplicemente così: o\llap{$\backslash$}.

La parola di controllo \null inserisce una scatola vuota equivalente all'istruzione \hbox{}; invece, \strut crea una scatola vuota alta e profonda quanto una parentesi tonda; nello stesso modo funziona la parola di controllo \mathstrut, che invece si usa in modalità matematica.

Sempre in modalità matematica, si può usare \underline, che sottolinea il testo contenuto nell'espressione:

\underline {espressione}

In questo caso, per fare in modo che la linea di sottolineatura sia sempre alla stessa altezza, si inserisce generalmente una scatola vuota generata da \mathstrut. L'esempio seguente riepiloga l'uso delle scatole orizzontali:


Paragrafo 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 bla bla bla bla bla bla bla \par
inizio paragrafo; \hbox {testo in scatola}; fine paragrafo. \par
inizio paragrafo; \hbox to 5cm {testo in scatola}; fine paragrafo. \par
inizio paragrafo; \hbox to 5cm {testo \hss in scatola}; fine paragrafo. \par
\line{Riga di testo normale allineata a sinistra e a destra.}
\line{\llap {a)} Bla bla bla \rlap {(b}}
$\underline {testo sottolineato}, g j p q y,
\underline {\mathstrut testo sottolineato con una linea pi\`u bassa}$ \par

scatole orizzontali

L'esempio dell'utilizzo più importante delle scatole orizzontali è dato dalla macro \line che è definita semplicemente così:

\def\line{\hbox to\hsize}

In pratica, quando si scrive \line{testo}, non si sta indicando un parametro alla macro, ma si ottiene solo la sostituzione di \line con \hbox to\hsize, per cui alla fine si ottiene \hbox to\hsize {testo} complessivamente. In altri termini, la macro \line è seguita da un gruppo, che come tale isola il testo che racchiude.

Per la realizzazione di scatole verticali sono disponibili tre parole di controllo: \vbox, \vtop e \vcenter, dove l'ultima interviene solo in ambienti matematici.

\vbox {espressione| \vbox to altezza {espressione}

\vtop {espressione| \vtop to altezza {espressione}

\vcenter {espressione| \vcenter to altezza {espressione}

I due modelli sintattici alternativi, \nome gruppo e \nome to altezza gruppo, consentono di creare scatole alte quanto serve, in base al contenuto, oppure alte esattamente quanto richiesto.

La scatola che si ottiene con \vbox, colloca la posizione inferiore al livello della riga da cui si parte; estendendosi verso l'alto; la scatola che si ottiene con \vtop si estende invece verso il basso; infine, la scatola generata con \vcenter risulta centrata verticalmente rispetto alla posizione di partenza.

La larghezza di queste scatole è controllata dal valore restituito da \hsize, che può essere cambiato opportunamente al loro interno.


Paragrafo 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 bla bla bla bla bla bla bla \par
A: \vbox {\hsize=10cm Scatola verticale, larga 10 cm, che si espande
verso l'altro. 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} \par
B: \vtop {\hsize=10cm Scatola verticale, larga 10 cm, che si espande
verso il basso. 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} \par
C: $\vcenter {\hsize=10cm Scatola verticale, larga 10 cm, che si espande
verso l'altro e verso il basso. 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}$ \par
D: \vbox to 3cm {\hsize=7cm Questa \`e una scatola rettangolare, larga
sette centimetri e alta tre centimetri. bla bla bla bla bla bla bla bla
bla bla bla bla bla bla} \par
Paragrafo 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 bla bla bla bla bla bla bla \par

scatole verticali

L'esempio mostra quattro casi di scatole inserite in paragrafi di testo normale, dove ogni paragrafo inizia con una lettera alfabetica per dare un riferimento visivo alla collocazione della stessa. Si può osservare l'ultimo caso in cui si fissa anche la larghezza della scatola intervenendo nel valore a cui si accede con la parola di controllo \hsize.

Si osservi che, benché la parola di controllo \vcenter debba essere inserita in un ambiente matematico, il gruppo che controlla si trova in un ambiente normale.

233.12.1   Spostamento orizzontale delle scatole

Le due macro \moveleft e \moveright, consentono di spostare orizzontalmente una scatola verticale od orizzontale che sia:

\moveleft lunghezza \hbox{contenuto}|\vbox{contenuto}
\moveright lunghezza \hbox{contenuto}|\vbox{contenuto}

Come si vede dal modello sintattico, si ottiene lo spostamento, rispettivamente, verso sinistro o verso destra, della lunghezza indicata. Si osservi l'esempio seguente:


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.\par
\moveright 3 cm \vbox{
\hsize=7cm
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.\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 bla bla bla bla bla.\par
}\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 bla bla bla bla bla.\par

In pratica, dopo un paragrafo normale, viene richiesto un rientro di 3 cm per una scatola verticale contenente del testo, nel quale la giustezza è di soli 7 cm. Infine, un altro paragrafo normale permette di verificare che al di fuori della scatola, la giustezza torna quella di prima.

scatole verticali

Eventualmente, un piccolo spazio verticale può evitare che il testo che precede la scatola verticale si trovi a toccare il contenuto della stessa.

233.13   Linee guida

Per realizzare delle linee guida orizzontali, allo scopo di accompagnare la lettura verso qualcosa, si possono usare una serie di parole di controllo che contengono implicitamente un'elasticità in estensione molto elevata:

\hrulefill

\dotfill

\leftarrowfill | \rightarrowfill

Nel primo caso si ottiene una linea continua che unisce due parti di un testo separato; nel secondo si ottiene invece una guida fatta di puntini; nel terzo caso si genera una linea continua con una piccola freccia all'estremità sinistra o all'estremità destra.

Tuttavia, oltre a questi casi di guide abbastanza comuni, è possibile definire le proprie con una tra le istruzioni seguenti:

\leaders\hbox [to distanza] {espressione_guida} \hfill

\cleaders\hbox [to distanza] {espressione_guida} \hfill

\xleaders\hbox [to distanza] {espressione_guida} \hfill

La differenza tra le parole di controllo \leaders, \cleaders e \xleaders, sta nel fatto che la seconda dovrebbe centrare la linea guida, mentre l'ultima dovrebbe estenderla in modo da usare tutto lo spazio a disposizione. In pratica è difficile comprendere bene la differenza da un punto di vista visivo, per cui si utilizza in genere solo il primo tipo, salvo provare gli altri per verificare l'effetto finale che si può ottenere in alternativa.

Generalmente, nell'espressione che si utilizza per creare la guida si inseriscono parole di controllo per elasticizzare la distanza dei simboli utilizzati.

È importante sottolineare che TeX, dopo la parola di controllo \[c|x]leader vuole necessariamente una scatola \hbox e alla fine vuole uno spazio elastico di tipo \hfil[l[l]]. Nel modello sintattico non è stata mostrata la possibilità di usare diversi spazi orizzontali elastici, perché in pratica ci si limita sempre solo a usare \hfill.

Nel caso si utilizzi \hbox con l'indicazione della larghezza, l'effetto che si ottiene è quello di distanziare precisamente gli elementi simbolici che compongono la linea guida. In questo senso, l'elasticità che gli si attribuisce all'interno del raggruppamento, serve a collocarli correttamente nella scatola.

L'esempio seguente mostra diversi casi di utilizzo di queste linee guida messi a confronto. In particolare, si creano delle linee guida speciali, in cui si usa l'asterisco come simbolo ripetuto:


linea semplice: \hrulefill fine della linea \par
puntini: \dotfill fine dei puntini \par
linea con freccia a destra: \rightarrowfill fine della linea \par
linea con freccia a sinistra: \leftarrowfill fine della linea \par
asterischi normali: \leaders\hbox {*} \hfill fine degli asterischi \par
asterischi distanziati: \leaders\hbox to 1cm {\hss * \hss} \hfill
 fine degli asterischi \par
asterischi normali: \cleaders\hbox {*} \hfill fine degli asterischi \par
asterischi distanziati: \cleaders\hbox to 1cm {\hss * \hss} \hfill
 fine degli asterischi \par
asterischi normali: \xleaders\hbox {*} \hfill fine degli asterischi \par
asterischi distanziati: \xleaders\hbox to 1cm {\hss * \hss} \hfill
 fine degli asterischi \par

guide

Volendo creare una macro per una linea guida particolare, si può procedere come nell'esempio seguente, in cui si riprende uno dei casi già presentati sopra:

\def\asterischi{\leaders\hbox to 1cm {\hss * \hss} \hfill}

233.14   Linee

TeX consente di tracciare delle linee orizzontali o verticali, attraverso le parole di controllo \hrule e \vrule. La sintassi per queste istruzioni può essere abbastanza articolata:

\hrule [width larghezza] [height altezza] [depth profondità]

\vrule [width larghezza] [height altezza] [depth profondità]

La differenza più importante tra le due parole di controllo sta nel fatto che \hrule introduce implicitamente una separazione di paragrafi, mentre \vrule no.

Quando \hrule viene usato senza argomenti, si ottiene una linea orizzontale, appoggiata sulla base della riga, spessa 0,4 punti e larga quanto lo spazio a disposizione per il testo, ovvero quanto definito da \hsize; nello stesso modo, \vrule senza argomenti genera una linea verticale, larga 0,4 punti, che parte dalla base della riga e si innalza per l'altezza massima del contesto in cui si trova. Si osservi l'esempio:


Prima di una linea orizzontale; \hrule{} dopo una linea orizzontale. \par
Prima di una linea verticale; \vrule{} dopo una linea verticale. \par

filetti

Quando si usano gli argomenti con cui si possono controllare le caratteristiche di queste linee, è meglio pensare a dei rettangoli, dove l'unica differenza che conta è il fatto che \hrule conclude un paragrafo. Seguono altri esempi a questo proposito:


Linea orizzontale lunga 10 cm e alta 1 punto: \hrule width 10cm height 1pt \par
Linea verticale alta 1 cm e larga 2 punti: \vrule height 1cm width 2pt \par
Rettangolino alto 5 mm e largo 3 mm: \vrule height 5mm width 3mm \par
Linea orizzontale nel testo: \vrule height 0pt depth 1pt width 10cm \par

filetti rettangolari

233.15   Scatole più complesse

Le scatole definite con \hbox, \vbox e altre macro simili, possono essere inserite una dentro l'altra per formare degli effetti speciali, specialmente se si abbina questo fatto all'uso delle linee orizzontali e verticali. Di solito ci si affida a macro già pronte, oppure a esempi documentati; comunque è utile cercare di comprendere cosa sta sotto. Viene proposto un esempio, attraverso il quale si crea una macro che racchiude del testo dentro una scatola orizzontale bordata:


\def\scatola#1{%
    \leavevmode                                         % 5
    \hbox{%                                             % 4
        \vrule
        \vtop{%                                         % 3
            \vbox{%                                     % 2
                \hrule\kern 1pt
                \hbox{%
                    \kern 1pt \strut#1\kern 1pt         % 1
                }%
            }%
            \kern 1pt
            \hrule
        }%
        \vrule
    }
}

Questo esempio così articolato è tratto da TeX made easy di Daniel M. Zirin (già citato alla fine del capitolo 230). Per riuscire a comprenderlo, occorre partire dal centro.

  1. L'istruzione \kern 1pt \strut#1\kern 1pt inserisce il parametro della macro aggiungendo un punto di spazio a sinistra e a destra, garantendo di avere a disposizione lo spazio verticale necessario a scrivere qualunque lettera (che si espanda in alto e in basso, rispetto alla base).

  2. Tutto questo è racchiuso in una scatola verticale, che prima disegna una linea orizzontale, quindi lascia un punto di spazio in verticale, infine inserisce l'istruzione precedente.

  3. Il tutto è contenuto in un'altra scatola verticale che si espande verso il basso, dove alla fine si aggiunge un altro spazio verticale di un punto e un'altra linea orizzontale.

  4. Ancora una volta, tutto è contenuto dentro un'altra scatola, questa volta orizzontale, che prima e dopo aggiunge due linee verticali.

  5. Per sicurezza, la macro inizia chiamando \leavevmode per garantire il passaggio alla modalità orizzontale.

Ecco come si comporta la macro:


\scatola{Attenzione!} con le scatole ci si confonde facilmente.

scatole bordate

Si osservi che nella definizione della macro \scatola sono stati inseriti molti commenti per consentire la suddivisione del codice su più righe, senza interferire con la composizione finale.

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) Questi spazi verticali aggiuntivi possono essere inseriti solo se ci si trova in modalità verticale, in pratica nello spazio tra i paragrafi e non al loro interno.


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome tex_paragrafi_righe_spazi_scatole_e_linee.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]