具有单参数和双参数的新命令(概率函数)

具有单参数和双参数的新命令(概率函数)

我想定义一个新命令,这样当给出第一个也是唯一的参数时,它会执行一件事,而当给出第二个参数时,它会扩展第一个参数。这个想法是复制概率函数。一个参数用于概率分布,两个参数用于条件概率分布。我真的不知道怎么做。

以下代码(已完成)

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amssymb}

\newcommand{\PP}[2]{???}

\begin{document}

$\PP{X}$

$\PP{X}{Y}$

\end{document}

应该打印

\mathbb{P}{\left({X}\right)}
\mathbb{P}{\left({X}\middle|{Y}\right)}

我不希望有可选参数,因为它会影响代码的顺序和可读性。我的意思是,我更喜欢 \PP{X}{Y} 而不是 \PP[Y][X]。

请你帮助我好吗?

谢谢

答案1

您可以使用更简单的用户语法做得更好。

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\PP}{ s O{} >{\SplitArgument{1}{|}}m }
 {
  \mathbb{P}
  \IfBooleanTF{#1}
   { \PPauto #3 }
   { \PPfixed {#2} #3 }
 }

\NewDocumentCommand{\PPauto}{mm}
 {
  \left(
  \IfNoValueTF{#2} { #1 } { #1 \;\middle|\; #2 }
  \right)
 }

\NewDocumentCommand{\PPfixed}{mmm}
 {
  \mathopen{#1(}
  \IfNoValueTF{#3} { #2 } { #2 \mathrel{#1|} #3 }
  \mathclose{#1)}
 }

\ExplSyntaxOff

\begin{document}

\[
\PP{X} \quad \PP[\big]{X} \quad \PP*{\frac{X}{2}}
\]
\[
\PP{X|Y} \quad \PP[\big]{X | Y} \quad \PP*{\frac{X}{2} | Y}
\]

\end{document}

在此处输入图片描述

该命令\PP有一个可选的尺寸参数(永远不要单独依赖\left\right*自动调整尺寸的变体(仅在真正必要时使用它)。

如果强制参数存在,则在 处拆分|。这样输入代码就更容易阅读了。周围的空格|无关紧要。

答案2

我建议使用一种只使用单个参数的语法。已编辑以包含 Mico 的间距建议。

\documentclass{article}
\usepackage{listofitems,amssymb}
\newcommand\PP[1]{%
  \readlist\arglist{#1}
  \ifnum1=\arglistlen\relax
    \mathbb{P}{\left(#1\right)}
  \else
    \mathbb{P}{\left(\arglist[1]\;\middle|\;\arglist[2]\right)}
  \fi
}
\begin{document}
$\PP{X}$

$\PP{X,Y}$
\end{document}

在此处输入图片描述

答案3

灵感来自沃纳的答案与上述 Segletes 的回答类似:

\documentclass{article}
\usepackage{amssymb}
\newcommand{\pp}[1]{\ppaux#1\relax}
\def\ppaux#1#2\relax{%
  \ifnum\pdfstrcmp{#2}{}=0
      \mathbb{P}{\left(#1\right)}
  \else
    \mathbb{P}{\left(#1 \;\middle|\; #2\right)}
  \fi
}

\begin{document}

$\pp{X}$

$\pp{XY}$

$\pp{{XY}}$

\end{document}

在此处输入图片描述

相关内容