私はパッケージとXeLaTeXと一緒にTikZグラフィックでシェーディングを使用したいのですstandalone
が、何らかの理由で新しい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
もこの値が生成されます。
おそらく、デバイス ドライバー開発の専門家が、この問題について説明してくれるでしょう。これは、LaTeX 固有の pgfutil の機能 ( pgfutil-latex.def
) の奥深くに関係していると思います。