
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 tabular
Umgebung beispielsweise durch eine center
Umgebung ersetze, erhalte ich die erwartete Ausgabe.
Wenn ich jetzt \\
in \int_use:N \l_row_count_int .~row \\
durch ersetze ,~
, \int_incr:N
scheint es auch innerhalb der tabular
Umgebung 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 tabular
und 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 xparse
Vorschlag!):
\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_int
und ein paar Dollar sparen.:)