\documentclass[11pt]{article}
\usepackage{amsmath, amssymb}
\usepackage{mathtools}
\def\pr{\mathbb{P}}
\makeatletter
\let\Pr\undefined
\DeclarePairedDelimiterXPP\@Pr[1]{\pr}[]{}{#1}
\DeclarePairedDelimiterXPP\@@Pr[2]{\pr_{#1}}[]{}{#2}
\DeclarePairedDelimiterXPP\@@@Pr[3]{\pr_{#1}^{#2}}[]{}{#3}
\def\@@@@Pr#1{\@ifnextchar^{\expandafter\@@@Pr\@gobble}\@@Pr#1}
\def\Pr{\@ifnextchar_{\expandafter\@@@@Pr\@gobble}\@Pr}
\makeatother
\begin{document}
$\Pr_{1}^{2}{A}$
\end{document}
我正在为上述概率环境定义一个宏,并且我希望文档中的方程等同于
$\mathbb{P}_1^2[A]$
我不明白为什么上面的代码不起作用。\@ifnextchar^
上面的代码似乎是错误的。
答案1
xparse
对于部分\Pr
和\DeclarePairedDelimier
括号来说,使用起来要容易得多:
e
抓取的类型_
非常有用^
。
\documentclass[11pt]{article}
\usepackage{amsmath, amssymb}
\usepackage{mathtools}
% load this if you use an old latex, new latex has xparse in the kernel
%\usepackage{xparse}
\DeclarePairedDelimiter\Brackets[]
\RenewDocumentCommand\Pr{ e{_^} }{
\mathbb{P}
\IfNoValueF{#1}{\sb{#1}}% do if not empty
\IfNoValueF{#2}{\sp{#2}}% do if not empty
\Brackets
}
\begin{document}
\begin{gather*}
\Pr_{1}^{2}*{\frac12}
\\
\Pr{A}
\\
\Pr_2{Y}
\\
\Pr^3_2{Y}
\end{gather*}
\end{document}