![如何向宏添加钩子](https://linux22.com/image/233343/%E5%A6%82%E4%BD%95%E5%90%91%E5%AE%8F%E6%B7%BB%E5%8A%A0%E9%92%A9%E5%AD%90.png)
LaTeX 广泛使用钩子,其中一种方法是使用命令g@addto@macro
。它在 source2e 中定义为:
\long\def\g@addto@macro#1#2{%
\begingroup
\toks@\expandafter{#1#2}%
\xdef#1{\the\toks@}%
\endgroup}
g@addto@macro
我在下面的最小示例中使用了:
\documentclass{article}
\begin{document}
\long\def\mainmacro{Preambles in main macro. \par}
\xdef\testOne{Contents of first macro. \par }
\xdef\testTwo{Contents of second macro. \par }
\makeatletter
\g@addto@macro{\mainmacro}{\testOne}
\g@addto@macro{\mainmacro}{\testTwo \par}
\g@addto@macro{\mainmacro}{Adhoc contents (1). \par}
\g@addto@macro{\mainmacro}{\xdef\@elt{ Test } }
\g@addto@macro{\mainmacro}{Adhoc contents (2).\@elt \par}
\makeatother
\mainmacro
\end{document}
在宏中添加钩子的最佳方法是什么 - 在开头还是在结尾以外的任何地方?
答案1
\def\foo{\message{Here is the original \string\foo}}
\def\foohook{\message{Whatever.}}
% Add a hook to \foo (\foohook does not have be predefined):
\toks0\expandafter{\expandafter\foohook\foo}
\edef\foo{\the\toks0}
% Demo:
\foo
\def\foohook{\message{Redefined \string\foohook}}
\foo
\bye
(完整的工作示例;要将其转变为乳胶,需移除\bye
并添加必要的乳胶残余物。)
答案2
看看电子工具箱包,它提供了一组丰富的命令,用于“钩子管理”甚至命令的“修补”。