Help us understand the problem. What is going on with this article?

過去の TeX Live の Docker コンテナ化

以前の記事では,最新の TeX Live 2019 に,高品質なオープンソース和文フォントである原ノ味フォントと,新進気鋭の LaTeX 文書ビルドシステム llmk を搭載した Docker コンテナのイメージを作成しました。

それに対し今回は,過去バージョンの TeX Live を保存した Docker コンテナを作成してみました。

使い道

過去バージョンの TeX Live を Docker コンテナとして保存し,いつでも過去バージョンを呼び出せるようにしておくと,次のような場面で役立つはずです。

  • 過去に組版した文書を今コンパイルしたら組版結果があちこち変わり,ページ数が変わってしまった!(←これ結構起こりますよね……😓)元と同じ環境で再度コンパイルしたい……!
  • 最新の TeX Live だとコンパイルが通らない。昔のバージョンではこのソースで通っていたはず。どの時点の TeX Live まではコンパイルが通っていたのかをさかのぼって検証したい。
  • Web 上で「TeX Live 2015 で組版したところ結果が期待通りになりません」といった質問に答えるにあたり,手元で検証して動作を確認したい。

仕様

日本語 TeX 開発コミュニティ (texjp.org) のサーバから取得した,次の各 TeX Live の frozen 版 (scheme-full) をコンテナイメージとして固めました。それぞれ Ubuntu 18.04 ベースです。Ubuntu 18.04 公式レポジトリの Ghostscript 9.26 も同梱・設定されています。

  • TeX Live 2012 (frozen)
  • TeX Live 2013 (frozen)
  • TeX Live 2014 (frozen)
  • TeX Live 2015 (frozen)
  • TeX Live 2016 (frozen)
  • TeX Live 2017 (frozen)
  • TeX Live 2018 (frozen)
  • TeX Live 2019 (frozen)

IPAex フォント埋め込み設定

各バージョンとも,(u)pLaTeX + dvipdfmx/dvips を使った場合にデフォルトで IPAex フォントを埋め込む設定を済ませてあります。

llmk 同梱

TeX Live とは別に,/usr/local/binllmk を入れ,Docker コンテナを引数なしで起動したときに llmk が呼び出されるようにしてあります。(ただし TeX Live 2012 の texlua では llmk を動かせなかったので入れていません。)

Docker Hub レポジトリ

次の各タグでバージョンが区別されています。

  • 2012frozen
  • 2013frozen
  • 2014frozen
  • 2015frozen
  • 2016frozen
  • 2017frozen
  • 2018frozen
  • 2019frozen

使い方

イメージの pull

まず,使いたいバージョンのタグを指定して pull します。

$ docker pull doratex/tlarchive:2015frozen

起動法

コンテナ内では /workdir が作業ディレクトリとなるので,それをカレントディレクトリと bind マウントして使うのを想定しています。

alias tl2015="docker run --rm \
  --mount type=bind,src=\"\$(pwd)\",dst=/workdir \
  --mount type=volume,src=ltfontcache2015,dst=/usr/local/texlive/2015/texmf-var/luatex-cache/generic/fonts/otl \
  doratex/tlarchive:2015frozen"

などとエイリアスを設定しておくと楽でしょう。(--mount type=volume,... の部分は,LuaTeX のフォントキャッシュを ltfontcache2015 というボリューム(名前は任意です)に保存し永続化させるための設定です(詳細は前回の記事を参照)。このエイリアスが設定されている下で

$ tl2015 ptex2pdf -l hoge.tex
$ tl2015 lualatex fuga.tex

などと普通にコンパイルすることも可能です。pLaTeX + dvips + ps2pdf のワークフローを使う場合は,

$ tl2015 /bin/bash -c 'platex hoge.tex && dvips hoge.dvi && ps2pdf hoge.ps'

とすれば OK です。

(u)pLaTeX + dvipdfmx/dvips においては,デフォルトで IPAex フォントを埋め込む設定になっています。

また,引数なしで

$ tl2015

と起動すると,同梱の llmk が動き,カレントディレクトリの llmk.toml に基づきビルドしようとします。

$ tl2015 llmk hoge.tex

のようにして特定のファイルをターゲットにすることもできます。従来の latexmk もインストールされているので

$ tl2015 latexmk hoge.tex

も使えます。

Dockerfile

このイメージを作るために使用した Dockerfile は GitHub レポジトリに置いてあります。年号が違う以外はほぼ同様に見えますが,各バージョンの仕様の違いに応じて以下のように微調整してあります。

  • install-tl-repositoryhttps に対応したのは TeX Live 2017 以降なので,TeX Live 2016 以前では http を使う。
  • TeX Live 2012 では kanji-config-updmap-sys ではなく updmap-setup-kanji-sys を使う。
  • TeX Live 2012 では luaotfload-tool がないので TEXMFDIST/scripts/luaotfload/mkluatexfontdb.lua を直接呼び出す。
  • TeX Live 2012 では llmk が動かないのでインストールしない。

イメージサイズ

scheme-full で TeX Live を丸ごとコンテナ化しているイメージサイズは大きいです。それにしても,こうやって並べてみると,TeX Live の全体サイズが年々肥大化しているのが分かりますね……。

REPOSITORY TAG SIZE
doratex/tlarchive 2012frozen 1.90 GB
doratex/tlarchive 2013frozen 2.03 GB
doratex/tlarchive 2014frozen 2.27 GB
doratex/tlarchive 2015frozen 2.38 GB
doratex/tlarchive 2016frozen 2.68 GB
doratex/tlarchive 2017frozen 2.94 GB
doratex/tlarchive 2018frozen 3.22 GB
doratex/tlarchive 2019frozen 3.74GB

参考文献

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした