我在使用 AUCTeX 时经常遇到这个错误:
TeX-error: Error occured after last TeX file closed
但是,例如pdflatex
在命令行上运行时,我收到了正确的错误消息。但行号信息并不总是有用的,尤其是包含多个文件时。我希望能够在 Emacs 中看到错误。
答案1
AUCTeX 11.89
从此版本的 AUCTeX 开始,选项TeX-file-line-error
默认启用file:line:error
解决问题的消息。因此,从此版本开始,您不会再遇到此类问题。我还建议将所有更改恢复为LaTeX-command-style
,以确保使用默认值。
请参阅下文以了解先前版本。
AUCTeX 11.88 或更早版本
您无需编辑文件,texmf.cnf
只需向 TeX 处理器添加选项即可-file-line-error
。为此,请将以下代码添加到您的.emacs
:
(setq LaTeX-command-style '(("" "%(PDF)%(latex) -file-line-error %S%(PDFout)")))
另请参阅AUCTeX 常见问题解答:
8.为什么
TeX-next-error
(C-c `)会失败?在写入日志文件时,TeX 将与文件相关的信息(包括错误消息)放在一对括号之间。AUCTeX 通过解析日志文件并计算括号数来确定发生错误的文件。当存在其他不匹配的括号时,此方法可能会失败。
作为一种解决方法,您可以为日志文件激活所谓的 file:line:error 消息。(这些更容易解析,但可能缺少一些细节。)您可以在 TeX 系统的配置中执行此操作(请参阅其手册以了解它在哪里),或者向 (la)tex 调用添加命令行开关,例如通过自定义
LaTeX-command-style
或TeX-command-list
。
注:已经回答这里。
答案2
这Gentoo 论坛给出了一个对我有用的解决方案:
我发现如果我注释掉
\usepackage{hyperref}
一切正常。显然,emacs、auctex 和 hyperref 之间存在某种交互,导致了这个问题。
这个解决方案可以快速尝试,但并不理想(您必须hyperref
稍后取消注释)。
更好的解决方案是遵循Bug-AUCTeX 列表,在之前的论坛帖子中提到。恢复快速修复:
在文件中将更改
file_line_error_style
为。f
t
texmf.cnf
此文件的位置和名称可能会有所不同。以下是一些可能的值:
/usr/share/texmf/web2c/texmf.cnf
/usr/share/texlive/texmf/web2c/texmf.cnf
/etc/texmf/texmf.d/95NonPath.cnf
您可能需要运行update-texmf
,但在我的 TeXLive 安装中我不需要这样做。我只需取消注释hyperref
之前注释的行即可。
答案3
giordano 的解决方案很棒,但我却遇到了其他问题。
emacs24.2.1
直到最近我在 win7 上重建++之前auctex11.87
,我从来没有遇到过这个问题miktex2.9
。我不仅收到了"TeX-error: Error occured after last TeX file closed"
错误消息,甚至无法直接编译新创建的 tex 文件C-c C-c y RET
。emacs 不会提醒我像往常一样保存新文件然后再进行编译,但我不得不先用鼠标单击“保存”图标。
在寻找解决方案时,我偶然发现了以下页面 comments.gmane.org/gmane.emacs.auctex.general/5070
所以我尝试替换这两个文件tex-buf.el
并tex-buf.elc
从auctex11.87使用来自auctex11.86。
我不确定我是否破坏了 auctex11.87 的一些新功能,但至少问题已经解决。