昨年,ラムダノートの鹿野さんが,TeXConf 2018 および TeX & LaTeX Advent Calendar 2018 の4日目の記事で,モダンな TeX 環境における EPS ファイルの活用法について述べておられました。
この記事中で,eps2pgf というツールが紹介されていました。
同じことを考える人はいるもので、すでにeps2pgfというJava製の変換ツールを作っている人が過去にいました(参考)。 現在はSourceforgeにポストされているもののソースもない状態で、メンテもされてなさそうなんですが、とりあえずダウンロードして使ってみるとそれなりに満足のいく結果が得られました。
この eps2pgf というツールは,10年以上前の Java 製ツール(更新日付を見ると2008年8月でした)ですが,現在は Status: Abandoned
となっており,開発は長らく停止しているようです。Apache ライセンスではありますがソースは行方不明です。
ただ,今でも結構使えるありがたいツールではあります(EPS を PGF ソースに変換できると何が嬉しいのかは鹿野さんの記事を参照)。とはいえこのためだけに JVM をインストールするのも面倒なので,JVM とこのツールをパッキングした Docker コンテナを作ってみました。
Java の Docker イメージとしてどれを選ぶか?
Docker Hub には,Java (JRE, JDK) のイメージが公式なやつだけでもたくさんあり,どれを選べばよいか迷ってしまいます。次の記事にそれぞれの特徴や選択基準がわかりやすくまとめられていました。
今回は,
- 10年以上前の Java 製ツールを動かしたいだけであるから,Java のバージョンは最新でなくて問題ない。
- JDK は不要,JRE だけでOK。
- だからできるだけサイズが小さいものを選びたい。
というわけで,
- Alpine Linux ベース
- OpenJDK
- Java 8
- JRE のみ
- ファイルサイズは 84.9 MB(2019年12月現在)と軽量
である openjdk:8-jre-alpine
を選びました。
使い方
完成したイメージは Docker Hub に doratex/eps2pgf としてアップロードしてあるので,
$ docker pull doratex/eps2pgf
とすれば pull できます。
コンテナ内では /workdir
が作業ディレクトリとなるので,それをカレントディレクトリと bind マウントして使うのを想定しています。
alias eps2pgf="docker run --rm \
--mount type=bind,src=\"\$(pwd)\",dst=/workdir \
doratex/eps2pgf"
などとエイリアスを設定しておくと楽でしょう。Docker イメージの ENTRYPOINT
として eps2pgf.jar
のラッパースクリプトを指定してありますので,このエイリアスが設定されている下で
$ eps2pgf tiger.eps -o tiger.pgf
などとすれば,EPS 図版を PGF ソースに変換できます。
マニュアル
オリジナルの eps2pgf.jar
のマニュアルは,SourceForge のレポジトリのアーカイブから入手できます。Docker コンテナ内の /eps2pgf/doc/
にも収録されていますので,
$ docker run --rm \
--mount type=bind,src="$(pwd)",dst=/workdir \
--entrypoint /bin/cp \
doratex/eps2pgf \
-p /eps2pgf/doc/eps2pgf_manual.pdf .
などとしてカレントディレクトリに取り出すこともできます。
Dockerfile
このイメージを作成するために用意した Dockerfile は以下の通りです。
FROM openjdk:8-jre-alpine
LABEL maintainer="doraTeX <taylorkgb [at] gmail.com>"
WORKDIR /workdir
RUN apk upgrade --update && \
mkdir /eps2pgf && \
cd /eps2pgf && \
wget -q https://excellmedia.dl.sourceforge.net/project/eps2pgf/Eps2pgf/Eps2pgf%200.7.0/eps2pgf-0.7.0.zip && \
unzip eps2pgf-0.7.0.zip && \
rm eps2pgf-0.7.0.zip && \
cd /usr/local/bin && \
printf "%s\n" \
"#!/bin/sh" \
"java -jar /eps2pgf/eps2pgf.jar \"\$@\"" \
> eps2pgf && \
chmod +x eps2pgf
ENTRYPOINT ["eps2pgf"]