构建于这问题和这一和这一、我想创建一个新命令,该命令对单个主参数具有默认行为,但有两个附加参数指定 (i) 括号大小和 (ii) 下标。例如,我有一个命令
\newcommand{\prob}[2][]{\mathsf{P} \ifx\\#1\\\else_{#1}\fi \!\left[#2\right]}
用于指定概率运算符,我使用类似\prob{X\leq x}
或\prob[X\sim F]{X\leq x}
,但我还想修改括号大小。有没有好的方法可以用 来做到这一点\DeclarePairedDelimiterXPP
?理想情况下,我会使用类似:\prob_{X\sim F}[\big]{X\leq x}
和等效\prob[\big]_{X\sim F}{X\leq x}
。
一种方法(但需要顺序并指定所有参数):
\DeclarePairedDelimiter{\LR}{[}{]}
\DeclareDocumentCommand \prob { o m m } {% optional mandatory mandatory: https://tex.stackexchange.com/questions/1742/automatic-left-and-right-commands
\IfNoValueTF {#1} {%
\mathsf{P}_{#2}\LR{#3}%
}{%
\mathsf{P}_{#2}\LR[#1]{#3}%
}%
}
答案1
我想一个好的语法可能是
\prob{a=1} % no subscript, standard size
\prob[\big]{a=1} % no subscript, \big size
\prob*{a=\frac{1}{2}} % no subscript, automatic sizing
\prob_{b}{a=1} % subscript, standard size
\prob_{b}[\big]{a=1} % subscript, \big size
\prob_{b}*{a=\frac{1}{2}} % subscript, automatic sizing
因为这是各种元素自然出现的顺序。
没有必要指定所有参数,因为\prob
可以测试下标,然后将控制权传递给另一个命令,该命令使用 来排版其余部分并抓取其参数\DeclarePairedDelimiter
。
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiter{\probargument}{[}{]}
\NewDocumentCommand{\prob}{e{_}}{%
\mathsf{P}\IfValueT{#1}{_{#1}}\probargument
}
\begin{document}
\begin{gather}
\prob{a=1} \\ % no subscript, standard size
\prob[\big]{a=1} \\ % no subscript, \big size
\prob*{a=\frac{1}{2}} \\ % no subscript, automatic sizing
\prob_{b}{a=1} \\ % subscript, standard size
\prob_{b}[\big]{a=1} \\ % subscript, \big size
\prob_{b}*{a=\frac{1}{2}} % subscript, automatic sizing
\end{gather}
\end{document}
再加点小技巧,你就可以得到一个类似于表示条件概率的xparse
参数。周围的空格将被忽略。{a=1|b=1}
|
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiterX{\probargument}[1]{[}{]}{\probargumentA{#1}}
\NewDocumentCommand{\prob}{e{_}}{%
\mathsf{P}\IfValueT{#1}{_{#1}}\probargument
}
\NewDocumentCommand{\probargumentA}{>{\SplitArgument{1}{|}}m}{%
\probargumentB#1%
}
\NewDocumentCommand{\probargumentB}{mm}{%
\IfNoValueTF{#2}{% not conditional
#1%
}{% conditional
#1\;\delimsize|\;#2%
}%
}
\begin{document}
\begin{gather}
\prob{a=1} \\ % no subscript, standard size
\prob[\big]{a=1} \\ % no subscript, \big size
\prob*{a=\frac{1}{2}} \\ % no subscript, automatic sizing
\prob_{b}{a=1} \\ % subscript, standard size
\prob_{b}[\big]{a=1} \\ % subscript, \big size
\prob_{b}*{a=\frac{1}{2}} \\ % subscript, automatic sizing
\prob{a=1|b=1} \\ % no subscript, standard size
\prob[\big]{a=1|b=1} \\ % no subscript, \big size
\prob*{a=\frac{1}{2}|b=1} \\ % no subscript, automatic sizing
\prob_{b}{a=1|b=1} \\ % subscript, standard size
\prob_{b}[\big]{a=1|b=1} \\ % subscript, \big size
\prob_{b}*{a=\frac{1}{2}|b=1} % subscript, automatic sizing
\end{gather}
\end{document}