【VSCode + WSL】大学のレポート作成のために LaTeX を WSL 上で動かす環境構築をしてみた。 ~ WSL 導入から PDF 出力まで ~
はじめに
この春から大学生になる人はおめでとう。
さて、大学生になると、様々な講義の課題でレポートを課されることが多くなってくる。 レポートの内容は講義によって様々だが、理系のレポートでは数式を多用することになると思う。
高校までは Word を使ってレポートを書いていた人も多いだろうが、Word には数式の入力が非常に面倒くさいという致命的な問題がある。
入力時に重くなるわ、数式を打ち込んで Enter を押したら添字や肩の数字がおかしくなるわ... もう発狂レベル。
そんな悩みを解決するのが、 数式の処理に優れた組版ソフトウェア (読み方は「ラテフ」or「ラテック」など)である。
ただ、この LaTeX 、一種のプログラミング言語のようなもので、環境構築やソースコードの記述方法などに癖があり、初心者にはなかなかとっつきにくい代物ではないかと思っている。
Cloud LaTeX のようなクラウド上の実行環境も用意されているが、どうせならローカルに実行環境を整備したい(生成AIツールも使えるしね)。
ということで今回は、 LaTeX の環境構築のやり方について、私の備忘録もかねて書くことにする。
なお、この記事では LaTeX 特有の用語が頻出する。必要に応じて以下の LaTeX 入門用サイトを参照すると良い。
環境構築の目標と前提条件
例によって Windows 上に作るともともとの Windows の環境を汚してしまうことになりあまり好きではないので、 WSL を使うことで Linux 仮想環境上に LaTeX のローカル実行環境を構築していく。ちなみに、 WSL 上で行う方が Windows 上で直接実行するよりも早いらしい。

どのような環境を作るのか
- 講義の種類・回数ごとにディレクトリを新たに作成し、対応するレポート課題の LaTeX ソースファイルを作成する。
- LaTeX のコードを書いたら、ショートカットキーから「タイプセット(C++ などで言うコンパイルのようなもの)」をする。ここで用いるドキュメントクラス(後述)は、 LuaLaTeX である。
- タイプセットが終わったら、 PDF を出力して内容を確認。
- 必要に応じて、レイアウトの構成や使用する外部のパッケージを指定する「プリアンブル」を外部ファイルから読み込む。
理想的な VScode 上のディレクトリ構成はこんな感じ。
> home/
> └ (LaTeX 実行環境用のディレクトリ名)/ # 名前はなんでもよい
├ (講義名)/
| ├ (講義回)/
| ├ out # ログなどの LaTeX タイプセット時に勝手に出力される様々なファイルの格納場所。 PDF ファイルもここに出力される。
| | └ (色々なファイル)
| └ report.tex # レポート用の LaTeX ファイル
└ preambles # プリアンブルを格納するディレクトリ
└ preamble.tex # 機能ごとにプリアンブルを分割する。一つにまとめてもよい。
なお、この記事内ではプリアンブルについては解説しないことにする。
LaTeX にも種類がある
LaTeX を実行するエンジンには、現状大きく分けて3つ存在する。
- (u)pLaTeX
- XeLaTeX
- LuaLaTeX
使用するエンジンによって、若干コマンドの仕様やソースコードの書き方が変わったり、使用できるフォントの種類等が変わってきたりする。 以下の記事を参照するとなんとなくピンと来るかも。

今後のことを考えると新規なら LuaLaTeX を使うのが良さそうなので、ひとまずこの記事ではLuaLaTeX をタイプセットのエンジンに使うことを前提として話を進める。
前提条件
今回の環境構築をするにあたって、前提となる条件は以下の通り。
- OS が Windows である。
- VScode をインストール済み。
WSL を VScode 上で使えるようにする
以前私が書いた、 AtCoder 用の C++ ローカル実行環境の構築についての記事で同じ内容を触れているので、以下の記事の「WSL を VScode 上で使えるようにする」の項を参照のこと。

インストールをすでに終えている場合は、念のため
> $ sudo apt -y update && sudo apt -y upgrade
を実行して、アップデートしておこう。
WSL 環境に TeX Live をインストールする
前項で作成した WSL 環境に、 LaTeX のベースとなる TeX のディストリビューション、「TeX Live」をインストールする。 主に使うのは日本語用のパッケージだけだと思うが、後から足りないパッケージを追加でインストールするのは面倒なので、容量に余裕があるのなら全てのパッケージをインストールするのが良いだろう。
- Remote 環境に接続した VSCode のターミナル上で次のコマンドを実行する。
> $ sudo apt install texlive-full
fullとあるのでインストールには結構時間がかかる。私の環境では30 ~ 40分ほどかかった。
なお、インストールの途中で
> Pregenerating ConTeXt MarkIV format. This may take some time...
という表示が出たまま処理が止まってしまうかもしれない。 私もこの状況に陥りググってみると、こんな記事がヒットした。

結論から言うと、Enter キーを押しっぱにしてゴリ押すことで解決できる。
解決策が予想の斜め上過ぎて笑ってしまうが、とにかくこうすることで無事にインストールは完了。
WSL 環境に LaTeX 用の拡張機能をインストールする
- 以下の VSCode 拡張機能を好みに応じてインストールする。必ず WSL環境に接続した状態でインストールすること。太字のものは必須の拡張機能である。
- LaTeX Workshop
- Japanese Language Pack for Visual Studio Code (VSCode を日本語化するやつ。導入していなければぜひ。)
- zenkaku
- Path Autocomplete
- indent-rainbow
ここでインストールした「LaTeX Workshop」という拡張機能は、 VSCode で簡単に LaTeX の編集やタイプセットを行うことができるものである。 似たような名前の「TeX Workshop」というやつもあるので、間違えないように注意。
VSCode 上での LaTeX のタイプセットの設定をする
- 拡張機能のインストールが終わったら、 VSCode の
settings.jsonを開き、以下の記事を参考に次の内容を追記する。拡張機能インストールの時点で既にデフォルトの内容が追記されている場合があるが、そのときは適宜書き換えること。

1.{2. "[latex]": {3. "editor.formatOnSave": true,4. "editor.defaultFormatter": "James-Yu.latex-workshop"5. },6. // 自動整形7. "latex-workshop.formatting.latexindent.args": [8. "-c",9. "%DIR%/",10. "%TMPFILE%",11. "-y=defaultIndent: '%INDENT%'"12. ],13. "latex-workshop.formatting.latex": "latexindent",14. "latex-workshop.formatting.latexindent.path": "latexindent",15. "latex-workshop.bibtex-format.align-equal.enabled": true,16. // インテリセンスを有効化17. "latex-workshop.intellisense.package.enabled": true,18. // VSCode ウィンドウ内で PDF プレビューをタブとして表示19. "latex-workshop.view.pdf.viewer": "tab",20. // 自動でタイプセットされて編集中に PC が重くなるのを防ぐ21. "latex-workshop.latex.autoBuild.run": "never",22. // 日本語文書で単語移動を使うため、助詞や読点、括弧などを区切り文字として指定する23. "editor.wordSeparators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~? 、。「」【】『』()!?てにをはがのともへでや",24. // タイプセット後の生成ファイルを出力するディレクトリ名を指定する25. "latex-workshop.latex.outDir": "out",26. // タイプセット失敗時に生成されたファイルを削除する27. "latex-workshop.latex.autoClean.run": "onFailed",28. // 削除する補助ファイルの拡張子を指定29. "latex-workshop.latex.clean.fileTypes": [30. "*.aux",31. "*.blg",32. "*.idx",33. "*.ind",34. "*.lof",35. "*.lot",36. "*.out",37. "*.toc",38. "*.acn",39. "*.acr",40. "*.alg",41. "*.glg",42. "*.glo",43. "*.gls",44. "*.ist",45. "*.fls",46. "*.log",47. "*.fdb_latexmk",48. "*.snm",49. "*.nav",50. "*.dvi",51. "*.synctex.gz"52. ],53. // タイプセットのレシピ54. "latex-workshop.latex.recipes": [55. // 2回繰り返す56. {57. "name": "lualatex*2",58. "tools": ["lualatex", "lualatex"]59. },60. // 1回のみ61. {62. "name": "lualatex*1",63. "tools": ["lualatex"]64. },65. // for TUS-report66. {67. "name": "latexmk",68. "tools": ["latexmk"]69. }70. ],71. // タイプセットのツール72. "latex-workshop.latex.tools": [73. {74. "name": "lualatex",75. "command": "lualatex",76. "args": [77. "-synctex=1", // SyncTeX を利用して LaTeX - PDF 間の相互参照を可能にする78. "-interaction=nonstopmode", // エラーや警告をある程度スキップしてからタイプセットを終了する79. "-file-line-error", // エラー部分を破線で表示80. "-output-directory=%OUTDIR%",81. "%DOC%"82. ],83. "env": {}84. },85. {86. "name": "latexmk",87. "command": "latexmk",88. "args": [89. "-synctex=1",90. "-file-line-error",91. "-outdir=%OUTDIR%",92. "%DOCFILE%.tex",93. "-e", // 環境変数を設定94. "$ENV{'TEXINPUTS'}='./../../sty/:' . $ENV{'TEXINPUTS'}"95. ]96. }97. ]98.}以下、設定内容のいくつかを解説する。 LaTeX Workshop に関する設定の詳細は以下の Github Wiki を参照のこと。
タイプセット後に生成される補助ファイルの扱いについて
LaTeX では、タイプセットを行うと.pdfや.logファイルの他にも様々な補助ファイルが生成される。
これを LaTeX ソースファイルと同じ場所に置いておくと邪魔なので、ここでは
1."latex-workshop.latex.outDir": "out"として、outディレクトリに入れておくことにしている。
タイプセット正常完了時に不要なファイルが残っているのは少々気持ち悪いが、いちいちすべて削除していると、再度タイプセットを行うときに却って時間がかかってしまうことになる。 これは LaTeX の仕様だと思って割り切るようにしよう。
PDF プレビューについて
1."latex-workshop.view.pdf.viewer": "tab"VSCode ウィンドウ内で PDF プレビューをタブとして表示する。
プレビュー表示をするには、タイプセット完了後に LaTeX ソースファイルを選択してCtrl + Alt + Jで可能。
また、 PDF プレビュー内の任意のテキストに対してCtrl + 左クリックで、対応する LaTeX ソースファイルの内容にジャンプすることができる。地味に便利。
タイプセット時に使用するレシピとツールについて
LaTeX Workshop では、タイプセットの方法をプリセットとして保存し、実行時に保存したものの中から選択することができる。
プリセットを保存しておく配列を「レシピ」、各レシピで使用できるタイプセットの方式を「ツール」と呼び、それぞれlatex-workshop.recipesとlatex-workshop.latex.toolsで定義できる。
ここではツールを2種類、レシピを3種類登録したが、latexmkについては次項で述べることにする。
まず、ツールの方から見ていく。
1."latex-workshop.latex.tools": [2. {3. "name": "lualatex",4. "command": "lualatex",5. "args": [6. "-synctex=1",7. "-interaction=nonstopmode",8. "-file-line-error",9. "-output-directory=%OUTDIR%",10. "%DOC%"11. ],12. "env": {}13. },14.]nameで指定したツールの名前は、後述するレシピで指定する際に用いることになる。
argsに指定できる引数の一覧と説明は、コマンドラインで
> $ latex --help
としてやると表示されるので、カスタマイズしたい場合は生成AIに聞くなりググるなりするとよい。
次に、レシピの方を見ていく。
1."latex-workshop.latex.recipes": [2. {3. "name": "lualatex*2",4. "tools": [5. "lualatex",6. "lualatex"7. ]8. },9. {10. "name": "lualatex*1",11. "tools": [12. "lualatex"13. ]14. }15.],toolsには、先ほど作成したツールのnameを書いていく。
ここでlualatex*2のレシピにおいて、"tools": ["lualatex", "lualatex"]と2回同じことをしている理由は、式番号や図表番号、目次の作成など、 LaTeX ソースファイル内で相互参照を行う際に、1回のみのタイプセットだと正しく実行されないからである。
.latexmkrcについて
.latexmkrcは、前述のレシピやツールをそのファイルにまとめて書き、タイプセットの際にそのファイルを指定することで、長ったらしいコマンドを一つにまとめて実行できる便利なファイルである。
ファイルの場所はホームディレクトリ直下が一般的。
実験など、教員側からレポートの体裁を指定される際に.latexmkrcが配布された場合は、ツールとレシピにこれを登録しておこう。
ショートカットキーの設定
タイプセットなどの操作をキーボードから簡単に行えるようにするため、ショートカットキーの設定をする。 ここはお好みの割り当てで構わない。
Ctrl + K, -> Ctrl + Sでキーボードショートカットの設定タブを開く。- 検索窓に
latexと入力し、任意のコマンドに対してキーボードショートカットの割り当てをする。

私の場合は、タイプセットにCtrl + Shift + B、 PDF プレビューにCtrl + Shift + V、 LaTeX 文書から PDF プレビューへの参照にCtrl + Shift + Jを割り当てている。
動作確認がてら実際に LaTeX 文書を書いてみる
ここまでで一連の LaTeX 環境構築は完了した。最後に、この環境がきちんと動作するのかの確認を行う。
- Remote 環境に接続した VSCode のコマンドプロンプト上で WSL のホームディレクトリ直下に移動して、以下のコマンドで任意のディレクトリを作成し、そのディレクトリに移動する。このディレクトリが今後 LaTeX 文書を書いていく作業ディレクトリとなる。ここでは便宜上
latexとした。
> $ mkdir latex
> $ cd latex
- 新規に
test.texというファイルを作成し、以下の内容を記述する。ここに書かれている内容については今は解説しない。気になる場合は各自で調べてみよう。
1.\documentclass[lualatex]{jlreq}2. 3.\title{初めての \LaTeX}4.\author{(あなたの名前)}5.\date{\today}6. 7.\begin{document}8.\maketitle9. 10.\section{これは見出し}11.\subsection{これは小見出し}12.\subsubsection{これはさらに小見出し}13.数式は $y = ax^2 + bx + c$ のように行内に書くこともできるし,14.\begin{equation}15.y = ax^2 + bx + c16.\end{equation}17.のように式番号を振ることもできる.18. 19.\end{document}- 記述が終わったら、
Ctrl + Shift + Bでタイプセットする。

- タイプセットが終わったら、
Ctrl + Shift + Vで PDF プレビューを表示する。

- LaTeX ソースファイルの10~17行目のいずれかを選択した状態で
Ctrl + Shift + Jとすると、対応する PDF プレビューの行が赤くハイライトされる。 - PDF プレビューの任意の行を
Ctrl + 左クリックすると、対応する LaTeX ソースファイルの行にカーソルがジャンプする。 test.texと同じ階層にoutディレクトリが生成されており、その中にtest.pdfが生成されていることを確認する。これが LaTeX ソースコードによって生成された PDF ファイルだ。課題などで PDF ファイルの提出を求められた場合は、これを提出すればよい。
もしこのように動作しない場合、特にタイプセットや PDF プレビューがうまくいかない場合は、前述の設定をもう一度確認してみよう。
おわりに
以上で、冒頭に示した環境を構築することができた。
工程が多いので、予期せぬエラーなどで途中で詰まってしまうことは十分あり得るだろう。
エラーが出てきたら生成AIに聞いたり自分で調べてみたりするのはもちろんだが、それでもなかなか解決しないかもしれない。行き詰ったら最初からやり直してみるのも一つの手であろう。
新学期からのレポート作成で少しでも楽をして、単位取得に集中できるようにしよう。




