\int_incr:N внутри табличной среды

\int_incr:N внутри табличной среды

Я начал изучать LaTeX3 несколько недель назад и сейчас играюсь с таблицами. Вот мой код:

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

Вывод этого кода:

1. row
1. row
1. row

Желаемый результат должен быть таким:

1. row
2. row
3. row

Когда я заменяю tabularсреду, например, средой center, я получаю ожидаемый результат.

Теперь, если я заменю \\in \int_use:N \l_row_count_int .~row \\на ,~, \int_incr:Nпохоже, это снова заработает даже внутри tabularсреды, и вывод будет таким:

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

Итак, мой вопрос заключается в том, почему увеличение целого числа не работает внутри tabularсреды при использовании нескольких строк, и что я могу сделать, чтобы получить желаемый результат?

решение1

От моего скромного комментария к ответу.:)

Вы были очень близки к решению! Виновником здесь является масштаб: эти задания выполняются локально; давайте сделаем их глобальными.

Прежде чем продолжить, мы должны переместить объявление целого числа за пределы определения вашей команды, в противном случае при последующих вызовах будет выдана ошибка \tablerow. Теперь, небольшое соглашение о кодировании, от

\int_new:N \l_row_count_int

к

\int_new:N \g_row_count_int

с тех пор как наш счетчик стал глобальным. :)Теперь пара замен (спасибо egreg за xparseпредложение!):

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

И все должно работать просто отлично.:)

Вы также можете использовать , \g_tmpa_intкоторый является целым числом для глобального назначения и сэкономить пару долларов.:)

Связанный контент