$TEXEDIT
49.1.4
&
49.15.1
1fil
49.3.5
1fill
49.3.5
1filll
49.3.5
texconfig
49.1.2
\+
49.15.1
\above
49.17.4
\advance
49.3.6
\atop
49.17.4
\baselineskip
49.12 49.13
\bf
49.10.5
\bgroup
49.2.2
\Biggl
49.17.9
\biggl
49.17.9
\Biggr
49.17.9
\biggr
49.17.9
\Bigl
49.17.9
\bigl
49.17.9
\Bigr
49.17.9
\bigr
49.17.9
\bigskip
49.12.7
\bigskipamount
49.12.7
\break
49.11.1 49.13
\bye
49.2
\choose
49.17.4
\cleaders
49.13.3
\colon
49.17.3
\columns
49.15.1
\countdef
49.3.3
\cr
49.15.1
\def
49.4
\displaylines
49.17.10
\displaystyle
49.17.2
\divide
49.3.6
\dotfill
49.13.3
\egroup
49.2.2
\eject
49.11.1
\end
49.11.1
\endinsert
49.11.5
\enskip
49.13.1
\enspace
49.13.1
\eqalign
49.17.12
\eqalignno
49.17.12
\eqno
49.17.12
\everydisplay
49.17.1
\everymath
49.17.1
\expandafter
49.3.9
\folio
49.11.3
\font
49.10.5
\footline
49.11.2
\footnote
49.11.4
\frenchspacing
49.12.1
\global
49.3.8
\halign
49.15.2
\hangafter
49.12.2
\hangindent
49.12.2
\hbadness
49.12.5
\hbox
49.14
\headline
49.11.2
\hfil
49.11.2 49.13
\hfill
49.13
\hfilll
49.13
\hfuzz
49.12.5
\hline
49.15.1
\hoffset
49.11.1 49.12
\hrulefill
49.13.3
\hsize
49.11.1 49.12
\hskip
49.13.1
\hss
49.13.1
\ifhmode
49.8.4
\ifmmode
49.8.2
\ifnum
49.8.3
\ifodd
49.8.1
\ifvmode
49.8.4
\input
49.2.3
\it
49.10.5
\item
49.12.3
\kern
49.13.2
\leaders
49.13.3
\leavevmode
49.13.2
\leftarrowfill
49.13.3
\leftline
49.13
\leftskip
49.12
\leqalignno
49.17.12
\leqno
49.17.12
\let
49.5
\line
49.13
\lineskip
49.13
\lineskiplimit
49.13
\llap
49.14
\lower
49.13
\lowercase
49.3.2
\lq
49.10.4
\magnification
49.11.1
\magstep
49.10.5
\mathstrut
49.14
\matrix
49.17.10
\medskip
49.12.7
\medskipamount
49.12.7
\midinsert
49.11.5
\mit
49.17.1
\moveleft
49.14.1
\moveright
49.14.1 49.15.1
\multiply
49.3.6
\multispan
49.15.2
\narrower
49.12
\negthinspace
49.13.1
\newcount
49.3.3
\newdimen
49.3.4
\newskip
49.3.5
\newtoks
49.3.1
\noalign
49.15.2
\noindent
49.12
\nonfrenchspacing
49.12.1
\nopagenumbers
49.11.2
\normalbottom
49.11.1
\null
49.14
\number
49.3.7
\of
49.17.6
\offinterlineskip
49.15.2
\omit
49.15.2
\over
49.17.4
\overfullrule
49.12.5
\overline
49.17.7
\pageinsert
49.11.5
\pageno
49.11.2 49.11.3
\par
49.2 49.12
\parindent
49.12
\parshape
49.12.2
\parskip
49.12 49.12.7
\pmatrix
49.17.10
\proclaim
49.17.11
\qquad
49.13.1
\quad
49.13.1
\raggedbottom
49.11.1
\raggedright
49.12
\raise
49.13
\relax
49.8
\rightarrowfill
49.13.3
\rightline
49.13
\rightskip
49.12
\rlap
49.14
\rm
49.10.5
\romannumeral
49.3.7
\root
49.17.6
\rq
49.10.4
\scriptscriptstyle
49.17.2
\scriptstyle
49.17.2
\settabs
49.15.1
\sl
49.10.5
\smallskip
49.12.7
\smallskipamount
49.12.7
\sqrt
49.17.6
\strut
49.14 49.15.1 49.17.2
\supereject
49.11.1
\textstyle
49.17.2
\the
49.3 49.3.7
\thinspace
49.13.1
\tolerance
49.12.5
\topinsert
49.11.5
\tt
49.10.5
\underbar
49.10.6
\underline
49.14 49.17.7
\uppercase
49.3.2
\vbadness
49.12.5
\vbox
49.14
\vcenter
49.14
\vfil
49.12.7
\vfill
49.11.1 49.12.7
\vfuzz
49.12.5
\vglue
49.12.7
\voffset
49.11.1
\vrule
49.15.2
\vsize
49.11.1
\vskip
49.12.7
\vss
49.12.7
\vtop
49.14
\xleaders
49.13.3
^
49.17.5
_
49.17.5
TeX è un linguaggio di programmazione per la composizione tipografica. La «compilazione» di un sorgente TeX produce un file in formato finale (DVI o PDF) per la stampa.
L'importanza di questo linguaggio richiede anche la conoscenza della pronuncia corretta del suo nome: «t-e-k». Infatti, il creatore di questo linguaggio, D.E. Knuth, voleva fare riferimento alle lettere greche maiuscole «TEX», che così vanno pronunciate.
Dal momento che le istruzioni TeX utilizzano spesso le parentesi graffe, nei modelli sintattici queste vanno intese letteralmente, come parte dell'istruzione rappresentata. |
TeX è un linguaggio di programmazione per l'editoria elettronica. Come nei linguaggi di programmazione comuni è possibile realizzare procedure o funzioni, con TeX è possibile costruire delle macro. Nel tempo sono stati realizzati diversi pacchetti standard di macro per TeX; per esempio LaTeX e AmS-TeX.
Semplificando le cose, una distribuzione TeX è un insieme composto da un compilatore TeX (ma forse è più appropriato il termine «compositore»), una serie di file contenenti le informazioni necessarie a produrre i caratteri da stampa e alcuni pacchetti di macro (di solito si tratta almeno di LaTeX).
È importante chiarire che non esiste un modo standard di installare una distribuzione TeX e ogni distribuzione GNU tende a collocarla dove ritiene più opportuno. Il blocco principale di una distribuzione TeX dovrebbe trovarsi in una gerarchia che può inserirsi al di sotto di /usr/lib/
o /usr/share/
. A titolo di esempio, viene mostrato un elenco di alcune di queste possibilità.
/usr/lib/teTeX/texmf/
/usr/lib/texmf/texmf/
/usr/share/teTeX/texmf/
/usr/share/texmf/
Negli esempi che vengono mostrati, quando si fa riferimento a questa directory, si indicano solo percorsi relativi a iniziare da texmf/
. La sigla «texmf» sta per TeX and more, oppure per TeX and friends.
Di fronte alla complicazione di una distribuzione TeX, potrebbe sembrare assurda l'idea di metterci le mani, pensando addirittura di modificare le impostazioni generali di TeX. Tuttavia, quando si maneggiano documenti eccezionalmente voluminosi, potrebbe essere necessario modificare anche ciò che non è stato pensato per esserlo.
Alla fine della composizione di un documento TeX, si può leggere nel file delle registrazioni generato, un rapporto delle risorse utilizzate durante l'elaborazione. Si osservi l'esempio.
|
Questo è proprio il caso di un documento enorme (1 844 pagine), ma prima di tale informazione appaiono dei valori, dove alternativamente si vede quanto di una data risorsa è stato usato e quanto di questa sarebbe stato invece disponibile. Se per qualche ragione si esaurisce una di queste risorse, l'elaborazione si interrompe con una segnalazione di errore che indica quale limite è stato superato.
Se succede, si può provare a mettere mano al file di configurazione della distribuzione di TeX che dovrebbe essere texmf/web2c/texmf.cnf
. La prima volta, non è tanto facile capire il senso delle direttive che questo contiene, ma con un po' di tentativi si dovrebbe riuscire a risolvere il problema.
Prima di tutto si può osservare che, seguendo lo stile generale di TeX, i commenti sono introdotti dal simbolo di percentuale (%). Nella prima parte del file sono annotati i percorsi dei vari componenti della distribuzione.
|
La lettura di questa parte può rivelare delle informazioni importanti riguardo la propria distribuzione TeX. Più avanti inizia una parte più delicata: quella che definisce le dimensioni degli array utilizzati da TeX, dimensioni che di conseguenza rappresentano i limiti a cui si accennava all'inizio di questa sezione.
|
In questa parte, il valore più importante è quello di pool_size, perché può creare problemi soprattutto a pdfTeX. Nell'esempio si vede che è stato quadruplicato.
Alcune modifiche non possono essere prese in considerazione senza un'elaborazione successiva del file. In generale, al termine delle modifiche è bene dare il comando seguente:
#
texconfig init
[Invio]
A parte il caso particolare dell'utilizzo appena mostrato, texconfig è un programma interattivo predisposto per configurare gli elementi essenziali della distribuzione TeX. Si avvia semplicemente, senza bisogno di argomenti. La figura 49.4 mostra il menù principale di texconfig.
#
texconfig
[Invio]
.------------------ teTeX setup utility -------------------. | | | Hint: all output of external commands (e.g. tex) is | | logged into a file. You can look at this file using | | LOG. If cursor keys make trouble, you may have more | | luck with +/- and TAB. | | .------------------------------------------------------. | | | EXIT exit | | | | PREF personal preferences | | | | CONF show configuration | | | | REHASH rebuild ls-R database | | | | HYPHEN hyphenation table (tex/latex) | | | | MODE default mode (xdvi/dvips/mf) | | | | XDVI xdvi configuration | | | | DVIPS dvips configuration | | | | FONT directories for font creation | | | | DOC rebuild html documentation | | | | FAQ frequently asked questions + answers | | | | LOG view logfile | | |----------------------------------------------------------| | < OK > <Cancel> | `----------------------------------------------------------' |
La funzione indicata con la sigla {PREF
} serve solo a modificare il comportamento di texconfig, permettendo in particolare di selezionare un programma per la modifica del testo alternativo a quello predefinito.
La funzione {CONF
} permette di mostrare la configurazione, consistente nella definizione delle directory contenenti i vari componenti della distribuzione TeX.
La funzione {REHASH
} permette di ricostruire il file texmf/ls-R
, utilizzato per agevolare la ricerca dei componenti installati ad alcuni programmi della distribuzione. In generale, si ricostruisce questo file quando si aggiunte o si toglie qualche file (per esempio i file dei tipi di carattere).
La funzione {HYPHEN
} è molto importante, perché permette di stabilire le lingue per cui attivare la suddivisione in sillabe del testo. Selezionando questa funzione si ottiene l'avvio del programma per la modifica di file di testo (presumibilmente VI) con il file texmf/tex/generic/config/language.dat
. Questo file può essere modificato, quindi, dopo averlo salvato, vengono avviate automaticamente le procedure necessarie ad attivare in pratica le scelte fatte.
Di solito, si tratta di commentare le righe che fanno riferimento a linguaggi che non si vogliono gestire e di togliere il commento dalla direttiva di attivazione della sillabazione per la lingua italiana.
|
Al termine dell'elaborazione si può verificare nel file texmf/web2c/latex.log
la presenza delle righe che dimostrano l'abilitazione della sillabazione per le lingue selezionate nel file di configurazione. In questo caso particolare, la lingua italiana corrisponde al linguaggio numero tre.
|
La funzione {MODE
} permette di predisporre alcuni programmi per la risoluzione della propria stampante. Ciò si ottiene semplicemente selezionando il nome di una stampante che dovrebbe corrispondere, o essere molto simile alla propria.
La funzione {XDVI
} permette di configurare Xdvi (sezione 26.3), il programma di visualizzazione dei file DVI, in modo da stabilire il formato del foglio che si utilizza. Basta scorrere un elenco e confermare.
La funzione {DVIPS
} permette di configurare Dvips (sezione 26.3), il programma in grado di convertire file DVI in PostScript. Come per Xdvi, la cosa più importante da stabilire è il formato della carta, ma può anche essere indicata la stampante, o il comando di stampa da utilizzare quando Dvips viene usato per inviare direttamente un file alla stampa.
L'ultima funzione importante è {FONT
} che permette di regolare i permessi di accesso alle directory che contengono i tipi di carattere e anche di configurare altre caratteristiche di questi file.
TeX utilizza un sorgente che si distingue perché di solito il suo nome finisce con l'estensione .tex
; durante il processo di composizione genera un rapporto sull'elaborazione in un file con l'estensione .log
e produce un file finale in formato DVI, con estensione .dvi
. Successivamente, i file DVI vengono convertiti normalmente in PostScript attraverso il programma Dvips.
Eventualmente, è disponibile anche pdfTeX, con cui, invece di una composizione in formato DVI, si ottiene un file PDF senza passaggi intermedi.
Se si suppone che il file primo.tex
contenga il testo seguente
|
per ottenere la composizione in formato DVI è sufficiente il comando
$
tex primo.tex
[Invio]
This is TeX, Version 3.14159 (Web2C 7.3.1) (primo.tex [1] ) Output written on primo.dvi (1 page, 328 bytes). Transcript written on primo.log. |
mentre per ottenere la composizione in formato PDF è sufficiente il comando
$
pdftex primo.tex
[Invio]
This is pdfTeX, Version 3.14159-13d (Web2C 7.3.1) (primo.tex[/usr/share/texmf/pdftex/config/pdftex.cfg] Babel <v3.6x> and hyphenation patterns for american, italian, nohyphenation, loaded. [1[/usr/share/texmf/dvips/config/pdftex.map]] )<cmr10.pfb> Output written on primo.pdf (1 page, 9807 bytes). Transcript written on primo.log. |
Nel primo caso si ottiene il file primo.dvi
, mentre nel secondo si ha il file primo.pdf
. Eventualmente, per convertire il file DVI in PostScript, è sufficiente usare Dvips nel modo seguente:
$
dvips -o primo.ps primo.dvi
[Invio]
This is dvips(k) 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com) ' TeX output 2001.08.30:0835' -> primo.ps <texc.pro>. [1] |
Ecco quello che si ottiene:
|
Si può anche usare una versione estesa di TeX, e-TeX e pdfeTeX, corrispondenti agli eseguibili etex e pdfetex, che in questo caso si comportano nello stesso modo:
$
etex primo.tex
[Invio]
This is e-TeX, Version 3.14159-2.1 (Web2C 7.3.1) entering extended mode (primo.tex [1] ) Output written on primo.dvi (1 page, 328 bytes). Transcript written on primo.log. |
oppure
$
pdfetex primo.tex
[Invio]
This is pdfeTeX, Version 3.14159-13d-2.1 (Web2C 7.3.1) entering extended mode (primo.tex[/usr/share/texmf/pdftex/config/pdftex.cfg] [1[ /usr/share/texmf/dvips/config/pdftex.map]] )<cmr10.pfb> Output written on primo.pdf (1 page, 9807 bytes). Transcript written on primo.log. |
Gli eseguibili tex, pdftex etex e pdfetex sono indipendenti, mentre attorno a loro si presentano altrettante serie di collegamenti simbolici:
virtex -> tex initex -> tex latex -> tex amstex -> tex evirtex -> etex einitex -> etex elatex -> etex pdfevirtex -> pdfetex pdfeinitex -> pdfetex pdfelatex -> pdfetex pdfvirtex -> pdftex pdfinitex -> pdftex pdflatex -> pdftex |
A seconda del nome usato per avviare uno stesso eseguibile, si può ottenere un comportamento differente. Nel caso di virtex che è un collegamento a tex, si fa riferimento implicitamente al formato plain, corrispondente alle dichiarazioni contenute nei file della directory texmf/tex/plain/
, così come pdfvirtex fa riferimento alla directory texmf/pdftex/plain/
, ecc. Purtroppo, le cose non sono così semplici in generale, perché le convenzioni non sono perfettamente omogenee; tuttavia, vale la pena di tenere presente che i nomi del tipo [pdf][e]virtex sono equivalenti ai nomi del tipo [pdf][e]tex.
I nomi del tipo [pdf][e]initex fanno riferimento al linguaggio TeX senza la dichiarazione di alcuna macro e sono equivalenti all'uso degli eseguibili del tipo [pdf][e]tex con l'aggiunta dell'opzione --ini. In pratica, per usare [pdf][e]initex, oppure [pdf][e]tex --ini, occorre modificare l'esempio già visto nel modo seguente:
|
Questa spiegazione viene data solo per chiarire un po' il funzionamento di TeX e il significato di tutti i collegamenti simbolici che gli stanno intorno. L'uso dell'istruzione \input plain nel sorgente non funziona sempre come ci si aspetterebbe leggendo queste indicazioni; in pratica, una volta capito il senso della cosa, non va usata affatto. |
In modo analogo a quanto visto fino a questo punto, quando si fa riferimento a un collegamento del tipo [pdf][e]latex, è come usare un eseguibile del tipo [pdf][e]initex, oppure [pdf][e]tex --ini, iniziando il sorgente TeX con la riga seguente:
|
Resta il fatto che il comando \input latex.ini non rappresenta necessariamente uno standard e quello che conta è sapere solo che i collegamenti [pdf][e]latex richiamano in qualche modo il formato latex. In altri termini, i collegamenti [pdf][e]latex fanno riferimento implicitamente alle macro di LaTeX. |
Per completare questa sezione, viene mostrato un esempio di un sorgente LaTeX, ovvero un sorgente TeX fatto per le macro LaTeX. Si fa riferimento al nome ipotetico secondo.tex
:
|
Per comporre correttamente questo file, occorre un comando del tipo:
$
[pdf][e]latex secondo.tex
[Invio]
A seconda dei casi si ottiene il file secondo.dvi
, oppure secondo.pdf
.
La composizione di un documento scritto con il linguaggio TeX può avvenire anche con qualche forma di interazione. Se si avvia uno degli eseguibili [pdf][e]tex senza argomenti, si ottiene un invito a inserire il nome del file, attraverso l'indicazione di due asterischi:
$
tex
[Invio]
This is TeX, Version 3.14159 (Web2C 7.3.1) ** |
Si può inserire così il percorso del file, omettendo eventualmente l'estensione se questa corrisponde a .tex
:
**
terzo.tex
[Invio]
(terzo.tex [1] ) Output written on terzo.dvi (1 page, 488 bytes). Transcript written on terzo.log. |
Supponendo di avere scritto un file, denominato quarto.tex
, in cui non appare l'istruzione \bye finale, come nel testo seguente, TeX si ferma in attesa di istruzioni, mostrando un invito ridotto a un solo asterisco:
|
$
tex quarto.tex
[Invio]
This is TeX, Version 3.14159 (Web2C 7.3.1) (quarto.tex) * |
Naturalmente, se si è in grado di farlo, si può aggiungere anche altro testo:
*
Saluti!
[Invio]
*
\bye
[Invio]
[1] Output written on quarto.dvi (1 page, 448 bytes). Transcript written on quarto.log. |
|
Di solito si evita di interagire con TeX, tuttavia si può essere costretti dal presentarsi di un errore durante la compilazione del sorgente. Per la precisione, il livello di interazione di TeX può essere regolato attraverso delle istruzioni speciali, come descritto nella tabella 49.24. In condizioni normali, il funzionamento avviene in modalità errorstopmode, corrispondente all'istruzione \errorstopmode, in cui TeX si ferma in attesa di indicazioni per qualunque errore si presenti.
|
Per esempio, il file quinto.tex
che contiene il testo seguente, usa erroneamente l'istruzione \tex al posto di \TeX:
|
$
tex quinto.tex
[Invio]
This is TeX, Version 3.14159 (Web2C 7.3.1) (quinto.tex ! Undefined control sequence. l.3 ...to documento scritto con il linguaggio \tex , in ? |
Viene dichiarato sinteticamente il tipo di errore individuato, che in questo caso corrisponde a
! Undefined control sequence. |
ovvero una sequenza di controllo indefinita. Nella riga successiva si indica il numero della riga in cui appare l'errore (l.3 sta per line 3) con il pezzo di testo che arriva fino all'errore, mentre il pezzo successivo appare staccato, nella riga successiva.
l.3 ...to documento scritto con il linguaggio \tex , in |
In pratica, secondo TeX l'errore è riferito esattamente alla stringa \tex. Sotto appare un invito composto da un punto interrogativo, con il quale TeX attende un'azione dell'utente. Si può rispondere con un altro punto interrogativo per avere l'elenco delle possibilità:
?
?
[Invio]
Type <return> to proceed, S to scroll future error messages, R to run without stopping, Q to run quietly, I to insert something, E to edit your file, 1 or ... or 9 to ignore the next 1 to 9 tokens of input, H for help, X to quit. ? |
La tabella 49.30 descrive brevemente il significato e l'uso dei comandi disponibili, mostrando anche la modalità corrispondente quando una scelta coincide con la richiesta di cambiamento di questa.
|
Nel caso dell'errore mostrato, si vuole provare a capire meglio di cosa si tratta, attraverso il comando [h][Invio]:
?
h
[Invio]
The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined. |
Dal momento che si può correggere facilmente l'errore, si richiede di poter inserire del testo sostitutivo:
?
i
[Invio]
insert>
\TeX
[Invio]
[1] ) Output written on quinto.dvi (1 page, 376 bytes). Transcript written on quinto.log. |
Con il comando [e][Invio] si può avviare un programma per la modifica del file sorgente. Di solito si tratta di VI, ma si può intervenire nella variabile di ambiente TEXEDIT indicando il nome di un altro programma, usando le metavariabili %d e %s per indicare rispettivamente la riga contenente l'errore e il nome del file. Per esempio, rimanendo nel caso di VI, è possibile usare la sintassi seguente per raggiungere la riga n-esima del file indicato:
vi -c n file |
In questo modo, si dovrebbe assegnare alla variabile di ambiente TEXEDIT la stringa vi -c %d %s:
$
TEXEDIT="vi -c %d %s"
[Invio]
$
export TEXEDIT
[Invio]
Un file sorgente TeX è un file di testo normale; per la precisione dovrebbe trattarsi di un file ASCII standard a 7 bit, dove l'interruzione delle righe avviene secondo le regole del proprio sistema operativo.
Nel linguaggio di TeX si distinguono righe bianche o vuote da righe contenenti istruzioni. Nell'ambito delle righe contenenti istruzioni, possono poi apparire dei commenti che si distinguono per essere preceduti dal segno di percentuale (%), terminati dalla fine della riga. Nell'esempio seguente si può osservare che tutte le righe che contengono del testo sono in pratica delle istruzioni, più o meno articolate. Nella prima riga appare anche un commento che poi scompare nella composizione finale.
|
Gli spazi, verticali e orizzontali, hanno un significato, ma generalmente non si sommano. Normalmente si usa una riga vuota o bianca per separare il testo in paragrafi, ma la presenza di più righe bianche o vuote non cambia la distanza tra questi paragrafi nella composizione finale; nello stesso modo, uno spazio orizzontale serve generalmente a separare le parole di una frase, ma la presenza di più spazi orizzontali non cambia la distanza tra le parole.
Eventualmente si può dichiarare espressamente la separazione tra i paragrafi attraverso l'istruzione \par, tenendo presente che anche in questo caso, l'uso di più istruzioni del genere non produce una separazione maggiore tra i paragrafi stessi
L'istruzione finale \bye conclude il «programma» TeX e tutto ciò che appare dopo viene ignorato.
Una riga di testo si traduce generalmente nel testo corrispondente nella composizione finale, tenendo conto però che alcuni simboli hanno un significato speciale e si distinguono contesti differenti. La tabella 49.34 elenca i caratteri che hanno significati particolari, con l'indicazione del modo per ottenere il loro simbolo originale nella composizione.
|
La barra obliqua inversa (\) viene usata come prefisso per delle sequenze di controllo, nell'ambito delle quali si può distinguere tra parole di controllo e simboli di controllo. Una parola di controllo è formata esclusivamente da lettere alfabetiche (dalla «a» alla «z», maiuscole e minuscole, escluse le lettere accentate); per esempio, \TeX è una parola di controllo con cui si ottiene la rappresentazione del nome TeX secondo lo standard stabilito dal suo autore originale. Un simbolo di controllo è invece un solo carattere che non sia una lettera alfabetica; per esempio, \` è un simbolo di controllo con cui si ottiene l'aggiunta di un accento grave sopra il simbolo successivo.
In base al fatto che le parole di controllo si distinguono perché composte esclusivamente da lettere alfabetiche, si può porre il problema di delimitarle correttamente quando si trovano incorporate in parole che compongono il testo normale. Nell'esempio già mostrato, la parola di controllo \TeX si individua correttamente perché è seguita da un punto fermo, ovvero un simbolo che non è una lettera alfabetica, ma volendo scrivere un gioco di parole, come «il mio primo TeXdocumento», sarebbe necessario usare uno strattagemma. Si osservi l'esempio seguente che si traduce in un errore nella composizione del documento:
|
TeX cerca di interpretare la parola di controllo \TeXdocumento e non dovrebbe riuscirci. Per questa ragione, lo spazio che dovesse seguire una parola di controllo viene ignorato; così, diventa più facile inserire queste parole di controllo in parole del testo che si vuole comporre. Ecco l'esempio corretto:
|
Tuttavia, rimane da chiarire in che modo inserire veramente uno spazio dopo una parola di controllo. Questo problema viene risolto con l'uso dei raggruppamenti.
In diverse situazioni è utile raggruppare parte delle istruzioni (il testo) all'interno di parentesi graffe ({...}). L'effetto del raggruppamento non si nota nella composizione finale, ma permette di circoscrivere l'effetto di istruzioni particolari.
È ammissibile anche l'uso di raggruppamenti vuoti, {}, che di solito vengono usati per separare parole o simboli di controllo dal testo che segue. Per esempio, scrivendo \TeX{} si riesce a evitare che lo spazio successivo venga inghiottito. Naturalmente si può usare anche il simbolo di controllo \<SP> (barra obliqua inversa e spazio) per indicare espressamente uno spazio in quel punto. Nel seguito vengono mostrati diversi esempi che si traducono nella stessa composizione finale.
Raggruppamento vuoto alla fine della parola di controllo:
|
Raggruppamento vuoto per separare gli spazi:
|
Raggruppamento per individuare uno spazio:
|
Raggruppamento per individuare uno spazio dopo la fine della parola di controllo:
|
Raggruppamento per isolare la parola di controllo:
|
Raggruppamento per isolare lo spazio e la parola successiva:
|
Nella tabella 49.34 sono stati mostrati alcuni simboli di controllo che sono conclusi evidentemente da un raggruppamento vuoto: \~{}, \^{} e \_{}. In questo caso, il raggruppamento vuoto serve a impedire che la sequenza di controllo produca qualcosa di diverso da ciò che ci si aspetta in quel contesto particolare. Per esempio, \^o oppure anche \^ o genera la lettera accentata «ô».
Viene chiarito in seguito che le istruzioni \~{} e \^{} sono delle macroistruzioni che servono a generare un accento, utilizzano un parametro, costituito dal carattere o dal gruppo successivo. Nel momento in cui si vogliono rappresentare questi simboli senza abbinarli ad altro, il loro parametro deve essere un gruppo vuoto o lo spazio inteso come carattere (\<SP>). Pertanto, in alternativa a \~{} e \^{} si potrebbe usare la forma \~\<SP> e \^\<SP>.
Oltre all'uso delle parentesi, è possibile usare in alternativa la coppia di parole di controllo \bgroup e \egroup, in sostituzione di { e } rispettivamente.
È possibile articolare un sorgente TeX in più file separati che vengono inclusi con l'istruzione \input:
\input nome_file |
L'inclusione avviene inserendo in quel punto le righe del file indicato. Se il file esterno contiene l'istruzione \bye, la composizione termina senza continuare nel file di partenza.
TeX ha una gestione molto particolare dei dati. Nelle sezioni seguenti vengono descritti solo i tipi di dati più comuni, ma questo dovrebbe bastare per far comprendere la logica di fondo.
Vale la regola per cui può essere usato solo ciò che è già stato dichiarato; inoltre, il campo di azione di queste variabili può essere controllato attraverso i raggruppamenti con le parentesi graffe.
In generale, per TeX una variabile ha l'aspetto di una parola di controllo a cui si assegna un valore secondo la sintassi seguente:
\nome=valore |
L'espansione di una variabile avviene inserendo la parola di controllo corrispondente nel punto in cui il contesto lo richiede. Tuttavia, se lo scopo è quello di espandere la variabile in modo che appaia nel testo normale, occorre usare un accorgimento, con cui si trasforma il suo contenuto in una stringa. Di solito si usa per questo la parola di controllo \the:
\the\nome |
Per TeX la stringa è ciò che può essere reso tipograficamente; così, un'espressione stringa è ciò che alla fine si trasforma in una stringa nella composizione tipografica. Le variabili di tipo stringa si dichiarano nel modo seguente:
\newtoks\nome |
Si può assegnare una stringa alla variabile nel modo seguente:
\nome={espressione_stringa} |
L'espansione di una variabile stringa non può avvenire inserendo semplicemente la parola di controllo \nome nel testo, perché occorre dichiarare espressamente questa intenzione con la parola di controllo \the.
|
|
Nell'esempio precedente, si crea una variabile stringa corrispondente alla parola di controllo \data, a cui si assegna la stringa 9 settembre 2001, per poi ottenerne successivamente l'espansione nel testo.
Le trasformazioni più comuni sulle stringhe sono il cambiamento in maiuscole o minuscole. Ciò si ottiene facilmente con le macro \uppercase e \lowercase:
\uppercase{espressione_stringa_da_trasformare_in_maiuscole} |
\lowercase{espressione_stringa_da_trasformare_in_minuscole} |
La variabile numerica più semplice di TeX è il contatore. Ne esistono due tipi: uno deve essere inizializzato subito, con un valore non negativo, l'altro no:
\countdef\nome_contatore=n |
\newcount\nome_contatore |
Il primo di questi due modelli riguarda il tipo di contatore che deve essere inizializzato in fase di dichiarazione. Il valore di inizializzazione è rappresentato da n.
Per assegnare un valore a una variabile contatore, si usa la forma seguente:
\nome=valore |
È importante sottolineare che l'inizializzazione di un contatore definito attraverso \countdef potrebbe in pratica non tradursi nell'assegnamento corrispondente alla variabile, pur essendo obbligatorio. Pertanto, conviene poi assegnare nuovamente il valore richiesto. |
Si può assegnare un numero espresso usando cifre numeriche, con un segno anteriormente nel caso sia necessario, senza separatore decimale, come nell'esempio seguente, in cui si assegna al contatore \conteggio il valore -345.
|
Un tipo specifico di variabile numerica è adibita a contenere delle lunghezze. Per TeX, la lunghezza è un'informazione numerica particolare, riconducibile al concetto di variabile a virgola mobile di altri linguaggi. Si dichiara una lunghezza nel modo seguente:
\newdimen\nome_lunghezza |
Una lunghezza è un valore che si può rappresentare in forma costante solo specificando l'unità di misura, composta da due lettere secondo lo schema che appare nella tabella 49.49. Pertanto, un valore che esprime una lunghezza deve avere la forma seguente:
[+|-]numero[true]unità_di_misura |
In particolare, il valore che precede l'unità di misura può contenere una virgola decimale, espressa attraverso il punto (.).(1) Per esempio, per esprimere una lunghezza di 10 cm, si deve scrivere 10cm.(2) Nell'esempio seguente si assegna alla variabile \distanza una lunghezza positiva di 4,5 mm:
|
La parola chiave true consente di indicare una lunghezza che non può essere ingrandita o ridotta attraverso l'istruzione \magnification, come viene descritto nella sezione 49.11.1. Pertanto, se nell'esempio precedente si vuole indicare una lunghezza positiva corrispondente esattamente a 4,5 mm, in ogni situazione, si deve scrivere così:
|
oppure anche in modo più leggibile:
|
La rappresentazione interna delle lunghezze è di un solo tipo; in pratica, TeX converte sempre i valori nell'unità di misura più piccola che è in grado di gestire. L'unità di misura più piccola è definita scaled point ed è stata creata appositamente per TeX.
|
Si osservi che TeX non semplifica la tradizione tipografica, consentendo di utilizzare ben tre tipi diversi di punto tipografico. Il punto a cui si è abituati comunemente con i programmi di composizione, è quello corrispondente alla sigla bp, ma TeX utilizza in modo predefinito l'unità pt, la quale comunque non si discosta di molto. |
In varie situazioni, TeX è in grado di gestire delle lunghezze elastiche. Le variabili che contengono informazioni del genere sono in grado di annotare tre indicazioni distinte: la distanza normale, una tolleranza in più e una tolleranza in meno. Questo tipo di informazione si esprime secondo la forma seguente:
lunghezza_richiesta [plus lunghezza_in_estensione] \ |
In pratica, è come dire che si fa riferimento a una certa lunghezza, a cui si può aggiungere quanto appare dopo la parola chiave plus e si può togliere quanto appare dopo minus. Come si può intuire, quando non si indicano i valori che danno elasticità, si sottintende in corrispondenza un valore zero.
L'elasticità fissata attraverso le parole chiave plus e minus non è tassativa. Di solito, il solo fatto che si consenta un'estensione, anche di un solo punto, fa sì che il salto sia allungabile in modo indefinito, in caso di necessità. |
Eventualmente, si dichiara una variabile del genere con la forma seguente:
\newskip\nome |
L'assegnamento, come si può intendere, ha la forma seguente:
\nome=lunghezza_elastica |
Ovvero:
\nome=lunghezza [plus lunghezza] [minus lunghezza] |
Le indicazioni sull'elasticità in estensione e in contrazione sono formate normalmente da lunghezze, come per esempio plus 1pt, ma si possono usare anche delle definizioni astratte, rappresentate da tre parole chiave, precedute da un numero intero:
nfil nfill nfilll |
Generalmente, il numero n è sempre 1 e va inteso come moltiplicatore della parola successiva; in pratica, 2fil rappresenta un'elasticità doppia di 1fil.
La parola chiave fil rappresenta un'elasticità di grado minimo, fill un'elasticità di grado medio e filll un'elasticità molto grande.
La realizzazione di espressioni numeriche con TeX diventa abbastanza complicata. Si utilizzano fondamentalmente tre tipi di istruzione per modificare il valore di una variabile:
\advance\nome [by] valore |
\multiply\nome [by] valore |
\divide\nome [by] valore |
In pratica, nel primo caso si incrementa la variabile del valore indicato (se il valore in questione è negativo, la variabile viene ridotta di conseguenza); nel secondo caso si assegna alla variabile il prodotto tra quanto contenuto prima per il valore indicato; nel terzo caso si divide il contenuto della variabile per il valore, assegnando alla stessa il risultato della divisione.
Come si può osservare, la parola chiave by è facoltativa e si può usare per facilitare la lettura umana dell'istruzione.
Il valore usato deve essere del tipo adatto alla variabile con cui si esegue l'operazione. Viene mostrato un esempio complessivo che dovrebbe essere comprensibile a sufficienza:
|
|
Va tenuta in considerazione una scorciatoia importante per rappresentare il prodotto tra una costante numerica e il valore di una lunghezza; questa scorciatoia si usa di solito per gli assegnamenti:
n\nome |
Qui il numero n non deve esprimere una lunghezza, pertanto non può contenere l'indicazione dell'unità di misura. Per esempio, se \hsize contiene la lunghezza 15 cm, con l'istruzione seguente si assegna alla variabile \mezza la metà di questa lunghezza, ovvero 7,5 cm:
|
Nell'esempio seguente si creano due variabili: una contiene una lunghezza e l'altra una lunghezza elastica. Dopo aver controllato il valore iniziale di queste, si riassegna loro la metà del loro valore di partenza, controllando successivamente il risultato ottenuto. Si può osservare che \elastico perde l'informazione sull'elasticità, diventando una lunghezza normale.
|
|
I dati numerici, quando devono essere convertiti in stringhe, possono essere rappresentati in forme differenti. La parola di controllo \the consente di ottenere una trasformazione «normale» di qualunque variabile in stringa:
\the\parola_di_controllo |
Per esempio, se \lunghezza è stata dichiarata come lunghezza contenente il valore 10 cm, l'espansione di \the\lunghezza può generare la stringa 284.45274pt.
Un valore numerico può essere trasformato in numero intero, ammesso che ciò abbia senso, con la parola di controllo \number:
\number\parola_di_controllo |
In questo caso, se si tenta di trasformare una lunghezza in numero, si ottiene la dimensione in punti scaled point; nel caso dell'esempio precedente, si otterrebbe la rappresentazione del valore 18 646 798, corrispondente ai 10 cm di prima espressi secondo l'unità di misura minima che TeX è in grado di gestire. Per quanto riguarda le lunghezze elastiche, non è possibile usare la trasformazione attraverso \number.
Quando il valore da trasformare è un intero positivo maggiore di zero, si può ottenere la rappresentazione in numero romano, con lettere minuscole, attraverso la parola di controllo \romannumeral:
\romannumeral\parola_di_controllo |
L'esempio seguente riepiloga l'uso delle forme di trasformazione dei dati numerici in stringa che sono appena state descritte:
|
|
Le parentesi graffe, oppure le parole di controllo \bgroup e \egroup, servono a delimitare e isolare una zona rispetto al testo che si trova al loro esterno. Una dichiarazione o un assegnamento fatto all'interno di una zona delimitata da parentesi graffe ha effetto in quell'ambito e in tutte le altre zone che possono essere annidate al suo interno, mentre all'esterno non esiste più. Si osservi l'esempio seguente:
|
Si ottiene il testo che segue:
|
Perché un assegnamento abbia valore in modo globale, si usa la parola di controllo \global. Si osservi l'esempio seguente:
|
In questo caso, la lunghezza appare essere sempre di 100 cm (2 845,275 59 punti normali), anche quando si ritorna al di fuori dei raggruppamenti. In pratica, si ottiene il testo che segue:
|
Esiste un problema con TeX, legato all'ordine in cui vengono espanse le parole di controllo. L'esempio più comune è dato dalla difficoltà con cui si riesce a trasformare un numero romano ottenuto da \romannumeral in maiuscolo. Per esempio,
|
genera solo:
|
In pratica, \uppercase si trova a intervenire su una stringa che ancora non c'è, per cui non succede nulla. Per risolvere il problema si usa la parola di controllo \expandafter che anticipa l'esecuzione di ciò che segue:
|
|
Purtroppo il funzionamento di questa parola di controllo non è intuitivo e spesso si devono fare vari tentativi prima di riuscire a fare ciò che si intende.
Si può dare un nome a un'espressione stringa attraverso la sintassi seguente:
\def\nome{espressione_stringa} |
Si osservi che, al contrario di altre situazioni, qui TeX richiede che la parentesi graffa aperta segua immediatamente il nome (o il simbolo dell'ultimo parametro, come viene descritto nel seguito), senza alcuna spaziatura intermedia. |
Questo tipo di dichiarazione serve in generale per realizzare delle macroistruzioni; tuttavia, utilizzandola solo così, si fa in modo di ottenere l'espansione di ciò che è contenuto fra le parentesi graffe nel momento in cui si inserisce nel testo l'istruzione \nome. Si osservi l'esempio:
|
In questo caso si vuole dichiarare la parola di controllo \eTeX, con cui diventa facile uniformare la scrittura di questo nome nel testo. Se ci fosse un ripensamento sulla forma da dare al nome, basterebbe modificare la sua dichiarazione iniziale.
Una macro del genere può essere modificata solo riassegnandole un altro valore, nello stesso modo usato per la sua dichiarazione iniziale.
È importante ricordare che in fase di composizione, le parole di controllo assorbono gli spazi alla loro destra, per cui è necessario usare una tecnica per evitarlo, come l'inserimento di un gruppo vuoto alla fine della stessa. |
Nel momento in cui si utilizza una parola di controllo corrispondente a una macroistruzione dichiarata in questo modo, si ottiene l'espansione del suo contenuto. In altri termini, la parola di controllo diventa una forma abbreviata per scrivere un testo più articolato, il quale può contenere a sua volta altre sequenze di controllo che vengono espanse solo all'ultimo momento. Si osservi l'esempio seguente:
|
Si ottiene un testo simile a quello seguente, con cui si comprende il fatto che le parole di controllo \valore e \tolleranza vengono espanse per ultime:
|
L'espansione di una parola di controllo del genere avviene in modo letterale, salvo naturalmente l'espansione successiva del suo contenuto, ma questo fatto significa che vengono riprodotte anche le interruzioni delle righe e gli spazi. Alle volte si preferisce strutturare il contenuto di una dichiarazione del genere, per cui si utilizzano dei commenti per evitare di dare un significato agli spazi che si inseriscono. Si osservi l'esempio precedente dopo una piccola modifica:
|
In questo caso, ciò che si ottiene è diverso, perché la parola di controllo \resistenza si espande inserendo inizialmente una riga vuota, ovvero ciò che poi si traduce nell'inizio di un paragrafo nuovo:
|
Per evitare questo tipo di inconveniente, si può mettere un commento all'inizio della riga vuota, che così perde questa sua particolarità:
|
Di solito, in queste situazioni si mette un commento anche dopo la parentesi graffa aperta:
|
Oltre a questo è da tenere in considerazione che nel momento dell'espansione, ciò che si ottiene non risulta contenuto in una zona separata; in altri termini, ciò che viene dichiarato o modificato all'interno di questa definizione, continua a valere anche al di fuori. Eventualmente, se si intende che l'espansione debba generare una zona isolata, vanno usate le parentesi graffe come già mostrato. Per esempio:
|
In questo caso, l'istruzione \bf inizia la scrittura in neretto; così, la parola di controllo \attenzione permette di inserire la scritta che si vede, in neretto, senza interferire con il testo successivo.
Gli esempi usati fino a questo punto sono riconducibili all'idea di una funzione che non prevede parametri per la chiamata, ricevendo i dati attraverso variabili globali. Per dichiarare una macroistruzione in grado di ricevere degli argomenti si usa una dichiarazione come quella seguente:
\def\nome#1[#2...[#9]]{espressione_stringa} |
In una dichiarazione del genere si possono indicare un massimo di nove parametri (parametri formali, a cui si abbinano nella chiamata gli argomenti attuali), rappresentati da #1, #2,... #9, che possono essere inseriti nella stringa contenuta tra le parentesi graffe. Volendo modificare l'esempio già visto, le cose si potrebbero semplificare nel modo seguente:
|
Nella dichiarazione, i simboli #n che si inseriscono all'interno del testo contenuto tra parentesi graffe possono essere indicati anche più volte, ottenendo sempre l'espansione del parametro n-esimo corrispondente.
È ormai evidente il modo in cui deve essere usata la parola di controllo che può essere chiamata con dei parametri:
\nome{parametro_1}[{parametro_2}[...{parametro_n}]] |
È importante sottolineare che, contrariamente a quanto si potrebbe immaginare, la stringa utilizzata come argomento della chiamata di una macroistruzione non può essere separata in paragrafi. |
Si osservi che molte macroistruzioni predefinite di TeX isolano l'espressione stringa che restituiscono all'interno di un raggruppamento, in modo tale che ciò che si cambia al suo interno non si rifletta nel testo successivo. Di solito questo fatto è un comportamento «logico», o intuitivo, ma non si deve pensare che la definizione di una macro implichi automaticamente questa forma di isolamento. In pratica, il fatto di usare una parola di controllo del tipo \nome{espressione}, non significa implicitamente che quanto inserito come argomento della chiamata non debba anche influenzare il testo successivo.
È stata mostrata la sintassi per la chiamata di una macroistruzione che richiede di fornire uno o più argomenti:
\nome{parametro_1}[{parametro_2}[...{parametro_n}]] |
Tuttavia, si tratta di una semplificazione. Infatti, gli argomenti possono anche non essere racchiusi tra parentesi graffe, ma in tal caso, il primo argomento diventa il primo carattere che segue. Si osservi l'esempio seguente, in cui si dichiara una macro con tre parametri e poi la si chiama senza raggruppare gli argomenti:
|
|
Nella sezione 49.10 viene mostrato l'uso di macro come \` che servono ad aggiungere un accento alla lettera successiva. Queste si usano solitamente senza circoscrivere la lettera che segue entro parentesi graffe.
È possibile creare dei riferimenti a una parola o a un simbolo di controllo, usando la sintassi seguente:
\let\nome_nuovo=\nome |
In pratica, in questo modo si crea una parola di controllo alternativa a un'altra già esistente: \nome_nuovo può essere usato al posto di \nome.(4) Si osservi l'esempio:
|
Si ottiene in pratica il testo
|
dove 569,055 11 punti corrispondono esattamente a 20 cm, ovvero l'ultimo valore assegnato alla lunghezza \altezza, a cui punta anche \grandezza.
Tuttavia, se si fa un esperimento simile con una parola di controllo corrispondente a una macroistruzione definita con l'istruzione \def, il riferimento che si genera con l'istruzione \let è quello che punta alla macroistruzione di quel momento, mentre una ridefinizione della parola di controllo di partenza non si riflette nel riferimento:
|
Quello che si ottiene dalla composizione di questo esempio è il testo seguente:
|
Una caratteristica molto importante di TeX è la distinzione tra due modalità di funzionamento. In pratica, si distingue un contesto «normale» da un contesto matematico. L'ambiente matematico si introduce e si conclude con il simbolo $ e in tale situazione diventano disponibili delle istruzioni che non si possono utilizzare al di fuori di questo ambito, mentre alcune istruzioni dell'ambiente normale non lo sono più.
Per esempio, alcuni caratteri esistono solo nell'ambiente matematico; è già stato visto in che modo vanno indicate le parentesi graffe quando si scrive in un ambito normale, attraverso le istruzioni $\{$ e $\}$. In pratica, il dollaro iniziale e finale di queste istruzioni serve ad aprire e a chiudere l'ambiente matematico.
Nel suo lavoro di composizione, TeX distingue due situazioni, definite come modalità orizzontale e modalità verticale. Per comprendere la differenza tra queste due situazioni, occorre pensare alla struttura di ciò che si inserisce in una pagina.
Ogni oggetto che viene inserito in una pagina è una scatola, con le sue dimensioni. Queste scatole si inseriscono a loro volta all'interno di altre; per esempio, una lettera è una scatola che si inserisce in una riga, ovvero un'altra scatola, che a sua volta si inserisce in un paragrafo, ovvero ancora un'altra scatola, ecc.
In base al contesto, orizzontale o verticale, TeX si occupa di inserire spazi orizzontali o verticali: tra le lettere di una parola, tra le parole, tra le righe, tra i paragrafi, ecc.
Quello che conta comprendere di tutto questo è che alcune istruzioni possono essere inserite solo in modalità orizzontale, altre solo in modalità verticale. Volendo sperimentare se un certo contesto si trovi in modalità orizzontale o verticale, si può realizzare la macro seguente e collocarla nel testo dove si ritiene opportuno; nella composizione finale si ottiene alternativamente la frase «modalità orizzontale», oppure «modalità verticale»:
|
Nella sezione 49.8 viene spiegato l'uso dell'istruzione \ifvmode.
Il linguaggio di TeX possiede una serie di strutture di controllo condizionali, in cui parte della condizione è implicita nel nome dell'istruzione con cui la si introduce. Questo insieme di strutture ha una sintassi comune riconducibile alla semplificazione seguente:
\ifnome_condizione [argomento] testo_e_altre_istruzioni_se_vero \else testo_e_altre_istruzioni_se_falso \fi |
Spesso, per completare la struttura anche quando una delle due ipotesi non deve generare alcun risultato, si utilizza l'istruzione \relax, la quale rappresenta proprio l'operazione nulla.
Nelle sezioni seguenti vengono descritte solo le strutture condizionali più comuni.
È possibile verificare se un numero intero è dispari o pari con la struttura seguente:
\ifodd n testo_e_altre_istruzioni_se_dispari \else testo_e_altre_istruzioni_se_pari \fi |
Di solito, al posto del numero n si inserisce l'istruzione \pageno che restituisce il numero della pagina corrente, permettendo così di verificare se la pagina è dispari o pari:
\ifodd \pageno testo_e_altre_istruzioni_se_pagina_dispari \else testo_e_altre_istruzioni_se_pagina_pari \fi |
È possibile verificare se ci si trova in modalità normale o in modalità matematica con la struttura seguente:
\ifmmode testo_e_altre_istruzioni_se_modalità_matematica \else testo_e_altre_istruzioni_se_modalità_normale \fi |
È possibile mettere a confronto due numeri con la struttura seguente:
\ifnum m=|>|<n testo_e_altre_istruzioni_se_confronto_valido \else testo_e_altre_istruzioni_se_confronto_non_valido \fi |
In pratica, il confronto può avvenire solo con gli operatori =, > e <, per indicare rispettivamente se i due valori sono uguali, se il primo è maggiore del secondo oppure se il primo è minore del secondo.
È possibile verificare se la composizione si trova in modalità orizzontale o verticale con una delle due strutture seguenti:
\ifhmode testo_e_altre_istruzioni_se_modalità_orizzontale \else testo_e_altre_istruzioni_se_modalità_verticale \fi |
\ifvmode testo_e_altre_istruzioni_se_modalità_verticale \else testo_e_altre_istruzioni_se_modalità_orizzontale \fi |
Per TeX, un'istruzione elementare può essere il singolo carattere di una parola, oppure una sequenza di controllo. Volendo comprendere il senso di qualcosa, si può verificare come intenda TeX questa o quell'istruzione. Per questo, occorre avviare la composizione indicando un file vuoto; per esempio, in un sistema Unix si potrebbe fare così:
$
tex /dev/null
[Invio]
This is TeX, Version 3.14159 (Web2C 7.3.1) (/dev/null) * |
A questo punto, dall'invito, si può usare l'istruzione \show nel modo seguente:
\show istruzione_elementare |
Per esempio, ci si può domandare se il carattere @ abbia un significato particolare:
*
\show @
[Invio]
> the character @. <*> \show @ ? |
A questo punto, la composizione si ferma in attesa di altre indicazioni, mostrando un invito differente. Questo permette di comprendere anche che non conviene usare \show in un file normale del quale si vuole ottenere la composizione, perché in quel punto ci sarebbe una sospensione con richiesta di intervento. A ogni modo, per proseguire basta premere [Invio], quindi si può chiedere di conoscere qualcosa di diverso:
?
[Invio]
*
\show \TeX
[Invio]
In questo caso si vuole conoscere in cosa consiste la macro \TeX ed ecco il risultato che si ottiene:
|
Pertanto, questo significa che \TeX è definita come:
|
Per completare l'esempio, conviene vedere come appare una macro che prevede l'indicazione di un parametro, come nel caso di \`, che serve a mettere un accento grave su una lettera:
?
[Invio]
*
\show \`
[Invio]
> \`=macro: #1->{\accent 18 #1}. <*> \show \` ? |
In pratica, la definizione originale è la seguente:
|
Per terminare l'uso interattivo basta inserire alla fine l'istruzione \bye:
?
[Invio]
*
\bye
[Invio]
No pages of output. Transcript written on null.log. |
In condizioni normali, il testo scritto nel sorgente viene riprodotto nello stesso modo nella composizione finale, dopo essere stato reimpaginato opportunamente. Tuttavia, alcuni simboli hanno significati speciali, per cui si devono usare simboli di controllo al loro posto, inoltre le lettere accentate e altri caratteri che non fanno parte dell'ASCII standard non possono essere usati direttamente, per cui servono altri simboli o parole di controllo per generarli.
A fianco di questo problema, nasce poi l'esigenza di poter scrivere utilizzando stili, forme e corpi differenti.
Come è descritto nella tabella 49.34, alcuni caratteri hanno un significato speciale e non producono il simbolo corrispondente in fase di composizione. Per porre rimedio a questo problema e alla mancanza di altri caratteri, si usano generalmente delle sequenze di controllo. Tuttavia, dal momento che si distinguono due contesti di composizione differenti (quello normale e quello matematico), certi caratteri o certe sequenze di controllo esistono solo nella modalità matematica.
In generale, salvo altra indicazione, si fa sempre riferimento alla modalità di composizione normale, per cui un carattere o una sequenza di controllo che può apparire solo in modalità matematica, viene mostrata generalmente delimitandola tra due simboli $. Per esempio, quando si afferma che le parentesi graffe si ottengono con le istruzioni $\{$ e $\}$, è chiaro che in modalità matematica non serve più la delimitazione con i simboli $.
La tabella 49.88 riepiloga le sequenze di controllo per i caratteri speciali disponibili.(5)
|
TeX ha la capacità di collocare un accento sopra ogni simbolo, anche se ciò che si ottiene può non avere senso per qualunque lingua. Questa apposizione di accenti si ottiene con sequenze di controllo che precedono la lettera da accentare. Quando si tratta di simboli di controllo, la lettera successiva può essere unita alla sequenza, mentre quando si tratta di parole di controllo occorre lasciare uno spazio di sicurezza. Per esempio, si scrive \`o per ottenere la lettera «ò», mentre si scrive \c c per ottenere la lettera ç.(6) La tabella 49.89 riepiloga le sequenze di controllo necessarie a ottenere tutti gli accenti disponibili, usando la lettera «o» come esempio.
|
Il fatto che TeX aggiunga l'accento sopra un simbolo, significa che occorre poi provvedere a eliminare il puntino sopra le lettere «i» e «j» minuscole. Pertanto, per scrivere la lettera «ì», occorre usare l'istruzione \`\i. |
TeX ha una gestione estetica particolare per alcuni caratteri. Purtroppo mette a disposizione solo virgolette alte, che vanno usate opportunamente a coppia, nella forma `testo' e ``testo''. Si osservi l'esempio seguente e in che modo TeX lo traduce tipograficamente:
|
|
Evidentemente, è bene non usare le virgolette doppie normali ("), a meno che ci sia una ragione precisa per farlo.
TeX è in grado di gestire tre lunghezze differenti per il trattino o la lineetta orizzontale.(7) Questi si ottengono con il trattino normale, ovvero il segno meno, usato ripetutamente. In pratica, - genera un trattino corto; -- genera un trattino medio e --- genera un trattino lungo. Questo tipo di automatismo può creare dei problemi quando il trattino deve assumere proprio il significato di un segno meno e non è molto bella l'idea di usare due trattini per ottenere una lineetta media. In questo caso, si usa preferibilmente la sequenza $-$, dal momento che nella modalità matematica questo comportamento non ha luogo. Si osservi l'esempio:
|
|
Per motivi estetici, la tradizione tipografica richiede che alcuni accoppiamenti di lettere vengano legati assieme. Si tratta dell'unione della lettera «f» con «i», «l» e «f». TeX rispetta questa tradizione, ma solo nella modalità normale, perché in modalità matematica le esigenze sono differenti. Si osservi l'esempio:
|
|
Alcune tastiere non consentono di utilizzare facilmente dei simboli che per TeX sono invece importanti. In particolare, ci possono essere difficoltà a ottenere un apostrofo corrispondente all'accento grave. Quando l'intento è solo quello di scrivere degli apici, singoli o doppi, si possono usare le parole di controllo \lq e \rq per aprire e chiudere rispettivamente. Per esempio,
|
racchiude tra apici doppi la parola «ciao». Tuttavia, questo sistema non può sostituire i simboli di controllo usati per ottenere l'accento grave e acuto. Per ovviare all'inconveniente, si può leggere il codice delle macroistruzioni standard di TeX per scopre un metodo alternativo, oppure si può usare l'istruzione \show in modalità interattiva:
|
In pratica, è sufficiente definire una parola di controllo alternativa alle sequenze che non si possono riprodurre facilmente. Ecco un esempio concreto per gli accenti grave a acuto:
|
In questo modo, al posto di \`e si può scrivere \graveaccent{e}, anche se ciò richiede una digitazione un po' lunga.
Per quanto riguarda le parentesi quadre, queste possono essere rappresentate con la coppia \lbrack e \rbrack per rappresentare rispettivamente la parentesi aperta e quella chiusa. Per le parentesi graffe le cose si complicano: per inserirle nel testo come simboli tipografici, si possono usare le istruzioni $\lbrace$ e $\rbrace$, che come si vede richiedono un contesto matematico, come già avveniva con $\{$ e $\}$, ma questo significa anche che non c'è un'alternativa alle parentesi graffe usate nelle istruzioni con finalità differenti, salvo la possibilità di usare \bgroup e \egroup quando si tratta di raggruppamenti.
|
In condizioni normali, TeX mette a disposizione un carattere tondo con grazie. È possibile cambiare il gruppo stilistico e la forma del carattere con comandi generici, che non fanno riferimento a un nome preciso, ma a un aspetto di massima. Questi comandi hanno effetto dal momento in cui vengono inseriti, fino a quando ne viene incontrato un altro, oppure fino alla fine del raggruppamento in cui si trovano. Si tratta di parole di controllo di due sole lettere, elencate brevemente nella tabella 49.100.
|
È importante osservare che l'uso di queste parole di controllo non va a sommarsi con le precedenti, cambiando il gruppo stilistico e la forma simultaneamente. In pratica, in condizioni normali, non si può ottenere un neretto-corsivo o un neretto-inclinato combinando i comandi relativi. Si osservi l'esempio che segue:
|
|
Prima di proseguire sull'argomento è il caso di osservare un problema che si presenta nel momento in cui si utilizza un carattere inclinato o corsivo: lo spostamento verso destra può creare degli inconvenienti, quando si incontra con un testo non inclinato. In caso di necessità si può aggiungere un piccolo spazio, inteso come correzione del corsivo, con il simbolo di controllo \/, che rappresenta simbolicamente il concetto. Si osservi l'esempio seguente:
|
|
Le parole di controllo \rm, \it, \sl, \bf e \tt sono delle piccole macroistruzioni standard di TeX. Infatti, le informazioni sui caratteri da stampa sono contenute in file particolari che possono essere utilizzati con l'istruzione seguente:
\font\nome=carattere |
In pratica, in questo modo si dichiara una parola di controllo a cui si attribuisce il carattere indicato a destra. Il nome del carattere corrisponde solitamente alla prima parte del nome del file che lo contiene (la radice che rimane togliendo l'estensione) e si può esprimere usando indifferentemente lettere maiuscole o minuscole. Nell'esempio seguente, si dichiara un carattere tondo senza grazie, corrispondente al nome cmss10:
|
|
Il carattere da stampa che si seleziona in questo modo ha già un corpo stabilito. In questo caso si tratta di un carattere da 10 punti. Per cambiare corpo, si può cambiare carattere, oppure si può ingrandire e ridurre espressamente, intervenendo nell'istruzione di dichiarazione:
\font\nome=carattere scaled n |
Il numero n che si indica alla fine esprime un rapporto in millesimi dell'adattamento che si vuole ottenere. Per esempio,
|
richiede espressamente di abbinare alla parola di controllo \sans il carattere cmss10 al 120 %, cioè ingrandito di un quinto in più.
|
|
Naturalmente, con lo stesso criterio si può anche ridurre un carattere, sempre tenendo presente che 1 000 rappresenta la dimensione di partenza. Tuttavia, in generale non si usa questa forma, sostituendo il numero con un'istruzione apposita, utile a livello mnemonico:
\font\nome=carattere scaled \magstep n |
In questo caso, il numero n può andare da zero a cinque, dove zero corrisponde al corpo attuale, mentre valori maggiori rappresentano piccoli incrementi percentuali. A ogni modo si può verificare facilmente cosa succede, con il codice TeX seguente:
|
|
A questo punto si pone il problema di comprendere l'utilità di usare un carattere da stampa adatto alla dimensione del corpo che interessa. In pratica, se il carattere corrispondente alla sigla cmr5 è fatto per un corpo da cinque punti, quando serve un corpo da 12 è bene usare il carattere cmr12, se disponibile, invece di ingrandire il primo 2,4 volte (240 %). Si osservi l'esempio seguente, in cui si mettono a confronto diversi caratteri di piccole dimensioni che vengono ingranditi tutti in modo da avere un corpo finale di 12 punti:
|
|
|
A fianco delle parole di controllo generiche per la selezione del carattere da stampa, esistono altre parole di controllo standard che contengono anche l'informazione sulla dimensione. Si tratta dell'elenco riportato nella tabella 49.115. Ciò permette di non utilizzare una definizione dettagliata del carattere quando quello che serve cambiare è solo la dimensione (entro i limiti normali già previsti).
|
La gestione della sottolineatura con TeX è separata da quella che riguarda la forma e la dimensione dei caratteri. Si tratta solo di una linea orizzontale che viene collocata al di sotto del testo, a una distanza che varia in funzione delle caratteristiche del testo, che si ottiene con la macro \underbar:
\underbar{testo_da_sottolineare} |
La linea con cui si ottiene questa sottolineatura crea implicitamente una scatola orizzontale (sezione 49.14) che non può essere suddivisa in più righe. Si osservi l'esempio seguente:
|
Dal momento che il testo sottolineato è molto lungo e si trova verso la fine di una riga, TeX non può separarlo e si crea un problema estetico molto spiacevole:
|
In condizioni normali, la pagina a cui si fa riferimento con TeX è il tipo Lettera, larga 8,5 pollici e alta 11 pollici. Nell'ambito di questo spazio, il testo occupa normalmente un rettangolo di 6,5 pollici per 8,9 pollici, con un margine uguale di un pollice (salvo il margine inferiore che è di 1,1 pollici).
Al di sopra e al di sotto di questo rettangolo è possibile collocare una riga, con lo scopo normale di indicare il nome della sezione o il numero della pagina. In condizioni normali, in basso appare proprio il numero della pagina, ma può essere fatto sparire con l'istruzione \nopagenumbers.
Le dimensioni della pagina possono essere modificate, ma non si fa riferimento a una pagina e ai suoi margini; si interviene piuttosto sulla posizione di partenza, sulla larghezza (ovvero la giustezza) e sull'altezza dello spazio a disposizione dei paragrafi.
La parte centrale della pagina è controllata da quattro variabili, rappresentate dalle parole di controllo \hoffset, \voffset, \hsize e \vsize, le quali controllano rispettivamente le coordinate iniziali, la giustezza e l'altezza dell'area di scrittura.
|
È importante osservare che le coordinate zero di \hoffset e \voffset rappresentano un punto in alto a sinistra del foglio, collocato a destra e in basso di un pollice rispetto all'angolo superiore sinistro del foglio stesso. In pratica, per indicare valori inferiori del margine superiore e di quello sinistro, si devono attribuire a queste parole di controllo dei valori negativi.
L'esempio seguente consente di verificare il valore predefinito che viene restituito da queste parole di controllo:
|
|
I valori vengono mostrati in punti, ma si verifica facilmente la corrispondenza con quanto mostrato nella tabella 49.118.
È importante sottolineare che le coordinate di partenza rappresentano l'angolo superiore sinistro dell'area in cui si inserisce il testo; pertanto, l'altezza espressa dalla parola di controllo \vsize, si sviluppa in basso, a partire da quel punto. |
Il testo che si scrive nel sorgente TeX parte dalle coordinate iniziali e, salvo l'uso di comandi appositi, viene impaginato automaticamente; quando lo spazio verticale viene esaurito, si passa automaticamente a un'altra pagina.
È importante sottolineare che le modifiche apportate alle coordinate iniziali e all'altezza del testo della pagina hanno effetto a partire dalla pagina corrente; inoltre, se i valori vengono cambiati più volte, contano le ultime modifiche che si possono ricondurre alla pagina corrente. Fa eccezione a questa regola la giustezza del testo, controllata dalla parola di controllo \hsize, che può essere modificata in qualunque momento, intervenendo a partire dal paragrafo in cui appare, senza coinvolgere il testo precedente nella stessa pagina. |
Eventualmente, se prima di scrivere alcunché, si colloca un'istruzione come quella seguente,
\magnification=n |
si ottiene un ingrandimento o una riduzione di tutte le dimensioni, compreso il corpo dei caratteri. In pratica, il numero n che si assegna a \magnification è un valore che esprime la riduzione o l'ingrandimento in rapporto a 1 000, come già avveniva con il ridimensionamento dei caratteri da stampa. In questo senso, al posto del numero si può usare anche la parola di controllo \magstep, come è già stato mostrato in precedenza:
\magnification=\magstep n |
In questo caso, n esprime un valore intero, da zero a cinque.
La definizione di un ingrandimento o di una riduzione ha effetto su tutti i comandi che definiscono una dimensione; per esempio, se si usa un ingrandimento di 2 000, pari al doppio, volendo indicare una dimensione di un centimetro, si ottengono in pratica due centimetri.
Quando si intende indicare una lunghezza esatta, che non possa essere ridimensionata, si usa la parola chiave true davanti all'unità di misura. Per esempio, 5cm è una lunghezza adattabile, mentre 5truecm, oppure 5 true cm, indica sempre cinque centimetri. |
In condizioni normali, TeX cerca di occupare tutto lo spazio orizzontale e tutto lo spazio verticale, giustificando orizzontalmente e verticalmente (ovvero allineando simultaneamente a sinistra e a destra, in alto e in basso). In particolare, l'allineamento verticale del testo viene controllato da due parole di controllo: \normalbottom e \raggedbottom. Nel primo caso si ha la situazione «normale», ovvero l'allungamento del testo in modo da completare lo spazio verticale di ogni pagina, mentre nel secondo caso questo allungamento non ha luogo.
TeX mette a disposizione un'istruzione per il salto pagina anticipato che si ottiene con la parola di controllo \eject. Quando l'impaginazione è quella normale, ovvero quella corrispondente alla parola di controllo \normalbottom, l'inserimento di un salto pagina costringe TeX a fare in modo che il testo esistente, per quanto breve possa essere, finisca esattamente alla fine di \vsize. Per evitare di produrre degli allungamenti sgradevoli del testo, pur senza disabilitare globalmente la funzionalità di allineamento verticale, si può usare un comando per l'inserimento di uno spazio verticale allungabile in modo indefinito, il quale si ottiene con la parola di controllo \vfill. Pertanto, quando si vuole inserire un salto pagina si usa generalmente un'istruzione composta da entrambe le parole di controllo, come nell'esempio seguente:
|
Inizialmente è stato indicato l'uso dell'istruzione \bye per concludere un sorgente TeX. In realtà, \bye è una macroistruzione realizzata per concludere bene un testo, in cui si utilizza anche \vfill per non allungare il contenuto della pagina stessa. L'istruzione primitiva per concludere il documento è invece \end.
Anche \eject è una macro, che utilizza in pratica \break, dopo un passaggio in modalità verticale, in modo da dare a \break il contesto corretto.
Eventualmente, esiste anche un'altra macro, oltre a \eject, il cui scopo è quello di garantire il salto pagina in ogni circostanza. Si tratta di \supereject.
Oltre alla parte centrale della pagina, è possibile accedere a una riga di intestazione e a una riga alla base della pagina, le quali appaiono rispettivamente sullo spazio del margine superiore e del margine inferiore. Queste righe vengono annotate in due variabili apposite, a cui si accede con le parole di controllo \headline e \footline:
\headline={intestazione} |
\footline={fondo_pagina} |
In condizioni normali, la variabile che contiene la riga di fondo pagina è già impostata con l'espressione \folio\pageno, con la quale si estrae dal contatore \pageno il valore corrispondente al numero di pagina. Inoltre, per eliminare il fondo pagina predefinito in questo modo, si utilizza normalmente la parola di controllo \nopagenumbers, come sinonimo di azzeramento, al posto di scrivere \footline={}.
Il testo che viene associato all'intestazione e al fondo pagina, risulta allineato a destra e a sinistra, simultaneamente. Tuttavia, attraverso l'uso della parola di controllo \hfil, si riescono a ottenere degli effetti utili di allineamento. La parola di controllo \hfil ha la proprietà di inserire uno spazio allungabile, ma può essere utilizzata più volte, suddividendo equamente lo spazio della riga. Per esempio, scrivendo
|
si ottiene la suddivisione che si può vedere qui sotto:
|
Quando si distingue tra pagine destre e sinistre, si può usare la struttura condizionale comandata dalla parola di controllo \ifodd per modificare l'aspetto delle intestazioni o dei fondo pagina. Nell'esempio seguente si vuole mettere il numero della pagina nell'intestazione, facendo in modo che appaia verso l'estremità esterna della pagina:
|
Nell'esempio vengono racchiuse le due alternative tra parentesi graffe, perché altrimenti \pageno creerebbe dei problemi con la prima ipotesi. Non sarebbe necessario il raggruppamento della seconda alternativa, ma qui lo si fa per motivi «estetici». |
L'espressione dell'intestazione o del fondo pagina, viene espansa ogni volta, nel momento in cui serve. Tuttavia, in questo modo, le impostazioni riferite al carattere da stampa usato nel testo normale potrebbero influenzare l'aspetto di queste righe. Per sicurezza, conviene completare la definizione di intestazione e fondo pagina con l'indicazione del carattere da stampa, completo dell'informazione sulla sua dimensione, come nell'esempio seguente, in cui si richiede espressamente un carattere inclinato di 10 punti:
|
La numerazione delle pagine avviene in modo automatico, attraverso la gestione del contatore \pageno. In condizioni normali, la prima pagina ha il numero uno e a ogni salto pagina si ha un incremento di questo valore.
L'impostazione predefinita della riga che appare a fondo pagina, è tale per cui se il contatore contiene un valore positivo, si mostra un numero arabo normale, mentre se il valore è negativo, si mostra la pagina in numero romano. Per la precisione, ciò si ottiene attraverso la parola di controllo \folio che, senza bisogno di trasformazioni, restituisce il numero della pagina secondo questa convenzione.
In particolare, se il contatore \pageno contiene un valore positivo, ogni salto pagina continua a incrementarlo, mentre se ha un valore negativo, si ottiene un decremento, proprio in base alla logica della riga di fondo pagina predefinita.
Nel momento in cui si intende gestire il numero della pagina che appare nel fondo pagina, o nella riga di intestazione, non ha più importanza questa convenzione sul segno positivo o negativo; quello che conta è reinizializzare il contatore quando serve.
Il vero problema che si pone è quello di rappresentare le pagine attraverso numeri romani con lettere maiuscole. L'esempio seguente mostra la macro \Roman realizzata per ottenere la trasformazione in numero romano maiuscolo del suo argomento:
|
La macro va usata ovviamente così:
\Roman{n} |
Le note a piè di pagina sono gestite automaticamente attraverso la macro standard \footnote, inserendole alla base della pagina, entro lo spazio stabilito da \vsize.
\footnote{simbolo}{testo_della_nota} |
In pratica, la nota viene inserita nel testo, nel punto in cui si vuole che appaia il simbolo definito come primo parametro, poi la composizione colloca la nota dove più appropriato, preceduta sempre dallo stesso simbolo di riferimento.
Il simbolo usato per fare riferimento alla nota può essere scelto liberamente, tenendo conto che TeX non fa nulla per adattarlo. Pertanto, se l'intenzione è quella di usare il classico numero ad apice, occorre provvedere esplicitamente a sollevarlo, come nell'esempio seguente:
|
Generalmente, si numerano le note a piè pagina, ma TeX non offre un meccanismo automatico di numerazione. Tuttavia è facile rimediare attraverso la definizione di un contatore apposito:
|
Successivamente, invece di usare direttamente \footnote, si può inserire la macro \annotazione, la quale provvede da sola a incrementare il contatore \nota, inserendo il numero corrispondente come apice. Eventualmente, quando si comincia con una sezione importante, che parte da una pagina nuova, può essere conveniente riazzerare il conteggio.
L'esempio mostrato però non è completo. Infatti, la macro \annotazione potrebbe essere inserita per qualche ragione in un gruppo isolato, per cui, l'incremento del contatore della pagina verrebbe perduto; inoltre, il tipo di carattere usato per le note viene ereditato dal punto in cui si trova l'inserimento. Per ovviare a questi inconvenienti, si può modificare la macro \annotazione nel modo seguente:
|
In questo modo, l'incremento del contatore diventa globale e si fissa il carattere da usare per le note in un tondo normale con un corpo da sette punti.
Nell'ambito del testo è possibile individuare delle zone che devono rimanere unite, nel senso che non possono apparire separate tra una pagina e la successiva, per cui si stabilisce una collocazione che non segue il flusso normale del testo. Questi ambienti sono introdotti da una parola di controllo particolare:
\midinsert testo_e_altre_istruzioni ... \endinsert |
\topinsert testo_e_altre_istruzioni ... \endinsert |
\pageinsert testo_e_altre_istruzioni ... \endinsert |
Nel primo caso, quanto contenuto tra \midinsert e \endinsert viene collocato nella posizione in cui appare, se c'è lo spazio verticale sufficiente nella pagina, altrimenti viene spostato all'inizio della pagina successiva, lasciando che il testo che seguirebbe venga anticipato al suo posto nella pagina che termina.
Nel secondo caso, quanto contenuto tra \topinsert e \endinsert viene collocato all'inizio della pagina in cui si trova, anticipando eventualmente del testo che lo precede.
Nel terzo caso, quanto contenuto tra \pageinsert e \endinsert viene collocato in una pagina indipendente, che non può contenere altro.
Questi ambienti, eventualmente con l'uso di spazi verticali, permettono comunemente di riservare degli spazi per le figure.
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.
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.
|
Si può provare a verificare i valori predefiniti con l'esempio seguente:
|
|
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, le quali 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:
|
|
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 macroistruzione \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:
|
|
TeX utilizza una regola tipografica del passato, ormai condannata generalmente, secondo cui è 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:
|
|
È 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 viene 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:
|
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 quando, 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, si può usare il simbolo di controllo \<SP> (barra obliqua inversa, spazio).
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:
|
La composizione che si ottiene potrebbe contenere degli errori estetici e degli errori nella separazione in sillabe delle parole. Questi problemi vengono trattati in seguito:
|
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, da utilizzare 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 devono essere le coppie delle indicazioni sulla lunghezza del rientro e sulla lunghezza della riga relativa. Si osservi l'esempio seguente:
|
|
È 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:
|
|
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.
|
|
Come si può vedere, le macroistruzioni \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:
|
|
Volendo approfondire un po' di più l'uso di queste macroistruzioni, 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.
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 è quello che viene preso in considerazione. Si osservi l'esempio seguente:
|
|
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:
|
|
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:
|
|
Quando la composizione che si genera non può rispettare gli spazi e le elasticità fissati, TeX calcola un indicatore, definibile come penalità estetica, per rappresentare 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 permette di definire il livello consentito per l'espansione delle righe. Il valore predefinito è 1 000 e 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.
|
|
L'esempio precedente consente di verificare i valori predefiniti abbinati alla tolleranza estetica del testo, nella sua distribuzione orizzontale e verticale. Le istruzioni che seguono, consentono di annullare tutte le segnalazioni di carenze estetiche, consentendo però di generare un risultato pessimo:
|
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:
|
È utile sapere interpretare i messaggi di avvertimento che vengono generati da TeX durante la composizione di testo con carenze estetiche. La tabella 49.161 riepiloga le varie situazioni.
|
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:
|
È 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. |
Nella sezione 49.1 è 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:
|
È 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(8) 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:
|
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 (viene 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:
|
|
Queste parole di controllo sono fatte per essere sostituite agli argomenti delle istruzioni che provocano un avanzamento verticale. Per esempio,
|
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, corrispondenti 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:
|
|
La stessa cosa si potrebbe ottenere sostituendo le parole di controllo \vfil con \vfill:
|
Tuttavia, \vfill è più elastico rispetto a \vfil. Si osservi cosa accade se si inserisce un solo \vfill tra altri \vfil:
|
|
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 |
Il testo di una riga viene generato posando le lettere su una linea invisibile che corrisponde alla base della stessa. Nella sezione 47.2 è affrontato in generale l'argomento relativo alle dimensioni di un carattere. Per quanto riguarda TeX le cose si semplificano come si vede nella figura 49.173.
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:
|
|
È 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 49.14.
\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:
|
|
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:
|
|
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:
|
|
Quando si vuole controllare una riga completamente autonoma, si possono usare le macroistruzioni \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:
|
|
Si potrebbe essere portati a pensare che la macroistruzione \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:
|
|
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 macroistruzioni \[left|center|right]line isola il testo in un raggruppamento, come se fosse racchiuso tra parentesi graffe. |
È 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:
|
|
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:
\enspace |
rappresenta uno spazio orizzontale rigido di mezzo quadratone;
\enskip |
rappresenta uno spazio orizzontale leggermente elastico di mezzo quadratone;
\quad |
rappresenta uno spazio orizzontale leggermente elastico di un quadratone;
\qquad |
rappresenta uno spazio orizzontale leggermente elastico di due quadratoni;
\thinspace |
in modalità orizzontale, introduce uno spazio rigido molto sottile, pari a un sesto di quadratone;
\negthinspace |
in modalità orizzontale, introduce uno spazio negativo rigido molto sottile, pari a un sesto di quadratone.
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:
|
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 macroistruzione \phantom, la quale 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:
|
|
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, perché altrimenti verrebbe perduto nell'inizio del paragrafo.
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 ottiene uno spazio verticale. Per questo, quando si vuole scrivere una macroistruzione con cui iniziare sicuramente la modalità orizzontale e inserire quindi uno spazio rigido, si usa spesso \leavevmode per questo scopo.
Lo spazio rigido viene usato a volte 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 macroistruzione \TeX, dichiarata nel modo seguente:
|
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.
Per realizzare delle linee guida orizzontali, allo scopo di accompagnare la lettura verso qualcosa, si possono usare delle 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:
|
|
Volendo creare una macroistruzione per una linea guida particolare, si può procedere come nell'esempio seguente, in cui si riprende uno dei casi già presentati sopra:
|
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:
|
|
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:
|
|
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.
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 delle 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:
|
|
L'esempio dell'utilizzo più importante delle scatole orizzontali è dato dalla macro \line che è definita semplicemente così:
|
In pratica, quando si scrive \line{testo}, non si sta indicando un argomento alla macroistruzione, 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 macroistruzione \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; valore che può essere cambiato opportunamente al loro interno. |
|
|
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.
Benché la parola di controllo \vcenter debba essere inserita in un ambiente matematico, il gruppo che controlla si trova in un ambiente normale. |
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 sinistra o verso destra, della lunghezza indicata. Si osservi l'esempio seguente:
|
In pratica, dopo un paragrafo normale, viene richiesto un rientro di 3 cm per una scatola verticale contenente del testo, nella 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.
|
Eventualmente, un piccolo spazio verticale può evitare che il testo che precede la scatola verticale si trovi a toccare il contenuto della stessa.
Le scatole definite con \hbox, \vbox e altre macroistruzioni simili, possono essere inserite una dentro l'altra per formare degli effetti speciali, soprattutto se si abbina questo fatto all'uso delle linee orizzontali e verticali. Di solito ci si affida a macroistruzioni già pronte, oppure a esempi documentati; comunque è utile cercare di comprendere cosa sta sotto. Viene proposto un esempio, attraverso il quale si crea una macroistruzione che racchiude del testo dentro una scatola orizzontale bordata:
|
Questo esempio così articolato è tratto da TeX made easy di Daniel M. Zirin. Per riuscire a comprenderlo, occorre partire dal centro.
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).
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.
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.
Ancora una volta, tutto è contenuto dentro un'altra scatola, questa volta orizzontale, che prima e dopo aggiunge due linee verticali.
Per sicurezza, la macroistruzione inizia chiamando \leavevmode per garantire il passaggio alla modalità orizzontale.
Ecco come si comporta la macroistruzione:
|
|
Si osservi che nella definizione della macroistruzione \scatola sono stati inseriti molti commenti per consentire la suddivisione del codice su più righe, senza interferire con la composizione finale.
La gestione delle tabelle con TeX è piuttosto complessa. Nelle sezioni successive vengono mostrati soltanto i due tipi fondamentali di tabella di TeX; Si tenga presente che esistono altri modi di crearne, per esempio inserendo scatole dentro altre scatole, ma anche l'ambiente matematico dispone di un tipo di tabella che facilita la realizzazione di matrici.
Le macchine da scrivere tradizionali disponevano di un sistema di stop di tabulazione, programmato di volta in volta, con il quale si potevano allineare i dati in colonne, formando così delle tabelle. Il sistema più semplice per creare tabelle con TeX è proprio quello che si rifà all'uso della macchina da scrivere, attraverso la definizione di stop di tabulazione che poi vengono richiamati quando desiderato. Si osservi l'esempio seguente:
|
L'istruzione \settabs 3 \columns definisce, da quel punto in poi, l'inserimento di due stop di tabulazione, dividendo la giustezza del testo in tre parti uguali. Dopo tale definizione, si può scrivere normalmente, come se nulla fosse cambiato, oppure si può fare riferimento esplicito alla tabulazione, iniziando e concludendo le righe con \+ e con \cr. Nello spazio tra queste due istruzioni, la e-commerciale (&) ha il significato di carattere di tabulazione, con il quale si raggiunge lo stop successivo. Si può vedere il risultato della composizione dell'esempio nella figura successiva.
|
Come si dovrebbe notare leggendo l'esempio, non è necessario usare tutte le colonne previste, così come è possibile saltare le colonne che non interessano. Quello che non si intuisce, invece, è la possibilità di fare riferimento a stop di tabulazione oltre alla quantità dichiarata inizialmente: in tal caso si raggiungono colonne successive che, ovviamente, vanno oltre la giustezza del testo.
L'istruzione del tipo \settabs n \columns ha effetto a partire dal punto in cui viene utilizzata. Se si vuole cambiare tabulazione, basta inserire una nuova istruzione di questo tipo. Inoltre, è possibile usare anche i raggruppamenti per cambiare temporaneamente la tabulazione di una tabella; tutto funziona in modo molto intuitivo.
|
In questa variante semplificata dell'esempio già presentato, le righe dall'arancio al blu hanno una tabulazione più stretta, perché si divide la giustezza in quattro porzioni.
|
Gli stop di tabulazione possono essere collocati in modo diverso, indicando una riga di esempio al posto della definizione pura e semplice della quantità di colonne che si vogliono ottenere. In pratica, si hanno a disposizione due istruzioni alternative:
\settabs n \columns |
\settabs \+ colonna_1 [& colonna_n]... \cr |
Viene riproposto l'esempio già visto, in forma ancora più breve, in cui viene inserito lo stesso modello usato per definire gli stop di tabulazione alla fine della tabella, per poter vedere effettivamente in che modo vengono misurati gli spazi:
|
|
Naturalmente, il modello delle colonne può essere anche più simile al testo usato realmente nella tabella. In questo caso, con la lettera «M» maiuscola, si fa riferimento a un quadratone in modo semplice e chiaro.
Il testo che si inserisce all'interno di uno spazio che rappresenta una cella, esclusa l'ultima di ogni riga, è racchiuso implicitamente in un gruppo che si comporta come la macro \leftline. Questo fatto consente quindi di gestire gli allineamenti nell'ambito delle celle; inoltre, garantisce che il testo di ognuna di queste celle sia isolato in un gruppo autonomo.
|
L'esempio mostra una tabella, in cui il sorgente è organizzato in modo da facilitarne la lettura. In particolare, il modello per gli stop di tabulazione è stato messo nella riga successiva a quella in cui appare \settabs; inoltre, c'è una cella finale in più che non viene usata. Infatti, dalle celle in cui il testo si comporta come se fosse usata la macro \leftline è esclusa l'ultima che precede l'istruzione \cr.
|
Bisogna ricordare che la macro \leftline include uno spazio leggermente elastico alla fine, corrispondente a \hfil. In tal modo, per centrare il testo in una cella, basta farlo precedere da un altro \hfil, se invece si vuole ottenere l'allineamento a destra, si deve usare inizialmente uno spazio più elastico come \hfill.
Nell'esempio mostrato si riesce ad arrivare a una tabella abbastanza «dignitosa», con tanto di intestazione, delimitata da linee orizzontali. Naturalmente, si potrebbero usare linee dello stesso tipo, ma in questo caso si vuole mostrare bene lo spazio di competenza di ogni colonna. Al posto di \hrulefill o di \dotfill si può anche usare \hrule, al di fuori delle celle, nel modo seguente:
|
Tuttavia, in tal caso si vede che le linee orizzontali che si ottengono toccano il testo delle righe della tabella:
|
Per risolvere il problema, può essere conveniente l'uso della macro \strut, con cui si dà alle righe l'altezza e la profondità corrispondente a quella di una parentesi tonda, senza che questa appaia effettivamente nel testo:
|
In tal modo si ottiene anche il risultato di avere tutte le righe della tabella della stessa altezza, quella massima, anche se il testo che contengono non lo richiederebbe.
|
Se si inserisce una tabella del genere in una scatola verticale, questa scatola può essere spostata facilmente in modo orizzontale, con l'istruzione \moveright, come nell'esempio seguente, in cui la si sposta di 3 cm:
|
Tuttavia, come si vede sotto, in questo modo il testo che precede la tabella si trova a toccare la tabella stessa:
|
Per rimediare basta aggiungere un piccolo spazio verticale, per esempio con l'istruzione \vskip, prima della tabella.
Volendo arrivare a centrare la tabella, si può inserire la scatola verticale nella macro \line, come nell'esempio seguente:
|
Si osservi l'uso dell'istruzione \vskip per ottenere una piccola distanza tra il testo e la tabella, come già descritto in precedenza:
|
Attraverso l'istruzione \halign è possibile definire delle tabelle un po' più complesse rispetto al sistema di stop di tabulazione già presentato nella sezione precedente. L'istruzione in questione viene utilizzata sinteticamente nel modo seguente:
\halign{modello_delle_righe riga ... } |
In particolare, il modello delle righe utilizza il simbolo # per fare riferimento al contenuto delle celle, mentre le righe hanno la forma consueta, con la differenza che manca il simbolo di controllo \+ iniziale. L'esempio seguente è molto simile all'ultima tabella realizzata con l'uso degli stop di tabulazione, con tanto di centratura orizzontale:
|
La prima cosa che si deve osservare è il fatto che \strut viene usato solo nella dichiarazione del modello delle righe; ciò è sufficiente perché sia inserito automaticamente all'inizio di tutte le righe della tabella. Si può osservare anche che non è necessario definire la larghezza delle colonne nel modello, perché questa viene determinata automaticamente in base al contenuto delle righe stesse. Infine, l'ultima colonna della tabella non si comporta diversamente dalle altre, pertanto non è più necessario il trucco della colonna finale vuota.
|
A differenza delle tabelle realizzate per mezzo della tabulazione, quando si vuole inserire una linea orizzontale con l'istruzione \hrule, occorre inserirla nell'istruzione \noalign. In pratica, con \noalign si può inserire qualcosa che riguarda tutta la riga, senza suddivisione in colonne; tuttavia, è meglio evitare di inserire testo normale, perché in tal caso verrebbe perso l'effetto dell'allineamento orizzontale introdotto con \line e \vbox.
È importante comprendere che ciò che si inserisce nel modello iniziale delle righe, viene inserito nello stesso modo all'interno delle righe. Si osservi la variante seguente:
|
Per prima cosa, è stato aggiunto un piccolo spazio orizzontale, di un quadratone, nella prima cella, attraverso la macro \quad; in tal modo si evita che la prima colonna inizi esattamente sul bordo sinistro, per motivi estetici. Inoltre, si fa in modo che tutta la prima colonna appaia in neretto, senza dover intervenire in ogni cella. Nel modello dell'ultima colonna, si racchiude il riferimento alle celle tra parentesi tonde, solo a scopo dimostrativo (infatti il risultato che si ottiene non è perfetto esteticamente). Dal momento che si vuole la riga di intestazione tutta in neretto, si interviene singolarmente nella seconda e nella terza cella di questa riga; in particolare, la parola «Cifra» della seconda colonna, viene centrata, aggiungendo un \hfil finale, che contrasta e bilancia quanto dichiarato nel modello corrispondente.
|
Dal momento che tutto ciò che si inserisce nella riga del modello viene messo anche nelle righe della tabella, per ottenere delle linee verticali si possono usare delle istruzioni \vrule:
|
In questo caso il risultato estetico non è ancora perfetto, ma ormai dovrebbe essere chiaro come si può intervenire nel modello delle righe.
|
Esiste la possibilità di unire assieme più celle nella stessa riga, attraverso l'uso della macroistruzione \multispan{n}, dove n rappresenta la quantità di colonne da unire. Tuttavia, in tal caso non viene preso in considerazione il formato stabilito nella riga di intestazione. Si osservi l'esempio seguente:
|
Come si vede sotto, il contenuto della cella allargata appare centrato nello spazio che si ritrova ad avere a disposizione, ma ciò è ottenuto con uno spazio leggermente elastico, contrastabile facilmente.
|
Per sistemare l'allineamento, ripristinare il neretto e la linea verticale alla sinistra, basta intervenire nella cella; in particolare è sufficiente uno spazio con una piccola elasticità per contrastare l'allineamento normale al centro:
|
|
Per evitare che in una cella venga inserito tutto ciò che appare nel modello delle righe, basta usare l'istruzione \omit. Si osservi l'esempio, in cui si risolve il problema delle parentesi tonde attorno al titolo dell'ultima colonna:
|
|
Prima di concludere l'argomento, occorre fare presente la possibilità che TeX allunghi il testo verticalmente in fase di composizione. Se ciò accade nell'ambito di una tabella nella quale si utilizza \vrule per ottenere delle linee verticali, si rischia di vedere queste linee spezzettate. Per evitare che nell'ambito della tabella TeX possa fare degli allungamenti, si può usare la macro \offinterlineskip dentro la scatola verticale:
|
Come già accennato, TeX distingue tra due modalità di funzionamento: un contesto normale e un contesto matematico. L'ambiente matematico si introduce e si conclude con il simbolo $ e in tale situazione diventano disponibili delle istruzioni che non si possono utilizzare al di fuori di questo ambito, mentre alcune istruzioni dell'ambiente normale non lo sono più.
Anche se nelle sezioni successive si fa riferimento soltanto all'ambiente matematico, nelle tabelle riassuntive mostrate, le sequenze di controllo che possono essere usate solo nell'ambiente matematico appaiono delimitate sempre tra una coppia di $, in modo da evidenziare il contesto del loro utilizzo ed evitare confusione.
Esistono due modi di mostrare un'informazione matematica: all'interno di testo normale, oppure in un blocco a parte. Quando si inserisce l'informazione dentro del testo normale, si delimita l'ambiente matematico tra due simboli $, per esempio nel modo seguente:
|
In tal caso, come si vede dal risultato della composizione, il testo ne risente, in particolare per lo spazio tra le righe che può essere aumentato.
|
In alternativa, le formule possono essere messe in un blocco separato, come nell'esempio seguente:
|
L'effetto è quello di ottenerle al centro della giustezza, con una spaziatura verticale adeguata rispetto al testo che precede e che segue.
|
Negli esempi è stato mostrato l'uso dell'ambiente matematico anche per delimitare i nomi delle variabili. Ciò permette di mantenere coerenza con la forma mostrata nelle formule.
Ciò che viene delimitato in una coppia di $ o di $$, non può essere suddiviso in «righe» differenti (tranne il caso di forme tabellari particolari, come le matrici o i sistemi di equazioni), al contrario di quanto avviene per la composizione del testo normale; inoltre, il sorgente non può contenere righe vuote o bianche. In pratica si tratta di un blocco orizzontale compatto e indivisibile. |
Si osservi subito l'esempio seguente, in cui si scrive la parola «affittare» all'interno di un ambiente matematico, prima in modo normale, quindi spaziando le lettere:
|
Come si può osservare dalla composizione che si ottiene, il risultato è esattamente lo stesso. In pratica non viene più preso in considerazione il legato tipografico e gli spazi sono ignorati completamente:
|
Per inserire degli spazi in un ambiente matematico, l'unico modo è quello di usare sequenze di controllo specifiche, che possano essere accettate anche in questo ambiente. La tabella 49.245 riepiloga le sequenze di controllo che possono essere usate in un ambiente matematico per ottenere degli spazi orizzontali. Alcune di queste sequenze sono valide solo in un ambito matematico, pertanto appaiono circoscritte da una coppia di $, in modo da sottolineare questa loro caratteristica.
|
Per inserire del testo descrittivo all'interno di un ambiente matematico, lo si può delimitare in una scatola orizzontale, con l'istruzione \hbox. Si osservi l'esempio:
|
In questo caso, si vuole isolare e spaziare la parola «durante» rispetto al resto, mostrandola con caratteri normali.
|
Nell'ambiente matematico, il testo normale viene composto utilizzando un insieme di caratteri differente rispetto a quello normale, in cui anche la forma è particolare, essendo un tipo speciale di corsivo (si ottiene eventualmente con la macro \mit). Inoltre, sono disponibili dei simboli aggiuntivi, in particolare le lettere greche e altri simboli utili in matematica.
Tra le lettere greche, alcune si ottengono come caratteri dell'insieme normale. Nelle tabelle, quando si vuole sottolineare il fatto che si tratta di lettere scritte utilizzando il carattere tondo normale, si mostra un'istruzione del tipo \hbox{\rm x}, che rappresenta il codice necessario all'inserimento in un ambiente matematico.
|
|
|
|
|
|
|
|
Eventualmente, è possibile modificare in modo sistematico il tipo di carattere da usare negli ambienti matematici. Si usano per questo due istruzioni alternative:
\everymath={macro_alternativa} |
\everydisplay={macro_alternativa} |
La prima si riferisce agli ambienti matematici inclusi nel testo normale, mentre la seconda riguarda gli ambienti che creano un blocco separato dal testo.
La macro alternativa a cui si fa riferimento può essere quella che definisce il tipo di carattere da usare. Si osservi l'esempio seguente:
|
Si può vedere nel risultato seguente che nel testo normale si ottiene, mentre nel blocco separato si ha un tondo normale:
|
Il testo matematico, ovvero i simboli che si usano per le espressioni matematiche, viene dimensionato in modo automatico, salvo l'uso diretto di alcune istruzioni apposite. Le istruzioni sono nell'ordine: \displaystyle, \textstyle, \scriptstyle e \scriptscriptstyle. La prima rappresenta la dimensione più grande, mentre l'ultima genera il carattere più piccolo.
Anche se in condizioni normali non è necessario il controllo diretto della dimensione del testo matematico, è bene conoscere questa possibilità che può rivelarsi utile in presenza di formule particolarmente complesse in cui alcune parti rischiano di diventare troppo piccole per la lettura.
A titolo di esempio viene mostrata una frazione piuttosto articolata, in due modi differenti, anche se le frazioni vengono descritte in un'altra sezione:
|
|
Esiste la possibilità di usare \strut, anche nell'ambito matematico, ma questo non previene la riduzione della dimensione dei caratteri. Viene mostrato lo stesso esempio in cui si controlla lo spazio verticale disponibile con l'aiuto di \strut:
|
|
Dal momento che nell'ambiente matematico non si tiene conto degli spazi inseriti nel testo, lo spazio attorno ai segni di punteggiatura è gestito automaticamente. Si può osservare l'esempio seguente:
|
Come si può intuire, se si vuole usare la virgola come separatore della parte intera da quella rimanente, occorre delimitarla in un gruppo a sé stante, per evitare che gli sia aggiunto uno spazio superfluo alla sua destra.
|
Un discorso particolare va fatto per i due punti, che possono servire per indicare una divisione, oppure un assegnamento. Si osservi l'esempio seguente in cui si riprende un pezzo di quanto già mostrato:
|
In pratica, per ottenere i due punti «normali», a cui segue un po' di spazio, si deve usare l'istruzione \colon.
|
Le frazioni si indicano solitamente in uno dei due modi seguenti:
numeratore/denominatore |
numeratore \over denominatore |
Il secondo modo è quello più gradevole esteticamente. È importante osservare che l'istruzione \over interviene su tutto il gruppo in cui è contenuta. Si osservino gli esempi seguenti:
|
|
|
|
|
|
Oltre alle frazioni vere e proprie, ci sono altre situazioni simili:
x \atop y |
x \choose y |
x \above spessore y |
Nel primo caso, si ottiene la sovrapposizione di x sopra y, senza la linea orizzontale tipica di una frazione; nel secondo si ottiene la stessa cosa, ma il tutto viene anche racchiuso tra parentesi; nell'ultimo caso, si ottiene una cosa simile alla frazione, dove si specifica lo spessore della linea di separazione. Seguono alcuni esempi:
|
|
|
|
|
|
Si osservi che anche in questo caso, le istruzioni mostrate spezzano il gruppo in cui sono inserite, pertanto è necessario racchiudere l'espressione tra parentesi graffe.
La dimensione del testo che si trova a essere spezzata con queste istruzioni viene ridotta automaticamente. Se si vuole evitare questo comportamento, si possono usare le istruzioni già descritte per il controllo esplicito della dimensione.
I pedici e gli apici si ottengono con i simboli _ e ^ rispettivamente, che intervengono sul carattere oppure sul raggruppamento successivo:
x_pedice |
x^apice |
Si osservino gli esempi successivi, in particolare per quanto riguarda la necessità o meno di raggruppare ciò che va messo ad apice o a pedice:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Le radici si possono ottenere attraverso due modi differenti, a seconda che si tratti delle radici quadrate comuni, oppure di radici di altro genere:
\sqrt{contenuto} |
\root n \of {contenuto} |
Come si intuisce, nel primo caso si ottiene una radice quadrata pura e semplice, mentre nel secondo si dichiara il tipo di radice e successivamente il contenuto. Seguono alcuni esempi:
|
|
|
|
|
|
|
|
Per ottenere delle linee orizzontali sopra o sotto un gruppo di simboli, si usano rispettivamente \overline e \underline:
\overline{contenuto_posto_sotto_la_linea} |
\underline{contenuto_posto_sopra_la_linea} |
Seguono alcuni esempi:
|
|
|
|
Quando si vuole fare riferimento al nome standard di una certa funzione matematica, è necessario fare in modo che questo nome appaia con un carattere diverso dal corsivo matematico, per evitare che si possa confondere con il prodotto di una serie di variabili. Per questa ragione e anche per facilitare la lettura del sorgente TeX, esistono delle macro specifiche, con il solo scopo di scrivere il nome della funzione corrispondente usando un carattere tondo normale. La tabella 49.318 elenca brevemente queste macro. Se per qualche ragione si preferiscono dei nomi differenti, si può sempre usare la tecnica del testo nella scatola orizzontale, attraverso l'istruzione \hbox{testo}. Viene mostrato solo qualche esempio di utilizzo:
|
|
|
|
|
|
Benché si possa scrivere il nome di una funzione usando la macro \hbox{testo}, TeX offre l'istruzione primitiva \mathop, con cui è possibile definire delle macro aggiuntive da affiancare a quelle standard per la scrittura dei nomi di funzione. Si usa normalmente così:
\def\nome{\mathop{\rm nome}} |
Successivamente, è sufficiente fare riferimento alla macro \nome per ottenere il nome della funzione relativa in un contesto matematico. Segue l'esempio della dichiarazione e dell'uso della funzione seno, con il nome «sen», assieme al risultato che si ottiene:
|
|
|
In matematica si usano tre tipi di parentesi per delimitare delle sottoespressioni; si tratta notoriamente di parentesi tonde, quadre e graffe. Le stesse parentesi sono disponibili nella modalità matematica di TeX, con la particolarità delle parentesi graffe che devono essere usate attraverso due macro speciali: \{ e \}. In pratica, questa differenza dipende dall'uso speciale che TeX stesso fa di queste parentesi nella sua sintassi.
In condizioni normali, la grandezza delle parentesi usate non è diversa da quella del carattere standard dell'ambiente matematico. Per ottenere parentesi più grandi si possono usare alcune macroistruzioni come \bigl e \bigr, le quali devono essere seguite immediatamente da una parentesi o da un altro simbolo di delimitazione, allo scopo di ottenerlo più grande del normale. Si osservi l'esempio seguente:
|
|
In modo più semplice si possono usare le istruzioni \left e \right, le quali adattano automaticamente le dimensioni delle parentesi o di altri delimitatori, in funzione di ciò che devono contenere. Si osservi l'esempio seguente:
|
|
Si osservi che l'altezza delle parentesi non aumenta in presenza di annidamenti successivi, ma soltanto quando la dimensione del contenuto lo richiede.
|
La tabella 49.323 mostra un elenco sintetico dei delimitatori e dell'uso delle istruzioni che consentono di ingrandirli. Naturalmente, le istruzioni \left e \right, le macro \bigl, \bigr, fino a \Biggl e \Biggr, possono essere usate con tutti i tipi di delimitatori matematici disponibili, non solo le parentesi comuni.
Le matrici si rappresentano in modo molto semplice attraverso le macroistruzioni \pmatrix e \matrix. La differenza tra le due sta solo nel fatto che nel primo caso si ottiene la delimitazione del contenuto con parentesi tonde di altezza adeguata, mentre nel secondo caso queste devono essere inserite espressamente:
\[p]matrix{ elemento_1_1 [& elemento_1_2]... elemento_1_m \cr [elemento_2_1 [& elemento_2_2]... elemento_2_m \cr] ... elemento_n_1 [& elemento_n_2]... elemento_n_m \cr } |
In pratica, il raggruppamento che segue la macro contiene una serie di elementi organizzati in tabella, separati orizzontalmente dal simbolo & e conclusi alla fine di ogni riga da \cr. L'esempio seguente mette a confronto due matrici, realizzate con \pmatrix e \matrix:
|
|
Gli elementi della matrice sono spaziati in pratica da uno spazio leggermente elastico che può essere forzato facilmente. Per esempio, volendo allineare le celle a sinistra, o a destra, basta usare nel lato opposto uno spazio un po' più elastico:
|
|
Naturalmente, queste macroistruzioni si possono utilizzare anche per qualcosa di diverso dalle matrici, che però è bene appaia incasellato in forma tabellare:
|
|
Per rappresentare un insieme di «casi», come nella definizione di una funzione, si può usare la macro \cases:
\cases{ espressione & condizione \cr espressione & condizione \cr ... espressione & condizione \cr } |
Come si vede dal modello sintattico, si distinguono espressioni e condizioni relative: le espressioni sono inserite in un ambiente matematico, mentre le condizioni si trovano in un ambiente di testo normale.
|
|
In modo analogo, si usa la macro \eqalign per allineare delle equazioni; in tal caso però, tutti i dati si trovano nell'ambiente matematico:
\eqalign{ espressione & espressione \cr espressione & espressione \cr ... espressione & espressione \cr |
Dato il nome (equation align) si intende che l'allineamento debba avere luogo, preferibilmente, in corrispondenza del segno di uguaglianza (o disuguaglianza) usato per abbinare le espressioni. Si osservi l'esempio seguente:
|
Infine, un gruppo di espressioni può essere rappresentato su più righe attraverso la macro \displaylines, in modo molto simile a \matrix:
\displaylines{ espressione_1 \cr espressione_2 \cr espressione_3 \cr ... espressione_n \cr } |
Viene mostrato un esempio con il risultato che si ottiene:
|
|
È possibile definire facilmente un teorema o un corollario attraverso la macro \proclaim, secondo lo schema seguente:
\proclaim titolo. definizione |
In pratica, si distingue una parte iniziale del testo che segue la macro, fino al primo punto, che viene evidenziato in modo più nero rispetto al resto. Evidentemente, la macroistruzione \proclaim viene usata in un ambiente normale (non matematico) e può contenere ambienti matematici nell'ambito della definizione. Si osservi l'esempio seguente:
|
|
È importante tenere presente che la dichiarazione non può essere più lunga di una riga.
La gestione di equazioni poste nell'ambiente matematico esterno al testo normale, ovvero quello che viene posto in evidenza al centro della giustezza del testo, è particolare.
In modo simile alle matrici, è possibile allineare le equazioni, ma per questo si usa preferibilmente la macroistruzione \eqalign, che prevede l'uso di un solo simbolo & per ogni riga. Si osservi l'esempio:
|
|
Eventualmente, la macroistruzione \equalignno, consente di mostrare qualche informazione in più in prossimità del margine destro. Si ottiene ciò individuando una colonna aggiuntiva nella tabella immaginaria, come si può vedere dall'esempio:
|
|
Nello stesso modo, la macroistruzione \lequalignno mostra le annotazioni a sinistra:
|
|
Eventualmente, se c'è la necessità di annotare un'espressione che non ha bisogno di essere rappresentata in forma tabellare, si possono usare le istruzioni \eqno e \leqno:
|
|
Documentazione interna della distribuzione TeX: texmf/doc/*
Documentazione interna Info: info web2c e info latex
Marco Pratesi, Marco Latini, Michele Antonecchia LATEX-PDF-Howto, 2003, http://www.telug.it/marco/LaTeX-PDF-HOWTO/LaTeX-PDF-HOWTO.html
General documentation about (La)TeX, http://tex.loria.fr/english/general.html
Michael Doob, A gentle introduction to TeX, http://www.ctan.org/tex-archive/info/gentle/gentle.pdf
Daniel M. Zirin, TeX made easy, Using TeX with plain macro package, 1993, Zar Limited, http://tex.loria.fr/general/all.dvi
D. R. Wilkins, Getting started with plain TeX, 1993, http://tex.loria.fr/general/pllong.dvi
D. R. Wilkins, Summary of commonly-used features of plain TeX, 1993, http://tex.loria.fr/general/plshort.dvi
TeX cookbook, 1989, MathPro Press, http://tex.loria.fr/general/cookbook.dvi
Sorgenti della definizione del formato tex, contenuti nella directory texmf/tex/plain/base/
di una distribuzione teTeX
Sorgenti della definizione del formato latex, contenuti nel file texmf/tex/latex/base/latex.ltx
di una distribuzione teTeX
Claudio Beccari, LaTeX, Guida a un sistema di editoria elettronica, Hoepli, 1991, ISBN 88-203-1931-4
1) È consentito anche l'uso della virgola per separare la parte intera di un numero. Tuttavia, ci sono situazioni in cui ciò non va bene, per cui è meglio usare sempre solo il punto.
2) TeX ammette che tra il numero e l'unità di misura ci sia dello spazio. Qui si preferisce attaccare l'unità di misura al numero, per evitare confusione con il testo successivo.
3) Si distingue tra «parametro formale» e «argomento attuale», per indicare, nel primo caso, ciò che si usa nella dichiarazione di una macroistruzione a rappresentare i dati variabili da fornire, mentre nel secondo caso si fa riferimento ai dati che vengono passati effettivamente, in corrispondenza di un certo parametro della dichiarazione formale.
4) Si possono creare delle alternative anche a simboli di controllo, ma in generale ciò non è conveniente.
5) Leggendo la tabella, è il caso di osservare che in condizioni normali, la sequenza di controllo \$ genera il simbolo del dollaro, mentre se il testo è in corsivo, si ottiene il simbolo della sterlina inglese.
6) Si osservi che in questo caso non si può usare un raggruppamento vuoto al posto dello spazio, perché l'accento risulterebbe spostato rispetto al centro della lettera.
7) Nella lingua italiana sono sufficienti due tipi di trattini.
8) 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.
«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net