LaTeX
导入外部图形
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 文件提供了更多的绘制灵活性。方法如下:
-
在 Xfig 中创建图形。每当需要 LaTeX 文本(如数学公式)时,在文本框中输入 LaTeX 字符串。
-
使用“编辑”工具打开每个文本框的属性,并将“特殊标志”字段的选项更改为“特殊”。这会告诉 LaTeX 在打开图形时解析这些文本框。
-
转到“文件 -> 导出”,将文件导出为 PDF/LaTeX(两部分)或 PS/LaTeX(两部分),具体取决于您使用 pdflatex 还是 pslatex 来编译文件。
-
在 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
。
确保在文件中包含 graphicx
和 color
包,并将 \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.