在下面的代码中:
\newtheorem{myans}{Answer}
\def\myword{Word: }
\newcommand{\addword}{first, }
\begin{myans}
... \appto{\myword}{\addword} ...
\end{myans}
\renewcommand{\addword}{second, }
\begin{myans}
... \appto{\myword}{\addword} ...
\end{myans}
\myword
我认为最终的 \myword 应该是“Word: first, second, ”。但实际结果只是“Word: ”。
看起来 \addword 命令只能在一个环境中有用,并且在该环境结束时,\addword 会刷新该单词?
如何跨环境使用该命令?
答案1
每个环境都会创建一个组,这意味着所有操作都会在之后被遗忘\end
– 除非它们被指示为全局的。为此,etoolbox
还提供\gappto
( g
lobal)。
但是如果你使用这个,你的最后一行将扩展为
Word: second, second
由于您只添加了\addword
您的\myword
内容,而不是其内容,因此您可以使用\xappto
(x
=全局和完全扩展)并\expandonce
保护 中可能存在的脆弱命令\addword
。
这将高度取决于您\addword
可能包含的内容,也许\protected@xappto
更适合。
代码
\documentclass{article}
\usepackage{amsthm}
\usepackage{etoolbox}
\begin{document}
\newtheorem{myans}{Answer}
\def\myword{Word: }
\newcommand{\addword}{first, }
\begin{myans}
... \xappto{\myword}{\expandonce\addword} ...
\end{myans}
\renewcommand{\addword}{second, }
\begin{myans}
... \xappto{\myword}{\expandonce\addword} ...
\end{myans}
\myword
\end{document}