将 \LetLtxMacro 与 \Macro* (带星号的变体) 结合使用

将 \LetLtxMacro 与 \Macro* (带星号的变体) 结合使用

如果我使用:

\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*是两个标记。*不构成宏名称的一部分。

相关内容