我的问题类似于如何使用 `\whiledo` 以编程方式制作表格行?。区别在于我想使用 来生成列而不是行\whiledo
。基本上我有代码:
\documentclass{article}
\usepackage{tabularx}
\newcounter{index}
\setcounter{index}{3}
\newcommand{\Line}{& 1 & 2 & 3}
\begin{document}
\begin{tabularx}{0.9\textwidth}{|r|*{\value{index}}{X|}}
\hline
Some text \Line \\
\hline
\end{tabularx}
\end{document}
我的任务是重新定义命令\Line
,使其有一个参数,即计数器的值index
。它应该生成内容为 1、2、3、...、n 的列。这里 n 是计数器的值index
。
我确信存在解决方案,\whiledo
但我仍然没有找到。如能得到任何帮助,我将不胜感激。
答案1
我的建议是永远不要在环境或其变体中使用\whiledo
或其他循环。tabular
策略是\Line
逐步构建宏;&
在环境中生成将结束单元格并中断循环。最好在为下一个作业tabular
设置值时执行此操作。index
\newcounter{index}
\newcounter{temp}
\newcommand{\settabindex}[1]{%
\setcounter{index}{#1}%
\setcounter{temp}{0}%
\def\Line{}%
\whiledo{\value{temp}<\value{index}}
{\stepcounter{temp}\edef\Line{\Line & \thetemp}}%
}
需要使用\edef
以便将 的先前内容传递给 的\Line
下一次添加& \thetemp
。
例子:
\documentclass{article}
\usepackage{tabularx,ifthen}
\newcounter{index}
\newcounter{temp}
\newcommand{\settabindex}[1]{%
\setcounter{index}{#1}%
\setcounter{temp}{0}%
\def\Line{}%
\whiledo{\value{temp}<\value{index}}
{\stepcounter{temp}\edef\Line{\Line & \thetemp}}%
}
\begin{document}
\settabindex{10}
\begin{tabularx}{0.9\textwidth}{|r|*{\value{index}}{X|}}
\hline
Some text \Line \\
\hline
\end{tabularx}
\settabindex{4}
\begin{tabularx}{0.9\textwidth}{|r|*{\value{index}}{X|}}
\hline
Some text \Line \\
\hline
\end{tabularx}
\end{document}