\let 在由 \newcommand 定义的宏上带有可选参数

\let 在由 \newcommand 定义的宏上带有可选参数

假设我们有

\newcommand{\foo}[2][optional]{#1 #2}

定义在某个地方(例如某个包),并想重新定义它并重新使用原始定义。这通常适用\lethttps://en.wikibooks.org/wiki/TeX/let

\let\originalfoo\foo
\renewcommand{\foo}[2][optional]{\originalfoo[#1]{modified #2}}

\let然而,由于没有处理可选参数,这会导致无限循环。

如何处理\newcommandwith定义的可选参数\let

答案1

通常情况\let下,宏带有可选参数时不起作用。您需要\LetLtxMacroletltxmacro包中获取才能实现这一点。

\documentclass{article}

\usepackage{letltxmacro}

\newcommand{\foo}[2][optional]{#1 #2}

\LetLtxMacro{\originalfoo}{\foo}

\renewcommand{\foo}[2][optional]{\originalfoo[#1]{modified #2}}


\begin{document}
\originalfoo[Hello]{World}

\foo[Hello]{World}
\end{document}

相关内容