Schleife in tabellarischer Umgebung

Schleife in tabellarischer Umgebung

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, pgfloopaber es hat nicht geklappt.

Offenbar gibt es ein Problem beim Ausführen einer Schleife innerhalb einer tabularUmgebung. Ich habe auch versucht, zuerst die Schleife auszuführen und die Ausgabezeichenfolge in einem zu speichern tokenund 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 forloopoder 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 tokenkann

\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 tokenersetze , 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. 4in 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.

Bildbeschreibung hier eingeben

\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}

verwandte Informationen