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 命令

\includesvgsvg 宏包提供的核心命令,用于将独立的 SVG 图像插入 LaTeX 文档中。该命令依赖 Inkscape 来完成图像转换工作,通常会执行以下三个步骤:

  1. 使用 Inkscape 自动将 SVG 文件导出为 PDF、EPS、PS 或 PNG 格式的图像文件;
  2. 如果 SVG 文件中包含文本内容,则自动导出为一个 .tex 文件;
  3. 导出完成后,将图像和对应的 .tex 文件插入到 LaTeX 文档中。

其基本语法如下:

\includesvg[<options>]{<svg filename>}

其中 <options> 可以控制图像的宽度、高度、缩放比例等参数。大多数现代 LaTeX 引擎支持自动识别文件扩展名,因此通常可以省略 .svg 后缀。我们还可以通过 inkscapeformat 参数指定 Inkscape 使用的转换格式,例如:

\usepackage[inkscapeformat=png]{svg}

也可以选择 pseps,或保留默认的 pdf 格式。

3.1 插入 .svg 文件示例

假设我们有一个名为 figSVG.svg 的 SVG 文件,想要插入到 LaTeX 文档中,可以使用以下代码:

\documentclass{article}
\usepackage{svg}
\begin{document}

以下是一个 SVG 文件的插入示例:

\includesvg{figSVG}
\end{document}

输出效果如下图所示:

An svg file that is to be included in a LaTeX file.

3.2 编译说明

我们可以使用 pdflatex 直接编译 .tex 文件生成 PDF。但要启用 svg 宏包的自动转换功能,必须在编译时加上 --shell-escape 参数:

pdflatex --shell-escape shapes.tex

该参数允许 LaTeX 调用外部程序(如 Inkscape)。除了 pdflatex,也可以使用 xelatexlualatex 进行编译。

Inkscape 被调用后会在当前目录下创建一个子目录,例如 shapes-inkscape,其中包含转换后的文件(如 figSVG.pdffigSVG.png)。

4. 多种输出控制方式

svg 宏包提供了多种参数用于控制 SVG 图像的尺寸和缩放行为。下面我们来看几个示例。

4.1 设置宽度

如果我们只想指定图像的宽度(例如 1 英寸),可以这样写:

\includesvg[width=1.0in]{figSVG}

效果如下图所示:

A width restricted svg file

4.2 设置高度

如果我们只想调整图像高度,可以使用 height 参数:

\includesvg[height=2.75in]{figSVG}

此时图像的宽高会按比例缩放以保持原有宽高比:

A height restricted svg file

4.3 同时设置宽度和高度并允许变形

如果我们希望图像强制适应指定的宽高尺寸,可以添加 distort=true 参数:

\includesvg[width=1.25in,height=2.75in,distort=true]{figSVG}

结果图像将被拉伸以匹配指定的宽高:

A distorted svg file

4.4 使用缩放比例

如果希望图像整体缩放,可以使用 scale 参数:

\includesvg[scale=1.25]{figSVG}

这种方式会按比例放大图像,适用于统一调整文档中所有图像大小的场景。

5. 总结

本文介绍了如何通过 svg 宏包和 Inkscape 在 LaTeX 中嵌入 SVG 图像。核心命令 \includesvg 可以自动调用 Inkscape 进行图像转换,并支持多种参数用于控制图像尺寸和缩放行为。

要使用这些功能,必须确保系统中已安装 Inkscape。此外,也可以将本文的方法用于其他 LaTeX 工具导出的图像,如通过 TikZ 等工具导出的图形。

踩坑提示

  • 编译时忘记加 --shell-escape 参数会导致图像无法生成,记得加上!
  • 如果图像路径包含中文或空格,可能会导致 Inkscape 调用失败,建议路径使用英文且无空格。
  • Inkscape 安装后需要确保其路径已加入系统环境变量,否则 LaTeX 无法调用。

原始标题:How to Use SVG Images in LaTeX