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](https://prod-files-secure.s3.us-west-2.amazonaws.com/a3d79190-572a-4604-a045-8b27c534a5b2/131020fc-9bd3-462a-9a04-11529de7b365/master.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T075701Z&X-Amz-Expires=3600&X-Amz-Signature=3d3c266ab344694fbc96fe2378f4f27b226b6dc3f5c74588c68022156074431f&X-Amz-SignedHeaders=host&x-id=GetObject)
設定で
(setq-default TeX-master nil)
をnilにしていて、main.tex
にAuctexの設定が記述されていないので尋ねられています。マスターファイルとはLatexのファイル分割機能で分割されたファイル群の中からどれをタイプセットするファイルか表しています。
例えば、章ごとにファイルを分割し、
main.tex
にinclude
した場合、マスターファイルはmain.tex
になります。各章のファイルでタイプセットしたとしても、マスターファイルが参照されてコンパイルされます。今はファイルが1つだけなので、 上の画像のようにエコーエリアから
main.tex
を選びエンターを押します。画像のように、ファイルの末尾にAuctexが参照する各種変数が自動的に追加され、ファイルを保存するか聞かれるので
y
とタイプします。![article image](https://prod-files-secure.s3.us-west-2.amazonaws.com/a3d79190-572a-4604-a045-8b27c534a5b2/c1190598-e407-429b-9c83-f03053c867e1/add.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T075701Z&X-Amz-Expires=3600&X-Amz-Signature=1aed9c24f801ffb290653f7e2e5f6dee61746d618b6cc7267d1caa0090100570&X-Amz-SignedHeaders=host&x-id=GetObject)
続けて、コマンドの実行待機画面になるので 、
Latex
コマンドを選びましょう。![article image](https://prod-files-secure.s3.us-west-2.amazonaws.com/a3d79190-572a-4604-a045-8b27c534a5b2/e6a8c196-c888-45e5-949d-2408447d3bd1/latexcommand.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T075701Z&X-Amz-Expires=3600&X-Amz-Signature=053b4f33cbfb070389839b9f51021a9b4b03bb890bc2f8a47e96cef72a8dd3f0&X-Amz-SignedHeaders=host&x-id=GetObject)
最初のコマンド実行時は必要ファイルの展開がなされるので、エコーエリアにこのようなメッセージが表示されます
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](https://prod-files-secure.s3.us-west-2.amazonaws.com/a3d79190-572a-4604-a045-8b27c534a5b2/c074d460-ad29-49bd-bde1-382db122779b/dvi.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T075701Z&X-Amz-Expires=3600&X-Amz-Signature=3b04079389aa1686ab5b88e90572623229b9b23cb93138d3d1b1c8b028e9241c&X-Amz-SignedHeaders=host&x-id=GetObject)
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](https://prod-files-secure.s3.us-west-2.amazonaws.com/a3d79190-572a-4604-a045-8b27c534a5b2/872dc5ac-5c43-4e2f-9a22-a347de1d05ce/view.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T075701Z&X-Amz-Expires=3600&X-Amz-Signature=1dc415ab148eb6165d55154dfe7e37e0e539d2a5d3574791e1f48dfd70cb1d9a&X-Amz-SignedHeaders=host&x-id=GetObject)
エコーエリアにどのpdfを開くか表示されます。そのままエンターを押します。
View command: displayline 14 main.pdf main.tex
EmacsでSkimのpdfビューワーを利用する設定を記述しました。Skimでpdfが開かれて、表示されます。
![article image](https://prod-files-secure.s3.us-west-2.amazonaws.com/a3d79190-572a-4604-a045-8b27c534a5b2/f8c4ee86-1cf6-4933-9b85-4860c4717801/skim.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T075701Z&X-Amz-Expires=3600&X-Amz-Signature=f971446e14f185bc17d25cd5cc0d5419f68e58c2174aee362ed14c27c1a0d30f&X-Amz-SignedHeaders=host&x-id=GetObject)
一連の
TeX-command-master C-c C-c
を毎回実行するのは面倒です。TeX-command-run-all C-c C-a
はtex => dvi => pdf => viewの処理を自動的に行なってくれます。試しにtexファイルのHello Tex
をHello Latex
に変更してC-c C-a
を実行してみてください。pdfが更新され、Skimに表示されます。以上が基本的なAuctexを使ったLatexの使い方です。
ファイル分割機能を利用する
Latexの魅力と言ったらこのファイルの分割機能でしょう。WordやMarkdownでは長い文章を書くと1ファイルが膨大な量になってしまいます。Latexは簡単にファイルの分割ができ、それをインクルードすることで、タイプセットする時には1つのファイルとして表示されます。
最初に作った
title.tex
に表紙を作成して、main.tex
に読み込ませてみましょう。まずは
main.tex
にtitle.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](https://prod-files-secure.s3.us-west-2.amazonaws.com/a3d79190-572a-4604-a045-8b27c534a5b2/80e06ff4-8115-42ee-ae08-a5a0c2719473/title.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T075701Z&X-Amz-Expires=3600&X-Amz-Signature=709d34fdc782c538c5dfab8fac3c66368ecb40ac112b79a11cb5f8c029649b35&X-Amz-SignedHeaders=host&x-id=GetObject)
保存するか聞かれるので、
y
とタイプします。![article image](https://prod-files-secure.s3.us-west-2.amazonaws.com/a3d79190-572a-4604-a045-8b27c534a5b2/8ae0ada1-5c1a-4382-8ed9-522424c5fe56/miss.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T075701Z&X-Amz-Expires=3600&X-Amz-Signature=cd614f62394e7c8f98ff25c78de1d871bedea4acbfb99fa04a0ba524c7776120&X-Amz-SignedHeaders=host&x-id=GetObject)
次のコマンド実行画面では一度処理を
C-g
で中断します。というのも自動的に挿入されたAuctexの設定が間違っているので、書き直す必要があります。
mode: latex
をmain.texと同じように、mode: japanese-latex
に変更します。保存したら、一度
title.tex
をM-x kill-this-buffer
で閉じます。理由はAuctexがtitle.tex
に記述したmode
やTex-master
などの変数を正しく認識してくれず、コンパイルに失敗するからです。再読み込みすると正しく認識されます。![article image](https://prod-files-secure.s3.us-west-2.amazonaws.com/a3d79190-572a-4604-a045-8b27c534a5b2/8943fe20-4add-4bc3-adb1-93a14c8ad063/reload.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T075701Z&X-Amz-Expires=3600&X-Amz-Signature=2d9122f77748b23953fa757d93279df102b8a616307ee60b4a5c8d33c5c40697&X-Amz-SignedHeaders=host&x-id=GetObject)
title.tex
を開いてTeX-command-master C-c C-c
を実行していきtex => dvi => pdf => viewができるか確認してください。問題なく実行できればこのようなpdfが表示されます。![article image](https://prod-files-secure.s3.us-west-2.amazonaws.com/a3d79190-572a-4604-a045-8b27c534a5b2/a28d5b6d-4dbd-4ecd-8c92-0383927bac36/top.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T075701Z&X-Amz-Expires=3600&X-Amz-Signature=9aec44a9ba50e2027e84754bb16f022e6141c501a22e449a9210e6bd2500af3d&X-Amz-SignedHeaders=host&x-id=GetObject)
まとめ
以上がEmacsのAuctexを利用してLatexのドキュメントを作成する一連の手順でした。
ぜひ活用してみてください。
![profile image](/prof.jpg)
Ted
大学でコンセンサスアルゴリズムを研究。卒業後ベンチャー企業に入社してフルスタックでWebサービスを開発。現在は大手IT企業に転職し、プログラミングを行っている。AIにプログラマーの仕事を奪って欲しいと願っている。