Новая команда с одинарным и двойным аргументом (функция вероятности)

Новая команда с одинарным и двойным аргументом (функция вероятности)

Я хочу определить новую команду так, чтобы при указании первого и единственного аргумента она делала одно, а при указании второго аргумента она расширяла первый аргумент. Идея состоит в том, чтобы повторить функцию вероятности. Один аргумент — для распределения вероятности, а два аргумента — для условного распределения вероятности. Я действительно не знаю, как это сделать.

Следующий (завершенный) код

\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имеет необязательный аргумент для размера (никогда не полагайтесь только на \leftand \right) или *вариант для автоматического изменения размера (используйте его только в случае крайней необходимости).

Обязательный аргумент разделяется на |, если присутствует. Поэтому входной код гораздо легче читать. Пробелы вокруг |не имеют значения.

решение2

Я предлагаю синтаксис, который использует только один аргумент. ОТРЕДАКТИРОВАНО с целью включения предложения Мико по интервалам.

\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

ВдохновленоОтвет Вернераи аналогично ответу Сеглетеса выше:

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

введите описание изображения здесь

Связанный контент