Dockerを用いたLaTeX環境で文章を作成する


本記事は東京学芸大学 櫨山研究室 Advent Calendar 2020の19日目の記事になります.

私が所属する研究室では月1でゼミ資料(文章)の提出を伴う研究の進捗報告があります.
私はこのゼミ資料をDockerを用いたLaTeX環境で作成しています.

本記事ではこのDockerを使ったLaTeX環境での文章作成について紹介したいと思います.

そもそもTeXとは何か?

TeXは組版ソフトであり,macOS,Windows,LinuxなどOSの環境が異なっていても,全く同じ動作をします.入力が同じなら原理的には同じ出力が得られます.

またTeXファイルはテキストファイルでありGitHubなどで版管理・再利用することが容易です.

ではLaTeXとは何か?

LaTeXはLeslie Lamportにより機能強化されたTeXです.

LaTeXは文章の論理構造と視覚的なレイアウトを分けて考えることを機能としてサポートしており,文書の再利用性を高めています.
章・節・図・表・数式の番号付けや目次・索引・引用文献の処理も自動的に行えます.

TeXの動作原理

TeXファイルでのPDFファイル生成までの動作原理は図で示すと以下のようになります.

TeXでは,組版結果をdviファイルという中間ファイルに書き出し,このdviファイルをdviドライバと称されるソフトウェアに渡すことでPDFを作成します.

Dockerを用いたLaTeXでの文章作成

LaTeXの環境構築ですがホストマシンにLaTeXを入れると余計なエディタなどが付いてきます.
そこでDockerを用いてLaTexのコンパイルとPDFの生成を行ってしまいます.

このDockerを用いたコンパイルとPDFの生成の流れは以下の図の通りです.

TeXファイルの作成・編集はホストマシン上で行い,コンパイルとPDFの生成をDockerコンテナ内で行います.

Dockerイメージの取得

Dockerイメージにはpaperist/docker-alpine-texlive-jaを利用します.
alpineベースのイメージでLaTeXのイメージとしては軽量(1Gb程度)です.
docker pullコマンドでimageを取得しておきます.

docker pull paperist/alpine-texlive-ja

文章ファイル(.tex)の用意とコンテナの作成

まず文章ファイルをdoc.texとしてを用意します.

# ファイルの作成
touch doc.tex

中身はとりあえず適当です.

doc.tex
\documentclass[a4j, twocolumn]{jsarticle}

\begin{document}
  Hello, World!
\end{document}

先ほど取得したイメージを元にコンテナ名latex-complile,現在のディレクトリをDockerコンテナ内の/workdirと共有したコンテナを立ち上げます.

$ docker run --rm --name latex-compile -it -d -v ${PWD}:/workdir paperist/alpine-texlive-ja

コンテナ内でコンパイルとPDFの生成

Dockerコンテナ内でコマンドを実行するにはdocker execを利用します.
コンテナ内にはLaTeXの環境がありuplatexコマンドが利用できます.

$ docker container exec -it latex-compile bin/ash -c "uplatex doc.tex && dvipdfmx doc.dvi"

正常にコンパイルが通れば,PDFファイルをホストマシン上で確認できます.

コンパイル手順をMakefileに記述する

先ほどのDockerコマンドは長すぎるのでMakefileにタスクとして記述してしまった方が無難です.

またMakeのタスクではlatex-compileというDockerコンテナが無ければコンテナを立ち上げてからdocker execコマンドを実行するようにします.

Makefile
.PHONY: compile
compile:
    docker ps -a | grep latex-compile || docker run --rm --name latex-compile -it -d -v ${PWD}:/workdir paperist/alpine-texlive-ja
    docker container exec -it latex-compile bin/ash -c "uplatex doc.tex && dvipdfmx doc.dvi

これにより以下のコマンドで編集した文章ファイル(doc.tex)のPDFを生成可能です.

make compile

なお本記事で解説している内容を含んだゼミ資料のテンプレートは以下のリポジトリで公開しています🙇‍♂️

参考