如何在各种环境中使用 \appto?

如何在各种环境中使用 \appto?

在下面的代码中:

\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( global)。

但是如果你使用这个,你的最后一行将扩展为

Word: second, second

由于您只添加了\addword您的\myword内容,而不是其内容,因此您可以使用\xapptox =全局完全扩展)并\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}

输出

在此处输入图片描述

相关内容