この記事では私が普段レポートの作成などに使用しているLaTeXの環境を紹介しようと思います.ブログの執筆は初めてなので読みづらいかもしれませんが悪しからず.
構成
Dockerコンテナ上でtexliveがインストールされたDebianのコンテナを動かして,そのコンテナにVSCodeのRemote Developmentで繋いで編集からコンパイルまでを行っています.
TexのコンパイルはVSCodeにLaTexWorkShopという拡張を入れることでVSCode上から行えるようになります.
フォルダ構成ですが,一つのリポジトリにバンバンtexファイルを突っ込んでいく形で作業しているので,コンテナやVSCodeの設定ファイルをワークスペース単位で管理する形にしています.
構築手順
この章では,実際にこの環境を構築するのに必要な手順について書いていきます.
環境
- デバイス MacBook Air (M2, 2022)
- OS:macOS Sequoia 15.1.1
- Docker Desktop 4.36.0
- VSCode 1.95.3
- 拡張機能
- Remote Development
- LaTeX WorkShop
Dockerイメージの構築
Dockerイメージの作成にはVSCodeのdevcontainerという機能を使用します.devcontainerとは名前の通り開発用のコンテナを作成する機能で,簡単なコンテナならVSCode上のボタンをポチポチするだけで作れます.今回は自分で作成したDockerfileを指定する形で使用します.
devcontainerを作成するには,.devcontainer
というフォルダを作り,その中にコンテナの構成を表すdevcontainer.json
とDockerfile
を入れます.
./.devcontainer:
. .. devcontainer.json Dockerfile
それぞれのファイルは次のとおりです.
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y texlive-full
RUN apt install -y locales
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen \
&& locale-gen
RUN apt install -y git
{
"name": "Latex Dev Container",
"build": {
"dockerfile": "Dockerfile",
"context": "..",
"args": {
"PROXY": "${localEnv:http_proxy}"
}
},
"customizations": {
"vscode": {
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
"extensions": [
"James-Yu.latex-workshop"
]
}
},
"mounts": [
// List of folders to mount into the dev container
],
"forwardPorts": [
// List of ports to forward from the dev container to the local machine
]
// "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=delegated"
}
settings.json
次はLaTexWorkShop用の設定を作成していきます.今回はワークスペース用の設定をjsonで書いていきます.
Cmd + Shift + P を押して出てきたコマンドパレットにsettings
と打ち込み,候補の中からOpen Workspace settings(JSON)
を選ぶことでワークスペース用のjsonファイルが開きます.
各種設定の意味ですが,説明が面倒なので自力でググってください.
簡単に説明すると,.recipies
で書いた内容がLaTeXWorkShopのタブに表示されます."latex-workshop.latex.tools"
は.recipies
から使うコマンドを定義してます.
{
"latex-workshop.latex.tools": [
{
"name": "lualatex",
"command": "lualatex",
"args": [
"%DOC%"
]
},
{
"name": "pbibtex",
"command": "pbibtex",
"args": [
"%DOCFILE%.aux"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "1 item Build (lualatex)",
"tools": [
"lualatex"
]
},
{
"name": "2 item Build (lualatex * 2)",
"tools": [
"lualatex",
"lualatex"
]
},
{
"name": "3 item Build (lualatex * 3)",
"tools": [
"lualatex",
"lualatex",
"lualatex"
]
},
{
"name": "All item Build (lualatex * 4) + BibTeX",
"tools": [
"lualatex",
"pbibtex",
"lualatex",
"lualatex",
"lualatex",
]
}
],
"latex-workshop.latex.autoBuild.run": "onSave",
"latex-workshop.latex.recipe.default": "first",
"latex-workshop.latex.build.clearLog.everyRecipeStep.enabled": false
}
さて以上でおおよその設定は完了です.このワークスペースを開いた上で左下のRemote Developmentのボタンを押し,メニューからReopen in Containerを押すと現在のワークスペースをコンテナ内で開くことができます.初回はコンテナのビルドがあるため割と時間がかかります.
まとめ
VSCodeのdevcontainerとLaTeXWorkShopを使ってDockerコンテナ内で動くLaTeX環境を構築しました.おそらく他に調べればこれの上位互換みたいな構成がいっぱい見つかると思います.本当はもうちょっとちゃんと書きたかったのですが,やる気と時間が無くなったので今回はこんなところで