Emacs(AUCTeX / YaTeX)

素の GNU Emacs で .tex を開くと、拡張を何も入れていなくても LaTeX のモードに入ります。lisp/textmodes/tex-mode.el として最初から同梱されているからです。AUCTeX は、そのモードを置き換えるために入れるパッケージ——そして両者は最初から絡み合っています。AUCTeX はまさにそのファイルから育ったからです。1986 年、デンマークのオールボー大学で、Emacs の tex-mode.el に書体命令とデンマーク語の文字を挿入する関数を足しはじめた人がいました。名前の AUC は、当時のこの大学のデンマーク語名 Aalborg Universitetscenter の略です。このページでは、AUCTeX が内蔵モードに何を足すのか、C-c C-c が押すたびに違うことを訊いてくる理由、AUCTeX の一部ではない RefTeX、あなたがすでに使っているかもしれない preview.stypreview-latex、そして日本語圏の YaTeX(野鳥) を順に見ていきます。

内蔵の LaTeX モードと AUCTeX——同じキー、違う命令

素の Emacs でも .tex を開けば latex-mode に入り、C-c C-b で組版し、C-c C-o\begin\end を挿入し、C-c C-e で開いたままの環境を閉じ、C-c C-v でビューアを開けます。どのモードに入るかは Emacs が中身を見て決めます——tex-mode は先頭から最初の「コメントに入っていないバックスラッシュ」を探し、その直後が documentclassdocumentstylebeginsectionchapternewcommandRequirePackage などのいずれかなら latex-mode、どれでもなければ plain-tex-mode に落ちます。何も見つからないときは tex-default-mode の値が使われ、その既定は latex-mode です。

AUCTeX を入れると、この鍵盤がそっくり別の楽器につながります。キーはほとんど同じで、割り当てられた命令が違う——だから「同じキーなのに前と挙動が違う」という戸惑いが起きます。内蔵モードの C-c C-f はファイル全体を組版する tex-file ですが、AUCTeX の C-c C-f は書体命令を挿入する TeX-font です。内蔵の C-c C-e は開いた環境を閉じる latex-close-block、AUCTeX の C-c C-e は環境を訊いて挿入する LaTeX-environment。この二つを見比べると、AUCTeX が何をしているかが一言でわかります。内蔵モードは「TeX を走らせる編集モード」で、AUCTeX は「文書の構造を知っている環境」です。

この二つがどう共存しているかは、実は 2024 年に整理されました。AUCTeX 14.0.1 で、モード名が大文字始まりの LaTeX-modeplain-TeX-modedocTeX-mode に改名されました——内蔵モードとの名前衝突を避けるためです。以後、.tex を開いたときにどちらのモードへ行くかは、Emacs 29 以降なら major-mode-remap-alistmajor-mode-remap-defaults による転送で決まります。AUCTeX 側の窓口は TeX-modes という利用者向けオプションで、たとえば plain TeX だけ内蔵モードに任せる、といった割り振りができます。マニュアルは、major-mode-remap-* を直接いじらず TeX-modes をカスタマイズするよう勧めています。落とし穴が一つ——Emacs 29 以降で M-x latex-mode と直接打つと、AUCTeX ではなく内蔵モードが起動します。設定コードが古い名前を呼んでいると、これに当たります。

AUCTeX のインストールと、二年遅れているマニュアル

AUCTeX は GNU Emacs には同梱されていません。 GNU プロジェクトの一部として GNU ELPA で配布されるパッケージで、GPL v3 です。GNU ELPA は Emacs 24.1 以降なら最初から有効なので、導入は M-x list-packagesauctexi を付けて x を押すだけ——M-x package-install RET auctex RET でも同じことです。前提は二つ。ひとつは、ターミナルで latexmk --version が動くこと、つまり TeX のコマンドが PATH から呼べる こと。組版そのものは PC に入れた TeX Live や MacTeX、MiKTeX が担当し、Emacs はそれを子プロセスとして起動しているだけだからです。もうひとつは Emacs 自体のバージョンで、現行の AUCTeX は Emacs 28.1 以上を要求します。

ここで一つ、知らないと時間を溶かす食い違いがあります。GNU ELPA が配っている AUCTeX と、gnu.org に置かれているマニュアルの版が揃っていません。 2026 年 8 月に確認した時点で、GNU ELPA の最新は 2026 年 1 月 14 日付の 14.1.2 でしたが、gnu.org のオンラインマニュアルは冒頭に「2024 年 1 月 14 日の 13.3 版」と書かれたままでした。二年ぶんの差です。ウェブサイトには新着リリースの告知ページもありません。ですから、設定変数やキーの挙動を調べるときは、手元に入った版の Info マニュアルを C-h i で読むのが正解です。ウェブで検索して出てくる説明が、自分の環境の話とは限りません。

設定ファイル init.el(多くは ~/.emacs.d/init.el)に最初に書くのは、PDF を既定の出力にする TeX-PDF-mode、文書を解析して補完候補を賢くする TeX-parse-selfTeX-auto-save、そして SyncTeX の対応づけを有効にする TeX-source-correlate-mode あたりです。TeX-parse-selfTeX-auto-save は、AUCTeX に文書を読ませて \usepackage で読み込んだパッケージの命令まで補完候補に取り込ませ、その結果を auto/ ディレクトリにキャッシュさせる設定です。SyncTeX の仕組みそのものは専用のページに譲り、ここでは設定だけを置きます。

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 は押すたびに違うことを訊いてくる

C-c C-cTeX-command-master)は「これを実行しろ」という命令ではなく、「次は何を実行しますか」という問いです。ミニバッファが候補を訊いてきて、文書の状態に応じた既定を提案します——まだ組んでいなければ LaTeX.aux を見て参照が未解決なら再度 LaTeX、文献があれば BibTeX、すべて片付いていれば View。Enter で受け入れて繰り返すのが基本の輪です。これが AUCTeX の設計思想をよく表しています。押し手が手順を覚えるのではなく、文書の状態が次の手を決める。 手順を眺めずに一気に通したいときは C-c C-aTeX-command-run-all)で、エラーが出るか完了するまで自動で連鎖し、成功すればビューアまで開きます。

キーコマンド働き
C-c C-cTeX-command-master次に何を実行するかを訊き、文書の状態から既定を提案する
C-c C-aTeX-command-run-all完了かエラーまで一気に走らせ、成功すればビューアを開く
C-c C-rTeX-command-region選択範囲だけを組版する。長い文書の一節を試すときに
C-c C-zLaTeX-command-section現在の節だけを組版する
C-c `TeX-next-error次のエラー箇所へ飛ぶ(C-c に続けてバッククォート)
M-g pTeX-previous-error前のエラーへ戻る。ログ全体の解析が要る(TeX-parse-all-errors
C-c C-lTeX-recenter-output-buffer出力バッファを送って最終行を見えるようにする
C-c C-kTeX-kill-job走っている外部プロセスを止める(TeX でもビューアでも)
C-c C-eLaTeX-environment環境を訊いて \begin\end を挿入する
C-c C-sLaTeX-section節見出しを挿入する。RefTeX と組めばラベルも同時に付く
C-c C-fTeX-font書体命令を挿入する。C-c C-f C-d で最内の書体指定を外す
C-c C-mTeX-insert-macro命令名を補完して挿入し、引数を一つずつ訊く(C-c RET も同じ)
C-c ~LaTeX-math-modeバッククォートを前置キーにして数式記号を打てるようにする
C-c C-o C-fTeX-fold-mode折りたたみモードの切り替え。C-c C-o C-b でバッファ全体を畳む

表の外に二つだけ補足を。M-g n は AUCTeX の割り当てではなく Emacs 標準の next-error で、AUCTeX はこれを上書きしていません。エラーを前へ戻る M-g pTeX-previous-error)はログ全体の解析を前提にしていて、TeX-parse-all-errors は既定で有効です。もう一つ、$ を打った瞬間に $…$ を対で入れてほしい人は TeX-electric-math を設定します。既定は nil、つまり $ はただの $ で、("$" . "$") なら TeX 流、("\\(" . "\\)") なら LaTeX 流のインライン数式になります。

latexmk はもうプラグイン無しで使える——LaTeXMk は AUCTeX 本体に入っています

C-c C-c の選択肢には、最初から LaTeXMk が並んでいます。 AUCTeX 14.0.5(2024 年 5 月 19 日)で TeX-command-list に組み込まれた項目で、それ以降のリリースで出力ディレクトリの扱いや XeTeX のオプションが整えられました。かつて定番だった外部パッケージ auctex-latexmk は、もう入れる必要がありません——というより、入れないほうがよい。上流の最後のコミットは 2017 年で、AUCTeX 14 で変わったモード名の世界より前に時計が止まっています。古い設定例を見つけて (auctex-latexmk-setup) を書き写す前に、まず C-c C-c を押して選択肢を眺めてください。

latexmk を既定の動作にしたいなら TeX-command-default"LaTeXMk" にするだけです(綴りに注意——大文字の M と K です)。latexmk は依存関係を見て必要な回数だけ処理を繰り返すので、「相互参照や目次のために何回まわすか」を自分で数えずに済みます。エンジンの選択は AUCTeX 側の TeX-engine が握っていて、既定の四つは defaultxetexluatexomegaLaTeXMk の項目はこの値を見て latexmk に渡すフラグを組み立てます。文献処理やエンジンの細かい調整は、プロジェクト直下の .latexmkrc に書くのが最も素直で、Emacs 以外の環境や CI からも同じ PDF が再現できます。latexmk の設定そのものは自動ビルドのページが持ち主です。

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 は AUCTeX ではなく Emacs 本体に入っている

\label\ref\cite の面倒を見るのは RefTeX で、これは AUCTeX の一部ではありません。Emacs のソースツリーの lisp/textmodes/reftex.el 以下十数本が入っていて、別途インストールは不要です。 初めて Emacs に載ったのは 1997 年の Emacs 20.1 で、etc/NEWS.20 の「Changes in Emacs 20.1」に、C-c (C-c )C-c [C-c &C-c = という当時のキー表がそのまま載っています——四半世紀を経ていまも同じキーです。作者は Carsten Dominikreftex.el のヘッダにあるメールアドレスは、org.el のヘッダにある作者のそれと同一で、つまり Org モードを書いたのと同じ人物 です。現在の保守は AUCTeX プロジェクトが引き受けています。

実際の効きどころは、ラベルを自分で考えて打たなくてよいことです。C-c (reftex-label)は、いる場所が図なのか表なのか式なのか節なのかを見て、fig:tab:eq: といった妥当な接頭辞付きのラベルを提案して挿入します。参照する側は C-c )reftex-reference)で既存ラベルの一覧から選ぶだけ。文献は C-c [reftex-citation)で .bib を正規表現検索して \cite{...} を入れます。C-c =reftex-toc)は文書全体の目次バッファを別ウィンドウに開き、C-c &reftex-view-crossref)はカーソル下の参照の中身をその場に見せます。索引を作る文書なら C-c / で選択語を索引項目にできます。複数ファイル構成でも、RefTeX はマスターファイルをたどって全ラベルと全文献を横断的に集めます。

AUCTeX と深く噛み合わせるには reftex-plug-into-AUCTeX を立てます。これは五つの真偽値からなるリストで、節や環境を新しく作ったときにラベルを供給するか、\label の引数を供給するか、\ref は、\cite は、\index は——をそれぞれ切り替えられます。全部まとめて有効にしたければ t を、全部切りたければ nil を代入すれば済みます。有効にすると、C-c C-s で節を作った瞬間にラベルを訊かれ、C-c C-m\ref を挿入すれば RefTeX の選択画面が出る——二つのパッケージが一つに感じられるのはこの設定のおかげです。

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 と、あなたがすでに使っている preview.sty

preview-latex は、数式や図や tikzpicture を LaTeX で実際に組版し、その結果を 画像としてソースバッファのその場に重ねて表示 する仕組みです。AUCTeX 11.81 で独立配布から AUCTeX の一部となり、以来別途入れる必要はありません。$…$\[…\]equation 環境のソースは編集可能なまま、確認したいときだけ組まれた数式として見える——プレーンテキストのまま WYSIWYG に近い手触りが得られます。操作は C-c C-p 始まりで、C-c C-p C-p がカーソル位置の対象、C-c C-p C-e が環境、C-c C-p C-s が節、C-c C-p C-r が選択範囲、C-c C-p C-b がバッファ、C-c C-p C-d が文書全体。消すときは C-c C-p C-c に同じ末尾を続けます(C-c C-p C-c C-p でカーソル位置のプレビューを消去)。画像を mouse-2 でクリックしても表示が切り替わります。

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

ここに、知ると少し驚く事実があります。preview-latex が裏で使っている preview.sty は、standalone クラスが図を切り抜くのに読み込んでいるのと同じファイルです。 この機械の TeX Live 2024 に入っている preview.sty は 2024 年 1 月 17 日付の 13.3 版で、ヘッダには「AUCTeX の一部として開発された」とあり、\ProvidesPackage の識別文字列は文字どおり (AUCTeX/preview-latex) です。そして standalone.cls の 571 行目は \RequirePackage{preview}——preview オプションが既定で真なので、\documentclass{standalone} と書いた時点でこれが走っています。Emacs を一度も開いたことがなくても、TikZ の図を単体で切り抜いたことがあるなら、あなたは Emacs のパッケージの一部を使っています。 LyX のプレビューや pst-pdf なども同じ石を踏み台にしています。

実務上の前提は二つです。preview-latex は画像の生成に Ghostscript(7.07 以上)を要求し、これは DVI 経路でも PDF 経路でも必要です。加えて DVI 経路では Dvips か dvipng のどちらかが要ります——dvipng は追加の必須品ではなく Dvips の代わりで、マニュアルは「Dvips と Ghostscript の組み合わせよりずっと速い」と述べています。もう一つ、Emacs 自体が 画像表示に対応してビルドされている必要があります。効きどころは、長い数式や可換図式を多用する原稿——組版結果を一目で確かめながら書けるので、コンパイルして PDF を見に行く往復が丸ごと消えます。

AUCTeX はすでに日本語を話す——japanese-LaTeX-mode と pTeX 系エンジン

日本語のために別のモードを探す前に知っておくべきことがあります。AUCTeX には最初から tex-jp.el が同梱されていて、japanese-LaTeX-modejapanese-plain-TeX-mode を提供します。 このファイルはエンジンの一覧に ptexjtexuptex を追加し、japanese-TeX-engine-default(既定は ptex)でどれを使うかを決めます。しかも TeX-parse-self が有効なら、クラス名から適切なエンジンを自動で選びます——jbookjsarticletjreport を見て、platex を呼ぶか uplatex を呼ぶかを判断するわけです。日本語の LaTeX 利用者にこの設定が推奨されるのはそのためです。既定のクラスは japanese-LaTeX-default-style で、初期値は "jarticle"

自動判定が外れることもあります。マニュアルが挙げている実例は j-article で、これを見ると AUCTeX は NTT jLaTeX を選びますが、書き手が意図していたのは ASCII pLaTeX だった、という食い違いです。こういうときはファイル末尾の ローカル変数ブロックで明示的に上書きします。日本語文書を既定にしたければ TeX-default-modejapanese-LaTeX-mode にしておけば済みます。なお AUCTeX のマニュアルは、日本語まわりについて 主要な保守者は誰も日本語を解さないとはっきり書いています——だからこそ、この分野は日本語話者の報告で保たれてきました。

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

YaTeX(野鳥)——鳥の名を持つモードの一族

YaTeX は広瀬雄二氏による Emacs 用の LaTeX メジャーモードで、著作権表示は 1991 年から現在まで続いています。日本語名の 野鳥(やちょう) は英語で Wild Bird と訳され、マニュアルはこれを日本語の語呂合わせだと説明しています。そして面白いのはここからです。この語呂合わせは一族を生みました——Vz エディタ向けの LaiTeX(Thunder Bird)、Wz エディタ向けの HackTeX(Swan)、xyzzy 向けの HiTeX(Flying Bird)、そして KaTeX(こちらは「fj 野鳥の会」)。1990 年代の日本の TeX 界では、エディタ支援ツールを鳥の名で呼ぶのが一種の作法だったわけです。ライセンスは 2 条項 BSD(2017 年 9 月 9 日のバージョン 1.80 以降)で、最新は 2026 年 8 月の 1.84.1、いまも作者本人の手で更新されています。

設計思想は AUCTeX とやや異なり、「打ち始めの数文字+補完」で命令や環境を素早く挿入することに重きがあります。プレフィックスは既定で C-cC-c b は begin 型補完(\begin{...}...\end{...} の環境)、C-c s は section 型(\section など)、C-c l は large 型(\large のような文字サイズ・書体)、C-c m は maketitle 型(\maketitle\item のように引数を取らない命令群)。さらに C-c SPC は「任意補完」で、\ に続けて命令名の頭を打ってからこれを押すと、その場で補完してくれます。組版は C-c t 始まりで、C-c t j が組版、C-c t p がプレビュー、C-c t b が BibTeX、C-c t i が makeindex、C-c t d が latex から dvipdfmx までの一連、C-c t r が領域だけの組版、C-c t k が中断です。移動は C-c g(対応する対象へ飛ぶ——\begin\end\label\ref\include と実ファイル)、書き換えは C-c c(変更)と C-c k(削除)。

ここで一つ注意を。C-c t jt修飾なしの t です。Emacs では C-c 英字 は利用者のために予約された領域なので、YaTeX 流のこの割り当てを嫌う人もいます。そこで YaTeX-inhibit-prefix-lettert にすると、C-c 英字 の既定キーがすべて C-c C-英字 に移り、C-c C-t j で組版する Emacs らしい形になります(大文字を使う領域指定の補完だけは残ります。それも消したければ t ではなく 1 を入れます)。既定値は nil、つまり何もしなければ C-c t j のほうです。 ネット上の設定例がどちらの流儀で書かれているかは、この変数を見れば分かります。

日本語まわりで要になる変数がいくつかあります。YaTeX-kanji-code は保存時の漢字コードで、nil は「変換せず元の coding-system を保つ」、0 は no-conversion、1 が Shift JIS、2 が JIS、3 が EUC、4 が UTF-8。nil0 は別物です——現行のソースの既定は nil で、ファイルの符号化を勝手に変えられたくない今日の使い方に合っています。tex-command は実際に呼ぶ組版コマンドで、"latexmk""uplatex""lualatex -synctex=1" などを指定します。bibtex-commandmakeindex-commandupbibtexupmendex にしておけば和文の文献と索引が通ります。なお YaTeX には HTML 用の姉妹モード yahtml が同じ配布物に同梱されていて、MELPA の yatex パッケージは作者自身の Mercurial リポジトリから直接ビルドされています。

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))

どちらを選ぶか。AUCTeX と YaTeX は併用より、どちらかに寄せるのが素直です。 preview-latex と RefTeX を含めた一式を使いたいなら AUCTeX。日本語の文書を、補完キーの少ない指運びで速く書きたいなら YaTeX。日本語対応そのものは前節のとおり AUCTeX にも入っているので、「日本語だから YaTeX」ではなく「この打鍵の流儀が手に合うから YaTeX」と考えるのが、いまの正しい選び方です。

最初の三十分で決めること

  • 組版の担い手を先に決める。 C-c C-c で手順を見ながら進めるのか、TeX-command-default"LaTeXMk" にして latexmk に一括で任せるのか。テーマや色より先にこれです。
  • 小さな main.tex で輪を一周させる。 C-c C-a で最後まで走らせ、PDF が開いたら C-c ( で式や図にラベルを付け、本文側で C-c ) から参照を入れ、エラーが出たら TeX-next-error で次のエラーへ飛ぶ。
  • 動かないときは切り分けを外から。 ターミナルで同じプロジェクトを一度ビルドしてみます。そこで latexmk が失敗するなら init.el をいくら直しても無駄で、逆に通るなら疑うべきは Emacs が受け継いだ PATH です。
  • マニュアルは手元の版を読む。 設定変数の意味を調べるときは C-h i で入っている版の Info を開きます。ウェブ上のマニュアルは版が古いことがあります。
  • プロジェクトに固定する。 章ごとにファイルを割ったら .latexmkrc をプロジェクト直下に置きます。そうすれば Emacs でも他のエディタでも CI でも同じ PDF が出ます。