Tengo problemas para descubrir cómo se supone que debo combinar (o si se supone que no debo combinar) pic
mensajes de correo electrónico, recortar y superponer capas cuando pic
se incluye más de una instancia de a en un solo tikzpicture
entorno.
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
Es evidente que las cosas no están funcionando del todo bien. Supongo que el recorte de una instancia de my thing
está afectando de alguna manera el recorte en la segunda instancia. Pero no estoy seguro si eso es porque
- Estoy haciendo algo mal y, si es así, ¿qué?
- Estoy haciendo un mal uso
pic
de s (o clips o capas); - esto está relacionado con los errores conocidos con
pic
s; - esto está relacionado con otro error en
pic
s; - 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:
Entonces puedes ver que el problema es de suma gravedad...
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 layer
clave, 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 layer
opció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}