emacs latex elisp auctex

Argumentos del prefijo Emacs/AUCTeX



auctex emacs (6)

Creo que la esencia de esta pregunta es "¿cómo puedo compilar rápidamente mi documento TeX de AUCTeX sin todas las pulsaciones de teclas y confirmaciones?"

Mi respuesta a eso es usar el comando latexmk en lugar de intentar presionar a AUCTeX para que lo haga.

latexmk -pdf -pvc myfile.tex

latexmk controlará el archivo en cuestión y lo reconstruirá tan pronto como lo guarde. Si usa un buen visor de PDF, notará el cambio en PDF y lo volverá a mostrar de inmediato. En OS X, skim funciona bien para esto.

En modo LaTeX, Cc Cc está obligado a:

(TeX-command-master &optional OVERRIDE-CONFIRM)

Normalmente, esta función interactiva ejecuta un comando, tal vez una compilación LaTeX, solicitando confirmación .

En tex-buf.el dice:

Si se da un argumento de prefijo OVERRIDE-CONFIRM, la confirmación dependerá de que sea positiva en lugar de la entrada en `TeX-command-list ''.

Esto es un poco críptico para mí y leer Ch v TeX-command-list no ayudó.

¿Cómo puedo pasar el argumento de prefijo a "TeX-command-master" para evitar todas las solicitudes de confirmación?


Eche un vistazo a la documentación de Emacs para conocer los argumentos del prefijo. En general, puede pasar un comando a un argumento de prefijo con Cu seguido de un número. Para números de un dígito, también puede escribir Meta seguido por el dígito. Por lo tanto, para pasar un argumento de prefijo positivo a TeX-command-master , puede escribir:

M-1 Cc Cc

Sin embargo, esto realmente agregará otra confirmación de minibúfer, concretamente sobre el comando de shell que se utilizará para compilar la fuente de LaTeX. Sin el argumento de prefijo, se usa un valor predeterminado dependiente del comando para eso.

Si desea evitar la pregunta sobre el comando a usar, puede vincular la variable no documentada TeX-command-force a "LaTeX" a través de:

(setq TeX-command-force "LaTeX")

Sin embargo, esto tendrá la desventaja de que básicamente estás vinculando Cc Cc al comando "látex", no puedes usar ninguno de los otros comandos como "bibtex" o "ver".

Aparte de eso, LaTeX-mode no permite ninguna personalización de Cc Cc . Sus mejores opciones son aconsejar la función TeX-command-query o vincular Cc Cc a una función de contenedor para establecer TeX-command-force forma dinámica. Esta última sería probablemente la opción preferida si también desea guardar automáticamente el búfer.


Construir y ver

Nuevamente, esta solución, en lugar de modificar el comportamiento del TeX-command-master , lo reescribe. La versión reescrita del comando, llamada build-view , sigue una lógica bastante directa.

  1. Si el búfer de archivos LaTeX no está modificado, ejecuta el visor predeterminado;
  2. Si el búfer está sucio, ejecuta el compilador LaTeX predeterminado y, después de la compilación, abre el resultado en el visor predeterminado.

Aquí está el código:

(defun build-view () (interactive) (if (buffer-modified-p) (progn (let ((TeX-save-query nil)) (TeX-save-document (TeX-master-file))) (setq build-proc (TeX-command "LaTeX" ''TeX-master-file -1)) (set-process-sentinel build-proc ''build-sentinel)) (TeX-view))) (defun build-sentinel (process event) (if (string= event "finished/n") (TeX-view) (message "Errors! Check with C-`")))

Ahora puede escribir Mx build-view e iniciar el proceso de vista de compilación o asociarlo con un nuevo enlace de clave como "F2":

(add-hook ''LaTeX-mode-hook ''(lambda () (local-set-key (kbd "<f2>") ''build-view)))

Nota: Tal como lo sugiere Tyler, la variable TeX-save-query se cambia localmente, por lo tanto, el antiguo Cc Cc / TeX-command-master no se ve afectado y seguirá solicitando confirmaciones.

¡Edite este código para que sea mejor o más fácil de leer!


Parece que el misterio de OVERRIDE-CONFIRM continúa. Mientras tanto, un compañero sugiere que, si no podemos administrar TeX-command-master , simplemente podemos reescribirlo.

En mi versión, basada en la suya, si el buffer no se modifica, se lanza el visor externo; si se modifica el búfer, se ejecuta el compilador. Todo sin confirmación para guardar o ejecutar el comando dado.

(defun my-run-latex () (interactive) (if (buffer-modified-p) (progn (setq TeX-save-query nil) (TeX-save-document (TeX-master-file)) (TeX-command "LaTeX" ''TeX-master-file -1)) (TeX-view)))

Por supuesto, uno puede atar my-run-latex a cualquier combinación de teclas.

Desde el punto de vista del usuario, esta es una solución a mi propia pregunta. ¿Hago clic en la etiqueta de cierre? Bueno, desde el punto de vista del curioso tipo, todavía estoy interesado en comprender los misteriosos tecnicismos del TeX-command-master .

Si alguien llegara a saber ...

PD Sí, TeX-save-query anula la solicitud de guardar archivo, también con TeX-command-master , que es Cc Cc . Pero aún se te pedirá que confirmes la acción del comando.


Si solo busca compilar la fuente de látex sin un cuadro de diálogo de confirmación, simplemente agregue lo siguiente a su .emacs:

(setq TeX-command-force "")

A continuación, puede compilar la fuente con Cc Cc y no solicitará confirmar. El único problema con esta solución es que ya no puedes cambiar el comando, pero con la mayoría de los documentos no querrás hacerlo. Podría sugerir que al mismo tiempo pueda agregar esto a su .emacs para una mayor flexibilidad, dándole un Cc Cc equivalente al comportamiento anterior:

(define-key LaTeX-mode-map "/C-c/C-a" ;;; ''a'' for ask, change to anything you want (lambda (arg) (interactive "P") (let ((TeX-command-force nil)) (TeX-command-master arg))))

A continuación, puede trabajar en su documento, hacer una Cx C, Cc Cc y luego Cc Cv para verla. Al igual que otros, sugirió que también puede hacer lo mismo para el comando de guardar y hacer que se compile automáticamente al guardar, pero algunos de mis documentos están en CVS, así que evito poner ganchos en eso.

Gracias a Iván por ayudarme con esto - no sé si está en


Me quedé perplejo durante un rato con la frecuencia OVERRIDE-CONFIRM y no pude entender cómo se suponía que debía funcionar. Si desea ejecutar Latex automáticamente en su archivo, sin preocuparse por guardarlo primero, o confirmar que desea el látex (en lugar de ver, bibtex, etc.), podría usar una función como esta:

(defun my-run-latex () (interactive) (TeX-save-document (TeX-master-file)) (TeX-command "LaTeX" ''TeX-master-file -1))

Vincula esto a algo útil, y aún tendrás Cc Cc para cuando quieras usar los comandos de procesamiento predeterminados. Es posible que desee modificar la línea de TeX-command de TeX-command si "Latex" no es el procesador al que desea llamar.