如何在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