Как то так?
(require 'tex-buf)
(defun run-latexmk ()
(interactive)
(let ((TeX-save-query nil)
(TeX-process-asynchronous nil)
(master-file (TeX-master-file)))
(TeX-save-document "")
(TeX-run-TeX "latexmk" "latexmk" master-file)
(if (plist-get TeX-error-report-switches (intern master-file))
(TeX-next-error t)
(minibuffer-message "latexmk done"))))
(add-hook 'LaTeX-mode-hook
(lambda () (local-set-key (kbd "C-0") #'run-latexmk)))
Редактировать :
TeX-save-document
сохраняет ваш главный файл и любые вложенные файлы (если у вас есть только один файл, это ваш главный файл), а когда TeX-save-query
равен нулю, он не запрашивает подтверждения. Затем TeX-run-TeX
запускает latexmk, используя механизм, обычно используемый для запуска TeX
, который включает в себя анализ сообщений об ошибках, но, поскольку он обычно запускает асинхронный процесс, мы устанавливаем TeX-process-asynchronous
в ноль, чтобы дождаться его завершения. Странно выглядящая форма plist-get
- это документированный способ проверки ошибок из TeX-run-TeX
(см. Комментарии в tex-buf.el
), и, если есть ошибки, мы переходим к первой; если ошибок нет, мы показываем сообщение в минибуфере просто для удовольствия.
Наконец, local-set-key
- это один из способов привязки клавиши к функции.