¿Cómo asignar un valor aleatorio a la clave de opacidad en la fase PostScript en lugar de en la fase TeX?

¿Cómo asignar un valor aleatorio a la clave de opacidad en la fase PostScript en lugar de en la fase TeX?

Quiero tener una opacidad aleatoria pero no quiero usar fpel paquete. En pocas palabras, ¿es posible pasar una expresión PostScript a opacity?

Aquí está el ejemplo mínimo que no funciona para ahorrarle tiempo.

\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}

Advertencia !

Randhabía sido modificado tácitamente desde su comportamiento original (produciendo un número real aleatorio entre 0 y 0,5 inclusive) a un nuevo comportamiento (produciendo un número real aleatorio entre 0 y 1 inclusive). Si eres nuevo en esto Rand, es bueno; no es necesario actualizar ningún código en su código existente.

Respuesta1

Una forma muy sencilla es definir una nueva clave, que utiliza sus argumentos como código 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}

ingrese la descripción de la imagen aquí

Respuesta2

Hay una manera de pasar una expresión postscript para definir la opacidad, sin embargo, no usa directamente la opacityopción PSTricks. En su lugar .setshapealpha, se puede utilizar el operador Ghostscript/Postscript . (VerOperadores adicionales de Ghostscript).

Aquí hay un 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}

.setshapealphaPSTricks también lo utiliza internamente . De hecho, pst-news08 afirma: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.

Aquí está el resultado del MWE:

resultado del MWE

información relacionada