我想在我的 TikZ 图形中使用阴影以及standalone
包和 XeLaTeX 一起使用,但由于某种原因,如果我尝试使用新的 3.0.0 版本,它就会损坏(在这里下载我尝试过的任何其他组合都对我有用(例如使用article
class/ pdflatex
/ lualatex
/ TikZ
2.10)。
(我正在使用已完全更新的 TeX Live 2013。)
平均能量损失
\documentclass{standalone}
%\documentclass{article} % would work
\usepackage{tikz}
\usetikzlibrary{shadings}
\begin{document}
\tikz \draw[top color=red] (0,0) rectangle (2,1);
\end{document}
输出
预期输出
问题
我怎样才能避免这个问题以及哪个包/类导致了这个问题?
答案1
我确认这是一个回归并且我可以重现它。
PGF 3.0.0 在阴影和 xelatex 方面进行了大量更改。这些更改激活了淡入淡出、阴影等全套功能,就像 pdflatex 一样。它仅适用于特定文档类别这一事实令人感到意外。
编辑
我修复了 PGF 开发版本中的错误;它将成为下一个稳定版本的一部分。
候选人可以在以下网址下载http://pgf.sourceforge.net/
下面的可能更适合票务系统,但由于我开始研究这个错误,我也可以在这里记录我的步骤。也许一些低级驱动程序专家会跳到它。
我发现它是由 产生的代码引起的\pgfsys@vertshading
,更具体地说,是由产生的 PDF 代码段引起的
7 0 obj
<<
/Matrix [1 0 0 1 72 -72]
/Subtype /Form
/Length 15
/Resources 8 0 R
/FormType 1
/Type /XObject
/BBox [-72 72 28 172]
>>
stream
0 G 0 g /Sh sh
endstream
PGF 2.10 产生了进一步的负变换(带有 的部分1 0 0 1.. cm
)。
<<
/Matrix [1 0 0 1 72 -72]
/Subtype /Form
/Length 37
/Resources 7 0 R
/FormType 1
/Type /XObject
/BBox [-72 72 28 172]
>>
stream
0 G 0 g q 1 0 0 1 -72 72 cm /Sh sh Q
endstream
我已经手动修补了生成的 pdf;如果我引入这些负移位,结果是正确的。或者,如果我修补/Matrix
和/BBox
7 0 obj
<<
/Matrix [1 0 0 1 0 0]
/Subtype /Form
/Length 15
/Resources 8 0 R
/FormType 1
/Type /XObject
/BBox [0 0 100 100]
>>
stream
0 G 0 g /Sh sh
endstream
它也有效。有趣的是,该值100 100
可用作 中的大小\pgfsys@vertshading
;它是系统深处某处 pgf 坐标中的边界框。我试验了一段时间,但没有解决问题;我不知道“72”是如何进入这里的。
请注意,pdflatex 生成0 0 100 100
具有单位矩阵(正确的)的边界框。使用article
类并xelatex
生成此值。
也许一些设备驱动程序开发方面的专家可以对此进行一些阐释;我敢打赌,这与乳胶特定的 pgfutil 内容中的一些深层内容有关(pgfutil-latex.def
)。