
以下は、 からの抜粋ですpstricks.tex
。
\def\solid@star{%
\if@star
\pslinewidth=\z@
\psdoublelinefalse
\def\pslinestyle{none}%
\def\psk@fillstyle{\psfs@solid}%
\let\psfillcolor\pslinecolor
\fi}
星印の付いたオブジェクト
\xxx*[linecolor=<color>]
と類似しています
\xxx[fillstyle=solid,fillcolor=<color>,linestyle=none,linewidth=0]
ただし、クリッピング パスとして使用する場合は、この類似性は保持されなくなります。次の例では、赤い実線の四角形が円でクリッピングされます。
最初のクリッピングでは星付きバージョンが使用され\pscircle*[linecolor=blue]
、青い円が生成されます。しかし、2 番目のクリッピングではそのデュアルが使用され\pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0]
、赤い円が生成されます。したがって、2 番目のクリッピングでは期待どおりの結果が生成されます。
\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}
この違いは何なのでしょうか?
答え1
おっしゃる通り、 と\pscircle*[linecolor=blue](2,2){1}
はどちらも\pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0](2,2){1}
同じ青い閉じた円になります。ただし、対応するコマンドの順序postscript
が若干異なります。コマンド\pscircle
...
0 360 arc closepath gsave 0 0 1 setrgbcolor
1. .setopacityalpha fill grestore clip
は最初に円形のパスを作成し、現在のグラフィック状態を で保存し、現在のとgsave
を設定し、円を塗りつぶして の直前のグラフィック状態を で復元します。これにより、色/塗りつぶしコマンドは から除外されます。color
alpha
grestore
clip
clipping path
一方、コマンドは\pscircle*
異なるpostscript
シーケンスを生成します。
...
0 0 1 setrgbcolor 56.90549 56.90549 28.45274
1. .setopacityalpha SD clip
ここでSD
は を表すため0 360 arc fill
、色/塗りつぶしコマンドはクリッピング パス内に残り、クリッピング後に適用されるようです。
答え2
切り抜きパスは閉じた曲線そしてない塗りつぶされた領域。クリッピングパスに星型を使用すると予期しない動作が発生します。