假设我们有
\newcommand{\foo}[2][optional]{#1 #2}
定义在某个地方(例如某个包),并想重新定义它并重新使用原始定义。这通常适用\let
于https://en.wikibooks.org/wiki/TeX/let:
\let\originalfoo\foo
\renewcommand{\foo}[2][optional]{\originalfoo[#1]{modified #2}}
\let
然而,由于没有处理可选参数,这会导致无限循环。
如何处理\newcommand
with定义的可选参数\let
?
答案1
通常情况\let
下,宏带有可选参数时不起作用。您需要\LetLtxMacro
从letltxmacro
包中获取才能实现这一点。
\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}