この記事は「MMAブログリレー」の第6回の記事です。
前回の記事はyamazakuraさんの「接続するネットワークに応じて壁紙を自動で変える【Windows】」でした。
ブログリレーが再び活発になりそう?
DevContainerでLaTeXの環境構築
また環境構築記事になっちゃいました。「自分用LaTeX環境」を作ってみたという話です。あんまり$\LaTeX$には詳しくない(大学のレポートを書くときにトラブったらAI頼り)なので、DevContainerの練習になりました。実際に課題などで便利に使っています。また、私の上司のhydrogenさんの$\LaTeX$テンプレートが動作することを確認しました。
DevContainerを用いるメリット
環境構築が高速
TexLiveをインストールするには結構時間がかかります。確か10GB近いファイルをミラーサーバーからダウンロードしています。しかし、Dockerのtexlive/texliveイメージは2.4GB程度で、DockerHubからのダウンロードで高速です。
ホストの環境を汚さない
Windows版のTexLiveを使う場合は、ホームディレクトリに.latexmkrcを置いて、、、ってやるので、設定ファイル等がカオスになりがちです。
また、いつもはLuaLaTeXでコンパイルしてるけど、なんかの事情で今日はpLaTeX!って時も、独立した環境を用意できます。
使い方
WSLへのDockerのインストール
そんなことしなくても、DockerDesktopのWSL Integrationも使えます。
WindowsにインストールしたWSL(ディストリビューションはUbuntu)で説明していきます。(ほかのディストリビューションを使ったことが無いため)
Dockerエンジンのインストールはこちらを参考にします。
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
# Install
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
リポジトリのクローン
git clone https://github.com/sakusan7200/latex_in_devcontainer.git
でローカル(WSL内を推奨)にクローンします。
VSCodeで開く
さっきリポジトリをクローンした位置までcdコマンドで移動しcode .とします。(VSCodeでWSL内のディレクトリを開いています)
左下の><→コンテナーで再度開くを選択し、コンテナに入ります。

アイデア
以下、自分が何を考えて構築していったのか・気づいたこと書き連ねておきます。
ディレクトリ構成
.
├── .devcontainer
│ └── devcontainer.json
├── .gitignore
├── .latexmkrc
└── doc.tex
devcontainer.json
features
common-utilsというのを入れてみました。gitとかcurlとか(いい感じに書かれた).bashrcを入れてくれます。だから、DockerfileにRUN apt installとかいちいち書かなくて済みます。
settings
コンテナを使わないやり方だと、ここの内容をあらゆる文書で共有しカオスになります。ワークスペース直下に.latexmkrcファイルを作りそこに設定を書いてます。
Volumeトリック
auxフォルダには参照の番号付けのための補助ファイルなどが出力されます。バインドマウントによりホストに同期されると多少とはいえリソースを消費するので、除外します。
"mounts": [
{
"target": "${containerWorkspaceFolder}/aux",
"type": "volume"
}
]
.latexmkrc
上記のVolumeトリックを使うためにaux_dir=auxでauxディレクトリに諸々を出すようにしてます。
-synctex=1でsynctexを有効にしてます。PDF上でCtrl+ダブルクリックでtexファイル上の該当箇所に飛べます。逆に、texファイル上でCtrl+Alt+JでPDFの該当箇所に飛べます。そんな機能あるんですね。知らなかった、無知って怖い。
pdf_mode=4はlualatexにより直接PDFを作成する指定です。lualatexの場合はdvipdfを通らずにPDFを出力できます。知らなかった、無知って怖い2。
lualatexでdvipdfを使わない場合は$latexではなく$lualatexを使うそうです。知らなかった、無知って怖い3。
まとめ
TikZや独自テンプレート、追加パッケージなどを入れていけば、自分専用の$\LaTeX$環境として育てていけそう。