【LaTeX】理系大学生のためのLaTeXセットアップ(WSL2 + VSCode)

<!-- title: 【LaTeX】理系大学生のためのLaTeXセットアップ -->
<!-- category: LaTeX -->

レポートを頻繁に書く理系大学生の中には、**Wordによる文書作成で体裁の調整に苦労**した経験を持つ人も多いのではないでしょうか。しかし、LaTeXの利用を考えると敷居が高く感じるかもしれません。この記事では、LaTeXを導入するための基本的なステップを解説します。めんどくささから開放されたいのに、LaTeXの導入につまづいている人、そんな人のためのガイドとして、この記事が役立つことを願っています。

私自身、Latexを導入して以降、**レポート作成の効率が格段に上がり、よりレポートの内容に集中できるように**なりました。多少の手間はかかりますが、LaTeXの導入は大きなメリットがあります。それでははじめましょう！

# 実行環境
<!-- - Windows 11 Home (version: 22H2, build: 22621.1992) -->
- Windows 11 Home
    - バージョン: 22H2
    - ビルド: 22621.1992
- WSL2
    - Ubuntu 20.04 LTS
- Visual Studio Code

WSL2の導入方法については、以下の記事を参照してください。

https://dev.classmethod.jp/articles/how-to-setup-wsl2-for-windows11/

筆者はAIによるコード補完ツールである[`Github Copilot`](https://copilot.github.com/)を利用しています。学生の方は学生証による認証を行うことで、無料で利用できます。詳しくは以下の記事を参照してください。

https://qiita.com/SNQ-2001/items/796dc5e794ac3f57a945

# 登場人物
- ケン： LaTeX初心者。物理学を専攻しており、Wordでレポートを書く際の体裁に不満を持っている。
- リサ： LaTeX経験者。ケンの先輩で、数学専攻。高度な数式の処理やレポート作成の経験が豊富で、LaTeXの実用的な使い方をケンに教える。



# LaTeXの導入

## LaTeXとは

ケン「ねえリサ、最近大学のレポートをWordで書いてたんだけど、、」

リサ「うん、どしたの？」

ケン「体裁の調整が面倒くさいんだよね」

リサ「そうだよね、Wordは体裁を調整するのに時間がかかるよね」

ケン「そうなんだよね、でも、LaTeXっていうのがあるらしいんだよ」

リサ「あー、LaTeXね、数学科ではよく使うよ」
リサ「LaTeXは、**数式を含む文書を作成するためのソフトウェア**だよ」

ケン「設定とか難しそうだから、敬遠してたんだけど、使い方教えてくれない？」

リサ「いいよ～、使い方は簡単だから、一緒に設定していこうか」

ケン「ありがとう！」

## LaTeXのインストール

リサ「私はWSL2でLaTeXを使ってるんだけど、ケンはどうする？」

ケン「WSL2ってなに？」

リサ「Windows上でLinuxを動かすことができるようになる機能だよ」

ケン「なるほど、とりあえずそれでやってみるか」

> ここからはWSL2の環境が構築されていることを前提として進めていきます。
> WSL2の導入方法については、以下の記事を参照してください。
> https://dev.classmethod.jp/articles/how-to-setup-wsl2-for-windows11/

リサ「じゃあ、LaTeXのインストールを始めるよ」
リサ「[Tex Wiki](https://texwiki.texjp.org/?Linux)を参考にやっていくね」

```bash
wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar xvf install-tl-unx.tar.gz
```

ケン「これでLaTeXがインストールできたの？」

リサ「いや、これはインストーラーのダウンロードだよ」

ケン「そうなんだ、じゃあこれを実行すればいいの？」

リサ「そう！じゃあやってみて👍」

```bash
cd install-tl-2*
sudo ./install-tl -no-gui -repository http://mirror.ctan.org/systems/texlive/tlnet/
```

ケン「わ、なにこれ、なんか出てきた」

```bash
> [sudo] password for ken:
```

リサ「これはパスワードを入力するところだよ」

ケン「パスワード？」

リサ「WSL2のパスワードだよ」
リサ「入力しても文字が表示されないけど、入力して`Enter`を押してみて」

ケン「わかった！」


ケン「またなにか出てきたけど、これは何かを選べばいいの？」

```bash
> ...
> Actions:
>  <I> start installation to hard disk
>  <P> save installation profile to 'texlive.profile' and exit
>  <Q> quit
> Enter command: 
```

リサ「これはインストーラーが何をすればいいか聞いてるんだよ」

ケン「じゃぁ、インストールを始めるから`<I>`だね」
ケン「でも、どうやって選ぶの？」

リサ「キーボードで`I`を押して`Enter`を押せばいいよ」

ケン「わかった！」

```bash
> Enter command: I
> Installing to: /usr/local/texlive/2023
> Installing [1/4, time/total: ??:??/??:??]: hyphen-base [22k]
> Installing [2/4, time/total: 00:00/00:00]: kpathsea [1048k]
> Installing [3/4, time/total: 00:00/00:00]: texlive-scripts [530k]
> Installing [4/4, time/total: 00:00/00:00]: texlive.infra [547k]
> Time used for installing the packages: 00:00
> Installing [0001/4561, time/total: ??:??/??:??]: 12many [376k]
> Installing [0002/4561, time/total: 00:01/02:58:04]: 2up [56k]
> Installing [0003/4561, time/total: 00:01/02:35:10]: a0poster [119k]
> ...
```

ケン「お、なんか始まったぞ」
ケン「え、ちょっと待って、`0001/4561`ってなんだよ」

リサ「これはインストールするパッケージの数だよ」

ケン「4561個もあるの？」

リサ「そうだよ、あとで追加でインストールするのだるいでしょ」
リサ「だから、最初から全部入れておくよ👍」

ケン「そうだったのか、たしかにめんどくさいね」
ケン「でも、これ結構時間かかりそうだな」

リサ「そうだね、`00:01/02:35:10`って書いてあるから、2時間はかかりそうだね」

ケン「そうなんだ、だいぶ暇だね」

リサ「そうだね、暇だから、VSCode側の設定をしていこうか」

> まじで2時間くらいかかるので、暇なときにやってください。
> ケンとリサのように、この時間でVSCodeの設定をしていくとちょうどよいと思います。

## VSCodeの設定

### ターミナルからVSCodeを開く

ケン「VSCodeの設定ってなにするの？」

リサ「VSCodeでLaTeXを書くための拡張機能を入れるよ」

ケン「拡張機能ってなに？」

リサ「VSCodeに外部の機能を追加するための機能だよ」
リサ「LaTeXを編集しやすいように、VSCodeにLaTeXの機能を追加するんだ」

ケン「なるほど、じゃあやってみるか」

リサ「じゃあ、ターミナルからVSCodeを起動してみようか」

ケン「でも今、ターミナルでLaTeXのインストールしてるんだけど」

リサ「そしたら、新しいウィンドウでターミナルを開いてみようか」

ケン「新しいウィンドウ？」

リサ「さっきと同じようにターミナルを開くだけでいいよ」

ケン「わかった！」

リサ「そしたら作業ディレクトリを作って、VSCodeを起動してみようか」

> ※すでにWSL2でVSCodeを起動している場合はこの操作は不要です。

```bash
mkdir ~/workspace # 作業ディレクトリを作成
code ~/workspace # VSCodeを起動
```

ケン「`code`コマンドで起動できるんだ！」

> ※初回起動時は以下のようにVSCode Serverのインストールが始まります。

```bash
> Installing VS Code Server for x64 (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
> Downloading: 55%
> ...
```

リサ「VSCodeのインストールが始まったね」

ケン「お、VCCodeが起動した」

リサ「じゃあ、拡張機能をインストールしていこうか」

### 拡張機能のインストール

リサ「このURLを開いて、`LaTeX Workshop`をインストールしてみて」

https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop

ケン「わかった！」
ケン「ブラウザで開いたら、`Install`を押せばいいのね」

リサ「そうだよ、押してみて」

ケン「お、VSCodeが自動で開いて、インストールが始まった」

リサ「そうだね、インストールが終わったら、VSCodeを再起動してみて」

ケン「おっけー！」

リサ「次は、VSCodeの編集機能の設定をしていこうか」

### VSCodeの編集機能の設定(`settings.json`)

リサ「VSCodeの編集機能の設定は、`settings.json`っていうファイルに書くんだ」

ケン「`settings.json`ってどこにあるの？」

リサ「今回は作業ディレクトリの中に作るよ」

ケン「作業ディレクトリって、`~/workspace`のこと？」

リサ「こんなかんじで`.vscode`っていうディレクトリを作って、」
リサ「その中に`settings.json`っていうファイルを作るんだ」

```bash
~/workspace
└── .vscode
    └── settings.json
```

ケン「なるほど、」
ケン「よしできた！」

リサ「そしたら`settings.json`を開いて設定していこうか」

ケン「どうやって設定するの？」

リサ「これをコピペすればいいよ」

ケン「なるほど、これをコピペすればいいのね」

リサ「私が使い始めたときに、いろいろ調べて設定したものだよ」
リサ「あんまわかんないところもあると思うけど、意外と気が利く設定だと思う！」

> ※`settings.json`は一部、以下の記事を参考にしています。
> https://qiita.com/rainbartown/items/d7718f12d71e688f3573
> なお、ビルドに関する設定は私の方で変更したものを記載しています。

```settings.json
{
    // 言語それぞれの設定
    "[tex]": {
        "editor.suggest.snippetsPreventQuickSuggestions": false,
        "editor.formatOnSave": false
    },
    "[latex]": {
        "editor.wordWrap": "on",
        "editor.wordSeparators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?。．、，（）「」『』［］｛｝《》てにをはがのともへでや ",
        "editor.tabSize": 2,
        "editor.insertSpaces": true,
        "editor.detectIndentation": false,
        "editor.suggestSelection": "recentlyUsedByPrefix",
        "editor.suggest.snippetsPreventQuickSuggestions": false,
        "editor.quickSuggestions": {
            "other": true,
            "comments": false,
            "strings": false
        },
        "editor.bracketPairColorization.enabled": true,
        "editor.unicodeHighlight.invisibleCharacters": true,
        "editor.unicodeHighlight.allowedCharacters": {
            "，": true,
            "．": true,
            "！": true,
            "？": true,
            "［": true,
            "］": true,
            "｛": true,
            "｝": true,
            "＜": true,
            "＞": true,
        },
        "editor.stickyScroll.enabled": true,
    },
    // 使用パッケージのコマンドや環境の補完を有効にする
    "latex-workshop.intellisense.package.enabled": true,
    // 生成ファイルを削除するときに対象とするファイル
    "latex-workshop.latex.clean.fileTypes": [
        "*.aux",
        "*.bbl",
        "*.blg",
        "*.idx",
        "*.ind",
        "*.lof",
        "*.lot",
        "*.out",
        "*.toc",
        "*.acn",
        "*.acr",
        "*.alg",
        "*.glg",
        "*.glo",
        "*.gls",
        "*.ist",
        "*.fls",
        "*.log",
        "*.fdb_latexmk",
        "*.snm",
        "*.nav",
        "*.dvi",
        "*.synctex.gz"
    ],
    // 生成ファイルを"out"ディレクトリに吐き出す
    "latex-workshop.latex.outDir": "out",
    // ビルドのレシピ
    "latex-workshop.latex.recipes": [
        {
            "name": "latexmk-uplatex",
            "tools": [
                "latexmk-uplatex"
            ]
        }
    ],
    // ビルドのツール(latexmk-uplatexを使用)
    "latex-workshop.latex.tools": [
        {
            "name": "latexmk-uplatex",
            "command": "latexmk",
            "args": [
                "-e",
                "$latex=q/uplatex %O -synctex=1 -interaction=nonstopmode -file-line-error %S/",
                "-e",
                "$bibtex=q/upbibtex %O %B/",
                "-e",
                "$biber=q/biber %O --bblencoding=utf8 -u -U --output_safechars %B/",
                "-e",
                "$makeindex=q/upmendex %O -o %D %S/",
                "-e",
                "$dvipdf=q/dvipdfmx %O -o %D %S/",
                "-f",
                "-norc",
                "-gg",
                "-pdfdvi",
                "-outdir=%OUTDIR%",
                "%DOC%"
            ],
            "env": {}
        }
    ],
    // 自動整形の設定
    "latex-workshop.latexindent.args": [
        "-c",
        "%DIR%/",
        "%TMPFILE%",
        "-y=defaultIndent: '%INDENT%'"
    ],
    "latex-workshop.latexindent.path": "latexindent"
}
```

ケン「結構長いね」

リサ「いろいろ設定しているからね」
リサ「便利なもの集めたら、こんなになっちゃった」

ケン「よし、これで設定は完了だね」

リサ「一旦、LaTeXのインストールが終わったかみてみようか」

## インストールの確認

リサ「ターミナルで確認してみよう」

ケン「最初に開いたターミナルを見ればいいのかな？」

リサ「そうだね」

```bash
> ...
> Logfile: /usr/local/texlive/2023/install-tl.log
```

ケン「これでインストールが終わったのか」

リサ「そうみたい」
リサ「そしたら、実際に`.tex`ファイルを作ってみよう」

ケン「よし、やってみよう！」

## 実際に`.tex`ファイルを作ってみる

リサ「まずはこんなかんじでファイルを作ろう」

```bash
~/workspace
├── .vscode
│   └── settings.json
└── sample
    └── sample.tex
```

ケン「こんな感じでいいの？」

リサ「これでいいと思うよ」

ケン「どんな感じで書けばいいのかな？」

リサ「まずは、こんな感じで書いてみよう」

```tex
\documentclass[uplatex,dvipdfmx]{jsarticle}

\begin{document}
Hello, World!
これは、LaTeXのサンプルです。
\end{document}
```

リサ「お、いい感じだね！」

ケン「でも、これだとpdfファイルにならないよね？」

リサ「よく気づいたね」
リサ「pdfファイルにするには、ビルドする必要があるんだ」

## ビルドしてみる

ケン「ビルドって何？」

リサ「ビルドは、`.tex`ファイルに書いたコードを変換することだよ」

ケン「変換？」

リサ「そう、さっき長い時間かけてインストールしたものが、それをやってくれるんだ」

ケン「なるほど、じゃあやってみよう」

リサ「じゃあ、`.tex`ファイルを開いて、、」
リサ「`Ctrl + Shift + P`を押して、コマンドパレットを開いて」

ケン「コマンドパレット？」

リサ「そう、これを開くと、いろいろなコマンドを実行できるよ」

ケン「なるほど、じゃあ、`build`と入力してみよう」

リサ「そうそう、`Latex Workshop: Build LaTeX project`を選択して」
リサ「`Enter`を押してみて」

ケン「お、なんか新しいディレクトリができてる！」
ケン「なんか、よくわかんないファイルがいっぱい入ってるね」

```bash
~/workspace
├── .vscode
│   └── settings.json
├── sample
    ├── out
    │   ├── main.aux
    │   ├── main.dvi
    │   ├── main.fdb_latexmk
    │   ├── main.fls
    │   ├── main.log
    │   ├── main.pdf
    │   └── main.synctex.gz
    └── main.tex
```

リサ「これで、pdfファイルができたんだ」

ケン「他のファイルは何？」

リサ「`.aux`とか`.log`とかは、ビルドのログだよ」

ケン「なるほど、じゃあ、pdfファイルを開いてみよう」

リサ「そうだね」

ケン「お、できてる！」

![完成図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609439/429bedb5-1246-afe9-e049-ced7de79b904.png)

リサ「これで、LaTeXの環境構築は完了だね」

ケン「ありがとう、リサ！」

リサ「どういたしまして」

# まとめ

- WSL2とVSCodeでLaTeXの環境構築をした
- LaTeXのファイルを書いてみた
- 書いたファイルをビルドしてみた

ケン「今日はありがとうね、リサ」

リサ「わからないことがあったら、いつでも聞いてね」

ケン「今度実際のレポートの書き方教えてよ」

リサ「私が暇なときにね～」

ケン「わかった！」


ということで、LaTeXの環境構築は完了です。
もし困ったことがあれば、本記事のコメント欄に書いてください！
さて、「実際のレポートの書き方」は、気が向いたら書きます。
この辺は、専攻する分野によって違うので、一概には言えないですよね・・・

# おまけ
私がLaTeXを利用し始めて以来、生産性が飛躍的に向上したと感じています。特に有益なのがCopilotとの統合機能です。レポートを書くとき、それなりに整理された文章を書く必要がありますよね。そのような時、Copilotが自動補完を提供してくれるので、非常に役立ちます。LaTeXのコードの記述が面倒だという意見もありますが、実際にはそれもCopilotが自動補完してくれるので、コードが正しいかどうかだけに注意を払えばいいので、レポートの作成がだいぶ楽になります。
ここら辺の話は、また別の記事で書きたいと思います。