![LaTeX 是否重新定义了[一些] TeX 基元?](https://linux22.com/image/400036/LaTeX%20%E6%98%AF%E5%90%A6%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89%E4%BA%86%5B%E4%B8%80%E4%BA%9B%5D%20TeX%20%E5%9F%BA%E5%85%83%EF%BC%9F.png)
我读到“TeX 和 LaTeX 有什么区别?“LaTeX 是建立在 TeX 之上的宏集合(扩展)。据推测,TeX 基元在 LaTeX 中的行为应该与在 TeX 中的行为相同。然而,情况似乎并非总是如此。在“\char 在数学模式下如何处理?",解释了为什么\char
在文本模式下的行为与数学模式下的行为不同。但这仅限于 TeX。然而,在 LaTeX 中,\char
在文本和数学模式下的行为相同,如以下示例所示:
\documentclass{article}
\begin{document}
In text mode, we obtain \char"5. In math mode, we also obtain $\char"5$.
\end{document}
在 TeX 中,结果有所不同:
In text mode, we obtain \char"5. In math mode, we obtain $\char"5$.
\bye
似乎有些 TeX 基元(至少一个:)\char
在 LaTeX 中被重新定义。我想知道 TeX 基元是否必须在 LaTeX 中重新定义。如果是,为什么?还有其他 TeX 基元在 LaTeX 中被重新定义吗?难道 TeX 和 LaTeX 不应该在如此简单的一段代码上产生相同的结果(如示例中所示)吗?
答案1
LaTeX 重新定义了基本元素\input
、\end
、\-
、以及(在某些情况下)\/
。它不会重新定义,但会使用不同的数学代码。\underline
\par
\char
在纯 TeX 中我们看到
\mathcode`\^^E="023A % \lnot
但是 LaTeX 没有为^^E
(ASCII 5) 分配数学代码,因此该值最初为 5。
当 TeX\char<number>
在数学模式下处理时,它会使用字符的数学代码,就像直接输入字符一样。因此,在纯 TeX 中,您会得到"3A
2 族中的字符 ( \lnot
);在 LaTeX 中,您会得到"5
0 族中的字符。
重新定义基元
\input
被重新定义以允许\input{<filename>}
;\end
被重新定义以标志环境的终结;\-
并\/
由于技术原因被重新定义;\underline
被重新定义为也可用于文本模式。
就而言\par
,重新定义对于类似列表的环境至关重要。
为什么纯 TeX 将数学代码分配给 ASCII 5?
因为 Knuth 使用了扩展字符集,而他的键盘可以直接输入 ¬ 等字符。所以他发现为扩展字符集设置数学代码很方便。