使用带有Flymake的.csx文件的emacs - 错误与不平衡的大括号

时间:2013-09-12 23:55:03

标签: emacs latex tex pdflatex flymake

我正在尝试在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 manual可以看出发生了什么:

  

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。

我错过了什么?感谢所有您提供的建议。

1 个答案:

答案 0 :(得分:0)

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

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

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

这应解决latexpdflatex的问题。

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

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

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

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

如果您的语法检查器不同,或者产生不同的错误消息,请将"Runaway argument?"文本与您的检查程序的错误消息交换出来。