\sum 类命令,其下方和旁边均有下标

\sum 类命令,其下方和旁边均有下标

https://tex.stackexchange.com/a/89448/37686,给出的最后一个选项(带有E = ...)产生了一个我想要重现的类似总和的表达式。

我如何定义一个命令(\sumn比如说),它的行为类似于显示模式,但在符号旁边\sum有一个额外的符号,以便n\sum

E = \sumn_{-\infty}^\infty f(x)

产生链接答案中给出的输出?

答案1

amsmath软件包已经提供了以下功能\sideset

\documentclass{article}
\usepackage{amsmath}

\newcommand{\vsum}[1]{%
  \sideset{}{_{#1}}\sum
}

\newcommand{\sumn}{\vsum{n}}

\begin{document}

\begin{align*}
  E &= \sumn_{0}^{\infty} f(n) \\
  F &= \vsum{m}_{-\infty}^{\infty} g(m) \\
  G &= \vsum{\text{Ridiculously long text}}_{i=0}^{n} h(i)
\end{align*}

\end{document}

在此处输入图片描述

答案2

建议\sumn使用来自的求和代码Werner 的回答在这里

我慷慨地赠送了一个可选参数,n如果省略则默认为该参数。

\documentclass[12pt]{article}

\newcommand{\sumn}[1][n]{%
  \sum_{-\infty}^{\infty}\mathop{}_{\mkern-5mu {#1}}%
}

\usepackage{mathtools}

\begin{document}
\begin{align*}
  E &= \sumn f(x) \\
  F &= \sumn[m] g(x) \\
  G &= \sumn[\text{Ridiculously long text}] h(x)   
\end{align*}
\end{document}

在此处输入图片描述

编辑- 扩大的视野:

\documentclass[12pt]{article}

\usepackage{xparse}
\NewDocumentCommand{\sumnimproved}{omm}{%
  \IfValueTF{#1}{%
    \sum\limits_{#2}^{#3}\mathop{}_{\mkern-5mu #1}%
  }{%
    \sum\limits_{#2}^{#3}%
  }%
}

\NewDocumentCommand{\sumn}{oD<>{-\infty}O{\infty}}{%
  \IfValueTF{#1}{%
    \sum\limits_{#2}^{#3}\mathop{}_{\mkern-5mu #1}%
  }{%
    \sum\limits_{#2}^{#3}%
  }%
}


\newcommand{\sumnbasic}[1][n]{%
  \sum_{-\infty}^{\infty}\mathop{}_{\mkern-5mu #1}
}

\usepackage{mathtools}

\begin{document}
\begin{align*}
  E &= \sumnbasic f(x) \\
  F &= \sumnbasic[m] g(x) \\
  G &= \sumnbasic[\text{Ridiculously long text}] h(x) 
  \\
  D &= \sumnimproved[n]{-\infty}{\infty} e(x) \\
  E &= \sumnimproved[n]{-\infty}{\infty} f(x) \\
  F &= \sumnimproved[m]{-1}{1} g(x) \\
  G &= \sumnimproved[\text{Ridiculously long text}]{k=0}{\infty} h(x) \\
  \\
  E &= \sumn[n] f(x) \\
  F &= \sumn[m]<a>[b] g(x) \\
  G &= \sumn[\text{Ridiculously long text}] h(x) 
\end{align*}
\end{document}

在此处输入图片描述

答案3

基本定义是

\newcommand*\sumn{\mathrlap{\mathord{\phantom{{}\sum}}_{m}}\sum\limits}

尽管它可能与下面的数学相冲突。

部分解决方案是使用正常参数

\newcommand*\sumn[3][m]{\sum\limits_{#2}^{#3}\mathord{\vphantom{\sum}}_{#1}}

有了它的力量xparse,它就变得简单了,尽管它看起来很长,因为我们必须定义新的参数。代码取自这个答案

\documentclass{scrartcl}
\usepackage{mathtools,amssymb,xparse}

\ExplSyntaxOn
\cs_new_protected:Npn \__xparse_count_type_k:w #1
 {
  \__xparse_single_token_check:n { #1 }
  \quark_if_recursion_tail_stop_do:Nn #1 { \__xparse_bad_arg_spec:wn }
  \__xparse_count_mandatory:N
 }
\cs_new_protected:Npn \__xparse_count_type_K:w #1 #2
 {
  \__xparse_single_token_check:n { #1 }
  \quark_if_recursion_tail_stop_do:nn { #2 } { \__xparse_bad_arg_spec:wn }
  \__xparse_count_mandatory:N
 }
\cs_new_protected:Npn \__xparse_add_type_k:w #1
 { \exp_args:NNo \__xparse_add_type_K:w #1 { \c__xparse_no_value_tl } }
\cs_new_protected:Npn \__xparse_add_type_K:w #1 #2
 {
  \__xparse_flush_m_args:
  \__xparse_add_grabber_optional:N K
  \tl_put_right:Nn \l__xparse_signature_tl { #1 { #2 } }
  \__xparse_prepare_signature:N
 }
\cs_new_protected:Npn \__xparse_add_expandable_type_k:w #1
 {
  \exp_args:NNo \__xparse_add_expandable_type_K:w #1 { \c__xparse_no_value_tl }
 }
\cs_new_protected_nopar:Npn \__xparse_add_expandable_type_K:w #1 #2
 {
  \__msg_kernel_error:nnx { xparse } { invalid-expandable-argument-type } { K }
  \__xparse_add_expandable_type_m:w % May be create this?
 }
\cs_new_protected:Npn \__xparse_grab_K:w #1 #2 #3 \l__xparse_args_tl
 {
  \__xparse_grab_K_aux:NnnNn #1 { #2 } { #3 } \cs_set_protected_nopar:Npn
   { _ignore_spaces }
 }
\cs_new_protected:Npn \__xparse_grab_K_long:w #1 #2 #3 \l__xparse_args_tl
 {
  \__xparse_grab_K_aux:NnnNn #1 { #2 } { #3 } \cs_set_protected:Npn
   { _ignore_spaces }
 }
\cs_new_protected:Npn \__xparse_grab_K_trailing:w #1 #2 #3 \l__xparse_args_tl
 {
  \__xparse_grab_K_aux:NnnNn #1 { #2 } { #3 } \cs_set_protected_nopar:Npn
   { _ignore_spaces }
 }
\cs_new_protected:Npn \__xparse_grab_K_long_trailing:w #1 #2 #3 \l__xparse_args_tl
 {
  \__xparse_grab_K_aux:NnnNn #1 { #2 } { #3 } \cs_set_protected:Npn
   { _ignore_spaces }
 }
\cs_new_protected:Npn \__xparse_grab_K_aux:NnnNn #1 #2 #3 #4 #5
 {
  \exp_after:wN #4 \l__xparse_fn_tl ##1
   {
    \__xparse_add_arg:n { ##1 }
    #3 \l__xparse_args_tl
   }    
  \use:c { peek_meaning_remove #5 :NTF } #1
   { \l__xparse_fn_tl }
   {
    \__xparse_add_arg:n { #2 }
    #3 \l__xparse_args_tl
   }
 }

\prop_put:Nnn \c__xparse_shorthands_prop { a } { k \sb }
\prop_put:Nnn \c__xparse_shorthands_prop { b } { k \sp }
\prop_put:Nnn \c__xparse_shorthands_prop { A } { K \sb }
\prop_put:Nnn \c__xparse_shorthands_prop { B } { K \sp }
\ExplSyntaxOff

\NewDocumentCommand\sumn{ab}
  {\sum\limits\IfValueT{#1}{_{#1}}\IfValueT{#2}{^{#2}}%
   \mkern-2mu\mathord{\vphantom{\sum}}_{m}}

\begin{document}
\[
  E = \sumn_{-\infty}^\infty f(x)
\]
\end{document}

如果下标或上标很长,那么就会将最m远处移到右边,这种情况下的解决方案是检查两个脚本的长度并据此采取行动,但我现在不这么做,除非真的有必要。

相关内容