上标切换为 `\displaystyle` (自动 `\limits`)

上标切换为 `\displaystyle` (自动 `\limits`)

我必须在指数函数中使用大量的和,例如

在此处输入图片描述

我希望将总和的求和指标显示在总和下方,以提高可读性。我知道我可以通过放置 来实现单个总和\limits。是否还存在适用于所有数学环境的全局解决方案(当然除了内联数学)?


举例说明为什么我更喜欢使用指数而不是指数函数。
这个: 在此处输入图片描述 使用的水平空间比这更少: 在此处输入图片描述 但在我看来,它同样具有可读性。然而,第二种情况将迫使我添加额外的换行符或定义进一步的缩写。

答案1

仅改变的限制\sum

您可以使用内部条件\if@displayamsmath测试是否\limits应该插入。下面,我\sum通过添加\if@display\limits\fi其定义来重新定义。

\documentclass{article}    

\usepackage{amsmath}

\makeatletter %% <- make @ usable in command names
  \renewcommand*\sum{\DOTSB\sum@\if@display\limits\fi}
\makeatother  %% <- revert @

\begin{document}

Lorem $e^{\sum_{n=1}^\infty \frac1n}$ ipsum

\[
    e^{\sum_{n=1}^\infty \frac1n}
\]

\begin{align}
    e^{\sum_{n=1}^\infty \frac1n}&
    \\
    &e^{\sum_{n=1}^\infty \frac1n}
\end{align}

Lorem $e^{\sum_{n=1}^\infty \frac1n}$ ipsum

\end{document}

输出

通过以显而易见的方式进行更改,可以将其调整为适用于其他运算符,例如\prod\coprod\bigcup\bigotimes等。如果您有一个运算符,例如 ,而不存在,则可以使用以下命令创建它\sum@\myoperator\myoperator@

\makeatletter %% <- remove if you paste the next line between \makeatletter/-other
  \let\myoperator@\myoperator
\makeatother  %% <- remove this one too, then

并按上述步骤进行。

选择:

我原本有另一个解决方案,我对此非常满意,它使用\everydisplay。此寄存器的内容插入到每个显示数学环境的开头,我使用它\sum通过包含 来重新定义\limits。它无需amsmath(每个人都应该使用)即可工作,但除此之外,我认为它已被上述解决方案取代。

不管怎样,它在这里。以下内容将替换上面的\makeatletter-\makeatother块。

\makeatletter %% <- make @ usable in command names
  \let\sum@beforelimitmodification\sum
  \everydisplay\expandafter{\the\everydisplay                %% <- old \everydisplay
    \renewcommand*\sum{\sum@beforelimitmodification\limits}% %% <- new addition
  }
\makeatother  %% <- revert @

更改所有操作员的限制:

\amsmath我刚刚想到了另一种完全不同的方法,它可以同时影响所有大型运营商(兼容)。

使用amsmathloaded,所有大运算符(积分除外)都包含\slimits@在其定义中,它只是扩展为\displaylimits(在其他数学样式中,它的作用与\limitsin相同\displaystyle,不执行任何操作)。通过重新定义它,您可以为显示环境中使用的所有运算符赋予限制。

\documentclass{article}

\usepackage{amsmath}

\makeatletter %% <- make @ usable in command names
  \renewcommand*\slimits@{\if@display\limits\else\displaylimits\fi}
\makeatother  %% <- revert @

\begin{document}

Lorem $e^{\sum_{n=1}^\infty \frac1n}$ ipsum

\[
    e^{\sum_{n=1}^\infty \frac1n}
\]

\begin{align}
    e^{\sum_{n=1}^\infty \frac1n}&
    \\
    &e^{\sum_{n=1}^\infty \frac1n}
\end{align}

Lorem $e^{\sum_{n=1}^\infty \frac1n}$ ipsum

\end{document}

↑↑输出看起来相同,请参见上图↑↑

如果这对某些自定义运算符不起作用,比如说\myoperator,你应该添加\slimits@它的定义,如下所示:

\makeatletter %% <- make @ usable in command names
  \let\myoperator@beforelimitchange
  \renewcommand*\myoperator{\DOTSB\myoperator@beforelimitchange\slimits@}
\makeatother  %% <- revert @

答案2

我对乳胶还很陌生,所以如果我错了,请原谅我并纠正我。

\sum_{min}^{max}当在生成的文本中使用该命令时\displaystyle,会按照您的需要显示符号,其中的索引位于大写希腊字母 sigma 的上方和下方。 https://www.sharelatex.com/learn/Integrals,_sums_and_limits

但是,即使您的整个方程式中\displaystyle有些部分仍可能以 呈现\textstyle。当\texstyle\sum_{min}^{max}调用 时,结果是带有相邻索引的 sigma 符号。要强制求和符号始终具有 sigma 上方和下方的索引,您必须强制命令\sum\displaystyle\sum。如果您只有一两个求和,那么实现此目的的最简单方法是添加命令\displaystyle。但是,当您拥有大量科学文献时,这会变得乏味。

如果您希望所有总和都有上下指标(就像您在疯狂的方程式示例中所见的那样),最简单的方法是指示 latex 始终渲染\sum\dispaystyle\sum。这可以通过将其重新定义\sum为来实现\displaystyle\sum,方法是将其添加到您的序言中:

\let\oldsum\sum
\renewcommand{\sum}{\displaystyle\oldsum}

(归功于这个家伙https://latex.org/forum/viewtopic.php?t=14345)。

请注意,即使您添加内联数学运算,此解决方案也会强制\sum始终处于中,\display因此此解决方案并不完美。不过,对于内联情况,您仍然可以调用旧版本\sum(即)。\oldsum

同样的事情发生在积分和乘积上,同样的解决方案应该有效(虽然我没有在命令之外的任何东西上测试它\sum

\let\oldsum\sum
\renewcommand{\sum}{\displaystyle\oldsum}
$$
y = \frac{\sum{x}}{\sum_{i}^{\infty}{x_i}}
\cdot
\frac{\oldsum{x}}{\oldsum_{i}^{\infty}{x_i}}
$$

显示为

在此处输入图片描述

为了完整起见,我应该提到,使用\limits上面引用的 sharelatex 文章中提到的命令可以实现相同的效果。

相关内容