我正在尝试使用宏生成表格线(tabular
环境)forloop
。后面有奇怪的多余一行forloop
。
\documentclass {article}
\usepackage [utf8] {inputenc}
\usepackage [english] {babel}
\usepackage{forloop}
\begin{document}
\newcounter{n}
\setcounter{n}{2}
\newcounter{i}
\begin{tabular}{|c|c|c|c|}
\hline
1 head
& 1
& 1
& 1
\\ \hline
\forloop{i}{0}{\value{i} < \value{n}} {%
1
& 1
& 1
& 1
\\ \hline
}
\end{tabular}
\end{document}
为什么?请注意,如果我在循环后添加一行手工编码的代码,那么一切都会正常。
答案1
LaTeX 内核有必要的工具,但是它们(故意?)通过(1)使用符号、(2)缺乏针对普通用户的文档,对普通读者来说被混淆了。@
\documentclass {article}
\usepackage [utf8] {inputenc}
\usepackage [english] {babel}
\makeatletter
% perhaps \ltxwhilenumtest would be here a better choice of name
\newcommand\ltxwhile [2]{\@whilesw {\ifnum #1}\fi {#2}}
\makeatother
\begin{document}\thispagestyle {empty}
\newcounter{n}
\setcounter{n}{4}
\newcounter{i}
\begin{tabular}{|c|c|c|c|}
\hline
1 head
& 1
& 1
& 1
\\ \hline
\setcounter{i}{0}%
\ltxwhile {\value{i} < \value{n}}
{%
\stepcounter{i}% careful with space coming from end of line
1
& 1
& 1
& 1
\\ \hline
}
\end{tabular}
\end{document}
答案2
正如 egreg 在评论中提到的那样:这是一个众所周知的问题。版主可以将其作为重复内容关闭(不过我希望看到讨论类似问题的链接)。
到目前为止,我坚持使用一种解决方法:生成少一行\forloop
,然后手动添加最后一行的代码。关于问题中给出的示例,解决方案如下。
\documentclass {article}
\usepackage [utf8] {inputenc}
\usepackage [english] {babel}
\usepackage{forloop}
\begin{document}
\newcounter{n}
\setcounter{n}{1} % !!! Max - 1
\newcounter{i}
\begin{tabular}{|c|c|c|c|}
\hline
1 head
& 1
& 1
& 1
\\ \hline
\forloop{i}{0}{\value{i} < \value{n}} {%
1
& 1
& 1
& 1
\\ \hline
}
1
& 1
& 1
& 1
\\ \hline
\end{tabular}
\end{document}
编辑:这不是一个完美的解决方案,因为最后一行第一个单元格中的文本以额外的水平空间为前缀。