Der LaTeX-Kern selbst hat auf der Ebene für Klassen- und Paketautoren die Schleifen:
\@whilenum
<Zahl> <Relation> <Zahl> \do {
<Anweisungen> }
Wobei für <Zahl> alles zulässig ist, was TeX als Zahl interpretiert, also beispielsweise 1
, 2
, \value{page}
, \oddsidemargin
(ja auch Längenregister, können als reine Zahl interpretiert werden), \@tempctna
, \numexpr 1*25\relax
. <Relation> ist entweder <
, =
oder >
. Die <Anweisungen> werden dann so lange ausgeführt, solange die Bedingung gilt. Man muss also innerhalb der <Anweisungen> insbesondere dafür sorgen, dass die Bedingung irgendwann auch wirklich ungültig wird.
\@whiledim
<Länge> <Relation> <Länge> \do {
<Anweisungen> }
Wobei für <Länge> alles zulässig ist, was TeX als Dimension interpretiert, also beispielsweise 1pt
, 2cm
, \paperwidth
, \dimexpr 1in+\oddsidemargin\relax
. <Relation> ist entweder <
, =
oder >
. Die <Anweisungen> werden dann so lange ausgeführt, solange die Bedingung gilt. Man muss also innerhalb der <Anweisungen> insbesondere dafür sorgen, dass die Bedingung irgendwann auch wirklich ungültig wird.
\@whilesw
<Bedingung> \fi {
<Anweisungen> }
Dabei ist <Bedingung> eine TeX-\if
-Anweisung, also beispielsweise \iffalse
(Achtung, das endet dann nie), \if@odd\c@page
, \if@twoside
(dürfte auch eher selten enden). Die <Anweisungen> werden dann so lange ausgeführt, solange die <Bedingung> gilt. Man muss also innerhalb der <Anweisungen> insbesondere dafür sorgen, dass die <Bedingung> irgendwann auch wirklich ungültig wird.
\@for
<Makro> :=
<Liste> \do {
lt;Anweisungen> }
Dabei ist <Liste> eine durch Kommata separierte Liste von Elementen. <Makro> wird in jedem Durchlauf als eines dieser Elemente definiert, bevor in dem Durchlauf <Anweisungen> ausgeführt werden. Ist <Makro> also beispielsweise \test
, <Liste> Hallo,Du,da
und <Anweisungen> \test\space
, so würde die Schleife »Hallo Du da
« ausgeben.
Neben diesen echten Schleifenkonstrukten, die nicht für Anwender gedacht sind, stellt der LaTeX-Kern Anwendern für die picture
-Umgebung auch noch die Iterator-Anweisung \multiput
zur Verfügung, die dazu gedacht ist, dieselbe Ausgabe an mehreren Positionen innerhalb der picture
-Umgebung durchzuführen. Näheres dazu ist der LaTeX-Anleitung zu entnehmen.
Neben diesen Schleifenkonstrukten des LaTeX-Kerns gibt es eine ganze Reihe von Paketen, die unterschiedliche Schleifenkonstrukte anbieten. Die Erklärung zu diesen sind in den jeweiligen Paketanleitungen zu finden. Eine kleine Auswahl dieser Kontrukte und der zugehören Pakete wäre:
\whiledo
– Paket ifthen
, quasi der Klassiker
\multido
– Paket multido
, eine Abspaltung aus PS-Tricks
\docsvlist
– Paket etoolbox
, der e-TeX-Werkzeugkasten
\dolistloop
– Paket etoolbox
, der e-TeX-Werkzeugkasten
\dolistcsloop
– Paket etoolbox
, der e-TeX-Werkzeugkasten
\forlistloop
– Paket etoolbox
, der e-TeX-Werkzeugkasten
\forlistcsloop
– Paket etoolbox
, der e-TeX-Werkzeugkasten
\DTLforeach
– Paket datatool
, Datenverarbeitungspaket
\foreach
– Paket pgf/tikz
, Grafik-Paket
\bool_do_unit:Nn
– Paket l3prg
, Programmkonstrukte für LaTeX 3
\bool_do_while:Nn
– Paket l3prg
, Programmkonstrukte für LaTeX 3
\bool_until_do:Nn
– Paket l3prg
, Programmkonstrukte für LaTeX 3
\bool_while_do:Nn
– Paket l3prg
, Programmkonstrukte für LaTeX 3
All diese Konstrukte mit Beispielen im Detail zu erklären, würde IMHO den Rahmen einer einzelnen Antwort sprengen. Darüber könnte man mehrere Artikel verfassen. Allein die LaTeX-3-Kernpakete bieten eine große Anzahl an Schleifen und Iterationen. In vielen Paketen gibt es für Spezialanwendung auch weitere Iteratoren, beispielsweise um über die Ebenen einer Seitenstils von scrlayer
zu iterieren. All diese aufzuführen ist aber allgemein eher wenig interessant. Vielmehr sollte man sich bei einer konkreten Aufgabenstellung auf die Suche nach einem dafür passenden Konstrukt machen.
beantwortet
17 Okt '15, 08:39
saputello
11.1k●17●43●65
Akzeptiert-Rate:
51%
Mir ist die Frage zu unspezifisch. Ich habe trotzdem einmal eine Antwort erstellt. Ich fände es jedoch besser, wenn Fragen möglichst etwas spezifischer wären, beispielsweise nur die Schleifenkonstrukte von
pgf
/tikz
für einen bestimmten Zweck erfragt würden.