eigentlich muss es doch möglich sein, LaTeX-Programme während der Kompilierung auch mit Arrays arbeiten zu lassen - ich meine nicht die mathematische Darstellung, sondern den Gebrauch ganz gewöhnlicher Feldvariablen, die in den meisten anderen Programmiersprache als Array bezeichnet werden.
Für ein Projekt denke ich an ein zwei- oder notfalls auch ein-dimensionales Feld aus Countern.
Eigene Versuche mit den Paketen arrayjob, memory oder die Erstellung miitels csname-Umgebung brachten (nicht ganz) den gewünschten Erfolg.
Für mein Projekt (Labyrinth) benötige ich ein VariablenFeld, welches mit Zahlenwerte einliest und diese dann, abhängig von eben diesen eingelesenen Werten, nochmals wiederholt berechnet. Auch ein Zufallsgenerator (evtl. aus lcg-package) wird hier einbezogen.
Jedoch zeigen einige Tests (sowohl mit arrayjob, memory als auch nach Erstellung von Feldern mit Hilfe csname-Umgebung) im Vorfeld unerwartete Probleme, die grundsätzlich ein und demselben Schema gleichen: Mit einer Schleife sollen Zahlenwerte (erst mal ganz simpel der Schleifenzählwert oder dieser z.B. mit 2 multipliziert [calc-package]) in die Array-/Feld-Variablen eingelesen werden.
In einer zweiten Schleife sollen diese Werte wieder ausgegeben werden und dann gibts entweder Fehlermeldungen oder, noch interessanter, der zuletzt eingelesene Wert befindet sich plötzlich in jeder Feldvariable.
Noch interessanter ist, dass nach stupidem schrittweisen Einlesen, also Befehl für Befehl, diese Sache funktioniert - doch das genügt mir nicht.
Ich vermute, dass es mir nicht gelungen ist, mit all diesen Methoden tatsächlich ein Feld von Countern aufzubauen und ich LaTeX vermutlich mit diesem Vorhaben überfordere ... oder festgefahren nach dem Schema der 'herkömmlichen' Programmiersprachen denke.
\documentclass{article} \parindent0sp \begin{document} \sffamily % EingabeFunktion: \newcommand{\FeldEin}[3]{% % #1 für FeldVariablenName, #2 für FeldIndex, Parameter #3 für Wert \expandafter\newcommand\csname #1#2\endcsname{#3}} % AusgabeFunktion: \newcommand{\FeldAus}[2]{% #1 für FeldVariablenName, #2 für FeldIndex \expandafter\csname #1#2\endcsname} % Kein 'echtes Feld' sondern eine 'Form von newcommand', wie Beispiel zeigt: \FeldEin{xy}{abc}{\bfseries} \FeldAus{xy}{abc}\ \\ % 'stupides Einlesen': \FeldEin{Mem}{0}{0123} \FeldEin{Mem}{1}{1234} \FeldEin{Mem}{2}{2345} \FeldEin{Mem}{3}{3456} \FeldEin{Mem}{4}{4567} \FeldEin{Mem}{5}{5678} \FeldEin{Mem}{6}{6789} \FeldEin{Mem}{7}{7890} \FeldEin{Mem}{8}{8901} \FeldEin{Mem}{9}{9012} \newcounter{Z}% Zähler für \loop .. \repeat \setcounter{Z}{0}% Startwert \loop \ifnum\value{Z}<10 %\FeldAus{Mem}{\value{Z}}\\% Error, weil MemZ kein Counter % %\FeldAus{Mem}{the\value{Z}}\\% 'Funktioniert' wie folgende Zeile \FeldAus{Mem}{\theZ}\\ \stepcounter{Z}% Z++ \repeat \end{document}
\documentclass{article} \parindent0sp \begin{document} \sffamily % EingabeFunktion: \newcommand{\FeldEin}[3]{% % #1 für FeldVariablenName, #2 für FeldIndex, Parameter #3 für Wert \expandafter\newcommand\csname #1#2\endcsname{#3}} % AusgabeFunktion: \newcommand{\FeldAus}[2]{% #1 für FeldVariablenName, #2 für FeldIndex \expandafter\csname #1#2\endcsname} \newcounter{Z}% Zähler für \loop .. \repeat \setcounter{Z}{0}% Startwert \newcounter{MxL}% MaxLoops \setcounter{MxL}{20} % Eingabe: \loop \ifnum\value{Z}<\value{MxL} \FeldEin{Mem}{\the\value{Z}}{\theZ} \stepcounter{Z} \repeat \newcounter{Out} % Ausgabe: \setcounter{Z}{0} \loop \ifnum\value{Z}<\value{MxL} \setcounter{Out}{\FeldAus{Mem}{\the\value{Z}}} \ifnum\value{Out}<10 0% \fi \theOut\\% Ergebnis sieht sehr gut aus, Zuversicht! \stepcounter{Z} \repeat \ \\ % Abschließend die große Überreaschung: \FeldAus{Mem}{13}% Der letzte Zählerstand von Z wird ausgegeben ... % ... und der ist bei Abbruch 20 % Egal, mit welchem Index \FeldAus{Mem} aufgerufen wird, das ... % ... Ergebnis ist immer 20 ... W A R U M ? \end{document}
Ra(s)tlos frage ich in die Runde: Was mache ich falsch???
( Ist doch aber ein interessantes ProgrammierProblemchen, gelle? )
Für etwaige Antworten sage ich jetzt schon meinen Dank.