我正在尝试使用\whiledo
(包含在ifthen
包中)来自动创建表格。这个想法大致是,通过将值设置\colnum
为数字 x,我可以创建一个包含 x+1 列的表格,其标题是最多 x 个数字。因此,例如,将值设置为\colnum
5 将生成下表:
我一直在使用下面的代码来解决此问题,但我一直收到以下错误:
- 不完整
\iffalse
;第 20 行后的所有文本都被忽略。 - 额外的
\else
。 - 额外的
\fi
。 - 额外的对齐标签已更改为
\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 到规定上限的数字作为参数进行调用。