如何使用计数器扩展字符串宏?

如何使用计数器扩展字符串宏?

我尝试使用计数器来扩展字符串。我将使用一个非常简单的示例:

\def\st{}
\setcounter{i}{1}
\expandafter\def\expandafter\st\expandafter{\st{ } \the\numexpr\value{i}}
\addtocounter{i}{1}
\texttt{\st}

人们会期望结果为“1”。然而,结果却是“2”,因为计数器在扩展后增加了。因此,我理解“st”总是使用“i”的最终值进行“解释”。因此,在计数器“i”的迭代中,人们会得到 nnnn ...(其中“n”是“i”的最终值)。但我想得到 1 2 ... n。如何做到这一点?

(我花了很多时间试图实现这个目标,但可惜的是,都是徒劳的!)

答案1

您需要完全扩展。此外,您还添加了不需要的括号和空格。

\documentclass{article}

\def\st#1{}
\newcounter{i}
%\renewcommand{\thei}{\arabic{i}} % it's default

\begin{document}

\count255=0
\loop
\ifnum\count255<10
  \advance\count255 1
  \stepcounter{i}
  \edef\st{\st\space\thei}
\repeat

--\st--

\end{document}

在此处输入图片描述

在第一次迭代中,\st将会吞噬\space

不同的实现方式etoolbox

\documentclass{article}
\usepackage{etoolbox}

\def\st{}
\newcounter{i}
%\renewcommand{\thei}{\arabic{i}} % it's default

\begin{document}

\count255=0
\loop
\ifnum\count255<10
  \advance\count255 1
  \stepcounter{i}
  \eappto\st{\ifdefempty\st{}{ }\thei}
\repeat

--\st--

\end{document}

相关内容