TeX 中的命令与 LaTeX 中的命令不同

TeX 中的命令与 LaTeX 中的命令不同

我已经使用 LaTeX(使用 TeXworks 和 pdfLaTeX)大约一年了,我认为学习 TeX 是一个有用(/有趣)的练习,因为这是 LaTeX 的基本语言(因此允许重新定义 LaTeX 宏,我相信这些宏的编码必须在 TeX 中完成[错误则改正])。我正在从一本 TeXBook(一本非常好的书)中学习,它提供了很多例子等等,鼓励读者自己去尝试。

Knuth 给出的编译 TeX 的主要方法(据我所知,这是标准方法)是在文本编辑器中输入文档,然后将其交给 TeX“引擎”,后者会编译该文档。但是,由于书中有许多示例和练习可供尝试,因此我选择在 TeXworks 编辑器中尝试命令,然后进行编译(使用pdfLaTeX),因为这是最简单、最快捷的查看结果的方法。

到目前为止,我发现这样做没有任何问题,而且对我来说,这是有道理的,因为(在我看来),LaTeX 是建立在 TeX 之上的,没有添加任何新的基础,因此任何在 TeX 中执行某些操作的命令都应该在 LaTeX 中执行相同的操作。

然而,最近我一直在研究 LaTeX 和 TeX 之间的确切区别,似乎两者之间的区别比我最初想象的要大。在大多数情况下,这并不困扰我,因为虽然一些 TeX 命令已为 LaTeX 重新设计(例如,命令\it被替换为\textit),但 TeX 命令本身仍然有效,因此理论上,我仍然可以用纯 TeX 编写文档,然后用 pdfLaTeX 编译它,并产生正确的结果。然而,我发现了一些令人不安的事情这里这表明某些 TeX 命令具有与 LaTeX 解释不同的含义。

有人可以给出这些命令的一些例子吗?,如果可能的话,请给出其他理由来说明为什么不应在 LaTeX 中使用纯 TeX。

任何帮助是极大的赞赏! :)


后记:我知道 TeXworks 也提供了使用 pdfTeX 进行编译的选项,但这会删除 LaTeX 生成的宏(例如命令\section),从而使生活再次变得更加困难。我的问题更多的是原则问题,而不是实际建议我尝试使用 LaTeX 在 TeX 中排版。

答案1

plain tex 和 latex 都是用 tex 编写的,但没有共同的 tex 代码,因此虽然一些命令具有相同的名称,并且一些具有相同名称的命令具有相同的定义,但使用 latex 作为学习 plain 的工具并不是一个好主意。

TeXBook 描述了两组命令(除了在索引中之外,并不总是费尽心思来区分它们)原始命令内置于 tex-the-program 中,而其他命令则以纯 tex 格式定义。

LaTeX 当然是使用相同的原语来定义的,但是它们中的大多数通常不应该直接在文档中使用,并且一些(特别是\end)被同名的 latex 命令屏蔽,因此原语无法在其原始名称下访问)

没有任何纯文本定义文件被加载到 latex 格式中,因此纯文本中定义的命令均未被定义。

latex 的部分内容最初是纯 tex 子集的副本,但经过 30 年的独立发展,现在两种格式中具有相同定义的命令相当少。

您提到\it在纯文本中定义为

> \it=macro:
->\fam \itfam \tenit .
l.2 \show\it

所以它直接选择 10pt cm 斜体

在乳胶中

> \it=undefined.
l.2 \show\it

也就是说,它根本没有定义。

如果你使用\documentclass{article},则名称为的命令\it已定义,但其定义是

> \it=macro:
->\protect \it  .
l.3 \show\it

它具有与选择斜体字体类似的最终用户效果,但其定义却截然不同。

您会看到与页面组成和插入相关的任何内容都有类似的差异,因此普通的 Tex 必须\topinsert在页面中插入图形,而此命令在 latex 中根本没有定义。

类似地,在数学中,多行显示以平原形式设置,\eqalign但在乳胶中没有定义。

因此,总而言之,虽然一些简单的例子可能会起作用,但在 Latex 中使用纯 TeX 命令在架构上是错误的,并且在实践中很容易出错,因此不推荐使用纯 TeX 自学方法。

相关内容