这是受到的启发如何在 \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}