LaTeX のすゝめ（2021 年）

## はじめに

本記事はレポート・論文等の執筆に役立つツールの LaTeX を紹介します。非 LaTeX ユーザや**初心者を対象**としています。中級者や上級者には物足りないと思います。

## TeX / LaTeX とは

TeX（テック / テフ）[^tex]は，スタンフォード大学の計算機科学と数学の教授である Donald E. Knuth が自ら開発した**フリーの組版システム**です。TeX は MS Word などの見たままを出力する WYSIWYG ソフトウェアと異なり，執筆・組版・出力の各段階を分けて処理を行います。**執筆に集中でき**，様々なプラットフォーム上で**高品質なの文書を出力する**ことができます。

[^tex]: $\mathrm{\TeX}$ のように書くことが望ましいです。難しい場合は TeX にしましょう。この記事では統一のために TeX にしています。

LaTeX（ラテック / ラテフ）[^latex]はコンピューター科学者の Leslie Lamport によって開発された，TeX に機能を追加し手軽に組版が行えるようになったシステムです。現在では LaTeX を使うことが一般的なので，「TeX」で LaTeX を指すことが多いです。

[^latex]: $\mathrm{\LaTeX}$ のように書くことが望ましいです。難しい場合は LaTeX にしましょう。

TeX，LaTeX の特徴は次のようなことがあげられます。

- Windows，macOS，Linux などの多くのプラットフォームで動作する。
- **テキストファイル**で文書を管理できる。
- **綺麗な数式を簡単に書ける**[^formula]。
- 図や表を挿入した文書を作成できる。
- 章・節，式，図表の番号，頁番号管理などを**自動**的に行い，参照できる。

[^formula]: TeX の数式記法は現在一般的に使用されています。

## 日本語 TeX について

現在，日本語対応している主な TeX エンジンは 3 つあります。

- pTeX：昔々にアスキーが開発した日本語対応のエンジンです。
- upTeX：Unicode 対応で pTeX の進化系のようなエンジンです。
- LuaTeX：Lua が使え，PDF を直接出力する最新のエンジンです。

昔からの名残で学会のフォーマットに pLaTeX を採用していることがあります。ほぼ上位互換の upLaTeX が現在の主流であることから upLaTeX を中心に解説します。最新（未来の標準）の LuaLaTeX については，[LuaLaTeX のすゝめ](https://qiita.com/Daiji256/items/9afbfa9f822629d3b995)で解説しています。

### upLaTeX について

田中 琢爾さんが内部コードを Unicode 化した pLaTeX の拡張版です。これにより次のような pLaTeX の問題が解決されました。

- JIS 第 1, 2 水準の範囲内の文字しか使えないこと。
- 8bit の非英語欧文の扱いが難しいこと。
- 日本語に限られた利用しか出来なく，中国語や韓国語を扱えないこと。

簡単な話，いわゆる**環境依存文字に優しくなった** pLaTeX です。pLaTeX を使う理由は皆無と言ってもいいでしょう。（pLaTeX のフォーマットしか用意されていない学会とかがあるなら別ですが...）

## LaTeX 開発環境

文書作成には自分の PC 等に LaTeX をインストールが必要です。TeX Live という TeX のディストリビューションがおすすめです。インストール方法は OS ごとに異なるため，[TeX Live (TeX Wiki)](https://texwiki.texjp.org/TeX%20Live) を参考にしてください。

自分の PC に環境を構築したくない場合は Web 上のサービスをおすすめします。日本では [Overleaf](https://ja.overleaf.com/) と [Cloud LaTeX](https://cloudlatex.io/ja) がメジャーだと思います。どちらも無料でブラウザ上から LaTeX を使用できます。

## 文書作成の基本手順

upLaTeX による文書作成は執筆・組版・出力の 3 つのステップで行います[^legacy-modern]。

1. 原稿執筆にはテキストエディタを用いて TeX ファイルを作成する。
2. コマンド（`uplatex`）を用いて TeX ファイルから DVI ファイルを作成する。
3. コマンド（`dvipdfmx`）を用いて DVI ファイルから PDF ファイルを作成する[^not-pdf]。

この手順により執筆した TeX ソースファイルから PDF の文書ファイルを出力することができます。次に作成手順について例を用いて紹介します。

[^legacy-modern]: (u)pLaTeX のようなレガシー LaTeX は DVI を経由して PDF を作成します。pdfLaTeX，LuaLaTeX などのモダン LaTeX は直接 PDF を出力するので 2 つのステップ（執筆と出力）になります。
[^not-pdf]: 他のソフト（コマンド）により PDF ファイル以外の PS ファイルを出力場合などもあります。

### 原稿ファイルの執筆（TeX ファイルの作成）

テキストエディタを用いて下に示すソースファイル（`sample.tex`）を作成します。ソースコードの具体的な説明は [TeX ソースの基本構成](#tex-ソースの基本構成)を参照してください。

```TeX:sample.tex
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx]{jsarticle}

\title{{\LaTeX}のすゝめ}
\author{Daiji}

\begin{document}
\maketitle

\section{はじめに}

{\TeX}は組版システムです。
{\TeX}を使いやすくするために，{\LaTeX}が開発されました。

p{\TeX}は日本語対応の{\TeX}です。
up{\TeX}はUnicode対応のp{\TeX}です。

\end{document}
```

### 組版（コンパイル）

upLaTeX を呼び出し，DVI（device independent file format）ファイル[^dvi]を生成します。`sample.tex` をコンパイルする場合は，次のコマンドになります。

[^dvi]: レイアウト情報を埋め込んだファイルのことです。

```
uplatex sample
```

次のようなメッセージが表示されたなら，コンパイルは成功し，`sample.aux`，`sample.log`，`sample.dvi` が生成されているはずです。

```
...
Output written on sample.dvi (1 page, 1076 bytes).
Transcript written on sample.log.
```

### PDF に変換

DVI ファイルを PDF の文書ファイルに変換するには次のコマンドで行えます[^dvipdfm]。`sample.pdf` が生成されると思います。

[^dvipdfm]: 古い `dvipdfm` という DVI ウェアもあるが今は使えません。

```
dvipdfmx sample
```

## TeX ソースの基本構成

upLaTeX のソースファイルは次の基本構成となります。

```TeX
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx]{jsarticle}
% プリアンブル
\begin{document}
% 本文
\end{document}
```

1 行目は (u)pLaTeX と LaTeX の非互換を**いい感じにしてくれるヤツ**です。(u)pLaTeX を使用する場合は何も考えずに書いてください。2 行目は文書の種類（document class）を指定する部分です（[参照](#ドキュメントクラス)）[^option]。プリアンブルでは文書の体裁に関する宣言やコマンド等の定義を行います。本文が実際に出力される文書となります。なお，記号 `%` はコメントの開始を意味します（[参照](#本文の執筆の基本ルール)）。

[^option]: `uplatex` はこのソースファイルが upLaTeX 用であることを明示するためにあります。また，`dvipdfmx` は `graphicx` や `color` パッケージのドライバ指定用です。グローバルオプションとして全てのパッケージに適用されます。

## 本文の執筆の基本ルール

- 英文は単語の区切りで，和文は任意の場所で改行されます。
- 段落を区切るには，空行を入れる。
- 2 文字以上の半角空白文字，タブ文字は 1 文字の半角文字とみなされる。
- 段落のはじめのインデントは TeX が自動的に入ります。全角スペースによるインデントは推奨されません。
- 次の記号は，TeX のキーワード扱いになるので，そのままでは出力できません（[参照](#記号)）。  
`#`，`$`，`%`，`&`，`_`，`{`，`}`，`<`，`>`，`\`，`^`，`|`，`~`
- 記号 `%` 以降，行末まではコメントになります。
- 記号 `\` ではじまる文字列はコマンドまたは環境です。環境とは `\begin{環境名}` と `\end{環境名}` のような対になっている命令で，それ以外のものがコマンドです。
- `\\` により強制改行ができます。安易な使用はお勧めしません。

## コマンド

ここでは主要な一部のコマンド等の紹介を行います。

### タイトル

文章のタイトルは次のように指定します。

```TeX
\title{表題}
\author{著者}
\date{日付}
\maketitle
```

### 見出し

```TeX
\part{部}
\chapter{章} % jsarticle クラスには用意されていない
\section{節}
\subsection{項}
\subsubsection{目}
\paragraph{段落}
\subparagraph{小段落}
```

`\section*{節}` のように，`*` をつけることで，番号をつけないようにできます。

### 文字サイズ変更

文字サイズを変更するには次のコマンドが利用できます。サイズはデフォルトの値になっています。コマンド以降のフォントが全て変更されます。`{\Large 文章}` のようにすることで一部が変更できます。（Qiita では `\footnotesize` が使えないため， `\small` で代用しています。）

|コマンド       |サイズ                          |
|---------------|--------------------------------|
|`\tiny`        |$\tiny       5\,\mathrm{pt}$    |
|`\scriptsize`  |$\scriptsize 7\,\mathrm{pt}$    |
|`\footnotesize`|$\small      8\,\mathrm{pt}$    |
|`\small`       |$\small      9\,\mathrm{pt}$    |
|`\normalsize`  |$\normalsize 10\,\mathrm{pt}$   |
|`\large`       |$\large      12\,\mathrm{pt}$   |
|`\Large`       |$\Large      14.4\,\mathrm{pt}$ |
|`\LARGE`       |$\LARGE      17.28\,\mathrm{pt}$|
|`\huge`        |$\huge       20.74\,\mathrm{pt}$|
|`\Huge`        |$\Huge       24.88\,\mathrm{pt}$|

これら以外の文字サイズに変更したい場合には `\fontsize` コマンドを使用します。文字サイズと行送りを指定して使用します。

```TeX
\fontsize{10.5pt}{15pt}\selectfont
```

### フォントスタイル変更

フォントスタイルを変更するには次のコマンドが利用できます[^bf...]。日本語用の明朝体やゴシック体にするコマンド `\textmc`，`\textgt` も存在します。（Qiita では `sl`，`sc` が使えないため，`it`，`rm` で代用しています。）

[^bf...]: `\bf` や `\it` のようなフォントスタイルを変更するコマンドは古く使ってはいけない。現在は `\bfseries` 等の使用が推奨される。

|入力                 |出力                                                 |
|---------------------|-----------------------------------------------------|
|`\textrm{Roman}`     |$\mathrm{Roman}$                                     |
|`\textbf{Boldface}`  |$\mathbf{Boldface}$                                  |
|`\texttt{Typewriter}`|$\mathtt{Typewriter}$                                |
|`\textit{Italic}`    |$\mathit{Italic}$                                    |
|`\textsf{SansSerif}` |$\mathsf{Sans~Serif}$                                 |
|`\textsl{Slanted}`   |$\mathit{Slanted}$                            |
|`\textsc{SmallCaps}` |$\mathrm{S\scriptsize MALL}~\mathrm{C\scriptsize APS}$|

### 記号

キーワード扱いの文字や一部の特殊文字を出力するためには次のコマンドなどが利用できます。

|入力      |出力                                         |
|----------|---------------------------------------------|
|`\#`      |$\text{\#}$                                  |
|`\$`      |$\text{\\$}$                                  |
|`\%`      |$\text{%}$                                  |
|`\&`      |$\text{\&}$                                  |
|`\_`      |$\text{\_}$                                  |
|`\{`      |$\\{$                                        |
|`\}`      |$\\}$                                        |
|`-`       |$\text{-}$（ハイフン）                       |
|`--`      |$\text{–}$（エヌダッシュ）                   |
|`---`     |$\text{—}$（エムダッシュ）                   |
|`$-$`     |$-$（マイナス）                              |
|``` `` ```|$\text{``}$（開きダブルクォーテーション）    |
|`''`      |$\text{''}$（閉じダブルクォーテーション）[^"]|

[^"]: TeX では 1 キーで入力するダブルクォーテーション「"」の使用は推奨されない。

### 改ページ

改ページを行なうコマンドには，`\pagebreak`，`\newpage`，`\clearpage` などがあります。コマンドごとに細かな使用が異なりますが基本的に改ページに用いられます。

## 環境

ここでは主要な一部の環境の紹介を行います。

### 箇条書き

箇条書きのための環境として，番号なし箇条書き（`itemize`），番号付き箇条書き（`enumerate`），見出し付き箇条書き（`description`）が用意されています。次のように使用してください。

```TeX
\begin{itemize}
	\item 項目1
	\item 項目2
\end{itemize}
```

### 揃え

文字揃えは左揃え（`flushleft`），中央揃え（`center`），右揃え（`flushright`）が指定できます。次のように使用してください。

```TeX
\begin{flushleft}
	文字列1\\
	文字列2
\end{flushleft}
```

## ドキュメントクラス

1 行目のドキュメントクラス指定は次のように記述します。

```TeX
\documentclass[オプション]{ドキュメントクラス}
```

`jsclasses` 互換クラス次の通りです。`jarticle` 等は JIS 組版規則に合わないのでお勧めできません。現在は日本語組版処理の要件に準拠した `jlreq` が注目を浴びています。詳しくは [jlreq (GitHub)](https://github.com/abenori/jlreq/blob/master/README-ja.md) で説明されています。

|種類   |ドキュメントクラス|内容            |
|-------|------------------|----------------|
|article|`jsarticle`       |論文・レポート用|
|book   |`jsbook`          |書籍用          |

一部のオプションは次の通りです。

|オプション|内容                          |
|----------|------------------------------|
|11pt, 12pt|本文の文字サイズ（11pt，12pt）|
|landscape |横長                          |
|twocolumn |2 段組                        |
|fleqn     |数式を左揃え                  |
|titlepage |独立したタイトルページ        |
|a4paper   |用紙サイズを A4 に指定        |
|b5paper   |用紙サイズを B5 に指定        |

## 目次 / 相互参照

LaTeX には自動で節やキャプションの参照が行えます。文書の一部を書き直すときも自動で変更してくれるのでとても便利です。

### 目次

目次を出力するには，挿入したい場所に `\tableofcontents` と書き，TeX ファイルを 3 回コンパイルしてください。同様に図や表の目次を出力したい場所には `\listoffigures`，`\listoftables` と書いてください。

### 相互参照

節や図表の表題，式の後に `\label{ラベル}` を書くことで，その番号を参照したいところで `\ref{ラベル}` とすれば，対応する番号を参照できます。また，`\pageref{ラベル}` とすればページ番号が参照できます。相互参照を使う場合には，TeX ファイルを 2 回コンパイルする必要があります。

```TeX
本研究で用いた試験材料の外観を図\ref{fig:test}に示す。
\begin{figure}
	....
	\caption{実験装置の外観}
	\label{fig:test}
\end{figure}
```
```TeX
温度特性は，式(\ref{eq:test})で近似できる。
\begin{align}
	y = \exp(x) + c. \label{eq:test}
\end{align}
```

## 数式

### 本文中の数式

本文中に $f(x) = ax + b$ のように数式を書くには次のように `$` で挟むことでできます。

```TeX
本文中に$f(x) = ax + b$のように数式を書くには次のように\verb|$|で挟むことでできます。
```

### 別行立て数式

別行立て数式は，

```math
\begin{align}
	f(x) &= ax + b\\
	g(x) &= cx^{2} + dx + e
\end{align}
```

のように環境 `align` により書くことができます[^align]。他の数式環境の `eqnarray` も有名だが `amsmath.sty` ではサポートしていないので推奨できない。

[^align]: Qiita では式番号が表示されないが，実際の TeX では表示されます。また，TeX で式番号を表示しない場合は環境を `align*` とします。

```TeX
別行立て数式は，
\begin{align}
	f(x) &= ax + b\\
	g(x) &= cx^{2} + dx + e
\end{align}
のように環境により書くことができます。
```

## おわりに

今回は，(u)pLaTeX を中心に LaTeX の**ごく一部**を紹介をしました。本記事では以下に示すような紹介できてないです。

- 数式モード中でのコマンドなど
- 表
- 図（特に EPS とか PDF の話）

今後暇を見付けて記事のアップデートしていきたいと思います。楽しい LaTeX ライフを願っています。

## 文献

1. [改訂第8版 LaTeX2e 美文書作成入門](https://www.amazon.co.jp/dp/B08MZ98Z1Q/)
1. [TeX Wiki](https://texwiki.texjp.org/)
1. [Overleaf](https://ja.overleaf.com/)
1. [Cloud LaTeX](https://cloudlatex.io/ja)
1. [LuaLaTeX のすゝめ (Qiita)](https://qiita.com/Daiji256/items/9afbfa9f822629d3b995)
1. [jlreq (GitHub)](https://github.com/abenori/jlreq/blob/master/README-ja.md)
1. [LaTeX のすゝめ](https://daiji256.github.io/posts/latex-susume/)