表格环境中的 \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:Ntabular

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临时整数进行全局分配,从而节省几块钱。:)

相关内容