在Latex中优雅的插入svg图片(Ubuntu22.04)


一、前言

LaTeX \LaTeX LATEX 中,插入图片常用的为 figure 环境加 \includegraphics 命令:

\begin{figure}[!htbp]
	\centering
	\includegraphics[width=\textwidth]{图片名.jpg/jpeg/png/pdf}
	\caption{标题}\label{标签}
\end{figure}

然而如果我们的图片为 SVG 图,直接进行插入是会报错的:

在这里插入图片描述
主要报错信息如下:

! Unable to read an entire line---bufsize=200000. Please increase buf_size in texmf.cnf.

百度是能找到很多 svg 图转其他格式图片的方法的,用 Python 也能做,这里主要介绍结合 bash 脚本进行批量处理。


二、准备工作

首先使用 apt-get 安装 inkscape 工具:

sudo apt-get install inkscape -y

其主要思路就是使用 inkscape 工具将目录下的 svg 图片逐一转换为 pdf 文件,这样便能通过上述 \includegraphics 命令插入:

inkscape --export-filename=图片名.pdf 图片名.svg

三、脚本编程

对于一整个文件夹的 svg 图片,我们希望能通过脚本实现自动将其全部转换为 pdf 文件以方便我们插入,在 svg 图片目录下打开终端,新建文件 convert_svg_to_pdf.sh

vim convert_svg_to_pdf.sh

具体 bash 语句如下:

#!/bin/bash

# 遍历当前目录下的所有.svg文件
for file in *.svg; do
  # 检查文件是否存在
  if [ -f "$file" ]; then
    # 移除文件扩展名,准备输出文件名
    base_name=$(basename "$file" .svg)
    # 使用Inkscape命令转换文件
    inkscape --export-filename="${base_name}.pdf" "$file"
  else
    echo "$file does not exist."
  fi
done

按下 esc 键,输入 :wq,保存并退出,通过如下命令运行此脚本:

bash convert_svg_to_pdf.sh

可以看到目录下的 svg 图片都生成了对应的 pdf 文件,如此便可通过如下命令插入 LaTeX \LaTeX LATEX 中:

\begin{figure}[!htbp]
	\centering
	\includegraphics[width=\textwidth]{图片名.pdf}
	\caption{标题}\label{标签}
\end{figure}

四、结论

相比于将 svg 图片通过网页转为其他格式图片,此方法能批量处理文件夹下的大量 svg 图片,方便快捷,就是会生成新的 pdf 文件占用内存。


谢谢!