pstricks有许多图形对象,不过它们不一定符合你的要求,这时你可以定制自己的图形 对象。定制图形对象用命令
\pscustom*[参数]{图形对象或其它命令}
在进一步学习如何定制图形对象前,我们先要了解一下Postscript语言(以下简称PS语言) 如何处理图形。路径(path)是一条数学意义上的线,而不是视觉上的。一条路径可以包含 若干不连续的片段。它可能是开放的,也可能是封闭的。PS语言中有许多构造路径的操作。 路径的末端被称为当前点。没有路径,也就无所谓当前点。为了把路径转换为视觉上可见 的东西,PS语言可能填充路径形成的封闭区域,并且用线条勾勒。
对于“\pscustom”而言,开始的时候没有路径。你可以用很多命令来构造路径。其中一些 还可以右箭头。在结束时“\pscustom”也填充和勾勒路径。
设置参数时你头脑里必须把绘制、填充、勾勒这些动作分开。linewidth和linecolor参数 会影响箭头的绘制,但路径命令并不填充和勾勒路径,所以这些参数,以及linestyle、 fillstyle和相关的参数都没有其它影响(除了linewidth被用于路径相关的计算)。 “\pscustom”和“\fill”命令会利用fillstyle和相关参数,“\pscustom”和“\stroke” 命令会利用linestyle和相关参数。比如在“\pscustom”中包括了
\psline[linewidth=2pt,linecolor=blue,fillstyle=vlines]{<-}(3,3)(4,0)linewidth和linecolor影响箭头,但对于线段没有影响,而fillstyle没有任何影响。
shadow、border、doubleline和showpoints在“\pscustom”中是无效的。origin和swapaxes 只影响“\pscustom”本身。
为了计算模式,短划线和点划线参数需要知道路径的一些信息,你可以用参数
linetype=int来提供信息。int的值可以是
“\psgrid”、“\psdots”、“\qline”、“\qdisk”不能在“\pscustom”中使用。 最好不要使用封闭曲线对象,可以用开放曲线加“\closepath”。“\pscustom”中 最有用的就是开放曲线。比如
\pscustom{%
\psarc(0,0){1.5}{5}{85}
\psarcn{->}(0,0){3}{85}{5}}
下列对象会利用当前点作为第一个坐标,如果有的话
\pscustom[linewidth=1.5pt]{%
\psplot[plotstyle=curve]{.67}{4}{2 x div}
\psline(4,3)}
你可以控制开放曲线如何对待当前点,通过参数
liftpen=0/1/20是缺省值,当前点被作为第一个坐标,1表示不要把当前点作为第一个坐标, 2表示不要把当前点作为第一个坐标,并且不要在当前点和第一个坐标之间连线。 比如
\pscustom[linewidth=2pt,fillstyle=solid,fillcolor=gray]{%
\pscurve(0,2)(1,2.5)(2,1.5)(4,3)
\pscurve[liftpen=2](4,1)(3,0.5)(2,1)(1,0)(0,.5)}
本节所列举的命令都可以在“\pscustom”中安全地使用。
命令
\newpath清除路径和当前点。
命令
\moveto(x,y)移动当前点到(x,y)。
命令
\closepath关闭一条路径。
命令
\stroke[参数]勾勒路径。比如
\psline(0,3)(4,0)
\pscustom[linecolor=white,linewidth=1.5pt]{%
\psline(0,0)(4,3)
\stroke[linewidth=5\pslinewidth]
\stroke[linewidth=3\pslinewidth,linecolor=black]}
命令
\fill[参数]填充路径围成的区域。
命令
\gsave保存图形状态。
命令
\grestore恢复图形状态。
命令
\translate(x,y)把坐标系统平移到(x,y)。
命令
\scale{num1 num2}在水平方向上缩放num1,在垂直方向上缩放num2。
命令
\rotate{angle}旋转坐标系统。
命令
\swapaxes交换坐标轴。
命令
\msave保存当前坐标系统。
命令
\mrestore恢复坐标系统。
命令
\openshadow[参数]用阴影参数复制当前路径。
命令
\closedshadow[参数]绘制路径封闭的区域的阴影,如果不透明的话。
命令
\movepath(x,y)移动路径到(x,y)。
如果存在当前点,本节所列命令也是安全的。
命令
\lineto(x,y)是“\psline”的快速版。
命令
\rlineto(x,y)与“\lineto”类似,只是(x,y)相对于当前点插值。
命令
\curveto(x1,y1)(x2,y2)(x3,y3)是\psbezier(x1,y1)(x2,y2)(x3,y3)的快速版。
命令
\rcurveto(x1,y1)(x2,y2)(x3,y3)与“\curveto”,只是(x1,y1)、(x2,y2)、(x3,y3)相对于当前点插值。