TeX入門 基本事項とエラーを自己解決できるようになるまで

## 目標

```text:目標
* TeX の基本的な使い方を理解
* わからないことを自分で解決できるようになること
```

これを目標にして行きたいと思います. 

$\TeX$を使う動機は[私の記事](https://qiita.com/kkml_4220/items/503b1f5d3ec544181ba4)をご覧ください.

ここでは目標で明記したように,基本的な使い方と,エラーなどの自己解決方法を紹介したいと思います.
しかし,1から10まで記事にすることは不可能なのでわからなかったら自分で調べる努力もしていただければと思います.

## 環境

+ Mac
+ texlive2020

> WindowsとUbuntuでの組み合わせでも可能です！

とりあえず,次のような`version`情報が出力される環境を仮定します！
Windowsの方はUbuntu上でMacの方はターミナル（以下,Ubuntuを含めターミナルと略します.）で次のように入力します.

```bash
$ platex -version
```

すると次のように出力されている状況です.
![スクリーンショット 2021-06-19 14.54.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262857/abacec6c-82a5-3c03-49d4-186a94c3a404.png)

これがまだできていない方は`Windows`ユーザ向けではありますが次の記事をご覧ください.

https://qiita.com/kkml_4220/items/2bac5b83395d75619a0f


# 文章作成の基本

## おまじない

一番初歩的ですが,$\TeX$の拡張子は基本的に`.tex`です.そこで,一番初めに簡単な文章を作成してみましょう.

```tex:main.tex
\documentclass[]{jsarticle}

\begin{document}
Hello \TeX

数学でもっとも美しい数式の一つである\textbf{オイラーの公式}を紹介します.

\[ e^{i \theta} = \cos \theta  + i \sin \theta \]
\end{document}

```

ここで,なんとなくわかることとしては,なんだか`\`から始まるキーワードに意味がありそうだなと予想できます.

ここで,覚えて欲しいことは次の部分がおまじないということです.

とりあえず,この意味が知りたい方は自分で調べてみましょう.まずはこのおまじない（テンプレートのようなもの）があると理解していただければと思います.

```tex:template.tex
\documentclass[]{jsarticle}

\begin{document} 

\end{document}
```

この段階ではこの文章を打ち込んだorコピペしただけだと思うので,実際にコンパイルしてみましょう.

## コンパイル方法


最後に簡単にコンパイルする方法を紹介しますが**まずは原始的な方法で！**

`$`から始まる行を順番にターミナルで実行します.

```bash:compile
$ ls # カレントディレクトリにmain.texが存在するか確認
main.tex

$ platex main.tex # .tex -> .dviを作成
$ dvipdfmx main.dvi # .dvi -> .pdfを作成
```

順番に実行すると,うまくいけば次ように出力されるはずです.
![スクリーンショット 2021-06-19 15.10.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262857/55a24665-3f34-8a49-90b7-3b5ff3af8cc2.png)

とりあえず,これで簡単に文章を作成することができました.

カレントディレクトリを見ると`main.pdf`ができていることがわかります.
![スクリーンショット 2021-06-19 15.15.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262857/65332525-b816-d6d0-9f50-96d0245ca566.png)

### うまくいかない場合

次の要因を順番に検証してみてください.それでもダメなら,大人しく`Overleaf`を使いましょう.

1. `platex -version`ができているか確認しましょう
1. カレントディレクトリに`main.tex`が存在しているか確認しましょう
1. `main.tex`をコピペし直してコンパイルしてみましょう


## 基本的なところ

+ コメントアウト

> 基本的に単一行でのコメントだけで`%`を使います.もちろん,ブロックコメントのようなことも可能ですので自分で調べてみてください.

+ 命令環境

> hogeはなんでもいいとして \begin{hoge} \end{hoge}で囲まれた部分を(hoge)環境と言います.\begin{}と\end{}はセットなのでどちらかがかけてしまったらエラーになってしまう.

```tex
\begin{hoge}
 %  この行はコメントです
 % ここは\begin{hoge}と\end{hoge}で囲まれているのでhoge環境です
\end{hoge}
```

+ プリアンブル

> \documentclassと\begin{document}で挟まれた部分のこと.パッケージの追加を宣言する時に使ったりすすので結構な頻出単語.

```tex
\documentclass[]{jsarticle}

% ここがプリアンブル

\begin{document} 
% 本文はここに書く
\end{document}
```

+ パッケージの利用

> 使用するパッケージはプリアンブルに記述します.
例えば、amsmathパッケージを使うこと宣言する場合は次のようになります.

```tex
\documentclass[]{jsarticle}
\usepackage{amsmath} % これが宣言部

\begin{document} 
\begin{align}
    y = \sin x
\end{align}
\end{document}
```

パッケージについて詳しく知りたい方は自分で調べてみてください.奥が深すぎて全てを語ることはできません.

+ インライン要素

> 改行を伴わない要素
例えば,`\( \)`の中身に記述したりする.

+ ブロック要素

> 改行と伴う要素
例えば,`\[ \]`の中に記述したりする.ブロック要素で数式を書いた場合は基本的に中央寄せされる.オイラーの公式も中央寄せされていた.

## 簡単な命令

例えば,冒頭でオイラーの公式を$\TeX$を使って表示させてみましたが,その際に上添字を`e^{i \theta}`とかギリシャ文字の$\theta$を`\theta`とかで表現していました.

初学者の方はこれを**全部覚えなければいけないのか?**と動揺するかもしれませんが,とてもじゃないけどこんな**無数にあるものを全部覚えられません**なので安心してください.`Google先生`がなんでも教えてくれます.

実際にお使いのブラウザで調べてみましょう.
> 「tex ギリシャ文字」 で検索

絶対に出てきます.
では$\alpha$はどういう命令でしょうか?では、$\varepsilon$ は? $\epsilon$ではありませんよ.

もちろんQiitaのこの記事をマークダウン表示されたらわかることですが（笑）
ここで大切なことは,**実現したいことを直感的に検索すれば大体のことはわかる**ということです.なので,周りのできる人に聞くのもいいですがお願いですので自分で調べてからにしてください.

# エラーが出たら

実際に出力されるエラーを元にそれらを回避する方法を紹介します.

次のファイルをコンパイルしようとするとエラーになります.

```tex:error.tex

\documentclass[]{jsarticle}

\begin{document}
Hello \TeX

数学でもっとも美しい数式の一つである\textbf{オイラーの公式}を紹介します.

\begin{align} 
	e^{i \theta} = \cos \theta  + i \sin \theta
\end{align}
\end{document}

```

ターミナルには次のような出力があります.

一部編集しわかりやすくしていますので,若干違いますが...

```text
platex error.tex  # ファイルをコンパイルしようとした.

This is e-pTeX, Version 3.14159265-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2020) (preloaded format=platex)
 restricted \write18 enabled.
entering extended mode
(./error.tex
pLaTeX2e <2020-02-02>+3 (based on LaTeX2e <2020-02-02> patch level 5)
L3 programming layer <2020-03-06>
(/usr/local/texlive/2020/texmf-dist/tex/platex/jsclasses/jsarticle.cls
Document Class: jsarticle 2020/02/02 jsclasses (okumura, texjporg)
(/usr/local/texlive/2020/texmf-dist/tex/platex/jsclasses/jslogo.sty))
(/usr/local/texlive/2020/texmf-dist/tex/latex/l3backend/l3backend-dvips.def)
No file error.aux.


! LaTeX Error: Environment align undefined. 　　 # ここ！！！！！！！！！！！
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.8 \begin{align}　　　　　　　　　　　　　　　　　　　　　　# この行も重要！！！！！！！！！！！！！！！！！！！！！！！
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                 
? 

```

ここで重要なことは,**エラー内容ではなくなんのエラーなのかということ**です.

## エラーの判別方法

エラーの判別方法はズバリ`! ~`の行を見れば明らかです！そしてこのエラーを解決することができれば,目の前のエラーを回避することができます.

### エラーの検索方法

`! `から始まる行をそのまま`Google`に貼り付けましょう.そして英語がわかる方が大体の意味がわかるでしょう！

> 「! LaTeX Error: Environment align undefined.」 で検索

ここでは簡単に,エラーの内容は,l.8(8行目のこと)で「align」という環境が使われてるけどそんなん定義されていないぜ！って$\TeX$に怒られています.

ググればこのエラーの回避方法が**packegeの宣言**が不足しているという結論に至るでしょう.（もちろん、タイプミスもあれば実在しない場合も考えられるが...）

なので,次のように必要なパッケージを宣言しました.

```tex:good.tex
\documentclass[]{jsarticle}

\usepackage{amsmath} % これを追加したよ！

\begin{document}
Hello \TeX

数学でもっとも美しい数式の一つである\textbf{オイラーの公式}を紹介します.

\begin{align} 
	e^{i \theta} = \cos \theta  + i \sin \theta
\end{align}
\end{document}
```

これはコンパイルが通りますので

```bash
$ ls # good.texの存在を確認
good.tex
$ platex good.tex
$ dvipdfmx good.dvi
```

でコンパイルできることを確認してください.

ここまで実際にエラーを回避する方法を紹介してきました.慣れてくればエラーを出さずにできるかもしれませんが最初はエラーだらけだと思いますが一つ一つ解決することができれば大丈夫です.

# コンパイルが面倒な方へ

コンパイルって非常に面倒ではありませんか?
これが面倒で$\TeX$を使いたくないという人も多いはず.そこで`Makefile`を紹介します.

構造自体はわからなくても大丈夫ですので気になったら自分でググりましょう.

ちなみに,**2行目3行目の最初のインデントはtab**です.

```makefile:Makefile
main.pdf: main.tex
	platex main.tex
	dvipdfmx main.dvi
```

この`Makefile`の内容を`main.tex`と同じディレクトリに保存します.

```bash
$ ls 
Makefile main.tex
$ make $ これだけでコンパイルできる
```

このようにしてコンパイルする方法もあります.

ちなみに、私は`VSCode`を使っていて,この`make`すらしません.保存するだけで自動的にコンパイルできるようにしてあります.
このやり方も慣れてきたら自分でググりましょう！

# 終わりに

肝心なところで「自分で調べよう」と書かれてとてもお怒りなのもわかりますが,本質的にググる能力がなければできるようにはならないと思います.
ですので実現したいことをググったり、エラーをググったりすることで検索能力も身につけていただければと思います.

最後までご覧いただき本当にありがとうございあました。