Ich möchte Schattierungen in meinen TikZ-Grafiken zusammen mit dem standalone
Paket und XeLaTeX verwenden, aber aus irgendeinem Grund funktioniert es nicht, wenn ich es mit der neuen Version 3.0.0 versuche (Hier herunterladen). Jede andere Kombination, die ich ausprobiert habe, funktioniert bei mir (verwende zum Beispiel article
class/ pdflatex
/ lualatex
/ TikZ
2.10).
(Ich verwende ein vollständig aktualisiertes TeX Live 2013.)
MWE
\documentclass{standalone}
%\documentclass{article} % would work
\usepackage{tikz}
\usetikzlibrary{shadings}
\begin{document}
\tikz \draw[top color=red] (0,0) rectangle (2,1);
\end{document}
Ausgabe
Erwartete Ausgabe
Frage
Wie kann ich das Problem vermeiden und welches Paket/welche Klasse verursacht es?
Antwort1
Ich bestätige, dass es sich um eine Regression handelt und ich sie reproduzieren kann.
PGF 3.0.0 enthält viele Änderungen in Bezug auf Schattierungen und Xelatex. Diese Änderungen aktivieren den vollständigen Funktionsumfang von Überblendungen, Schattierungen usw., genau wie PDFLatex. Die Tatsache, dass dies nur für bestimmte Dokumentklassen funktioniert, ist eine böse Überraschung.
BEARBEITEN
Ich habe den Fehler in der Entwicklerversion von PGF behoben; wird Teil der nächsten stabilen Version.
Der Kandidat kann heruntergeladen werden unterhttp://pgf.sourceforge.net/
Das Folgende ist wahrscheinlich besser für ein Ticketsystem geeignet, aber da ich begonnen habe, den Fehler zu untersuchen, kann ich meine Schritte auch hier dokumentieren. Vielleicht stürzt sich ein Experte für Low-Level-Treiber darauf.
Ich habe festgestellt, dass es durch den resultierenden Code verursacht wird \pgfsys@vertshading
, genauer gesagt durch das resultierende PDF-Codesegment.
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 erzeugte eine weitere negative Transformation (der Teil mit 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
Ich habe das resultierende PDF manuell gepatcht. Wenn ich diese negativen Verschiebungen einführe, ist das Ergebnis korrekt. Alternativ, wenn ich patche /Matrix
und /BBox
zu
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
es funktioniert auch. Interessanterweise 100 100
ist der Wert als Größe in verfügbar \pgfsys@vertshading
; es ist die Begrenzungsbox in den Koordinaten von pgf irgendwo tief unten im System. Ich habe eine Weile experimentiert, aber das Problem nicht in den Griff bekommen; ich weiß nicht, wie die „72“ hier hineinkommt.
0 0 100 100
Beachten Sie, dass pdflatex den Begrenzungsrahmen mit der Identitätsmatrix (der richtigen) generiert . Die Verwendung der article
Klasse und xelatex
erzeugt ebenfalls diesen Wert.
Vielleicht kann ein Guru der Gerätetreiber-Entwicklung Licht in die Sache bringen; ich wette, es hängt mit etwas tief im Latex-spezifischen pgfutil-Zeug ( pgfutil-latex.def
) zusammen.