イマドキのLaTeXの書き方入門

## はじめに

この記事は, LaTeXによる文書の書き方についての入門的な記事です. 
本稿では, 2021年4月現在での「イマドキ」なLaTeXの書き方について, 最低限な部分を解説します. 
WindowsとVS Codeでの作業を想定して記述します.
環境構築についても簡単に説明します. 

対象とする読者としては, **卒論・修論・レポートなどでLaTeXを使わなければいけないけれど, 使ったことがない初心者**を想定しており, **とにかく数式や図表混じりの日本語の文章を書けるようになることが本稿の目標**です.
したがって, 「LaTeXとは何か」や, 論文を書くためのノウハウなどは説明しません.[^nyumon]

[^nyumon]: 2021年4月現在, LaTeXについて勉強しようとして「LaTeX 入門」とか「LaTeX 書き方」などのキーワードでGoogle検索をしても, 微妙な情報しか得られないと思います. 例えば, 「LaTeXとは何か」の説明が長く書かれていて, 肝心の書き方についての記述になかなかたどり着かないとか, そもそも情報が古いとか, です. しかし, 初学者はその情報の良し悪しを判断できません. この記事が初心者にとって「良い記事」になるよう努力します.

詳しい方へ: 筆者の理解を書いていますので, 間違いがあればご指摘ください.


### 本稿の内容

最低限と言いつつ結構多くなってしまいました:

1. [とりあえず書いてみる](#とりあえず書いてみる)
1. [ファイルの内容](#ファイルの内容)
1. [より複雑な文書を書く](#より複雑な文書を書く)
1. [よくあるエラーメッセージ](#よくあるエラーメッセージ)
1. [タブー集](#タブー集)
1. [雑多な話題](#雑多な話題)
1. [付録: 環境構築](#付録-環境構築)

まずは最初の2節が本当に最低限ですので, こちらをご覧ください.
その後, いろいろな入力例を, 「[より複雑な文書を書く](#より複雑な文書を書く)」を参考に試してください.
もしエラーが発生した場合は, 「[よくあるエラーメッセージ](#よくあるエラーメッセージ)」を参照してください.
残りは必要に応じて読めば十分と思います.


## 体系的に学ぶには

次の本を買いましょう: [［改訂第8版］LaTeX2ε美文書作成入門](https://gihyo.jp/book/2020/978-4-297-11712-2)
有名な入門書です. 一家に一冊あると便利です.

## とりあえず書いてみる

### ■ 前提

ひとまず, WindowsマシンにLaTeX (TeX Live 2020以降) とVS Codeがインストールされているものとして話を進めます.
まだの人は, [環境構築](#付録-環境構築)を参照してください. 
**LaTeX Workshop が入っている場合は, 一度無効化してください.**[^latexworkshop]

[^latexworkshop]: あるいは, 設定の `latex-workshop.latex.autoBuild.run` を一旦 `never` にしてください.


### ■ 手順1: VS Codeを開き, 新規にファイルを作る

1. まずは, 作業するフォルダをエクスプローラで開きます.
2. 次に, そのフォルダ内で右クリックをして, 「Codeで開く」をクリックします. <br> (「Codeで開く」がない場合: [Windowsの右クリックメニューに「VSCodeで開く」を追加する](https://qiita.com/kaityo256/items/7fefd1d1463184ae1420))
3. `Ctrl` + `N` を押して新しいファイルを作ります.
3. `Ctrl` + `S` を押して保存します. ファイル名は, ここでは `test.tex` とします.

### ■ 手順2: ファイルに内容を書き込む

意味はわからなくても良いので, ひとまず以下の内容を `test.tex` にコピペし, 上書き保存してください.

```latex:test.tex
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}

\usepackage{amsmath}
\usepackage{amssymb}

\title{初めてのレポート}
\author{数学 太郎}
\date{2021年4月1日}

\begin{document}

    \maketitle

    指数関数$e^z$のTaylor展開は, 
    \begin{equation}
        e^z = \sum_{n=0}^\infty \frac{z^n}{n!},
        \quad z \in \mathbb{C}
    \end{equation}
    と書かれる.

\end{document}
```

### ■ 手順3: pdfファイルに変換する (コンパイル)

1. VS Code上で `Ctrl` + `@` を押して, 下側にターミナルを開きます
2. ターミナルに, 以下を入力し, `Enter` を押します.

```shell
ptex2pdf -l -u test.tex
```

すると何やら色々出てきて, 最終的に

```shell
Output written on test.dvi (1 page, 1120 bytes).
Transcript written on test.log.
test.dvi -> test.pdf
[1]
18943 bytes written
test.pdf generated by dvipdfmx.
```

と表示されて終了すると思います (下から2行目の数字は多少変わります).
すると, `test.tex` と同じフォルダに `test.pdf` ができていると思います.
このpdfファイルを開いてみて, 以下のようになっていれば, 正しく操作ができています.


![fig-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111178/edaecc91-02a1-121e-4fe0-3317c877d59d.png)



LaTeXにおいて, texファイルをpdfファイル (など) に変換することを, **コンパイル**と呼びます.
その際に用いるソフト (今の場合, `ptex2pdf`) を**コンパイラ**と呼びます.

なお, VS Codeの拡張機能を用いると, ファイルを保存した際に自動でコンパイルすることができます.
これについては[環境構築](#付録-環境構築)のリンク先を参照してください.

また, コンパイラはいくつか種類があります.
日本語に対応したコンパイラについては次を参照してください:

 [日本語 LaTeX の新常識 2021](https://qiita.com/wtsnjp/items/76557b1598445a1fc9da)

## ファイルの内容

上の `test.tex` の内容を少し詳しく解説します.
また, 他のLaTeXに関する資料を読む際に必要なので, よく使われる用語も簡単に説明します.


### ■ `\`で始まる文字列 (コマンド)

上の `test.tex` には, バックスラッシュ `\` [^slash] で始まる文字列がたくさんあります. 
例えば, `\RequirePackage` や `\documentclass` のことです.
これらは**コマンド**[^command]と呼ばれ, LaTeXで特別な操作をしたり特殊な記号を入力したりするために使います.

[^slash]: Windowsでは円マーク￥のキーを押すことでバックスラッシュを入力できます.
[^command]: 制御綴, コントロールシーケンス, とも呼ばれます.


コマンドには, 引数を取るものと取らないものがあります. 引数は, 通常は `{}` で括って表示します.

- 例えば, 1行目の `\RequirePackage` は, `plautopatch` という文字列を引数に取るコマンドです (意味はわからなくて良いです).
- 一方, 13行目の `\maketitle` は引数を取らないコマンドです (それぞれタイトル等を表示するコマンドです).
- また, 2行目の `\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}` の `[]` の中身は**オプション**です. 無くても良い引数を表します.
 


### ■ 1行目

`test.tex` の1行目

```latex:test.tex
\RequirePackage{plautopatch}
```

は, 「おまじない」だと思って構いません. とりあえず毎回書いておきましょう.

詳細: [日本語 LaTeX の新常識 2021](https://qiita.com/wtsnjp/items/76557b1598445a1fc9da)

### ■ 2行目 (クラスファイル)

`test.tex` の2行目

```latex:test.tex
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
```

も, ほとんど「おまじない」なのですが, 少しだけ解説しておきます.

ここでは, **文書全体の構造 (論文なのか, 本なのか, など) を指定しています.**
`\documentclass` がその指定をするためのコマンドで, 引数 `jsarticle` が実際に使われる構造を意味します.
この文字列は, 実際には `jsaticle.cls` というファイルを参照しています[^class]. 
このファイルを**クラスファイル**と呼びます. クラスファイルが, 文書全体の構造を記述しています.
`jsarticle` の他に, `jsbook`, `jlreq` などのクラスファイルが日本語に対応しています.

[^class]: TeX Liveをインストールしたときに一緒にインストールされます. 大雑把に言って, 「日本語の論文」を意味するクラスファイルです.

`\documentclass` を使う際は, 多くの場合オプション (`[]`で囲うやつ) を付けます.
ここでは3つのオプション `uplatex,dvipdfmx,a4paper` がありますが, 最初の2つは「おまじない」と思ってください.
3つ目の `a4paper` というオプションは, 用紙サイズ (と余白) を指定しています.


#### :warning: 注意 :warning: `jarticle` に気をつけよ

クラスファイルとして, `jsarticle` ではなく `jarticle` を使っている資料が世の中にはたくさんあります (**`s`が無いことに注意**).
その資料は, **古い情報をもとに書かれている可能性が高い**です. 参考程度に留めたほうが良いかもしれません.[^jarticle]

[^jarticle]: とはいえ, 全てが間違えているというわけではありません. また, 残念なことに, 学会などでは, `jarticle` で書かれたテンプレートの利用を指定されることがあります.


### ■ 3行目～10行目 (プリアンブル)

`\documentclass[...]{...}` と `\begin{document}` (後述) の間の部分を**プリアンブル**と呼びます.
プリアンブルでは, 文書に関する細かな設定を, 必要に応じて記述します.
**プリアンブルに書いた内容は, 本文そのものには出力されません.**

`test.tex` 内では, 

```test.tex
\usepackage{amsmath}
\usepackage{amssymb}

\title{初めてのレポート}
\author{数学 太郎}
\date{2021年4月1日}
```

がプリアンブルの内容です. 

後半から先に説明すると, `\title` コマンドで文書のタイトルを指定しています. 
`\author` と `\date` はそれぞれ著者と日付を指定しています.
これらのコマンドは設定をしているだけで, 実際に出力しているのは13行目の `\maketitle` というコマンドです.


#### ◇ パッケージの利用

プリアンブルの内, 

```test.tex
\usepackage{amsmath}
\usepackage{amssymb}
```

の部分で, **パッケージ**[^package]と呼ばれるファイル (拡張子は`.sty`) を読み込んでいます.
**パッケージとは, コマンド集のようなもの**で, 読み込むことで, LaTeXの機能を拡張することができます.

[^package]: スタイルファイルとも呼ばれます.

`\usepackage` が読み込み用のコマンドで, 今の場合, `amsmath.sty` と `amssymb.sty` というファイルを読み込んでいます.
これにより, `\mathbb{C}` というコマンド ($\mathbb{C}$ を表示する) が利用可能になっています.[^amsmath]

**`amsmath.sty` と `amssymb.sty` は数式混じりの文書を書く際にはほぼ必須**ですので, 不必要でも読み込んでおくことを強くオススメします.

[^amsmath]: 実は `amsmath` を必要とするコマンドは `test.tex` にはありません.


### ■ 11行目以降 (本文)

**`\begin{document}` と `\end{document}` の間に本文を記述します.**
`\end{document}` の後ろに何かを書いても無視されます.

#### ◇ 環境

一般に, `\begin{...}` と `\end{...}` で囲まれた部分を**環境**と呼びます.
**環境の内部では, 外部と設定を変えることができます.**

例えば, `\begin{document}` と `\end{document}` の間は `document` 環境と呼ばれます.
この環境は, 本文を記述することを意味する環境です.

もう1つ, 16行目から19行目にあるのは `equation` 環境です. 
これは, 新たに数式だけの行を書く, という環境です.

#### ◇ タイトルの表示

すでに述べたように, 13行目の `\maketitle` でタイトル等を出力しています.

#### ◇ 行内の数式 (インライン数式)

15行目の `$e^z$` のように, **`$` で囲むことで行内に数式を出力することができます.**
このような数式を**インライン数式**と呼びます. 

#### ◇ 別行立て数式

16行目から19行目の **`equation` 環境は,** すでに述べたように, **新たに数式だけの行を書く**, という環境ですが, このような数式を**別行立て数式**と呼びます. 
数式を書くには, インライン数式と別行立て数式の2パターンがあります.

実は, `equation` 環境は1行しか数式を書けません. 複数行に渡る数式を書くには, 別の環境を用いる必要があります.


### ■ 用語のまとめ

以上で `test.tex` の説明を終わりますが, これまでに出てきた用語をまとめておきます.
本稿でも何度も使いますし, 他の解説サイト等でも当たり前のように使われますので, 覚えておいてください.

- **コマンド**: バックスラッシュ `\` で始まる文字列. 記号や命令を表す.
- **環境**: `\begin{...}` と `\end{...}` の間の部分. その中だけ設定を変えることができる.
- **クラスファイル**: `\documentclass` で読み込む, 文書全体の校正を決めるファイル. 
- **プリアンブル**: `\documentclass` と `\begin{document}` の間の部分. 文書全体の設定などを書く.
- **パッケージ**: `\usepackage` で読み込む, コマンド集のファイル.



## より複雑な文書を書く

前節では本当に最低限しか説明していませんので, 実際に論文等を書くためには, `test.tex` にある例だけでは足りません.
いくつか例を紹介するので, `test.tex` に追記してコンパイルしてみてください. 

<details><summary>長くなったので折りたたみます</summary><div>

### ■ 段落を変える

**空白行を入れると段落を変えることができます.** 
段落最初のインデントは自動的に行なってくれます.

```latex:document環境内部

寿限無、寿限無、五劫のすりきれ
海砂利水魚の水行末、雲来末、風来末
食う寝るところに住むところ
やぶら小路のぶら小路
パイポパイポ、パイポのシューリンガン

シューリンガンのクーリンダイ
クーリンダイのポンポコナーのポンポコピーの
長久命の長助
```

空白行はいくつ続いても結果に変化はありません.

```latex:document環境内部

1段落目

2段落目



3段落目: このようにたくさん空白行を書いても, 1つの空白行と同じ扱いになる
```


### ■ 章や節の見出しをつける

`\chapter` (章), `\section` (節), `\subsection` (小節) などの記号を用います.
これらを用いると, **節の番号が自動的に振られます.**
なお, `\chapter` を使う場合は, `jsarticle` ではなく `jsbook` を用います.

```latex:document環境内部

\maketitle

\section{はじめに}

なんかすごいことを書く

\subsection{小見出し}

細かく内容を分けるときに書く

\subsection{小見出しその2}

\section{次の節}

```


### ■ 箇条書きをする

`itemize` 環境, `enumerate` 環境, `description` 環境を用います.

```latex:document環境内部
\begin{enumerate}
    \item 勝手に
    \item 番号を
    \item ふる
\end{enumerate}

\begin{itemize}
    \item 今度は
    \item 番号は
    \item ふらない
\end{itemize}

\begin{description}
    \item[見だし] 今度は
    \item[見だし2] 見出しを
    \item[見だし3] 自分でつける
\end{description}
```


### ■ 別行立て数式を書く

`test.tex` では `equation` 環境を利用しましたが, 他に別行立て数式を記述する方法があります.
最も簡単な方法は, `\[ \]` で囲むことです. 

```latex:document環境内部
\[
    \sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}
\]
```

出力:

```math
\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}
```

`equation` 環境では数式番号が付きますが, `\[ \]` では番号が付きません.

**複数行に渡る数式を書く場合は, `align` 環境や `gather` 環境などを使います.**
どちらも, `\\` で数式を改行します.
`align` 環境の場合, `&` を用いることで数式の位置を揃えることができます.
`gather` 環境は, 複数の数式をすべて中央に揃えます.

```latex:document環境内部
\begin{align}
    e &= \sum_{n=0}^\infty \frac{1}{n!} \\
      &= \lim_{x \to 0} (1 + x)^{1/x}
\end{align}
```

出力: 

```math
\begin{align}
    e &= \sum_{n=0}^\infty \frac{1}{n!} \\
      &= \lim_{x \to 0} (1 + x)^{1/x} 
\end{align}
```

出力: 

```latex:document環境内部
\begin{gather}
    \sin^2 x + \cos^2 x = 1 \\
    \tan x = \frac{\sin x}{\cos x} \\
    \tan^2 x + 1 = \frac{1}{\cos^2 x}
\end{gather}
```


```math
\begin{gather}
    \sin^2 x + \cos^2 x = 1 \\
    \tan x = \frac{\sin x}{\cos x} \\
    \tan^2 x + 1 = \frac{1}{\cos^2 x}
\end{gather}
```

これらの環境も数式番号を自動的に振ります. 
**数式番号をつけたくない場合は, `align*` 環境や `gather*` 環境を用います.**

```latex:document環境内部
\begin{align*}
    e &= \sum_{n=0}^\infty \frac{1}{n!} \\ 
      &= \lim_{x \to 0} (1 + x)^{1/x}
\end{align*}
```

他にも数式の環境があります. 詳しくは[amsmathの数式環境まとめ](https://qiita.com/t_kemmochi/items/a4c390b4967b13f3afb7)を参照してください.

### ■ 数式の例

数式については説明するとキリがないので, いくつか例を挙げるにとどめます. 


#### ◇ 三角関数など

三角関数などは専用のコマンドを用います.

```latex:document環境内部
$\tan x = \sin x / \cos x$
$\exp(\log x) = x$
```

出力:

$\tan x = \sin x / \cos x$
$\exp(\log x) = x$


#### ◇ 分数や根号

分数や根号もコマンドがあります.

```latex:document環境内部
\[
    \sqrt{\frac{1}{16}} = \frac{1}{4}
\]
```

出力:

```math
\sqrt{\frac{1}{16}} = \frac{1}{4}
```


#### ◇ 添え字

添え字を書くには `^` (上付き) と `_` (下付き) を使います. **複数の文字を添え字にするには, `{ }` で囲います.**

```latex:document環境内部
$(2^2)^5 = 2^{10} = 1024$, $\lim_{n \to \infty} a_n = a$
```

出力: $(2^2)^5 = 2^{10} = 1024$, $\lim_{n \to \infty} a_n = a$

#### ◇ 行列

行列を出力するには, `pmatrix`, `bmatrix`, `vmatrix` などの環境を用います.
行列の要素を書く際は, `&` で区切り, `\\` で改行します. 
ドットを横, 斜め, 縦に並べる `\cdots`, `\ddots`, `\vdots` は重宝します.

```latex:document環境内部
\[
    \begin{pmatrix}
        1 & 2 \\
        3 & 4 \\
        5 & 6
    \end{pmatrix}
    \quad % 空白を開けるコマンド
    \begin{bmatrix}
        a_{11} & \cdots & a_{1n} \\
        \vdots & \ddots & \vdots \\
        a_{n1} & \cdots & a_{nn}
    \end{bmatrix}
    \quad 
    \begin{vmatrix}
        1 & 2 \\
        3 & 4
    \end{vmatrix}
\]
```

出力:

```math
    \begin{pmatrix}
        1 & 2 \\
        3 & 4 \\
        5 & 6
    \end{pmatrix}
    \quad % 空白を開けるコマンド
    \begin{bmatrix}
        a_{11} & \cdots & a_{1n} \\
        \vdots & \ddots & \vdots \\
        a_{n1} & \cdots & a_{nn}
    \end{bmatrix}
    \quad 
    \begin{vmatrix}
        1 & 2 \\
        3 & 4
    \end{vmatrix}
```

#### ◇ 数式内にテキスト

数式内にちょっとした文字列を入れたい場合は, `\text` コマンドを用います.

```latex:document環境内部
\[
    -\Delta u = f \quad \text{ in } \Omega
\]
```

```math
-\Delta u = f \quad \text{ in } \Omega
```

#### ◇ その他の記号

ここまでで紹介しきれなかった記号が数多くあります. 例えば以下のサイトを参考にしてください:

- [『pLaTeX2e チートシート』の jsclasses 対応版を作りました | ラング・ラグー](https://blog.wtsnjp.com/2017/12/31/platexcheat-jsclasses/)
- [LaTeX - コマンド一覧](http://www1.kiy.jp/~yoka/LaTeX/latex.html)
- [数式に出てくる文字・記号のLaTeXコマンド集 | 理系のための備忘録](https://science-log.com/%E6%95%B0%E5%AD%A6/%E6%95%B0%E5%BC%8F%E3%81%AB%E5%87%BA%E3%81%A6%E3%81%8F%E3%82%8B%E6%96%87%E5%AD%97%E3%83%BB%E8%A8%98%E5%8F%B7%E3%81%AElatex%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E9%9B%86/)
- [LaTeXコマンド集](http://www.latex-cmd.com/)
- [LaTeXコマンド一覧（リスト） - LaTeX入門](https://medemanabu.net/latex/latex-commands-list/)

### ■ 見逃しがちな数式のミス

エラーにならないけど正しく表示されない, という入力ミスが起こりえます.
いくつか例を挙げるので, 実際に入力してみて, どう出力されるかを見てください.

#### 1. ドル記号$ で囲わない

マイナス記号 `-` は数式モードでないとハイフンになってしまいますし, アルファベットはブロック体になってしまいます.

```latex:document環境内部
$y = \sin (\pi x)$ は x の関数である.
x に -1 を代入すると, 0 になる.
```


#### 2. バックスラッシュ `\` を書き忘れる

数式内部でアルファベットを並べると, 掛け算とみなされます.

```latex:document環境内部
$x = frac{pi}{6}$ならば, $sin x = frac{1}{2}$である.
```

#### 3. 添え字を中括弧 `{}` で囲わない

複数の文字列の添え字のときは注意が必要です.

```latex:document環境内部
$2^10 = 1024$ である.
$f$が滑らかならば, $f_{xy} = f_yx$ である.
```

### ■ 図の挿入

図を入れるには, まずプリアンブルに

```latex:プリアンブル
\usepackage{graphicx}
```

と入力します (**スペル注意**).
その上で, 図を入れたいところで `\includegraphics{ファイル名}` と入力します.
ただし, 図のファイルはtexファイルと同じフォルダにある必要があります.

例えば, 適当ば画像ファイル `fig.png` を用意して, これを挿入するとします.

```latex:document環境内部
あいう \includegraphics{fig.png} えお
```

すると, 文の中に図が入ります.
つまり, `\includegraphics` で出力される図は, 文字のように扱われます.

論文ではそのような図の配置は不適切ですので, 以下のように `figure` 環境を用います.

```latex:document環境内部
\begin{figure}
    \centering
    \includegraphics{fig.png}
    \caption{図の説明 (キャプション)}
\end{figure}
```

このようにすることで, 図だけが切り離され, 「図1. ○○」と表示されます.
なお, `\centering` は図を中央に寄せるコマンドです. これがないと, 図が左に寄ります.


また, `\includegraphics` や `figure` 環境は, 以下のようにオプションをつけることができます.

```latex:document環境内部
\begin{figure}[オプション]
    \centering
    \includegraphics[オプション]{fig.png}
    \caption{図の説明 (キャプション)}
\end{figure}
```

オプションによって図の大きさや表示位置を制御することができます.
詳しくは, 次のサイトなどを参照してください: [LaTeX 図の挿入](http://www.yamamo10.jp/~yamamoto/comp/latex/make_doc/insert_fig/index.php)


#### :warning: 注意 :warning: 古い情報

以下の情報は古いです:

- `\usepackage{graphics}` と書かれている (スペルが違う)
- `\usepackage[dvipdfm]{graphicx}`, `\usepackage[dvipdfmx]{graphicx}` などと書かれている (**オプションは不要**)
- `centering` ではなく `\begin{center}` が使われている (余計なスペースが入る)
- 「EPSファイルを使う」と書かれている (めちゃくちゃ古い)

これらが古いという理由を知りたい場合, 以下を参照してください.

- [日本語 LaTeX の新常識 2021](https://qiita.com/wtsnjp/items/76557b1598445a1fc9da)
- [日本人のための LaTeX タブー集 ～画像読込編～ - Qiita](https://qiita.com/zr_tex8r/items/5413a29d5276acac3771)


### ■ 表の挿入

表を挿入するには `\tabular` 環境を用います.
入力の要領は行列と同様です.

```latex:document環境内部
\begin{tabular}{c|rl|}
    表          & の     & テスト. \\
    大きさは    & 自動で  & 決まる. \\\hline
    \& の位置を & 揃えると& 見やすい.
\end{tabular}
```

`\begin{tabular}` の直後に書かれている `{c|rl|}` は, 列の個数, 各列内でのテキストの表示位置, 縦線の位置, を表しています. 
`c`, `l`, `r` は表示位置を表していて, それぞれ以下の意味を持ちます.

| 引数 | 意味 |
|:---:|:---:|
| `c` | 中央に揃えて出力 |
| `l` | 左に揃えて出力 |
| `r` | 右に揃えて出力 |

これらの文字を, 表示する列の個数だけ記入します.
また, `{c|rl|}` の中の縦線 `|` で表の縦線の位置を表しています.
横線を引くには `\hline` コマンドを用います.

図と同様に, 表も1つの文字のように扱われます.
独立して表示するためには, `table` 環境を用います.
使い方は `figure` 環境と同様です.


```latex:document環境内部
\begin{table}[htb]
    \centering
    \begin{tabular}{|c|c|}\hline
        表 & は \\\hline
        文 & 字 \\\hline
    \end{tabular}
    \caption{表のキャプション}
\end{table}
````

より詳細な記述については, 例えば次を参考にしてください: [LaTeX 表の書き方](http://www.yamamo10.jp/~yamamoto/comp/latex/make_doc/table/table.php)

</div></details>


### ■ 更に複雑な文書を書くために

上に挙げたものは一例に過ぎないので, 以下のリンク先の内容を参考にして, いろいろと試すと良いと思います.

- [amsmathの数式環境まとめ - Qiita](https://qiita.com/t_kemmochi/items/a4c390b4967b13f3afb7)
- [LaTeXにおける正しい論文の書き方 - Qiita](https://qiita.com/birdwatcher/items/5ec42b35d84d3ee2ffbb)
- [LaTeX入門 - 数式コマンドリファレンス](https://medemanabu.net/latex/)
- [LaTeX](http://www.yamamo10.jp/~yamamoto/comp/latex/index.html)



## よくあるエラーメッセージ

一発でコンパイルがうまくいくことはほとんどないと思います.
普通は何かしらミスがあって, エラーメッセージが出ます.
よくあるエラーメッセージをまとめておくので, エラーが出た際には参考にしてください.

より詳細な内容は次を参考にしてください: [LaTeX のエラーメッセージ - TeX Wiki](https://texwiki.texjp.org/?LaTeX%20%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8)


### ■ Undefined control sequence (コマンドのミス)

以下の例の4行目のように, 本来 `\sin x` と書くべきところを, スペースを入れずに `\sinx` と書いてしまうと, **Undefined control sequence** というエラーが出て止まってしまいます.

```latex:コマンドのミス
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\begin{document}
    正弦関数$y = \sinx$
\end{document}
```

```shell 
! Undefined control sequence.
l.4     正弦関数$y = \sinx
                              $
?
```

エラーメッセージの `l.4` は4行目を意味します. 
その後がミスをしているコマンドを表しています.

"Undefiened control sequence"とは, 「**そのようなコマンドは定義されていない**」という意味のエラーメッセージです.
今の場合, スペースが無いと, LaTeX は `\sinx` というコマンドが入力されたと認識します. 
しかし, そのようなコマンドは定義されていないので, エラーとなってしまいます.

このエラーメッセージが出たら, 以下のミスをしている可能性が高いので, それらを疑ってソースを見直すと良いです.

- スペルミスをしている
- コマンドの後の半角スペースを忘れている
- そのコマンドを使うために必要なパッケージを読み込んでいない

### ■ Environment *** undefined (環境名のミス)

以下の例の4行目のように, 本来 `equation` と書くべきところを `equatiom` と書いてしまうと, **Environment equatiom undefined** というエラーが出て止まってしまいます.

```latex:環境のミス
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\begin{document}
    \begin{equatiom}
        e^x = \sum_{n=0}^\infty \frac{x^n}{n!}
    \end{equatiom}
\end{document}
```

```shell
! LaTeX Error: Environment equatiom undefined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.4     \begin{equatiom}

?
```

このエラーは, **Undefined control sequence** の環境版です. 
解決策も前節とほとんど同様です.


### ■ File `***' not found (ファイルがない)

次のように図を取り込もうとしたとします:

```latex:図が存在しない場合
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{graphicx}
\begin{document}
    \includegraphics{fig.png}
\end{document}
```

上にはスペルミスがありませんが, 以下のようなエラーが発生する場合があります:

```shell
LaTeX Warning: File `fig.png' not found on input line 5.


extractbb:warning: Can't find file (fig.png), or it is forbidden to read ...skipping


! LaTeX Error: Cannot determine size of graphic in fig.xbb (no BoundingBox).

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.5     \includegraphics{fig.png}

?
```

このエラーは, **図のファイルが.tex ファイルと同じフォルダにないときに起こるエラー**です.
先に述べたように, 図のファイルは.tex ファイルと同じフォルダに置かなければならなりません. 
もしこのエラーに遭遇したら, 図ファイルの保存先か, ファイル名にミスがないかを確認すると良いでしょう.


### ■ Missing $ inserted (数式モードじゃない)

次の例のように, 添え字などの数式モードでしか使えないコマンドを `$` で囲まなかった場合, **Missing $ inserted** というエラーになります.

```latex:数式モードのミス
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{graphicx}
\begin{document}
    指数関数 y=e^x
\end{document}
```

```shell
! Missing $ inserted.
<inserted text>
                $
l.5     指数関数 y=e^
                         x
?
```

このエラーに遭遇した場合は, 数式モードにし忘れていないかを確認すると良いです.


### ■ File ended while scanning use of *** など (カッコの対応が正しくない)

次の例のように中括弧 `{ }` の対応が正しくない (`\frac` の中括弧が足りない) 場合, **File ended while scanning use of \frac** というエラーになります.

```latex:カッコの対応のミス
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{amsmath}
\begin{document}
    \[
        x = \frac{-b \pm \sqrt{b^2-4ac}{2a} 
    \]
\end{document}
```

```shell
Runaway argument?
{-b \pm \sqrt {b^2-4ac}{2a} \] \end {document} 
! File ended while scanning use of \frac .
<inserted text>
                \par
<*> doc.tex

?
```

この場合は括弧の対応を見直すと良いです. 
この例の分数と根号のように, コマンドを入れ子にした場合に起きやすいエラーです.

似たようなエラーメッセージとしては, **Too many }'s** や, **Extra }, or forgotten ○○** といったものがあります.


### ■ \begin{xxx} on input line yy ended by \end{xxx} (環境の開始と終了が正しくない)

次の例のように, 環境を始める\begin{itemize} はあるが, 終了コマンド\end{itemize} は無い, という状態でコンパイルすると, **\begin{itemize} on input line 4 ended by \end{document}** というエラーになります.

```latex:環境の閉じ忘れ
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\begin{document}
    \begin{itemize}
        \item 箇条書き
\end{document}
```

```shell
! LaTeX Error: \begin{itemize} on input line 4 ended by \end{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.6 \end{document}

?
```

この場合は, `\begin` と `\end` の対応が正しくなるように修正すれば良いです.


## タブー集

LaTeXはここ5年くらいの間に大きな更新を繰り返しています. 
そのため, すでにいくつか述べましたが, **以前は標準的であったノウハウが今は古く非推奨である**ということが多くあります.

ネットの情報を正しく利用するためには, 何が推奨で, 何が非推奨なのか, を知っておく必要があります.
そのため, 以下のリンクにかかれていることは, 初心者でも知っておいて損はありません.

- [使ってはいけない LaTeX のコマンド・パッケージ・作法 - Ichiro Maruta Homepage](https://ichiro-maruta.blogspot.com/2013/03/latex.html)
- [日本人のための LaTeX タブー集 ～画像読込編～ - Qiita](https://qiita.com/zr_tex8r/items/5413a29d5276acac3771)
- [LaTeX の「アレなデフォルト」 傾向と対策](https://qiita.com/zr_tex8r/items/297154ca924749e62471)
- [日本語 LaTeX の新常識 2021](https://qiita.com/wtsnjp/items/76557b1598445a1fc9da)


## 雑多な話題

「最低限」というほどの内容ではないけど, 知っておいたほうが良さそうな細かい話題を集めました.


### ■ 引用符の入力

**LaTeXでは引用符を入力する際に `'` や `"` で囲んではいけません.**
代わりに, 以下のように入力します.

- 一重引用符: `` ` `` (**バッククオート**) と ` ' ` (一重引用符) で挟む
- 二重引用符: ``` `` ``` (バッククオート2個) と ` '' ` (**一重引用符2個**) で挟む


実際に比べてみるとよくわかります.

```latex:document環境内部
`Correct quotation'

'Wrong quotation'

``Correct quotation''

"Wrong quotation"
```



### ■ コメントアウトする

LaTeXでは他のプログラミング言語のように, コメントを書くことができます.
コメントを書くためには, `%` を記入します. **`%` から改行までの間の内容は, pdfファイルには反映されません.**

```latex:document環境内部
これはpdfに現れる  % この部分は見えない
% この部分も見えない
ここは見える
```

何かしらのメモを残すときや, 一旦書いた部分を消しておくために利用できます.
なお, VS Codeでは, 行を選択した後, `Ctrl` + `/` でまとめてコメントアウトできます.



### ■ 入力できない記号とできる記号

以下に挙げる記号は, LaTeX の特殊な用途のために使われるので, キーボードの記号をそのまま入力しても, pdfファイルには反映されません.
どうしても文章中に出したいときは, 右端のコマンドを用います.

| 記号 | 意味 | コマンド |
|:----|:----|:----|
| `\` | LaTeX のコマンドの始まり | `\textbackslash` |
| `{ }` | グループを作る記号 | `\{ \}` | 
| `$` | 数式モードのはじめと終わり | `\$` |
| `&` | タブ文字 | `\&` |
| `#` | マクロの引数 | `\#` |
| `^` | 上付き添え字の作成 | `\^` |
| `_` | 下付き添え字の作成 | `\_` |

一方で, ``. , : ; ! ? ( ) [ ] ` ' - + * / @`` はそのまま入力できます. 



### ■ 空白の取り扱い

LaTeXでの (半角の) 空白の扱いは少し特殊で,

- 行頭の空白はいくつあっても無視される
- 空白を複数並べても, 1つ分の空白しか入らない
- 数式内では, 空白は無視される

ということになっています. 
実際, `text.tex` にインデントがありますが, それは無視されています.

以下の例を自分で入力して結果を確かめてください. 

```latex:document環境内部
    ここから書いても

ここから書いても中身は同じ

内部の空白は 1つでも  2つでも   同じ

数式内では
$y =           \sin      x$
と書いても普通に表示される
```


### ■ 改行の取り扱い

改行も少し特殊で,

- プリアンブル内では, いくら改行しても無視される
- 本文内の空白行 (連続した改行) は, 段落を改める
- 本文内の単独の改行は,
    - 英語の場合, 空白として扱われる
    - 日本語の場合, 無視される

となっています. 例を見ましょう.

```latex:document環境内部
寿限無寿限無
五劫の擦り切れ % 出力結果にスペースは入らない

The quick brown fox
jumps over the lazy dog % 出力結果にスペースが入る
```

## 終わりに

最低限と言いつつ, 割と長くなってしまいました.
本当に最低限の部分は, 「[とりあえず書いてみる](#とりあえず書いてみる)」の部分ですので, まずはここからやってみてください.

## 付録: 環境構築

### ■ LaTeXのインストール

[TeX Live](https://tug.org/texlive/)をダウンロードして, インストールします.
例えばWindowsの場合, [DLページ](https://tug.org/texlive/acquire-netinstall.html)の `install-tl-windows.exe` をDLして実行すると, インストールされます. 
**1時間以上の時間がかかる場合があります.**


### ■ Visual Studio Code のインストール

[Visual Studio Code](https://code.visualstudio.com/) (VS Code) は Microsoft 製の汎用エディタです.
拡張機能を用いることで色々とカスタマイズできる便利なエディタです.

まず, 上記リンクからDLしてインストールしますが, インストール時に, 以下の図の「その他」の内容は全部チェックを入れておいたほうが良い, と個人的には思います.

![fig-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111178/978866c3-8bd1-b182-6f63-5836de07a3c2.png)

VS Codeの一般的な使い方は, 適当に「VS Code 使い方」とかでググると良いと思います.

LaTeX用の設定方法について別の記事を書きましたので, 参考にしてください:

https://qiita.com/t_kemmochi/items/dd38bbf2b823c770d1ec