如何调用latexmk在Emacs,并跳转到下一个错误
-
25-09-2019 - |
题
我想用 latexmk 编译我在Emacs LaTeX文档。尤其是我需要Emacs的功能next-error
,这通常被称为与C-X`,并跳转到下一个乳胶误差在文档中。
我想呼叫latexmk
或者使用C-x compile
或AUCTeX C-c C-c
。
首先,我设置latexmk
到使用
$pdflatex = 'pdflatex -interaction=nonstopmode';
方法1:C-X编译强>
余按C-x 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
。会发生同样的问题时,我只是做C-x compile pdflatex -interaction=nonstopmode foo
。
方法2:AUCTeX 强>
我怎样才能设置AUCTeX调用latexmk -pdf
而不是pdflatex
我.tex文件?当然,我想next-error
工作也在这里。
更新:我开始了赏金,因为如果这个工作将是对许多人来说一个伟大的工具。我认为,如果一个解决方案给出了,让我很容易编译使用latexmk
我的LaTeX文档中Emacs和使用next-error
(当然,这些错误可能是的包括的.tex文件被跳转到错误回答了这个问题,不一定在主文件或当前缓冲区)。
<强>更新强>感谢伊凡(和Chris)用于制备AUCTeX + Latexmk工作。在此期间,我发现,使用橡胶来编译LaTeX的也是一个很好的选择。这将在通过gcc
和其它编译器使用的格式显示错误消息,因此它自然可与Emacs的C-x compile
,例如C-x compile rubber --pdf foo
,错误消息被正确地解析。
解决方案
对不起,我没有能力评论,或者我只想补充这是一个注释。克里斯·康威的答案的作品,只是让AucTeX知道要处理的错误信息应该使用TeX-run-TeX
而不是TeX-run-command
。
(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与C-c C-c
运行latexmk。下面将添加Latexmk
选择的TeX的命令列表:
(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-运行命令创建的缓冲区。 (您可能还能够说服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)))