¿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:
- Guarda el archivo activo sin preguntarme.
- Ejecuta
latexmk
en el archivo activo sinlatexmk
. - 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