本記事は東京学芸大学 櫨山研究室 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
中身はとりあえず適当です.
\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
コマンドを実行するようにします.
.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
なお本記事で解説している内容を含んだゼミ資料のテンプレートは以下のリポジトリで公開しています🙇♂️
参考
- paperist/alpine-texlive-ja, https://hub.docker.com/r/paperist/alpine-texlive-ja/
- Paperist/docker-alpine-texlive-ja, https://github.com/Paperist/docker-alpine-texlive-ja