Neuer Befehl mit einfachem und doppeltem Argument (Wahrscheinlichkeitsfunktion)

Neuer Befehl mit einfachem und doppeltem Argument (Wahrscheinlichkeitsfunktion)

Ich möchte einen neuen Befehl so definieren, dass er bei Angabe eines ersten und einzigen Arguments eine Sache tut und bei Angabe eines zweiten Arguments das erste Argument erweitert. Die Idee ist, die Wahrscheinlichkeitsfunktion zu replizieren. Ein Argument ist für die Wahrscheinlichkeitsverteilung und zwei Argumente sind für die bedingte Wahrscheinlichkeitsverteilung. Ich weiß wirklich nicht, wie ich das machen soll.

Der (vollständige) folgende Code

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

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

\begin{document}

$\PP{X}$

$\PP{X}{Y}$

\end{document}

sollte drucken

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

Ich möchte kein optionales Argument haben, da dies die Reihenfolge und Lesbarkeit des Codes beeinträchtigen würde. Ich meine, ich bevorzuge \PP{X}{Y} gegenüber \PP[Y][X].

Könnten Sie mir bitte helfen?

Danke

Antwort1

Mit einer viel einfacheren Benutzersyntax können Sie es besser machen.

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

Bildbeschreibung hier eingeben

Der Befehl \PPhat ein optionales Argument für die Größe (verlassen Sie sich niemals nur auf \leftund \right) oder eine *Variante für die automatische Größenanpassung (verwenden Sie diese nur, wenn es wirklich nötig ist).

Das obligatorische Argument wird bei getrennt |, falls vorhanden. Dadurch ist der Eingabecode viel einfacher zu lesen. Leerzeichen |sind irrelevant.

Antwort2

Ich schlage eine Syntax vor, die nur ein einziges Argument verwendet. BEARBEITET, um Micos Abstandsvorschlag einzuschließen.

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

Bildbeschreibung hier eingeben

Antwort3

Inspiriert vonWerners Antwortund ähnlich der Antwort von Segletes oben:

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

Bildbeschreibung hier eingeben

verwandte Informationen