Per capire la differenza fra i registri definiti con\dimendefe\skipdefe allocati con\newdimene\newskipoccorre conoscere il concetto di ‘lunghezza elastica’ (il manuale di LATEX la chiama rubber length).
In alcuni contesti è bene specificare una lunghezza che possa, all’occorrenza espandersi o contrarsi: esempio tipico è la distanza tra il testo e il titolo di una sezione. L’ideale sarebbe che la distanza che separa la parte finale di un’unità di sezione e l’inizio della successiva, con in mezzo il titolo, sia un numero intero di righe di stampa; tuttavia in molti casi una certa elasticità aiuta a ottenere un’impaginazione migliore: se dopo un titolo di sezione si avesse una sola riga di testo, l’elasticità potrebbe permettere a TEX di farci stare un’altra riga e risolvere la faccenda in modo indolore.
Ci sono altre situazioni in cui è importante poter specificare una lunghezza elastica. Vogliamo scrivere la pagina con una dedica: ci serve poter dire che lo spazio bianco sia diviso un terzo sopra alla dedica e due terzi sotto. Ecco come si può fare in Plain TEX:
\eject
\begingroup\nopagenumbers \leftskip=0pt plus 1fill \parindent=0pt\let\\=\par \null\vskip 0pt plus 1fill \it A John Wayne\\
e John Ford
\vskip 0pt plus 2fill \eject\endgroup e in LATEX: \cleardoublepage \thispagestyle{empty} \vspace*{\stretch{1}} \begingroup\raggedleft\itshape A John Wayne\\ e John Ford\par \endgroup \vspace*{\stretch{2}} \cleardoublepage
Nella versione Plain manca il controllo che la pagina con la dedica sia dispari, in quella LATEX sarà bene ridefinire il comando\cleardoublepagein modo che la pagina successiva sia vuota (pacchettoemptypage), ma sono dettagli.
In entrambi i casi abbiamo specificato lunghezze elastiche, di lunghezza naturale nulla e espandibilità infinita. Si può pensare a queste lunghezze come a molle che il compositore infila tra le righe e che possono essere allungate o contratte fino a un certo punto, anche all’infinito, se necessario. L’analogia non è del tutto completa, lo si tenga in mente.
Per ‘spingere’ il testo verso il margine destro, nella versione Plain rendiamo in-finitamente prolungabile la spaziatura orizzontale che TEX mette sempre a sinistra delle righe e che, usualmente, è rigida e nulla. La versione LATEX con\raggedleftfa essenzialmente lo stesso.
Per le spaziature verticali si usano due lunghezze elastiche con diverso tasso di espandibilità: quella in basso si allunga del doppio di quella in alto. In questo modo, senza eseguire alcun calcolo, abbiamo raggiunto il nostro scopo.
Qualche dettaglio TEXnico: il primo\vskipè preceduto da\nullper evitare che cada a inizio pagina, perché altrimenti sparirebbe. Lo stesso effetto si ottiene nella versione LATEX con\vspace*.
I registri di tipo\dimenservono a memorizzare lunghezze rigide, quelli di tipo \skipper lunghezze elastiche. Non è naturalmente vietato caricare un registro\skip con una lunghezza rigida; infatti i registri definiti con il comando LATEX\newlength sono del tipo\skip.
Veniamo alla sintassi che va usata ogni volta che TEX si aspetta una 〈dimensione 〉: \newdimen\pippo \newdimen\pluto
\pippo=〈dimensione 〉
\advance\pippo by 〈dimensione 〉 \pippo=〈numero decimale 〉\pluto \multiply\pippo by 〈numero 〉
Come per i contatori TEX, il segno di=e la parola chiavebysono facoltativi. Quando si deve usare una lunghezza, i modi sono gli stessi:
\hskip〈numero decimale 〉〈dimensione 〉 \vskip〈numero decimale 〉〈dimensione 〉 \kern〈numero decimale 〉〈dimensione 〉
dove 〈dimensione 〉 è il nome di un registro di tipo\dimeno\skip(dimensione
implicita) oppure un simbolo di unità di misura.
Con LATEX, si può assegnare una lunghezza al registro dimensionale\pippocon \setlength{\pippo}{〈numero decimale 〉〈dimensione 〉}
con le stesse convenzioni di prima. Sia con questa sintassi che con la precedente, il numero decimale è obbligatorio solo nel caso di dimensioni esplicite.
Un 〈numero decimale 〉 è un 〈numero 〉 come definito in precedenza (in base 10, 8 o 16), oppure un numero intero in notazione decimale (con eventuale segno) seguito dal punto o dalla virgola e da un altro numero intero senza segno in notazione decimale che rappresenta la parte frazionaria. Dunque
123 ’102 "A2 -1.1414 3,14 sono esempi di 〈numero decimale 〉.
Una dimensione esplicita è un 〈numero decimale 〉 seguito da una unità di misura. La lista delle unità di misura ammissibili è
cm mm in pt pc dd cc bp sp em ex px
che stanno per ‘centimetro’, ‘millimetro’, ‘pollice’, ‘punto tipografico’, ‘pica’, ‘punto Didot’, ‘cicero’ o ‘linea’, ‘punto grande’, ‘punto scalato’, ‘spazio em’, ‘spazio ex’, ‘pixel’. Le relazioni di base sono riassunte nella tabella2.1e sono esatte. Il punto tipografico è un’unità di misura stabilita negli Stati Uniti nel XIX secolo e diffusasi con le macchine tipografiche che da là venivano esportate in Europa, dove non esistevano unità usate ovunque; era abbastanza comune impiegare il punto Didot, dal nome del tipografo francese che lo definì o il suo multiplo che in italiano si chiama linea. Il punto grande è un’invenzione recente, il numero di essi in un pollice è intero ed è conveniente quando si usa in connessione con la risoluzione di schermi e stampanti, che di solito sono dati in termini di ‘pixel per pollice’.
Tabella 2.1: Unità di misura
Simbolo Nome Relazione
cm centimetro 2,54 cm = 1in mm millimetro 10 mm = 1cm in pollice 72,27 pt = 1in pt punto tipografico pc pica 12 pt = 1pc dd punto Didot 1157 dd = 1238pt cc cicero (linea) 12 dd = 1cc bp punto grande 72 bp = 1in sp punto scalato 65536 sp = 1pt
TEX usa le conversioni della tabella come fattori esatti. In effetti l’unità di misura fondamentale è il punto scalato e sono esatte le conversioni con questo. Dal momento che il punto scalato è di molto inferiore alla lunghezza d’onda della luce visibile, differenze di qualche decina di punti scalati sono indistinguibili anche al microscopio. C’è qualche piccolo problema, perché
\hbox to 2in{\hskip 1in \hskip 1in}
produce un messaggio di “Underfull \hbox”. Il motivo è che un pollice è convertito in 4 736 286 sp, mentre due pollici sono convertiti in 9 472 573 sp poiché i valori sono troncati al livello della conversione in punti scalati: TEX, lo ricordiamo, opera solo in aritmetica intera e, leggera complicazione, in base 2, cosa che a volte produce troncamenti inaspettati da chi è abituato alla base 10. Non in questo caso, infatti
72,27 · 65536 = 4736286,72 e 2 · 72,27 · 65536 = 9472573,44.
Ci sono altre unità, oltre a quelle di cui abbiamo dato le tabelle di conversione: lo ‘spazio em’ o ‘quadratone’, lo ‘spazio ex’. Queste dimensioni non sono fisse, ma dipendono dal font in uso e permettono di creare spaziature coerenti con esso. Tradi-zionalmente il quadratone è la larghezza di una ‘M’ maiuscola, mentre lo spazio ex è l’altezza delle lettere senza ascendenti e discendenti, come la ‘x’; in italiano si chiama
occhio del carattere di stampa. Non è detto che questo sia esatto per il font in uso,
dipende dalle scelte di chi l’ha programmato.
*L’ultima unità di misura è disponibile solo se si usa una distribuzione recente di TEX, nella quale LATEX chiama il motorepdftex, almeno la versione 1.40.0; il valore di 1 px non è fissato, ma dipende dal valore dato al parametro interno\pdfpxdimen, che di default è 1 bp. A questo parametro si può assegnare una qualsiasi dimensione, con la stessa sintassi usata per i registri, per esempio, volendo adattare la larghezza di pagina alla dimensione di uno schermo che abbia una risoluzione di 96 punti per pollice e 1200 pixel di larghezza, potremmo dire
\setlength{\pdfpxdimen}{1in}
\divide\pdfpxdimen by 96 % sintassi TeX \setlength{\textwidth}{1200px}
L’uso di questa unità di misura in connessione con l’ingrandimento o la riduzione di un’imma-gine in formato bitmap richiede di conoscere la risoluzione dell’immaun’imma-gine.