DVI 转换工具

latex 命令以及日文环境常用的 platex / uplatex 输出的不是 PDF,而是名为 DVI 的中间文件。把它转换成真正可阅读文档的工具就是 DVI 转换器:生成 PDF 用 dvipdfmx,生成 PostScript 用 dvips,而日文文档常用 ptex2pdf 在一个命令中完成排版和转换。本页介绍这三者以及实际会用到的选项。

DVI 是什么,为什么要转换

DVI(device-independent) 是 TeX 输出的中间格式,记录的是 *哪个 glyph 或 rule 放在什么位置*。正如名称所示,它 不依赖输出设备,也不嵌入实际字体。因此文件较轻,但不适合直接查看、打印或分发,所以要按目标转换:屏幕阅读和分发用 PDF,印刷流程或某些 package 用 PostScript。生成 DVI 的命令见“编译命令”。

dvipdfmx — 从 DVI 到 PDF

dvipdfmx 是 TeX Live 标准的 DVI 到 PDF 转换器。它的前身 dvipdfm 由 Mark A. Wicks 编写;dvipdfmx 是由 Jin-Hwan Cho、Shunsaku Hirata 等人扩展的版本,加入了 CJK 支持、字体嵌入、对象流等功能。XeTeX 内部使用的 xdvipdfmx 属于同一系列,但通常不直接调用。

terminal
dvipdfmx document.dvi            # → document.pdf
dvipdfmx -p a4 -o out.pdf document.dvi
选项作用
-o FILE输出文件名(- 表示标准输出);默认由输入名决定
-p SIZE按名称指定纸张大小:a4lettera3legal
-V NPDF minor version(默认 5,即 PDF 1.5)
-l横向(交换纸张宽度和高度)
-s RANGE限制处理页码,例如 -s 1-10

dvips — 从 DVI 到 PostScript

dvips(Tomas Rokicki 编写)是把 DVI 转换为 PostScript(.ps 的老牌工具。它现在仍用于印刷提交、生成 EPS,以及依赖 PostScript 的绘图 package(如 PSTricks)。需要 PDF 时,常见流程是把生成的 .ps 交给 ps2pdf(随 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”。ptex2pdf 把这两步合成一个命令:先运行 pTeX 系列引擎,再自动调用 dvipdfmx。它是 texjporg(日文 TeX 开发社区)和 Norbert Preining 编写的 texlua 脚本,最初是为了让 TeXworks 能方便地选择日文引擎。

引擎通过 组合 flag 来选择。什么都不加时是 ptex-l 选择 LaTeX 格式;-u 选择 upTeX 系列;-e 选择 e-pTeX 系列。例如日文论文常用的 upLaTeX 是 -l -u

Flag使用的引擎
(なし / 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 engine 选项,用 -od '...'dvipdfmx 选项。加 -s 可在 DVI 阶段停止,-i 会保留中间文件,-output-directory 可改变输出目录。

该用哪一个

  • 目标是 PDF(英文/西文)latexdvipdfmx
  • 目标是 PDF(日文) — 直接用 ptex2pdf -l -u … 最省事。
  • 印刷提交、EPS、PSTricksdvipsps2pdf
  • 完全不想经过 DVI — 用 pdflatex / lualatex 直接输出 PDF。

不过实际工作中很少手动按顺序输入这些命令。latexmk构建工具 会替你处理编译次数和 DVI 转换(latexmk 也支持 (u)platex + dvipdfmx 的配置)。

提交前的 DVI 转换检查

  • 提交 PDF 时:dvipdfmx 之后,用实际提交时相同的查看器或上传目标打开 PDF,检查字体嵌入、纸张大小、书签和链接。
  • 印刷流程时: 在把 dvips 生成的 PostScript 交给 ps2pdf 前后,确认 EPS 和 PostScript specials 没有丢失。
  • 日文文档时: ptex2pdf -l -u 很方便,但真正要保证的是 uplatexdvipdfmx 这两步路线成功。
  • 名称和位置: 让 DVI、PDF、.synctex.gz 的 basename 保持一致;若输出到别的目录,也要让构建工具统一指定路径。