如果 OT1 是 LaTeX 的默认编码,那么 \_ 如何工作?

如果 OT1 是 LaTeX 的默认编码,那么 \_ 如何工作?

公平警告:我对字体和字体编码几乎一无所知,所以这也许是我的另一个幼稚问题。

最近,我关于的行为\detokenize{_},因为需要指定\usepackage[T1]{fontenc}它才能按预期工作。

_显然,LaTeX 的默认字体编码是 OT1,而OT1 中没有。因此,要将\detokenize{_}或之类的内容\string_渲染为_而不是˙,必须指定 T1 字体编码。

然而,正如 @egreg 在对该问题的评论中指出的那样并且我们都知道,\_渲染方式与_LaTeX 一样,无需对字体编码进行任何处理。

所以,我的问题是 LaTeX 实际上如何呈现,\_就好像OT1(默认编码)中_没有一样?_

答案1

plain.tex包括

\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}}

latex.ltx包括

\DeclareTextCommandDefault{\textunderscore}{%
  \leavevmode \kern.06em\vbox{\hrule\@width.3em}}

\DeclareRobustCommand{\_}{%
   \ifmmode\nfss@text{\textunderscore}\else\textunderscore\fi}

t1enc.def包括

\DeclareTextSymbol{\textunderscore}{T1}{95}

因此,如果加载了 T1,则使用字体中的实际下划线。在这种情况下,from\DeclareTextSymbol会覆盖fromt1enc.def的默认含义,因此也会覆盖 的默认含义。当然,如果未加载 T1 并使用 OT1,则不会覆盖默认定义,并且 TeX 在排版或时本质上会伪造下划线。\textunderscorelatex.ltx\_\textunderscore\_

相关内容