使用emacs处理.tex文件时,使用Flymake出现括号不平衡的错误。

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手册可以了解一下正在发生什么: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 报告“runaway argument”错误,但没有生成 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

嗯,我猜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(backward-sexp)将跳过平衡括号,让您搜索未匹配的括号。 source

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

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

如果你的语法检查器不同,或者产生不同的错误信息,请用你的检查器的错误信息替换掉 "Runaway argument?" 文本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接