当我点击 Cc Cc 来编译文档时,我的系统设置为 LaTeXmk 是默认排版选项,我只需点击 Enter 即可运行它。
但是,下次我执行 Cc Cc(文档中没有任何更改)时,默认是 BibTeX,而不是 LaTeXmk。如果我选择 LaTeXmk,它会运行,并显示“LaTeXmk:无事可做”,这很好。如果可能的话,我只是想避免在第二次运行中写入 LaTeXmk。
有什么想法我可以这样做吗?
答案1
简短回答:默认情况下,AUCTeX 与 的配合不太好latexmk
。
长答案:AUCTeX 有自己的系统来决定在构建文档时接下来要运行什么命令。这是基于读取编译程序的输出,但它预计实际上只运行了一个命令。相反,它会latexmk
连续运行多个命令,这让 AUCTeX 感到困惑。这就是简短回答的原因。
一个解决方案可能是编写一个特定于的解析器latexmk
,但这并不是特别容易。
但是,请注意,AUCTeX 能够自动运行构建文档所需的所有命令。只需发出C-c C-a完成(输出文档也将自动显示)。另请参阅手动的。为了使其正常工作,"LaTeX"
应该是要运行的默认命令,而不是您为添加的自定义条目latexmk
。AUCTeX 的这个功能的存在就是为什么没有人需要编写解析器来使latexmk
AUCTeX 更好地运行的原因
答案2
我橡皮可能适合你的需求。如果你使用的是 Debian,apt-get install rubber
那就足够了。
然后在你的.emacs
(eval-after-load "tex"
'(progn
(add-to-list 'TeX-expand-list
'("%(RubberPDF)"
(lambda ()
(if
(not TeX-PDF-mode)
""
(add-to-list 'TeX-command-list
'("Rubber" "rubber %(RubberPDF) %t --shell-escape --synctex" TeX-run-shell nil t) t)))
"--pdf --shell-escape --synctex"))))
(defun rubber ()
(interactive)
(save-buffer)
(let ((this-buffer (buffer-name)))
(TeX-run-shell nil (concat "rubber " " --pdf --synctex --shell-escape " this-buffer) t)))
(define-key LaTeX-mode-map (kbd "<f8>") 'rubber)