制作“For 循环”

制作“For 循环”

我正在尝试制作一个“for 循环”,它将迭代变量达到 1。但是,我在互联网上找到的所有“for 循环”都不起作用。

这些文件将分发给其他人,因此如果我们只坚持使用默认软件包,将会有所帮助。在这种情况下,我使用的是软件包ifthen

\newcommand{\displayauthors}[1]
{
\newcounter{blargh}
\setcounter{blargh}{#1}
\ifthenelse{#1 = 0}{

}{
\the\value{blargh}
\displayauthors{\value{blargh}}
}

此命令没有错误。但是,当我运行

\displayauthors{2}

LaTeX 抱怨

Command \c@blargh already defined.

是什么原因造成的?如何解决?

答案1

以下解决方案不需要任何包或任何计数器,速度更快,解决尾部递归,可扩展,并处理尾随/最后一个逗号(,)。

\documentclass{article}
\def\displayauthors#1{%
  \ifnum#1>0 #1\ifnum\numexpr#1-1>0, \fi
    \expandafter\displayauthors\expandafter{\number\numexpr#1-1\expandafter}%
  \fi
}
\begin{document}
\displayauthors{10}

\edef\x{\displayauthors{10}}\x
\end{document} 

答案2

移动

\newcounter{blargh}

移出宏主体并将其放在定义之前。您不想在每次使用时分配一个新寄存器,每个循环都应使用在开始时分配一次的相同寄存器。


你还需要减少计数器和%行尾的一些

在此处输入图片描述

\documentclass{article}
\usepackage{ifthen}
\newcounter{blargh}

\newcommand{\displayauthors}[1]
{%
\setcounter{blargh}{#1}%
\ifthenelse{#1 = 0}{%
}{%
\theblargh, %
\addtocounter{blargh}{-1}%
\displayauthors{\value{blargh}}%
}}

\begin{document}

\displayauthors{10}

\end{document}

答案3

您提到使用 for 循环没有找到任何成功方法。这里有一个选项:

在此处输入图片描述

\documentclass{article}
\usepackage{multido}% http://ctan.org/pkg/multido
\newcommand{\displaynums}[1]{%
  \ifnum#1<0\else\multido{\i=#1+-1}{#1}{\i\ }\unskip\fi}
\begin{document}
4: \displaynums{4}\par
12: \displaynums{12}\par
1: \displaynums{1}\par
0: \displaynums{0}\par
-7: \displaynums{-7}
\end{document}

multido为变量提供迭代/顺序接口:

\multido{<var>=<start>+<increment>}{<times>}{<stuff>}

实数/整数用法之间存在一些差异。请参阅multido 文档了解更多信息。

相关内容