pic
단일 환경에 둘 이상의 a 인스턴스가 pic
포함될 때 s 를 결합(또는 결합하지 않아야 하는 경우), 클리핑 및 레이어링 방법을 파악하는 데 어려움을 겪고 있습니다 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(또는 클립이나 레이어)를 잘못 사용하고 있습니다. pic
이는 s 의 알려진 버그와 관련이 있습니다 .- 이것은
pic
s의 또 다른 버그와 관련이 있습니다. - 아직 생각하지 못한 것.
1 또는 2인 경우:
- 내가 실수를 하고 있는 걸까요? 그렇다면 어떻게 될까요? 내가 뭔가를 오용하고 있는 걸까요? 그렇다면 무엇을, 어떻게, 왜 사용하고 있나요?
3 또는 4인 경우:
- 이런. 해결 방법이 있습니까? 있다면 무엇입니까?
5인 경우:
- 설명해 주시겠어요?
분명히 위의 클리핑 및 레이어링 등은 불필요한 것입니다. 그러나 나의 실제 사용 사례로 인해 예기치 않게 Carroll의 Cheshire 품종을 연상시키는 고양이를 생산하게 되었습니다.
그럼 이 문제가 가장 심각한 문제 중 하나라는 것을 알 수 있습니다.
답변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}