pdf - 为什么 LaTeX/pdflatex 编译器如此 'funky' 与 c++ 相比,需要多次编译和虚假错误消息等?

标签 pdf compiler-construction latex compiler-errors pdf-generation

<分区>

对于为什么 latex/pdflatex 编译器在以下两个方面很时髦,是否有一个简单的解释:

1) 在达到“稳定状态”版本之前,需要进行 N 次多次编译。如果我使用很多包和引用,N 似乎会增长到 5 或 6 左右。

2) 错误信息几乎总是毫无值(value)的。未标记实际错误。示例:

  \begin{itemize} % Line 499
   \begin{enumerate}
    % Comment: error: forgot to close the enumerate block 
    \item This is a bullet point. 
  \end{itemize}   % Line 503

结果:“扫描\begin{document} 时第 1 行出错”,不是很有用。

我知道有一个单独的“tex 交换”,但我想知道是否有人了解 c++、java 或其他编译器可以提供一些关于这些似乎如何支持单一编译和正确错误本地化的见解。

编辑:这篇文档似乎是在为 latex 实现中的黑客行为辩护,但是 latex 的语法/语言属性如何使奇怪的实现变得必要? http://tug.org/texlive/Contents/live/texmf-dist/doc/generic/knuth/tex/tex.pdf

最佳答案

从 LaTeX 的角度来看:

  1. 您最多需要 3 个(...也许 4 个)才能达到稳定状态。这不取决于包的数量,而是文档中可能的布局更改。布局更改导致引用移动,并且这些引用需要正确(因此重新编译直到它们不动)。

  2. 允许嵌套环境(尽管这不能直接解决您的问题)。此外,宏定义充当您输入的替换文本。因此,即使您编写了 \end{itemize},它实际上也被转换为一堆其他/不同的(原始)宏,删除了对人类显而易见的结构,因此也删除了奇怪的错误消息.这就是为什么有些错误消息难以解释的原因。

关于pdf - 为什么 LaTeX/pdflatex 编译器如此 'funky' 与 c++ 相比,需要多次编译和虚假错误消息等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9882040/

相关文章:

compiler-construction - 如何为这段代码创建无分支代码?

java - 使用调试符号编译 Java 应用程序的各个部分

ant - 如何使用 ANT(或其他一些构建系统,如果您愿意)构建 PDF LaTeX 文档?

pdf - pandoc:找不到 xelatex。 pdf 输出需要 xelatex

PDF 在 Foxit Reader 而不是 Adob​​e Reader 中显示签名

pdf - 以横向方式创建 PDF(Google Apps 脚本)

c - 预处理器是否在编译器开始运行之前准备了一个唯一常量字符串列表?

ruby-on-rails - Rails 中公共(public)目录中的文件 - Errno::ENOENT (没有这样的文件或目录@ rb_sysopen

r - 通过 knit2wp() 将 Markdown 脚本上传到 WordPress 时的 latex 方程

latex - 当您编写 TeX 源代码时,您如何使用编辑器的自动换行功能?