将 \left/\right 改为 \mathopen/\mathclose 后,mtpro2 中出现多余的空格

将 \left/\right 改为 \mathopen/\mathclose 后,mtpro2 中出现多余的空格

这个问题又增加了一个不应滥用 \leftand \right对的理由

\left通过和 对自动调整分隔符 \right大小应该总是可以避免很少例外情况(例如案例、矩阵等)。事实上,第 146 – 149 页TeXbook展示许多使用手动调整大小的示例。在这些示例中使用\left和 \right无疑会产生次优甚至丑陋的输出。

还有间距问题:A \left和 \right对有效地创建了一个\mathinner对象,它遵循不同的间距规则(例如,$\sin(x)$与 相比$\sin\left(x\right)$)。然而,即使在一个人让\left<delimiter>...\right<delimiter>表现得像之后\mathopen<delimiter>...\mathclose<delimiter>,也有仍然都是潜在的问题。

当前的问题

我用过这种技术Philipp Stephani 在这篇文章中提到:间距 \left和 \right。由于奇怪的原因,某些字母和起始分隔符之间仍然存在多余的空格。

笔记:以下 MWE 本身没有实际用途。但是,我认为这是人们不应该滥用 \left和的 众多原因之一\right,即使它们被“修复”了。

\documentclass{article}
\usepackage{amsmath}
\usepackage{newtxtext}
\usepackage[lite]{mtpro2}
\begin{document}
\begin{alignat*}{4}
&f\left(x\right) \quad                  &&\vert\left(x\right) \\
&f\mathopen{}\mathclose{\left(x\right)} &&\vert\mathopen{}\mathclose{\left(x\right)} \\
&f(x)                                   &&\vert(x)
\end{alignat*}
\end{document}

多余的空间

为什么会有多余的空间?我该如何修复它?

答案1

我们来看一个更简单的情况:

\documentclass{article}
\usepackage{amsmath}
\usepackage{newtxtext}
\usepackage[lite]{mtpro2}
\begin{document}

$f(x)$

$f\mathopen{}\mathclose{(x)}$

$f\mathopen{}\mathclose{\left(x\right)}$

\showoutput

\end{document}

第一个公式的输出是

....\mathon
....\LMP1/mtt/m/it/10 f
....\kern2.4
....\kern-0.8
....\LMP1/mtt/m/it/10 .
....\LMP1/mtt/m/it/10 x
....\kern0.5
....\LMP1/mtt/m/it/10 /
....\mathoff

对于第二个公式

....\mathon
....\LMP1/mtt/m/it/10 f
....\kern2.4
....\hbox(0.0+0.0)x0.0
....\hbox(7.17+2.13998)x13.42998
.....\LMP1/mtt/m/it/10 .
.....\LMP1/mtt/m/it/10 x
.....\kern0.5
.....\LMP1/mtt/m/it/10 /
....\mathoff

最后一个是

....\mathon
....\LMP1/mtt/m/it/10 f
....\kern2.4
....\hbox(0.0+0.0)x0.0
....\hbox(7.17497+2.13501)x13.42998
.....\hbox(7.17497+2.13501)x13.42998
......\hbox(7.17+2.13998)x3.73, shifted -0.00497
.......\LMP1/mtt/m/it/10 .
......\LMP1/mtt/m/it/10 x
......\kern0.5
......\hbox(7.17+2.13998)x3.73, shifted -0.00497
.......\LMP1/mtt/m/it/10 /
....\mathoff

有什么区别?只是一个\kern-0.8

f按照规则,TeX 在( )后添加斜体校正\kern2.4;在第一个公式中,后跟一个左括号(位于的数学符号字体​​中的 的f插槽中),并且为这一对定义了一个字距调整,正是。.mtpro2\kern-0.8

在第二个和第三个公式中,不能应用字距调整。

对于那些无法从上面的符号表示中看到它的人来说,我在上面的代码中添加了图片。可以看出(和的位置x是相同的,但在第二行和第三行中,括号相对于第一行稍微向右移动了一点(精确地移动了 0.8pt,即缺失的字距)。

在此处输入图片描述

由于和之间没有定义字距,因此\vert问题不会显示出来。|(

仅用于检查:

\documentclass{article}
\usepackage{amsmath}
\usepackage{newtxtext}
\usepackage[lite]{mtpro2}
\begin{document}

\sbox0{$f(x)$} % define the math fonts

{\the\textfont1 f.}
{\the\textfont1 f\/}

\showoutput

\end{document}

我们得到(减少)

....\LMP1/mtt/m/it/10 f
....\kern-0.8
....\LMP1/mtt/m/it/10 .

....\LMP1/mtt/m/it/10 f
....\kern 2.4

你能做得更好吗? 是的,不使用\leftand \right

相关内容