我正在尝试创建一些命令来处理条件概率。到目前为止,我正在使用 mathtools DeclarePairedDelimiter 系列命令。此外,据我所知,mathtools 不允许在表达式中间换行,例如在对齐环境中。
我想使用 DeclarePairedDelimiterXPP 的便利性,同时能够在需要跨越多行时手动执行操作。但是,无论我使用哪种样式,我都希望间距保持一致。
到目前为止,我使用过以下定义:
\newcommand{\given}{\vert}
\newcommand{\prob}{\mathbb{P}}
\DeclarePairedDelimiterXPP{\Prob}[1]
{\prob}{\lparen}{\rparen}{}
{\renewcommand{\given}{\nonscript\;\delimsize\vert\nonscript\;\mathopen{}}#1}
但如果我这样做,我希望在尝试这三个命令时得到完全相同的结果
\begin{align*}
& \Prob{X \given Y}
&& \Prob*{X \given \sum Y}
&& \Prob[\big]{X \given \sum Y} \\
& \prob(X \given Y)
&& \prob\left(X \middle\given \sum Y \right)
&& \prob\bigl( X \bigm\given \sum Y \bigr)
\end{align*}
实际上,我不太关心中间情况,因为我可能永远不会再使用 \left、\middle 和 \right。
如果我将 \given 重新定义为 \mid,那么第一种情况似乎可行,但 \mid 不是分隔符,因此我无法执行 \bigm\given。当然,我可以根据情况使用 \mid 或 \vert,但我正在尝试创建语义命令。
有没有办法定义 \given 以使其具有 \mid 的间距,但如果它前面有 \bigm 或 \Bigm,它就会表现为分隔符?
我很高兴听到有关如何处理此问题的任何建议。
另外,我想知道在这种情况下使用 \newcommand 或 \DeclareMathOperator 定义 \prob 是否有区别,哪一个更可取以及原因。我在输出中看不到任何明显的区别。
我最诚挚的问候。
答案1
中间一栏有几处手动修正,但是……
\documentclass{article}
\usepackage{mathtools,amsfonts}
\DeclareMathDelimiter{\given}
{\mathbin}{symbols}{"6A}{largesymbols}{"0C}
\newcommand{\prob}{\mathbb{P}}
\DeclarePairedDelimiterXPP{\Prob}[1]
{\prob}{\lparen}{\rparen}{}
{\renewcommand{\given}{\;\delimsize\vert\nonscript\;\mathopen{}}#1}
\begin{document}
\begin{align*}
& \Prob{X \given Y}
&& \Prob*{X \given \sum Y}
&& \Prob[\big]{X \given \sum Y} \\
& \prob(X \given Y)
&& \prob{\left(X \;\middle\vert\; \sum Y \right)}
&& \prob\bigl( X \bigm\vert \sum Y \bigr)
\end{align*}
\end{document}
答案2
让我介绍一种不同的解决方案semantex
(免责声明:我是作者)。除了自动缩放括号的情况外,它按预期工作(如果您想使其工作,可以\Prob[par=auto,break]{ X \vphantom{\sum} }
改为这样写):
\documentclass{article}
\usepackage{semantex,amsfonts}
\NewVariableClass\MyVar[
define keys={
{break}{ right par=. , do output=false },
{continue}{ return, symbol={}, left par=. },
},
]
\NewObject\MyVar\Prob{\mathbb{P}}[ arg keyval=false ]
\newcommand\givencommand[1]{
\nonscript\:
#1\vert
\allowbreak
\nonscript\:
\mathopen{}
}
\NewObject\MyVar\given{ \givencommand{\SemantexDelimiterSize} }
\begin{document}
\begin{align*}
& \Prob{X \given Y}
&& \Prob[par=auto]{X \given \sum Y}
&& \Prob[par=\big]{X \given \sum Y} \\
& \Prob[break]{ X \given } \Prob[continue]{ Y }
&& \Prob[par=auto,break]{ X } \Prob[par=auto,continue]{ \given \sum Y }
&& \Prob[par=\big,break]{ X } \Prob[par=\big,continue]{ \given \sum Y }
\end{align*}
\end{document}