每次出错后,如果不删除辅助文件,TexShop 将无法编译

每次出错后,如果不删除辅助文件,TexShop 将无法编译

我有几个 LaTeX 文件有同样的问题。如果我产生错误,修复它,然后尝试编译 pdf,我会得到以下错误。

)Runaway argument?
{{
! File ended while scanning use of \@newl@ablel.
<inserted text>
                \par
l.90 \begin{document}

如果我随后单击控制台或删除我的.aux文件,它会编译成功。您对发生了什么以及如何避免这个烦人的额外步骤有什么想法吗?

答案1

这就是野兽的本性……

TeX 使用(外部)辅助.aux文件来存储每次运行时的信息。该文件在处理标签和引用时被广泛使用(参见了解引用和标签的工作原理),因为输出例程仅在收集了足够多的内容来填充页面(甚至更多)后才刷新页面。从错误代码片段中可以明显看出,它处理的是违规\label用法。

以下是导致错误的序列:

  1. 您编译您的文档。
  2. \label-信息存储在 中.aux。此信息将在后续编译期间读取。如果将有问题的代码写入.aux,您只能在后续运行中发现它。但是,此运行本身可能编译时没有问题。
  3. 你再次编译文档以确保引用正确。然而,现在有问题的代码被读入,导致错误。

请注意,即使在第二次编译(上面的第 3 项)期间,您仍在向 编写有问题的代码.aux。因此,即使您修复它并重新编译,问题仍会在后续编译中显示。

有些问题是可以恢复的,但有些则是致命的,这取决于您何时将信息写入.aux。在最坏的情况下 - 即使您已经修复了代码,问题仍然存在 - 删除有问题的代码.aux并重新编译(至少两次)。

如何避免这个烦人的额外步骤?不要犯错误... :) 好吧,至少在处理写入文件的内容时不要犯错误.aux

答案2

虽然这个问题已经有了答案,但我认为它是错误的。TeXShop 用户总是抱怨这个问题,几乎没有其他人抱怨。我几乎从第一版开始就是 TeXShop 的粉丝,但这是它最烦人的功能。我在 TeXShop 中总是遇到这种情况,但在我使用的任何其他程序中几乎从未遇到过,包括手动命令行执行。

发生这种情况的原因与 TeXShop 在排版因错误而中止时将辅助文件保留的状态有关。也就是说,如果编译因错误而停止,然后您修复错误并再次点击编译,则 latex 会看到一个坏的辅助文件。要查看不是 (通常) 您的 latex 错误导致了坏的辅助文件,请不要立即重新启动编译,而是在控制台窗口底部的窗口中输入“x”,以使 latex 继续到最后,而不管是否有错误。现在修复错误并再次编译通常就可以了。

正如上面几个人指出的那样,自动删除辅助文件不是一个好主意。应该发生的是(虽然我不知道如何自动执行)如果辅助文件没有完全写入,它将被删除。

答案3

这是一篇旧帖子,但我偶然看到了它,并认为它很有用。我的观察:

  1. 最重要的是,要真正解决这个问题(每次我使用 TexShop 时,这都是一个常见问题):要解决这个问题,您不必丢弃辅助文件。只需在出现错误的控制台窗口中输入“q”。这会使 TeX 更优雅地结束运行,并使辅助文件处于更好的状态。如果您的文件现在没有错误,则下一次编译将成功。

  2. 同样重要的是:您可以通过在控制台窗口中输入“q”来防止此问题(如果您记得的话,我经常不记得)。原始错误,然后尝试再次编译。

  3. 问题不在于 TeXShop 本身弄乱了辅助文件。相反,问题在于,TeXShop 显然启动了一个新的编译过程,而没有正常结束前一个过程。我可以在不使用 TeXShop 的情况下在命令行上实现这一点。如果您的文件在 TeXShop 中出现此错误,则在命令行上也会发生同样的错误,步骤如下:a. 在文件中引入错误。b. 编译。c. 修复文件。d. 突然终止 TeX 进程或让它挂起。e. 再次编译(如果您让进程挂起,请从不同的终端窗口进行)。

  4. 根据我的经验,一旦我的文件变得足够大,每当我犯错误、修复错误并重新编译而不在 TeXShop 控制台窗口中按“q”时,就会发生此错误。出现的实际错误各不相同,但它总是在文件中相当早的位置引用行号。(我的经验可能非常依赖于我通常运行的包类型,不确定。)

如果 TeXShop 在再次编译之前自动正常终止挂起进程,这个问题会消失吗?不确定。

相关内容