表格中 forloop 之后出现奇怪的额外行

表格中 forloop 之后出现奇怪的额外行

我正在尝试使用宏生成表格线(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)缺乏针对普通用户的文档,对普通读者来说被混淆了。@

while 循环次数

\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}

编辑:这不是一个完美的解决方案,因为最后一行第一个单元格中的文本以额外的水平空间为前缀。

相关内容