![Как присвоить случайное значение ключу непрозрачности в фазе PostScript, а не в фазе TeX?](https://rvso.com/image/281475/%D0%9A%D0%B0%D0%BA%20%D0%BF%D1%80%D0%B8%D1%81%D0%B2%D0%BE%D0%B8%D1%82%D1%8C%20%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B5%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%BB%D1%8E%D1%87%D1%83%20%D0%BD%D0%B5%D0%BF%D1%80%D0%BE%D0%B7%D1%80%D0%B0%D1%87%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20%D0%B2%20%D1%84%D0%B0%D0%B7%D0%B5%20PostScript%2C%20%D0%B0%20%D0%BD%D0%B5%20%D0%B2%20%D1%84%D0%B0%D0%B7%D0%B5%20TeX%3F.png)
Я хочу иметь случайную непрозрачность, но не хочу использовать fp
пакет. Короче говоря, возможно ли передать выражение PostScript в opacity
?
Вот минимальный неработающий пример, который сэкономит ваше время.
\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\begin{document}
\begin{pspicture}[showgrid](-2,-2)(2,2)
\psframe*[linecolor=gray,opacity={!Rand}](2,2)
\end{pspicture}
\end{document}
Предупреждение !
Rand
был неявно изменен с его первоначального поведения (производство случайного действительного числа от 0 до 0,5 включительно) на новое поведение (производство случайного действительного числа от 0 до 1 включительно). Если вы новичок в Rand
, это хорошо; никакой код не нужно обновлять в вашем существующем коде.
решение1
Очень простой способ — определить новый ключ, который использует свои аргументы как код PostScript:
\documentclass[pstricks]{standalone}
\usepackage{multido}
\makeatletter
\define@key[psset]{pstricks}{psopacity}[1]{%
\edef\psk@opacityalpha{#1 }%
}%
\makeatother
\begin{document}
\begin{pspicture}(5,2)
\psset{fillstyle=solid, fillcolor=red, linestyle=none, linewidth=0pt}
\multido{\ra=0+0.5,\rb=0.5+0.5}{11}{%
\psframe[psopacity=Rand](\ra,0)(\rb,2)}%
\end{pspicture}
\end{document}
решение2
Существует способ передать postscript-выражение для определения непрозрачности, однако он не использует напрямую опцию PSTricks . Вместо этого можно использовать opacity
оператор Ghostscript/Postscript . (См..setshapealpha
Дополнительные операторы Ghostscript).
Вот MWE
\documentclass[pstricks,border=12pt]{standalone}
\SpecialCoor
\begin{document}
\makeatletter
\def\myRandomOpacity{\pst@Verb{Rand .setshapealpha}}
\def\myResetOpacity{\pst@Verb{1.0 .setshapealpha}}
\makeatother
\begin{pspicture}[showgrid,linecolor=red,unit=4cm](-1,-1)(1,1)
\psdot(! 0 Rand)
\psdot(! 0 Rand)
\myRandomOpacity
\psframe*[linecolor=green](0,0)(1,1)%
\myRandomOpacity
\psframe*[linecolor=green](0,0)(1,-1)
\myRandomOpacity
\psframe*[linecolor=green](0,0)(-1,-1)
\myRandomOpacity
\psframe*[linecolor=green](0,0)(-1,1)
\myResetOpacity
\end{pspicture}
\end{document}
Также используется .setshapealpha
внутри PSTricks. Действительно, pst-news08 утверждает:pstricks supports transparent colors with Ghostscript’s .setopacityalpha, .setblendmode, and .setshapealpha. These functions are not known to VTEX or Adobes Distiller. The optional argument vtex disables transparencies and distiller overrides the Ghostscript functions with the ones from the Distiller.
Вот результат MWE: