
基於以下內容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]
並產生一個藍色圓圈。但第二次剪輯使用了它的對偶\pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0]
並產生了一個紅色圓圈。所以第二次剪輯產生了預期的結果。
\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
剪報小路是一個閉合曲線和不是一個填滿的區域。使用星形版本作為剪下路徑會產生意外的行為