3

我正在尝试在 emacs 中使用 flymake 进行 .tex 文件编辑。

在我输入一个不平衡的大括号{}. 当 flymake 启动时,它会返回错误:

Flymake:运行时出现配置错误(pdflatex -file-line-error -draftmode -interaction=nonstopmode /home/matt/test_flymake.tex)。Flymake 将关闭。

为了完整起见,这是我.emacs文件的相关部分:

(defun flymake-get-tex-args (file-name)
  (list "pdflatex"
    (list "-file-line-error" "-draftmode" "-interaction=nonstopmode" file-name)))

查看 flymake手册可以了解正在发生的事情:

CFGERR:语法检查过程返回非零退出代码,但没有报告错误/警告。这表明可能存在配置错误(例如,语法检查工具没有合适的错误消息模式)。

因此,挖掘日志(flymake-log-value = 3)我发现问题在于pdflatex解析器返回非零退出代码,但不会生成 flymake 识别为错误的内容。具体来说:

parsed 'Runaway argument?', no line-err-info
parsed '{Conclusions \bibliographystyle {plain} \bibliography {ma\ETC.', no line-err-info
parsed '! File ended while scanning use of \@xdblarg.', no line-err-info
parsed '<inserted text> ', no line-err-info
parsed '                \par ', no line-err-info
parsed '<*> /home/matt/test_flymake.tex', no line-err-info
parsed '                               ', no line-err-info
parsed '! Emergency stop.', no line-err-info
parsed '<*> /home/matt/test_flymake.tex', no line-err-info
parsed '                               ', no line-err-info
parsed '!  ==> Fatal error occurred, no output PDF file produced!', no line-err-info

所以,pdflatex我对我的“失控论点”很生气,但不会产生flymake被认为是错误的东西。挖掘flymake.el文件显示其中flymake-err-line-patterns包含以下模式:

("\\(LaTeX \\(Warning\\|Error\\): .*\\) on input line \\([0-9]+\\)" 20 3 nil 1)

所以......最后一个问题似乎是flymake不能识别Runaway argument?为错误消息。

现在,我的问题是:我错过了什么吗?我不能成为第一个遇到这个问题的人,但我找不到任何关于它的东西。我发现很难相信每个人都只是构建了一个自定义解决方案来修改错误模式,特别是因为我没有做任何不寻常的事情,只是想让它开箱即用。

万一这很重要,我在 Ubuntu 12.04 上使用 emacs 24.3 并运行 pdflatex (pdftex) 2012。

我错过了什么?感谢大家提供的任何建议。

4

1 回答 1

0

好吧,我猜 3 天内有 13 次观看意味着我不太可能得到答案,所以这就是最终对我有用的东西......

像大多数 emacs 问题一样,这可以通过编辑.emacs文件来解决。将此块添加到您的文件中:

(add-to-list
    `flymake-err-line-patterns
    '("Runaway argument?" nil nil nil)) ; fixes unbalanced braces in LaTeX files

这应该可以解决latexand的问题pdflatex

请注意, (pdf)latex 没有列出在产生此错误时提供行号(这是nil nil nil代表的内容),因此如果发生这种情况,那么 flymake 会告诉您错误出现在.tex文件的第一行。

M-C-f(forward-sexp) 和M-C-b(backward-sexp) 将跳过平衡括号,让您搜索不匹配的括号。资源

为了完整起见,下面是 flymake 检查我的.tex文件的方式:

(defun flymake-get-tex-args (file-name)
  (list "pdflatex"
        (list "-file-line-error" "-draftmode" "-interaction=nonstopmode" file-name)))

如果您的语法检查器不同,或产生不同的错误消息,则将"Runaway argument?"文本替换为检查器的错误消息。

于 2013-09-16T17:02:30.313 回答