
Я хотел бы определить макрос, который расширяется до того же символа, что и , \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 обманывает результат в displaystyle, используя a \mathord
вместо a \mathop
, но, конечно, интервалы до и после нужно скорректировать, чтобы они соответствовали правильному интервалу (пример 2).
Примеры 4 и 5 являются вариациями подхода, предложенного автором. В примере 4 я добавляю пред- и пост-материал внутри его скобок. Однако, в зависимости от характера материала, этот подход может быть недоступен для использования.
Пример 5 представляет собой подход OP, за исключением того, что были добавлены тонкие пробелы, поскольку фигурные скобки исключают возможность \mathop
расширения суммы за пределы фигурных скобок.
Фактически, это ответ на вопрос автора: «Есть ли ситуации, когда интервал может быть нарушен дополнительной группой вокруг \sum
?», потому что без тонких пробелов в примере 5 интервал в подходе автора будет неправильным.
\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
то же самое, что \sum
и определено в amsmath
. Затем я переопределяю, \sum@
чтобы сделать \sum@saved
, если переключатель установлен в false, где \sum@saved
то же самое, что и исходный \sum@
. Если переключатель установлен в true, вместо этого \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]
. (Я не уверен, какой эффект имеет пробел ^{}
.) Однако для этого нужно было бы призвать кого-то с большим тексом, чем я!
Например, минималистичный код
\begin{align*}
a &+ \sumt[n-1]{i=1} i = 3\\
a &+ \textstyle\sum_{i=1}^{n-1} i = 3
\end{align*}
получается следующее изображение.