texdoc / texfot / Ghostscript / dvisvgm

除了编译之外,TeX 安装还附带一些让日常工作更顺手的小工具:用 texdoc 打开软件包手册,用 texfot 把编译输出收束到关键信息,用 Ghostscript 生成或压缩 PDF,用 dvisvgm 把输出转换成适合 Web 的 SVG。本页是这四个工具的速查表。

把这四个工具放进写作流程

本章的目标不是背下四条命令,而是知道在写作文档的每个阶段该找哪个工具。添加新软件包之前,先用 texdoc 阅读手册。构建输出变得嘈杂时,用 texfot 把警告浮现出来。提交用 PDF 过大时,用 Ghostscript 压缩,然后检查链接和嵌入字体。要把公式或图放到 Web 上时,用 dvisvgm 导出 SVG,并在浏览器中高倍缩放检查。按这个顺序使用,调研、写作、收尾和发布就会连成一个流程。

texdoc — 打开软件包手册

大多数 CTAN 软件包都带有详细手册(PDF),安装后它已经在你的机器上。输入 texdoc PACKAGE,它会找到该手册并用查看器打开;优点是可离线阅读,而且内容与实际安装的版本一致。它随 TeX Live 提供(最初由 Manuel Pégourié-Gonnard 编写);同一数据库也可以在 texdoc.org 浏览。

terminal
texdoc booktabs      # booktabs の説明書を開く / open booktabs’ manual
texdoc -l siunitx    # 候補を一覧表示(開かない)/ list matches instead of opening

默认情况下,它会打开最匹配的一项。加上 -l (--list) 时,不会直接打开,而是列出候选项供你选择。-s (--showall) 会扩大结果范围,把评分较低的候选项也显示出来。给报告或论文某一章添加软件包时,先用 texdoc PACKAGE 确认加载命令、典型示例和需要注意的选项;然后只把必要的最小设置复制到导言区。这样配置不会越堆越乱。

texfot — 只保留重要消息

一次 TeX 运行会吐出大量消息,真正需要看的警告或错误很容易滚过去。texfot(Karl Berry 编写的公有领域 Perl 脚本)会运行引擎,并把记录过滤到“值得注意”的行:错误、警告、overfull/underfull 盒子等。它会原样传递退出码,因此不会破坏构建工具对成功与否的判断。

terminal
texfot pdflatex document.tex     # 出力を要約しつつコンパイル / compile with a quiet, filtered log

要与 latexmk 配合使用,请在配置文件中用 texfot 包住引擎调用:

terminal
# .latexmkrc
$pdflatex = 'texfot pdflatex %O %S';

Ghostscript — 生成和压缩 PDF

gs (Ghostscript) 是 PostScript/PDF 解释器,也是 ps2pdf 底层运行的程序。指定 -sDEVICE=pdfwrite 后它会写出 PDF,因此可用于把 PS 转成 PDF、合并多个 PDF,以及压缩过大的 PDF(降低其中图像的采样分辨率)。质量通过 -dPDFSETTINGS 预设选择,例如 /screen(屏幕检查)、/ebook(中等)、/printer(面向打印)、/prepress(面向印前)。这些预设会重建 PDF,并可能改变输入内容。提交或交付印刷用 PDF 时,压缩后务必检查图像可读性、嵌入字体、链接和页面尺寸。

terminal
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH \
   -sOutputFile=small.pdf big.pdf

dvisvgm — DVI 转 SVG

dvisvgm(Martin Gieseking 编写)把 DVI 转换为 SVG(矢量图形)。它也可以接受 EPS;加上 --pdf 时也可接受 PDF 输入。想把任意缩放都保持清晰的公式或图放到 Web 上时,它非常适合。默认情况下字体会作为 SVG 嵌入,但指定 --font-format=woff2(或 woffttf)可切换为 Web 字体格式。使用 PDF 输入时,取决于处理路径,文字可能会变成路径而不是嵌入字体;先决定从 DVI 还是 PDF 转换,然后检查实际浏览器渲染。用 -p (--page) 选择页面。

terminal
latex equation.tex                       # → equation.dvi
dvisvgm --font-format=woff2 equation.dvi # → equation.svg
dvisvgm --pdf figure.pdf                 # PDF を入力にする / convert a PDF

排查常见失败

  • 如果 texdoc 打开了错误的手册,运行 texdoc -l PACKAGE,查看候选项,并按编号选择目标 PDF。
  • 如果 texfot 没有显示问题但 PDF 仍然不对,暂时去掉 texfot,阅读原始日志,确认有用上下文是否被过滤掉。
  • 如果用 Ghostscript 压缩后链接或书签消失,PDF 重建过程可能丢掉了不可见信息。提交前请比较原始 PDF 和压缩后的 PDF。
  • 如果 dvisvgm --pdf 把文字变成路径,SVG 就不会保留可搜索或可替换字体的文本。需要可编辑的 Web 图形时,先尝试从 DVI 转换。

何时使用各工具

  • 查找软件包的用法texdoc PACKAGE
  • 让嘈杂日志安静下来texfot(配合 latexmk)。
  • PDF 过大 / 将 PS 转成 PDFGhostscript-dPDFSETTINGS)。
  • 把公式或图以 SVG 放到 Web 上dvisvgm