导入外部图形

LaTeX

你可以使用 graphicx 包来导入外部图形。最重要的命令是 \includegraphics。LaTeX 将图像视为普通文本,即作为具有特定高度和宽度的框。

\documentclass{article}
\usepackage{graphicx}
\begin{document}
The following image does not show any wombats
\includegraphics[height=\baselineskip]{example-image}.

\includegraphics[height=3cm]{example-image-a}\includegraphics[width=5cm]{example-image-b}

\includegraphics[height=3cm]{example-image-a} \includegraphics[width=5cm]{example-image-b}
\end{document}

graphicx 包文档列出了宽度 (width) 和高度 (height) 选项以及其他选项。

使用 pdflatex 时,支持多种图形格式:pdf、png 和 jpg。现代的 LaTeX 安装可以间接使用 EPS 文件。

在 DVI 模式下,LaTeX 只支持 EPS 文件。


图像对齐

你可以将图像在矩阵中对齐。你只需要为图像选择合适的宽度。

\documentclass{article}
\usepackage{graphicx}
\usepackage{blindtext}
\usepackage{showframe}
\begin{document}
\begin{center}
\includegraphics[width=.3\linewidth]{example-image}\quad\includegraphics[width=.3\linewidth]{example-image-a}\quad\includegraphics[width=.3\linewidth]{example-image-b}
\\[\baselineskip] % 添加垂直行间距
\includegraphics[width=.3\linewidth]{example-image}\quad\includegraphics[width=.3\linewidth]{example-image-a}\quad\includegraphics[width=.3\linewidth]{example-image-b}
\end{center}
\end{document}

三个图像在一行中,每个图像的宽度为可用行宽的 30%,相对于下方的文本居中。

不同的图像可以轻松对齐为矩阵形状。

如果你想添加标题并让 LaTeX 跟踪编号,可以查看浮动元素部分。


图形转换

注意
你也可以查看“导出到其他格式”部分,了解更多可能性。

epstopdf

你可以使用 epstopdf 工具将 EPS 文件转换为 PDF,该工具包含在同名包中。这个工具实际上是在加载 graphicx 包时,pdflatex 在后台调用来将 EPS 文件转换为 PDF。这个过程对用户是完全透明的。

你可以使用命令行批量转换文件。在 Bourne Shell(Unix)中,可以通过以下命令完成:

$ for i in *.eps; do epstopdf "$i"; done

在 Windows 中,可以通过在与图像相同目录下的批处理文件(带 .bat 扩展名的文本文件)中输入以下行来转换多个文件:

for %%f in (*.eps) do epstopdf %%f

然后可以从命令行运行该文件。

如果 epstopdf 生成了一个包含小图形的整个页面,请使用:

$ epstopdf --gsopt=-dEPSCrop foo.eps

或者尝试使用 ps2pdf 工具(应随 Ghostscript 安装)来裁剪最终的 PDF:

$ ps2pdf -dEPSCrop foo.eps

eps2eps

当上述方法都无法解决问题时,可以使用 eps2eps 工具简化 EPS 文件,然后再尝试其他转换方法:

$ eps2eps input.eps input-e2.eps

这将把所有字体转换为预绘制的图像,这在提交出版物的手稿时有时是需要的。然而,缺点是字体不会被转换为线条,而是转换为位图,这会降低字体的质量。

imgtops

imgtops 是一个轻量级的图形实用工具,用于在栅格图形(如 JPG、PNG 等)和 EPS/PS 文件之间进行转换。

Inkscape

Inkscape 也可以将文件在多种格式之间转换,既可以通过图形用户界面(GUI)完成,也可以通过命令行完成。例如,要将 SVG 图像转换为 PDF,可以执行以下命令:

$ inkscape -z -D --file=input.svg --export-pdf=output.pdf

你可以在 LaTeX 文件中运行此命令,使用 Template:LaTeX/package 包(当运行 (pdf)latex 并使用 --shell-escape 选项时)可以通过 Inkscape 的 pdf+tex 导出选项来完成此操作,或者使用一个简单的宏。有关更多详细息,请参见“如何在 LaTeX 中包含 SVG 图表?”—— Stackexchange。请参阅“导出到其他格式”获取更多详情。

pstoedit

要正确编辑 EPS 文件,可以使用 pstoedit 将其转换为可编辑格式。例如,要获得一个 Xfig 可编辑文件,可以执行以下命令:

$ pstoedit -f fig input.eps output.fig

要获取一个 SVG 文件(可以使用任何矢量图形工具如 Inkscape 编辑),可以执行:

$ pstoedit -f plot-svg input.eps output.svg

有时 pstoedit 无法生成目标格式(例如,当 EPS 文件包含剪切息时)。

PDFCreator

在 Windows 下,PDFCreator 是一个开源软件,可以创建 PDF 和 EPS 文件。它安装了一个虚拟打印机,可以从其他具有“打印...”选项的软件中访问(几乎任何程序都可以)。

栅格图形转换器

  • Sam2p(convert)

  • ImageMagick(convert)

  • GraphicsMagick(gm convert)

这三个程序的操作方式类似,能够在大多数图形格式之间进行转换。然而,Sam2p 是这三者中最新的,它似乎提供了最佳的质量,并且生成的文件最小。

PNG alpha 通道

如果你在 PNG 格式中包含具有 alpha 通道的图形,Acrobat Reader 有时会在显示颜色时出现问题。你可以通过去除 alpha 通道来解决这个问题。在 Linux 下,可以使用 ImageMagick 程序中的 convert 来实现:

convert -alpha off input.png output.png

将彩色 EPS 转换为灰度

有时需要将彩色 EPS 图形转换为黑白或灰度,以满足出版要求。这可以使用 Ghostscript 包中的 eps2eps 和其他程序来完成:

$ eps2eps input.eps input-e2.eps
$ pscol -0gray input-e2.eps input-gray.eps

第三方图形工具

我们不会在这里讨论从 LaTeX 代码中创建的过程性图形(如 TikZ、PSTricks、MetaPost 等)。有关此主题的介绍,请参见“介绍过程性图形”。

对于图形,你应该偏好使用矢量图形而不是栅格图形,因为矢量图形具有更高的质量。栅格图形仅应在需要使用照片时使用。任何类型的图表应该使用矢量图形。

如我们之前所见,LaTeX 处理:

  • EPS 和 PDF 用于矢量图形;

  • PNG 和 JPG 用于栅格图形。

如果某些工具无法保存为这些格式,您可能需要在导入之前将它们转换为这些格式。

矢量图形

Dia

Dia 是一个跨平台的图形绘制工具,支持导出 EPS 图像,或使用 TikZ 包生成 LaTeX 绘图。

Inkscape

另一个创建矢量图形的程序是 Inkscape。它可以在 Windows、Linux 或 Mac OS X(需要 X11)上本地运行。它支持可伸缩矢量图形(SVG)文件,尽管它也可以导出到许多可以在 LaTeX 文件中使用的格式,如 EPS 和 PDF。从 0.48 版本开始,Inkscape 提供了一个组合的 PDF/EPS/PS+LaTeX 输出选项,类似于 Xfig 提供的选项。Inkscape 还提供了保存为 LaTeX 可以理解的 PDF 格式的指令,并自动管理图像中的文本样式和大小[1]。今天,已经有了 svg 包[2],它提供了 \includesvg 命令,可以直接在 LaTeX 文档中转换并包含 SVG 图形。你也可以查看这个扩展的例子。

一个非常有用的插件是 textext,它可以导入 LaTeX 对象。这可以用来将数学符号或 LaTeX 字体插入到图形中(这些图形可以随后导入到 LaTeX 文档中)。

Ipe

Ipe 是一个扩展的绘图编辑器,它是免费的矢量图形编辑器,可以生成 PDF 或 EPS 格式的图形。与 Xfig 不同,Ipe 在屏幕上显示 LaTeX 字体的正确大小,这使得在正确的位置放置文本标签更容易。Ipe 还具有多种吸附模式(例如,吸附到点、线或交点),可用于几何构造。

lpic

另一个解决方案是 lpic 包[2],它允许将 TeX 注释导入到图形中。请参见“图形中的标签”部分。

LibreOffice

也可以使用 LibreOffice Draw 将矢量图形导出为 EPS 格式,LibreOffice 是一款开源办公套件,适用于 Windows、Linux 和 Mac。

TpX

矢量编辑器 TpX 将几何对象与文本对象分开。几何对象保存为 PDF 文件,其余部分保存在 .TpX 文件中,由 LaTeX 处理。用户只需在 TpX 编辑器中创建图形,然后通过命令 \input{...TpX} 从 LaTeX 文件中调用 .TpX 文件。

Xfig

Xfig 是一个基本的程序,可以生成矢量图形,并导出为 LaTeX 格式。它可以在 Unix 平台上安装

在 Microsoft Windows 系统上,Xfig 只能通过 Cygwin-X 安装;然而,这需要快速的互联网连接和大约 2GB 的计算机空间。使用 Cygwin,启动 Xfig 之前,首先需要启动“Start X - Server”,然后启动“xterm”以打开终端。在终端中输入“xfig”并按回车键。

另外,WinFIG 是在 Windows 计算机上尝试实现 Xfig 功能的程序。

有多种方法可以使用 Xfig 为 LaTeX 文档创建图形。一种方法是将图形导出为 LaTeX 文档。然而,这种方法有一些缺点:线条只能绘制为 30 和 45 度的倍数,带箭头的线条只能绘制为 45 度的倍数,许多曲线不支持等。

另一方面,导出为 PDF/LaTeX 或 PS/LaTeX 文件提供了更多的绘制灵活性。方法如下:

  1. 在 Xfig 中创建图形。每当需要 LaTeX 文本(如数学公式)时,在文本框中输入 LaTeX 字符串。

  2. 使用“编辑”工具打开每个文本框的属性,并将“特殊标志”字段的选项更改为“特殊”。这会告诉 LaTeX 在打开图形时解析这些文本框。

  3. 转到“文件 -> 导出”,将文件导出为 PDF/LaTeX(两部分)或 PS/LaTeX(两部分),具体取决于您使用 pdflatex 还是 pslatex 来编译文件。

  4. 在 LaTeX 文档中插入图像的地方,使用以下命令,其中“test”是图像的名称:

\begin{figure}
 \centering
 \input{test.pdf_t}
 \caption{Your figure}
 \label{figure:example}
\end{figure}

请注意,这与包含图片类似,只是我们使用 \input 而不是 \includegraphics。如果导出的是 PS/LaTeX,包含的文件扩展名将是 .pstex_t 而不是 .pdf_t

确保在文件中包含 graphicxcolor 包,并将 \usepackage 命令放在 \documentclass 命令后面,如下所示:

\usepackage{graphicx}
\usepackage{color}

这就完成了!

有关更多使用 Xfig 与 LaTeX 的详细息,可以参考 Xfig 用户手册的这一章节。

其他工具

商业矢量图形软件,如 Adobe Illustrator、CorelDRAW 和 FreeHand,通常用于读取和写入 EPS 图形。但是,这些产品仅限于 Windows 和 Mac OS X 平台。

栅格图形

Adobe Photoshop

Photoshop 可以保存为 EPS。

GIMP

GIMP 是一个具有图形用户界面的多平台程序。它可以保存为 EPS 和 PDF。

绘图和图表

Generic Mapping Tools (GMT)

Generic Mapping Tools(GMT),可以绘制地图和一系列高度可定制的图表。

Gnumeric

Gnumeric 是一个电子表格软件,支持导出为 SVG、EPS、PDF 格式。

Gnuplot

Gnuplot,自 1986 年以来用于生产科学图形。如果你想制作数学图表,Gnuplot 可以保存为任何格式。当与 PGF/TikZ 一起使用时,效果最佳。

matplotlib

matplotlib 是一个用 Python 编写的绘图库,支持 PDF 和 EPS 导出。另一方面,也支持 PGF 导出。尽管有一些技巧可以在 DVI 文档中导入 EPS 之外的格式,但它们非常复杂。另一方面,将任何图像转换为 EPS 非常简单,所以不值得考虑这些方法。

R

R 是用于统计和科学图表的工具。

编辑 EPS 图形

如上所述,图形内容可以作为 EPS 文件从外部程序导入到 LaTeX 中。但有时你可能需要编辑或修整这些图形文件。由于 EPS 文件是以 ASCII 格式保存的,因此可以使用任何文本编辑器来编辑它。在文本编辑器中,你可以执行一些简单的操作,比如替换字符串、改变边界框或稍微移动项目,但进一步的编辑会变得繁琐。像 Inkscape 这样的矢量图形编辑器也可能能够导入 EPS 文件进行后续编辑。这种方法也便于编辑。然而,导入过程有时会修改原始的 EPS 图像。

笔记与参考

  • Johan B. C. Engelen. "How to include an SVG image in LATEX" (PDF). mirrorcatalogs.com.

  • Philip Ilten. "The svg package on CTAN". ctan.org.


最后修改: 2025年04月20日 星期日 13:18