Wie weist man dem Opazitätsschlüssel in der PostScript-Phase statt in der TeX-Phase einen zufälligen Wert zu?

Wie weist man dem Opazitätsschlüssel in der PostScript-Phase statt in der TeX-Phase einen zufälligen Wert zu?

Ich möchte eine zufällige Deckkraft haben, aber ich möchte kein fpPaket verwenden. Kurz gesagt, ist es möglich, einen PostScript-Ausdruck an zu übergeben opacity?

Hier ist das minimale, nicht funktionierende Beispiel, um Ihnen Zeit zu sparen.

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

Warnung !

Randwurde stillschweigend von seinem ursprünglichen Verhalten (Erzeugung einer zufälligen reellen Zahl zwischen 0 und 0,5 einschließlich) zu einem neuen Verhalten (Erzeugung einer zufälligen reellen Zahl zwischen 0 und 1 einschließlich) geändert. Wenn Sie neu bei sind Rand, ist das gut; in Ihrem vorhandenen Code muss kein Code aktualisiert werden.

Antwort1

Eine sehr einfache Möglichkeit besteht darin, einen neuen Schlüssel zu definieren, der seine Argumente als Postscript-Code verwendet:

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

Bildbeschreibung hier eingeben

Antwort2

Es gibt eine Möglichkeit, einen Postscript-Ausdruck zu übergeben, um die Opazität zu definieren, allerdings wird dabei nicht direkt die PSTricks- opacityOption verwendet. Stattdessen kann der Ghostscript/Postscript-Operator .setshapealphaverwendet werden. (SieheZusätzliche Ghostscript-Operatoren).

Hier ist ein 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}

Dies .setshapealphawird auch intern von PSTricks verwendet. Tatsächlich heißt es in 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.

Hier ist das Ergebnis des MWE:

Ergebnis des MWE

verwandte Informationen