Hi Hongyi,
>>>>> Hongyi Zhao <[email protected]> writes:
> Though the above method works, I meet a problem when the project LaTeX
> files are large to some extent. To be more specific, when the project
> is large to a certain extent, the compilation time of latexmk will be
> relatively long, which may lead to the following race condition: When
> the previous latexmk process has not ended, the subsequent latexmk
> process is launched again.
> Any hints for fixing this problem?
Maybe the following stuff works, though I haven't test it.
(defvar my-AUCTeX-process nil)
(use-package smart-compile
:init
(declare-function smart-compile-string "smart-compile")
(defun run-latexmk ()
(when (string-match ".tex$" (buffer-file-name))
(let ((buf (get-buffer "*Background TeX proccess*")))
(if (bufferp buf) (kill-buffer buf))) ;; flush previous log
(unless (and (processp my-AUCTeX-process)
(eq (process-status my-AUCTeX-process) 'run))
(setq my-AUCTeX-process
(start-process-shell-command
"Background TeX" "*Background TeX proccess*"
;; use an external application as the previewer
;;(smart-compile-string "latexmk -pv %f")
;; use pdf-tools
(smart-compile-string "latexmk %f"))))))
(define-minor-mode AutoTeX-mode
"Mode for compiling latex sources and creating PDFs after saving."
:global nil
:lighter " Auto"
(if AutoTeX-mode
(add-hook 'after-save-hook 'run-latexmk t t)
(remove-hook 'after-save-hook 'run-latexmk t)))
:hook (LaTeX-mode . (lambda () (AutoTeX-mode 1))))
Regards,
Ikumi Keita