Eine Programmiersprache wie Java hat for und while Schleifen. Welche Schleifen gibt es in LaTeX/Tikz und welche Struktur haben diese?

gefragt 16 Okt '15, 21:13

runix's gravatar image

runix
1.0k247486
Akzeptiert-Rate: 0%

bearbeitet 16 Okt '15, 21:21

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.

(17 Okt '15, 08:43) saputello

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.

Permanenter link

beantwortet 17 Okt '15, 08:39

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 17 Okt '15, 10:29

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×21

gestellte Frage: 16 Okt '15, 21:13

Frage wurde gesehen: 12,077 Mal

zuletzt geändert: 17 Okt '15, 10:29