DVI 変換(dvipdfmx / dvips / ptex2pdf)

latex や日本語の platexuplatex は、PDF ではなく DVI という中間ファイルを出力します。これを実際に読める文書にするのが DVI 変換ツール です。PDF にするなら dvipdfmx、PostScript にするなら dvips、そして日本語では組版から PDF までを一括で行う ptex2pdf が定番。このページは、この 3 つと実務で使うオプションをまとめます。

DVI とは、なぜ変換するのか

DVI(device-independent) は、TeX が出力する「どの位置に、どの文字(グリフ)や罫線を置くか」を記録した中間形式です。名前のとおり 出力機器に依存せず、フォントの実体も埋め込まれていません。そのため軽量ですが、そのままでは表示・印刷・配布がしづらい。そこで用途に応じて変換します——画面・配布なら PDF、印刷工程や一部のパッケージ向けには PostScript です。DVI を作るコマンド側は「コンパイルコマンド」で扱っています。

dvipdfmx — DVI から PDF へ

dvipdfmx は、TeX Live 標準の DVI→PDF 変換器です。元になった dvipdfm は Mark A. Wicks が作り、それを CJK(中日韓)対応・フォント埋め込み・オブジェクトストリームなどに拡張したのが dvipdfmx(Jin-Hwan Cho、平田俊作らによる)。XeTeX が内部で使う xdvipdfmx は同系列ですが、こちらは直接呼ぶものではありません。

terminal
dvipdfmx document.dvi            # → document.pdf
dvipdfmx -p a4 -o out.pdf document.dvi
オプション働き
-o FILE出力ファイル名(- で標準出力)。既定は入力名から
-p SIZE用紙サイズを名前で指定:a4lettera3legal など
-V NPDF のマイナーバージョン(既定 5 = PDF 1.5)
-l横向き(用紙の縦横を入れ替える)
-s RANGE処理するページを限定:-s 1-10 など

dvips — DVI から PostScript へ

dvips(Tomas Rokicki 作)は DVI を PostScript(.ps に変換する古参のツールです。印刷所への入稿、EPS の生成、PostScript 前提の作図パッケージ(PSTricks など)で今も使われます。PDF が欲しいときは、できた .psps2pdf(Ghostscript 同梱)に通すのが定番の流れです。

terminal
dvips -t a4 -o document.ps document.dvi   # DVI → PostScript
ps2pdf document.ps                        # PostScript → PDF
オプション働き
-o FILE出力する PostScript のファイル名
-t PAPER用紙の種類:a4letterlegallandscape(横向き)など
-P NAMEプリンタ設定 config.NAME を読み込む(解像度やフォント設定)

ptex2pdf — 日本語を一発で PDF に

日本語では「uplatex で組版 → dvipdfmx で PDF 化」の二段を踏みます。これを 1 コマンドにまとめるのが ptex2pdf です。pTeX 系のエンジンを動かしたあと自動で dvipdfmx を呼びます。texjorg(日本語 TeX 開発コミュニティ)と Norbert Preining による texlua スクリプト で、もともとは TeXworks から日本語エンジンを手軽に選べるように作られました。

エンジンは フラグの組み合わせ で選びます。何も付けなければ ptex-l で LaTeX フォーマット、-u で upTeX 系、-e で e-pTeX 系。たとえば日本語論文の定番 upLaTeX は -l -u です。

フラグ使われるエンジン
(なし / none)ptex
-lplatex(pLaTeX)
-uuptex
-l -uuplatex(upLaTeX)
terminal
# upLaTeX で組版し、UTF-8 入力と SyncTeX を指定して PDF まで
ptex2pdf -l -u -ot '-kanji=utf8 -synctex=1' document.tex

エンジンや変換器へ細かい指定を渡すには、-ot '...' で TeX 側のオプションを、-od '...'dvipdfmx 側のオプションを与えます。-s を付ければ DVI で止め、-i で中間ファイルを残し、-output-directory で出力先を変えられます。

どれを使うか

  • PDF が目的(英語・欧文)latexdvipdfmx
  • PDF が目的(日本語)ptex2pdf -l -u … 一発が手軽。
  • 印刷入稿・EPS・PSTricksdvipsps2pdf
  • そもそも DVI を経由したくないpdflatex / lualatex で PDF を直接出す。

もっとも、これらを手で順番に打つことはまれです。実務では latexmk などの ビルドツール が、コンパイルの回数も DVI 変換も含めて面倒を見てくれます(latexmk(u)platexdvipdfmx の構成にも対応)。

DVI変換章の提出前点検

  • PDF提出なら: dvipdfmx 後のPDFを実際の提出先と同じビューアで開き、フォント埋め込み、用紙サイズ、しおりやリンクを確認します。
  • 印刷工程なら: dvips から作ったPostScriptを ps2pdf へ通す前後で、EPSやPostScript特殊命令が落ちていないかを見ます。
  • 日本語文書なら: ptex2pdf -l -u は便利ですが、最終的な責任は uplatexdvipdfmx の二段が通っているかにあります。
  • 名前と場所: DVI、PDF、.synctex.gz のベース名をそろえ、別ディレクトリへ出す場合はビルドツール側で一貫して指定します。