Emacs (AUCTeX / YaTeX)

Emacs中LaTeX的写法主要有两种:AUCTeX,综合TeX/LaTeX环境,以及YaTeX(野鸟),日语较强。两者都是键盘驱动的,让您可以直接从编辑器进行编译、完成、交叉引用和预览。学习曲线很陡峭,但一旦适合你的手,速度就会非常快。本页介绍 AUCTeX 设置、它的配套 RefTeXpreview-latex 用于在缓冲区中内联渲染数学,然后转向日语的 YaTeX。

AUCTeX 是什么

Emacs 本身不排版 TeX。实际的编译是由您安装在计算机上的发行版完成的 - TeX Live (或 MacTeX / MiKTeX)。 AUCTeX 是连接编辑器和该发行版的包:它生成 latexlatexmk 作为子进程,捕获错误并跳转到有问题的行,并添加环境和宏的完成、语法突出显示、文档折叠和数学输入帮助。一个先决条件是 latexmk --version 在终端中工作 - 也就是说,TeX 命令位于您的 PATH 上。

从历史上看,AUCTeX 有两种主要模式:LaTeX-mode 用于 LaTeX 文档,TeX-mode 用于原始 TeX / plain TeX。打开一个 .tex 文件,AUCTeX 检查它以输入正确的文件。当前的分发中心是 GNU ELPA,Emacs 的内置软件包存档; GNU ELPA 于 2026 年 1 月上市 14.1.2。所以今天安装它与 package.el 是单行的,如下所示。

如果 Emacs 键符号不熟悉:C-c 表示 用 c 按住 Control,C-c C-c 表示 在按住 Control 的同时再次按 c,然后再按 c,M-x 表示 Meta(Alt 或 ESC)+ x。几乎每个 AUCTeX 命令都位于以 C-c 开头的键上。

AUCTeX 设置

安装有两个步骤。首先安装一个发行版,例如 TeX Live(2026 年,TeX Live 2026),并将其放在您的 PATH 上。然后从Emacs内部安装AUCTeX。默认情况下启用 GNU ELPA,因此只需 M-x package-install RET auctex RET 即可。在 init.el(或 ~/.emacs.d/init.el)中,从 TeX-PDF-mode 开始默认为 PDF 输出,从 TeX-source-correlate-mode 开始将源绑定到 PDF (SyncTeX)。

这是使用 use-package 的实用 init.el。将 TeX-source-correlate-method 设置为 synctex 并打开 TeX-source-correlate-start-server 可以启用从查看器返回到源的反向搜索。它还会在 LaTeX 缓冲区中自动打开 reftex-modeLaTeX-math-mode

terminal
;; GNU ELPA is enabled by default; ensure it is initialised.
(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))             ; ` math shortcuts
  :config
  (setq TeX-auto-save t           ; write parse data (the auto/ dir)
        TeX-parse-self t          ; scan the file for \usepackage etc.
        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))

TeX-parse-selfTeX-auto-save 告诉 AUCTeX 解析文档 - 从 \usepackage 包中提取宏 - 并将结果缓存在 auto/ 目录中。回报是完成适应您实际加载的包。

编译的核心是C-c C-cTeX-command-master)。按下它,迷你缓冲区会询问接下来要运行什么,并根据文档的状态提出默认值(首先是 LaTeX,如果引用未解析,则再次 LaTeX,如果有参考书目,则 BibTeX,然后是 View)。按 Enter 接受并重复是基本循环。相比之下,C-c C-a (TeX-command-run-all) 自动链接所需的步骤,直到出现错误或完成,并在成功时为您打开查看器。当您只想完成 PDF 时,C-c C-a 是快速路径。

要将 latexmk 标准化为编译器,请安装 auctex-latexmk 包并调用 (auctex-latexmk-setup)。这会在 C-c C-c 选择中添加 LatexMk 条目,并将 TeX-command-default 设置为 "LatexMk" 使其成为默认值。由于 latexmk 会检查依赖关系并根据需要重新运行多次,因此您永远不会计算交叉引用或目录的传递次数。 auctex-latexmk还继承了AUCTeX的TeX-PDF-modeTeX-source-correlate-mode,自动添加了PDF输出和-synctex=1

terminal
(use-package auctex-latexmk
  :ensure t
  :after tex
  :config
  ;; Make latexmk pick up TeX-PDF-mode (pass -pdf when PDF output is on).
  (setq auctex-latexmk-inherit-TeX-PDF-mode t)
  (auctex-latexmk-setup)
  ;; Offer LatexMk as the default action for C-c C-c.
  (setq-default TeX-command-default "LatexMk"))

引擎和参考书目详细信息在项目根目录的 .latexmkrc 中最为清晰(与 AUCTeX 的设置无关;从 C-c C-c 启动的 latexmk 也会读取它)。例如,对于日语,将 upLaTeX + dvipdfmx 分配给 $latex / $dvipdf 并选择 $pdf_mode = 3。有关详细信息,请参阅构建工具页面。

您每天使用的 AUCTeX 键聚集在一个表中(name 列是文字键序列):

钥匙命令它的作用
C-c C-cTeX-command-master选择并运行下一步(LaTeX → 查看,...)
C-c C-aTeX-command-run-all运行整个链条完成,然后查看
C-c `TeX-next-error跳转到下一个错误(反引号)
C-c C-eLaTeX-environment插入环境(\begin..\end)
C-c C-mTeX-insert-macro按名称插入宏(提示输入参数)
C-c C-fTeX-font插入字体宏:\textbf、\emph、...

RefTeX — 交叉引用和引用

RefTeX 是专注于管理 \label\ref\cite 的伴侣。它与 AUCTeX 分开,并且 与 Emacs 本身捆绑(无需单独安装)。像上面的 init.el 一样打开 LaTeX 缓冲区中的 reftex-mode 并让它与 AUCTeX 配合,标记和引用变得非常容易。

关键在于您永远不必手动发明标签C-c ( (reftex-label) 查看您所在的位置(图、表格、方程、部分)并提出要插入的合理前缀标签(fig:tab:eq:,...)。回顾一下,C-c ) (reftex-reference) 只是让您从现有标签中进行选择。对于引用,C-c [ (reftex-citation) 通过正则表达式搜索您的 .bib 并为您选择的条目插入 \cite{...}C-c = (reftex-toc) 在另一个窗口中打开整个文档的目录缓冲区,以便您可以跳转到某个部分或调查结构。

要与 AUCTeX 深度集成,请设置 reftex-plug-into-AUCTeX。 AUCTeX自己的\label插入和\ref/\cite补全然后再经过RefTeX,两个包感觉就像一个。即使在多文件项目 (\include/\input) 中,RefTeX 也会遵循主文件来收集整个文档中的所有标签和所有引文。

terminal
(use-package reftex
  :ensure nil                 ; bundled with Emacs
  :hook (LaTeX-mode . turn-on-reftex)
  :config
  (setq reftex-plug-into-AUCTeX t   ; cooperate with AUCTeX
        reftex-cite-format 'natbib)) ; or 'biblatex, etc.

Preview-latex — 内联预览

preview-latex 实际上使用 LaTeX 排版数学、数字、tikzpictures 等,然后 将结果作为图像叠加在源缓冲区中。它附带 AUCTeX,因此无需安装任何额外内容。 $...$\[...\]equation 环境的源保持可编辑状态,但在您想要检查时显示为设置数学 — 在保持纯文本的同时,有类似 WYSIWYG 的感觉。

命令以 C-c C-p(预览版)开头。 C-c C-p C-p (preview-at-point) 仅预览光标处的对象(再次按下可返回源)。 C-c C-p C-b 处理整个缓冲区,C-c C-p C-d 处理整个文档,C-c C-p C-r 处理选定区域。 C-c C-p C-c C-p 清除某个区域中的预览。它在底层运行 LaTeX 来生成图像,因此第一遍需要一些时间。

Preview-latex 依赖 Ghostscript 和 dvipng (或 PDF-to-image 步骤)来制作图像,因此这些图像必须存在于您的发行版中(TeX Live 通常有它们)。它在包含大量长方程或交换图的文档中效果最佳,您希望在编写时一目了然地看到设置的结果。

YaTeX (野鸟) — 面向日本的选择

YaTeX(野鸟,“野鸟”) 是 Yuuji Hirose 为 Emacs 设计的 LaTeX 主要模式。在国际上,AUCTeX 是更常见的选择,但在日本,YaTeX 享有持久的流行度和丰富的日语文档。最新版本为 1.84(2025 年 2 月)。使用 M-x package-install RET yatex RET 从 MELPA 安装它(或者手动将其放入 site-lisp 并扩展 load-path)。

它的理念与 AUCTeX 略有不同,依靠“输入前几个字母并完成”来快速插入宏和环境。默认前缀为 C-cC-c b 是开始类型完成(环境,\begin{...}...\end{...}),C-c s 是节类型(\section,...),C-c l 是大型类型(大小/面如 \large),而 C-c m 是 maketitle 类型(无参数宏,例如 \maketitle\item)。排版从 C-c C-t 开始:C-c C-t j 排版和 C-c C-t p 预览(启动查看器)。

日本的格局存在一些变量。 YaTeX-kanji-code 是保存时的汉字编码;由于 UTF-8 现已成为标准,如果您不希望文件以静默方式重新编码,请将其设置为 nil(尊重文件的现有编码)。 tex-command 是实际调用的排版命令 - 例如"latexmk""lualatex -synctex=1""uplatex"。将 bibtex-commandmakeindex-command 设置为 upbibtexupmendex 可以使日语参考书目和索引正常工作。这是一个最小的 init.el

terminal
(use-package yatex
  :ensure t                       ; from MELPA
  :mode ("\\.tex\\'" . yatex-mode)
  :config
  (setq YaTeX-kanji-code nil      ; keep the file's own encoding (UTF-8)
        tex-command "latexmk"     ; or "lualatex -synctex=1", "uplatex"
        bibtex-command "upbibtex"
        makeindex-command "upmendex"
        ;; Use C-c C-t style prefixes (C-c C-t j, C-c C-t p, ...).
        YaTeX-inhibit-prefix-letter t))

YaTeX-inhibit-prefix-letter 设置为 t 会使排版键 C-c C-t ... (修饰符保留的 Emacs 习惯用法)而不是 C-c t ...。 YaTeX 还为 HTML 提供了一个姐妹模式,yahtml。 AUCTeX 和 YaTeX 最好致力于其中之一,而不是混合使用:选择 AUCTeX 进行大部分英语工作或充分使用 Preview-latex/RefTeX,选择 YaTeX 快速编写日语文档。

一个实用的 Emacs 写入循环

写完设置后,不要开始大篇幅的论文。首先修复一个小main.tex上的编辑、排版、参考、检查-PDF循环。在AUCTeX中,用C-c C-a运行; PDF 打开后,使用 C-c ( 为方程或图形创建标签,然后使用 C-c ) 插入散文中的引用。当出现错误时,使用 C-c \` 跳转到下一个错误,并继续读取 Emacs 内的日志。一旦该循环掌握在您的手中,Emacs 就不再仅仅是“配置”了;而是被配置了。它成为论文章节每天实际推进的工作台。

在前半小时内,决定谁拥有构建,而不是主题或颜色。要么使用 AUCTeX 的标准 C-c C-c 进行单步执行,要么通过 auctex-latexmk 将链委托给 latexmk。一旦与项目 .latexmkrc 配对,就可以从 Emacs、另一个编辑器或 CI 复制相同的 PDF。