数学演算子は常にテキストスタイル内にあります

数学演算子は常にテキストスタイル内にあります

表示された環境で使用する場合でも、\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)。それでも、\barrtextstyle で によって提供される間隔 (例 2) が、OP が求めている適切な間隔であることがわかっています。

別のアプローチを使用して、例 3 ~ 5 の間隔と上付き/下付き文字の配置を再現できました。例 3 では、 の\mathord代わりにを使用して 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*}

次の画像が生成されます。

ここに画像の説明を入力してください

関連情報