我想使用latexmk在Emacs中编译我的LaTeX文档.特别是我需要Emacs功能next-error,通常使用Cx`调用,并跳转到文档中的下一个LaTeX错误.
我想打电话latexmk或使用C-x compileAUCTeX C-c C-c.
首先,我开始latexmk使用
$pdflatex = 'pdflatex -interaction=nonstopmode';
Run Code Online (Sandbox Code Playgroud)
选项1:Cx编译
我按下C-x compile并键入latexmk -pdf foo,运行pdflatex.但是next-error,即使*compilation*缓冲区包含错误,也不会跳转到错误:
! Paragraph ended before \author was complete.
<to be read again>
\par
l.48
[...]
Compilation exited abnormally with code 12
Run Code Online (Sandbox Code Playgroud)
如何在第48行自动跳转到此错误?
请注意,解析乳胶输出的这个问题与latexmk直接无关.我刚才也会出现同样的问题C-x compile pdflatex -interaction=nonstopmode foo.
选项2:AUCTeX
如何设置AUCTeX latexmk -pdf而不是pdflatex我的.tex文件?当然,我也想next-error在这里工作.
更新:我开始获得赏金,因为如果这有效,对许多人来说这将是一个很好的工具.我认为如果给出一个解决方案可以让我latexmk在Emacs中轻松编译我的LaTeX文档并使用跳转到错误next-error …
这是如何将latexmk绑定到Emacs中的一个键并让它显示错误(如果有的话)的后续内容.
我正在使用Emacs中的一个函数来编译LaTeX文档,latexmk但它的行为并不像我想要的那样.我使用的功能是一个JouniK.Seppänen提出:
(defun run-latexmk ()
(interactive)
(let ((TeX-save-query nil)
(TeX-process-asynchronous nil)
(master-file (TeX-master-file)))
(TeX-save-document "")
(TeX-run-TeX "latexmk" "latexmk" master-file)
(if (plist-get TeX-error-report-switches (intern master-file))
(TeX-next-error t)
(minibuffer-message "latexmk done"))))
(add-hook 'LaTeX-mode-hook
(lambda () (local-set-key (kbd "C-0") #'run-latexmk)))
Run Code Online (Sandbox Code Playgroud)
主要的问题是,当我使用该功能时(通过按下C-0),它有时会把我扔进一个名为TeX Live 2011的空缓冲区.
重现此问题的一种方法是尝试编译以下内容(vc.tex不存在并不重要):
\immediate\write18{sh ./vc}
\input{vc}
\documentclass{article}
\begin{document}
\end{document}
Run Code Online (Sandbox Code Playgroud)
另一种再现方式是尝试编译以下内容:
\documentclass{article}
\newcommand{foo}{
\begin{document}
\end{document}
Run Code Online (Sandbox Code Playgroud)
一个小的(装饰性的)问题是迷你缓冲器的高度有时会从一条线扩展到两条线,run-latexmk并且在它运行之后它会弹回到一条线高度.我在找到一个简单的例子来重现这种行为时遇到了问题(我只为非常大的文档复制了它).
我想解决这两个问题.我也有兴趣以其他方式与我在Emacs中与latexmk进行交互.
这是*... output* buffer最后一个示例(缺少结束大括号的示例\newcommand:
Running `latexmk' on `test' with ``latexmk''
Latexmk: This is …Run Code Online (Sandbox Code Playgroud)