具有多个可选参数的新命令,其中一个是括号大小

具有多个可选参数的新命令,其中一个是括号大小

构建于问题和一和一、我想创建一个新命令,该命令对单个主参数具有默认行为,但有两个附加参数指定 (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}

在此处输入图片描述

相关内容