为什么没有像 \dfrac 那样的 \dint 或 \dsum?

为什么没有像 \dfrac 那样的 \dint 或 \dsum?

这是受到的启发如何在 \itemize 环境中获得美观的符号?Sigur 的评论这让我想起了数学公式和分数的显示样式。


我知道,amsmath包中已经\dfrac{}{}有了显示样式的分数(以及\tfrac{}{}内联分数)。

在此处输入图片描述

\dsum那么为什么、\dprod、等不\dint存在?

如果它们不存在,那为什么还\dfrac存在呢?

实际上,我们可以定义\dint

\DeclareMathOperator{\dint}{\displaystyle\int}

但我想知道为什么没有\dint等等。或者你能告诉我这些在哪个包里\d-吗?

答案1

该命令\dfrac用于渲染多层分数,例如

\[
\frac{\dfrac{a}{b}-\dfrac{c}{d}}{\dfrac{a}{b}+\dfrac{c}{d}
\]

并且通常不适用于内联公式。它不是使用简单格式定义的\displaystyle\frac,而是

% amsmath.sty, line 214:
\newcommand{\dfrac}{\genfrac{}{}{}0}

哪里\genfrac

% amsmath.sty, line 221:
\DeclareRobustCommand{\genfrac}[4]{%
  \def\@tempa{#1#2}%
  \edef\@tempb{\@nx\@genfrac\@mathstyle{#4}%
    \csname @@\ifx @#3@over\else above\fi
    \ifx\@tempa\@empty \else withdelims\fi\endcsname}
  \@tempb{#1#2#3}}

% amsmath.sty, line 289:
\def\@genfrac#1#2#3#4#5{{#1{\begingroup#4\endgroup#2#3\relax#5}}}
\def\@mathstyle#1{%
  \ifx\@empty#1\@empty\relax
  \else\ifcase#1\displaystyle % case 0
    \or\textstyle\or\scriptstyle\else\scriptscriptstyle\fi\fi}

会发生什么\dfrac{a}{b}?根据定义,这变成\genfrac{}{}{}0{a}{b},所以

\def\@tempa{}%
  \edef\@tempb{\@nx\@genfrac\@mathstyle{0}%
    \csname @@\ifx @@over\else above\fi
    \ifx\@tempa\@empty \else withdelims\fi\endcsname}
  \@tempb{}{a}{b}

根据 的定义\@mathstyle\@tempb定义为\@genfrac\displaystyle\@@over,所以我们剩下

\@genfrac\displaystyle\@@over{}{a}{b}

进而变成

{\displaystyle{\begingroup a\endgroup\@@over\relax b}}

\@@over是原始的\over。请注意整个结构周围的括号。您可能会喜欢追逐\frac\binom和的扩展\dbinom

不能\int这样做\displaystyle\int,因为这不会限制的范围\displaystyle,也不能这样做{\displaystyle\int},因为这不会正确地设置限制。事实上,测试文件

\documentclass{article}
\usepackage{amsmath}

\DeclareMathOperator{\dint}{\displaystyle\int}
\newcommand{\ddint}{\displaystyle\int}

\begin{document}

$\dint_0^1\frac{x}{2}\,dx$

$\ddint_0^1\frac{x}{2}\,dx$

\end{document}

在任何一种情况下都会产生错误的输出:

在此处输入图片描述

有人能做些什么来解决这个问题吗?是的,但我认为这不值得。无论如何,这就是它:

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

\NewDocumentCommand{\dint}{t\limits e{_^}}{%
  \mathop{
    \displaystyle\int
    \IfBooleanT{#1}{\limits}
    \IfValueT{#2}{_{#2}}
    \IfValueT{#3}{^{#3}}
  }%
}

\begin{document}

$\dint_0^1\frac{x}{2}\,dx$
$\dint\limits_0^1\frac{x}{2}\,dx$
$\dint\frac{x}{2}\,dx$

\end{document}

在此处输入图片描述

相关内容