我尝试使用计数器来扩展字符串。我将使用一个非常简单的示例:
\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}