EmacsでAuctexを使ってLatexの環境構築

2023年5月01日
thumbnail
EmacsのAuctexを使って、Texファイルをコンパイルし、PDFビューワーで表示する方法に挑戦します。
最近まで、Emacsの標準tex-modeを拡張してTeXドキュメントを作成していましたが、さすがにAuctexを使うべきだと思い、試してみました。 Latexと一言で表しても、どのような目的で書くかで、セットアップが異なります。ここでは日本語で論文や記事、本を書くujreportやujarticleを利用したものを紹介します。
前提条件として、Texの実行環境は用意しておいてください。
完成したEmacsのAuctexモードの設定がこちらです。
(use-package tex
  :defer t
  :ensure auctex
  :config
  ;; Texドキュメントを編集中に自動保存する
  (setq TeX-auto-save t)
  ;; TexファイルのLatexコードを読み取りAuctexで適切にコンパイルする機能を有効化
  (setq TeX-parse-self t)
  ;; TeX-masterを未定義にした場合、親ファイルの存在を確認するようになる
  (setq-default TeX-master nil)
  ;; Skimビューワーでpdfを表示する設定
  (setq tex-dvi-view-command "open -a Skim")
  (setenv "PATH" "/usr/local/bin:/Library/TeX/texbin/:/Applications/Skim.app/Contents/SharedSupport:$PATH" t)
  (setq exec-path (append '("/usr/local/bin" "/Library/TeX/texbin" "/Applications/Skim.app/Contents/SharedSupport") exec-path))
  (setq TeX-view-program-selection '((output-pdf "displayline"))))

設定の解説

EmacsでAuctexを利用する方法は複数あります。
上の設定ではtex-modeをメジャーモードにして:defer t:ensure auctexを組み合わせてAuctexを起動しています。
Emacsは自動バックアップ機能が付いているため、(setq TeX-auto-save t)を宣言する必要はありませんが、多くの記事でこの設定が推奨されているため、同じように設定しています。
その他の設定は実際にLatexを動かしながら解説したほうが分かりやすいので、解説しながら紹介します。

pdfビューワーのインストール

Latexは標準でMacに入っている「プレビュー」をpdfのビューワーとして利用します。「プレビュー」は表示するだけなら問題がない性能をしています。一方でこまめに編集しタイプセットするとなると表示位置がリセットされたり、拡大縮小が変になったりするのでおすすめできません。特に最初の頃は、TeXファイルに記述したデザインがPDFに変換した時に意図したものになっているか頻繁に確認する必要があります。そのため、ビューワーの性能が重要になります。
Skimはその点タイプセット後の変更がシームレスで見やすく便利です。brew経由でインストールしておきましょう。
brew install --cask skim

Hello Latex

tex用のフォルダと、必要なファイルを作成します。
mkdir simple-report
cd simple-report
touch main.tex
touch title.tex
Emacsでmain.texを開きます。
日本語でレポートを書くテンプレートを記述します。
% ujreportクラスでuplatexエンジンを使いA4サイズ、両面印刷
\documentclass[uplatex,a4j,twoside]{ujreport}
% LaTeX文書で日本語を使うためのパッケージのロード
\usepackage[japanese]{babel}
% 日本語を使うことの宣言
\selectlanguage{japanese}
% 日本語のエンコードはutf8
\usepackage[utf8]{inputenc}
% LaTeXで画像を挿入するためのパッケージ
% dvipdfmxオプションでlatex => dvi => pdfタイプセットのために必須
\usepackage[dvipdfmx]{graphicx}

\begin{document}
\tableofcontents

Hello Tex

\end{document}
C-x C-sで保存します。

texからdvi

TeX-command-master C-c C-cでtexファイルをタイプセットつまりコンパイルみたいなことをします。 どのファイルをマスターとしてタイプセットするか聞かれます。
article image
設定で(setq-default TeX-master nil)をnilにしていて、main.texにAuctexの設定が記述されていないので尋ねられています。
マスターファイルとはLatexのファイル分割機能で分割されたファイル群の中からどれをタイプセットするファイルか表しています。
例えば、章ごとにファイルを分割し、main.texincludeした場合、マスターファイルはmain.texになります。各章のファイルでタイプセットしたとしても、マスターファイルが参照されてコンパイルされます。
今はファイルが1つだけなので、 上の画像のようにエコーエリアからmain.texを選びエンターを押します。
画像のように、ファイルの末尾にAuctexが参照する各種変数が自動的に追加され、ファイルを保存するか聞かれるのでyとタイプします。
article image
続けて、コマンドの実行待機画面になるので 、Latexコマンドを選びましょう。
article image
最初のコマンド実行時は必要ファイルの展開がなされるので、エコーエリアにこのようなメッセージが表示されますYou should run LaTeX again to get TOC right
もう1度TeX-command-master C-c C-cを実行します。上にも書いたように、Auctexの設定が main.texに追加されているので、もうマスターファイルの場所を聞かれることはありません。コマンドの候補からLatexを選びます。
エコーエリアこのメッセージが表示さればタイプセット成功です。
LaTeX: successfully formatted {1} page
まだpdfは作成されていません。latex => dvi => pdfのdvi生成までが完了しました。

dviからpdf

再びTeX-command-master C-c C-cを実行します。今度はデフォルトのコマンドがDvipdfmxになっているはずです。エンターを押して実行します。
article image
main.pdfが生成されます。
simple-report % ls
drwxr-xr-x  3     96  5  1 12:41 auto
-rw-r--r--  1    136  5  1 12:41 main.aux
-rw-r--r--  1    376  5  1 12:41 main.dvi
-rw-r--r--  1   6140  5  1 12:41 main.log
-rw-r--r--  1   4244  5  1 12:45 main.pdf
-rw-r--r--  1    658  5  1 12:41 main.tex
-rw-r--r--  1     62  5  1 12:41 main.toc
-rw-r--r--  1      0  5  1 10:59 title.tex

pdfをビューワーで表示

再びTeX-command-master C-c C-cを実行します。今度はデフォルトのコマンドがViewになっているはずです。エンターを押して実行します。
article image
エコーエリアにどのpdfを開くか表示されます。そのままエンターを押します。
View command: displayline 14 main.pdf main.tex
EmacsでSkimのpdfビューワーを利用する設定を記述しました。Skimでpdfが開かれて、表示されます。
article image
一連のTeX-command-master C-c C-cを毎回実行するのは面倒です。TeX-command-run-all C-c C-aはtex => dvi => pdf => viewの処理を自動的に行なってくれます。試しにtexファイルのHello TexHello Latexに変更してC-c C-aを実行してみてください。
pdfが更新され、Skimに表示されます。以上が基本的なAuctexを使ったLatexの使い方です。

ファイル分割機能を利用する

Latexの魅力と言ったらこのファイルの分割機能でしょう。WordやMarkdownでは長い文章を書くと1ファイルが膨大な量になってしまいます。Latexは簡単にファイルの分割ができ、それをインクルードすることで、タイプセットする時には1つのファイルとして表示されます。
最初に作ったtitle.texに表紙を作成して、main.texに読み込ませてみましょう。
まずはmain.textitle.texをインクルードする\include{title}を加えます。
\begin{document}
\include{title}
\tableofcontents

Hello LaTex

\end{document}
title.tex を開いて、以下を書き込みます。
\begin{titlepage}
  \begin{center}
    \vspace*{80truept}
    {\huge Hello Tex}
  \end{center}
\end{titlepage}
C-x C-s で保存します。 title.texバッファでTeX-command-master C-c C-cを実行しましょう。 マスターファイルを何にするか聞かれます。マスターファイルはmain.texなのでそれを選びます。
article image
保存するか聞かれるので、yとタイプします。
article image
次のコマンド実行画面では一度処理をC-gで中断します。
というのも自動的に挿入されたAuctexの設定が間違っているので、書き直す必要があります。mode: latexをmain.texと同じように、mode: japanese-latexに変更します。
保存したら、一度title.texM-x kill-this-bufferで閉じます。理由はAuctexがtitle.texに記述したmodeTex-masterなどの変数を正しく認識してくれず、コンパイルに失敗するからです。再読み込みすると正しく認識されます。
article image
title.texを開いてTeX-command-master C-c C-cを実行していきtex => dvi => pdf => viewができるか確認してください。問題なく実行できればこのようなpdfが表示されます。
article image

まとめ

以上がEmacsのAuctexを利用してLatexのドキュメントを作成する一連の手順でした。 ぜひ活用してみてください。
profile image
Ted
大学でコンセンサスアルゴリズムを研究。卒業後ベンチャー企業に入社してフルスタックでWebサービスを開発。現在は大手IT企業に転職し、プログラミングを行っている。AIにプログラマーの仕事を奪って欲しいと願っている。