TeXのコマンドが実行できるDockerイメージを作成する


TL;DR

  • TeXのコンパイルができるDockerイメージ(Dockerfile)を作ります
    • Dockerサーバが動く環境ならば,環境非依存で実行できます
    • 論文を書くときなどに便利です

Dockerfile

  • ubuntuベースで,texliveと関連のパッケージをapt-getコマンドでインストールするDockerfileを作成します
    • パッケージマネージャ(ubuntuなのでapt)を使って,TeXに関するパッケージをインストールします
    • aruneko/texliveを参考に,/texsrcをマウントできるようにしており,コンテナのコマンド実行時にTeXファイル群を渡せるようにしています
    • インストールするパッケージはQiita Ubuntu 18.04 LTS に LaTeX をインストールを参考にしました
Dockerfile
FROM ubuntu:18.04
LABEL maintainer YOSHIMI Masato <myoshimi@DOMAIN_NAME>

ENV DEBIAN_FRONTEND noninteractive

RUN set -xe && \
    apt-get -y update && \
    apt-get install -y \
        make \
        texlive-lang-cjk \
        xdvik-ja \
        texlive-fonts-recommended \
        texlive-fonts-extra && \
    apt autoremove -y && \
    apt-get clean

RUN mkdir /texsrc
WORKDIR /texsrc

VOLUME /texsrc

CMD ["/bin/bash"]
  • docker buildコマンドでDockerfileをビルドします.この記事では名前をtexlive-dockerとします
# Dockerfileがあるディレクトリにてコマンド実行
# 名前はtexlive-dockerとする
docker build -t texlive-docker .

# イメージが作られたか確認
docker images | grep texlive-docker

テスト

  • 以下のsample.texとref.bibを作成します.
    • LaTeX入門/最初の例にある,文豪による小説の一文に,bibtexによる参考文献の管理と参照を追加しています
    • 2つのファイルは同じディレクトリに置きます
sample.tex
\documentclass{jsarticle}
\begin{document}

吾輩は猫である。名前はまだ無い\cite{Soseki1905}。

どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所で
ニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。

\bibliography{ref.bib}
\bibliographystyle{junsrt}

\end{document}
ref.bib
@book{Soseki1905,
    author="夏目漱石",
    title="吾輩ハ猫デアル",
    publisher="大倉書店",
    year=1905,
}

TeXコンパイル

  • sample.tex,ref.bibファイルがあるディレクトリ上で,docker runコマンドでTeXコンパイルを実行します
    • 参考文献ファイル(ref.bib)があるので,platexpbibtexplatexplatexdvipdfmxの計5つのコマンドを実行します
    • エラーが出なければ,当該ディレクトリ上に,sample.pdfが作成されています
docker run --rm -v ${PWD}:/texsrc texlive-docker platex sample.tex
docker run --rm -v ${PWD}:/texsrc texlive-docker pbibtex sample
docker run --rm -v ${PWD}:/texsrc texlive-docker platex sample.tex
docker run --rm -v ${PWD}:/texsrc texlive-docker platex sample.tex
docker run --rm -v ${PWD}:/texsrc texlive-docker dvipdfmx sample
  • 以下のようなpdfが出力されていれば成功です

参考