\int_incr:N innerhalb einer tabellarischen Umgebung

\int_incr:N innerhalb einer tabellarischen Umgebung

Ich habe vor ein paar Wochen angefangen, LaTeX3 zu lernen und spiele derzeit mit Tabellen herum. Hier ist mein Code:

\documentclass{article}
\usepackage{expl3}

\ExplSyntaxOn
\cs_new_protected:Npn \juhu_tablerow:n #1
{
  \int_new:N \l_row_count_int
  \int_set:Nn \l_row_count_int { 1 }
  \prg_replicate:nn {#1}
  {
    \int_use:N \l_row_count_int .~row \\
    \int_incr:N \l_row_count_int
  }
}
\cs_new_eq:NN \tablerow \juhu_tablerow:n
\ExplSyntaxOff

\begin{document}

\begin{tabular}{c}
\tablerow{3}
\end{tabular}

\end{document}

Die Ausgabe dieses Codes ist:

1. row
1. row
1. row

Die gewünschte Ausgabe sollte wie folgt aussehen:

1. row
2. row
3. row

Wenn ich die tabularUmgebung beispielsweise durch eine centerUmgebung ersetze, erhalte ich die erwartete Ausgabe.

Wenn ich jetzt \\in \int_use:N \l_row_count_int .~row \\durch ersetze ,~, \int_incr:Nscheint es auch innerhalb der tabularUmgebung wieder zu funktionieren und die Ausgabe lautet:

1. row, 2. row, 3. row, 

Meine Frage ist also, warum das Erhöhen der Ganzzahl in einer Umgebung mit mehreren Zeilen nicht funktioniert tabularund was ich tun kann, um das gewünschte Ergebnis zu erzielen?

Antwort1

Von meinem bescheidenen Kommentar zu einer Antwort.:)

Sie waren einer Lösung sehr nahe! Das Problem liegt hier im Umfang: Diese Aufgaben werden lokal erledigt. Lassen Sie uns sie global machen.

Bevor wir fortfahren, müssen wir die Integer-Deklaration außerhalb Ihrer Befehlsdefinition verschieben, da sonst bei nachfolgenden Aufrufen ein Fehler auftritt \tablerow. Nun eine kleine Kodierungskonvention, von

\int_new:N \l_row_count_int

Zu

\int_new:N \g_row_count_int

seitdem unser Zähler global wurde. :)Nun ein paar Ersetzungen (danke an egreg für den xparseVorschlag!):

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\int_new:N \g_row_count_int

\cs_new_protected:Npn \juhu_tablerow:n #1
{
  \int_gset:Nn \g_row_count_int { 1 }
  \prg_replicate:nn {#1}
  {
    \int_use:N \g_row_count_int .~row \\
    \int_gincr:N \g_row_count_int
  }
}

\NewDocumentCommand{ \tablerow }{ m }{
    \juhu_tablerow:n{#1}
}
\ExplSyntaxOff

\begin{document}

\begin{tabular}{c}
\tablerow{3}
\end{tabular}

\end{document}

Und alles sollte einwandfrei funktionieren.:)

Sie können auch „which is a scratch integer“ für die globale Zuweisung verwenden \g_tmpa_intund ein paar Dollar sparen.:)

verwandte Informationen