我已经使用 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 自学方法。