使用它来生成表格时 \whiledo 不起作用

使用它来生成表格时 \whiledo 不起作用

我正在尝试使用\whiledo(包含在ifthen包中)来自动创建表格。这个想法大致是,通过将值设置\colnum为数字 x,我可以创建一个包含 x+1 列的表格,其标题是最多 x 个数字。因此,例如,将值设置为\colnum5 将生成下表:

在此处输入图片描述

我一直在使用下面的代码来解决此问题,但我一直收到以下错误:

  1. 不完整\iffalse;第 20 行后的所有文本都被忽略。
  2. 额外的\else
  3. 额外的\fi
  4. 额外的对齐标签已更改为\cr

这是代码,结果如下:

\documentclass[a5paper]{article}
\usepackage{longtable}
\usepackage{ifthen}
\usepackage{xstring}

\newcounter{loopcheck}
\setcounter{loopcheck}{1}

\begin{document}
\def\colnum{5} %Sets number of columns
\begin{longtable}{|c|*{\colnum}{|c}|} %Makes table with correct number of columns
\hline
\whiledo{\colnum>\theloopcheck}%
{&\theloopcheck%Tabs forward one column and prints the number stored in the counter
\refstepcounter{loopcheck}}%Increases the counter by one
\setcounter{loopcheck}{0}\\\hline%Sets the counter to zero once everything's done with
\end{longtable}
\end{document}

此外,生成的表格如下所示:

在此处输入图片描述

右边没有边框,也没有任何东西,循环额外重复两次,迭代之间用空格分隔,而不是制表符。我尝试将 改为&以及\\各种其他内容,它们都运行正常,但出于某种原因&和 只有&会导致问题。知道为什么吗?谢谢!!

答案1

您的循环从一列开始并以另一列结束:这是不可能的。

您需要先构建整行,然后才能交付。

\documentclass[a5paper]{article}
\usepackage{longtable}
\usepackage{ifthen}

\newcounter{loopcheck}

\newcommand{\firstrow}{%
  \def\firstrowtemp{}%
  \setcounter{loopcheck}{0}%
  \whiledo{\colnum>\value{loopcheck}}{%
    \stepcounter{loopcheck}%
    \edef\firstrowtemp{\firstrowtemp&\theloopcheck}%
  }\firstrowtemp
}

\begin{document}


\def\colnum{5} %Sets number of columns
\begin{longtable}{|c|*{\colnum}{|c}|} %Makes table with correct number of columns
\hline
\firstrow \\
\hline
\end{longtable}
\end{document}

一种更简单的expl3语法方法:

\documentclass[a5paper]{article}
\usepackage{longtable}

\ExplSyntaxOn

\NewDocumentCommand{\firstrow}{}
 {
  \int_step_function:nN { \colnum } \genconf_firstrow:n
 }

\cs_new:Nn \genconf_firstrow:n { & #1 }

\ExplSyntaxOff


\begin{document}


\def\colnum{5} %Sets number of columns
\begin{longtable}{|c|*{\colnum}{|c}|} %Makes table with correct number of columns
\hline
\firstrow \\
\hline
\end{longtable}
\end{document}

\int_step_function:nN该函数以\genconf_firstrow:n从 1 到规定上限的数字作为参数进行调用。

在此处输入图片描述

相关内容