带括号的 `\sideset`

带括号的 `\sideset`

我现在正尝试定义一些类似于的“修饰运算符” 尖锐总和 通过多种方式,我想找到我对装饰运算符的偏好。

一种简单的“准备”方法是使用\sidesetamsmath 命令,尽管限制样式下标的位置可能取决于个人喜好。几个月前,我的朋友告诉我一个\sideset 与括号的冲突,例如代码

\[
\left|\sideset{}{^{\smash{\sharp}}}\sum_{x<n\le x+y}\chi(n)a(n)\right|
\]

给出 坠毁侧设置 因此极限式下标x<n\le x+y和模数符号\left| 互相冲突。

我认为这是因为\sideset将数学运算符转换为普通数学原子。因此,我尝试使用\mathop如下方法:

\[
\left|\mathop{\sideset{}{^{\smash{\sharp}}}\sum}
_{x<n\le x+y}\chi(n)a(n)\right|
\quad
\left|\mathop{\sideset{}{^{\smash{\sharp}}}\sum
_{x<n\le x+y}}\chi(n)a(n)\right|
\]

这给出 与 mathop 的 sideset

我仍然想知道为什么\sideset在某些括号中表现不佳,以及为什么上述两个应用程序会\mathop产生如此不同的结果。对于我(作为 LaTeX 的初学者)来说,我的后一个\mathop应用程序似乎更有可能避免冲突,但事实却相反......

因此我想问一下:

  1. 上述\sideset和 括号冲突的原因是什么?我的 用法是否\sideset错误?或者这是 的一个“错误” \sideset
  2. 如果这是的一个错误\sideset,那么有什么好方法可以避免它?
  3. 为什么上述两次应用\mathop会产生不同的结果?

注意:根据 egreg 的回答,我发现\sideset如果限制样式的下标太长,则会发生上述冲突,因为移位数学运算符“太多”。现在我们让成为由于 egreg 而\egregsideset更正的版本。然后\sideset

\[
\fbox{$\displaystyle%
\sideset{}{^\text{quite very very very long}}\sum$%
}
\fbox{$\displaystyle%
\egregsideset{}{^\text{quite very very very long}}\sum$%
}
\]

给出

比较边集

虽然我不确定哪一个更好,但我猜原文\sideset在这方面更自然。因此,我添加了一个新问题

  1. 我们该如何修改\egregsideset以避免上述的差异\sideset

答案1

这是 的一个错误\sideset。如果我尝试

\[
\left|\sideset{}{}\sum\right|\showlists
\]

我明白了

\mathinner
.\left"26A30C
.\mathord
..\hbox(0.0+0.0)x0.0
.\mathop
..\kern 0.0
..\mathord
...\hbox(10.50006+5.50006)x0.0
....\mathon
....\vbox(10.50006+5.50006)x0.0
....\mathoff
..\mathord
...\hbox(10.50006+5.50006)x14.44447
....\mathon
....\hbox(1.0+15.00012)x14.44447, shifted -9.50006
.....\OMX/cmex/m/n/10 X
....\mathoff
.\right"26A30C

本质上打开 奥德 操作 关闭. 这与\left|\sum\right|那件事相反

\mathinner
.\left"26A30C
.\mathop
..\fam3 P
.\right"26A30C

所以打开 操作 关闭. 视觉对比

在此处输入图片描述

显示的问题与您的问题完全不同:右边的总和太多。

\sideset但是,如果我将的定义改为

\makeatletter
\renewcommand{\sideset}[3]{%
  \@mathmeasure\z@\displaystyle{#3}%
  \global\setbox\@ne\vbox to\ht\z@{}\dp\@ne\dp\z@
  \setbox\tw@\box\@ne
  \@mathmeasure4\displaystyle{\copy\tw@#1}%
  \@mathmeasure6\displaystyle{#3\nolimits#2}%
  \dimen@-\wd6 \advance\dimen@\wd4 \advance\dimen@\wd\z@
  \mathop{\hbox to\dimen@{}}\!% <--- was only \hbox to\dimen@{}
  \mathop{\kern-\dimen@\box4\box6}%
}
\makeatother

因此 TeX 将\mathop在执行任何操作之前看到一个,并且两个连续的操作原子被取消\!,我得到了预期的结果:

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\renewcommand{\sideset}[3]{%
  \@mathmeasure\z@\displaystyle{#3}%
  \global\setbox\@ne\vbox to\ht\z@{}\dp\@ne\dp\z@
  \setbox\tw@\box\@ne
  \@mathmeasure4\displaystyle{\copy\tw@#1}%
  \@mathmeasure6\displaystyle{#3\nolimits#2}%
  \dimen@-\wd6 \advance\dimen@\wd4 \advance\dimen@\wd\z@
  \mathop{\hbox to\dimen@{}}\!%
  \mathop{\kern-\dimen@\box4\box6}%
}
\makeatother

\begin{document}
\begin{gather*}
\left|\sideset{}{}\sum\right|%\showlists
\\
\left|\sum\right|
\\
\left|\sideset{}{^{\smash{\sharp}}}\sum_{x<n\le x+y}\chi(n)a(n)\right|
\\
\left|\sum_{x<n\le x+y}\chi(n)a(n)\right|
\end{gather*}

\end{document}

在此处输入图片描述

我不太确定这个问题是否可以修复,因为它可能会改变现有的文档。

但是,的实现\sideset从一开始就存在错误,您可以使用它进行测试

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
\left|\sideset{}{^\text{quite very very very long}}\sum_{aaaaaaaaaaaaaaaaaa}\right|
\]
\end{document}

(原来的\sideset)。

在此处输入图片描述

我可以提供一个不同的实施方案:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\makeatletter
\NewDocumentCommand{\xsideset}{mmme{_^}}{%
  \mathop{%
    % half width of #3
    \settowidth{\dimen0}{$\m@th\displaystyle#3$}%
    \dimen0=.5\dimen0
    % half width of #3 with subscripts or superscripts,
    % half width of #3 removed
    \settowidth{\dimen2}{$%
      \m@th\displaystyle#3%
      \IfValueT{#4}{_{#4}}%
      \IfValueT{#5}{^{#5}}%
    $}%
    \dimen2=.5\dimen2
    \advance\dimen2 -\dimen0
    % prescripts
    \sbox6{\scriptspace\z@$\displaystyle{\vphantom{#3}}#1$}
    % postscripts
    \sbox8{\scriptspace\z@$\displaystyle{\vphantom{#3}}#2$}
    % typeset the thing
    \ifdim\wd6>\dimen2 \kern\dimexpr\wd6-\dimen2\relax\fi
    {%
     \mathop{\llap{\copy6}{\displaystyle#3}\rlap{\copy8}}\limits
     \IfValueT{#4}{_{#4}}%
     \IfValueT{#5}{^{#5}}%
    }%
    \ifdim\wd8>\dimen2 \kern\dimexpr\wd8-\dimen2\relax\fi
  }%
}
\makeatother

\begin{document}
\begin{gather*}
\left|\sum\right|\\
\left|\xsideset{}{}\sum\right|\\
\left|\xsideset{}{^{\smash{\sharp}}}\sum_{x<n\le x+y}\chi(n)a(n)\right|\\
\left|\xsideset{}{^\text{quite very very very long}}\sum\right|\\
\left|\xsideset{^{\text{quite very very very long}}}{}\sum_{\text{not quite so long}}\right|\\
\end{gather*}
\end{document}

在此处输入图片描述

相关内容