如何与 mathtools 中的分隔符保持一致

如何与 mathtools 中的分隔符保持一致

我正在尝试创建一些命令来处理条件概率。到目前为止,我正在使用 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}

在此处输入图片描述

相关内容