这个问题基本上是关于微分 d 是否应该直立或斜体,而不是关于如何在 tex 中实现这一点。然而,这个有用的答案确实建议使用类似下面的方法进行排版:
\newcommand{\der}{\operatorname{d\!}}
这是我做了一段时间的方法,但我发现有些情况下间距不对。此代码
\der(x^7) \quad \der x \quad \operatorname{d} (x^7) \quad \operatorname{d} x
给出如下输出:
负薄空格对于排版 dx 来说看起来不错,但对于 d(x^7) 来说却很糟糕。有没有一种好方法来定义一个\der
宏,可以自动正确处理这两种情况,或者我最好的选择是定义两个宏并根据需要选择其中一个?
答案1
\operatorname
变成d
一个运算符。如果 ( x
) 后面跟着一个普通的数学原子,那么 TeX 会设置一个由 否定的细空格。但是,如果后面的数学原子属于“open”、“close”、“punct”或“inner”( / )\!
类别,则 TeX 不会在运算符后设置空格。一种解决方法是添加一个空的数学命令原子(或一个空的子公式),然后 TeX 总是会设置一个由 取消的细空格。宏在左侧表现为运算符,在右侧表现为普通的数学原子。现在两种情况都按预期工作:\scriptstyle
\scriptscriptstyle
\mathord{}
{}
\!
\der
\documentclass{article}
\usepackage{amsmath}
\newcommand{\der}{\operatorname{d\!}{}}
\begin{document}
\[
\der(x^7) \quad \der x
\]
\end{document}
变化
可以d
放在操作符原子或普通原子中,如评论曼努埃尔和评论的 egreg (无\mathrm
):
\mathop{}\!\mathrm{d}
字体d
\lim
和\sin
朋友正在使用字体\operator@font
。然后包amsmath
提供宏\operatorname
。但前者也可以在没有附加包的情况下使用:\makeatletter \newcommand*{\der}{% \mathop{\kern\z@\operator@font d}\!{}% } \makeatother
\kern\z@
防止将\mathop
符号置于中心。或者
d
在普通原子中:\makeatletter \newcommand*{\der}{% \mathop{}\!{\operator@font d}% } \makeatother
字体
\mathrm
更易于使用(@
名称中没有):\newcommand*{\der}{% \mathop{}\!\mathrm{d}% }
或者稍微复杂一点,再次
\kern
阻止垂直居中:\newcommand*{\der}{% \mathop{\kern0pt\mathrm{d}}\!{}% }
斜体变体:
\newcommand*{\der}{% \mathop{}\!d% }%
或者
\newcommand*{\der}{% \mathop{\kern0pt d}\!{}% }
答案2
软件包是由善良的人编写的,他们考虑到了我这样的懒惰和无知的人。与其重新发明东西,不如开始寻找合适的软件包并使用它。在这种情况下,physics
软件包(如 Johannes 所述)提供了\dd
宏。文档相关部分的屏幕截图physics
:
示例代码如下:
\documentclass{article}
\usepackage{physics}
\begin{document}
\[
\dd(x^7) \quad \dd x
\]
\end{document}