将代码附加到 amsmath align 环境中的宏

将代码附加到 amsmath align 环境中的宏

我想在 amsmathalign环境中将代码附加到宏。我尝试了\g@addto@macroLaTeX3\tl_gput_right:Nn但它似乎是我想要附加的代码的两倍。

这是MWE

\documentclass{article}
\usepackage{expl3,amsmath}

\makeatletter
\ExplSyntaxOn
\tl_new:N \gtmpatl
\def\tlgputright{\tl_gput_right:Nn} %\def\tlgputright{\g@addto@macro}
\ExplSyntaxOff
\makeatother

\begin{document}

\begin{align}\tlgputright\gtmpatl{hi}
 A &= B 
\end{align}

\ExplSyntaxOn
\tl_show:N \ltmpatl
\ExplSyntaxOff

\end{document}

表明\gtmpatl=hihi

答案1

环境align对其参数进行两次排版:第一次用于测量,第二次用于打印。因此,您的宏被执行了两次。为了检查这一点,包amsmath有一个内部布尔值\ifmeasuring@,它在第一个(测量)段落中为真,在第二个(打印)段落中为假。

\documentclass[twocolumn]{article}

\usepackage{amsmath}

\def\gtmpatl{}
\makeatletter
\newcommand{\tlgputright}{\ifmeasuring@\expandafter\@gobbletwo\else\expandafter\g@addto@macro\fi}
\makeatother

\begin{document}

\texttt{\meaning\gtmpatl}
\begin{align}
\tlgputright\gtmpatl{hi}
A &= B 
\end{align}
\texttt{\meaning\gtmpatl}
\tlgputright\gtmpatl{-ho}
\texttt{\meaning\gtmpatl}

\end{document}

在此处输入图片描述

相关内容