考虑这个例子:
\documentclass{article}
\newcommand{\foo}{}
\newcommand{\currentbar}{\thebar}
\newcounter{bar}
\setcounter{bar}{0}
\makeatletter
\newenvironment{baz}{\addtocounter{bar}{1}}{\g@addto@macro\foo{\currentbar}}
\makeatother
\begin{document}
\begin{baz}
\end{baz}
\begin{baz}
\end{baz}
\foo
\end{document}
我有一个名为的命令\foo
、一个名为的计数器bar
和一个环境baz
。我想在每个终端环境中\foo
存储计数器的状态。bar
baz
在第一个 的末尾baz
,bar
等于1
,所以1
应该写入\foo
。在第二个 的末尾baz
,bar
等于2
,所以\foo
应该是12
(2 与已经存在的 连接在一起1
)。
事实上,\foo
实际上最有可能的是,并且在文档末尾调用时\currentbar\currentbar
输出。22
我怎样才能“扩展”到\currentbar
并1
使其2
位于\foo
最后12
?
答案1
您需要\currentbar
在将其添加到时进行扩展\foo
。
\xappto
最简单的方法是使用电子工具箱包装:而不是\g@addto@macro\foo{\currentbar}
说
\xappto\foo{\currentbar}
当然\usepackage{etoolbox}
在序言中是需要的。