如何声明具有自动参数括号的运算符

如何声明具有自动参数括号的运算符

我希望有一种简单的方法来声明一个用特定分隔符括住其参数的运算符。例如,我希望能够写

\Pr{X}

意思相同

\operatorname{Pr}\left[X\right]

仅供参考我知道怎么做

\newcommand{\Pr}[1]{\operatorname{Pr}\left[#1\right]}

但我想我曾经看到过一个包提供了一些命令

\DeclareBracketedOperator{\Pr}{Pr}{[}{]}

\DeclarePairedDelimiter有点像和的组合\DeclareMathOperator,我认为它还定义了一个带星号的版本的运算符,它不接受任何参数并且不产生分隔符。

答案1

我不记得有这样的包。你的\Pr命令可能被

\usepackage{mathtools}
\DeclarePairedDelimiter{\Prfences}{[}{]}
\renewcommand{\Pr}{\operatorname{Pr}\Prfences}

有了这个定义,\Pr的行为就和用 定义一样\DeclarePairedDelimiter;也就是说,*-form 将使用\left\right

如果您想始终使用\left\right,您可以遵循Werner的建议,或者选择困难的方式:

\makeatletter
\DeclareRobustCommand{\Pr}{\operatorname{Pr}\@ifstar\@firstofone\@Pr}
\newcommand{\@Pr}[1]{\left[#1\right]}
\makeatother

(需要数学,当然)。注意:\renewcommand{\Pr}{...}是必需的,因为\Pr已经在 LaTeX 中定义了。

答案2

以下是使用可选括号定义自己的运算符的一种方法:

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\usepackage{xparse}% http://ctan.org/pkg/xparse
\DeclareDocumentCommand{\Pr}{s m}{% \Pr[*]{..}
  \operatorname{Pr}%
  \IfBooleanTF{#1}% Condition on *
    {#2}% Print only the argument in starred * version
    {\left[#2\right]}% Print bracketed argument [ ] in unstarred version
}%
\begin{document}

This is $\Pr{2}$, and here is
\[
  \Pr{\frac{\frac{a}{b+c}}{d-e}}=\Pr*{\frac{8}{9}}.
\]
\end{document}

带星号版本的运算符,带括号/不带括号参数

上述代码定义了宏\Pr{..}(实际上是重新定义\Pr,因为它是由amsmath),但也提供带星号的*版本。根据要求,无星号版本将其参数打印在可扩展的括号中,而带星号的*版本则删除了这些括号。

xparse包裹提供一个简单的界面来指定命令和环境的星号版本。该xifthen包提供条件支持。

相关内容