我有以下两个自定义命令:
条件概率:
\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}