我不明白如何使用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}
是第二个可选参数。使用g
或G{}
类型来获取它。
\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}