我想在 amsmathalign
环境中将代码附加到宏。我尝试了\g@addto@macro
宏LaTeX3
,\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}