![两个字母的变量名](https://linux22.com/image/233162/%E4%B8%A4%E4%B8%AA%E5%AD%97%E6%AF%8D%E7%9A%84%E5%8F%98%E9%87%8F%E5%90%8D.png)
在数学模式下,TeX 假设“隐藏乘法”(因此两个放在附近的变量名之间有不可见的乘法),因此,据我所知,像这样的表达式$ABC$
在字母之间呈现较小的距离。
现在,如果我有一个双字母变量名,例如 TP 或 FN(真阳性或假阴性),该怎么办?保持原样?把它们放进去\text
?然而在第一个选项中,它们看起来像 T*P 或 F*N,而在第二个选项中,它们将与单字母符号区分开来。
在光学中,双字母变量不适用用于数值孔径。
答案1
您可以写\mathit{TP}
或\mathit{FN}
。如果您要经常这样做,您可以为它们创建宏。
\newcommand\TP{\mathit{TP}}
\newcommand\FN{\mathit{FN}}
答案2
我猜最好的解决方案是定义一个手动调整负空间的宏,例如
\newcommand\TP{T\!P}
或用\hspace{-0.1em}
代替\!
。您还可以使用\ric
来自我的这个答案的命令删除 后面的空格T
。(这样你就不必猜测负空间的数量,但结果并不总是令人满意。)
由于这个答案存在一些争议,让我提供更多细节:
TeX 在数学模式下不会在字母之间添加空格,但会在每个字母后添加该字母的斜体校正。有多种方法可以查看发生了什么,但两种方法都有点复杂。
第一种可能性: 在控制台上,运行
tex '\tracingall $TP$ \bye'
如果你使用的是类 Unix 系统,最好运行
tex '\tracingall $TP$ \bye' | sed -n '/mathon/,/mathoff/p'
然后在终端输出中你会发现以下行
...\mathon
...\teni T
...\kern1.3889
...\teni P
...\kern1.3889
...\mathoff
该\tracingall
命令告诉 TeX 留下它所做的一切的痕迹。其中前三行告诉您以下内容:进入数学模式,T
字体中的字母\teni
(10pt 数学字体cmmi10
)排版,然后在 后放置 1.3889(pt) 的字距T
。这正是 的斜体校正T
。我怎么知道的?在 unix 系统上这很简单:运行
tftopl $(kpsewhich cmmi10.tfm) | grep 'CHARACTER C T' -A3
(tfm
表示“TeX 字体度量”),你将获得终端输出
(CHARACTER C T
(CHARWD R 0.584376)
(CHARHT R 0.683332)
(CHARIC R 0.13889)
T
这将告诉您有关字体中字符的以下信息cmmi10
:它的宽度为 0.584376,高度为 0.683332,斜体校正为 0.13889,均以 pt 为单位。
同样适用于上面以 开头的行...\teni P
;字母P
具有相同的斜体校正,然后关闭数学模式。虽然这看起来很有说服力,但事实并非如此证明提供\kern1.3889
的\tracingall
来自斜体更正。如果你想完全信服,那么除了阅读 TeXbook 的附录 G 之外别无选择真的非常小心,我认为这是更陡峭的路径。
第二种可能性:
阅读 TeXbook 的附录 G。不幸的是,这并不是我所说的易读内容。您可以看到第 441 页插入斜体更正的初步近似值:
我们经常需要执行一个名为“将框设置
x
为某某字段,样式为某某”的子程序。这意味着(a)...(b)如果该字段包含一个符号,则x
设置为包含适当大小的该符号的水平框,并且字符的斜体校正包含在框的宽度中;...
在当前情况下,例如字母T
是放入框中的符号x
,连同其斜体修正。然而,这并不是全部事实。有一种情况下 TeX 不会插入斜体校正:第 445 页的第 17 条规则中写道
如果该符号未按照上述规则 14 标记为文本符号,或者
\fontdimen
其字体的参数编号 2 为零,则将 δ 设置为斜体校正;否则将 δ 设置为零。
我们不必关心规则 14 和文本符号。为什么?数学字体的一个重要特征是其\fontdimen
参数编号 2 为零。对于cmmi10
,您可以通过输入来说服自己
tftopl $(kpsewhich cmmi10.tfm) | grep FONTDIMEN -A2
输出结果如下
(FONTDIMEN
(SLANT R 0.25)
(SPACE R 0.0)
并且您会看到第二个参数SPACE
确实为零。这是有道理的:正如每个 TeX 新手和朋友都必须了解的那样,空格在数学模式下不会被排版。