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}
Der Befehl \PP
hat ein optionales Argument für die Größe (verlassen Sie sich niemals nur auf \left
und \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}
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}