Novo comando com argumento simples e duplo (função de probabilidade)

Novo comando com argumento simples e duplo (função de probabilidade)

Quero definir um novo comando de forma que, quando um primeiro e único argumento for fornecido, ele faça uma coisa e, quando um segundo argumento for fornecido, ele expanda o primeiro argumento. A ideia é replicar a função de probabilidade. Um argumento é para distribuição de probabilidade e dois argumentos são para distribuição de probabilidade condicional. Eu realmente não sei como fazer isso.

O código a seguir (concluído)

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

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

\begin{document}

$\PP{X}$

$\PP{X}{Y}$

\end{document}

deveria imprimir

\mathbb{P}{\esquerda({X}\direita)}
\mathbb{P}{\esquerda({X}\meio|{Y}\direita)}

Eu não gostaria de ter um argumento opcional porque afetaria a ordem e a legibilidade do código. Quer dizer, eu prefiro \PP{X}{Y} a \PP[Y][X].

Você poderia por favor me ajudar?

Obrigado

Responder1

Você pode fazer melhor, com uma sintaxe de usuário muito mais fácil.

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

insira a descrição da imagem aqui

O comando \PPpossui um argumento opcional para o tamanho (nunca confie apenas no \lefte \right) ou uma *variante para o dimensionamento automático (use-o somente se for realmente necessário).

O argumento obrigatório é dividido em |, se presente. Portanto, o código de entrada é muito mais fácil de ler. Os espaços ao redor |são irrelevantes.

Responder2

Proponho uma sintaxe que usa apenas um único argumento. EDITADO para incluir sugestão de espaçamento do 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}

insira a descrição da imagem aqui

Responder3

Inspirado emResposta de Wernere semelhante à resposta de Segletes acima:

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

insira a descrição da imagem aqui

informação relacionada