在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
远处移到右边,这种情况下的解决方案是检查两个脚本的长度并据此采取行动,但我现在不这么做,除非真的有必要。