- Questo topic ha 6 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 9 mesi fa da .
-
Topic
-
Questo il codice:
`\documentclass{article}\def\ifciao{\iftrue}
\begin{document}
\ifciao
\typeout{Ciao!}
\fi
\iffalse
\ifciao
Ciao!!
\fi
\fi
\end{document}`Il primo [tt]\ifciao[/tt] non dà alcun problema. Il secondo, invece, viene completamente saltato e conduce all’errore:
`! Extra \fi.
l.14 \fi? `
Il primo [tt]\ifciao[/tt] viene valutato sempre, in quanto esterno, mentre il secondo, che è annidato dentro un altro condizionale falso, sembra essere sbrigativamente saltato da TeX. Perché avviene ciò? Se ci metto un qualsiasi condizionale dichiarato con [tt]\newif[/tt] funziona correttamente.
Secondo quale regola TeX salta il corpo di un condizionale falso? O meglio (ci sono sul fatto che pensa solo a bilanciare i condizionali annidati): secondo quale criterio TeX determina se una sequenza di controllo incontrata è un condizionale? Flag interni (praticamente una valutazione a livello di stomaco)? Credevo che il tutto avvenisse a un livello piuttosto superficiale, già sulle “labbra” (per esempio che venissero saltate le macro che iniziano con [tt]\if[/tt]).
Il mio obiettivo originario era definire un condizionale come alias di un altro, da qui l’uso del [tt]\def[/tt]. Mi sembra di aver visto altri esempi di definizione di condizionali in questo modo: devo dedurre che in tutti quei casi si suppone di non annidare i condizionali?
Grazie,
Antonio
- Devi essere connesso per rispondere a questo topic.