Xparse t 参数类型(带可选参数的下划线)

Xparse t 参数类型(带可选参数的下划线)

我不明白如何使用t带有xparse's 的类型参数\NewDocumentCommand

我正在尝试定义一个接受一个可选参数的宏,但该可选参数使用下划线指定为下标。也就是说,我想定义一些行为类似于

\def\MyMacro_#1{A_{\textcolor{red}{#1}}}

但下标是可选的。我需要的#1是参数,而不仅仅是在宏之外添加的下标(即,\MyMacro必须是调用实际下标的那个)

下面的 MWE 得出:

在此处输入图片描述

但期望的结果是:

在此处输入图片描述

使用 的颜色和下标\MyMacro

笔记:

  • 文档t指出

    可选的 ⟨token⟩,\BooleanTrue如果 ⟨token⟩ 存在,则会产生一个值,\BooleanFalse否则会得出一个值。给定为 t⟨token⟩。

    但没有给出例子。

代码:

\documentclass{article}

\usepackage{amsmath}
\usepackage{xparse}
\usepackage{xcolor}

%\newcommand*{\MyMacro}[1][]{}% Ensure we are not overwriting anything
%\def\MyMacro_#1{A_{\testcolor{red}{#1}}}% <-- Want this behavior but with the _{#1} being optional

\NewDocumentCommand{\MyMacro}{t_}{%
    \IfBooleanTF{#1}{%
        A_{\textcolor{red}{#1}}
    }{%
        \mathbf{A}
    }%
}

\begin{document}

With a subscript: $\MyMacro_{\pi}$ 

Without any subscript: $\MyMacro$ 

\end{document}

答案1

参数t说明符是的概括,s与 相同t*

我认为这不是正确的方法,但如果你真的想这样做:

\NewDocumentCommand{\MyMacro}{t_}{A\IfBooleanT{#1}{\MyMacroAux}}
\NewDocumentCommand{\MyMacroAux}{m}{_{\textcolor{red}{#1}}}

完整示例:

\documentclass{article}

\usepackage{amsmath}
\usepackage{xparse}
\usepackage{xcolor}

\NewDocumentCommand{\MyMacro}{t_}{A\IfBooleanT{#1}{\MyMacroAux}}
\NewDocumentCommand{\MyMacroAux}{m}{_{\textcolor{red}{#1}}}

\begin{document}

With a subscript: $\MyMacro_{\pi}$

Without any subscript: $\MyMacro$

\end{document}

在此处输入图片描述

如果第一部分还取决于以下情况_

\NewDocumentCommand{\MyMacro}{t_}{%
  \IfBooleanTF{#1}
    {A\MyMacroAux}
    {\mathbf{A}}%
}
\NewDocumentCommand{\MyMacroAux}{m}{_{\textcolor{red}{#1}}}

答案2

对我来说看起来像是一个e-type 参数

\documentclass{article}

\usepackage{amsmath}
\usepackage{xparse}
\usepackage{xcolor}

\NewDocumentCommand\MyMacro{e_}{%
    \IfNoValueTF{#1}{%
        \mathbf{A}
    }{%
        A_{\textcolor{red}{#1}}
    }%
}

\begin{document}

With a subscript: $\MyMacro_{\pi}$ 

Without any subscript: $\MyMacro$ 

\end{document}

答案3

是的是这个意思吗?

检查t_有效,但\textcolor{red}{#1}会尝试排版_,因此{\pi}永远不会输入下标。

我认为,这{\pi}是第二个可选参数。使用gG{}类型来获取它。

\documentclass{article}

\usepackage{amsmath}
\usepackage{xparse}
\usepackage{xcolor}

%\newcommand*{\MyMacro}[1][]{}% Ensure we are not overwriting anything
%\def\MyMacro_#1{A_{\testcolor{red}{#1}}}% <-- Want this behavior but with the _{#1} being optional

\NewDocumentCommand{\MyMacro}{t_G{}}{%
  \IfBooleanTF{#1}{%
    A_{\textcolor{red}{#2}}
  }{%
    \mathbf{A}
  }%
}

\begin{document}

With a subscript: $\MyMacro_{\pi}$ 

Without any subscript: $\MyMacro$ 

\end{document}

在此处输入图片描述

相关内容