I’m using AUCTeX and I would like to bind a key, e.g. C-0, that does the following:
- Saves the active file without prompting me.
- Runs
latexmkon the active file without prompting me. - Shows me errors if
latexmkencounters any by .
My problem is not how to bind a key (for which Tyler posted a link in a comment below) but how to come up with a function that accomplishes item 1–3.
I call Latexmk by
(add-hook 'LaTeX-mode-hook (lambda ()
(push
'("Latexmk" "latexmk %s" TeX-run-TeX nil t
:help "Run Latexmk on file")
TeX-command-list)))
This is my .latexmkrc
$pdf_mode = 1;
$recorder = 1;
$latex = 'latex -recorder -halt-on-error -interaction=nonstopmode -shell-escape';
$pdflatex = 'pdflatex -recorder -halt-on-error -interaction=nonstopmode -shell-escape';
I’m using Emacs 23.3 and AUCTeX 11.86.
Something like this?
Edit:
TeX-save-documentsaves your master file and any sub-files (if you just have one file, it’s your master file), and whenTeX-save-queryis nil, it doesn’t ask you for confirmation. ThenTeX-run-TeXruns latexmk using the mechanism usually used for runningTeX, which includes error message parsing, but because it usually starts an asynchronous process, we setTeX-process-asynchronousto nil to wait for it to end. The odd-lookingplist-getform is the documented way to check for errors fromTeX-run-TeX(see comments intex-buf.el), and if there are errors, we jump to the first one; if there are no errors, we show a message in the minibuffer just for fun.Finally, the
local-set-keyis one way to bind a key to the function.