严格来说,LaTeX 源代码可以直接生成两种格式:

  • DVI 使用 latex,这是最早被支持的格式;

  • PDF 使用 pdflatex,这是较新的格式。

使用互联网自由可得的其他软件,你可以轻松地将 DVI 和 PDF 转换为其他文档格式。特别是,你可以使用 LaTeX 发行版中包含的软件获得 PostScript 版本。一些 LaTeX 集成开发环境(IDE)会给你提供直接生成 PostScript 版本的选项(即使它内部使用 DVI 作为中间步骤,例如:LaTeX → DVI → PS)。也可以通过从 DVI 创建 PDF,反之亦然。虽然从 DVI 创建文件再转换似乎不太合理,但一些用户可能需要这种方式,因为,正如你在前几章中看到的,生成的格式取决于你想要包含的图像格式(DVI 使用 EPS 格式,PDF 使用 PNG 和 JPG 格式)。在这里,你将找到关于不同格式的章节,并描述如何获得它们。

其他格式
还可以生成其他格式,如 RTF(可以在 Microsoft Word 中使用)和 HTML。然而,这些文档是由解析和解释 LaTeX 文件的软件生成的,无法实现所有 DVI 和 PDF 输出所提供的功能。尽管如此,它们确实可以工作,并且对于与不使用 LaTeX 编辑文档的同事进行协作是非常重要的工具。

工具安装
本章介绍了许多第三方工具;其中大多数是独立于 TeX 发行版安装的。

一些工具是 Unix 特定的(*BSD、GNU/Linux 和 Mac OS X),但也可能能够在 Windows 上使用。如果你有选择,通常在 Unix 系统上使用命令行工具会更容易。

某些工具可能已经安装。例如,你可以检查 dvipng 是否已安装并准备好使用(仅限 Unix):

type dvipng

这些工具中的大多数可以通过你的包管理器或 portage 树(仅限 Unix)安装

预览模式
本节描述了如何使用 LaTeX 包 preview 生成 LaTeX 页面或页面特定部分的截图。截图非常有用,例如,如果你想在演示文稿中使用你喜欢的幻灯片软件(如 PowerPoint、Keynote 或 LibreOffice Impress)插入 LaTeX 生成的公式。首先,确保你已经安装preview 包,详见安装额外包部分。

假设你想要对以下公式进行截图:

π = 12 k = 0 ( 3 ) k 2 k + 1 \pi = \sqrt{12}\sum_{k=0}^{\infty} \frac{(-3)^{-k}}{2k+1}

你可以在 preview 环境中编写此公式:

\documentclass{article}
\usepackage[active]{preview}
\begin{document}
\begin{preview}
\[
\pi = \sqrt{12}\sum^\infty_{k=0} \frac{ (-3)^{-k} }{ 2k+1 }
\]
\end{preview}
\end{document}

注意包声明中的 active 选项,以及包围公式代码的 preview 环境。如果没有这两者中的任何一个,你将无法得到输出。

此包对于将特定部分导出到其他格式,或生成图形(例如使用 PGF/TikZ)并将其包含在其他文档中也非常有用。你还可以自动化特定环境的预览:

\usepackage[active,tightpage]{preview}
\PreviewEnvironment{lstlisting}
\setlength{\PreviewBorder}{10pt}%

% ...

\begin{lstlisting}
int main()
{
        /* ... */
}
\end{lstlisting}

这将生成一个 PDF,其中仅包含代码列表的内容,页面布局将取决于源代码的形状。

转换为 PDF

直接生成 PDF

pdflatex my_file

从 DVI 转换为 PDF

dvipdfm my_file.dvi

这将创建 my_file.pdf。另一种方法是通过生成 PS 文件:

dvi2ps myfile.dvi
ps2pdf myfile.ps

你也将得到一个名为 my_file.ps 的文件,可以删除它。

合并 PDF

如果你创建了不同的 PDF 文档,并且想将它们合并成一个单一的 PDF 文件,可以使用以下命令行命令。你需要安装 Ghostscript:

使用 Windows

gswin32 -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=Merged.pdf -dBATCH 1.pdf 2.pdf 3.pdf

使用 Linux

gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=Merged.pdf -dBATCH 1.pdf 2.pdf 3.pdf

另外,PDF-Shuffler 是一个小型的 Python-GTK 应用程序,帮助用户合并或拆分 PDF 文档,并通过交互式和直观的图形界面旋转、裁剪和重新排列页面。这个程序可能在你的 Linux 发行版的仓库中可用。

另一个可选的工具是 pdftk(或 PDF 工具包),这是一个命令行工具,可以以多种方式操作 PDF 文件。要合并一个或多个文件,使用:

pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf

使用 pdfLaTeX
注意:如果你将外部 PDF 文档合并到一个使用 pdflatex 编译的 LaTeX 文档中,使用 pdfpages 包会是一个更简单的选项,例如:

\usepackage{pdfpages}
...
\includepdf[pages=-]{Document1.pdf}
\includepdf[pages=-]{Document2.pdf}
...

D. Firth 提供了一个名为 pdfjam 的包,其中包含了三个简单的 shell 脚本,分别用于合并多个 PDF 文件(pdfjoin)、将多个页面放在一张物理纸张上(pdfnup)以及旋转页面(pdf90)。

XeTeX
你也可以使用 XeTeX(或者更精确地说,使用 XeLaTeX),它与 pdflatex 的工作方式相同:它直接从 LaTeX 源代码创建 PDF 文件。XeTeX 相对于标准 LaTeX 的一个优势是它对 Unicode 和现代排版技术(如 TrueType/OpenType 字体)的支持。有关更多细节,请查看其 Wikipedia 页面。

在 XeTeX 中自定义 PDF 输出(设置文档标题、作者、关键词等)是通过配置 hyperref 包来完成的。

从 PDF 转换为 PostScript
从 PDF:

pdf2ps my_file.pdf

从 DVI:

dvi2ps my_file.dvi

转换为 RTF
LaTeX 可以转换为 RTF 文件,然后可以在像 LibreOffice Writer 或 Microsoft Word 这样的文字处理软件中打开。这个转换是通过 latex2rtf 完成的,该工具可以在任何计算机平台上运行,但目前仅在 Windows、Linux 和 BSD 上得到积极支持,最后一次 Mac 更新是在 2001 年(通过 MacPorts 可以获得 OSX 的新版本)。该程序通过读取 LaTeX 源代码并模拟 LaTeX 程序的行为来工作。latex2rtf 支持 LaTeX 的大多数标准实现,如标准格式、一些数学排版、包含 EPS、PNG 或 JPG 图形以及表格。此外,它还有限度地支持一些包,如 variorefnatbib,但许多其他包不被支持。

latex2rtf 使用起来非常简单。Windows 版本有一个 GUI(l2rshell.exe),使用起来非常直观。所有平台都提供命令行版本,可以在例如 mypaper.tex 的文件上使用:

latex mypaper
bibtex mypaper # 如果使用了 bibtex
latex2rtf mypaper

在运行 latex2rtf 之前,需要先运行 latex 和(如果需要)bibtex,因为 .aux.bbl 文件需要用于生成正确的输出。转换的结果将生成 myfile.rtf,你可以在许多文字处理软件中打开该文件,如 Microsoft Word 或 LibreOffice。

转换为 HTML
有许多转换器可以将 LaTeX 转换为 HTML。一些转换器使用中间文件,然后将其转换为目标格式。

HEVEA

hevea mylatexfile

latex2html

latex2html -html_version 4.0,latin1,unicode -split 1 -nonnavigation -noinfo -title "MyDocument" MyDocument.tex

LaTeXML

latexmlc paper.tex --destination=paper.html

pdf2htmlEX

pdf2htmlEX [options] <input.pdf> [<output.html>]

pdf2htmlEX 可以将 PDF 转换为 HTML,而不会丢失文本或格式。它被设计为一个通用的 PDF 到 HTML 转换器,不仅限于 LaTeX 源生成的 PDF。LaTeX 用户可以先将 LaTeX 源代码编译为 PDF,然后通过 pdf2htmlEX 将 PDF 转换为 HTML。你可以在其 Wiki 页面上找到关于 pdf2htmlEX 的一些介绍。更多技术细节可以在 TUGboat 上的文章中找到:通过 pdf2htmlEX 进行在线发布的 HTML / PDF。该文章的图 3 给出了不同的在线 HTML 发布工作流程。

TeX4ht
TeX4ht 有许多选项和可能的配置,但对于基本的转换:

htlatex myfile.tex

通常会生成一个合理的 HTML 近似版本。该程序的介绍由原作者发表在 TUGboat 中 [1]。

bibtex2html
用于仅导出 BibTeX 文件。

bibtex2html mybibtexfile

转换为图像格式
有时,将 LaTeX 输出转换为图像格式以便在不支持 DVI 或 PDF 文件的系统中使用是很有用的,例如 Wikipedia。

图形有两类:

  • 矢量图形 可以任意缩放,因此不会丢失质量。SVG 是一种矢量格式。

  • 栅格图形 明确地定义每个像素。PNG 是一种栅格格式。

因此,通常首选矢量图形。尽管如此,仍然有一些情况使用栅格图形:

  • 目标系统不处理矢量图形,只支持栅格图形。

  • SVG 无法嵌入字体。因此,要么字体使用本地的 .ttf 或 .otf 字体进行渲染(这通常会改变输出),要么所有字符必须转化为矢量图形。这种方法会使得 SVG 文件变得庞大且缓慢。如果输入的 LaTeX 文件包含大量需要保留格式的文本,SVG 并不是一个很好的选择。

所以,SVG 适用于图形和少量文本。JPG 是一种广泛使用的栅格格式,但通常在文本处理上不如 PNG。

在某些情况下,只需使用 PDF 查看器中可用的工具简单地复制 PDF(或 PS)文件的区域(例如使用 LaTeX 排版公式并粘贴到演示文稿中)。然而,这通常无法提供足够的分辨率用于整页或大面积区域。

多个格式
pdftocairo
在 Poppler 工具集中有一个名为 pdftocairo 的工具。

pdftocairo -svg latexdoc.pdf output.svg

pdftocairo 还支持多种栅格图形格式。

矢量图形
pdf2svg
可以使用命令行工具 pdf2svg 直接将 PDF 转换为 SVG。

pdf2svg file.pdf file.svg

ps2svg
或者可以将 DVI 或 PDF 转换为 PS,如前所述,然后使用 bash 脚本 ps2svg.sh(由于所有用于该脚本的软件都是跨平台的,这也可以在 Windows 上执行,步骤指南可以写成教程)。

dvisvgm
也可以使用 dvisvgm,这是一个开源工具,将 DVI 转换为 SVG。

dvisvgm -n file.dvi

Inkscape
Inkscape 能够转换为 SVG、PDF、EPS 和其他矢量图形格式。

inkscape --export-area-drawing --export-ps=OUTPUT INPUT
inkscape --export-area-page --export-plain-svg=OUTPUT INPUT

栅格图形
JPEG
使用 Ghostscript 对 pdf2ps 创建的 PostScript 文件执行以下操作:

echo "quit" | gs -sDEVICE=jpeg -sOutputFile=document.jpg -r300 document.ps

MacOS:macTex 发行版附带了方便的命令行工具进行“打印”:

pdftoppm yourpdf.pdf -progress -jpeg yourpdf.jpg

pdftoppm 在操作上很灵活——你可以提供质量、尺寸等设置,满足典型用户的大部分需求。它还可以将 PDF 打印为 PNG 和 PPM 文件,更多细节可以查看该工具的手册。它在非交互式批处理任务中表现最好。

GIMP
在 GIMP 中打开文件。它会询问你要转换的页面,以及是否希望使用抗锯齿(如果你想获得类似屏幕显示的效果,请选择强抗锯齿)。根据需求尝试不同的分辨率,但 100 dpi 应该足够了。一旦在 GIMP 中获得图像,你可以根据需要进行后期处理并将其保存为 GIMP 支持的任何格式,例如 PNG。

dvipng
对于 DVI 文件,有一种方法是使用 dvipng。使用方式与 dvipdfm 相同。按常规运行 latex 生成 DVI 文件。现在,我们希望获得一个以像素为单位的字体大小公式。你需要将其转换为每英寸点数(dpi)。公式是:<dpi> = <font_px>*72.27/10。例如,如果你希望 X = 32,则 dpi 大小为 231.26。这个值将通过 -D 标志传递给 dvipng。要生成所需的 PNG 文件,请运行以下命令:

dvipng -T tight -D 231.26 -o foo.png foo.dvi

标志 -T 设置图像的大小。选项 tight 将只包括页面上的所有墨水内容。选项 -o 将输出保存到名为 foo.png 的文件中。

ImageMagick
ImageMagick 套件中的 convert 命令可以将 DVI 和 PDF 文件转换为 PNG。

convert input.pdf output.png

optipng
你可以使用 optipng 优化生成的图像,使其占用更少的空间。

转换为纯文本
如果你打算将 LaTeX 转换为纯文本用于拼写检查或统计字数,可能有更简单的方式 —— 首先阅读 Tips and Tricks。以下是可用的工具:

[detex]
大多数 LaTeX 发行版都附带 detex 程序,它可以删除 LaTeX 命令。它可以处理多文件项目,因此你只需要运行以下命令:

detex yourfile

(注意省略了 .tex 扩展名)。将输出重定向到文件:

detex yourfile > yourfile.txt

[catdvi]
如果你想保留格式,可以使用 DVI 到纯文本转换器,如 catdvi。示例:

catdvi yourfile.dvi | fmt -u

使用 fmt -u(在大多数 Unix 系统上可用)会去除文本对齐。


最后修改: 2025年04月23日 星期三 12:40