數學運算子始終為文字樣式

數學運算子始終為文字樣式

我想定義一個宏,即使在顯示環境中使用,它也可以擴展為相同的符號,\sum但使用內聯樣式 ( )。\textstyle

這是我得到的:

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

帶有星號的版本允許我在特殊情況下選擇性地啟用顯示樣式。然而,這並不是一個強烈的要求。

如果我沒有將其包裝在巨集中,我會透過執行以下操作來完成此操作

bla {\textstyle \sum_a^b bla} bla

我對在宏定義中包裝\sum在一個組中感到有點不舒服,只是為了限制\textstyle.

我的問題是:是否存在間距會被周圍額外的組打破的情況\sum

答案1

根據評論討論,我提出了類似答案的建議大營運商是如何定義的?,形式為\DeclareMathOperator*{\barr}{\textstyle\sum}。然而,該方法仍將顯示樣式限制置於總和之上和之下(例如 1)。儘管如此,我們知道 textstyle (例如 2)中提供的間距\barr是 OP 尋求的正確間距。

我能夠在 ex 中重新建立間距和子/上標位置。 3-5,使用不同的方法。前任。 3 透過使用 a\mathord代替 a 來欺騙顯示樣式中的結果\mathop,但當然,前後間距需要調整以符合正確的(例如 2)間距。

前任。圖 4 和圖 5 是 OP 提議的方法的變體。在前。 4.我在他的大括號內添加了前後材料。然而,根據材料的性質,這種方法可能無法使用。

前任。 5 是 OP 的方法,只是添加了稀疏的空格,因為大括號消除了總和的\mathopedness 將其範圍擴展到大括號之外的能力。

這實際上回答了OP的問題“是否存在間距可以被周圍額外的組打破的情況\sum?”,因為沒有 ex 中的稀疏空格。 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和執行相同的操作\bigsqcup。這使得符號“點感知”並尊重sumlimitsornosumlimits選項,因為

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

基於此,我重新定義\sum

\togglefalse{reducedop}\sumsaved

如果\sum*找到並且

\toggletrue{reducedop}\sumsaved

否則。這裡與 中的定義\sumsaved相同。然後我重新定義do如果切換設定為 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。請注意,這確實強制之後的所有內容都處於顯示模式,這可能有也可能沒有幫助。一旦 an 用\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*}

產生以下影像。

在此輸入影像描述

相關內容