如果不进行裁剪,输出位置是正确的:
经过剪辑后,输出位置是错误的,因为它向左移动:
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl}
\psset
{
unit=0.8cm,
runit=\psunit,
fillstyle=solid,
PointName=none,
PointSymbol=none,
}
\pstVerb
{
true setglobal
globaldict begin
/theta 76 def
/Major 6.0 def
/Minor 3.3 def
/p2c {dup 3 1 roll cos mul 3 1 roll sin mul} bind def
end
false setglobal
}
\def\DeclareNodes
{%
\pstGeonode
(0,-8){Bottom}%
(0,8){Top}%
(0,0){center}%
(0,2.7){A}%
(0.5,2.7){B}%
(1,3.25){C}%
(1.2,1.3){D}%
(1.3,1.0){E}%
(2.0,1.0){F}%
(3.0,1.0){G}%
(3.0,2.2){H}%
(!Minor Major theta p2c){I}%
(!Minor Major theta neg p2c){J}%
(4,-2){K}%
(4,0){L}%
(2.2,-1.8){M}%
(1.5,-1){N}%
(1,-1){O}%
(0,-3.2){P}%
\pstOrtSym{Bottom}{Top}{B,C,D,E,F,G,H,I,J,K,L,M,N,O}%
}
\def\RightPart
{%
\psline(A)(B)(C)%
\psbezier(D)(E)(F)%
\psbezier(G)(H)(I)%
\psellipticarcn[dimen=middle](center)(!Major Minor){(I)}{(J)}%middle must be set!
\psbezier(K)(L)(M)%
\psbezier(N)(O)(P)%
}
\def\LeftPart
{%
\psbezier(O')(N')(M')%
\psbezier(L')(K')(J')%
\psellipticarcn[dimen=middle](center)(!Major Minor){(J')}{(I')}%middle must be set!
\psbezier(H')(G')(F')%
\psbezier(E')(D')(C')%
\psline(B')%
}%
\begin{document}
\begin{pspicture}[showgrid=top](-7,-4)(7,4)
\DeclareNodes
\pscustom*{\RightPart\LeftPart\closepath}
\end{pspicture}
\begin{pspicture}[showgrid=top](-7,-4)(7,4)
\DeclareNodes
\begin{psclip}{\pscustom[linestyle=none]{\RightPart\LeftPart\closepath}}
\psframe*(-7.5,-5)(7.5,5)
\end{psclip}
\end{pspicture}
\end{document}
答案1
免责声明:我不使用pstricks
也无法理解您用来绘制蝙蝠侠形象的 PostScript 代码,但尽管如此,我认为我可以提供一些有关您的示例中的问题的线索。
正如评论中所说,移位并不是第二幅图中的唯一区别,还引入了不对称性。我认为这可能是由于在剪辑之前声明了节点,所以我尝试移动内部节点的声明psclip
,如下所示:
\begin{pspicture}[showgrid=top](-7,-4)(7,4)
\begin{psclip}{\DeclareNodes\pscustom[linestyle=none]{\RightPart\LeftPart\closepath}}
\psframe*(-7.5,-5)(7.5,5)
\end{psclip}
\end{pspicture}
这样,不对称性就消失了,但向左的偏移变成了向右的微小偏移。我对此不太确定,因为出于某种未知原因,我没有将网格叠加在数字上,因此很难进行比较。
这是我得到的(我把它放在\fbox
网格周围以帮助自己):
请注意,在我的输出中,第一个图中已经存在不对称,但第二个图中的不对称是相同的(之前\DeclareNodes
第二psclip
个图中的不对称更加明显)。