我已经使用 zeroth 非常有用的建议成功地设置了我的 tikz 外部代码外部化为其他格式,Makefile。向 makefile 添加新规则
我的目标是为某些文件生成 png 而不是 pdf。上述方法的问题在于它也会生成 pdf(具有相同的名称),因此 \pgfimage 命令将始终包含 pdf 而不是 png。我有一些相当大的图,它们很容易用 tikz 生成,但以位图格式渲染要快得多。
我已经生成了 pdf,将其转换为 png,然后删除了 pdf。但是现在每次我重新运行 makefile 时,都会重新生成已删除的 pdf。我不太熟悉 tikz 外部代码。有没有一种方便的方法来设置它以仅生成 png?
以下是我当前的设置:
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzsetexternalprefix{tikz/}
\tikzexternalize[mode=list and make]
%pdf setup
\tikzset{external/system call=%
{xelatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
%optional png setup
\tikzset{
png export/.style={
external/system call=%
{xelatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource";%
convert -density 300 -transparent white "\image.pdf" "\image.png"; rm -f "\image.pdf"},
}
}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (2);
\end{tikzpicture}
%now png export
\bgroup
\tikzset{png export}
\begin{tikzpicture}
\draw (0,0) circle (2);
\end{tikzpicture}
\egroup
\end{document}
答案1
最简单的方法是改变导入语句以选择 png 图像。
由于您已经有了png export
风格,因此您可以添加png import
声明。
与 pdf 相比,这更适合 png。
基本上,您可以改变包含图像的外部命令(请参阅手册以获得更好的解释)
\tikzset{%
% Add size information to the .dpth file (png is in density not size)
/pgf/images/external info,
% Use the png export AND the import
use png/.style={png export,png import},
png import/.code={%
\tikzset{%
/pgf/images/include external/.code={%
% Here you can alter to whatever you want
% \pgfexternalwidth is only available if /pgf/images/external info
% is set
\includegraphics%
[width=\pgfexternalwidth,height=\pgfexternalheight]%
{{##1}.png}%
}%
}%
}%
}
然后只需这样做:
\bgroup
\tikzset{use png}
\begin{tikzpicture}
\draw (0,0) circle (2);
\end{tikzpicture}
\egroup
并且在导出时它将生成 png,并且在导入时优先使用 png。