Ja jsem sice v zivote v TeXu neprogramoval, ale ten priklad s definici makra \loop se mi nejak nelibi. Nejvic asi proto, ze tam je \else a \fi, ale neni tam \if, takze to v me hlave neproslo syntaktickou analyzou. ;-) Krome toho jsem nepochopil, co dela \repeat, kdyz je nad tim napsano, ze TeX nema zadnou konstrukci na cykly. Za vysvetleni dekuji.
PS. Serial je jinak sqelej, diky za nej! :)
\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čí