如何在其参数中定义一个带有 \mathclap 的新数学运算符?

如何在其参数中定义一个带有 \mathclap 的新数学运算符?

我想用 定义一个数学运算符\mathop,并希望将其参数自动放入零宽度框中\mathclap。定义一个运算符,例如\sum,用\newcommand

\newcommand{\Sum}[2]{\sum_{\mathclap{#1}}^{\mathclap{#2}}}

可以,但是这会迫使我每次都提供两个参数。如果我使用可选参数定义新命令,这不会解决问题,因为仍然需要提供强制参数(在某些情况下我可能只需要可选参数)。Beyond 不需要特定的参数\mathop顺序,而 while\newcommand需要。

有任何想法吗?

答案1

_你可以手动查看^。我不确定这是不是一个好主意,但

在此处输入图片描述

\documentclass{article}
\usepackage{mathtools}

\makeatletter
\def\Sum{%
  \let\Sum@subarg\relax
  \let\Sum@suparg\relax
  \Sum@testsub}

\def\Sum@sub_#1{%
  \def\Sum@subarg{#1}%
  \ifx\Sum@suparg\relax
   \expandafter\Sum@testsup
  \else
  \expandafter\Sum@doit
  \fi}

\def\Sum@sup^#1{%
  \def\Sum@suparg{#1}%
  \Sum@testsub@b
}


\def\Sum@testsup{%
  \let\Sum@suparg\@empty
  \@ifnextchar^\Sum@sup\Sum@testsub}

\def\Sum@testsup@b{%
  \let\Sum@suparg\@empty
  \@ifnextchar^\Sum@sup\Sum@doit}

\def\Sum@testsub{%
  \@ifnextchar_\Sum@sub\Sum@testsup@b}

\def\Sum@testsub@b{%
  \@ifnextchar_\Sum@sub\Sum@doit}


\def\Sum@doit{%
\sum_{\mathclap{\Sum@subarg}}^{\mathclap{\Sum@suparg}}}

\makeatletter


\begin{document}

\[\sum_{aaaaa+aaaaa}^{bbbbbb}x_i\]
\[\Sum_{aaaaa+aaaaa}^{bbbbbb}x_i\]
\[\Sum^{bbbbbb}_{aaaaa+aaaaa}x_i\]
\[\Sum_{aaaaa+aaaaa}x_i\]
\[\Sum^{bbbbbb}x_i\]
\[\Sum x_i\]

\end{document}

相关内容