答案1
使用“修饰”参数类型很容易xparse
:
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\pt}{e{_}}{%
\IfNoValueTF{#1}{p^{}_{T}}{p^{}_{T,#1}}%
}
\begin{document}
$\pt$
$\pt_{a}$
\end{document}
我省略了\ensuremath
,\xspace
当然;这样的命令是为了数学,因此没有理由允许它在数学公式之外使用。这避免了与之相关的所有怪癖\xspace
(有时有效,有时无效)。
在这个特殊的情况下,你可能需要将逗号稍微塞进 T 中:
\NewDocumentCommand{\pt}{e{_}}{%
\IfNoValueTF{#1}{p^{}_{T}}{p^{}_{T,#1}}%
}
使用“经典”方法也可以获得与第二种情况相同的输出:
\makeatletter
\newcommand{\pt}{\@ifnextchar_{\pt@plus}{p^{}_{T}}}
\def\pt@plus_#1{p^{}_{T\!,#1}}
\makeatother
答案2
我能想到的 MWE 最简单的变体是
\newcommand*{\pt}[1]{\ensuremath{p_{T,#1}}\xspace}
然后你可以调用
\pt{a}