È 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
\unhbox256Alcune 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