當單一環境中包含pic
多個 a 實例時,我很難弄清楚應該如何組合(或如果我不應該組合) s、剪切和分層。pic
tikzpicture
例如:
\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}
產生
顯然事情不太正常。我假設一個實例的剪輯在my thing
某種程度上影響了第二個實例的剪輯。但我不確定這是不是因為
- 我做錯了什麼,如果是的話怎麼辦;
- 我誤用了
pic
s (或剪輯或圖層); - 這與 s 的已知錯誤有關
pic
; pic
這與s中的另一個錯誤有關;- 我還沒有想到的事情。
如果為 1 或 2,則:
- 我是否犯了一個錯誤?我是否濫用了某些東西?
如果是 3 或 4,則:
- 哦親愛的。是否有解決方法?
如果是 5,那麼:
- 請你解釋一下嗎?
請注意,顯然上面的剪切和分層等都是無償的。然而,我的真實用例讓我生產出出乎意料地讓人想起卡羅爾的柴郡品種的貓:
所以你可以看到這個問題是最嚴重的一個...
答案1
我認為問題在於設定範圍和將圖層更改為背景圖層的順序(儘管我不確定低階細節)。
當使用該on background layer
鍵時,範圍被設定並且圖層被更改。所需要的是相反的:改變層,然後設定範圍。這可能是個錯誤,除非文件中某處隱藏了一些警告,但在第一種情況下,剪切似乎在背景層上保持活動狀態。
解決方案是使用選項在另一個範圍內添加額外的範圍on background layer
,或明確更改圖層並在其中添加範圍,這就是我在下面所做的。
為了清楚起見,我還顯示了剪切區域的邊界框。
\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}