数学模式:空格字符,如果出现多次,最多计算一次

数学模式:空格字符,如果出现多次,最多计算一次

我有以下两个自定义命令:

条件概率:

\newcommand{\cProb}[2]{\operatorname{P}\left[ #1 \,\middle|\, #2 \right]}

以及函数中参数的占位符:

\newcommand{\argdot}{\,\cdot\,}

现在有了这个设置,如果我写下\cProb{B}{A}它,它会产生以下不错的结果:

\operatorname{P}\left[ A \,\middle|\, B \right]

但是,如果我写的话,\cProb{\argdot}{A}生成的结果中的条件概率分隔符之前会多一个空格:

\operatorname{P}\left[ \,\cdot\, \,\middle|\, B \right]

有没有办法在数学模式下使用空格字符(\, 除外),如果该空格字符连续出现多次,则只计算一次?或者一般来说,有没有办法产生这种行为?

答案1

您可以插入一个不可见的项目并检查它;我添加了一个更好的定义,\cProb可以这样调用

\cProb{B}{A}
\cProb[\big]{B}{A}
\cProb[\Big]{B}{A}
\cProb[\bigg]{B}{A}
\cProb[\Bigg]{B}{A}
\cProb*{B}{A}

其中只有最后一个使用\left\right。相信我,一般来说最好不要使用自动分隔符大小。

\documentclass{article}
\usepackage{mathtools}

\DeclarePairedDelimiterX{\cProbdel}[2]{[}{]}{%
  #1\maybethinspace\delimsize|\,\thinspacemarker#2%
}
\newcommand{\cProb}{\operatorname{P}\cProbdel}
\newcommand{\argdot}{\maybethinspace{\cdot}\,\thinspacemarker}

\newcommand{\maybethinspace}{%
  \ifnum\lastnodetype=3 % look whether the preceding item is a rule
  \else
    \,%
  \fi
}
\newcommand{\thinspacemarker}{\vrule width0pt\relax}

\begin{document}

$\cProb{B}{A}$

$\cProb{\argdot}{A}$

$\cProb{B}{\argdot}$

\end{document}

在此处输入图片描述

答案2

此命令\myspace将具有所需的行为。尽管它还不够聪明,无法识别除自身之外的其他空间。

\documentclass[border=12pt, varwidth]{standalone}

\makeatletter
\newcommand*\myspace{\futurelet\myspace@token\myspace@i}
\def\myspace@i{\ifx\myspace@token\myspace\else\thinspace\fi }

\makeatother
\begin{document}\thispagestyle{empty}

$x\,\,\,\,\,\,\,\,\,\,y$

$x\myspace\myspace\myspace\myspace\myspace\myspace\myspace\myspace\myspace\myspace  y$

$x\myspace y$

$x\,y$

\end{document}

引用

相关内容