TikZ Externalize 打破路径淡出

TikZ Externalize 打破路径淡出

我使用该\usetikzlibrary{external}命令是因为我的文档中有很多占用大量资源的 TikZ 图片,并且使用此命令排版速度要快得多。问题是使用外部库时,褪色绘图会从编译后的 PDF 中消失。要使用该库,我使用该--shell-escape选项进行编译。

这很奇怪,因为在外部保存单个 pdf 文件的图片文件夹中,褪色的图片正确呈现,但主 pdf 文件中的同一张图片根本没有褪色。

当然,禁用外部库注释该行图片\tikzexternalize[prefix=figures/]就可以正确呈现。

\documentclass{article}
\usepackage{tikz}
\usepackage{amsmath}
\usepackage{siunitx}
\usepackage[italian]{babel}
\usetikzlibrary{fadings,calc,positioning,external}
\tikzexternalize[prefix=figures/] 

\newcommand{\dd}[1]{\mathrm{d}{#1}\;}

\begin{document}

\tikzset{
  cone_inverted/.pic={
    \shade[bottom color=blue!5!white,top color=blue!40!white,opacity=0.3] (-1,-3) arc (180:360:.5cm and .25cm) -- (0,0) -- cycle;
        \draw (-1,-3) arc (180:360:.5cm and .25cm) -- (0,0) -- cycle;
        \draw[dashed] (-1,-3) arc (180:0:.5cm and 0.25cm);
        \node (n) at (-.6, -3.7) {$\dd{N}$};
        \node (o) at (.3, -1) {$\dd{\Omega}$};
    },
    rect/.pic = {
    \fill[gray!50] (0,-1) --(0.3,-1) -- (0.3,1)--(0,1) -- cycle; 
    }
}

\begin{tikzpicture}[scale=0.7]

    \fill[purple, path fading=west]
    (0,-.1) -- (5,-.1) -- (5,-.2) -- (5.5,0) -- (5,.2) -- (5,.1) -- (0,.1) -- (0,-.1);

    \fill[blue!50, path fading=west]
    (7,-.1) -- (12,-.1) -- (12,-.2) -- (12.5,0) -- (12,.2) -- (12,.1) -- (7,.1) -- (7,-.1);
    \node at (2.5,-0.5) {$\Phi_0 = \frac{\text{fotoni}}{\SI{}{\second\centi\meter\squared}}$};
    \node at (9.5,-0.5) {$\Phi\ped{T}$};

    \coordinate (a) at (6,0);
    \path (a)+(20:.5) pic[rotate=120] {cone_inverted};
    \path (a)+(0:-0.2) pic {rect};

\end{tikzpicture}

\end{document}

图片figures/document_title-figure0.pdf显示正确,看起来像 在此处输入图片描述

而在输出文件中它看起来像这样

在此处输入图片描述

知道如何解决这种奇怪的行为吗?

编辑:我还注意到,如果我更换该行

  \fill[blue!50, path fading=west]

 \shade[left color=white, right color= blue!50]

有同样的问题。如果我使用其他颜色代替白色,例如

 \shade[left color=red, right color= blue!50]

它按预期工作。谜团越来越深。

答案1

经过一些实验,我找到了一种解决方法,替换了

\fill[blue!50, path fading=west]

\shade[left color=blue!0, right color= blue!50]

其他方法似乎不起作用(当然使用外部库)。

答案2

我可以确认这\tikzfading[name=fadeout, bottom color=transparent!0, top color=transparent!100]可能会破坏某些平台上的 tikzexternalize(Windows 10 上的 MikTeX 编译永远无法完成)。我的(非完美)解决方法是将形状放在最低层,并使用将其颜色淡化为白色\draw[bottom color=black, top color=white]

相关内容