latex や日本語の platex・uplatex は、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 は同系列ですが、こちらは直接呼ぶものではありません。
dvipdfmx document.dvi # → document.pdf
dvipdfmx -p a4 -o out.pdf document.dvi| オプション | 働き |
|---|---|
-o FILE | 出力ファイル名(- で標準出力)。既定は入力名から |
-p SIZE | 用紙サイズを名前で指定:a4・letter・a3・legal など |
-V N | PDF のマイナーバージョン(既定 5 = PDF 1.5) |
-l | 横向き(用紙の縦横を入れ替える) |
-s RANGE | 処理するページを限定:-s 1-10 など |
dvips — DVI から PostScript へ
dvips(Tomas Rokicki 作)は DVI を PostScript(.ps) に変換する古参のツールです。印刷所への入稿、EPS の生成、PostScript 前提の作図パッケージ(PSTricks など)で今も使われます。PDF が欲しいときは、できた .ps を ps2pdf(Ghostscript 同梱)に通すのが定番の流れです。
dvips -t a4 -o document.ps document.dvi # DVI → PostScript
ps2pdf document.ps # PostScript → PDF| オプション | 働き |
|---|---|
-o FILE | 出力する PostScript のファイル名 |
-t PAPER | 用紙の種類:a4・letter・legal、landscape(横向き)など |
-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 |
-l | platex(pLaTeX) |
-u | uptex |
-l -u | uplatex(upLaTeX) |
# 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 が目的(英語・欧文) —
latex→dvipdfmx。 - PDF が目的(日本語) —
ptex2pdf -l -u …一発が手軽。 - 印刷入稿・EPS・PSTricks —
dvips→ps2pdf。 - そもそも DVI を経由したくない —
pdflatex/lualatexで PDF を直接出す。
もっとも、これらを手で順番に打つことはまれです。実務では latexmk などの ビルドツール が、コンパイルの回数も DVI 変換も含めて面倒を見てくれます(latexmk は (u)platex+dvipdfmx の構成にも対応)。
DVI変換章の提出前点検
- PDF提出なら:
dvipdfmx後のPDFを実際の提出先と同じビューアで開き、フォント埋め込み、用紙サイズ、しおりやリンクを確認します。 - 印刷工程なら:
dvipsから作ったPostScriptをps2pdfへ通す前後で、EPSやPostScript特殊命令が落ちていないかを見ます。 - 日本語文書なら:
ptex2pdf -l -uは便利ですが、最終的な責任はuplatexとdvipdfmxの二段が通っているかにあります。 - 名前と場所: DVI、PDF、
.synctex.gzのベース名をそろえ、別ディレクトリへ出す場合はビルドツール側で一貫して指定します。