별표 표시된 그래픽 개체를 사용한 클리핑과 그 이중 결과가 다른 이유는 무엇입니까?

별표 표시된 그래픽 개체를 사용한 클리핑과 그 이중 결과가 다른 이유는 무엇입니까?

에서 가져온 다음 내용을 바탕으로 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사용하여 그래픽 상태를 복원하므로 색상/채우기 명령이 에서 필터링됩니다 .grestoreclipclipping path

반면에 명령은 \pscircle*다른 postscript시퀀스를 생성합니다.

...

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

여기서는 을 SD의미하므로 0 360 arc fill색상/채우기 명령은 클리핑 경로에 유지되며 분명히 클리핑 후에 적용됩니다.

답변2

클리핑폐곡선그리고~ 아니다채워진 지역. 클리핑 경로에 스타 버전을 사용하면 예기치 않은 동작이 발생합니다.

관련 정보