目录

Latex 插入 svg 图片

1 前提

以下几种方法均是基于对 inkscape 的调用,因此需要设置 inkscape 在环境变量中

可在命令行中输入 inkscape -V 进行测试是否设置成功

2 方法一

使用 svg 宏包

导言区:

1
2
3
4
5
\usepackage{svg}
\svgsetup{
  inkscapepath=i/svg-inkscape/
}
\svgpath{{svg/}}

正文区:

1
\includesvg{demo}

注意

编译开启 \write18, 即编译时需要加上 -shell-escape 参数

更多选项参数参见 svg 宏包文档

此方法对于 inkscape 1.0 已经失效

3 方法二

先利用 inkscape 导出 .pdf.pdf_tex 文件,然后在 latex 文档中插入,注意文件名不要有空格

导出 .pdf.pdf_tex 文件,在 cmd 中 执行

1
2
# inkscape version 为 1.0
inkscape -D --export-type=pdf --export-latex demo.svg

Latex 导言区

1
2
3
4
5
6
7
8
\usepackage{color}
\usepackage{transparent}
\usepackage{graphicx}
\usepackage{import}
\newcommand{\includesvg}[2]{
\def\svgwidth{#1}
\import{i}{#2.pdf_tex}
}

正文区

1
2
3
4
5
\begin{figure}
  \centering
  \includesvg{0.8\columnwidth}{demo}
  \caption{Figure}
\end{figure}

4 方法三

利用 latex 调用 inkscape (version = 1.0)

导言区:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
\usepackage{color}
\usepackage{transparent}
\usepackage{graphicx}
\usepackage{import}

%% 注意图片途径为子目录 i
\newcommand{\executeiffilenewer}[3]{
\ifnum\pdfstrcmp{\pdffilemoddate{#1}}
{\pdffilemoddate{#2}}>0
{\immediate\write18{#3}}\fi
}

\newcommand{\includesvg}[2]{
\executeiffilenewer{i/#2.svg}{i/#2.pdf}
{inkscape -D --export-filename=i/#2.pdf 
--export-latex i/#2.svg}
\def\svgwidth{#1}
\import{i}{#2.pdf_tex}
}

正文区:

1
2
3
4
5
\begin{figure}
  \centering
  \includesvg{0.8\columnwidth}{demo}
  \caption{Figure}
\end{figure}

注意:需开启 \write18, 即编译时需要加上 -shell-escape 参数

5 方法四

同样是利用 latex 调用 inkscape (version = 1.0) 完成 svg 到 pdf 的转化,但是不需要 latex 的文字处理

导言区:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
\usepackage{graphicx}
\graphicspath{{i/}}

\newcommand{\executeiffilenewer}[3]{
\ifnum\pdfstrcmp{\pdffilemoddate{#1}}
{\pdffilemoddate{#2}}>0
{\immediate\write18{#3}}\fi
}

\newcommand{\includesvg}[2]{
\executeiffilenewer{i/#2.svg}{i/#2.pdf}
{inkscape -D --export-filename=i/#2.pdf i/#2.svg}
\includegraphics[width=#1]{#2.pdf}
}

正文区:

1
2
3
4
5
\begin{figure}
  \centering
  \includesvg{0.8\columnwidth}{demo}
  \caption{Figure}
\end{figure}

注意:需开启 \write18, 即编译时需要加上 -shell-escape 参数