Probleme beim Kombinieren von Clip, Ebene und Bild, wenn mehrere Instanzen im selben Tikz-Bild enthalten sind

Probleme beim Kombinieren von Clip, Ebene und Bild, wenn mehrere Instanzen im selben Tikz-Bild enthalten sind

Ich habe Probleme herauszufinden, wie ich s, Clipping und Layering kombinieren soll (oder ob ich es nicht kombinieren soll), picwenn mehr als eine Instanz von a picin einer einzelnen tikzpictureUmgebung 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

problematische Ausschnitte

Offensichtlich funktioniert das nicht ganz richtig. Ich gehe davon aus, dass das Clipping einer Instanz my thingirgendwie das Clipping der zweiten Instanz beeinflusst. Aber ich bin mir nicht sicher, ob das daran liegt

  1. Ich mache etwas falsch, und wenn ja, was?
  2. Ich verwende pics (oder Clips oder Ebenen) falsch.
  3. dies hängt mit den bekannten Fehlern mit pics zusammen;
  4. dies hängt mit einem anderen Fehler in pics zusammen;
  5. 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:

teilweise Katzen

Sie sehen also, dass es sich um ein äußerst schwerwiegendes Problem handelt …

Katzengrinsen?

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 layerTaste 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 layeroder 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}

Bildbeschreibung hier eingeben

verwandte Informationen