如果我使用:
\LetLtxMacro{\MacroToUse}{\FormatText}
然后使用\MacroToUse
调用\FormatText
即可实现预期效果。但是,如何使用此结构来调用\FormatText*
?
下面的 MWE 得出:
但期望的输出是两行相同。
参考:
代码:
\documentclass{article}
\usepackage{xcolor}
\usepackage{xparse}
\usepackage{letltxmacro}
\newcommand*{\FormatColor}{}%
\NewDocumentCommand{\FormatText}{s m}{%
\IfBooleanTF{#1}{%
\def\FormatColor{red}%
}{%
\def\FormatColor{blue}%
}%
\textcolor{\FormatColor}{#2}%
}%
\begin{document}
\FormatText{one}
\FormatText*{two}
\newcommand{\MacroToUse}{}%
\LetLtxMacro{\MacroToUse}{\FormatText}%
\MacroToUse{one}
\LetLtxMacro{\MacroToUse}{\FormatText*}%
\MacroToUse{two}
\end{document}
答案1
这是一个\LetLtxMacro
应该不是使用。
\documentclass{article}
\usepackage{xcolor}
\usepackage{xparse}
\usepackage{letltxmacro}
\newcommand*{\FormatColor}{}%
\NewDocumentCommand{\FormatText}{s m}{%
\IfBooleanTF{#1}{%
\def\FormatColor{red}%
}{%
\def\FormatColor{blue}%
}%
\textcolor{\FormatColor}{#2}%
}%
\begin{document}
\FormatText{one}
\FormatText*{two}
\newcommand{\MacroToUse}{\FormatText}
\MacroToUse{one}
\renewcommand{\MacroToUse}{\FormatText*}
\MacroToUse{two}
\end{document}
使用\let
或其更强大的兄弟\LetLtxMacro
基本上是用于当您想要保存宏的含义以便重新定义它时,或者一般来说,当另一个宏可以随后改变其含义并且您希望保留其原始含义时,也许可以恢复它。
这里你永远不会修改\FormatText
,所以没有必要保存它的含义。
如果你担心参数,不必担心。当 TeX 看到
\MacroToUse{two}
在上面的代码中,它将查找 的当前含义,\MacroToUse
并且由于它是一个宏,因此将其替换为替换文本。因此在这个阶段它将显示
\FormatText*{two}
这正是我们所需要的。
无论如何,你不能使用
\LetLtxMacro{\foo}{\baz*}
假设\baz
有一个 *-variant。的第二个参数\LetLtxMacro
应该是单身的标记,和\baz*
是两个标记。*
不构成宏名称的一部分。