![Wie weist man dem Opazitätsschlüssel in der PostScript-Phase statt in der TeX-Phase einen zufälligen Wert zu?](https://rvso.com/image/281475/Wie%20weist%20man%20dem%20Opazit%C3%A4tsschl%C3%BCssel%20in%20der%20PostScript-Phase%20statt%20in%20der%20TeX-Phase%20einen%20zuf%C3%A4lligen%20Wert%20zu%3F.png)
Ich möchte eine zufällige Deckkraft haben, aber ich möchte kein fp
Paket 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 !
Rand
wurde 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}
Antwort2
Es gibt eine Möglichkeit, einen Postscript-Ausdruck zu übergeben, um die Opazität zu definieren, allerdings wird dabei nicht direkt die PSTricks- opacity
Option verwendet. Stattdessen kann der Ghostscript/Postscript-Operator .setshapealpha
verwendet 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 .setshapealpha
wird 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: