这个问题又增加了一个不应滥用 \left
and \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
你能做得更好吗? 是的,不使用\left
and \right
。