
Basierend auf dem Folgenden aus pstricks.tex
,
\def\solid@star{%
\if@star
\pslinewidth=\z@
\psdoublelinefalse
\def\pslinestyle{none}%
\def\psk@fillstyle{\psfs@solid}%
\let\psfillcolor\pslinecolor
\fi}
markiertes Objekt
\xxx*[linecolor=<color>]
ist ähnlich wie
\xxx[fillstyle=solid,fillcolor=<color>,linestyle=none,linewidth=0]
Diese Ähnlichkeit ist jedoch nicht mehr gegeben, wenn wir sie als Beschneidungspfad verwenden. Im folgenden Beispiel wird ein rotes, ausgefülltes Rechteck von einem Kreis beschnitten.
Der erste Ausschnitt verwendet die mit Sternchen versehene Version \pscircle*[linecolor=blue]
und erzeugt einen blauen Kreis. Der zweite Ausschnitt verwendet jedoch die Dualversion \pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0]
und erzeugt einen roten Kreis. Der zweite Ausschnitt erzeugt also das erwartete Ergebnis.
\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}
Was macht diesen Unterschied?
Antwort1
Sie haben Recht, beides \pscircle*[linecolor=blue](2,2){1}
führt \pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0](2,2){1}
zum gleichen geschlossenen blauen Kreis. Die Reihenfolge der entsprechenden postscript
Befehle ist jedoch irgendwie unterschiedlich. Befehl \pscircle
...
0 360 arc closepath gsave 0 0 1 setrgbcolor
1. .setopacityalpha fill grestore clip
erstellt zuerst den kreisförmigen Pfad, speichert den aktuellen Grafikzustand mit gsave
, setzt den aktuellen color
und alpha
, füllt den Kreis und stellt den Grafikzustand mit grestore
unmittelbar vor dem wieder her clip
, wodurch die Farb-/Füllbefehle aus dem herausgefiltert werden clipping path
.
Andererseits \pscircle*
erzeugt der Befehl eine andere postscript
Sequenz:
...
0 0 1 setrgbcolor 56.90549 56.90549 28.45274
1. .setopacityalpha SD clip
wobei SD
für steht 0 360 arc fill
, somit verbleiben die Farb-/Füllbefehle im Beschneidungspfad und werden offenbar nach dem Beschneiden angewendet.
Antwort2
ein AusschnittWegist eingeschlossene KurveUndnichtein gefüllter Bereich. Die Verwendung einer Sternversion für den Beschneidungspfad führt zu einem unerwarteten Verhalten