Ich möchte ein Makro definieren, das sich zum gleichen Symbol erweitert, \sum
aber den Inline-Stil ( \textstyle
) verwendet, auch wenn es in einer angezeigten Umgebung verwendet wird.
Das habe ich bekommen:
\newcommand{\Alt}{\@ifstar{\sum}{{\textstyle\sum}}}
Mit der markierten Version kann ich den Anzeigestil in Ausnahmesituationen selektiv aktivieren. Dies ist jedoch keine zwingende Voraussetzung.
Wenn ich dies nicht in ein Makro eingebunden hätte, hätte ich es folgendermaßen erreicht:
bla {\textstyle \sum_a^b bla} bla
\sum
Ich fühle mich nicht ganz wohl dabei , in der Makrodefinition eine Gruppe einzuschließen , nur um den Umfang einzuschränken \textstyle
.
Meine Frage ist: Gibt es Situationen, in denen der Abstand durch die zusätzliche Gruppe um ihn herum unterbrochen werden kann \sum
?
Antwort1
Basierend auf der Kommentardiskussion hatte ich etwas Ähnliches wie die Antwort unter vorgeschlagenWie werden große Betreiber definiert?, in der Form von \DeclareMathOperator*{\barr}{\textstyle\sum}
. Dieser Ansatz setzt jedoch immer noch Anzeigestilgrenzen oberhalb und unterhalb der Summe (Beispiel 1). Dennoch wissen wir, dass der von \barr
in Textstil bereitgestellte Abstand (Beispiel 2) der richtige Abstand ist, den der OP sucht.
Ich konnte diesen Abstand und die Platzierung von Hoch- und Tiefstellung in Beispiel 3-5 mithilfe verschiedener Ansätze nachbilden. Beispiel 3 manipuliert das Ergebnis im Anzeigestil, indem ein \mathord
anstelle von verwendet wird \mathop
, aber natürlich muss der Abstand vor und nach - angepasst werden, um dem richtigen Abstand (Beispiel 2) zu entsprechen.
Bsp. 4 und 5 sind Variationen des vom OP vorgeschlagenen Ansatzes. In Bsp. 4 füge ich innerhalb seiner Klammern Vor- und Nachmaterial hinzu. Je nach Art des Materials ist dieser Ansatz jedoch möglicherweise nicht verfügbar.
Beispiel 5 ist der Ansatz des OP, außer dass schmale Leerzeichen hinzugefügt wurden, da die Klammern die Möglichkeit der Summenformel aufheben, \mathop
ihre Reichweite über die Klammern hinaus auszudehnen.
Dies beantwortet tatsächlich die Frage des OP: „Gibt es Situationen, in denen die Abstände durch die zusätzliche Gruppe um unterbrochen werden können \sum
?“, denn ohne die schmalen Abstände in Beispiel 5 wären die Abstände im Ansatz des OP nicht korrekt.
\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}
Antwort2
Möglicherweise möchten Sie diesbezüglich einen abstrakten Ansatz wählen. Wir können die Tatsache ausnutzen, dass amsmath
sich alle Operatornamen, die Grenzwerte annehmen, auf einheitliche Weise ändern, indem wir @
am Ende des Namens das Symbol hinzufügen, das die Bedeutung hat.
\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}
Die erste Zeile soll zeigen, dass das übliche Verhalten respektiert wird.
Das amsmath
Paket definiert neu \sum
mit
\let\sum@\sum
\def\sum{\DOTSB\sum@\slimits@}
und macht dasselbe für \coprod
, \bigvee
, \bigwedge
, \biguplus
, \bigcap
, , \bigcup
, \prod
, \bigotimes
, \bigoplus
, \bigodot
und \bigsqcup
. Dadurch werden die Symbole „punktbewusst“ und respektieren die Option sumlimits
oder nosumlimits
aufgrund von
\DeclareOption{sumlimits}{\let\slimits@\displaylimits}
\DeclareOption{nosumlimits}{\let\slimits@\nolimits}
Auf dieser Grundlage definiere \sum
ich
\togglefalse{reducedop}\sumsaved
wenn \sum*
gefunden wird und
\toggletrue{reducedop}\sumsaved
andernfalls. Hier \sumsaved
ist das Gleiche wie \sum
in definiert amsmath
. Dann definiere ich neu, \sum@
um zu tun \sum@saved
, wenn der Umschalter auf „false“ gesetzt ist, wobei \sum@saved
das Gleiche wie das Original ist \sum@
. Wenn der Umschalter auf „true“ gesetzt ist, \mathop{\mathpalette\reduced@operator@i{sum}}
wird stattdessen ausgeführt. Innerhalb \mathpalette
überprüfe ich den Stil: Wenn es ist \displaystyle
, verwende ich \textstyle
, andernfalls den aktuellen Stil und Schriftsatz \sum@saved
. Auf die Umgebung \mathop
folgt \slimits@
wie zuvor „“.
Antwort3
Ich weiß, das ist ein alter Beitrag, aber ich habe ihn heute gelesen. Ich verwende Folgendes:
\newcommand{\sumt}[2][]{
\ifthenelse{\isempty{#1}}
{\textstyle \sum_{#2} \displaystyle}
{\textstyle \sum_{#2}^{#1} \displaystyle}
}
Beachten Sie, dass es erforderlich ist \usepackage{xifthen}
.
Ich rufe dann beispielsweise auf, \sumt[n-1]{i=1} k_i
um dasselbe zu erhalten, was ich von erhalten hätte \sum_{i=1}^{n-1} k_i
. Beachten Sie, dass dies erzwingt, dass alles danach im Anzeigemodus ist, was möglicherweise nicht hilfreich ist. Einmal mache ich etwas Ähnliches mit \int
und \prod
. Beachten Sie, dass dies im Vergleich zum Üblichen rückwärts geschrieben ist.
Idealerweise hätte ich beide Argumente optional und in der Reihenfolge \sum[lower][upper]
. (Ich bin nicht sicher, welche Wirkung das Leerzeichen ^{}
hat.) Dafür müsste allerdings jemand mit größeren Tex-Kenntnissen als ich herbeigerufen werden!
Zum Beispiel der minimalistische Code
\begin{align*}
a &+ \sumt[n-1]{i=1} i = 3\\
a &+ \textstyle\sum_{i=1}^{n-1} i = 3
\end{align*}
erzeugt das folgende Bild.