现在我想通过计数自动切换列和行。我已经将问题归结为对齐字符&
:
\newcounter{myRow}
\newcounter{myCol}[myRow]
\setcounter{myRow}{1}
\setcounter{myCol}{1}
\newcommand{\testcell}{%
\fbox{\themyRow, \themyCol}%
\ifnum\value{myCol}<3%
&%
\else%
\refstepcounter{myRow}%
\tabularnewline%
\fi%
\refstepcounter{myCol}%
}
\newcommand{\testcelltwo}{%
\fbox{\themyRow, \themyCol}%
\ifnum\value{myCol}<3%
% &% (This is the only difference to \testcell)
\else%
\refstepcounter{myRow}%
\tabularnewline%
\fi%
\refstepcounter{myCol}%
}
\begin{document}%
% This raises "incomplete ifnum" errors and looks broken
\begin{tabular}{lll}
\testcell \testcell \testcell \testcell \testcell \testcell
\end{tabular} \par
% This works fine
\begin{tabular}{lll}
\testcelltwo & \testcelltwo & \testcelltwo \testcelltwo & \testcelltwo & \testcelltwo
\end{tabular}
\end{document}
如何解决这个问题?通常的资料只是试图教我如何正确使用表格环境。
答案1
当条件已经结束时,您必须发出&
or ;通常的技巧是使用and 。\tabularnewline
\@firstoftwo
\@secondoftwo
\documentclass{article}
\newcounter{myRow}
\newcounter{myCol}[myRow]
\setcounter{myRow}{1}
\setcounter{myCol}{1}
\makeatletter
\newcommand{\testcell}{%
\fbox{\themyRow, \themyCol}%
\ifnum\value{myCol}<3
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{&\refstepcounter{myCol}}%
{\refstepcounter{myRow}\tabularnewline\refstepcounter{myCol}}%
}
\makeatother
\begin{document}
\begin{tabular}{lll}
\testcell \testcell \testcell \testcell \testcell \testcell
\end{tabular}
\end{document}
%
注意:的定义中的一个\testcell
是多余的。练习:哪一个?
关于这个技巧的一些说明。如果条件为真,\ifnum
则比较所需的标记将被删除,留下
\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
{&\refstepcounter{myCol}}{\refstepcounter{myRow}\tabularnewline\refstepcounter{myCol}}
在输入流中。现在\expandafter
扩展\else
,在吞噬了包括匹配的 在内的所有内容后,其扩展为空\fi
,剩下
\@firstoftwo{&\refstepcounter{myCol}}{\refstepcounter{myRow}\tabularnewline\refstepcounter{myCol}}
然后变成
&\refstepcounter{myCol}
如果条件为假,则比较的标记将被删除,但会连同直到和包括在内的所有内容一起删除\else
,因此在输入流中我们有
\expandafter\@secondoftwo\fi
{&\refstepcounter{myCol}}{\refstepcounter{myRow}\tabularnewline\refstepcounter{myCol}}
现在\expandafter
展开\fi
,其展开式为空,剩下
\@secondoftwo{&\refstepcounter{myCol}}{\refstepcounter{myRow}\tabularnewline\refstepcounter{myCol}}
进而
\refstepcounter{myRow}\tabularnewline\refstepcounter{myCol}
如预期的。
老实说,%
定义中还有其他多余的,但这只是因为我们在 中tabular
,所以省略它们不够通用。多余的是%
后面两个括号组之间的\fi
,因为 TeX 在查找未分隔的参数时会丢弃空格。