如何在emacs中调用latexmk,然后跳转到下一个

我想用latexmk在Emacs中编译我的LaTeX文档。 特别是我需要Emacs功能next-error ,通常用Cx调用,并跳转到文档中的下一个LaTeX错误。

我想使用Cx compile或AUCTeX Cc Cc来调用latexmk

首先,我设置latexmk使用

$pdflatex = 'pdflatex -interaction=nonstopmode';

选项1:Cx编译

我按Cx compile并输入latexmk -pdf foo ,它运行pdflatex 。 但即使*编译*缓冲区包含错误, next-error也不会跳转到错误:

! Paragraph ended before author was complete.
<to be read again> 
                   par 
l.48 
[...]
Compilation exited abnormally with code 12 

我如何在第48行自动跳到这个错误?

请注意,解析胶乳输出的这个问题与latexmk没有直接关系。 当我只是做Cx compile pdflatex -interaction=nonstopmode foo时,会出现同样的问题。

选项2:AUCTeX

我如何设置AUCTeX在我的.tex文件上调用latexmk -pdf而不是pdflatex ? 当然,我想next-error在这里工作过。

更新:我开始赏金,因为如果这个工作,它会是很多人的一个很好的工具。 我认为这个问题的答案是,如果给出了一个解决方案,可以让我在Emacs中使用latexmk轻松编译我的LaTeX文档,并使用next-error跳转到next-error (当然,错误可能在包含.tex文件中,不一定在主文件中文件或当前缓冲区)。

更新:感谢Ivan(和Chris)制作AUCTeX + Latexmk的工作。 与此同时,我发现使用橡胶来编译LaTeX也是一个很好的选择。 它将以gcc和其他编译器使用的格式显示错误消息,所以它自然适用于Emacs Cx compile ,例如Cx compile rubber --pdf foo ,并正确解析错误消息。


对不起,我没有评论的能力,或者我只是将其添加为评论。 Chris Conway的答案是有效的,除了它应该使用TeX-run-TeX而不是TeX-run-command以便AucTeX知道处理错误消息。

(add-hook 'LaTeX-mode-hook (lambda ()
  (push 
    '("Latexmk" "latexmk -pdf %s" TeX-run-TeX nil t
      :help "Run Latexmk on file")
    TeX-command-list)))

添加类似的东西也可能是明智的

'("%(-PDF)"
  (lambda ()
    (if (and (not TeX-Omega-mode)
             (or TeX-PDF-mode TeX-DVI-via-PDFTeX))
        "-pdf" "")))

TeX-expand-list并使用"latexmk %(-PDF) %s"以便它可以在pdf和dvi模式下工作。 就我个人而言,我发现使用自定义更容易,特别是在您进行实验时。


AucTeX用Cc Cc运行latexmk相对容易。 以下将在TeX命令列表中添加一个Latexmk选项:

(add-hook 'LaTeX-mode-hook (lambda ()
  (push 
    '("Latexmk" "latexmk -pdf %s" TeX-run-command nil t 
      :help "Run Latexmk on file")
    TeX-command-list)))

诀窍是获得next-error的工作。 如果你在AucTeX源代码中进行挖掘,你可能会发现它在TeX输出缓冲区使用的正则表达式; 它不会自动应用到由TeX-run-command创建的缓冲区。 (你也可以说服compile模式使用这个正则表达式。)

另一种方法是重新定义变量LaTeX-command 。 这有点不便,因为我认为许多AucTeX函数假设他们可以将命令行选项粘贴到该字符串上并执行结果。


如果在auctex中设置,则添加%(模式)可为latexmk提供更多非互动选项。

(add-hook 'LaTeX-mode-hook (lambda ()
  (push 
    '("Latexmk" "latexmk -pdf %(mode) %s" TeX-run-TeX nil t
      :help "Run Latexmk on file")
    TeX-command-list)))
链接地址: http://www.djcxy.com/p/33387.html

上一篇: How to call latexmk in emacs, and jump to next

下一篇: Icelandic, utf8 and utf8x in LaTeX