我有几个 LaTeX 文件有同样的问题。如果我产生错误,修复它,然后尝试编译 pdf,我会得到以下错误。
)Runaway argument?
{{
! File ended while scanning use of \@newl@ablel.
<inserted text>
\par
l.90 \begin{document}
如果我随后单击控制台或删除我的.aux
文件,它会编译成功。您对发生了什么以及如何避免这个烦人的额外步骤有什么想法吗?
答案1
这就是野兽的本性……
TeX 使用(外部)辅助.aux
文件来存储每次运行时的信息。该文件在处理标签和引用时被广泛使用(参见了解引用和标签的工作原理),因为输出例程仅在收集了足够多的内容来填充页面(甚至更多)后才刷新页面。从错误代码片段中可以明显看出,它处理的是违规\label
用法。
以下是导致错误的序列:
- 您编译您的文档。
\label
-信息存储在 中.aux
。此信息将在后续编译期间读取。如果将有问题的代码写入.aux
,您只能在后续运行中发现它。但是,此运行本身可能编译时没有问题。- 你再次编译文档以确保引用正确。然而,现在有问题的代码被读入,导致错误。
请注意,即使在第二次编译(上面的第 3 项)期间,您仍在向 编写有问题的代码.aux
。因此,即使您修复它并重新编译,问题仍会在后续编译中显示。
有些问题是可以恢复的,但有些则是致命的,这取决于您何时将信息写入.aux
。在最坏的情况下 - 即使您已经修复了代码,问题仍然存在 - 删除有问题的代码.aux
并重新编译(至少两次)。
如何避免这个烦人的额外步骤?不要犯错误... :) 好吧,至少在处理写入文件的内容时不要犯错误.aux
。
答案2
虽然这个问题已经有了答案,但我认为它是错误的。TeXShop 用户总是抱怨这个问题,几乎没有其他人抱怨。我几乎从第一版开始就是 TeXShop 的粉丝,但这是它最烦人的功能。我在 TeXShop 中总是遇到这种情况,但在我使用的任何其他程序中几乎从未遇到过,包括手动命令行执行。
发生这种情况的原因与 TeXShop 在排版因错误而中止时将辅助文件保留的状态有关。也就是说,如果编译因错误而停止,然后您修复错误并再次点击编译,则 latex 会看到一个坏的辅助文件。要查看不是 (通常) 您的 latex 错误导致了坏的辅助文件,请不要立即重新启动编译,而是在控制台窗口底部的窗口中输入“x”,以使 latex 继续到最后,而不管是否有错误。现在修复错误并再次编译通常就可以了。
正如上面几个人指出的那样,自动删除辅助文件不是一个好主意。应该发生的是(虽然我不知道如何自动执行)如果辅助文件没有完全写入,它将被删除。
答案3
这是一篇旧帖子,但我偶然看到了它,并认为它很有用。我的观察:
最重要的是,要真正解决这个问题(每次我使用 TexShop 时,这都是一个常见问题):要解决这个问题,您不必丢弃辅助文件。只需在出现错误的控制台窗口中输入“q”。这会使 TeX 更优雅地结束运行,并使辅助文件处于更好的状态。如果您的文件现在没有错误,则下一次编译将成功。
同样重要的是:您可以通过在控制台窗口中输入“q”来防止此问题(如果您记得的话,我经常不记得)。原始错误,然后尝试再次编译。
问题不在于 TeXShop 本身弄乱了辅助文件。相反,问题在于,TeXShop 显然启动了一个新的编译过程,而没有正常结束前一个过程。我可以在不使用 TeXShop 的情况下在命令行上实现这一点。如果您的文件在 TeXShop 中出现此错误,则在命令行上也会发生同样的错误,步骤如下:a. 在文件中引入错误。b. 编译。c. 修复文件。d. 突然终止 TeX 进程或让它挂起。e. 再次编译(如果您让进程挂起,请从不同的终端窗口进行)。
根据我的经验,一旦我的文件变得足够大,每当我犯错误、修复错误并重新编译而不在 TeXShop 控制台窗口中按“q”时,就会发生此错误。出现的实际错误各不相同,但它总是在文件中相当早的位置引用行号。(我的经验可能非常依赖于我通常运行的包类型,不确定。)
如果 TeXShop 在再次编译之前自动正常终止挂起进程,这个问题会消失吗?不确定。