LaTeX Tikz 绘图输出至图片

0 环境

  1. Window 11
  2. TeXstudio 4.8.9
  3. TeX Live 2025

1 依赖软件

  1. ImageMagick-7.1.2-11-Q16-HDRI-x64-dll.exe
  2. ArtifexSoftware/Ghostscript

2 实例

latex 复制代码
\documentclass{article}

\usepackage{tikz}
% 注意:一定要启用以及激活
\usetikzlibrary{external} % 启用外部功能
\tikzexternalize[shell escape=-enable-write18] % 激活外部功能

% 理解为设置 TikZ 宏
\tikzset{
	% 宏名:png export
	png export/.style={
		% 定义外部功能/系统调用/增加操作(在原LaTeX编译命令之后)
		external/system call/.append={
			% 调用 magick 软件进行图片转换
			&& magick -density 300 "\image.pdf" "\image.png"
		}
	}
}
% 将所有图片输出至当前路径下的 figures 目录中
\tikzsetexternalprefix{figures/}
% 所有 tikz 绘图均输出
% \tikzset{png export}


\begin{document}

{
	% 设置图片输出名称,当前作用域中之后的文件均命名为:circle0, circle1,circle2...
	\tikzsetfigurename{circle}
	% 当前作用域中的所有图片均输出,此处只输出一张图片
	\tikzset{png export}
	\begin{tikzpicture}
		\draw (0,0) circle (1cm);
	\end{tikzpicture}
}

{
	% 设置图片输入名称
	\tikzsetnextfilename{myfigure}
	\tikzset{png export}
	\begin{tikzpicture}
	\draw (0,0) -- (1,1);
	\end{tikzpicture}
}
	
\end{document}

3 关键说明

latex 复制代码
% 理解为设置 TikZ 宏
\tikzset{
	% 宏名:png export
	png export/.style={
		% 定义外部功能/系统调用/增加操作(在原LaTeX编译命令之后)
		external/system call/.append={
			% 调用 magick 软件进行图片转换
			&& magick -density 300 "\image.pdf" "\image.png"
		}
	}
}

说明:

  1. 现在的 magick 已经不再使用 convert 命令,直接改为 magick。这与网上查找的大多数内容都不一样
  2. magick 命令之后的两个参数 "\image.pdf""\image.png" 不能修改,这是两个 tikz 的参数,理解为 \image 即为当前 tex 文件名称
  3. 多命令连接 &&:这需要与当前使用的命令行工具匹配。Windows 11 平台上可以使用 CMD 和 PowerShell,其中,CMD 只支持 && 作为多命令连接符;而 PowerShell 则可以使用 ;&&。为了兼容,所以使用 &&。而网上查找的大多数内容,都是使用的 ;,猜测应该都是在 UNIX/Linux 平台上

4 常用命令

4.1 输入图片文件名

默认输出图片文件名为当前 tex 文件名称 + 默认后缀 -figure + 编号。如:test-figure0,test-figure1,test-figure2......

  1. \tikzsetfigurename{<name>}:设置图片文件名称,为所有输出图片文件名称。如设置为 test,则图片命名依次为:test0,test1,test2......
  2. \tikzsetexternalprefix{<prefix>}:设置图片文件名称前缀。如设置为 abc-,则图片命名依次为:abc-test-figure0,abc-test-figure1,abc-test-figure2......
  3. \tikzappendtofigurename{<suffix>}:设置图片文件名称后缀。如设置为 -,则图片命名依次为:test-figure-0,test-figure-1,test-figure-2......
  4. \tikzsetnextfilename{<filename>}: 仅作用于命令之后的下一张绘图,即只更改一张图片的文件名;如果在全局设置,即只影响第一张绘图

4.2 是否输出控制

  1. \tikzset{external/export=<boolean>}:控制作用域内所有图片是否输出。true 表示输出,false 表示不输出
  2. \tikzset{external/export next=<boolean>}:控制下一张绘图是否输出

作用域

  • 如果在 \begin{document} ... \end{document} 之前进行设置,即表示全局作用域,将影响整个文档
  • 如果在 \begin{document} ... \end{document} 之中进行设置,即表示局部作用域,将影响之后部分文档的内容
  • 如果在 \begin{document} ... \end{document} 之中,设置在 {...} 之内,也表示局部作用域,则只会影响 {...} 之内的部分文档内容

4.3 输出目录

  1. 默认图片输入至 tex 文件同一路径下
  2. \tikzsetexternalprefix{<prefix>}:如果将前缀设置为 figures/,则所有图片将被输出至与 tex 文件同一路径下的 figures 目录下

5 使用建议

建议平时使用 tikz 进行绘图时,不要开始输出的功能,因为编译会很费时间。而只在实际需要时,或者完成所有绘图后,再一次输出即可

实际操作:只需要注释 tikz 外部功能激活命令即可

latex 复制代码
%\tikzexternalize

A 参考资料

  1. Kennedy · TikZ--tikzexternalize to png
  2. How to save a figure produced by tikz save/export as EPS file - TeX - LaTeX Stack Exchange
  3. Externalization Library - PGF/TikZ Manual
相关推荐
恶猫10 小时前
Win|WinEdt( LaTeX 编辑器),下载及安装教程
windows·编辑器·latex·winedt
Jovin Giogic7 天前
简明教程:记录 Ubuntu系统命令行安装TexLive,配置vscode
linux·vscode·ubuntu·latex·texlive
verse_armour10 天前
markdown插入文献引用并导出pdf
pdf·markdown·pandoc·latex
摸森堡11 天前
vs code + latex使用攻略
latex
我的golang之路果然有问题16 天前
word中latex插入矩阵的语法问题
笔记·学习·矩阵·word·latex·template method·分享
钱彬 (Qian Bin)18 天前
从零开始发表SCI论文—第1篇:安装Latex写作工具
latex·vs code·sci论文·环境准备
他来自江湖22 天前
西南科技大学,研究生开题报告latex模板
科技·latex·开题报告·西南科技大学
Invinc-Z23 天前
LaTeX 个人简历模板
latex
嘿嘻哈呀1 个月前
MaxTex下载及LaTex环境配置
latex·maxtex·latex workshop