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, 15:13

runix's gravatar image

runix
5191343
Akzeptiert: 50%

bearbeitet 16 Okt '15, 15: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, 02: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, 02:39

saputello's gravatar image

saputello
18.4k22352

bearbeitet 17 Okt '15, 04:29

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×15

Frage gestellt: 16 Okt '15, 15:13

Frage wurde angeschaut: 1,454 Mal

Zuletzt aktualisiert: 17 Okt '15, 04:29