
На основании следующего, взятого из 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
вырезкапутьэтозамкнутая криваяинетзаполненная область. Использование версии звезды для контура обрезки приводит к неожиданному поведению