表格中的循环使用 \the\count 来访问当前行号

表格中的循环使用 \the\count 来访问当前行号

我想使用循环生成自动表格。如之前所建议的,最好先在 toks 中生成行,然后将它们传递给 tabular。但是,我在访问行内的行计数变量时遇到了问题,如下例所示:

\documentclass{article}

\newcount\it
\newcount\tot

\newtoks\tablines
\def\addtomytablines#1{\tablines\expandafter{\the\tablines#1}}
\it=2
\tot=7
\loop
  \addtomytablines{\the\it&&&\\\cline{2-3}}
  \advance\it 1
\ifnum \it<\tot
\repeat

\def\maketable{%
  \begin{tabular}{r|p{7mm}|p{7mm}|p{5mm}} \cline{2-3}
    & foo & foo & \\ \cline{2-3}
    \the\tablines
    foofoo & & & \\ \cline{2-3}
  \end{tabular}
}

\begin{document}
\maketable
\end{document}

期望的输出是每个行号都以当前行号开头(因此从 2 到 6),但是输出总是 输出 写入 \it 的最后一个值。

有什么想法可以改变它来使其工作吗?只需将循环内的行更改为

  \addtomytablines\expandafter{\the\it&&&\\\cline{2-3}}

给出了正确的数字,但不再是表格。

答案1

您必须尽可能地扩展行号,然后才能将其添加到\tablines标记列表中。以下是实现此目的的一种方法:

在此处输入图片描述

\documentclass{article}

\newcounter{it}
\newcounter{tot}

\newtoks\tablines
\newcommand{\addtomytablines}[1]{\tablines\expandafter{\the\tablines#1}}
\setcounter{it}{2}
\setcounter{tot}{7}
\loop
  \expandafter\addtomytablines\expandafter{\number\arabic{it} & & & \\ \cline{2-3}}
  \stepcounter{it}
\ifnum \value{it}<\value{tot}
\repeat

\def\maketable{%
  \begin{tabular}{r|p{7mm}|p{7mm}|p{5mm}}
    \cline{2-3}
    & foo & foo & \\
    \cline{2-3}
    \the\tablines
    foofoo & & & \\
    \cline{2-3}
  \end{tabular}
}

\begin{document}
\maketable
\end{document}

\expandafter(LaTeX 计数器用法)在\number将计数器\arabic{it}的值it传递给之前先将其扩展\addtomytablines

答案2

您可以使用两个计数器来实现这一点,一个在\addtomytablines命令内部,一个在主循环中。(我不完全明白为什么。)

我擅自清理了你的代码并用 LaTeX 编写了它。

\documentclass{article}

\newtoks\tablines
\def\addtomytablines#1{\tablines\expandafter{\the\tablines#1}}

\newcounter{row}
\newcounter{loop}
\newcounter{maxrow}

\setcounter{row}{2}
\setcounter{loop}{\value{row}}
\setcounter{maxrow}{7}

\loop
    \addtomytablines{%
        \therow & & & \\%
        \cline{2-3}%
        \stepcounter{row}
    }
    \stepcounter{loop}%
\ifnum\value{loop} < \value{maxrow}
\repeat

\def\maketable{%
  \begin{tabular}{r|p{7mm}|p{7mm}|p{5mm}} 
    \cline{2-3}
    & foo & foo & \\ \cline{2-3}
    \the\tablines
    foofoo & & & \\ \cline{2-3}
  \end{tabular}
}

\begin{document}
\maketable
\end{document}

在此处输入图片描述

答案3

LaTeX 内核有一些未公开的编程工具,例如 while 循环。更广为人知的循环\loop并不适用于表格,原因有很多,一是它会做出本地定义,而这个定义会丢失,二是它\cline也会使用\loop,这会产生冲突。

下面是一行代码,让用户访问一个 LaTeX while 循环。

\documentclass[border=12pt]{standalone}

\newcounter{index}

\makeatletter
   \def\WHILENUM #1{\@whilesw\ifnum#1\relax\fi}%
\makeatother

\begin{document}

\begin{tabular}{r|p{7mm}|p{7mm}|p{5mm}} 
\cline{2-3}
    & foo & foo & \\ 
\cline{2-3}
\setcounter{index}{2}%
\WHILENUM 
 {\value{index}<7}
 {\theindex\stepcounter{index}&&&\\\cline{2-3}}%
    foofoo & & & \\ 
\cline{2-3}
\end{tabular}

\end{document}

引用

相关内容