我在数学模式下为括号定义了自己的命令,\prt
该命令具有自动缩放功能和可选的中间值\vert
(用于条件概率)。\mathopen
and\mathclose
确保类似的东西P\prt{A}{B}
不会在P
括号的开头和中间显示空格。然而,这会弄乱上标的放置方式 - 放在右边而不是正确的右上角。
由以下 MWE 制作:
\documentclass{article}
\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{xparse}
\NewDocumentCommand\prt{m o}{
\IfNoValueTF {#2}
{\mathopen{}\left( #1 \right)\mathclose{}}
{\mathopen{}\left( #1 \middle| #2 \right)\mathclose{}}
}
\begin{document}
\[
\frac{1}{2} \prt{\sum_{i=1}^N \alpha_i y_i x_i}^2 + \frac{1}{2} \left(\sum_{i=1}^N \alpha_i y_i x_i\right)^2
\]
\end{document}
答案1
上标为\mathclose{}
。
您可能用它mleftright
来避免多余的空格,但我相信有更好的方法来解决这个问题。
您似乎期望代码为\prt{x}
或\prt{x}[y]
,对于后一种情况的条件概率。我相信诸如
\prt{x} \prt{x | y}
会更好。另外,我认为自动调整大小不是最好的方法:您可以清楚地看到图像中的上标太高了。
\documentclass{article}
\usepackage{amsmath,mleftright}
\NewDocumentCommand{\prt}{s o >{\SplitArgument{1}{|}}m}{%
\operatorname{P}%
\IfBooleanTF{#1}{% * means automatic sizing
\mleft(\makeprt{\;\middle|\;}#3\mright)%
}{% no automatic sizing
\IfNoValueTF{#2}{% no optional argument
(\makeprt{\mid}#3)%
}{%
\mathopen{#2(}\makeprt{\mathrel{#2|}}#3\mathclose{#2)}%
}%
}%
}
\NewDocumentCommand{\makeprt}{mmm}{%
#2\IfValueT{#3}{#1#3}%
}
\begin{document}
\begin{gather}
\prt{A}+\prt{A|B}+\prt{A}^2 \\
\prt[\big]{A}+\prt[\big]{A|B}+\prt[\big]{A}^2 \\
\prt[\bigg]{\frac{A}{2}}+\prt[\bigg]{\frac{A}{2}|B}+\prt[\bigg]{\frac{A}{2}}^2 \\
\frac{1}{2} \prt[\bigg]{\,\sum_{i=1}^N \alpha_i y_i x_i}^2 \\
\frac{1}{2} \prt*{\sum_{i=1}^N \alpha_i y_i x_i}^{\!2}
+\frac{1}{2} \prt*{\sum_{i=1}^N \alpha_i y_i x_i|B}^{\!2}
\end{gather}
\end{document}
这边走你决定是否需要自动调整大小(通常不需要)。在某些情况下,需要进行小的间距调整,请查看代码。