tikz 外部默认使用 png 而不是 pdf

tikz 外部默认使用 png 而不是 pdf

我已经使用 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。

相关内容