两个字母的变量名

两个字母的变量名

在数学模式下,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 新手和朋友都必须了解的那样,空格在数学模式下不会被排版。

相关内容