Re: Scelta automatica fra \clearpage e \cleardoublepage

#64119
Up
0
Down
::


Ciao Enrico.
Ho cercato di documentarmi meglio, ma comunque non sono riuscito a capire cosa non va nel mio ragionamento.

La notazione che ho usato (ripeto: l’ho improvvisata) non pretendo che rappresenti la verità profonda delle cose, ma spero che sia almeno “didatticamente valida”. Ti chiedo di dirmi in maniera esplicita se è invece fuorviante. Vorrei rappresentare il campo di azione dell’input processor (a destra del ‘|’), dell’expansion processor (tra l’inizio riga e il ‘|’), e dell’execution processor (ciò che sta all’inizio della riga e poi scompare).

Inoltre, dico giusto quando dico che a ogni passo, la “main token list” va dall’inizio della riga fino al “|”? (Non ho trovato riferimenti alla “main token list” nel TeXbook.)

In ogni caso, applicando quella notazione, ottengo esattamente le espansioni che hai riportato tu. Situazione iniziale con main token list vuota:
`
> | \expandafter\expandafter\expandafter\a\expandafter\b\c`
L’input processor legge i caratteri “\expandafter” e li trasforma nel token complesso expandafter
`
> \expandafter | \expandafter\expandafter\a\expandafter\b\c`
affinché l’expansion processor possa espandere expandafter, l’input processor gli prepara altri due token:
`
> \expandafter\expandafter\expandafter | \a\expandafter\b\c`
A questo punto, si può espandere il primo \expaft, e l’espansione lascia intatto il secondo \expaft e avvia l’espansione del terzo:
`
\expandafter >\expandafter | \a\expandafter\b\c`
Ma per espandere il terzo si devono ottenere altri due token, quindi:
`
\expandafter >\expandafter\a\expandafter | \b\c
\expandafter\a >\expandafter | \b\c
\expandafter\a >\expandafter\b\c |
\expandafter\a\b >\c |
\expandafter\a\b[espansione di \c] > |
`

Mi pare sia in accordo con quanto dici tu (anche se ti riferivi al primo esempio, ma il concetto rimane):

TeX non esamina \a fino a che l’espansione del primo token sia terminata, ciò che avviene solo quando è espanso \c

Infatti, ora che ha fatto le espansioni a catena dovute al primo \expandafter* (“> |”), può riprendere a espandere dall’originariamente secondo \expandafter, ovvero da quello che io immagino sia ora il primo token della main token list. E quindi:
`
> \expandafter\a\b[espansione di \c] |
\a [espanzione di \b][espansione di \c] |
`

Grazie della pazienza,
Antonio

_____________________
* Forse sbaglio perché dovrei considerare tutte queste espansioni come un unico passo? Mi riferisco a quando dici:

questo causa l’espansione del secondo \expandafter, ma subito!

Go to top