如何在 PostScript 阶段而不是 TeX 阶段为不透明度键分配一个随机值?

如何在 PostScript 阶段而不是 TeX 阶段为不透明度键分配一个随机值?

我想要一个随机的不透明度,但我不想使用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 和 0.5)默认修改为新行为(生成 0 到 1 之间的随机实数,含 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选项。相反,可以使用opacityGhostscript/Postscript 运算符。(参见.setshapealphaGhostscript 附加运算符)。

这是 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}

PSTricks 内部也使用.setshapealpha了。事实上 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 的结果:

MWE 的结果

相关内容