Ich habe Probleme herauszufinden, wie ich s, Clipping und Layering kombinieren soll (oder ob ich es nicht kombinieren soll), pic
wenn mehr als eine Instanz von a pic
in einer einzelnen tikzpicture
Umgebung enthalten ist.
Zum Beispiel:
\documentclass[tikz, border=5pt]{standalone}
\usetikzlibrary{backgrounds}
\makeatletter
\tikzset{%
my thing/.pic={
\draw [line width=2.5pt, gray] (0,10pt) coordinate (c1) [out=45, in=135] to +(1,2) coordinate (c2);
\begin{scope}[on background layer]
\clip (0,5) rectangle (5,-5);
\draw [orange, line width=2.5pt] (-2,0) -| (c2) -| (2,-2);
\end{scope}
},
}
\makeatother
\begin{document}
\begin{tikzpicture}
\pic {my thing};
\pic at (3,3) {my thing};
\end{tikzpicture}
\end{document}
produziert
Offensichtlich funktioniert das nicht ganz richtig. Ich gehe davon aus, dass das Clipping einer Instanz my thing
irgendwie das Clipping der zweiten Instanz beeinflusst. Aber ich bin mir nicht sicher, ob das daran liegt
- Ich mache etwas falsch, und wenn ja, was?
- Ich verwende
pic
s (oder Clips oder Ebenen) falsch. - dies hängt mit den bekannten Fehlern mit
pic
s zusammen; - dies hängt mit einem anderen Fehler in
pic
s zusammen; - etwas, woran ich noch nicht gedacht habe.
Wenn 1 oder 2, dann:
- Mache ich einen Fehler und wenn ja, welchen? Verwende ich etwas falsch und wenn ja, was, wie und warum?
Wenn 3 oder 4, dann:
- Oh je. Gibt es einen Workaround und wenn ja, wie sieht dieser aus?
Wenn 5, dann:
- Könnten Sie das bitte erklären?
Beachten Sie, dass das Ausschneiden und Überlagern usw. oben offensichtlich unnötig ist. Mein tatsächlicher Anwendungsfall hat mich jedoch dazu gebracht, Katzen zu produzieren, die unerwartet an Carrolls Grinsekatze erinnern:
Sie sehen also, dass es sich um ein äußerst schwerwiegendes Problem handelt …
Antwort1
Ich denke, das Problem liegt in der Reihenfolge, in der der Bereich eingerichtet und die Ebene in die Hintergrundebene geändert wird (obwohl ich mir bei den Details auf niedrigerer Ebene nicht sicher bin).
Bei Verwendung der on background layer
Taste wird der Bereich eingerichtet und die Ebene geändert. Erforderlich ist das Gegenteil: die Ebene geändert und dann der Bereich eingerichtet. Dies könnte ein Fehler sein, es sei denn, es gibt irgendwo in der Dokumentation einen Hinweis, aber im ersten Fall scheint das Clipping auf der Hintergrundebene aktiv zu bleiben.
Die Lösung besteht darin, entweder mit der Option einen zusätzlichen Bereich innerhalb des anderen Bereichs hinzuzufügen on background layer
oder die Ebene explizit zu ändern und den Bereich darin hinzuzufügen, was ich unten getan habe.
Der Übersichtlichkeit halber zeige ich auch die Begrenzungsrahmen der Schnittregion.
\documentclass[tikz, border=5pt]{standalone}
\usetikzlibrary{backgrounds}
\makeatletter
\tikzset{%
my thing/.pic={
\draw [line width=2.5pt, gray] (0,10pt) coordinate (c1) [out=45, in=135] to +(1,2) coordinate (c2);
\begin{pgfonlayer}{background}
\begin{scope}
\clip [preaction=draw] (0,5) rectangle (5,-5);
\draw [orange, line width=2.5pt] (-2,0) -| (c2) -| (2,-2);
\end{scope}
\end{pgfonlayer}
},
}
\makeatother
\begin{document}
\begin{tikzpicture}
\pic {my thing};
\pic at (3,3) {my thing};
\end{tikzpicture}
\end{document}