更好地自动间隔差异 d?

更好地自动间隔差异 d?

这个问题基本上是关于微分 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}

在此处输入图片描述

相关内容