Problemas al combinar clip, capa e imagen cuando se incluyen varias instancias en la misma imagen tikz

Problemas al combinar clip, capa e imagen cuando se incluyen varias instancias en la misma imagen tikz

Tengo problemas para descubrir cómo se supone que debo combinar (o si se supone que no debo combinar) picmensajes de correo electrónico, recortar y superponer capas cuando picse incluye más de una instancia de a en un solo tikzpictureentorno.

Por ejemplo:

\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}

produce

recortes problemáticos

Es evidente que las cosas no están funcionando del todo bien. Supongo que el recorte de una instancia de my thingestá afectando de alguna manera el recorte en la segunda instancia. Pero no estoy seguro si eso es porque

  1. Estoy haciendo algo mal y, si es así, ¿qué?
  2. Estoy haciendo un mal uso picde s (o clips o capas);
  3. esto está relacionado con los errores conocidos con pics;
  4. esto está relacionado con otro error en pics;
  5. algo en lo que aún no he pensado.

Si es 1 o 2, entonces:

  • ¿Estoy cometiendo un error y, de ser así, qué? ¿Estoy haciendo un mal uso de algo y, de ser así, qué, cómo y por qué?

Si son 3 o 4, entonces:

  • Oh querido. ¿Existe alguna solución y, si la hay, cuál es?

Si es 5, entonces:

  • ¿Podrías explicar eso por favor?

Tenga en cuenta que, obviamente, el recorte y la superposición de capas, etc., son gratuitos. Sin embargo, mi caso de uso real me ha llevado a producir gatos que recuerdan inesperadamente a la variedad Cheshire de Carroll:

gatos parciales

Entonces puedes ver que el problema es de suma gravedad...

¿La sonrisa del gato?

Respuesta1

Creo que el problema es el orden en el que se configura el alcance y la capa cambia a la capa de fondo (aunque no estoy seguro de los detalles de bajo nivel).

Cuando se utiliza la on background layerclave, se configura el alcance y se cambia la capa. Lo que se requiere es lo contrario: la capa cambió y luego se configuró el alcance. Esto podría ser un error, a menos que haya alguna advertencia oculta en algún lugar de la documentación, pero en el primer caso, el recorte parece permanecer activo en la capa de fondo.

La solución es agregar un alcance adicional dentro del otro alcance con la on background layeropción, o cambiar explícitamente la capa y agregar el alcance dentro, que es lo que he hecho a continuación.

Para mayor claridad, también muestro los cuadros delimitadores de la región de recorte.

\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}

ingrese la descripción de la imagen aquí

información relacionada