我正在尝试为数学运算符定义一个命令\mathcal P_\mathrm{ext}
。因此,我想到了一些候选者:
\mathcal P_\mathrm{ext}(H)
\operatorname{\mathcal P}_\mathrm{ext}(H)
\DeclareMathOperator{\Pm}{\mathcal P}
和\Pm_\mathrm{ext}(H)
有一些不同。当我使用类似这样的命令时,我没有想到\mathcal P
和下标之间会有空格\operatorname
。我想知道正确的是。或者我应该把下标放在?里面\operatorname
(但这样使用似乎很奇怪……)
以下是 MWE:
\documentclass{article}
\usepackage{amsmath, amssymb}
\DeclareMathOperator{\Pm}{\mathcal P}
\begin{document}
\begin{align*}
&\mathcal P_\mathrm{ext}(H) \\
&\operatorname{\mathcal P}_\mathrm{ext}(H) \\
&\Pm_\mathrm{ext}(H)
\end{align*}
\end{document}
答案1
\documentclass[fleqn]{article}
\usepackage{amsmath, amssymb}
\DeclareMathOperator{\Pm}{\mathcal{P}}
\showoutput
\begin{document}
\begin{align*}
&\mathcal{P}_{\mathrm{ext}}(H) \\
&\operatorname{\mathcal P}_{\mathrm{ext}}(H) \\
&\Pm_{\mathrm{ext}}(H)\\
&\mathop{\mathcal{P}_{\mathrm{ext}}}(H)
\end{align*}
a $\log x$
a ${}\log x$
\end{document}
这个具体的例子让答案比原本更棘手。我认为最合乎逻辑的标记应该是,\mathop{\mathcal{P}_{\mathrm{ext}}}
因为您希望下标术语本身充当\mathop
。
但是,您在此处看到不同间距的原因是因为您在对齐的右侧,其中隐式地将表达式作为前缀,{}
因此您将从中获得一个很窄的空格,\mathop
以将其与(不可见的)前一个术语分开。所以它就像\log
我在此处的示例中添加的第二个示例/那么为什么在绝大多数情况下,\mathop
的间距是正确的,这里的额外空间可能不正确,应该通过或使用不提供的形式\log
将其删除,例如\!
\mathop
{\Pm}
答案2
如果使用\operatorname{\mathcal{P}}_{\mathrm{ext}}
,TeX 将无法调整下标的字距。
如果你只需要“ext”作为下标,你可以定义
\DeclareMathOperator{\Pme}{\mathcal{P}_{ext}}
如果下标是可变的,
\newcommand{\Pm}[1]{\operatorname{\mathcal{P}_{#1}}}
并将其称为\Pm{ext}
。
完整示例:
\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator{\Pme}{\mathcal{P}_{ext}}
\newcommand{\Pm}[1]{\operatorname{\mathcal{P}_{#1}}}
\begin{document}
$\Pme(H)$
$\Pm{ext}(H)$
\end{document}
如果您更喜欢以下_
符号:
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\NewDocumentCommand{\Pm}{e{_}}{%
\operatorname{\mathcal{P}\IfValueT{#1}{_{#1}}}%
}
\begin{document}
$\Pm_{ext}(H)$
\end{document}
请注意,在上述任何情况下,您只需输入ext
,因为它将被排版为的一部分\operatorname
;\mathrm
是不需要的。