考虑以下 MWE,它使用\sideset
AMS 数学来排版具有上限的素数总和:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
\sideset{}{'}\sum_{i=0}^m x = \sum_{i=-1}^{m} x
\]
\end{document}
显然,m
对于带撇号和不带撇号的和,和的上限的垂直位置是不同的。在上限不影响由 sideset 引入的限制的情况下,是否有一种简单的方法可以使这两种排版一致?
答案1
不漂亮:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
\mathop{\smash{\sideset{}{'}\sum}\vphantom{\sum}}\limits_{i=0}^m x = \sum_{i=-1}^{m} x
\]
\end{document}
相同的想法,但更好地整合了amsmath
:
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\psum}{%
\DOTSB\mathop{%
\smash{\sideset{}{'}\sum}%
\vphantom{\sum}%
}\slimits@
}
\makeatother
\begin{document}
\[
\psum_{i=0}^m x = \sum_{i=-1}^{m} x
\]
\end{document}
一个更复杂的解决方案,让 TeX 相信求和符号具有正确的宽度。
\documentclass{article}
\usepackage{amsmath,xparse}
\makeatletter
\newcommand{\psum}{\DOTSB\psum@}
\NewDocumentCommand{\psum@}{e{_^}}{%
\sbox\z@{$\m@th\displaystyle'$}\kern-\wd\z@\!%
\mathop{%
\kern\wd\z@
\smash{\sideset{}{'}\sum}%
\vphantom{\sum}%
}\psum@scripts#1%
}
\NewDocumentCommand{\psum@scripts}{mm}{%
\slimits@\IfValueT{#1}{_{#1}}\IfValueT{#2}{^{#2}}%
}
\makeatother
\begin{document}
\begin{gather*}
\psum_{i=0}^m x = \sum_{i=-1}^{m} x
\\
\sum_{i=-1}^{m} x = \psum^m_{i=0} x
\end{gather*}
\end{document}
在示例中,您可以看到可以按任意顺序输入下标和上标。
更新
随着 的版本更新xparse
,上述代码应该改变。
\documentclass{article}
\usepackage{amsmath,xparse}
\makeatletter
\newcommand{\psum}{\DOTSB\psum@}
\NewDocumentCommand{\psum@}{e{_^}}{%
\sbox\z@{$\m@th\displaystyle'$}\kern-\wd\z@\!%
\mathop{%
\kern\wd\z@
\smash{\sideset{}{'}\sum}%
\vphantom{\sum}%
}\slimits@\IfValueT{#1}{_{#1}}\IfValueT{#2}{^{#2}}%
}
\makeatother
\begin{document}
\begin{gather*}
\psum_{i=0}^m x = \sum_{i=-1}^{m} x
\\
\sum_{i=-1}^{m} x = \psum^m_{i=0} x
\end{gather*}
\end{document}