为什么 \textbackslash 在数学模式下呈现为“n”?

为什么 \textbackslash 在数学模式下呈现为“n”?

我刚刚渲染了以下内容:

\documentclass[varwidth=true, border=2pt]{standalone}

\begin{document}$\textbackslash$
\end{document}

似乎给出的结果与 相同$n$。你知道为什么吗?\textbackslash对于文本模式而不是数学模式,我预计 TeX 在这种情况下会失败。相反,我得到的是

LaTeX 警告:命令 \textbackslash 在数学模式下无效

那么为什么\textasciitilde数学模式会导致 LaTeX 崩溃而其他模式则\textbackslash不会呢?

答案1

\textbackslashOT1 编码的使用定义是

\OMS-cmd \textbackslash \OMS\textbackslash

第一个和第三个标记都不能由用户输入,除非使用一些狡猾的技巧。但是,的定义\OMS-cmd相当于

\def\OMS-cmd#1#2{%
  \ifx\protect\@typeset@protect
    \@inmathwarn #1%
    \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax
    ...<omitted irrelevant things>...
}

该宏\@inmathwarn负责警告

Command \textbackslash invalid in math mode

之后,宏\OMS\textbackslash被展开。如果我们处于文本模式,该命令将在一个组中执行字体更改,在 OMS 编码(数学符号)中选择一种字体,执行

\char"6E

并且会出现一个反斜杠,因为这是 OMS 编码字体在插槽"6E(十六进制)中所具有的。

如果我们处于数学模式,\char"6E则会执行相同的指令,但此时字体更改不起作用。因此,我们获取了位于"6E数学系列 0 中的字体中位置的字符,其中n找到了 。当\char"6E在数学模式下找到 时,TeX 会将其视为 ,并且\mathchar"006E在系列 0 中,插槽"6E中有一个n(它是直立文本字体,并且 的 ASCII 码n恰好是"6E)。

在 T1 编码中情况有所不同,因为在这种情况下的定义\textbackslash

\T1-cmd \textbackslash \T1\textbackslash

后一个宏最终扩展为\char"5C。在文本字体、T1 编码中,在 slot 处"5C实际上有一个反斜杠。

以下是解释。现在,给出一些建议:

  • 永远不要低估警告和

  • 切勿\text...在数学模式下使用符号命令(不要将它们与 或类似的命令混淆\textrm\textit它们在数学模式下显然是合法的)。

答案2

正如 Ulrike 的回答中提到的那样在 alltt 环境中电传打字 \textbackslash,当使用 OT1 编码时, 的字形\textbackslash是从符号字体中获取的(因为常规字体中没有它的字形)。如果您运行我的 MWE 并放大图中所示的列('6 或 ''E 列),您将看到符号字体(cmsy10)反斜杠字符位于插槽 110 中,这恰好与n斜体字体(cmti10)中的字母位于同一插槽中。据推测,在数学模式下,使用的字体被重定向到斜体字体,因此,在符号字体中\char110呈现为,而在数学字体中呈现为斜体。\textbackslashn

可以使用 T1 编码 ( ) 来规避此问题\usepackage[T1]{fontenc},该编码在常规字体中提供文本反斜杠。即使在数学模式下,它也能正确呈现。

\documentclass{article}
\usepackage{fullpage}
%\usepackage[T1]{fontenc}
\usepackage{fonttable}
\begin{document}
\fonttable{cmti10}
\fonttable{cmsy10}
\end{document}

在此处输入图片描述

相关内容