![为什么没有 \begin{document} 时 LaTeX 会抛出错误?](https://linux22.com/image/341404/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%B2%A1%E6%9C%89%20%5Cbegin%7Bdocument%7D%20%E6%97%B6%20LaTeX%20%E4%BC%9A%E6%8A%9B%E5%87%BA%E9%94%99%E8%AF%AF%EF%BC%9F.png)
考虑以下“Hello, World!”文档。
Hello, world!
\end
如果你尝试使用 编译它latex.exe
,则会出现错误**
! LaTeX Error: Missing \begin{document}.
好的,一方面,显然会出现此错误——这有点像尝试编译没有函数的 C 程序main
。另一方面,如果我认为 LaTeX 只是加载了一堆宏的 TeX,那么人们会认为,任何使用 编译好的文档都tex.exe
应该在没有 的情况下也能正常工作latex.exe
,至少只要我没有使用任何特定于 Plain TeX 的宏。***
这表明我对 LaTeX 的理解是\input{latex}
错误的,即它实际上等同于 TeX,但在文档开头有一个命令,从而引发了几个相关的问题。
我的理解是,加载 TeX 格式本质上相当于
\input
在文档开头加载文件,只不过文件可能已经预编译过了。这种理解不准确吗?调用是否实际上等同于加载 LaTeX 格式的
latex.exe
调用?tex.exe
如果实际上运行
latex.exe
相当于仅使用 LaTeX 格式运行 TeX,那么这种格式如何告诉 TeX 在看不到时抛出错误\begin{document}
?
** 顺便说一句,您还会收到一个错误,与 LaTeX 中的含义不同有关\end
。我也觉得这很令人困惑,因为我认为您无法重新定义 TeX 基元,但也许最好将其留作单独的问题。
*** 实际上,我甚至不确定是否存在 LaTeX 未定义的 Plain TeX 特有的宏。
答案1
- 我的理解是,加载 TeX 格式本质上相当于
\input
在文档开头加载文件,只不过文件可能已经预编译过了。这种理解不准确吗?
或多或少都是正确的,尽管你需要小心地解释这一点。
- 调用是否实际上等同于加载 LaTeX 格式的
latex.exe
调用?tex.exe
是的,但关键是没有加载纯文本格式(最初称为 virtex),并且忽略了连字符模式只能在 initex 中加载,而不能在正常运行中加载。
- 如果实际上运行
latex.exe
相当于仅使用 LaTeX 格式运行 TeX,那么这种格式如何告诉 TeX 在看不到时抛出错误\begin{document}
?
latex.ltx
套
\everypar{\@nodocument} %% To
因此每个段落都会产生一个错误,\begin{document}
清除该错误并允许设置段落。
** 顺便说一句,您还会收到一个错误,与在 LaTeX 中意味着不同的含义有关
\end
。我也觉得这很令人困惑,因为我认为您无法重新定义 TeX 基元,但也许最好将其留作单独的问题。
是的,当然你可以重新定义任何原始
\def\hbox{oops}
将重新定义\hbox
(不是一个好主意但是......)
*** 实际上,我甚至不确定是否存在 LaTeX 未定义的 Plain TeX 特有的宏。
是的,在 plain 中定义的宏没有在 latex 中定义(\folio
例如),并且许多在两种格式中用相同名称定义的命令具有不同的定义(\loop
例如)。