【LaTeX】初心者向けエンジンと文書クラスについて

初心者が混乱しやすいものとしてLaTeXエンジンと文書クラスがあります。自分がなんのエンジンを使っているのいるのか、どのエンジンを使うべきなのか、どの文書クラスを使うべきなのかなど分からなくて混乱してしてしまう初心者は多いと思います。この記事ではそういった初心者向けにLaTeXエンジンと文書クラスについて簡単に解説します。
# LaTeXエンジンについて
LaTeXエンジンとはソースファイルをPDF（またはdviファイル）に変換するもののことです。日本語で主に使われているLaTeXエンジンとしては以下の5つがあります。
- pLaTeX
- upLaTeX
- pdfLaTeX
- XeLaTeX
- LuaLaTeX

ここからはこの5つのエンジンがどのようなものでいつ使われるのかについて解説していきます。
## pLaTeX
pLaTeXは日本語用のエンジンであり、dviファイルを出力するエンジンです。この5つのエンジンでは最も古いものです。昔からあるのでインターネットに転がっているソースファイルではこのpLaTeX用に書かれたものが多く存在しています。しかし、現在では新しいエンジンが色々と出ているのとpLaTeX特有の問題がいくつもあるため、指定があるとき以外は使うべきではありません。
## upLaTeX
upLaTeXはpLaTeXを改良されて作られたエンジンでほぼ上位互換となります。pLaTeXと同様に日本語用のエンジンであり、dviファイルを出力するエンジンです。pLaTeXとの互換性が高いのでよく(u)pLaTeXとまとめて呼ばれます。このエンジンもそれなりに昔からあるのでpLaTeXではなくupLaTeX向けに書かれて記事やソースファイルもインターネット上によく転がっています。
## pdfLaTeX
pdfLaTeXは5つのエンジンの中で唯一日本語の組版が行えないエンジンです。欧文文書を作成する場合は現在は通常このpdfLaTeXを使用します。(u)pLaTeXとは異なり直接PDFを出力します。
## XeLaTeX
XeLaTeXはpdfLaTeXよりも新しエンジンでpdfLaTeXと同様に直接PDFを出力します。[^1]一応日本語の組版ができます。ただ一応と書いた通り(u)pLaTeXや後述のLuaLaTeXに比べるといくつかの問題があるので、特別な理由がある場合以外は日本語の文書を作成する時には使わない方が良いと思います。
## LuaLaTeX
LuaLaTeXはXeLaTeXと同様にpdfLaTeXよりも新しいエンジンで直接pdfを出力します。日本語組版もしっかり行えます。(u)pLaTeXと異なり日本語専用のエンジンではなく、また新しいエンジンなのでLuaLaTeX特有の問題というのが少ないです。ただ(u)pLaTeXよりもインターネットに転がっている情報が少ないです。
## dviファイルからPDFへの変換
(u)pLaTeXではPDFではなくdviファイルが出力されるのでPDFを得るためにさらに変換する必要があります。dviファイルからの変換には現在主に
- dvips
- dvipdfmx

の2つが使われています。dvipdfmというものもありましたが現在は使われていません。dvipdfmxはdviファイルをPDFに変換しますが、dvipsの場合はPostScriptに変換します。PostScriptからPDFへの変換にはAdobe DistillerやGhostscriptを用います。[^2]特別な理由がない場合はdvipdfmxを使えば良いと思います。
## どのエンジンを使うべきなのか
エンジンが指定されている場合はそのエンジンを使いましょう。日本の学会などでは未だにpLaTeXが指定されている場合がほとんどです。[^3]arXivではpdfLaTeXが指定されているなどエンジンの指定は日本以外でもあるので注意してください。エンジンが指定されていない日本語の文書ではupLaTexまたはLuaLaTexを使うべきです。upLaTexかLuaLaTexかは現段階ではまだ好みの問題だと思います。LuaLaTexはpLaTeXとは異なる点が色々とあるので互換性の高いupLaTexを使うという考えもあるでしょうし、(u)pLaTeX特有の問題からおさらばするためにLuaLaTexを使うという考えもあると思います。LuaLaTexと(u)pLaTeXの書き方の違いの簡単な例とししては[こちらの記事](https://qiita.com/zr_tex8r/items/ac9176e4611bf233a3e0)が参考になります。
## 自分が使っているのエンジンが分からない場合
初心者の場合は自分がどのエンジンを使っているのか知らないという人もいると思います。その場合は[この記事](https://qiita.com/zr_tex8r/items/a924be192ecea7e6bbe4#fn-lie)のhello.texを普段やっているようにPDFに変換すれば自分が使っているエンジンが分かります。
# 文書クラスについて
文書クラスとは文書の形を決めるものです。論文や学会で専用の文書クラスが用意されていることもありますがここでは汎用の文書クラスについて解説します。以下のように文書クラスを指定します。（jsarticleというのが文書クラスでuplatexとdvipdfmxはそのオプションです。）
```latex
\documentclass[uplatex,dvipdfmx]{jsarticle}
```
## article、report、book
欧文で用いられる文書クラスです。articleが通常の論文、reportが長い論文や報告書、bookが本に用いる文書クラスです。
## jarticle、jreport、jbook、tarticle、treport、tbook
pLaTeX用の古い文書クラスです。tがついているものは縦書き用です。特別な理由がある場合以外は使うべきではありません。
## ujarticle、ujreport、ujbook、utarticle、utreport、utbook
upLaTeX版の古い文書クラスです。pLaTeXの場合と同様に特別な理由がある場合以外は使うべきではありません。
## jsclasses(jsarticle、jsreport、jsbook)
(u)pLaTeX用の文書クラスです。jarticleなどのほぼ上位互換になります。
## ltjsclasses(ltjsarticle、ltjsreport、ltjsbook)
LuaLaTeX用のjsclassesの互換文書クラスです。
## BXjscls(bxjsarticle、bxjsreport、bxjsbook、bxjsslide)
jsclassesの拡張版で(u)pLaTeXだけでなくpdfLaTeX、XeLaTeX、LuaLaTeXでも使用できます。（pdfLaTeX、XeLaTeXでちゃんとした組版ができるという意味ではありません。）bxjsslideはjsarticleでslideオプションを指定したときに相当します。
## jlreq
新しい日本語用の文書クラスです。[日本語組版処理の要件](https://www.w3.org/TR/jlreq/?lang=ja)に準拠しています。他の文書クラスとは異なりarticle、report、bookなどはオプションで指定します。特別な理由がない場合はこの文書クラスを使うことをお勧めします。
## beamer
スライド製作用の文書クラスです。日本語でbeamerを使用する場合は[この記事](https://qiita.com/zr_tex8r/items/69e8cc32038ff29f5ac3)が参考になります。
# さいごに
この記事ではエンジンと文書クラスにどのようなものがあるかを説明しただけでその具体的な使い方については触れませんでした。(u)pLaTeXでの具体的な書き方は[イマドキのLaTeXの書き方入門](https://qiita.com/t_kemmochi/items/78064daaa3903b7925ab#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)と[日本語 LaTeX の新常識 2021](https://qiita.com/wtsnjp/items/76557b1598445a1fc9da#fn5)が非常に参考になると思います。jlreqについては[公式ドキュメント](https://github.com/abenori/jlreq/blob/master/README-ja.md)を見れば使い方が分かると思います。インターネット上の情報は玉石混交で初心者が取捨選択するのも難しいため[［改訂第8版］LaTeX2ε美文書作成入門](https://gihyo.jp/book/2020/978-4-297-11712-2)を購入するのもお勧めです。

[^1]: 実は内部的には直接pdfを出力しているわけではありません。
[^2]: もちろんPostScriptのまま印刷するなどの場合は変換する必要はありません。
[^3]: 最近はupLaTeXやLuaLaTexに移行する学会も増えているらしいです。