1. 简介
在本教程中,我们将介绍如何在 LaTeX 文档中嵌入 SVG(可缩放矢量图形)文件。SVG 图像具有可缩放、可缩放不失真的特性。当我们在浏览器中查看它们时,无论窗口如何调整大小,图像分辨率都不会发生变化。这使得 SVG 成为适合用于网页发布文档的理想选择。
2. Inkscape 简介
LaTeX 本身并不支持直接插入 SVG 文件。因此,我们需要先安装两个组件:LaTeX 的 svg
宏包 和一个矢量图形编辑器 Inkscape。我们可以使用 TeX 包管理器(如 tlmgr
)安装 svg
宏包。
Inkscape 是一款适用于 Linux、Windows 和 macOS 的开源软件,支持导入和导出多种文件格式,包括 SVG(默认格式)、EPS、PDF、PS 和 PNG。svg
宏包则通过调用 Inkscape 命令行工具,将 SVG 图像中的文本导出为一个单独的 .tex
文件,再由 LaTeX 渲染图像和文本内容。
更具体地说,Inkscape 会将图形导出为 PDF、PNG、PS 或其他支持的格式,并将文本内容导出为对应的 .tex
文件。在 LaTeX 文档中引用这些文件后,最终输出的图像会包含原始图形和叠加的文本内容。虽然 Inkscape 本身也可以独立使用,但本文仅讨论其与 svg
宏包配合使用的场景。
3. \includesvg
命令
\includesvg
是 svg
宏包提供的核心命令,用于将独立的 SVG 图像插入 LaTeX 文档中。该命令依赖 Inkscape 来完成图像转换工作,通常会执行以下三个步骤:
- 使用 Inkscape 自动将 SVG 文件导出为 PDF、EPS、PS 或 PNG 格式的图像文件;
- 如果 SVG 文件中包含文本内容,则自动导出为一个
.tex
文件; - 导出完成后,将图像和对应的
.tex
文件插入到 LaTeX 文档中。
其基本语法如下:
\includesvg[<options>]{<svg filename>}
其中 <options>
可以控制图像的宽度、高度、缩放比例等参数。大多数现代 LaTeX 引擎支持自动识别文件扩展名,因此通常可以省略 .svg
后缀。我们还可以通过 inkscapeformat
参数指定 Inkscape 使用的转换格式,例如:
\usepackage[inkscapeformat=png]{svg}
也可以选择 ps
、eps
,或保留默认的 pdf
格式。
3.1 插入 .svg
文件示例
假设我们有一个名为 figSVG.svg
的 SVG 文件,想要插入到 LaTeX 文档中,可以使用以下代码:
\documentclass{article}
\usepackage{svg}
\begin{document}
以下是一个 SVG 文件的插入示例:
\includesvg{figSVG}
\end{document}
输出效果如下图所示:
3.2 编译说明
我们可以使用 pdflatex
直接编译 .tex
文件生成 PDF。但要启用 svg
宏包的自动转换功能,必须在编译时加上 --shell-escape
参数:
pdflatex --shell-escape shapes.tex
该参数允许 LaTeX 调用外部程序(如 Inkscape)。除了 pdflatex
,也可以使用 xelatex
或 lualatex
进行编译。
Inkscape 被调用后会在当前目录下创建一个子目录,例如 shapes-inkscape
,其中包含转换后的文件(如 figSVG.pdf
或 figSVG.png
)。
4. 多种输出控制方式
svg
宏包提供了多种参数用于控制 SVG 图像的尺寸和缩放行为。下面我们来看几个示例。
4.1 设置宽度
如果我们只想指定图像的宽度(例如 1 英寸),可以这样写:
\includesvg[width=1.0in]{figSVG}
效果如下图所示:
4.2 设置高度
如果我们只想调整图像高度,可以使用 height
参数:
\includesvg[height=2.75in]{figSVG}
此时图像的宽高会按比例缩放以保持原有宽高比:
4.3 同时设置宽度和高度并允许变形
如果我们希望图像强制适应指定的宽高尺寸,可以添加 distort=true
参数:
\includesvg[width=1.25in,height=2.75in,distort=true]{figSVG}
结果图像将被拉伸以匹配指定的宽高:
4.4 使用缩放比例
如果希望图像整体缩放,可以使用 scale
参数:
\includesvg[scale=1.25]{figSVG}
这种方式会按比例放大图像,适用于统一调整文档中所有图像大小的场景。
5. 总结
本文介绍了如何通过 svg
宏包和 Inkscape 在 LaTeX 中嵌入 SVG 图像。核心命令 \includesvg
可以自动调用 Inkscape 进行图像转换,并支持多种参数用于控制图像尺寸和缩放行为。
要使用这些功能,必须确保系统中已安装 Inkscape。此外,也可以将本文的方法用于其他 LaTeX 工具导出的图像,如通过 TikZ 等工具导出的图形。
✅ 踩坑提示:
- 编译时忘记加
--shell-escape
参数会导致图像无法生成,记得加上! - 如果图像路径包含中文或空格,可能会导致 Inkscape 调用失败,建议路径使用英文且无空格。
- Inkscape 安装后需要确保其路径已加入系统环境变量,否则 LaTeX 无法调用。