
Я начал изучать 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
который является целым числом для глобального назначения и сэкономить пару долларов.:)