
Basado en lo siguiente tomado de pstricks.tex
,
\def\solid@star{%
\if@star
\pslinewidth=\z@
\psdoublelinefalse
\def\pslinestyle{none}%
\def\psk@fillstyle{\psfs@solid}%
\let\psfillcolor\pslinecolor
\fi}
objeto estrellado
\xxx*[linecolor=<color>]
es parecido a
\xxx[fillstyle=solid,fillcolor=<color>,linestyle=none,linewidth=0]
Sin embargo, esta similitud ya no se mantiene cuando los usamos como trazado de recorte. En el siguiente ejemplo, un círculo recortará un rectángulo sólido rojo.
El primer recorte utiliza la versión destacada \pscircle*[linecolor=blue]
y produce un círculo azul. Pero el segundo recorte usa su dual \pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0]
y produce un círculo rojo. Entonces el segundo recorte produce el resultado esperado.
\documentclass[border=12pt]{standalone}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}[showgrid=top](4,4)
\psclip{\pscircle*[linecolor=blue](2,2){1}}
\psframe*[linecolor=red](4,4)
\endpsclip
\end{pspicture}
\qquad
\begin{pspicture}[showgrid=top](4,4)
\psclip{\pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0](2,2){1}}
\psframe*[linecolor=red](4,4)
\endpsclip
\end{pspicture}
\end{document}
¿Qué hace esta diferencia?
Respuesta1
Tienes razón, ambos \pscircle*[linecolor=blue](2,2){1}
dan \pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0](2,2){1}
como resultado el mismo círculo azul cerrado. Sin embargo, el orden de postscript
los comandos correspondientes es algo diferente. Dominio \pscircle
...
0 360 arc closepath gsave 0 0 1 setrgbcolor
1. .setopacityalpha fill grestore clip
Primero construye la ruta circular, guarda el estado gráfico actual con gsave
, establece los valores actuales color
y alpha
, rellena el círculo y restaura el estado gráfico grestore
justo antes de clip
, por lo que los comandos de color/relleno se filtran de clipping path
.
por otro lado, el comando \pscircle*
genera una postscript
secuencia diferente:
...
0 0 1 setrgbcolor 56.90549 56.90549 28.45274
1. .setopacityalpha SD clip
donde SD
significa 0 360 arc fill
, por lo tanto, los comandos de color/relleno permanecen en el trazado de recorte y aparentemente se aplican después del recorte.
Respuesta2
un recortecaminoes uncurva cerradaynoun área llena. El uso de una versión en estrella para el trazado de recorte produce un comportamiento inesperado