This package provides a minor mode where latexmk continuously compiles the document in the background and the errors/warnings are reported via Flymake.
Download this repository, install using M-x package-install-file
(or package-vc-install, straight, elpaca, …), and add something like the following to your init file:
(use-package auctex-cont-latexmk
:after latex
:bind
(:map LaTeX-mode-map
("C-c k" . auctex-cont-latexmk-toggle)))
Replace the keybinding with whatever you prefer (or delete it and just run the command via M-x
).
The command auctex-cont-latexmk-toggle
behaves the way that I prefer – it enables both auctex-cont-latexmk-mode
and flymake-mode
, restricting the backends for the latter to those coming from the former. If you want to use continuous compilation but no flymake, then you might instead wish to bind a key to auctex-cont-latexmk-mode
or simply do M-x auctex-cont-latexmk-mode
. If you already use flymake for something else in tex buffers, then you might wish to write your own “wrapper” for auctex-cont-latexmk-mode
akin to auctex-cont-latexmk-toggle
.
The way the Flymake backend works, it will update only when the latexmk process reaches a “watching for changes” state and the buffer is unmodified. The workflow is thus to save the file, wait a few seconds for the compilation to complete, and then to use Flymake to navigate the errors. I configure Flymake to use M-n
and M-p
for navigation, and also use (setq flymake-show-diagnostics-at-end-of-line t)
(available in Flymake 1.3.6, part of Emacs 30+), which displays the error/warning messages in the buffer itself rather than just in the minibuffer:
(use-package flymake
:custom
(flymake-show-diagnostics-at-end-of-line t)
:bind
(:map flymake-mode-map
("M-n" . flymake-goto-next-error)
("M-p" . flymake-goto-prev-error)))
I also bind flymake-show-diagnostics-buffer
, which gives an overview of all errors. You can find my current setup in my config.
That’s all. I prefer this workflow to the alternative in which one compiles the document manually via TeX-command-master
(C-c C-c
) and navigates the warning/error messages using next-error
(M-n
) and previous-error
(M-p
). It also gives a handy way to keep the .aux files up-to-date; I take advantage of this feature in the packages czm-preview.el and czm-tex-fold.el to annotate the TeX buffer with label numbers.
- TeX compilers are not so good at locating errors involving braces. For this, the Emacs commands
check-parens
,tex-validate-buffer
andtex-validate-region
are indispensable. In particular, you should always try these commands when you encounter errors at the bottom of a file concerning an incomplete argument or environment. - You can use the command
M-x auctex-cont-latexmk-help-at-point
(or bind it to a key) if you want to see AUCTeX’s help message (if any) for the error at point.
- You can tweak the underlying
latexmk
command viaM-x customize-variable auctex-cont-latexmk-command
. - This package respects the AUCTeX variable
TeX-output-dir
: you can use that variable to control where the output files generated via latexmk are placed.
- The compilation takes place in a buffer pvc-filename, so look there if you need to see the output.
- AUCTeX’s error parsing doesn’t work well with filenames (or paths) that contain parentheses, so don’t put parentheses in your filenames.