
Ich versuche, automatisch eine Tabelle in Abhängigkeit von der Größe zu erstellen. In LaTeX gibt es eine Vielzahl von Schleifenbefehlen, was es schwierig macht, herauszufinden, welcher geeignet ist. Ich habe einfache TeX-Schleifen und die Schleifen aus den Paketen ausprobiert forloop
, pgfloop
aber es hat nicht geklappt.
Offenbar gibt es ein Problem beim Ausführen einer Schleife innerhalb einer tabular
Umgebung. Ich habe auch versucht, zuerst die Schleife auszuführen und die Ausgabezeichenfolge in einem zu speichern token
und dann das Token darin auszudrucken tabular
. Dies funktioniert in einigen Fällen.
Hier ein Minimalbeispiel: Zunächst, was ich erzeugen möchte:
\begin{tabular}{|*{4}{c|}}
1&2&3&4
\end{tabular}
Folgendes habe ich mit der TeX-Schleife versucht:
\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{1}
\begin{tabular}{|*{\thenumofcol}{c|}}
\thetmpcol
\loop
\ifnum\value{tmpcol}<\value{numofcol}%
\stepcounter{tmpcol}%
&\thetmpcol
\repeat
\end{tabular}
Offenbar &
führt das Symbol zu Problemen in der Schleife. Dasselbe passiert, wenn ich eine Schleife aus den Paketen forloop
oder verwende pgfloop
. Der Fehler ist
ERROR: Forbidden control sequence found while scanning use of \loop.
--- TeX said ---
<inserted text>
\par
l.140 &
\thetmpcol
--- HELP ---
No help available
Daher dachte ich, dass ich die Zeichenfolge der Zeile in einem speichern token
kann
\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{1}
\newtoks\tmprowcontent
\tmprowcontent={x}
\loop%
\ifnum\value{tmpcol}<\value{numofcol}%
\stepcounter{tmpcol}%
\tmprowcontent=\expandafter{\the\expandafter\tmprowcontent & x}%
\repeat
\begin{tabular}{|*{\thenumofcol}{c|}}
\the\tmprowcontent
\end{tabular}
Dies funktioniert, wenn ich diesen Zähler nicht in die einschließe . Wenn ich durch den aktuellen Zählerwert token
ersetze , d. h.x
\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{1}
\newtoks\tmprowcontent
\tmprowcontent={\thetmpcol}
\loop%
\ifnum\value{tmpcol}<\value{numofcol}%
\stepcounter{tmpcol}%
\tmprowcontent=\expandafter{\the\tmprowcontent & \thetmpcol}%
\repeat
\begin{tabular}{|*{\thenumofcol}{c|}}
\the\tmprowcontent
\end{tabular}
Dann ist jeder Eintrag der letzte Wert des Zählers, d. h. 4
in diesem Fall. Dies liegt an der Verwendung von \expandafter
. Wenn ich jedoch nicht verwende \expandafter
, meldet mir TeX, dass nicht genügend Speicher vorhanden ist.
Daher lautet meine Frage: Wie kann ich das zum Laufen bringen?
Antwort1
Sie können einfach durch die Werte iterieren, müssen sie jedoch möglicherweise ausblenden, &
damit sie nicht zu früh angezeigt werden und eine Tabellenzelle mitten im Test beenden.
\documentclass{article}
\begin{document}
\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{0}
\newcommand\foo{%
\stepcounter{tmpcol}%
\thetmpcol
\ifnum\value{tmpcol}<\value{numofcol}\hiddenamp\expandafter\foo\fi}
\newcommand\hiddenamp{&}
\begin{tabular}{|*{\thenumofcol}{c|}}
\foo
\end{tabular}
\end{document}