使用 Times 字体时,差分 d 运算符后的空格是否规范?

使用 Times 字体时,差分 d 运算符后的空格是否规范?

我有这个简单的代码,

\documentclass[12pt]{book}
\usepackage{mathtools} 
\usepackage{newtxtext}
\usepackage[lite]{mtpro2}
\begin{document}
$d\bar{p}$ and $dt$.
\end{document}

有了这个输出,

在此处输入图片描述

我认为它是一个规范的空间,这是由于命令的存在\bar{...}?有时为了将其恢复,我会插入一个负空间\!以将其p移到左侧附近d

必须始终进行这个小调整,否则我应该创建一个特定的宏。哪一个可以始终使用相同的命令\bar?在我看来,更改原始命令有点复杂\bar{...}。谢谢。


使用 Steven Segletes 的建议\ooalign{$d\bar{#1}$\cr$d#1$},我们可以看看这个问题是否普遍存在于 中\bar。如果叠加产生了一个“粗”的第二个字母,则字距调整不正确。(使用newtxmath因为 Steven 没有mtpro2

不幸的是,事实并非如此,有些情况下字距调整似乎正确,有些情况下则不然:

\documentclass[12pt]{book}
\usepackage{mathtools} 
\usepackage{newtxtext}
\usepackage{newtxmath}%instead of \usepackage[lite]{mtpro2}
\newcommand\testkern[1]{%
  \ooalign{$d\bar{#1}$\cr$d#1$}}
\textwidth 1in
\begin{document}
\noindent\testkern{a}
\testkern{b}
\testkern{c}
\testkern{d}
\testkern{e}
\testkern{f}
\testkern{g}
\testkern{h}
\testkern{i}
\testkern{j}
\testkern{k}
\testkern{l}
\testkern{m}
\testkern{n}
\testkern{o}
\testkern{p}
\testkern{q}
\testkern{r}
\testkern{s}
\testkern{t}
\testkern{u}
\testkern{v}
\testkern{w}
\testkern{x}
\testkern{y}
\testkern{z}
\end{document}

在此处输入图片描述

将通用-1mu字距应用于\bar

\newcommand\xbar{\mkern-1mu\bar}
\newcommand\testkern[1]{%
  \ooalign{$d\xbar{#1}$\cr$d#1$}}

因此,可能会修复一些字母组​​合,但不可避免地会破坏其他字母组合:

在此处输入图片描述

答案1

建议更新命令\bar如下:

\let\svbar\bar
\renewcommand\bar[1]{%
  #1\ThisStyle{\setbox0=\hbox{$\SavedStyle#1$}\kern-\wd0}\svbar{\,\phantom{#1}}\!}

这将确保字母的字距正确,因为它首先设置时没有\bar。然后,我将字母的字距向后调整,并将 应用于\bar字母的 的变体\phantom。在本例中,变体是移位的\phantom,然后在 之后取消移位\bar,以免引入任何杂散空格。

因此,如果存在残留的字距调整问题,那么它们将与叠加条相对于底层正确字距调整的字母的位置有关。

MWE 使用\ooalign问题中给出的测试来判断\bar宏的质量,使用字母粗细作为字距调整不良的指标。如您所见,没有粗体/加粗字母表示字距不匹配。因此,使用这种方法,人们只需判断横线相对于字母的位置是否合适。

虽然所有示例都是相对于字母“d”显示的,但事实上,无论前面的字母是什么,方法的执行方式都是类似的。

经过编辑,可以适用于各种数学风格。

\documentclass[12pt]{book}
\usepackage{mathtools} 
\usepackage{newtxtext}
\usepackage{newtxmath}%instead of \usepackage[lite]{mtpro2}
\usepackage{scalerel}
\let\svbar\bar
\renewcommand\bar[1]{%
  #1\ThisStyle{\setbox0=\hbox{$\SavedStyle#1$}\kern-\wd0}\svbar{\,\phantom{#1}}\!}
\newcommand\testkern[2][]{%
  \ooalign{$#1 d\bar{#2}$\cr$#1 d#2$}}
\textwidth 1in
\begin{document}
\noindent\testkern{a} \testkern{b} \testkern{c} \testkern{d}
\testkern{e} \testkern{f} \testkern{g} \testkern{h} \testkern{i}
\testkern{j} \testkern{k} \testkern{l} \testkern{m} \testkern{n}
\testkern{o} \testkern{p} \testkern{q} \testkern{r} \testkern{s}
\testkern{t} \testkern{u} \testkern{v} \testkern{w} \testkern{x}
\testkern{y} \testkern{z}

\noindent\testkern[\scriptstyle]{a} \testkern[\scriptstyle]{b} 
\testkern[\scriptstyle]{c} \testkern[\scriptstyle]{d}
\testkern[\scriptstyle]{e} \testkern[\scriptstyle]{f} 
\testkern[\scriptstyle]{g} \testkern[\scriptstyle]{h} 
\testkern[\scriptstyle]{i} \testkern[\scriptstyle]{j} 
\testkern[\scriptstyle]{k} \testkern[\scriptstyle]{l} 
\testkern[\scriptstyle]{m} \testkern[\scriptstyle]{n}
\testkern[\scriptstyle]{o} \testkern[\scriptstyle]{p} 
\testkern[\scriptstyle]{q} \testkern[\scriptstyle]{r} 
\testkern[\scriptstyle]{s} \testkern[\scriptstyle]{t} 
\testkern[\scriptstyle]{u} \testkern[\scriptstyle]{v} 
\testkern[\scriptstyle]{w} \testkern[\scriptstyle]{x}
\testkern[\scriptstyle]{y} \testkern[\scriptstyle]{z}

\noindent$2 d\bar{p}^2\ne2d p^2$
\end{document}

在此处输入图片描述

答案2

如果我编译

\documentclass[12pt]{book}
\usepackage{mathtools}
\usepackage{newtxtext}
\usepackage[lite]{mtpro2}
\begin{document}

$d\bar{p}$

$dp$

\showoutput

\end{document}

对于这两个公式,我明白了

....\mathon
....\LMP1/mtt/m/it/12 d
....\kern1.43999
....\vbox(7.88399+2.568)x7.98
.....\hbox(7.88399+0.0)x0.0, shifted 3.312
......\LMP2/mtt/m/n/12 N
.....\kern-5.484
.....\hbox(5.484+2.568)x7.98
......\LMP1/mtt/m/it/12 p
....\mathoff
....\mathon
....\LMP1/mtt/m/it/12 d
....\kern1.43999
....\kern-2.40001
....\LMP1/mtt/m/it/12 p
....\kern0.48
....\mathoff

删除呼叫后mtpro2,我得到

....\mathon
....\OML/cmm/m/it/12 d
....\vbox(6.77774+2.33331)x5.89717
.....\hbox(6.77774+0.0)x0.0, shifted 0.99028
......\OT1/cmr/m/n/12 ^^V
.....\kern-5.16667
.....\hbox(5.16667+2.33331)x5.89717
......\OML/cmm/m/it/12 p
....\mathoff
....\mathon
....\OML/cmm/m/it/12 d
....\OML/cmm/m/it/12 p
....\mathoff

明显的区别是,d字体中\LMP1/mtt/m/it/12(指向)有斜体修正,而字体中(指向)mt2mit at 12pt没有。\OML/cmm/m/it/12cmsy10 at 12pt

事实上,如果我这样做tftopl mt2mit,我会得到

(CHARACTER C d
   (CHARWD R 0.551)
   (CHARHT R 0.717)
   (CHARIC R 0.12)
   (COMMENT
      (KRN O 0 R -0.06)
      [...]
      (KRN C p R -0.2)
      [...]
      (KRN C t R -0.04)
      [...]
      (KRN O 263 R -0.02)
      )
   )

tftopl cmsy10得到了

(CHARACTER O 100
   (CHARWD R 0.611113)
   (CHARHT R 0.694445)
   )

如您所见,还有带有p或 的字距调整对t,当没有重音符号时,它会在字符中移动,但当下一项是 Acc 原子时,这是不可能的。

您可以手动计算适当的字距。

\documentclass[12pt]{book}
\usepackage{mathtools} 
\usepackage{newtxtext}
\usepackage[lite]{mtpro2}

\newcommand{\dwithbar}[1]{%
  d\computedaccentkern{#1}\bar{#1}%
}
\makeatletter
\newcommand{\computedaccentkern}[1]{%
  \mathpalette\computedaccentkern@{#1}%
}
\newcommand{\computedaccentkern@}[2]{%
  \begingroup
  \sbox\z@{$\m@th#1d#2$}
  \sbox\tw@{$\m@th#1d{\kern0pt#2}$}%
  \kern\dimexpr\wd\z@-\wd\tw@\relax
  \endgroup
}
\makeatother


\begin{document}

$d\bar{p}$ $\scriptstyle d\bar{p}$

$\dwithbar{p}$ $\scriptstyle \dwithbar{p}$

$dp$ $\scriptstyle dp$

$d\bar{t}$ $\scriptstyle d\bar{t}$

$\dwithbar{t}$ $\scriptstyle \dwithbar{t}$

$dt$ $\scriptstyle dt$

\end{document}

您可以对其他口音进行类似的定义,例如\dot

\newcommand{\dwithdot}[1]{%
  d\computedaccentkern{#1}\dot{#1}%
}

或通用的

\newcommand{\dwithacc}[2]{%
  d\computedaccentkern{#2}#1{#2}%
}

被称为\dwithacc\bar{p}\dwithacc\dot{p}

在此处输入图片描述

答案3

这更像是一个评论,但需要一个例子。

Computer Modern 不会出现上述问题,原因是文件中的度量标准不同.tfm:用于数学的字母表中的“d”没有斜体校正。这是设计使然,因为 Knuth 最常将“d”用于微分算子;如果他将其用作变量,他会在“d”后面添加一个细空格(如果需要)。

这是问题中使用的例子,使用 Computer Modern 设置。

\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}
The differential $d$ as set using Computer Modern: \qquad
$d\bar{p}$ and $dt$.
\end{document}

示例代码的输出

简而言之,插入的空格(在字母“d”后面有无变音符号时有所不同)是由于“d”的度量定义方式与 Computer Modern 中不同。(当直立的“d”用于微分函数时,这不是问题。)

答案4

这可能是一个中间解决方案,没有宏,使用 diffcoeff包(我记得该derivative包 - 参见第 29 页 - 不包含如图所示的差分符号)和选项ISO选择直立差分符号。

在此处输入图片描述

在这种情况下,可以观察到水平间距有所减小。

在此处输入图片描述

\documentclass[a4paper,12pt]{article}
\usepackage[lite]{mtpro2}
\usepackage{derivative}
\usepackage[ISO]{diffcoeff}
\begin{document}
\begin{equation}
 \frac{d\bar{p}}{dt}, \quad 
  \diff{\bar{p}}{t} \, 
\end{equation}
\end{document}

对于那些想要编译代码但还没有安装的人\usepackage[lite]{mtpro2}可以用 来替换它。唯一的区别是上面字母\usepackage{newtxmath}的长度。\bar

相关内容