如何使用 \whiledo 制作 tabularx 列?

如何使用 \whiledo 制作 tabularx 列?

我的问题类似于如何使用 `\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}

在此处输入图片描述

相关内容