![如何使用计数器扩展字符串宏?](https://linux22.com/image/367284/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%AE%A1%E6%95%B0%E5%99%A8%E6%89%A9%E5%B1%95%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%AE%8F%EF%BC%9F.png)
我尝试使用计数器来扩展字符串。我将使用一个非常简单的示例:
\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}