我想用 定义一个数学运算符\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}