0 环境
- Window 11
- TeXstudio 4.8.9
- TeX Live 2025
1 依赖软件
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"
}
}
}
说明:
- 现在的 magick 已经不再使用 convert 命令,直接改为 magick。这与网上查找的大多数内容都不一样
- magick 命令之后的两个参数
"\image.pdf"和"\image.png"不能修改,这是两个 tikz 的参数,理解为\image即为当前 tex 文件名称 - 多命令连接
&&:这需要与当前使用的命令行工具匹配。Windows 11 平台上可以使用 CMD 和 PowerShell,其中,CMD 只支持&&作为多命令连接符;而 PowerShell 则可以使用;和&&。为了兼容,所以使用&&。而网上查找的大多数内容,都是使用的;,猜测应该都是在 UNIX/Linux 平台上
4 常用命令
4.1 输入图片文件名
默认输出图片文件名为当前 tex 文件名称 + 默认后缀 -figure + 编号。如:test-figure0,test-figure1,test-figure2......
\tikzsetfigurename{<name>}:设置图片文件名称,为所有输出图片文件名称。如设置为 test,则图片命名依次为:test0,test1,test2......\tikzsetexternalprefix{<prefix>}:设置图片文件名称前缀。如设置为 abc-,则图片命名依次为:abc-test-figure0,abc-test-figure1,abc-test-figure2......\tikzappendtofigurename{<suffix>}:设置图片文件名称后缀。如设置为 -,则图片命名依次为:test-figure-0,test-figure-1,test-figure-2......\tikzsetnextfilename{<filename>}: 仅作用于命令之后的下一张绘图,即只更改一张图片的文件名;如果在全局设置,即只影响第一张绘图
4.2 是否输出控制
\tikzset{external/export=<boolean>}:控制作用域内所有图片是否输出。true 表示输出,false 表示不输出\tikzset{external/export next=<boolean>}:控制下一张绘图是否输出
作用域
- 如果在
\begin{document} ... \end{document}之前进行设置,即表示全局作用域,将影响整个文档- 如果在
\begin{document} ... \end{document}之中进行设置,即表示局部作用域,将影响之后部分文档的内容- 如果在
\begin{document} ... \end{document}之中,设置在{...}之内,也表示局部作用域,则只会影响{...}之内的部分文档内容
4.3 输出目录
- 默认图片输入至 tex 文件同一路径下
\tikzsetexternalprefix{<prefix>}:如果将前缀设置为 figures/,则所有图片将被输出至与 tex 文件同一路径下的 figures 目录下
5 使用建议
建议平时使用 tikz 进行绘图时,不要开始输出的功能,因为编译会很费时间。而只在实际需要时,或者完成所有绘图后,再一次输出即可
实际操作:只需要注释 tikz 外部功能激活命令即可
latex
%\tikzexternalize