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 属于同一系列,但通常不直接调用。
dvipdfmx document.dvi # → document.pdf
dvipdfmx -p a4 -o out.pdf document.dvi| 选项 | 作用 |
|---|---|
-o FILE | 输出文件名(- 表示标准输出);默认由输入名决定 |
-p SIZE | 按名称指定纸张大小:a4、letter、a3、legal 等 |
-V N | PDF 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 提供)处理。
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”。ptex2pdf 把这两步合成一个命令:先运行 pTeX 系列引擎,再自动调用 dvipdfmx。它是 texjporg(日文 TeX 开发社区)和 Norbert Preining 编写的 texlua 脚本,最初是为了让 TeXworks 能方便地选择日文引擎。
引擎通过 组合 flag 来选择。什么都不加时是 ptex;-l 选择 LaTeX 格式;-u 选择 upTeX 系列;-e 选择 e-pTeX 系列。例如日文论文常用的 upLaTeX 是 -l -u。
| Flag | 使用的引擎 |
|---|---|
(なし / 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 engine 选项,用 -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 specials 没有丢失。 - 日文文档时:
ptex2pdf -l -u很方便,但真正要保证的是uplatex加dvipdfmx这两步路线成功。 - 名称和位置: 让 DVI、PDF、
.synctex.gz的 basename 保持一致;若输出到别的目录,也要让构建工具统一指定路径。