コーヒーおかわり

データサイエンティストを目指す大学院生の日記。

LaTeXのtexファイルをPDFに変換するツールをDockerでつくった

前置き

機械学習のネタを投稿したいが,研究で使っているデータは公開できないし,未発表の研究を投稿するわけにもいかないので,Dockerネタになってしまう.

公開データを使って実験して投稿しようかなあ...

LaTeXの環境構築が辛かった...

本題
研究の中間発表に向けて,レジュメを作り始めたのだが,macOSの環境にTeXの環境を作るのに失敗し,うまくいかなかったのでDockerで作った.

Quick Start

$ docker run --rm \
             -v "texファイルがあるディレクトリを絶対パスで記述":/home/geotaru/workdir \
             -e target=/home/geotaru/workdir/"マウントしたディレクトリの下にある,コンパイルしたいtexファイルのパス" \
             geotaru/latex-compiler

Example

カレントディレクトリにあるresume.texからPDFファイルを生成する

$ docker run --rm \
             -v `pwd`:/home/geotaru/workdir \
             -e target=/home/geotaru/workdir/resume.tex \
             geotaru/latex-compiler

Dockerfile

Dockerfileは下記の通り.

他の人のレポジトリを参考にDockerfileを書き直し,コマンドラインツールを作った.参考にしたURL・レポジトリは最下部に書きました.

alpine Linuxを使って軽量化したが色々追加したせいか,非圧縮で1GBを超えてしまった.

FROM alpine:3.8

MAINTAINER geotaru <geotaru.dev@gmail.com>

ENV PATH /usr/local/texlive/2018/bin/x86_64-linuxmusl:$PATH

ENV USER geotaru
ENV HOME /home/${USER}

RUN apk --no-cache --update add bash
ENV SHELL /bin/bash
RUN adduser -S ${USER}

WORKDIR /root
RUN apk --no-cache --update add wget perl xz tar fontconfig-dev && \
    wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz  && \
    mkdir install-tl-unx && \
    tar xf install-tl-unx.tar.gz --strip-components 1 -C install-tl-unx

COPY texlive.profile /root/install-tl-unx/
RUN /root/install-tl-unx/install-tl \
    --repository=http://mirror.ctan.org/systems/texlive/tlnet/ \
    --profile=/root/install-tl-unx/texlive.profile && \
    tlmgr install \
        collection-basic collection-latex \
        collection-latexrecommended collection-latexextra \
        collection-fontsrecommended collection-langjapanese latexmk && \
    ( tlmgr install xetex || exit 0 ) && \
    rm -rf /root/install-tl-unx && \
    apk --no-cache del wget xz tar fontconfig-dev && \
    rm -rf /root/install-tl-unx

COPY ./compile.sh /opt/compile
RUN chmod 777 /opt/compile

USER ${USER}
WORKDIR ${HOME}/workdir
ENV target ${HOME}/target.tex

CMD /opt/compile ${target}

compile.shの中身

#!/bin/bash
platex $1
dvipdfmx $(echo $1 | sed "s/.tex$/.dvi/g")

上記のDockerfileの最新版は下記URLにおきました. git cloneしてお好きなように改変して自分の端末でbuildするなり,フォークしていじくりまわすといいと思います.ご自由にどうぞ

github.com

感想

自分のMacの環境がごちゃごちゃになってしまい,環境構築に失敗してtexファイルをpdfにうまく変換できなかったが,Dockerを使うことで解決した.Dockerはイイゾー!

参考

3846masa.hatenablog.jp

github.com