表示された環境で使用する場合でも、\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)。それでも、\barr
textstyle で によって提供される間隔 (例 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
\bigsqcup
sumlimits
nosumlimits
\DeclareOption{sumlimits}{\let\slimits@\displaylimits}
\DeclareOption{nosumlimits}{\let\slimits@\nolimits}
これを踏まえて、私は\sum
次のように再定義します
\togglefalse{reducedop}\sumsaved
が\sum*
見つかり、
\toggletrue{reducedop}\sumsaved
それ以外の場合。ここでは、は で定義されているの\sumsaved
と同じです。次に、トグルが false に設定されている場合に を実行するように を再定義します。ここで、 は元の と同じです。トグルが true に設定されている場合、代わりにが実行されます。 内では、スタイルをチェックします。 である場合は を使用し、そうでない場合は現在のスタイルを使用して とタイプセットします。 の周囲には、前と同じように が続きます。\sum
amsmath
\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*}
次の画像が生成されます。