Re: TeX dietro la facciata, i processori e ciò che non si vede

#58930
Up
0
Down
::

È il mio primo messaggio, e ci terrei molto ad avere un aiuto.

Leggendo il codice di una macro come \inbox, che incornicia un testo/oggetto, mi pare che quanto nel
codice si riferisce alla cornice preceda l’oggetto e che quindi, visto che i processori TeX funzionano
soltanto con le liste, il \box256 nel creare l’output debba tracciare la cornice prima di conoscere l’oggetto
da incorniciare. Il che sicuramente non è.

\def\inbox{\setbox256\hbox{\vbox{\hrule\hbox{\vrule\kern5pt\vbox{\kern3pt\hbox{\Large Testo/Oggetto} \kern3pt}\kern5pt\vrule}\hrule}}}

\inbox
\unhbox256

Alcune possibilità:
– la lista di uscita viene rovesciata prima dell’output;
– la memorizzazione del registro 256 avviene in uno stack;
– TeX crea un registro temporaneo per i parametri delle tre misure del box Testo/Oggetto
da passare in fase di output alla cornice.
Rimane il fatto che se si prova a leggere la lista di \tracingcommands si è portati a credere che TeX
possa fare qualsiasi cosa, visto che mette in gioco tanti elementi in più di quelli che noi utenti conosciamo
direttamente; peggio ancora con \tracingmacros, in particolare con lo \@specialoutput .

Come si può cercare di capire o magari solo di sapere come stanno le cose?
Meglio se senza andare a fondo di quello che fanno i processori di espansione e di esecuzione.
Che eventualmente mi sembra dovrebbe essere fatto induttivamente studiando i file di lplain.tex e
che, stando a \tracingmacros, è sicuramente fuori dalla mia portata.

Grazie
Riccardo

Benvenuto!

Dove hai trovato quel codice? L’uso di \setbox256 mi lascia alquanto perplesso. Ma non è molto importante. Vediamo un po’ alla volta:

1. \setbox256=\hbox{
Istruiamo TeX a inserire nel registro box numero 256 una hbox che cominciamo a costruire.

2. \vbox{
La hbox contiene una vbox

3. \hrule
Il primo elemento di questa vbox è un filetto orizzontale

4. \hbox{
L’elemento successivo è una hbox

5. \vrule
Il primo elemento di questa hbox è un filetto verticale

6. \kern5pt
Il secondo elemento è una crenatura (orizzontale) di 5pt

7. \vbox{
Il terzo elemento è una vbox

8. \kern3pt\hbox{\Large Testo/Oggetto} \kern3pt}
che a sua volta consiste di una crenatura (verticale) di 3pt, di una hbox contenente finalmente il testo da incorniciare e un’altra crenatura (verticale) di 3pt

9. \kern5pt\vrule}
Siamo tornati nella hbox, ci sono 5pt di spazio che separano la vbox dal filetto verticale; chiudiamo la hbox

10. \hrule}}
Siamo di nuovo nella vbox, inseriamo un filetto orizzontale e chiudiamo la vbox e la hbox

Ora che tutto è in ordine, TeX può procedere a decidere quanto lunghi siano i filetti orizzontali e alti quelli verticali: una hrule è larga quanto la vbox che la contiene, una vrule è alta (e profonda) quanto la hbox che la contiene. Questo se non sono stati esplicitamente dati valori con “width” o “height” e “depth” rispettivamente.

Occorre tenere presente un’altro fatto: in una vbox gli oggetti che non fanno cominciare il modo orizzontale sono impilati l’uno sull’altro; fra due hbox viene inserita l’interlinea, ma questo non accade fra una hrule e una hbox.

Puoi provare a leggere gli Appunti; certo che cominciare da questo mi pare un pochino troppo audace.

Ciao
Enrico

Go to top