【自研究室向け】LaTeX+VSCode環境構築 2023年版

# はじめに

卒論・修論、学会論文など論文執筆にやはりLaTexは欠かせません。しかしながら、自研究室でもそれなりにWordで書いている人を見かけます。そこで本稿では、これを見れば誰でもLaTeXとVSCodeで論文を書けるようになる環境を作れる備忘録を残しておきます。
(過去に作成したレシピなので、参考にしたサイトは多すぎて忘れました。引用出来なくてごめんなさい。)

一緒に快適なLaTeX環境を構築しましょう。
~~最近流行りのOverleafは一旦スルーします~~


# インストール

まずはLaTeXとVSCodeをインストールします。(詳しい解説を省いてもいい気もしますが…)
既にインストール済みの方は読み飛ばしてください。

## LaTeX

Tex liveからインストールできます。

https://texwiki.texjp.org


インストールに2〜3時間ぐらいはかかるので何かの作業のバックグラウンドでインストールすることをおすすめします。


### Windows

公式の`install-tl-windows.exe`でインストールできます。
確か2023年時点ではここらへんです。

https://texwiki.texjp.org/?TeX%20Live%2FWindows

https://www.tug.org/texlive/acquire-netinstall.html

### Mac

Homeblewからインストールできます。

```shell
brew install --cask mactex-no-gui
sudo tlmgr update --self --all
sudo tlmgr paper a4
```

https://texwiki.texjp.org/?TeX%20Live%2FMac

## Visual Studio Code

もう既に入れてますよね？(圧)

https://code.visualstudio.com

### Windows

公式からGUIのインストーラーで入れます。

### Mac

```shell
brew install visual-studio-code --cask
```


## Latexmkrcの設定

次に.latexmkrcを作成します。
これがどういう意味を持つかは説明するのがめんどくさいので省きます。
※気になる人は個人的に調べてみてください。

基本的にC(```%USERPROFILE%/```)やホームディレクトリの直下に置いとけば問題ないです。
編集する時は適当にテキストファイルとして作成して後で拡張子を変更するような形でも問題ないと思います。
以下に私が使用しているものを記載します。
```shell:.latexmkrc
# 通常の LaTeX ドキュメントのビルドコマンド
$latex = 'uplatex %O -kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode %S';
# pdfLaTeX のビルドコマンド
$pdflatex = 'pdflatex %O -synctex=1 -interaction=nonstopmode %S';
# LuaLaTeX のビルドコマンド
$lualatex = 'lualatex %O -synctex=1 -interaction=nonstopmode %S';
# XeLaTeX のビルドコマンド
$xelatex = 'xelatex %O -no-pdf -synctex=1 -shell-escape -interaction=nonstopmode %S';
# Biber, BibTeX のビルドコマンド
$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
$bibtex = 'upbibtex %O %B';
# makeindex のビルドコマンド
$makeindex = 'upmendex %O -o %D %S';
# dvipdf のビルドコマンド
$dvipdf = 'dvipdfmx %O -o %D %S';
# dvipd のビルドコマンド
$dvips = 'dvips %O -z -f %S | convbkmk -u > %D';
$ps2pdf = 'ps2pdf.exe %O %S %D';

# PDF の作成方法を指定するオプション
## $pdf_mode = 0; PDF を作成しない。
## $pdf_mode = 1; $pdflatex を利用して PDF を作成。
## $pdf_mode = 2; $ps2pdf を利用して .ps ファイルから PDF を作成。
## pdf_mode = 3; $dvipdf を利用して .dvi ファイルから PDF を作成。
## $pdf_mode = 4; $lualatex を利用して .dvi ファイルから PDF を作成。
## $pdf_mode = 5; xdvipdfmx を利用して .xdv ファイルから PDF を作成。
$pdf_mode = 3;

# PDF viewer の設定
$pdf_previewer = "start %S";  # "start %S": .pdf に関連付けられた既存のソフトウェアで表示する。

## Windows では SyncTeX(PDF をビューアーで開いたまま中身の更新が可能で更新がビューアーで反映される機能) が利用できる SumatraPDF 等が便利。
## ぜひ SyncTeX 機能のあるビューアーをインストールしよう。
## SumatraPDF: https://www.sumatrapdfreader.org/free-pdf-reader.html
## $pdf_previewer = 'SumatraPDF -reuse-instance';
```

## VSCodeの設定

とりあえず拡張機能をインストールします。
多分これ入れときゃ大丈夫です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662341/7ee38d01-f46d-8e50-32b0-871a3bf76296.png)

次にレシピを作ります。
VSCodeでは設定を```settings.json```に書きます。
VSCodeの左下の設定を選択し、タブ右上のファイルがひっくり返っているみたいなマークを押すと```JSON```が開きます。
これ書いとけば、一気にビルドできます。
生成されたPDFファイルは自動的に生成されるoutディレクトリの中に生成されています。
また、他の生成された不要なファイルは自動で削除されるようにしています。
WindowsとMacでコマンドが違うので両方のレシピを載せておきます。
参考文献を作成する```pbibtex```や索引を作成する```mendix```は必要ない場合はコメントアウトしてください。
(そうしないときっとエラーが出ます。この後のサンプルプログラムの動作確認時はコメントアウトしてください。)

### Windowsの場合

```json-doc:setting.json
{

// 日本語文書で単語移動を使うため、助詞や読点、括弧を区切り文字として指定する
"editor.wordSeparators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?　、。「」【】『』（）！？てにをはがのともへでや",


// ------------ LaTeX ここから -----------------
// 設定: LaTeX Workshop

// LaTeX Workshop ではビルド設定を「Tool」と「Recipe」という2つで考える
//   Tool: 実行される1つのコマンド。コマンド (command) と引数 (args) で構成される
//   Recipe: Tool の組み合わわせを定義する。Tool の組み合わせ (tools) で構成される。
//           tools の中で利用される Tool は "latex-workshop.latex.tools" で定義されている必要がある。

"latex-workshop.latex.recipes": [
  {
//論文用レシピ
      "name": "platex",
      "tools": [
          "platex",
          "pbibtex",
          "platex",
          "mendex",
          "platex",
          "dvipdfmx",
          "move",
          "delete"
      ]
  }
,
{
//要旨用レシピ
    "name": "preliminary",
    "tools": [
        "platex",
//            "pbibtex",
        "platex",
//            "mendex",
        "platex",
        "dvipdfmx",
        "move",
        "delete"
    ]
}
],
"latex-workshop.latex.tools": [
  {
      "name": "platex",
      "command": "platex",
      "args": [
          "-synctex=1",
          "-interaction=nonstopmode",
          "-file-line-error",
          "-kanji=utf8",
          "-shell-escape",
          "%DOCFILE%.tex"
      ]
  },
  {
      "name": "dvipdfmx",
      "command": "dvipdfmx",
      "args": [
          "%DOCFILE%.dvi"
      ]
  },
  {
      "name": "pbibtex",
      "command": "pbibtex",
      "args": [
          "-kanji=utf8",
          "%DOCFILE%"
      ]
  },
  {
      "name":"move",
      "command":"copy",
      "args":[
        "%DOCFILE%.pdf",
        "out"
      ]
  },
  {
      "name":"mendex",
      "command":"mendex",
      "args":[
        "-r",
        "-c",
        "-g",
        "-s",
        "dot.ist",
        "-p",
        "any",
        "%DOCFILE%.idx"
      ]
  },
  {
    "name":"delete",
    "command":"del",
    "args":[
      "/q",
      "%DOCFILE%.aux",
      "%DOCFILE%.bbl",
      "%DOCFILE%.blg",
      "%DOCFILE%.dvi",
      "%DOCFILE%.idx",
      "%DOCFILE%.ilg",
      "%DOCFILE%.ind",
      "%DOCFILE%.lof",
      "%DOCFILE%.log",
      "%DOCFILE%.lot",
      "%DOCFILE%.toc",
      "%DOCFILE%.synctex.gz"
    ]
}
],
// latex-workshop.latex.magic.args: マジックコメント付きの LaTeX ドキュメントをビルドする設定
// '%!TEX' で始まる行はマジックコメントと呼ばれ、LaTeX のビルド時にビルドプログラムに解釈され、
// プログラムの挙動を制御する事ができる。
// 参考リンク: https://blog.miz-ar.info/2016/11/magic-comments-in-tex/
"latex-workshop.latex.magic.args": [
"-f", "-gg", "-pv", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
],

// latex-workshop.latex.clean.fileTypes: クリーンアップ時に削除されるファイルの拡張子
// LaTeX 文書はビルド時に一時ファイルとしていくつかのファイルを生成するが、最終的に必要となるのは
// PDF ファイルのみである場合などが多い。また、LaTeX のビルド時に失敗した場合、失敗時に生成された
// 一時ファイルの影響で、修正後のビルドに失敗してしまう事がよくある。そのため、一時的なファイルを
// 削除する機能 (クリーンアップ) が LaTeX Workshop には備わっている。
"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", "*.synctex.gz",
// for Beamer files
"_minted*", "*.nav", "*.snm", "*.vrb"
],

// latex-workshop.latex.autoClean.run: ビルド失敗時に一時ファイルのクリーンアップを行うかどうか
// 上記説明にもあったように、ビルド失敗時に生成された一時ファイルが悪影響を及ぼす事があるため、自動で
// クリーンアップがかかるようにしておく。

"latex-workshop.latex.autoClean.run": "onBuilt",

// latex-workshop.view.pdf.viewer: PDF ビューアの開き方
// VSCode 自体には PDF ファイルを閲覧する機能が備わっていないが、
// LaTeX Workshop にはその機能が備わっている。
// "tab" オプションを指定すると、今開いているエディタを左右に分割し、右側に生成されたPDFを表示するようにしてくれる
// この PDF ビュアーは LaTeX のビルドによって更新されると同期して内容を更新してくれる。
"latex-workshop.view.pdf.viewer": "tab",

// latex-workshop.latex.autoBuild.run: .tex ファイルの保存時に自動的にビルドを行うかどうか
// LaTeX ファイルは .tex ファイルを変更後にビルドしないと、PDF ファイル上に変更結果が反映されないため、
// .tex ファイルの保存と同時に自動的にビルドを実行する設定があるが、文書が大きくなるに連れてビルドにも
// 時間がかかってしまい、ビルドプログラムの負荷がエディタに影響するため、無効化しておく。
"latex-workshop.latex.autoBuild.run": "never",

"[tex]": {
// スニペット補完中にも補完を使えるようにする
"editor.suggest.snippetsPreventQuickSuggestions": false,
// インデント幅を2にする
"editor.tabSize": 2
},

"[latex]": {
// スニペット補完中にも補完を使えるようにする
"editor.suggest.snippetsPreventQuickSuggestions": false,
// インデント幅を2にする
"editor.tabSize": 2
},

"[bibtex]": {
// インデント幅を2にする
"editor.tabSize": 2
},


// 使用パッケージのコマンドや環境の補完を有効にする
"latex-workshop.intellisense.package.enabled": true,

// 生成ファイルを "out" ディレクトリに吐き出す
"latex-workshop.latex.outDir": "out",
"editor.unicodeHighlight.allowedCharacters": {
"，": true,
"．": true
},
//レシピの設定
"latex-workshop.latex.recipe.default": "lastUsed",
}
```

### Macの場合
```json-doc:setting.json
{

// ------------ LaTeX ここから -----------------
// 設定: LaTeX Workshop

// LaTeX Workshop ではビルド設定を「Tool」と「Recipe」という2つで考える
//   Tool: 実行される1つのコマンド。コマンド (command) と引数 (args) で構成される
//   Recipe: Tool の組み合わわせを定義する。Tool の組み合わせ (tools) で構成される。
//           tools の中で利用される Tool は "latex-workshop.latex.tools" で定義されている必要がある。

"latex-workshop.latex.recipes": [
    {
//論文用レシピ
        "name": "platex",
        "tools": [
            "platex",
            "pbibtex",
            "platex",
            "mendex",
            "platex",
            "dvipdfmx",
            "move",
            "delete"
        ]
    }
,
  {
//要旨用レシピ
      "name": "preliminary",
      "tools": [
          "platex",
//            "pbibtex",
          "platex",
//            "mendex",
          "platex",
          "dvipdfmx",
          "move",
          "delete"
      ]
  }
],
"latex-workshop.latex.tools": [
    {
        "name": "platex",
        "command": "platex",
        "args": [
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "-kanji=utf8",
            "-shell-escape",
            "%DOCFILE%.tex"
        ]
    },
    {
        "name": "dvipdfmx",
        "command": "dvipdfmx",
        "args": [
            "%DOCFILE%.dvi"
        ]
    },
    {
        "name": "pbibtex",
        "command": "pbibtex",
        "args": [
            "-kanji=utf8",
            "%DOCFILE%"
        ]
    },
    {
        "name":"move",
        "command":"cp",
        "args":[
          "%DOCFILE%.pdf",
          "out"
        ]
    },
    {
        "name":"mendex",
        "command":"mendex",
        "args":[
          "-r",
          "-c",
          "-g",
          "-s",
          "dot.ist",
          "-p",
          "any",
          "%DOCFILE%.idx"
        ]
    },
    {
      "name":"delete",
      "command":"rm",
      "args":[
        "-f",
        "%DOCFILE%.aux",
        "%DOCFILE%.bbl",
        "%DOCFILE%.blg",
        "%DOCFILE%.dvi",
        "%DOCFILE%.idx",
        "%DOCFILE%.ilg",
        "%DOCFILE%.ind",
        "%DOCFILE%.lof",
        "%DOCFILE%.log",
        "%DOCFILE%.lot",
        "%DOCFILE%.toc",
        "%DOCFILE%.synctex.gz"
      ]
  }
],
// latex-workshop.latex.magic.args: マジックコメント付きの LaTeX ドキュメントをビルドする設定
// '%!TEX' で始まる行はマジックコメントと呼ばれ、LaTeX のビルド時にビルドプログラムに解釈され、
// プログラムの挙動を制御する事ができる。
// 参考リンク: https://blog.miz-ar.info/2016/11/magic-comments-in-tex/
"latex-workshop.latex.magic.args": [
"-f", "-gg", "-pv", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
],

// latex-workshop.latex.clean.fileTypes: クリーンアップ時に削除されるファイルの拡張子
// LaTeX 文書はビルド時に一時ファイルとしていくつかのファイルを生成するが、最終的に必要となるのは
// PDF ファイルのみである場合などが多い。また、LaTeX のビルド時に失敗した場合、失敗時に生成された
// 一時ファイルの影響で、修正後のビルドに失敗してしまう事がよくある。そのため、一時的なファイルを
// 削除する機能 (クリーンアップ) が LaTeX Workshop には備わっている。
"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", "*.synctex.gz",
  // for Beamer files
  "_minted*", "*.nav", "*.snm", "*.vrb",
],

// latex-workshop.latex.autoClean.run: ビルド失敗時に一時ファイルのクリーンアップを行うかどうか
// 上記説明にもあったように、ビルド失敗時に生成された一時ファイルが悪影響を及ぼす事があるため、自動で
// クリーンアップがかかるようにしておく。

"latex-workshop.latex.autoClean.run": "onBuilt",

// latex-workshop.view.pdf.viewer: PDF ビューアの開き方
// VSCode 自体には PDF ファイルを閲覧する機能が備わっていないが、
// LaTeX Workshop にはその機能が備わっている。
// "tab" オプションを指定すると、今開いているエディタを左右に分割し、右側に生成されたPDFを表示するようにしてくれる
// この PDF ビュアーは LaTeX のビルドによって更新されると同期して内容を更新してくれる。
"latex-workshop.view.pdf.viewer": "tab",

// latex-workshop.latex.autoBuild.run: .tex ファイルの保存時に自動的にビルドを行うかどうか
// LaTeX ファイルは .tex ファイルを変更後にビルドしないと、PDF ファイル上に変更結果が反映されないため、
// .tex ファイルの保存と同時に自動的にビルドを実行する設定があるが、文書が大きくなるに連れてビルドにも
// 時間がかかってしまい、ビルドプログラムの負荷がエディタに影響するため、無効化しておく。
"latex-workshop.latex.autoBuild.run": "never",

"[tex]": {
  // スニペット補完中にも補完を使えるようにする
  "editor.suggest.snippetsPreventQuickSuggestions": false,
  // インデント幅を2にする
  "editor.tabSize": 2
},

"[latex]": {
  // スニペット補完中にも補完を使えるようにする
  "editor.suggest.snippetsPreventQuickSuggestions": false,
  // インデント幅を2にする
  "editor.tabSize": 2
},

"[bibtex]": {
  // インデント幅を2にする
  "editor.tabSize": 2
},


// 使用パッケージのコマンドや環境の補完を有効にする
"latex-workshop.intellisense.package.enabled": true,

// 生成ファイルを "out" ディレクトリに吐き出す
"latex-workshop.latex.outDir": "out",
"editor.unicodeHighlight.allowedCharacters": {
  "，": true,
  "．": true
},
//レシピの設定
"latex-workshop.latex.recipe.default":"lastUsed",
}
```

## 実際に使ってみよう
GUIでもショートカットでもビルドできます。
GUIだと、右上の実行ボタンを押せばビルドできます。また、その右にある虫眼鏡みたいなマークが付いたボタンを押せばプレビューが開きます。


ショートカットだと、```ctrl + alt + b```(```command(⌘) + option(⌥) + b)```でビルドが出来ます。また、```ctrl + alt + v```(command(⌘) + option(⌥) + v)```で横にプレビューが開きます。

以下に適当なサンプルプログラムをおいておきます。
```tex:sample.tex
\documentclass{article}
\usepackage[utf8]{inputenc}
\title{サンプルレポート}
\author{あなたの名前}
\date{\today}
\begin{document}
\maketitle
\section{はじめに}
これはLaTeXのサンプル文書です。文章を自由に追加・編集してください。
\section{内容}
\LaTeX は文章やレポートの作成に便利です。数式も簡単に挿入できます。
\subsection{数式の例}
以下は二次方程式の解の公式です。
\[ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} \]
\end{document}
```

実行すると以下のようなPDFファイルが生成されます。
(pbibtexとmendixをコメントアウトしてVSCodeを再起動するのを忘れないように。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662341/2bb01de8-a966-3fff-4580-3b38822e69a1.png)

プレビュー機能を利用するとこんな画面で作業できます。
(outにも同ディレクトリにも生成されているのは気づかったことに…。いらないならdeleteに追加してください…)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662341/39b33139-0414-e0ba-f97b-ec720f06a3bc.png)


## おわりに
とりあえず動く環境はこれでできたかなと思います。
最低限の要件なので、もっと余裕があれば色々追加したらいいかなと思います。
勝手に無効化している機能もあるのでそこはご自由に変更してください。
参考文献や索引の作り方はまた別の記事で紹介します。
~~(Overleafには最後まで言及しません)~~