emacs auctex latexmk

¿Cómo puedo enlazar latexmk a una clave en Emacs y hacer que muestre errores si hay alguna



auctex (3)

Estoy usando AUCTeX y me gustaría enlazar una clave, por ejemplo, C-0 , que hace lo siguiente:

  1. Guarda el archivo activo sin preguntarme.
  2. Ejecuta latexmk en el archivo activo sin latexmk .
  3. Me muestra errores si latexmk encuentra alguna por.

Mi problema no es cómo enlazar una clave (para la cual Tyler publicó un enlace en un comentario a continuación), sino cómo encontrar una función que cumpla con el elemento 1–3.

Llamo a Latexmk por

(add-hook ''LaTeX-mode-hook (lambda () (push ''("Latexmk" "latexmk %s" TeX-run-TeX nil t :help "Run Latexmk on file") TeX-command-list)))

Este es mi .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'';

Estoy usando Emacs 23.3 y AUCTeX 11.86.


¿Algo como esto?

(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)))

Edición : TeX-save-document guarda su archivo maestro y cualquier subarchivo (si solo tiene un archivo, es su archivo maestro), y cuando TeX-save-query es nil, no le pide confirmación. Luego, TeX-run-TeX ejecuta latexmk utilizando el mecanismo que se usa generalmente para ejecutar TeX , que incluye el análisis de mensajes de error, pero debido a que generalmente inicia un proceso asíncrono, configuramos TeX-process-asynchronous en nil para esperar a que finalice. El formulario plist-get aspecto plist-get es la forma documentada de verificar los errores de TeX-run-TeX (ver comentarios en tex-buf.el ), y si hay errores, tex-buf.el al primero; Si no hay errores, mostramos un mensaje en el minibúfer solo por diversión.

Finalmente, local-set-key es una forma de vincular una clave a la función.


¿Hace esto lo que quieres?

(defun my-tex () "Saves the current buffer and runs LaTeX, all with no prompts or further interaction." (interactive) (save-buffer) (TeX-command "LaTeX" ''TeX-master-file -1))

No uso latexmk, pero para hacer que todo funcione es cambiar la cadena "LaTeX" por la cadena de nombre que usa para latexmk en TeX-command-list (que probablemente sea solo "latexmk" o "Latexmk" ).

Me alegra que hayas preguntado, ¡ya que esto me será útil ahora!


Suponiendo que ya ha utilizado la respuesta en Cómo llamar a latexmk en emacs, y saltar al siguiente error para agregar latexmk a la lista de comandos de AUCTeX, puede usar la siguiente función:

(defun run-latexmk () (interactive) (save-buffer) (TeX-command "Latexmk" ''TeX-master-file 0) (if (plist-get TeX-error-report-switches (intern (TeX-master-file))) (next-error))) ;; 0 -> suppress confirmation

Y use cualquiera de las técnicas de enlace de teclas para enlazarlo a C-0 ; Aquí hay uno que es local al modo TeX:

(define-key TeX-mode-map (kbd "C-0") ''run-latexmk)

La función run-latexmk se basa en excavar a través de TeX-command-master y simplificarla según sus necesidades. Tenga en cuenta que la llamada a (next-error) puede no ocurrir siempre, ya que LaTeX puede confundirse con su error y hacer una pausa esperando la entrada