Проблемы с объединением клипа, слоя и изображения, когда несколько экземпляров включены в один и тот же tikzpicture

Проблемы с объединением клипа, слоя и изображения, когда несколько экземпляров включены в один и тот же tikzpicture

У меня возникли проблемы с пониманием того, как мне следует объединять (или не объединять) s, обрезку и наложение, когда в одну среду включено picболее одного экземпляра a .pictikzpicture

Например:

\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. Я злоупотребляюpic s (или клипы, или слои);
  3. это связано с известными ошибкамиpic s;
  4. это связано с другой ошибкой вpic ​​s;
  5. то, о чем я еще не думал.

Если 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}

введите описание изображения здесь

Связанный контент