我使用该\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]
。