Emacs/AUCTeX/LaTeXmk:仅在第一次运行时才使用默认编译命令?

Emacs/AUCTeX/LaTeXmk:仅在第一次运行时才使用默认编译命令?

当我点击 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 的这个功能的存在就是为什么没有人需要编写解析器来使latexmkAUCTeX 更好地运行的原因

答案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)

相关内容