동일한 tikzpicture에 여러 인스턴스가 포함될 때 클립, 레이어 및 그림을 결합하는 데 문제가 있습니다

동일한 tikzpicture에 여러 인스턴스가 포함될 때 클립, 레이어 및 그림을 결합하는 데 문제가 있습니다

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두 번째 인스턴스의 클리핑에 어떻게든 영향을 미친다고 가정합니다. 하지만 그 때문인지는 잘 모르겠습니다

  1. 내가 뭔가 잘못하고 있는 것입니다. 그렇다면 어떻게 해야 할까요?
  2. 나는 pics(또는 클립이나 레이어)를 잘못 사용하고 있습니다.
  3. pic이는 s 의 알려진 버그와 관련이 있습니다 .
  4. 이것은 pics의 또 다른 버그와 관련이 있습니다.
  5. 아직 생각하지 못한 것.

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}

여기에 이미지 설명을 입력하세요

관련 정보