Emacs中LaTeX的写法主要有两种:AUCTeX,综合TeX/LaTeX环境,以及YaTeX(野鸟),日语较强。两者都是键盘驱动的,让您可以直接从编辑器进行编译、完成、交叉引用和预览。学习曲线很陡峭,但一旦适合你的手,速度就会非常快。本页介绍 AUCTeX 设置、它的配套 RefTeX 和 preview-latex 用于在缓冲区中内联渲染数学,然后转向日语的 YaTeX。
AUCTeX 是什么
Emacs 本身不排版 TeX。实际的编译是由您安装在计算机上的发行版完成的 - TeX Live (或 MacTeX / MiKTeX)。 AUCTeX 是连接编辑器和该发行版的包:它生成 latex 或 latexmk 作为子进程,捕获错误并跳转到有问题的行,并添加环境和宏的完成、语法突出显示、文档折叠和数学输入帮助。一个先决条件是 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-mode 和 LaTeX-math-mode:
;; 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-self 和 TeX-auto-save 告诉 AUCTeX 解析文档 - 从 \usepackage 包中提取宏 - 并将结果缓存在 auto/ 目录中。回报是完成适应您实际加载的包。
编译的核心是C-c C-c(TeX-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-mode和TeX-source-correlate-mode,自动添加了PDF输出和-synctex=1。
(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-c | TeX-command-master | 选择并运行下一步(LaTeX → 查看,...) |
C-c C-a | TeX-command-run-all | 运行整个链条完成,然后查看 |
C-c ` | TeX-next-error | 跳转到下一个错误(反引号) |
C-c C-e | LaTeX-environment | 插入环境(\begin..\end) |
C-c C-m | TeX-insert-macro | 按名称插入宏(提示输入参数) |
C-c C-f | TeX-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 也会遵循主文件来收集整个文档中的所有标签和所有引文。
(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-c。 C-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-command 和 makeindex-command 设置为 upbibtex 和 upmendex 可以使日语参考书目和索引正常工作。这是一个最小的 init.el:
(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。