具有單參數和雙參數的新命令(機率函數)

具有單參數和雙參數的新命令(機率函數)

我想定義一個新命令,這樣當給出第一個也是唯一的參數時,它會做一件事,而當給出第二個參數時,它會擴展第一個參數。這個想法是複製機率函數。一個參數用於機率分佈,兩個參數用於條件機率分佈。我真的不知道該怎麼辦。

(完成的)以下程式碼

\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}

在此輸入影像描述

相關內容