数学运算符始终以文本样式显示

数学运算符始终以文本样式显示

我想定义一个宏,即使在显示环境中使用,它也会扩展为相同的符号,\sum但使用内联样式( )。\textstyle

以下是我得到的结果:

\newcommand{\Alt}{\@ifstar{\sum}{{\textstyle\sum}}}

带星号的版本允许我在特殊情况下选择性地启用 displaystyle。但这并不是强制要求。

如果我没有将其包装在宏中,我会通过执行以下操作来实现这一点

bla {\textstyle \sum_a^b bla} bla

我对在宏定义中包装一个组感到有点不舒服\sum,仅仅是为了限制范围\textstyle

我的问题是:是否存在周围额外的组可以打破间距的情况\sum

答案1

根据评论讨论,我提出了与以下答案类似的建议:大运营商是如何定义的?,形式为\DeclareMathOperator*{\barr}{\textstyle\sum}。但是,这种方法仍然将 displaystyle 限制置于总和的上方和下方(例如 1)。尽管如此,我们知道 textstyle 中提供的间距\barr(例如 2)是 OP 寻求的正确间距。

我能够使用不同的方法在例 3-5 中重新创建间距和下标/上标位置。例 3 通过使用 a\mathord而不是 a 来欺骗 displaystyle 中的结果\mathop,但当然,前后间距需要调整以匹配正确的(例 2)间距。

例 4 和例 5 是原帖作者所提方法的变种。在例 4 中,我在他的括号内添加了前后材料。但是,根据材料的性质,这种方法可能无法使用。

例 5 是 OP 的方法,只是添加了细空格,因为括号消除了总和的\mathop范围延伸到括号之外的能力。

这实际上回答了 OP 的问题“是否存在间距可以被周围的额外组打破的情况\sum?”,因为如果没有例 5 中的细间距,OP 方法的间距将不正确。

\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator*{\barr}{\textstyle\sum}
\begin{document}
\centering
\verb|\barr| in \verb|\displaystyle|:
\[
A\barr_{i=3}^{6}B
\]

\verb|\barr| in \verb|\textstyle|:

\medskip inline: \(A A\barr_{i=3}^{6}B B\)

\verb|\mathord| with thin spaces added
\[
A A\,\mathord{\textstyle\sum}_{i=3}^6\, B B
\]

OP's original approach \textit{if} pre- and post- content embraced
\[
A {A \textstyle \sum_{i=3}^6 B} B
\]

OP's original approach, with no embraced pre- and post- content, but thin spaces added

\[
A A {\,\textstyle \sum_{i=3}^6\,} B B
\]
\end{document}

在此处输入图片描述

答案2

您可能希望对此采取一种抽象的方法;我们可以利用这样一个事实,即通过在名称末尾amsmath添加表示符号的方式,以统一的方式改变所有采用极限的运算符名称。@

\documentclass{article}
\usepackage{amsmath,etoolbox}
\makeatletter
\newtoggle{reducedop}
\newcommand{\reduceoperatorsize}[1]{%
  \csletcs{#1saved}{#1}%
  \csletcs{#1@saved}{#1@}%
  \@namedef{#1}{%
    \@ifstar
      {\togglefalse{reducedop}\@nameuse{#1saved}}%
      {\toggletrue{reducedop}\@nameuse{#1saved}}%
  }
  \@namedef{#1@}{%
    \iftoggle{reducedop}
      {\reduced@operator{#1}}
      {\@nameuse{#1@saved}}
  }%
}
\newcommand{\reduced@operator}[1]{%
  \mathop{\mathpalette\reduced@operator@i{#1}\relax}%
}
\newcommand\reduced@operator@i[2]{%
  \ifx#1\displaystyle\textstyle\else#1\fi
  \csname #2@saved\endcsname
}
\makeatother

\reduceoperatorsize{sum}

\begin{document}
$\sum*_{k=1}^n$\quad$\sum_{k=1}^n$\quad$\sum\limits_{k=1}^n$
\[
\sum*_{k=1}^n\quad\sum_{k=1}^{n} k^2=\frac{n(n+1)(2n+1)}{6}
\]
\end{document}

第一句是为了表示尊重惯常行为。

在此处输入图片描述

amsmath包重新定义\sum

\let\sum@\sum
\def\sum{\DOTSB\sum@\slimits@}

并对\coprod\bigvee\bigwedge\biguplus\bigcap\bigcup\prod、和执行相同操作。这使得符号“点感知”并尊重或选项\bigotimes,因为\bigoplus\bigodot\bigsqcupsumlimitsnosumlimits

\DeclareOption{sumlimits}{\let\slimits@\displaylimits}
\DeclareOption{nosumlimits}{\let\slimits@\nolimits}

基于此,我重新定义\sum

\togglefalse{reducedop}\sumsaved

如果\sum*发现并且

\toggletrue{reducedop}\sumsaved

否则。这里与 中的定义\sumsaved相同。然后我重新定义如果切换设置为 false 则执行,其中 和原来的 相同。如果切换设置为 true ,则改为执行 。在其中我检查样式:如果是,则使用,否则使用当前样式和排版。周围的内容与之前一样。\sumamsmath\sum@\sum@saved\sum@saved\sum@\mathop{\mathpalette\reduced@operator@i{sum}}\mathpalette\displaystyle\textstyle\sum@saved\mathop\slimits@

答案3

我知道这是一篇旧帖子,但我今天读到了它。我使用的是这个:

\newcommand{\sumt}[2][]{
    \ifthenelse{\isempty{#1}}
    {\textstyle \sum_{#2}      \displaystyle}
    {\textstyle \sum_{#2}^{#1} \displaystyle}
}

请注意,它需要\usepackage{xifthen}

然后,例如,我调用\sumt[n-1]{i=1} k_i来获取与我从 中获得的相同的结果\sum_{i=1}^{n-1} k_i。请注意,这确实强制要求之后的所有内容都处于显示模式,这可能会或可能不会没有帮助。一旦 用\int和做类似的事情\prod。请注意,与通常的相比,这是倒写的。

理想情况下,我会将两个参数都设为可选参数,并且顺序为\sum[lower][upper]。 (我不确定空白^{}会产生什么影响。)不过,需要有人比我更擅长 tex 才能做到这一点!


例如,极简代码

\begin{align*}
    a &+ \sumt[n-1]{i=1} i = 3\\
    a &+ \textstyle\sum_{i=1}^{n-1} i = 3
\end{align*}

生成下面的图像。

在此处输入图片描述

相关内容