- Questo topic ha 5 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 11 anni, 4 mesi fa da .
-
Topic
-
Gentilissimi,
diverso tempo fa scrissi un post nel vecchio forum al quale mi rispose il buon Enrico con una dettagliata spiegazione.
Il tutto riguardo al trucco per l’annidamento degli \if. (\if TT\fi)
Riporto in buona sostanza la spiegazione:“Supponiamo di volerci definire un comando che restituisca il ramo “vero” se un certo numero è pari, quello “falso” se il numero è dispari. Una costruzione come
\def\ifiseven#1#2#3{\ifodd #1\relax #3\else #2\fi}
funzionerebbe benissimo. Ma a volte questa non è una buona procedura, perché è complicato annidare i condizionali. Perciò si può fare in un altro modo:
\newif\ifiseven
\def\iseven#1{TT\fi\ifodd #1\relax\isevenfalse\else\iseventrue\fi\ifiseven}
Ora il codice
\iseven{} \else \fi funziona anche annidato in altri condizionali.
Infatti l’espansione di \if prevede l’espansione del token che segue, in questo caso \iseven che prima di tutto raccoglie il suo argomento; a questo punto viene sostituita la lista di token della definizione e la lista diventa\if TT\fi\ifodd
\relax\isevenfalse\else\iseventrue\fi\ifiseven
\else \fi Dopo l’\if ci sono due token non espandibili e \if TT\fi sparisce senza fare nulla (con espansione vuota, per la precisione) e il condizionale richiesto viene valutato correttamente.
Se invece il codice “\if\iseven{
} \else \fi” fosse all’interno del ramo non seguito da un altro condizionale, TeX accoppia \if con \fi ed è felicissimo di gettare via quei token alla svelta”. Quello che non capisco sono le ultime due righe:
“a cosa ci si riferisce per “ramo non seguito da altro condizionale”?
Quale è l’\if che viene accoppiato con \fi?Certo del vostro aiuto vi ringrazio in anticipo
Alessandro
- Devi essere connesso per rispondere a questo topic.