我正在使用Pstricks
和绘制一些设置pst-optexp
。
我想知道以下示例的含义。另外,我找不到如何使用\pstVerb
和的详细说明tx@addDict
。
\multido{\i=0+1}{60}{%
\pstVerb{%
\i\space 650 400 sub 59 div mul 400 add
tx@addDict begin wavelengthToRGB end }%
\drawbeam[beamangle=\i\space 0.1 mul 3 sub]{2-}%
}%
答案1
\pstVerb{...}
- 参数以逐字 PostScript 形式包含,未按(g)save
和分组(g)restore
。当前点应为 TeX 的当前点。
\i\space
- 需要获取循环变量和后面有一个空格
tx@addDict begin ... end
- 需要使用特殊的 PostScript 字典,在本例中是来自pstricks-add
您可以在包文档中找到更多示例
答案2
诚然,从教学角度来看,这不是最好的例子。这是另一个版本,带有一些额外的解释。你的代码片段中缺少的是颜色定义,这就是所有这些\pstVerb
东西的原因:
\documentclass[pstricks, margin=5pt]{standalone}
\usepackage{pst-optexp}
\begin{document}
\begin{pspicture}(3,3)
\pnodes(-1,0){A}(1,2.2){B}(3,0){C}
\optplane(0,2.15)
\optprism[prismalign=center, prismangle=59](A)(B)(C)
\optplane(C)
\definecolor[ps]{bl}{rgb}{%
tx@addDict begin tx@OptexpDict begin
Wavelength wavelengthToRGB
Red Green Blue
end end }%
\addtopsstyle{Beam}{linecolor=bl, linewidth=0.4\pslinewidth, beamalign=abs}
\multido{\iLambda=400+4}{60}{%
\pstVerb{/Wavelength \iLambda\space def }%
\drawbeam[n=Wavelength Sellmaier]{-}%
}%
\end{pspicture}
\end{document}
该语法\definecolor[ps]...
允许您使用在 Postscript 级别计算的一些值来进行实际的颜色定义(请参阅xcolor 文档)。在您的示例中,值Red
、Green
和Blue
会在每次迭代中重新计算,并使用它们的值绘制以下光束。
在我改变的版本中,它可能会(也可能不会)变得更加明显:在每次迭代中,我定义一个新的Wavelength
,然后用于计算下一束光的新折射率和新的颜色三元组。