表格环境中的循环

表格环境中的循环

我正在尝试根据大小自动创建表格。LaTeX 中循环命令的数量很多,很难确定哪一个合适。我尝试了普通的 TeX 循环和来自包的循环forlooppgfloop但没有成功。

显然,在环境中运行循环存在问题tabular。我还尝试先运行循环并将输出字符串保存到 中token,然后在 中打印标记tabular。这在某些情况下有效。

这是一个最小的例子:首先,我想要生产:

\begin{tabular}{|*{4}{c|}}
  1&2&3&4
\end{tabular}

以下是我使用 TeX 循环所尝试的操作:

\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{1}

\begin{tabular}{|*{\thenumofcol}{c|}}
  \thetmpcol
  \loop
    \ifnum\value{tmpcol}<\value{numofcol}%
    \stepcounter{tmpcol}%
    &\thetmpcol
  \repeat
\end{tabular}

显然,&符号会导致循环出现问题。如果我使用包forloop或中的循环,也会发生同样的情况pgfloop。错误是

ERROR: Forbidden control sequence found while scanning use of \loop.

--- TeX said ---
<inserted text> 
                \par 
l.140     &
           \thetmpcol
--- HELP ---
No help available

token因此我认为我可以将行的字符串保存在

\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{1}
\newtoks\tmprowcontent

\tmprowcontent={x}
\loop%
\ifnum\value{tmpcol}<\value{numofcol}%
  \stepcounter{tmpcol}%
  \tmprowcontent=\expandafter{\the\expandafter\tmprowcontent & x}%
\repeat

\begin{tabular}{|*{\thenumofcol}{c|}}
  \the\tmprowcontent
\end{tabular}

如果我不将该计数器包含在内,则此方法有效token。如果我x用当前计数器值替换,即

\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{1}
\newtoks\tmprowcontent

\tmprowcontent={\thetmpcol}
\loop%
\ifnum\value{tmpcol}<\value{numofcol}%
  \stepcounter{tmpcol}%
  \tmprowcontent=\expandafter{\the\tmprowcontent & \thetmpcol}%
\repeat

\begin{tabular}{|*{\thenumofcol}{c|}}
  \the\tmprowcontent
\end{tabular}

然后每个条目都是计数器的最后一个值,即4在这种情况下。这是因为使用了\expandafter。但是,如果我不使用\expandafter,那么 TeX 会告诉我内存不足。

因此,我的问题是,我该如何实现它?

答案1

您可以简单地迭代这些值,尽管您可能需要隐藏它,&以便不会太早被看到并在表格单元格中期测试结束时结束。

在此处输入图片描述

\documentclass{article}

\begin{document}

\newcounter{numofcol}\setcounter{numofcol}{4}
\newcounter{tmpcol}\setcounter{tmpcol}{0}

\newcommand\foo{%
  \stepcounter{tmpcol}%
  \thetmpcol
  \ifnum\value{tmpcol}<\value{numofcol}\hiddenamp\expandafter\foo\fi}
\newcommand\hiddenamp{&}

\begin{tabular}{|*{\thenumofcol}{c|}}
  \foo
\end{tabular}
\end{document}

相关内容