Dávám to sem i ke starému příspěvku:
\def\loop#1\repeat{\def\body{#1}\iterate}
\def\iterate{\body \let\next\iterate
\else\let\next\relax\fi \next}
Příklad použití:
\newcount\cnt
\loop\ifnum\cnt<10 a\advance\cnt by1\fi
(vypíše deset a)
Tedy if se nachází mimo makro. TeX skutečně nemá konstrukci na cykly. Toto makro funguje tak, že:
- nadefinuje tělo cyklu jako makro \body
- pokud není splněna podmínka opuštění cyklu, expanduje se \next v makru \iterate opět na \iterate
- pokud je splněna, expanduje se na \relax a expanze končí