![TeX フェーズではなく PostScript フェーズで不透明度キーにランダム値を割り当てるにはどうすればよいでしょうか?](https://rvso.com/image/281475/TeX%20%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%20PostScript%20%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA%E3%81%A7%E4%B8%8D%E9%80%8F%E6%98%8E%E5%BA%A6%E3%82%AD%E3%83%BC%E3%81%AB%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E5%80%A4%E3%82%92%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%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式を渡す方法がありますが、PSTricksopacity
オプションを直接使用しません。代わりに、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 の結果は次のとおりです。