我很好奇为什么下面的操作失败了。类似的帖子在压缩文本.tex未回答。当然,其他操作也可以\whileexpr
,但是为什么这个会失败呢?
\documentclass{article}
\makeatletter
\def\whileexpr#1\do#2{%
#1#2\expandafter\@iden\else\expandafter\@gobble\fi
{\whileexpr#1\do{#2}}%
}
\newcount\colnum
\newcommand\generaterow[2]{%
\colnum\z@
\whileexpr\ifnum\colnum<#2\relax\do{%
#1\advance\colnum\@ne\the\colnum\relax
}%
}
\makeatother
\begin{document}
% Test (worked):
\generaterow{x}{3}% -> x1x2x3
% Failed:
\begin{tabular}{|*{4}{c|}}
\hline
x\generaterow{&}{3}\\\hline
\end{tabular}
\end{document}
答案1
我看到了这个问题:在 \halign 中不能拆分条件&
。每个单元格都在一个对齐组中执行。以下方法有效。它允许条件在&
放置/执行材料(包括对齐字符)之前完成执行。
\def\whileexpr#1\do#2{%
#1\expandafter\@iden\else\expandafter\@gobble\fi
{#2\whileexpr#1\do{#2}}%
}