LaTeX のコードで書かれた図や数式*1から「タイトな」―すなわち図のある領域のみからなり無駄な余白のない―画像ファイルを作成する方法の一つとして preview パッケージを使うというものがある。
preview パッケージの概要
\documentclass{article} \usepackage[active,tightpage]{preview} \begin{document} \begin{preview} $a + b = c$ \end{preview} \end{document}
上掲のソースのように、画像として切り出したい部分を preview 環境の中に入れる。この文書を次にあげる様々な方法を用いて PNG 形式等の画像ファイルを生成できる。(以下のコマンドラインの中で「600」は dpi 値。)
- LaTeX で DVI に変換(
latex test.tex
)後、dvipng で PNG 画像に変換(dvipng -D 600 test.dvi
)する。*2 - LaTeX で DVI に変換(
latex test.tex
)後、dvips で PS 文書に変換(dvips test.dvi
((W32TeX の場合は「-Pdl
」を付けた方がよい。)))する。その後、次のように Ghostscript を起動して PNG 画像(オプションの値により別形式も可能)に変換する。((Ghostscript のコマンド名をgs
とする。なお、preview パッケージの方式では敢えて EPS 形式にしていないので、EPS 形式からの変換方法とは異なることに注意。))
gs -sDEVICE=png16m -dTextAlphaBits=4 -r600 -dGraphicsAlphaBits=4 -dSAFER -q -dNOPAUSE -sOutputFile=test%d.png test.ps
- pdfLaTeX/XeLaTeX/LuaLaTeX で PDF 文書に変換(
pdflatex test.tex
)して、それを PNG 画像(など)に変換(convert -density 600 test.pdf test.png
*3)する。
(ここでは詳細を略すが文書中に複数の preview 環境を入れると、「複数の画像を綴った形の」DVI/PS/PDF 文書が生成され、そこから同じ方法で複数の画像ファイルを得られる。)
例の test.tex の場合、次のような画像が得られる。*4
dvipdfmx で使えるようにしてみた
ところで、上掲のリストを見ると、dvipdfmx がサポートされていないことが判る。普段 dvipdfmx を使っていて特有の設定(フォントマップ等)を利用している人にとっては、dvipdfmx で preview パッケージが使えたら便利かもしれない。というわけでドライバファイルを作ってみた。
- prdvipdfmx.def 等(gist/zr-tex8r)
このファイル prdvipdfmx.def を TeX から見える場所に置いて、preview パッケージの読込で、tightpage
より前に dvipdfmx
というオプションを付ければよい。((順番を間違えるとエラーになる。なお、tightpage
を使わない場合は、preview パッケージはそもそもドライバ依存の動作をしないことに注意。ちなみに、preview にはもともと dvips
、xetex
、pdftex
のドライバ指定オプションがあるが、この 3 つしか選択肢がなく必ず自動判別が効くので指定は不要である。prdvipdfmx.def が存在しても、DVI 出力の LaTeX での既定のドライバは dvips
のままである。また、実装の都合で、dvipdfmx
オプションについてはグローバルオプションからの継承が行われない。))
実際に例を示す。折角 dvipdfmx を使うので、pLaTeX の縦書きを試してみる。((ただし縦書きモードのまま preview 環境に入るのは恐らく上手くいかないので、横書きモードで preview に入りその中で <t>
指定の minipage 等で縦書きに切り替えるのが安全だろう。))
% pLaTeX 文書 \documentclass[a4paper]{jsarticle} \usepackage{plext} \usepackage[active,dvipdfmx,tightpage]{preview} \begin{document} \begin{preview}\begin{minipage}<t>{6zw} 難波津に\\ 咲くやこの花\\ 冬籠り\\ 今を春辺と\\ 咲くやこの花 \end{minipage}\end{preview} \end{document}
この文書について、普通に「platex test2.tex
」→「dvipdfmx test2.dvi
」で PDF に変換した後、「convert -density 300 test2.pdf test2.png
」で次のような PNG 画像に変換できる。
画像ファイルとしての PDF
画像ファイルを得るために、上の例では最後に PDF を PNG に変換した。ところで、もしその画像を取り込む先が LaTeX 文書である場合は、graphicx パッケージで PDF 画像を取り込むことができるので、PNG 等のラスタ画像形式に変換するべきでない。といっても、今の話では、「画像」自体が LaTeX で表現できるものである(つまり画像のソースをそのまま取込元の文書に書けば同じことになるはず)から、そういう使い方は有用でないと思われるかも知れない。しかし例えば、pLaTeX で作成した「画像」を pdfLaTeX の文書で取り込むといった使い方は、片方のエンジンでは済まない場合には有効であろう。例えば次のようなことができる。
% pdfLaTeX document \documentclass[a4paper]{article} \usepackage{graphicx} \pagestyle{empty} \begin{document} \begin{figure}[!h]\centering % Includes the output from pLaTeX as an image \includegraphics{sample-preview-2.pdf} \caption{An example of vertical writing} \end{figure} \end{document}