Emacs (AUCTeX / YaTeX)

Abra un archivo .tex en un GNU Emacs recién instalado y ya estará en un modo LaTeX, sin paquete alguno: viene de fábrica como lisp/textmodes/tex-mode.el. AUCTeX es lo que se instala para sustituir ese modo, y ambos están entrelazados desde el principio, porque AUCTeX creció precisamente de ese archivo. En 1986, en la Universidad de Aalborg (Dinamarca), alguien empezó a añadir al tex-mode.el de Emacs funciones para insertar comandos de fuente y caracteres daneses; el AUC del nombre viene de Aalborg Universitetscenter, el nombre danés de la universidad entonces. Esta página trata lo que AUCTeX añade al modo integrado, por qué C-c C-c hace una pregunta distinta cada vez que se pulsa, RefTeX (que no forma parte de AUCTeX), preview-latex y el preview.sty que quizá ya esté usando sin saberlo, y YaTeX, la alternativa de la comunidad japonesa.

El modo LaTeX integrado y AUCTeX: mismas teclas, comandos distintos

Incluso en un Emacs de serie, abrir un .tex lo sitúa en latex-mode: C-c C-b compone, C-c C-o inserta un par \begin\end, C-c C-e cierra el bloque abierto más interno y C-c C-v abre el visor. Qué modo se activa se decide leyendo el archivo: tex-mode busca la primera barra invertida que no esté en un comentario y comprueba si va seguida de documentclass, documentstyle, begin, section, chapter, newcommand, RequirePackage u otras pocas. Si es así, latex-mode; si no, plain-tex-mode. Cuando no encuentra nada, recurre al valor de tex-default-mode, que por omisión es latex-mode.

Instale AUCTeX y el mismo teclado queda conectado a otro instrumento. Las teclas siguen siendo en gran medida las mismas y los comandos que hay detrás no —de ahí la sensación de que el comportamiento ha cambiado bajo los dedos—. En el modo integrado, C-c C-f es tex-file, que compone el archivo entero; en AUCTeX, C-c C-f es TeX-font, que inserta una plantilla de comando de fuente. El C-c C-e integrado es latex-close-block, que cierra un entorno abierto; el de AUCTeX es LaTeX-environment, que pregunta qué entorno insertar. Puestos uno junto a otro, ambos pares dicen la diferencia por sí solos: el modo integrado es un modo de edición capaz de ejecutar TeX, mientras que AUCTeX es un entorno que conoce la estructura del documento.

Cómo conviven ambos se ordenó, de hecho, en 2024. AUCTeX 14.0.1 renombró sus modos a los capitalizados LaTeX-mode, plain-TeX-mode y docTeX-mode, precisamente para dejar de chocar con los nombres integrados. Desde entonces, en Emacs 29 y posteriores, en qué modo aterriza un .tex lo decide la redirección mediante major-mode-remap-alist y major-mode-remap-defaults. La puerta de entrada del lado de AUCTeX es la opción de usuario TeX-modes, que permite, por ejemplo, devolver plain TeX al modo integrado y dejar LaTeX en AUCTeX. El manual aconseja personalizar TeX-modes en vez de tocar major-mode-remap-* a mano. Una trampa: en Emacs 29 y posteriores, teclear M-x latex-mode directamente da el modo integrado, no AUCTeX. El código de configuración que llama a los antiguos nombres en minúscula cae justo ahí.

Instalar AUCTeX y el manual que va dos años por detrás

AUCTeX no viene con GNU Emacs. Es un proyecto GNU distribuido como paquete en GNU ELPA, bajo GPL v3. GNU ELPA está activo de fábrica desde Emacs 24.1, así que instalarlo es M-x list-packages, marcar auctex con i y pulsar x —o el equivalente M-x package-install RET auctex RET—. Dos requisitos. El primero, que latexmk --version funcione en una terminal, es decir, que los comandos de TeX estén en el PATH: la composición la hace el TeX Live, MacTeX o MiKTeX instalado en la máquina, y Emacs se limita a lanzarlo como proceso hijo. El segundo, la versión de Emacs: el AUCTeX actual exige Emacs 28.1 o posterior.

Aquí hay un desajuste capaz de devorarle una tarde entera: el AUCTeX que distribuye GNU ELPA y el manual publicado en gnu.org no son la misma versión. Comprobado en agosto de 2026, lo más nuevo en GNU ELPA era la 14.1.2, con fecha del 14 de enero de 2026, mientras que el manual en línea de gnu.org seguía diciendo al principio que documentaba la versión 13.3, del 14 de enero de 2024. Dos años de diferencia. El sitio tampoco tiene página de novedades de versión. Así que, para saber cómo se comporta realmente un ajuste o una tecla, lea el manual Info de la versión instalada, con C-h i. La página que le devuelve un buscador no describe necesariamente su máquina.

Lo primero que conviene poner en init.el (normalmente ~/.emacs.d/init.el) es TeX-PDF-mode para producir PDF por omisión, TeX-parse-self y TeX-auto-save para que la finalización conozca su documento, y TeX-source-correlate-mode para activar la correspondencia de SyncTeX. TeX-parse-self y TeX-auto-save le dicen a AUCTeX que lea el documento —incorporando las macros de los paquetes que carga con \usepackage— y guarde el resultado en un directorio auto/. Cómo funciona SyncTeX corresponde a su propia página; aquí solo va la configuración.

init.el
;; package.el reads GNU ELPA, enabled by default since Emacs 24.1.
(require 'package)
(package-initialize)

(use-package tex
  :ensure auctex
  :hook ((LaTeX-mode . TeX-source-correlate-mode)   ; SyncTeX
         (LaTeX-mode . reftex-mode)                 ; cross-references
         (LaTeX-mode . LaTeX-math-mode))            ; backquote math shortcuts
  :config
  (setq TeX-auto-save t      ; cache parse data in the auto/ directory
        TeX-parse-self t     ; scan the file for \usepackage and friends
        TeX-PDF-mode t)      ; produce PDF, not DVI
  ;; Tie source lines to PDF positions and run a server for inverse search.
  (setq TeX-source-correlate-method 'synctex
        TeX-source-correlate-start-server t))

C-c C-c hace una pregunta distinta cada vez que se pulsa

C-c C-c (TeX-command-master) no es una orden de ejecutar algo: es una pregunta sobre qué ejecutar a continuación. El minibúfer pregunta y propone un valor por omisión según el estado del documento: LaTeX si aún no se ha compuesto, LaTeX otra vez si el archivo .aux muestra referencias sin resolver, BibTeX si hay bibliografía, y View cuando todo se ha asentado. Aceptar con Enter y repetir es el bucle básico, y resume bien el diseño de AUCTeX: no se espera que usted recuerde la secuencia; el estado del documento decide el paso siguiente. Si prefiere no ver desfilar los pasos, C-c C-a (TeX-command-run-all) los encadena automáticamente hasta un error o el final, y abre el visor si todo va bien.

TeclaComandoEfecto
C-c C-cTeX-command-masterPregunta qué ejecutar después, con un valor tomado del estado del documento
C-c C-aTeX-command-run-allEjecuta toda la cadena hasta terminar o fallar y luego muestra el PDF
C-c C-rTeX-command-regionCompone solo la región seleccionada; útil para probar un pasaje
C-c C-zLaTeX-command-sectionCompone solo la sección actual
C-c `TeX-next-errorIr al siguiente error (C-c y después un acento grave)
M-g pTeX-previous-errorVolver al error anterior; exige analizar todo el registro (TeX-parse-all-errors)
C-c C-lTeX-recenter-output-bufferDesplaza el búfer de salida para ver su última línea
C-c C-kTeX-kill-jobDetiene el proceso externo en curso, sea TeX o el visor
C-c C-eLaTeX-environmentPide un entorno e inserta \begin\end
C-c C-sLaTeX-sectionInserta un comando de seccionado; con RefTeX añade la etiqueta a la vez
C-c C-fTeX-fontInserta un comando de fuente; C-c C-f C-d borra el más interno
C-c C-mTeX-insert-macroCompleta un nombre de macro y pide cada argumento (C-c RET también)
C-c ~LaTeX-math-modeConvierte el acento grave en prefijo para introducir símbolos matemáticos
C-c C-o C-fTeX-fold-modeAlterna el plegado; C-c C-o C-b pliega todo el búfer

Dos apuntes al margen de la tabla. M-g n no es una asignación de AUCTeX sino el next-error propio de Emacs, que AUCTeX no sobrescribe. Retroceder con M-g p (TeX-previous-error) presupone haber analizado el registro completo, y TeX-parse-all-errors está activo por omisión. Segundo: si quiere que teclear $ inserte un par, ajuste TeX-electric-math. El valor por omisión es nil —un $ es solo un $, mientras que ("$" . "$") da la fórmula en línea al estilo TeX y ("\\(" . "\\)") la del estilo LaTeX.

latexmk ya no necesita complemento: LaTeXMk viene dentro de AUCTeX

LaTeXMk ya figura entre las opciones que ofrece C-c C-c. La entrada se añadió a TeX-command-list en AUCTeX 14.0.5, publicado el 19 de mayo de 2024, y las versiones posteriores afinaron el tratamiento del directorio de salida y las opciones de XeTeX. El paquete externo que antes era la respuesta estándar, auctex-latexmk, ya no hace falta —y más vale dejarlo estar—. Su último commit upstream es de 2017, con lo que su reloj se detuvo mucho antes del renombrado de modos de AUCTeX 14. Antes de copiar (auctex-latexmk-setup) de alguna configuración vieja que haya encontrado, pulse C-c C-c y mire la lista.

Para que latexmk sea la acción por omisión, ponga TeX-command-default en "LaTeXMk" —atención a la grafía, con M y K mayúsculas—. Como latexmk inspecciona las dependencias y vuelve a ejecutarse exactamente las veces necesarias, uno nunca cuenta pasadas para las referencias cruzadas ni el índice. La elección del motor sigue del lado de AUCTeX, en TeX-engine, cuyos cuatro valores integrados son default, xetex, luatex y omega; la entrada LaTeXMk lee ese valor y compone con él los indicadores que pasa a latexmk. El tratamiento bibliográfico y los ajustes finos del motor quedan más limpios en un .latexmkrc en la raíz del proyecto, lo que además permite reproducir el mismo PDF fuera de Emacs o en CI. La configuración de latexmk en sí pertenece a la página de compilaciones automatizadas.

init.el
;; AUCTeX 14.0.5 and later ship a LaTeXMk entry in TeX-command-list.
;; Note the spelling: capital M, capital K.
(setq-default TeX-command-default "LaTeXMk")

;; Engine selection stays on the AUCTeX side and is buffer-local.
;; M-x TeX-engine-set, or in a file-local variables block:
;;   %%% TeX-engine: luatex

RefTeX viene con Emacs, no con AUCTeX

De \label, \ref y \cite se ocupa RefTeX, que no forma parte de AUCTeX. Vive en el árbol de fuentes de Emacs, como reftex.el y una docena de compañeros en lisp/textmodes/: no hay nada que instalar. Apareció por primera vez en Emacs 20.1, en 1997, y etc/NEWS.20, bajo «Changes in Emacs 20.1», imprime la tabla de teclas de entonces: C-c (, C-c ), C-c [, C-c &, C-c =. Un cuarto de siglo después siguen siendo las mismas. Su autor es Carsten Dominik: la dirección de la cabecera de reftex.el es la misma que la de la línea de autor de org.el, es decir, quien escribió Org mode. Hoy lo mantiene el proyecto AUCTeX.

Lo que aporta de verdad es que nunca hay que inventar una etiqueta a mano. C-c ( (reftex-label) mira si uno está en una figura, una tabla, una ecuación o una sección y propone una etiqueta con el prefijo adecuado —fig:, tab:, eq:— para insertar. Para remitir, C-c ) (reftex-reference) deja elegir entre las etiquetas existentes. Para las citas, C-c [ (reftex-citation) busca en el .bib mediante expresión regular e inserta \cite{...}. C-c = (reftex-toc) abre en otra ventana un índice de todo el documento, y C-c & (reftex-view-crossref) muestra en el sitio a qué apunta la referencia bajo el cursor. Si el documento lleva índice analítico, C-c / convierte la palabra seleccionada en una entrada. Incluso repartido en varios archivos, RefTeX sigue el archivo maestro y reúne todas las etiquetas y todas las citas.

Para engranarlo estrechamente con AUCTeX, ajuste reftex-plug-into-AUCTeX. Es una lista de cinco booleanos que controlan por separado si RefTeX suministra etiquetas para las secciones y entornos recién creados y si suministra el argumento de \label, \ref, \cite e \index. Asignarle t los activa todos y nil los desactiva. Con él activo, crear una sección con C-c C-s pide la etiqueta al momento, e insertar \ref con C-c C-m abre el búfer de selección de RefTeX: a este ajuste se debe la sensación de que ambos paquetes son uno solo.

init.el
(use-package reftex
  :ensure nil                 ; part of Emacs itself, nothing to fetch
  :hook (LaTeX-mode . turn-on-reftex)
  :config
  (setq reftex-plug-into-AUCTeX t    ; t turns all five flags on
        reftex-cite-format 'natbib))  ; or 'biblatex, 'default, ...

preview-latex y el preview.sty que probablemente ya usa

preview-latex compone de verdad sus fórmulas, figuras y tikzpicture con LaTeX y luego coloca el resultado sobre el búfer de origen como una imagen, en el mismo sitio. Dejó de ser una descarga aparte y pasó a formar parte de AUCTeX en la versión 11.81, así que no hay nada más que instalar. La fuente de un $…$, un \[…\] o un entorno equation sigue siendo editable y, sin embargo, aparece como matemática compuesta cuando uno quiere comprobarla: una sensación cercana al WYSIWYG mientras el archivo sigue siendo texto plano. Los comandos empiezan por C-c C-p: C-c C-p C-p para el objeto en el punto, C-c C-p C-e para el entorno, C-c C-p C-s para la sección, C-c C-p C-r para la región, C-c C-p C-b para el búfer, C-c C-p C-d para todo el documento. Para borrarlos se intercala C-c C-c: C-c C-p C-c C-p quita la vista previa en el punto. Un clic con mouse-2 sobre una imagen también alterna.

init.el
;; The preview commands, by their Lisp names.
;; C-c C-p C-p   preview-at-point       C-c C-p C-c C-p  preview-clearout-at-point
;; C-c C-p C-e   preview-environment    C-c C-p C-c C-s  preview-clearout-section
;; C-c C-p C-s   preview-section        C-c C-p C-c C-b  preview-clearout-buffer
;; C-c C-p C-r   preview-region         C-c C-p C-c C-d  preview-clearout-document
;; C-c C-p C-b   preview-buffer         C-c C-p C-f      preview-cache-preamble
;; C-c C-p C-d   preview-document       C-c C-p C-i      preview-goto-info-page

He aquí un hecho que suele sorprender: el preview.sty que preview-latex usa por debajo es el mismo archivo que la clase standalone carga para recortar una imagen. El preview.sty del TeX Live 2024 de esta máquina es la versión 13.3, con fecha del 17 de enero de 2024; su cabecera dice que se desarrolló como parte de AUCTeX, y la cadena de identificación de su línea \ProvidesPackage es literalmente (AUCTeX/preview-latex). La línea 571 de standalone.cls es \RequirePackage{preview} y, como la opción preview es verdadera por omisión, escribir \documentclass{standalone} ya lo pone en marcha. Si alguna vez ha recortado una figura de TikZ en su propio archivo, ha usado parte de un paquete de Emacs, aunque nunca haya abierto Emacs. Las vistas previas de LyX y pst-pdf se apoyan en la misma piedra.

Dos requisitos prácticos. preview-latex necesita Ghostscript (7.07 o posterior) para generar las imágenes, tanto por la vía DVI como por la de PDF. Por la vía DVI hace falta además Dvips o dvipng: dvipng no es un requisito adicional sino una alternativa a Dvips, y el manual señala que es mucho más rápido que la combinación de Dvips y Ghostscript. El otro requisito es que su Emacs se haya compilado con soporte de imágenes. Donde más rinde es en un manuscrito cargado de ecuaciones largas o diagramas conmutativos: poder comprobar el resultado compuesto de un vistazo elimina todo el viaje de ida y vuelta de compilar e ir a mirar el PDF.

AUCTeX ya habla japonés: japanese-LaTeX-mode y los motores pTeX

Antes de buscar otro modo para el japonés, conviene saber una cosa: AUCTeX incluye de fábrica tex-jp.el, que aporta japanese-LaTeX-mode y japanese-plain-TeX-mode. Ese archivo añade ptex, jtex y uptex a la lista de motores, y japanese-TeX-engine-default —cuyo valor por omisión es ptex— decide cuál se usa. Más aún: con TeX-parse-self activo, elige por sí solo el motor adecuado a partir del nombre de la clase, mirando jbook, jsarticle o tjreport para decidir si llama a platex o a uplatex. Precisamente por eso el manual recomienda TeX-parse-self a los usuarios japoneses de LaTeX. La clase por omisión viene de japanese-LaTeX-default-style, inicialmente "jarticle".

La elección automática puede fallar. El ejemplo que da el propio manual es j-article: AUCTeX escoge NTT jLaTeX, mientras que quien escribía pensaba en ASCII pLaTeX. Cuando ocurre, se sobrescribe explícitamente en un bloque de variables locales al final del archivo. Si quiere que los documentos en japonés sean lo predeterminado, ponga TeX-default-mode en japanese-LaTeX-mode. Vale la pena añadir que el manual de AUCTeX afirma sin rodeos que ninguno de sus mantenedores principales lee japonés, y precisamente por eso este rincón del paquete se sostiene gracias a los informes de hablantes de japonés.

latex
%%% Local Variables:
%%% mode: japanese-LaTeX
%%% TeX-engine: uptex
%%% End:

YaTeX (野鳥) y toda una bandada de modos con nombre de ave

YaTeX es un modo mayor de LaTeX para Emacs, obra de HIROSE Yuuji, cuya línea de copyright va de 1991 hasta hoy. Su nombre japonés, 野鳥, se lee yachou y el manual lo traduce como Wild Bird, explicando que es un juego de palabras japonés. Y aquí es donde la cosa se vuelve interesante, porque ese juego de palabras fundó una familia: LaiTeX (Thunder Bird) para el editor Vz, HackTeX (Swan) para Wz, HiTeX (Flying Bird) para xyzzy y KaTeX, cuyo autor llamó al suyo la fj Wild Bird Society. En el mundo TeX japonés de los años noventa, bautizar el soporte del editor con nombre de ave era casi una convención. La licencia es la BSD de 2 cláusulas (desde la versión 1.80, el 9 de septiembre de 2017) y la más reciente es la 1.84.1, de agosto de 2026, aún actualizada por el propio autor.

Su filosofía difiere algo de la de AUCTeX: se apoya en «teclear las primeras letras y luego completar» para insertar rápido macros y entornos. El prefijo es C-c por omisión. C-c b es la finalización de tipo begin (entornos, \begin{...}...\end{...}), C-c s de tipo section (\section y afines), C-c l de tipo large (cuerpos y estilos como \large) y C-c m de tipo maketitle (macros sin argumento como \maketitle e \item). Además, C-c SPC es la finalización libre: teclee \ y el principio de cualquier nombre de comando, púlselo y YaTeX completa allí mismo. La composición empieza por C-c t: C-c t j compone, C-c t p previsualiza, C-c t b ejecuta BibTeX, C-c t i makeindex, C-c t d toda la cadena de latex a dvipdfmx, C-c t r compone solo una región y C-c t k interrumpe. Para moverse está C-c g, que salta al objeto correspondiente —\begin a \end, \label a \ref, \include al archivo que nombra— y para reescribir, C-c c (cambiar) y C-c k (borrar).

Una advertencia aquí: la t de C-c t j es una t desnuda, sin modificador. En Emacs, el espacio C-c letra está reservado al usuario, así que a algunos no les gusta que YaTeX lo ocupe. Poner YaTeX-inhibit-prefix-letter en t desplaza todas las asignaciones por omisión de C-c letra a C-c C-letra, y la composición pasa a la forma más emacsiana C-c C-t j. Las finalizaciones por región, en mayúsculas, sobreviven; para eliminarlas también, use 1 en lugar de t. El valor por omisión es nil: sin tocar nada es realmente C-c t j. Esta variable le dirá en qué dialecto está escrito un fragmento de configuración que encuentre en la red.

Unas cuantas variables anclan el lado japonés. YaTeX-kanji-code es la codificación kanji usada al guardar: nil significa «no convertir nada, conservar el coding-system del archivo», 0 es no-conversion, 1 Shift JIS, 2 JIS, 3 EUC y 4 UTF-8. nil y 0 no son lo mismo, y la fuente actual tiene nil por omisión, lo que encaja con la costumbre actual de no querer que los archivos se recodifiquen en silencio. tex-command es el comando de composición realmente invocado: "latexmk", "uplatex" o "lualatex -synctex=1". Poner bibtex-command y makeindex-command en upbibtex y upmendex hace funcionar bibliografías e índices japoneses. YaTeX incluye además, en la misma distribución, un modo hermano para HTML, yahtml, y el paquete yatex de MELPA se construye directamente desde el repositorio Mercurial del autor.

init.el
(use-package yatex
  :ensure t                     ; from MELPA, built from the author's repo
  :mode ("\\.tex\\'" . yatex-mode)
  :config
  (setq YaTeX-kanji-code nil    ; keep the file's own coding system
        tex-command "latexmk"   ; or "uplatex", "lualatex -synctex=1"
        bibtex-command "upbibtex"
        makeindex-command "upmendex"
        ;; t moves C-c <letter> bindings to C-c C-<letter>.
        YaTeX-inhibit-prefix-letter t))

¿Cuál elegir? Más vale comprometerse con uno u otro que mezclar AUCTeX y YaTeX. AUCTeX si quiere el conjunto completo, con preview-latex y RefTeX. YaTeX si quiere escribir deprisa documentos en japonés con un juego breve y ágil de pulsaciones de finalización. El soporte de japonés existe también en AUCTeX, como mostró la sección anterior, así que la manera honesta de decidir hoy no es «japonés, luego YaTeX» sino «esta forma de teclear me va bien, luego YaTeX».

Qué conviene resolver en la primera media hora

  • Decidir primero quién es el dueño de la compilación. O avanza paso a paso con C-c C-c, o pone TeX-command-default en "LaTeXMk" y entrega toda la cadena a latexmk. Esto va antes que los temas y los colores.
  • Dar una vuelta completa al bucle con un main.tex pequeño. Empújelo hasta el final con C-c C-a; cuando se abra el PDF, etiquete una ecuación o una figura con C-c (, inserte la referencia desde el texto con C-c ) y salte al siguiente error con TeX-next-error cuando aparezca.
  • Cuando nada funciona, diagnostique desde fuera. Compile el mismo proyecto una vez en una terminal. Si latexmk falla allí, ningún retoque de init.el lo salvará; si allí funciona, el sospechoso es el PATH que heredó Emacs.
  • Lea el manual que realmente tiene. Para averiguar qué significa un ajuste, abra con C-h i el manual Info de la versión instalada. El de la web puede ir varias versiones por detrás.
  • Amarre la compilación al proyecto. En cuanto los capítulos vivan en archivos separados, ponga un .latexmkrc en la raíz: Emacs, otro editor y la CI producirán el mismo PDF.