Listen, Felder und Schleifen in LaTeX - Teil 1 Listen

in #latex7 years ago (edited)

LaTeX ist vor allem denen geläufig, die es für die Präsentation wissenschaftlicher Referate verwenden.
Es ist als Textsatzsystem oder im weitesten Sinne als Markup-Sprache bekannt.
Nutzt man jedoch die sogenannten TeX-Primitiven, so erlangt LaTeX (oder besser dieses TeX/LaTeX-Makrogemisch) rudimentäre Programmiersprachen-Fähigkeiten.
Auch wenn es mir bereits gelungen ist, in LaTeX mit Hilfe dieser TeX-Befehle einen eigenen Interpreter für eine selbst-kreierte, einfache Markup-Sprache (mit nur ca. 16 Befehlen für die Erstellung interakiver PDF's) zu programmieren, so betrachte ich mich selbst als 'ewigen Anfänger'. - Für eventuelle Tipps und Kritiken bin ich daher immer sehr dankbar.
Mein Wissen bezieht sich in erster Linie daraus, dass ich fremde Listings teste und versuche, sie zu verstehen.
Mit dem Verständnis kommt dann die Motivation, diese Vorbilder zu verbessern oder entsprechend bestimmter Zielsetzungen zu modifizieren.
Nicht anders ist es auch in den beiden folgenden Beispielen für Listen, Felder (Arrays) und Schleifen.

LaTeX hat in seiner Reinform leider nichts anzubieten, mit dem Werte in indizierte Variablen gespeichert werden können.
Sucht man im Internet nach Beispielen unter dem Stichwort 'Array', so geht es dann um eine rein mathematische Darstellung.
Sucht man weiter im 'Comprehensive TEX Archive Network' (CTAN), so wird man doch noch fündig und kann entsprechende Pakete in der LaTeX-Präambel aufrufen.

Es gibt jedoch eine Alternative, von der ich nicht behaupte, dass sie besser ist und bei dieser Gelegenheit nenne ich sogleich den Nachteil:
"Meine Methode" verbraucht (je nach Länge des Variablennamens) Namensraum für eben diesen Namen/Bezeichner dieser Variable, indem La/TeX zusätzlich noch den Index an den Namen anhängt ... und vielfach speichert.
Jedoch kann ich aus eigener Erfahrung sagen, dass zumindest bei wenigen tausend Indizes und moderater Länge des Variablennamens keine Speicherprobleme auftreten. - Umgekehrt weiß ich nicht, welche speichertechnischen Strukturen die ladbaren LaTeX-Pakete von CTAN erzeugen.

Dieses Beispiel habe ich in ähnlicher Art im Internet unter Anwendung des LaTeX-Makros newcommand gefunden. - Das erscheint mir jedoch inkonsequent, weil er sich durch den TeX-Befehl
\def\<MakroName>{<Makro oder Zeichenkette>} ersetzen lässt.
Zusätzlich habe ich zur Indexierung einen Punkt (.) eingefügt, weil es ohne ein Trennzeichen zu Fehlern führen kann.

Vorab, die Präambel (hier in Teil 1), von der hier nur das Paket inputenc nützlich ist.
Das Paket geometry dient dem Einstellung auf einen nur 1cm breiten Seitenrand.
Die dürftige Erklärung steht in den Kommentaren neben den Makros/Befehlen ... ich bin zu faul, auf die Bedeutung der einzelnen Befehle genauer einzugehen:

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}% UTF8-Zeichensatz 
\usepackage[margin=1cm]{geometry}% Die LaTeX-Grundeinstellung hat sonst zu breiten Rand.
\parindent0pt\pagestyle{empty}% Kein Einzug, keine Seitennummer, nur eine leere Seite

\def\ListeEin#1#2#3% Eingabe-Funktion (quasi eine Art Setter) für Listen-Element (eindimensionales Array)
{%  Parameter #n    #1 = VariablenName  #2 = VariablenIndex     #3 = ÜbergabeWert
    \expandafter\edef\csname #1.#2\endcsname{#3}% Trennung zwischen #1 und #2 durch Punkt
    % expandafter weist La/TeX an, mit der Umsetzung des Folgebefehls solange zu ...
    % ... warten, bis der übernächste Befehl (\csname ... \endcsname) abgearbeitet wurde.
    % \csname <Zeichenkette>\endcsname versieht Zeichenkette mit einer vorangestellten ...
    % ... \-Kennung für einen LaTeX-Makro.
    % Dabei werden die #-Parameter zuvor in Zeichenketten umgewandelt.
    % Entspricht dem Vorgang:    \edef\<VariablenName>.<VariablenIndex>\<ÜbergabeWert>
}
% Anwendungsbeispiele für \ListeEin :
% \ListeEin{MonatsName}{1}{Januar}
% \ListeEin{MonatsNum}{Januar}{1}


\def\ListeAus#1#2% Ausgabe-Funktion (eine Art Getter) für Listen-Element (1D-Array)
{%  Parameter #n    #1 = VariablenName  #2 = VariablenIndex
    \csname #1.#2\endcsname% Trennung zwischen #1 und #2 durch Punkt
    % Analog zum Vorgang in \ListeEin enstpricht diese csname-Kette:
    % \<VariablenName>.<VariablenIndex>
    % Mit dem Aufruf dieses zuvor mit \ListeEin geschaffenen Makros wird die ...
    % Zeichenkette ausgegeben, die mittels \ListeEin mit #3 zugeordnet wurde.
}
% Anwendungsbeispiele von \ListeAus mit den per \ListeEin gespeicherten Daten:
% \ListeAus{MonatsName}{1}\\% Januar
% \ListeAus{MonatsNum}{Januar}%

% Fortsetzung (Teil 2 Felder) folgt ...

Sort:  

Congratulations @cryrac! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!