LuaLaTeX + subfiles + VSCodeで快適な修論執筆環境をととのえた話

注意

GitHubにあげているDockerコンテナは2022年2月15日現在、ビルドに失敗することが分かっています。また、シェルスクリプトconvpunc.shも正しく動作しませんので以下は参考程度にしてください。

この記事はある程度$latex \LaTeX$が使える方を対象に書いています。

前書き

修論のような大きな文書ファイルを作る際、$latex \LaTeX$は大変便利なものです。$latex \LaTeX$は打ち込んだ結果がそのまま反映される(What You See Is What You Get の頭文字をとって、WYSIWYG というようです)Wordとは異なり、目的のファイルを得るためにはソースファイルをコンパイルする必要があります。

文や図の配置は指示通りにコンピューターが自動生成してくれる分、文章執筆に集中できるというメリットがある反面、完成レイアウトを途中で確認したくなっても文章が長くなってくるとコンパイルに時間がかかるというデメリットも。そもそも、 $latex \LaTeX$ の環境構築は大変です。インストールだけで普通に数時間溶けますし、複数台でソースを編集する場合は全く同一な環境を維持しておかないと、パッケージがないだの衝突しただのでハマること間違いなし。いくらLaTeXが便利でも環境構築でハマっていては本末転倒というものです。

今回は、(Dockerが動く)どんなPCでも全く同一のLua$latex \LaTeX$環境を構築する方法を紹介します。修論や卒論に苦しんでいる皆さんにとっては、いい話ではないでしょうか。

で、何の話?

Dockerで $latex \LaTeX$ が乗っかったコンテナを作って動かすという話です。ずっと家の同じPCで執筆する方は、ローカルに $latex \LaTeX$ 環境を立ててしまった方がコンパイルも早いのですが、リモートワーク等で別のPCで作業する必要がある場合は、環境をまるまる持ち運べるDockerを使うと大変便利です。

材料

  • Dockerが動く任意のPC
  • Visual Studio Code (以下VS Code)と そのDocker用のExtension
  • お好きなクラウドストレージ(Google Driveとか OneDriveとかローカルのドライブとしてマウントできるサービス)

クラウドストレージにDockerコンテナ一式おいておくと環境の変更と文書ファイルの変更が一括で管理出来て楽ですよ。

VS Codeの準備

以下の拡張機能をVS Codeにインストールしておいてください。

ms-vscode-remote.remote-containers

Dockerコンテナをビルドする

Dockerはどっかからインストールしてきてください。

私が汗水垂らして作った(?)コンテナはこちらで配布してますので、適宜cloneしてきてください。

git clone https://github.com/padacha/lualatex-in-docker-on-vscode.git

VS Codeで引っ張ってきたリポジトリを開く

latex_docker_sample/ をVS Codeで開いてください。.Dockerfile を見つけるとDocker Extensionのインストールを薦めてくると思いますので、インストールしてない方は指示にしたがって拡張機能を有効化してください。その状態で再度latex_docker_sample/ を開きます。

こんな通知が出てきますので、Reopen in Containerを選択。この時、Dockerを起動していないとエラー吐くので注意です。ちなみに、左下端の「><」のボタンからも同じ操作が可能です。

初回はDockerコンテナをビルドしますので、結構時間がかかります。Core i7-8700, RAM 32GBのPCで10分程度かかった気がします。コーヒーでも淹れて飲んでてください。

左端のステータスバーがこのような表示になったらビルド成功です。2回目以降は30秒もかからずにコンテナ起動できると思います。

使い方

LaTeXおよびLaTeX-Workshopの使い方についてはここでは詳説しませんので、奥村先生の本とかネット情報をご参照ください。

subfilesとは

長い文書のソースファイルを親ファイルと複数の子ファイルに分割することができるパッケージの一つです。分割だけであれば、パッケージを使わずともできるのですが、図のレイアウトを確認したいとかで子ファイルだけをコンパイルしたい場合とかありますよね?ちょっとした変更のためにいちいち親ファイルをコンパイルしていては時間がかかりすぎる。

subfilesの利点はまさにここでして、読み込むことで子ファイルを独立でコンパイルできるようになります。

配布しているサンプルファイルのディレクトリ構成はこんな感じ。

/workdir
├ .devcontainer
├ .vscode
├ src
│ ├ 01_chapter1
│ │ └ introduction.tex
│ ├ 02_chapter2
│ │ └ fig
│ │ ├ figure.png
│ │ └ chapter2.tex
│ ├ 05_conclusion
│ │ └ conclusion.tex
│ └ 99_acknowledgement
│ └ acknowledgement.tex
├ main.tex
├ reb.bib
├ style.sty
├ .latexmkrc
└ convpunc

subfilesの使い方

親ファイル main.tex のプリアンブル(\documentclass\begin{document} の間)で、パッケージを読み込みます。(\usepackage{subfiles})

subfilesで読み込む子ファイルには、\documentclass[path/to/main/file]{subfiles}を記述する必要があります。細かい使い方はソースファイルのコメントを見てください。

コンパイル

この記事を読んでくれている方の多くが、相互参照やBibTeXの参照解決に複数回のコンパイルが必要であることをご存知だと思います。コンテナでは、この複数回コンパイルを一発でやってくれるlatexmkというperlスクリプトでコンパイルを行います。ターミナルからコマンドでlatexmkしても良いですが、Codeの拡張機能であるLaTeX-Workshopを使うとボタンから一発です。

赤丸で囲った再生ボタン?あるいはAlt+ Shift + B(Option + Shift + B)でビルドできます。この時、親ファイル(root file)と子ファイルどちらをビルドするか聞いてきます。前者の場合は上を、後者の場合は下を選んでください。

ビルド(コンパイル)は成功すればステータスバーに✅が、失敗すれば❌が表示されます。

小細工

settings.json でお気づきかもしれませんが、LaTeX-Workshopの設定で、コンパイル時に対象ファイルの「、」「。」を「,」「.」(カンマとピリオド)に変換する自作のシェルスクリプト(convpunc)を実行するようにしています。メールやツイッターでは全角句読点を使いたいが、論文等でカンマピリオドを使う必要がある、そんな理系な読者向けです。この機能が不要でしたら、settings.jsonlatex-workshop.latex.recipestoolsから"convpunc"を削除してください。

改善したいところ

子ファイルをコンパイルした際に、bibtexが参照エラーになってしまうことがわかっています。メインファイルをコンパイルした際には問題なく参照解決できるので大きな問題ではありませんが、参照を含む子ファイルのコンパイル時にはエラーメッセージが出ることを確認しています。pdfは正常に吐き出されるようですが。

最後に

LaTeXならたくさん図表を貼っても動作が重くならず、相互参照や参考文献の引用も楽々です。快適な修論・卒論・論文執筆ライフを。FBはコメントあるいはツイッターでお気軽にどうぞ。

参考文献

拙作のDockerfile等はこちらを参考に制作させていただきました。

nukopy/latex-in-docker-on-vscode: LaTeX environment in Docker on VSCode with extension “Remote – Containers”, “LaTeX Workshop” (github.com)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です