有时,在数学模式下,需要删除数学对象(例如,任何普通数学字母、积分符号等)后附加的自动斜体校正。应用包括:
- Hendrik Vogt 的回答到数学字母的斜体校正。
- jfbu 的回答到斜体文本中的数学字母间距错误。
- 有人使用 Computer Modern 来处理数学问题,但将文本设置为不同的字体。请考虑以下句子:
Let $f$ and $g$ be elements of a Hilbert space, and let $\langle f,g\rangle$ denote their inner-product.
这个句子包含两个逗号(一个在文本中,另一个在数学中)。看到两个不同的逗号会很奇怪。一个解决方案是\DeclareMathSymbol{,}{\mathpunct}{operators}{`,}
告诉 LaTeX 使用文本字体来处理数学中的逗号。但是$\langle f,g\rangle$
由于 之后的斜体校正,这看起来很糟糕f
。删除这样的斜体校正可以解决这个问题。
删除斜体校正的方法很简单:TeX 会不是如果数学原子有下标而没有上标,则添加斜体校正。因此附加_{}
几乎\scriptspace
成功了。由于添加了下标字段,因此需要删除一个额外的字段。
我的问题是:应该\kern-\scriptspace
留在外面还是进入下标字段?这个网站上的大多数答案似乎都是_{}\kern-\scriptspace
(即留在外面;这包括egreg 的使用\aftergroup
)。但是呢_{\kern-\scriptspace}
?有什么好处和/或缺点?
\documentclass{article}
\begin{document}
\newcommand*\sampletext{%
Here is some sample text with no significance.
It tries to typeset a math $f\noic$ before a line break
and another before period: $f\noic$.
How about $f'\noic$?%
}
\newcommand*\noic{}
\noindent\verb|\newcommand*\noic{}|
\sampletext
\medskip
\renewcommand*\noic{_{}\kern-\scriptspace}
\noindent1.~\verb|\renewcommand*\noic{_{}\kern-\scriptspace}|
aka stay outside
\sampletext
\medskip
\renewcommand*\noic{_{\kern-\scriptspace}}
\noindent2.~\verb|\renewcommand*\noic{_{\kern-\scriptspace}}|
aka go inside
\sampletext
\end{document}
答案1
\documentclass{article}
\begin{document}
\showoutput
0 $f\mathrm{x}$
1 $f_{}\mathrm{x}$
2 $f_{}\kern-\scriptspace\mathrm{x}$
3 $f_{\kern-\scriptspace}\mathrm{x}$
\end{document}
日志显示
0 斜体修正
....\OML/cmm/m/it/10 f
....\kern1.0764
1 个脚本空间
....\OML/cmm/m/it/10 f
....\hbox(0.0+0.0)x0.5, shifted 1.49998
这是一个 0.5pt 宽的空下标
2(之后)
....\OML/cmm/m/it/10 f
....\hbox(0.0+0.0)x0.5, shifted 1.49998
....\kern -0.5
下标后退负号
3 (内部)
....\OML/cmm/m/it/10 f
....\hbox(0.0+0.0)x0.0, shifted 1.49998
.....\kern -0.5
零宽度下标(包含负的字距)
因此,有点令人惊讶的是,我会说最后两个中最自然的输出是最后一个产生零宽度的空下标的输出。
在这种情况下,使用 fx 情况 2 和 3 并且抑制斜体校正看起来不太好,但这不是这里的重点。