假设我想要一个\gotocolumn
具有以下行为的命令:在具有 n 列或更多列的表格中,\gotocolumn{n}
将扩展为最短的组合,\\
并&
需要将我们带到第 n 列。例如...
- 在表格的第一列中,
\gotocolumn{3}
将扩展为& &
。 - 在表的第二列中,
\gotocolumn{3}
将扩展为&
。 - 在表的第三列中,
\gotocolumn{3}
将扩展为\relax
。 - 在表的第四列或后续列中,
\gotocolumn{3}
将扩展为\\ & &
。
已经完成了吗?可以完成吗?您认为该怎么做?
答案1
当开始新的列和行时,您可以进行一些记账。如果您真的想,您可以重新定义&
,\\
我选择引入一些新的宏,这些宏只是“调用”正常的宏并做一些额外的工作。它看起来像这样:
\documentclass{article}
\newcounter{currCol}
\setcounter{currCol}{1}
\def\amp{\stepcounter{currCol}&}
\def\nl{\\\setcounter{currCol}{1}}
\newcounter{numCols}
\setcounter{numCols}{3}
\def\gotocolumn#1{%
\ifnum\the\value{currCol}=#1%done
\else%
\ifnum\the\value{currCol}<#1% before same row
\amp\gotocolumn{#1}%
\else% after, next row
\ifnum\the\value{currCol}<\the\value{numCols}% need additional columns
\amp\gotocolumn{#1}%
\else%
\nl\gotocolumn{#1}%
\fi%
\fi%
\fi%
}
\begin{document}
\begin{tabular}{lcr}
test \amp test \amp test\nl
more \amp test \amp stuff\nl
\gotocolumn{2}test \amp test\nl
\gotocolumn{3}last\nl
first \amp \gotocolumn{1}first
\end{tabular}
\end{document}
看起来像这样。
它没有经过很好的测试,因此在边界情况下可能会出现一些问题。