星印の付いたグラフィック オブジェクトとそのデュアルを使用したクリッピングで異なる結果が生成される理由は何ですか?

星印の付いたグラフィック オブジェクトとそのデュアルを使用したクリッピングで異なる結果が生成される理由は何ですか?

以下は、 からの抜粋です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を設定し、円を塗りつぶして の直前のグラフィック状態を で復元します。これにより、色/塗りつぶしコマンドは から除外されます。coloralphagrestoreclipclipping path

一方、コマンドは\pscircle*異なるpostscriptシーケンスを生成します。

...

0 0 1  setrgbcolor 56.90549 56.90549 28.45274
1. .setopacityalpha  SD  clip

ここでSDは を表すため0 360 arc fill、色/塗りつぶしコマンドはクリッピング パス内に残り、クリッピング後に適用されるようです。

答え2

切り抜きパス閉じた曲線そしてない塗りつぶされた領域。クリッピングパスに星型を使用すると予期しない動作が発生します。

関連情報