VSCodeでLatex環境を整える

# はじめに
本記事では、VSCodeでLaTeXの環境構築をする方法を解説します。
文書作成ツールとして広く利用されているのはMicrosoft Wordです。
しかし、特に学術論文や技術文書の作成においては、LaTeXが一般的に使われています。
LaTeXには下記のような利点があります。

1. 高品質な組版: LaTeXは自動的に美しいレイアウトを生成してくれます。
2. 数式の強力なサポート: 複雑な数式や化学式を簡単に表現できます。
3. バージョン管理との相性: テキストファイル形式のため、Gitなどでの共同作業や変更履歴の管理が容易です。
4. 無料で利用可能: オープンソースであり、コストをかけずに利用できます。

それでは、環境構築をしていきます。

# TeX・LaTeXとは？
## 基礎知識
TeXは、文書を構築するためのプログラミング言語とツールの総称です。
LaTeXはTeXの上に構築されたマクロパッケージで、TeXの書式を簡単にしたり、標準化したりしたものです。
単に「TeX」といった場合に「LaTeX」を指すことが多いです。
TeXとLaTeXは区別されるべきですが、細かい話はおいておきます。
日本語の文字をさらにサポートするために開発されたのが「pTeX」と「upTeX」、そのマクロ版が「pLaTeX」と「upLaTeX」です。

## pTeX

pTeX (英語名: "publishing TeX") は、日本語文章の構築を目的に開発されたTeXの実装です。
ベースのTeXに日本語の漢字、仮名、ルビの利用など、日本語文書の構築に必要な機能が追加されています。

- 日本語ラインブレークに対応
- 正確な打ち切り
- 文章レイアウトのテキスト構築を支援

## pLaTeX
pLaTeX は、pTeXをベースにLaTeXのマクロを搭載したシステムです。

- pTeXの機能に加えてLaTeXの標準化された構文を利用可能
- 日本語文書を簡単に構築できる
- フォントサイズやレイアウトのカスタマイズ性

## upTeX

upTeX (英語名: "Unicode pTeX") は、pTeXのUnicode対応版です。

- Unicodeの完全支援
- 複数の言語に対応
- pTeXと同様の日本語文章構築機能

## upLaTeX
upLaTeX は、upTeXをベースにLaTeXのマクロを搭載したシステムです。

- upTeXのUnicode対応機能に加えてLaTeX構文が使える
- 日本語を含む複数言語構築に適している
- 世界レベルで使用可能な文書の構築

## どれを使うべき？
使用するシチュエーションによって選択が分かれます。

- 日本語のみを構築：pTeX や pLaTeX
- Unicode対応や複数言語構築：upTeX や upLaTeX
- 日本語の構築と標準化を重視：pLaTeX
- Unicodeベースの日本語文書を検討：upLaTeX

日本語テキストの構築においては、upTeXとupLaTeXが時代の流れに合っているでしょう。


# 必要なツール
## Visual Studio Codeをインストールする
これは詳しく解説しません。
各自のOSにあった[VSCode](https://code.visualstudio.com/)をインストールしてください。

## LaTeXをインストールする
TeX Liveがいいと思います。
[TEX Wiki](https://texwiki.texjp.org/?TeX%20Live#w628bee6)に詳細が載っているので、そちらにしたがってインストールしてください。

### Mac
Macの場合、HomebrewでMacTexをインストールするのが簡単だと思います。
今回は、VSCodeを使う予定なので、GUI-Applicationsなしでも問題ありません。
- GUI-Applicationsあり
```shell
$ brew install --cask mactex
```
- GUI-Applicationsなし
```shell
$ brew install --cask mactex-no-gui
```

:::note info
MacTeX-2024には以下のパッケージが収録されています。
- TeXLive-2024  
  TeX Liveの本体です。TeX Liveに含まれるすべてのパッケージをインストールします。
- GUI-Applictions  
  - BibDesk  
    文献管理ソフト
  - LaTeXiT  
    単独の数式を作成して他のアプリケーションにコピペするのに便利なMacアプリ
  - TeX Live Utility  
    tlmgr(TeX Live Manager)のmacOSネイティブのGUIアプリケーション。
- TeXShop
  macOS専用のTeX統合環境
- Ghostscript
  PostScriptやPortable Document Format などアドビのページ記述言語用のインタプリタおよび、それを基にしたソフトウェアパッケージのことです。
:::

### その他のOS
その他のOSについて[こちら](https://texwiki.texjp.org/?TeX%E5%85%A5%E6%89%8B%E6%B3%95)を参考にお願いします。

# Visual Studio Codeの設定
## LaTeX Workshop（拡張機能）
LaTex WorkshopはVSCodeでTeXソースを書くために必須級の拡張機能です．
シンタックスハイライトや補完，PDFのプレビューなど多くの機能を提供してくれます．
LaTeX Workshopのインストールしてください．

![vscode_latex-workshop(extension).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777892/02d7474c-6c5b-0cf6-aae3-ad1c801110b7.png)

## LaTeX Workshopの設定
### 使用可能なLaTeXエンジンを設定
今回は、pLaTeXとupLaTeX（の日本語）に対応するように設定します。

```jsonc
"latex-workshop.latex.tools": [
  {
    "name": "ptex2pdf(platex)_ja",
    "command": "ptex2pdf",
    "args": [
      "-interaction=nonstopmode",
      "-l",
      "-ot",
      "-kanji=utf8",
      "-synctex=1",
      "%DOC%"
    ]
  },
  {
    "name": "ptex2pdf(uplatex)_ja",
    "command": "ptex2pdf",
    "args": [
        "-interaction=nonstopmode", // エラーが発生しても処理を中断せずに続行するモードです。
        "-l", // LaTeXベースのフォーマットを使用することを指定します。具体的には、uplatexやplatexを使用する場合に指定します。
        "-u", // uplatexを使用することを指定します。
        "-ot", // TeXコンパイラに追加のオプションを渡すためのオプションです。例えば、-synctex=1などのオプションを指定することができます。
        "-kanji=utf8", // 日本語の文字エンコーディングをUTF-8に設定します。
        "-synctex=1", // SyncTeXを有効にします。SyncTeXは、ソースファイルとPDFファイル間の相互参照を可能にする機能で、PDFビューアとエディタ間でのジャンプが容易になります。
        "%DOC%" // 処理するTeXファイルのプレースホルダーです。実際のファイル名に置き換えられます。
    ]
  },
  {
      "command": "pbibtex",
      "args": ["%DOCFILE%", "-kanji=utf8"],
      "name": "pbibtex"
  }
],
```

### LaTeX文書をコンパイル設定
LaTeX文書をコンパイルするためのレシピを定義します。

```jsonc
"latex-workshop.latex.recipes": [
  // platex(bibなし)
  {
      "name": "JA ptex2pdf(platex)",
      "tools": ["ptex2pdf(platex)_ja"]
  },
  // platex(bibあり)
  {
      "name": "JA ptex2pdf(platex) with bibtex",
      "tools": ["ptex2pdf(platex)_ja", "pbibtex", "ptex2pdf(platex)_ja", "ptex2pdf(platex)_ja"]
  },
  // uplatex(bibなし)
  {
    "name": "JA ptex2pdf(uplatex)",
    "tools": ["ptex2pdf(uplatex)_ja"]
  },
  // uplatex(bibあり)
  {
    "name": "JA ptex2pdf(uplatex) with bibtex",
    "tools": ["ptex2pdf(uplatex)_ja", "pbibtex", "ptex2pdf(uplatex)_ja", "ptex2pdf(uplatex)_ja"]
  },
],
```

### その他の設定
これ以降は、個人の好みに合わせて設定してください。
```jsonc
// デフォルトのビルドレシピ
"latex-workshop.latex.recipe.default": "lastUsed",
// インテリセンス（使用するパッケージから提供されるコマンドや環境のオートコンプリートを有効）
"latex-workshop.intellisense.package.enabled": true,
// プレビューをvscode内に開く
"latex-workshop.view.pdf.viewer": "tab",
// プレビューを横幅いっぱいに表示する
"latex-workshop.view.pdf.zoom": "page-width",
// プレビューを左に開く
"latex-workshop.view.pdf.tab.editorGroup": "left",
// どのように中間ファイルが消されるか定義(保存時に不要な中間ファイルを消すため)
"latex-workshop.latex.clean.method": "glob",
// 不必要なファイルを削除するタイミング
"latex-workshop.latex.autoClean.run": "onBuilt",
// ビルド時に削除するファイルタイプ
"latex-workshop.latex.clean.fileTypes": [
  "%DOCFILE%.aux",
  "%DOCFILE%.bbl",
  "%DOCFILE%.blg",
  "%DOCFILE%.idx",
  "%DOCFILE%.ind",
  "%DOCFILE%.lof",
  "%DOCFILE%.lot",
  "%DOCFILE%.out",
  "%DOCFILE%.toc",
  "%DOCFILE%.acn",
  "%DOCFILE%.acr",
  "%DOCFILE%.alg",
  "%DOCFILE%.glg",
  "%DOCFILE%.glo",
  "%DOCFILE%.gls",
  "%DOCFILE%.fls",
  "%DOCFILE%.log",
  "%DOCFILE%.fdb_latexmk",
  "%DOCFILE%.snm",
  "%DOCFILE%.synctex(busy)",
  "%DOCFILE%.synctex.gz",
  "%DOCFILE%.nav",
  "%DOCFILE%.vrb"
],
```

### LaTeXエンジンの比較
pLaTeXやupLaTeX以外にもLaTeXエンジンがあるみたいです。
詳しく解説されている方がいたので、[そちら](https://qiita.com/kou-JP/items/60b63963f2ae7fdefddd)を確認されるといいと思います。

|エンジン |Unicode対応 |日本語対応 |出力形式 |特徴                             |
|---------|------------|-----------|---------|---------------------------------|
|pLaTeX   |×           |◎          |DVI/PDF  |日本語文書専用、Shift_JISなど対応|
|upLaTeX  |◎           |◎          |DVI/PDF  |日本語と多言語文書作成           |
|pdfLaTeX |×           |△          |PDF      |標準LaTeX、欧文向け              |
|XeLaTeX  |◎           |◎          |PDF      |Unicode、システムフォント対応    |
|LuaLaTeX |◎           |◎          |PDF      |Luaでの拡張が可能                |

# 最後に
日本語で論文を書くための最低限の設定はできたと思います。
pLaTeXやupLaTeX以外のLaTeXエンジンや英語対応はまたの機会にできたらと思います。