texlive[58731] Master/texmf-dist: pstricks (4apr21)
commits+preining at tug.org
commits+preining at tug.org
Sun Apr 4 04:22:41 CEST 2021
Revision: 58731
http://tug.org/svn/texlive?view=revision&revision=58731
Author: preining
Date: 2021-04-04 04:22:41 +0200 (Sun, 04 Apr 2021)
Log Message:
-----------
pstricks (4apr21)
Modified Paths:
--------------
trunk/Master/texmf-dist/dvips/pstricks/pstricks.pro
trunk/Master/texmf-dist/tex/generic/pstricks/config/distiller.cfg
trunk/Master/texmf-dist/tex/generic/pstricks/config/dvips.cfg
trunk/Master/texmf-dist/tex/generic/pstricks/config/dvipsone.cfg
trunk/Master/texmf-dist/tex/generic/pstricks/config/gastex.cfg
trunk/Master/texmf-dist/tex/generic/pstricks/config/textures.cfg
trunk/Master/texmf-dist/tex/generic/pstricks/config/vtex.cfg
trunk/Master/texmf-dist/tex/generic/pstricks/config/xdvipdfmx.cfg
trunk/Master/texmf-dist/tex/generic/pstricks/pst-fp.tex
trunk/Master/texmf-dist/tex/generic/pstricks/pstricks.tex
trunk/Master/texmf-dist/tex/latex/pstricks/pstricks-pdf.sty
Added Paths:
-----------
trunk/Master/texmf-dist/tex/generic/pstricks/pstricks.tex.neu
Modified: trunk/Master/texmf-dist/dvips/pstricks/pstricks.pro
===================================================================
--- trunk/Master/texmf-dist/dvips/pstricks/pstricks.pro 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/dvips/pstricks/pstricks.pro 2021-04-04 02:22:41 UTC (rev 58731)
@@ -1,7 +1,7 @@
-% $Id: pstricks.pro 23 2020-09-18 06:29:04Z herbert $
+% $Id: pstricks.pro 1055 2019-05-16 11:59:06Z herbert $
%
%% PostScript prologue for pstricks.tex.
-%% Version 1.32, 2020/09/18
+%% Version 1.34, 2021/03/30
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
@@ -13,24 +13,17 @@
revision 952 gt
{
- systemdict /.setalphaisshape known not
- {
- (\n\n%%%% WARNING: Transparency operations ignored - need to use -dALLOWPSTRANSPARENCY\n\n) print flush
- /.pushpdf14devicefilter {pop} bind def
- /.begintransparencygroup {pop pop pop pop pop} bind def
- /.endtransparencygroup {} bind def
- /.poppdf14devicefilter {} bind def
- /.setfillconstantalpha {pop} bind def
- /.setstrokeconstantalpha {pop} bind def
- /PageUsesTransparency false def
- }
- {
systemdict /.setopacityalpha known not
- { systemdict /.setfillconstantalpha known { /.setopacityalpha /.setfillconstantalpha load def } { /.setopacityalpha { pop } def } ifelse } if
- systemdict /.setblendmode known not { /.setblendmode { pop } def } if
- systemdict /.setshapealpha known not
- { systemdict /.setstrokeconstantalpha known { /.setshapealpha {dup .setfillconstantalpha .setstrokeconstantalpha true .setalphaisshape } def } { /.setshapealpha { pop } def } ifelse } if
- } ifelse
+ {
+ (\n\n%%%% WARNING: Transparency operations ignored - need to use -dALLOWPSTRANSPARENCY\n\n) print flush
+ /.setopacityalpha { pop } bind def
+ /.setshapealpha { pop } bind def
+ }
+ {
+ /.setopacityalpha /.setfillconstantalpha load def
+ /.setblendmode { pop } def
+ /.setshapealpha {dup .setfillconstantalpha .setstrokeconstantalpha true .setalphaisshape } def
+ } ifelse
}
{
systemdict /.setopacityalpha known not
Modified: trunk/Master/texmf-dist/tex/generic/pstricks/config/distiller.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pstricks/config/distiller.cfg 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/tex/generic/pstricks/config/distiller.cfg 2021-04-04 02:22:41 UTC (rev 58731)
@@ -1,4 +1,4 @@
-% $Id: distiller.cfg 446 2017-04-19 11:40:55Z herbert $
+% $Id: distiller.cfg 4 2020-06-09 08:32:19Z herbert $
%% BEGIN: distiller.con (for distiller driver)
%%
%% Configuration file for PSTricks
Modified: trunk/Master/texmf-dist/tex/generic/pstricks/config/dvips.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pstricks/config/dvips.cfg 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/tex/generic/pstricks/config/dvips.cfg 2021-04-04 02:22:41 UTC (rev 58731)
@@ -1,4 +1,4 @@
-% $Id: dvips.cfg 797 2018-08-23 18:33:16Z herbert $
+% $Id: dvips.cfg 4 2020-06-09 08:32:19Z herbert $
%% BEGIN: pstricks.con (for dvips driver)
%%
%% Configuration file for PSTricks
Modified: trunk/Master/texmf-dist/tex/generic/pstricks/config/dvipsone.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pstricks/config/dvipsone.cfg 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/tex/generic/pstricks/config/dvipsone.cfg 2021-04-04 02:22:41 UTC (rev 58731)
@@ -1,4 +1,4 @@
-% $Id: dvipsone.cfg 446 2017-04-19 11:40:55Z herbert $
+% $Id: dvipsone.cfg 4 2020-06-09 08:32:19Z herbert $
%% BEGIN pstricks.con (for DVIPSONE driver)
%%
%% Configuration file for PSTricks 97: must be renamed `pstricks.con'
Modified: trunk/Master/texmf-dist/tex/generic/pstricks/config/gastex.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pstricks/config/gastex.cfg 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/tex/generic/pstricks/config/gastex.cfg 2021-04-04 02:22:41 UTC (rev 58731)
@@ -1,4 +1,4 @@
-% $Id: gastex.cfg 446 2017-04-19 11:40:55Z herbert $
+% $Id: gastex.cfg 4 2020-06-09 08:32:19Z herbert $
%% BEGIN: pstricks.con (for xdvipdfmx driver)
%%
%% Configuration file for PSTricks
Modified: trunk/Master/texmf-dist/tex/generic/pstricks/config/textures.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pstricks/config/textures.cfg 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/tex/generic/pstricks/config/textures.cfg 2021-04-04 02:22:41 UTC (rev 58731)
@@ -1,4 +1,4 @@
-% $Id: textures.cfg 446 2017-04-19 11:40:55Z herbert $
+% $Id: textures.cfg 4 2020-06-09 08:32:19Z herbert $
%% BEGIN pstricks.con (for Textures 1.7 and 1.8 driver)
%%
%% Configuration file for PSTricks 97: must be renamed `pstricks.con'
Modified: trunk/Master/texmf-dist/tex/generic/pstricks/config/vtex.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pstricks/config/vtex.cfg 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/tex/generic/pstricks/config/vtex.cfg 2021-04-04 02:22:41 UTC (rev 58731)
@@ -1,4 +1,4 @@
-% $Id: vtex.cfg 446 2017-04-19 11:40:55Z herbert $
+% $Id: vtex.cfg 4 2020-06-09 08:32:19Z herbert $
%% BEGIN: pstricks.con (for VTeX)
%%
%% Configuration file for PSTricks 97
Modified: trunk/Master/texmf-dist/tex/generic/pstricks/config/xdvipdfmx.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pstricks/config/xdvipdfmx.cfg 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/tex/generic/pstricks/config/xdvipdfmx.cfg 2021-04-04 02:22:41 UTC (rev 58731)
@@ -1,4 +1,4 @@
-% $Id: xdvipdfmx.cfg 446 2017-04-19 11:40:55Z herbert $
+% $Id: xdvipdfmx.cfg 4 2020-06-09 08:32:19Z herbert $
%
%% BEGIN: pstricks.con (for xdvipdfmx driver)
%%
Modified: trunk/Master/texmf-dist/tex/generic/pstricks/pst-fp.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pstricks/pst-fp.tex 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/tex/generic/pstricks/pst-fp.tex 2021-04-04 02:22:41 UTC (rev 58731)
@@ -18,16 +18,16 @@
%% `pst-fp' is a PSTricks related package for a division,
%% multiplication and addition
%%
+%
+\def\fileversion{0.06}
+\def\filedate{2020/11/20}
+\message{`pst-fp' v\fileversion, \filedate\space (hv)}
+
\csname PSTFPloaded\endcsname
\let\PSTFPloaded\endinput
-%
% Requires some packages
\ifx\PSTricksLoaded\endinput\else\input pstricks \fi
%
-\def\fileversion{0.05}
-\def\filedate{2010/01/17}
-\message{`pst-fp' v\fileversion, \filedate\space (hv)}
-%
\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
%fixed point arithmetic with values between (including)
Modified: trunk/Master/texmf-dist/tex/generic/pstricks/pstricks.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pstricks/pstricks.tex 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/tex/generic/pstricks/pstricks.tex 2021-04-04 02:22:41 UTC (rev 58731)
@@ -80,8 +80,8 @@
\fi
\let\pgfforeach\foreach
%
-\def\fileversion{3.01}
-\def\filedate{2020/09/18}
+\def\fileversion{3.01a}
+\def\filedate{2021/03/30}
\pst at addfams{pstricks}
%
%\define at boolkey[psset]{pstricks}[Pst@]{useURWfonts}[true]{}
Added: trunk/Master/texmf-dist/tex/generic/pstricks/pstricks.tex.neu
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pstricks/pstricks.tex.neu (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/pstricks/pstricks.tex.neu 2021-04-04 02:22:41 UTC (rev 58731)
@@ -0,0 +1,4595 @@
+%% pstricks.tex
+%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt
+%% COPYRIGHT 2000-2003 by Denis Girou.
+%% Copyright 2004-2019 Herbert Voss <hvoss at tug.org>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Herbert Voss
+%
+\csname PSTricksLoaded\endcsname
+\let\PSTricksLoaded\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% !! loading additional TeX packages see line 38,39 and 72ff
+%% !! loading config file pstricks.con line 439
+%% !! loading pro files line 452ff
+%% !! fileversion and date see line 83
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\edef\PstAtCode{\the\catcode`\@}
+\catcode`\@=11\relax
+%
+%\if at check@engine
+ \ifx\c at lor@to at ps\@undefined
+ \def\c at lor@to at ps{\PSTricks_Not_Configured_For_This_Format}% message for a pdflatex run
+ \fi
+%\fi
+\expandafter\ifx\csname @latexerr\endcsname\relax % do we have TeX? then @latexerr isn't defined
+ \input pstricks-tex.def
+\fi
+
+\let\ifpstUndefined\@ifundefined
+
+%\catcode`\@=\PstAtCode\relax
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex \fi
+\ifx\PSTFPloaded\endinput\else\input pst-fp.tex\fi
+%
+%\catcode`\@=11\relax
+\def\XKV at ch@ckch at ice#1#2#3{% bugfix for xkeyval
+ \def\XKV at tempa{#1}%
+ \ifx\XKV at tempa\@nnil\let\XKV at tempa\@empty\else
+ \def\XKV at tempa{\def#1{#2}}%
+ \fi
+% \in@{,#2,}{,#3,}%
+\begingroup\edef\x{\endgroup\noexpand\in@{,#2,}}\x{,#3,}%
+%\expandafter\in@\expandafter{\expandafter,#2,}{,#3,}% --- hv 2012-04-27
+ \ifin@
+ \ifXKV at pl
+ \XKV at addtomacro@n\XKV at tempa\@firstoftwo
+ \else
+ \XKV at addtomacro@n\XKV at tempa\@firstofone
+ \fi
+ \else
+ \ifXKV at pl
+ \XKV at addtomacro@n\XKV at tempa\@secondoftwo
+ \else
+ \XKV at toks{#2}%
+ \XKV at err{value `\the\XKV at toks' is not allowed}%
+ \XKV at addtomacro@n\XKV at tempa\@gobble
+ \fi
+ \fi
+ \XKV at tempa
+}
+%
+\def\ProvidesPackageRCS#1{\typeout{Loading #1}}%
+%\@ifnextchar[\ProvidesPackageRCS at i{\ProvidesPackageRCS at i[] }}%$
+%\def\ProvidesPackageRCS at i[#1]#2{}
+
+\ifx\pgfkeysloaded\relax\else
+ \input pgfutil-common.tex
+ \input pgfkeys.code.tex
+ \input pgffor.code.tex
+\fi
+\let\pgfforeach\foreach
+%
+\def\fileversion{3.0}
+\def\filedate{2020/04/01}
+\pst at addfams{pstricks}
+%
+%\define at boolkey[psset]{pstricks}[Pst@]{useURWfonts}[true]{}
+%\psset{useURWfonts}
+%
+% stolen from latex.ltx to make it TeX compatible
+\newcount\psLoopIndex
+\long\def\@fornoop#1\@@#2#3{}
+\long\def\@for#1:=#2\do#3{%
+ \pst at cntm=0
+ \expandafter\def\expandafter\@fortmp\expandafter{#2}%
+ \ifx\@fortmp\@empty \else
+ \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}
+%
+\long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx#4\@nnil \else
+ #5\def#4{#2}\ifx#4\@nnil \else\global\advance\psLoopIndex by \@ne\relax
+ #5\@iforloop #3\@@#4{#5}\fi\fi}
+%
+\long\def\@iforloop#1,#2\@@#3#4{\global\advance\psLoopIndex by \@ne\relax%
+ \def#3{#1}\ifx #3\@nnil
+ \expandafter\@fornoop \else
+ #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}}
+%
+\long\def\psforeach#1#2#3{%
+ \global\psLoopIndex=0\relax
+ \if$\ifnum9<1#2$\else\fi\psforeach at ii{#1}{#2}{#3}%
+ \else \expandafter\psforeach at i#2,..,,..,\@nil{#1}{#3}\fi}
+\long\def\psforeach at i#1,#2,..,#3,..,#4\@nil#5#6{%
+ \ifx\relax#3\relax\psforeach at ii{#5}{#1,#2}{#6}%
+ \else\psforeach at iii{#5}{#1}{#2}{#3}{#6}\fi}
+\long\def\psforeach at ii#1#2#3{%
+ \begingroup
+ \edef\reserved at a{#2}%
+ \@for#1:=\reserved at a\do{#3}%
+ \endgroup}
+\long\def\psforeach at iii#1#2#3#4#5{%
+ \pstFPsub\pst at tempA{#3}{#2}%
+ \pst at dimm=\pst at tempA pt%
+ \pstFPstripZeros{\pst at tempA}\pst at tempB%
+ \def\pst at tempA{#2}%
+ \def\pst at tempa{#2}%
+ \pst at dimn=#4pt%
+ \loop
+ \pst at dimm=\pst at tempA pt
+ \ifdim\pst at dimm<\pst at dimn
+ \pstFPadd\pst at tempA{\pst at tempA}{\pst at tempB}%
+ \pstFPstripZeros{\pst at tempA}\pst at tempA%
+ \edef\pst at tempa{\pst at tempa,\pst at tempA}%
+ \repeat%
+ \psforeach at ii{#1}{\pst at tempa}{#5}}
+%
+\long\def\psForeach#1#2#3{% without grouping the contents
+ \global\psLoopIndex=0\relax%
+ \if$\ifnum9<1#2$\else\fi\psforeach at ii{#1}{#2}{#3}%
+ \else \expandafter\psForeach at i#2,..,,..,\@nil{#1}{#3}\fi}
+\long\def\psForeach at i#1,#2,..,#3,..,#4\@nil#5#6{%
+ \ifx\relax#3\relax\psForeach at ii{#5}{#1,#2}{#6}%
+ \else\psForeach at iii{#5}{#1}{#2}{#3}{#6}\fi%
+}
+\long\def\psForeach at ii#1#2#3{%
+ \edef\reserved at a{#2}%
+ \@for#1:=\reserved at a\do{#3}}
+\long\def\psForeach at iii#1#2#3#4#5{%
+ \pstFPsub\pst at tempA{#3}{#2}%
+ \pst at dimm=\pst at tempA pt%
+ \pstFPstripZeros{\pst at tempA}\pst at tempB%
+ \def\pst at tempA{#2}%
+ \def\pst at tempa{#2}%
+ \pst at dimn=#4pt%
+ \loop%
+ \pst at dimm=\pst at tempA pt%
+ \ifdim\pst at dimm<\pst at dimn%
+ \pstFPadd\pst at tempA{\pst at tempA}{\pst at tempB}%
+ \pstFPstripZeros{\pst at tempA}\pst at tempA
+ \edef\pst at tempa{\pst at tempa,\pst at tempA}%
+ \repeat%
+ \psForeach at ii{#1}{\pst at tempa}{#5}
+}
+
+\def\psrecur at i#1{\csname ps at rn#1\psrecur at i}
+\long\def\ps at rnm#1{\endcsname{#1}#1\global\advance\psLoopIndex by \@ne}
+\long\def\ps at rn#1{}
+\def\psLoop#1{\global\psLoopIndex=0\relax%
+ \csname ps at rn\expandafter\psrecur at i
+ \romannumeral\number\number#1 000\endcsname\endcsname}
+
+%
+% hv 2007-10-16 to fix the bug in pst-node with \\[name=...]
+% hv fix bug with empty fnodes in psmatrix
+\def\ps at ifnextchar#1#2#3{%
+ \let\reserved at d= #1%
+ \def\reserved at a{#2}\def\reserved at b{#3}%
+ \futurelet\@let at token\ps at ifnch}
+\def\ps at ifnch{%
+ \ifx\@let at token\reserved at d \let\reserved at b\reserved at a \fi
+ \reserved at b
+}
+\def\pshskip#1{\vrule \@width\z@\nobreak \hskip #1\hskip \z at skip}
+% end bugfix
+\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz,hv)}
+\def\@pstrickserr#1#2{%
+ \begingroup
+ \newlinechar`\^^J
+ \edef\pst at tempc{#2}%
+ \expandafter\errhelp\expandafter{\pst at tempc}%
+ \typeout{%
+ PSTricks error. \space See User's Guide for further information.^^J
+ \@spaces\@spaces\@spaces\@spaces
+ Type \space H <return> \space for immediate help.}%
+ \errmessage{#1}%
+ \endgroup}
+\def\@ehpa{%
+ Your command was ignored. Default value substituted.^^J
+ Type \space <return> \space to procede.}
+\def\@ehpb{%
+ Your command was ignored. Will recover best I can.^^J
+ Type \space <return> \space to procede.}
+\def\@ehpc{%
+ You better fix this before proceding.^^J
+ See the PSTricks User's Guide or ask your system administrator for help.^^J
+ Type \space X <return> \space to quit.}
+\def\@ehpd{%
+ Not allowed optional argument.^^J
+ Will proceed with the default setting.^^J
+ Type \space X <return> \space to quit.}
+\def\pst at misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb}
+\newdimen\pst at dima
+\newdimen\pst at dimb
+\newdimen\pst at dimc
+\newdimen\pst at dimd
+\newdimen\pst at dimg
+\newdimen\pst at dimh
+\newdimen\pst at dimm
+\newdimen\pst at dimn
+\newdimen\pst at dimo
+\newdimen\pst at dimp
+\chardef\f at ur=4
+%
+\newbox\pst at hbox
+\newbox\pst at ibox
+\newbox\pst at boxg
+\newcount\pst at cnta
+\newcount\pst at cntb
+\newcount\pst at cntc
+\newcount\pst at cntd
+\newcount\pst at cntg
+\newcount\pst at cnth
+\newcount\pst at cntm
+\newcount\pst at cntn
+\newcount\pst at cnto
+\newcount\pst at cntp
+\newcount\@zero\@zero=0\relax
+%
+\newif\ifPst at SpecialLength
+\Pst at SpecialLengthfalse
+%
+\newif\if at pst
+\newtoks\pst at toks
+\newif\if at star
+\def\pst at ifstar#1{%
+ \@ifnextchar*{\@startrue\def\ps at next*{#1}\ps at next}{\@starfalse#1}}
+%
+\def\pst at expandafter#1#2{%
+ \def\ps at next{#1}%
+ \edef\@tempa{#2}%
+ \ifx\@tempa\@empty
+ \@pstrickserr{Unexpected empty argument!}\@ehpb
+ \def\@tempa{\@empty}%
+ \fi
+ \expandafter\ps at next\@tempa}
+%
+\def\pst at dimtonum#1#2{\edef#2{\pst@@dimtonum#1}}
+\def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1}
+{\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}}
+%
+\def\pst at getdimdim#1 #2 #3\@nil{%
+ \def\pst at tempA{#2}%
+ \ifx\pst at tempA\@empty
+ \pssetlength\pst at dimn{#1}%
+ \pst at dimm=\z@%
+ \else%
+ \pssetlength\pst at dimm{#1}%
+ \pssetlength\pst at dimn{#2}%
+ \fi%
+}
+\def\pst at getxdimdim#1 #2 #3\@nil{%
+ \def\pst at tempA{#2}%
+ \ifx\pst at tempA\@empty
+ \pssetxlength\pst at dimn{#1}%
+ \pst at dimm=\z@
+ \else%
+ \pssetxlength\pst at dimm{#1}%
+ \pssetxlength\pst at dimn{#2}%
+ \fi%
+}
+\def\pst at getydimdim#1 #2 #3\@nil{%
+ \def\pst at tempA{#2}%
+ \ifx\pst at tempA\@empty
+ \pssetylength\pst at dimn{#1}%
+ \pst at dimm=\z@%
+ \else
+ \pssetylength\pst at dimm{#1}%
+ \pssetylength\pst at dimn{#2}%
+ \fi}
+%
+% A modulo macro for integer values
+% \pst at mod{34}{6}\value ==> \value is 4
+%
+\def\pst at mod#1#2#3{%
+ \begingroup%
+ \pst at cntm=#1\pst at cntn=#2\relax%
+ \pst at cnto=\pst at cntm%
+ \divide\pst at cntm by \pst at cntn%
+ \multiply\pst at cntn by \pst at cntm%
+ \advance\pst at cnto by -\pst at cntn%
+ \edef\value{\endgroup\def\noexpand#3{\number\pst at cnto}}\value%
+}
+\def\pst at max#1#2#3{%
+ \begingroup%
+ \pst at cntm=#1\pst at cntn=#2\relax%
+ \ifnum\pst at cntm<\pst at cntn\pst at cntm=\pst at cntn\fi
+ \global#3=\the\pst at cntm%
+ \endgroup%
+}
+\def\pst at maxdim#1#2#3{%
+ \begingroup%
+ \pst at dimm=#1\pst at dimn=#2\relax%
+ \ifdim\pst at dimm<\pst at dimn\pst at dimm=\pst at dimn\fi
+ \global#3=\the\pst at dimm%
+ \endgroup%
+}
+\def\pst at mindim#1#2#3{%
+ \begingroup%
+ \pst at dimm=#1\pst at dimn=#2\relax%
+ \ifdim\pst at dimm>\pst at dimn\pst at dimm=\pst at dimn\fi
+ \global#3=\the\pst at dimm%
+ \endgroup%
+}
+\def\pst at abs#1#2{%
+ \begingroup%
+ \pst at cntm=#1\relax%
+ \ifnum\pst at cntm<\z@\pst at cntm=-\pst at cntm\fi%
+ \global#2=\the\pst at cntm
+ \endgroup%
+}
+\def\pst at absdim#1#2{%
+ \begingroup%
+ \pst at dimm=#1\relax%
+ \ifdim\pst at dimm<\z@\pst at dimm=-\pst at dimm\fi%
+ \global#2=\the\pst at dimm%
+ \endgroup%
+}
+%
+\def\pst at pyth#1#2#3{% from pst-3d
+ \begingroup%
+ \pst at dima=#1\relax%
+ \ifnum\pst at dima<\z@\pst at dima=-\pst at dima\fi% dima=abs(x)
+ \pst at dimb=#2\relax%
+ \ifnum\pst at dimb<\z@\pst at dimb=-\pst at dimb\fi% dimb=abs(y)
+ \advance\pst at dimb\pst at dima % dimb=s=abs(x)+abs(y)
+ \ifnum\pst at dimb=\z@
+ \global\pst at dimg=\z@ % dimg=z=sqrt(x^2+y^2)
+ \else
+ \multiply\pst at dima 8\relax % dima= 8abs(x)
+ \pst@@divide\pst at dima\pst at dimb % dimg =8t=8abs(x)/s
+ \advance\pst at dimg -4pt % dimg = 4tau = (8t-4)
+ \multiply\pst at dimg 2
+ \pst at dimtonum\pst at dimg\pst at tempa
+ \pst at dima=\pst at tempa\pst at dimg % dima=(8tau)^2
+ \advance\pst at dima 64pt % dima=u=[64+(8tau)^2]/2
+ \divide\pst at dima 2\relax % =(8f)^2
+ \pst at dimd=7pt % initial guess at sqrt(u)
+ \pst@@pyth\pst@@pyth\pst@@pyth % dimd=sqrt(u)
+ \pst at dimtonum\pst at dimd\pst at tempa
+ \pst at dimg=\pst at tempa\pst at dimb
+ \global\divide\pst at dimg 8 % dimg=z=(8f)*s/8
+ \fi
+ \endgroup
+ #3=\pst at dimg}
+%
+\def\pst@@pyth{% dimd = g <-- (g + u/g)/2
+ \pst@@divide\pst at dima\pst at dimd
+ \advance\pst at dimd\pst at dimg
+ \divide\pst at dimd 2\relax}
+%
+% ----- the old pst at pyth begin ----- did not use dimens
+\def\pst at Pyth#1#2#3{\ifdim#1>#2\pst@@Pyth#1#2#3\else\pst@@Pyth#2#1#3\fi}
+\def\pst@@Pyth#1#2#3{%
+ \ifdim4#1>9#2\relax
+ #3=#1\advance#3 .2122#2%
+ \else
+ #3=.8384#1\advance#3 .5758#2%
+ \fi%
+}
+% ----- the old pst at pyth end -----
+%
+%------ new version \pst at divide ̣-------- by Michael Sharpe
+\def\pst at divide#1#2#3{%
+ \pst@@divide{#1}{#2}%
+ \advance\pst at dimg \pst at cnta pt%
+ \pst at dimtonum\pst at dimg{#3}%
+}
+\def\pst@@divide#1#2{%
+ \pst at dimg=#1\relax%
+ \pst at dimh=#2\relax%
+ \pst at cnth=\pst at dimh%
+ \pst at cntg=\pst at dimg%
+ \pst at cnta=\pst at cntg%
+ \divide\pst at cnta\pst at cnth%
+ \advance\pst at dimg -\pst at cnta\pst at dimh%
+ \pst at cntm=67108863\relax %2^26 -1
+ \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide%
+ \divide\pst at dimg\pst at cnth%
+}%
+\def\pst@@@divide{%
+ \ifnum%
+ \ifnum\pst at dimg<\z at -\fi\pst at dimg<\pst at cntm%
+ \multiply\pst at dimg\sixt@@n%
+ \else%
+ \divide\pst at cnth\sixt@@n%
+ \fi%
+}%
+%
+%-------------- the old version ----------
+\iffalse
+\def\pst at divide#1#2#3{%
+ \pst@@divide{#1}{#2}%
+ \pst at dimtonum\pst at dimg{#3}%
+}
+\def\pst@@divide#1#2{%
+ \pst at dimg=#1\relax
+ \pst at dimh=#2\relax
+ \pst at cntg=\pst at dimh
+ \pst at cnth=67108863
+ \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide
+ \divide\pst at dimg\pst at cntg%
+}
+\def\pst@@@divide{%
+ \ifnum
+ \ifnum\pst at dimg<\z at -\fi\pst at dimg<\pst at cnth
+ \multiply\pst at dimg\sixt@@n
+ \else
+ \divide\pst at cntg\sixt@@n
+ \fi%
+}
+\fi
+%-------------- end old vesrion ---------------
+%
+\def\pst at configerr#1{\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc}
+%
+\def\pstVerb#1{\pst at configerr\pstVerb}
+\def\pstverb#1{\pst at configerr\pstverb}
+\def\pstverbscale{\pst at configerr\pstverbscale}
+\def\pstrotate{\pst at configerr\pstrotate}
+\def\pstheader#1{\pst at configerr\pstheader}
+\def\pstdriver{\pst at configerr\pstdriver}
+\@ifundefined{pstcustomize}%
+ {\def\pstcustomize{\endinput\let\pstcustomize\relax}}{}
+%
+\input pstricks.con % local config file
+%
+\newif\ifPSTricks
+\PSTrickstrue
+\def\PSTricksOff{%
+ \def\pstheader##1{}%
+ \def\pstverb##1{}%
+ \def\pstVerb##1{}%
+ \PSTricksfalse%
+}
+\@ifundefined{pst at def}{\def\pst at def#1<#2>{\@namedef{tx@#1}{#2 }}}{}
+\@ifundefined{pst at ATH}{\def\pst at ATH<#1>{}}{}
+%
+\pstheader{pstricks.pro}
+%\pstheader{pstricks-fonts.pro}
+\pstheader{pst-algparser.pro}
+\pstheader{pst-tools.pro}
+%
+\def\pst at dict{tx at Dict begin }
+\def\pst at theheaders{pstricks.pro, pst-algparser.pro}
+\def\pst at Verb#1{\pstVerb{\pst at dict #1 end}}
+\def\tx at Atan{Atan }
+\def\tx at Div{Div }
+\def\tx at NET{NET }
+\def\tx at Pyth{Pyth }
+\def\tx at PtoC{PtoC }
+\def\tx at PathLength@{PathLength@ }
+\def\tx at PathLength{PathLength }
+\pst at dimg=\pstunit\relax
+\ifdim\pst at dimg=1bp
+\def\pst at stp{.996264 dup scale}
+\else
+\edef\pst at stp{1 \pst@@dimtonum\pst at dimg\space div dup scale}
+\fi
+\def\tx at STP{STP }
+\def\tx at STV{STV }
+%
+%--------------------------------------- PS stuff ---------------------------------
+% on stack x y
+\pst at def{UserCoor}< \pst at number\psyunit div exch \pst at number\psxunit div exch >
+\pst at def{ScreenCoor}< \pst at number\psyunit mul exch \pst at number\psxunit mul exch >
+%--------------------------------------- PS stuff end -----------------------------
+%
+\def\pst at number#1{\pst@@dimtonum#1\space}
+%
+%-----------------------% hv 20100413
+\def\pst at strip@dot#1{\expandafter\pst at strip@dot at i#1..\@nil}
+\def\pst at strip@dot at i#1.#2.#3\@nil{%
+ \ifnum1#2>10\relax #1.#2\else#1\fi}
+%-----------------------% hv 20100413
+\def\pst at checknum#1#2{%
+ \edef\ps at next{#1}%
+ \ifx\ps at next\@empty
+ \let\pst at num\z@
+ \else
+ \expandafter\pst@@checknum\ps at next..\@nil
+ \fi
+ \ifcase\pst at num\relax
+ \@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa
+ \def#2{0 }%
+ \or% 1
+ \edef#2{\ifnum\pst at num=\tw at -\fi\the\pst at cntg.%
+ \expandafter\@gobble\the\pst at cnth\space}%
+ \or% 2
+ \edef#2{\ifnum\pst at num=\tw at -\fi\the\pst at cntg.%
+ \expandafter\@gobble\the\pst at cnth\space}%
+ \or% 3
+ \edef#2{\pst at tempA\space}%
+ \fi}
+\def\pst@@checknum{%
+ \@ifnextchar-%
+ {\let\pst at num\tw@\expandafter\pst@@@checknum\@gobble}%
+ {\@ifnextchar !%
+ {\def\pst at num{3}\pst@@@@@checknum}
+ {\let\pst at num\@ne\pst@@@checknum}}%
+}
+\def\pst@@@checknum#1.#2.#3\@nil{%
+\afterassignment\pst@@@@checknum\pst at cntg=0#1\relax\@nil%
+\afterassignment\pst@@@@checknum\pst at cnth=1#2\relax\@nil}
+\def\pst@@@@checknum#1\relax\@nil{\ifx\@nil#1\@nil\else\let\pst at num\z@\fi}
+%
+\def\pst@@@@@checknum#1#2.#3\@nil{\def\pst at tempA{#2}}% PostScript Notation with !<code>
+%
+\def\pst at getnumii#1 #2 #3\@nil{%
+ \pst at checknum{#1}\pst at tempg%
+ \ifx\relax#2\relax\let\pst at temph\pst at tempg\else\pst at checknum{#2}\pst at temph\fi}
+\def\pst at getnumiii#1 #2 #3 #4\@nil{%
+\pst at checknum{#1}\pst at tempg%
+\pst at checknum{#2}\pst at temph%
+\pst at checknum{#3}\pst at tempi}
+\def\pst at getnumiv#1 #2 #3 #4 #5\@nil{%
+\pst at checknum{#1}\pst at tempg%
+\pst at checknum{#2}\pst at temph%
+\pst at checknum{#3}\pst at tempi%
+\pst at checknum{#4}\pst at tempj}
+%
+\def\pst at getdimnum#1 #2 #3\@nil{%
+ \pssetlength\pst at dimg{#1}%
+ \pst at checknum{#2}\pst at tempg%
+}
+\def\pst at getscale#1#2{% read and check a scale input x [y]
+ \edef\pst at tempg{#1}%
+ \ifx\pst at tempg\@none
+ \def#2{}%
+ \else
+ \pst at expandafter\pst at getnumii{#1 #1} {} {} {}\@nil
+ \ifdim\pst at tempg\p@=\z@
+ \@pstrickserr{Bad scaling argument `#1'}\@ehpa
+ \def#2{}%
+ \else
+ \ifdim\pst at temph\p@=\z@
+ \@pstrickserr{Bad scaling argument `#1'}\@ehpa
+ \def#2{}%
+ \else
+ \edef#2{\pst at tempg\space \pst at temph\space scale }%
+ \fi
+ \fi
+ \fi%
+}
+\def\pst at getint#1#2{% read and check an integer
+ \pst at cntg=#1\relax
+ \edef#2{\the\pst at cntg\space}%
+}
+\begingroup
+\catcode`\{=12
+\catcode`\}=12
+\catcode`\[=1
+\catcode`\]=2
+\gdef\pslbrace[{ ]
+\gdef\psrbrace[} ]
+\endgroup
+%
+\pstVerb{
+ /pssetRGBcolor /setrgbcolor load def
+ /pssetCMYKcolor /setcmykcolor load def
+ /pssetGraycolor /setgray load def
+}
+\def\@newcolor#1#2{%
+ \expandafter\edef\csname #1\endcsname{\noexpand\pst at color{#2}}%
+ %\expandafter\edef\csname color@#1\endcsname{#2}%
+ \expandafter\edef\csname\string\color@#1\endcsname{#2}% hv 1.14 2005-12-17
+ \ignorespaces}
+%
+\def\pst at color#1{\def\pst at currentcolor{#1}\pstVerb{#1}\aftergroup\pst at endcolor}%
+\def\pst at endcolor{\pstVerb{\pst at currentcolor}}
+\def\pst at currentcolor{0 setgray}
+\def\altcolormode{%
+\def\pst at color##1{%
+ \pstVerb{gsave ##1}\aftergroup\pst at endcolor}%
+\def\pst at endcolor{\pstVerb{\pst at grestore}}}
+\def\pssetMonochrome{%
+ \pstVerb{
+ /setrgbcolor { add add 0 gt {0}{1} ifelse setgray } def
+ /setcmykcolor{ 4 dict begin
+ /k ED /y ED /m ED /c ED
+ 1 1 k sub c mul k add sub 0.29 mul
+ 1 1 k sub m mul k add sub 0.587 mul add
+ 1 1 k sub y mul k add sub 0.114 mul add
+ end 0 gt {0}{1} ifelse setgray } def }}
+\def\pssetGrayscale{%
+ \pstVerb{
+ /setrgbcolor { 0.07 mul exch 0.71 mul add exch 0.21 mul add setgray } def
+ /setcmykcolor{ 4 dict begin
+ /k ED /y ED /m ED /c ED
+ 1 1 k sub c mul k add sub 0.29 mul
+ 1 1 k sub m mul k add sub 0.587 mul add
+ 1 1 k sub y mul k add sub 0.114 mul add
+ end setgray } def }}
+\def\psresetColor{\pstVerb{
+ /setrgbcolor tx at Dict begin /pssetRGBcolor load end def
+ /setcmykcolor tx at Dict begin /pssetCMYKcolor load end def }}
+
+\def\pst at grestore{
+ currentpoint
+ matrix currentmatrix
+ currentfont
+ grestore
+ setfont
+ setmatrix
+ moveto
+}
+%\def\pst at usecolor#1{\csname color@#1\endcsname\space}% hv 1.14 2005--12-17
+\def\pst at usecolor#1{\csname\string\color@#1\endcsname\space}
+%
+\def\newgray#1#2{%
+ \pst at checknum{#2}\pst at tempg
+ \@newcolor{#1}{\pst at tempg setgray}}%
+\def\newrgbcolor#1#2{%
+ \pst at expandafter\pst at getnumiii{#2} {} {} {} {}\@nil
+ \@newcolor{#1}{\pst at tempg \pst at temph \pst at tempi setrgbcolor}}
+\def\newhsbcolor#1#2{%
+ \pst at expandafter\pst at getnumiii{#2} {} {} {} {}\@nil
+ \@newcolor{#1}{\pst at tempg \pst at temph \pst at tempi sethsbcolor}}
+\def\newcmykcolor#1#2{%
+ \pst at expandafter\pst at getnumiv{#2} {} {} {} {} {}\@nil
+ \@newcolor{#1}{\pst at tempg \pst at temph \pst at tempi \pst at tempj setcmykcolor}}
+\newgray{black}{0}
+\newgray{darkgray}{.25}
+\newgray{gray}{.5}
+\newgray{lightgray}{.75}
+\newgray{white}{1}
+\newrgbcolor{red}{1 0 0}
+\newrgbcolor{green}{0 1 0}
+\newrgbcolor{blue}{0 0 1}
+\newrgbcolor{yellow}{1 1 0}
+\newrgbcolor{cyan}{0 1 1}
+\newrgbcolor{magenta}{1 0 1}
+
+\@ifundefined{xglobal}% do we have xcolor loaded?
+ {\@newcolor{randomgray}{tx at Dict begin Rand setgray end}%
+ \@newcolor{randomrgb}{tx at Dict begin Rand Rand Rand setrgbcolor end}%
+ \@newcolor{randomcmyk}{tx at Dict begin Rand Rand Rand Rand setcmykcolor end}%
+ \@newcolor{randomhsb}{tx at Dict begin Rand Rand Rand sethsbcolor end}%
+ }{%
+ \definecolor[ps]{randomgray}{gray}{tx at Dict begin Rand end}%
+ \definecolor[ps]{randomrgb}{rgb}{tx at Dict begin Rand Rand Rand end}%
+ \definecolor[ps]{randomcmyk}{cmyk}{tx at Dict begin Rand Rand Rand Rand end}%
+ \definecolor[ps]{randomhsb}{hsb}{tx at Dict begin Rand Rand Rand end}%
+ }
+%
+\define at boolkey[psset]{pstricks}[Pst@]{draft}[true]{}
+\define at key[psset]{pstricks}{bgcolor}{\def\pst at bgcolor{#1}}% background for pspicture
+\psset[pstricks]{bgcolor={},draft=false}% \pst at bgcolor is \@empty
+
+\define at key[psset]{pstricks}{style}{%
+ \@ifundefined{pscs@#1}%
+ {\@pstrickserr{Custom style `#1' undefined}\@ehpa}%
+ {\@nameuse{pscs@#1}}%
+}
+\def\newpsstyle{\@ifnextchar[\newpsstyle at ii{\newpsstyle at ii[]}}%% hv 2016-12-23
+%
+%\def\newpsstyle at i#1#2{\@namedef{pscs@#1}{%
+% \def\pst at tempA{#2}%
+% \ifx\pst at tempA\@empty\else\psset{#2}\fi}}
+%
+\def\newpsstyle at ii[#1]#2#3{%
+ \@namedef{pscs@#2}{\if$#1$\psset{#3}\else\psset[#1]{#3}\fi}}%% end
+%
+\def\addto at psstyle#1#2{%
+ \pst at toks=\expandafter{#1#2}%
+ \edef#1{\the\pst at toks}}
+\def\addtopsstyle#1#2{%
+ \def\pst at tempA{#2}%
+ \ifx\pst at tempA\@empty\else
+ \@ifundefined{pscs@#1}%
+ {\newpsstyle{#1}{#2}}%
+ {\expandafter\addto at psstyle\csname pscs@#1\endcsname{\psset{#2}}}%
+ \fi\ignorespaces}
+%------------ hv 1.16 end -------------------
+%
+\def\@none{none}
+\def\pst at getcolor#1#2{%
+% \@ifundefined{color@#1}% hv 1.14 2005-12-17
+ \@ifundefined{\string\color@#1}%
+ {\@pstrickserr{Color `#1' not defined}\@eha}%
+ {\edef#2{#1}}%
+}
+\newdimen\psunit \psunit 1cm
+\newdimen\psxunit \psxunit 1cm
+\newdimen\psyunit \psyunit 1cm
+\let\psrunit\psunit
+%
+\def\pstunit at off{\let\@psunit\ignorespaces\ignorespaces}
+%
+\def\pssetlength#1#2{%
+ \let\@psunit\psunit
+ \afterassignment\pstunit at off
+ #1 #2\@psunit%
+}
+\def\psaddtolength#1#2{%
+ \let\@psunit\psunit
+ \afterassignment\pstunit at off
+ \advance#1 #2\@psunit%
+}
+\def\pssetxlength#1#2{%
+ \let\@psunit\psxunit
+% \ifpst at useCalc
+% \edef\@@temp{\pscalculate{#2}}%
+% \afterassignment\pstunit at off
+% #1 \@@temp\@psunit
+% \else
+ \afterassignment\pstunit at off
+ #1 #2\@psunit
+% \fi
+}
+\def\pssetylength#1#2{%
+ \let\@psunit\psyunit
+% \ifpst at useCalc
+% \edef\@@temp{\pscalculate{#2}}%
+% \afterassignment\pstunit at off
+% #1 \@@temp\@psunit
+% \else
+ \afterassignment\pstunit at off
+ #1 #2\@psunit
+% \fi
+}
+\define at key[psset]{pstricks}{unit}[1cm]{%
+ \pssetlength\psunit{#1}%
+ \psxunit=\psunit%
+ \psyunit=\psunit%
+}
+\define at key[psset]{pstricks}{runit}[1cm]{\pssetlength\psrunit{#1}}
+\define at key[psset]{pstricks}{xunit}[1cm]{\pssetxlength\psxunit{#1}}
+\define at key[psset]{pstricks}{yunit}[1cm]{\pssetylength\psyunit{#1}}
+%
+\define at key[psset]{pstricks}{PstDebug}[0]{\pst at getint{#1}\Pst at Debug}% hv 2004-06-22
+\psset[pstricks]{PstDebug=0}
+\def\psDEBUG{\@ifnextchar[\psDEBUG at i{\psDEBUG at i[PSTricks]}}%
+\def\psDEBUG at i[#1]#2{\ifnum\Pst at Debug>0 \expandafter\typeout{<#1>: #2}\fi}%
+%
+\def\pst at getlength#1#2{%
+ \pssetlength\pst at dimg{#1}%
+ \edef#2{\pst at number\pst at dimg}%
+}
+\def\pst@@getlength#1#2{%
+ \pssetlength\pst at dimg{#1}%
+ \edef#2{\number\pst at dimg sp}%
+}
+\def\pst at getcoor#1#2{\pst@@getcoor{#1}\let#2\pst at coor}
+\def\pst at coor{0 0 }
+%
+\def\pst at getcoors#1#2{%
+ \def\pst at aftercoors{\addto at pscode{#1 \pst at coors }#2}%
+ \def\pst at coors{}%
+ \pst@@getcoors
+}
+\def\pst@@getcoors(#1){%
+ \pst@@getcoor{#1}%
+ \edef\pst at coors{\pst at coor\pst at coors}%
+ \@ifnextchar({\pst@@getcoors}{\pst at aftercoors}%
+}
+%
+\newcount\pst at C@@rType% 0: default cartesian coordinates and angles
+%
+\def\pst at getangle#1#2{\pst@@getangle{#1}\let#2\pst at angle}
+\def\pst at angle{0 }
+%
+\def\cartesian at coor#1,#2,#3\@nil{%
+ \pssetxlength\pst at dimg{#1}%
+ \pssetylength\pst at dimh{#2}%
+ \edef\pst at coor{\pst at number\pst at dimg \pst at number\pst at dimh}%
+}
+\def\NormalCoor{%
+ \def\pst@@getcoor##1{\pst at expandafter\cartesian at coor{##1},\relax,\@nil}%
+ \def\pstCheckCoorType##1{\global\pst at C@@rType=0}%
+ \Pst at SpecialLengthfalse
+ \def\pssetlength##1##2{%
+ \let\@psunit\psunit
+ \afterassignment\pstunit at off
+ ##1 ##2\@psunit%
+ }%
+ \def\pst@@getangle##1{%
+ \pst at checknum{##1}\pst at angle%
+ \edef\pst at angle{\pst at angle \pst at angleunit}%
+ }%
+ \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput at cartesian}%
+}
+%\NormalCoor% set to normal read of coors, angles and lengths
+%
+\def\degrees{\@ifnextchar[{\@degrees}{\def\pst at angleunit{}}}
+\def\@degrees[#1]{%
+ \pst at checknum{#1}\pst at tempg
+ \edef\pst at angleunit{360 \pst at tempg div mul }%
+ \pstVerb{tx at Dict begin startGlobal /pst at angleunit {\pst at angleunit} def endGlobal end}%
+ \ignorespaces}
+%
+\def\radians{\def\pst at angleunit{57.2956 mul }%
+ \pstVerb{tx at Dict begin startGlobal /pst at angleunit {\pst at angleunit} def endGlobal end}}%
+\def\pst at angleunit{}%
+
+%
+\def\SpecialCoor{%
+ \def\pst@@getcoor##1{%
+ \begingroup%
+ \pst at activecoor
+ \xdef\pst at tempg{##1}%
+ \endgroup
+ \expandafter\special at coor\pst at tempg||\@nil}%
+ \def\pstCheckCoorType##1{%
+ \begingroup
+ \pst at activecoor
+ \xdef\pst at tempg{##1}%
+ \endgroup
+ \psDEBUG[pstCheckCoorType]{:Checking coor \pst at tempg:}%
+ \expandafter\pst at CheckCoorType\pst at tempg||\@nil%
+ \psDEBUG[pstCheckCoorType]{::Coor type=\the\pst at C@@rType::}%
+ }%
+ \def\pssetlength##1##2{%
+ \begingroup%
+ \pst at activecoor%
+ \xdef\pst at tempg{##2}%
+ \endgroup%
+ \expandafter\special at length\pst at tempg\@nil{##1}%
+ \ignorespaces}%
+ \def\pst@@getangle##1{%
+ \begingroup%
+ \pst at activecoor%
+ \xdef\pst at tempg{##1}%
+ \endgroup%
+ \expandafter\special at angle\pst at tempg\@empty)\@nil%
+ }%
+ \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput at special}%
+}
+\SpecialCoor% set to special read of coors, angles and lengths
+%
+\define at key[psset]{}{precode}{\def\pst at prepscode{#1 }}
+\define at key[psset]{}{postcode}{\def\pst at postpscode{#1 }}
+\psset{precode={},postcode={}}% For use in other packages
+%
+%
+\begingroup
+\catcode`\|=13
+\catcode`\;=13
+\catcode`\!=13
+\catcode`\*=13
+\catcode`\>=13
+\catcode`\+=13
+\gdef\pst at activecoor{%
+ \def|{\string|}%
+ \def;{\string;}%
+ \def!{\string!}%
+ \def*{\string*}% algebraic expression hv 2007-11-17
+ \def>{\string>}%
+ \def+{\string+}% pure algebaric 2013-04-23
+}
+\endgroup
+% \pst at C@@rType = 0 cartesian (x,y)
+% = 1 polar (r;phi)
+% = 2 PS (! x y)
+% = 3 mixed ((x,y)|(x,y))
+% = 4 algebraic (*x f(x)) x in PostScript notation
+% = 5 node (A)
+% = 6 special node ([...]A)
+% = 7 node (>A)
+% = 8 algebraic (+x,f(x)) _both_ algebraic
+\def\pst at CheckCoorType#1|#2|#3\@nil{%
+ \ifx#3|\relax
+ \global\pst at C@@rType=3\relax
+ \else
+ \expandafter\pst@@CheckCoorType#1;;\@nil%
+ \fi}
+%
+\def\pst@@CheckCoorType#1#2;#3;#4\@nil{%
+%\typeout{====1:#1}%
+%\typeout{====2:#2}%
+%\typeout{====3:#3}%
+%\typeout{====4:#4}%
+ \ifx#1>\relax% node with special rotation for \uput
+ \global\pst at C@@rType=7
+ \else
+ \ifcat#1a\relax% node names should start with a letter
+ \global\pst at C@@rType=5
+ \else
+ \ifx#1[\relax% special node coor: [..]A
+ \global\pst at C@@rType=6
+ \else
+ \ifx#1!\relax% PostScript code: x y
+ \global\pst at C@@rType=2
+ \else
+ \ifx#1*\relax% algebraic PostScript code: x f(x)
+ \global\pst at C@@rType=4
+ \else
+ \ifx#1+\relax% algebraic algebraic: x, f(x)
+ \global\pst at C@@rType=8
+ \else
+ \ifx#4;\relax% polar coordinates
+ \global\pst at C@@rType=1
+ \else
+ \global\pst at C@@rType=0
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \psDEBUG[pstCheckCoorType]{::\the\pst at C@@rType::}%
+ }%
+%
+%
+\def\special at coor#1|#2|#3\@nil{%
+ \ifx#3|\relax
+ \mixed at coor{#1}{#2}%
+ \else
+ \special@@coor#1;;\@nil%
+ \fi}
+%
+\def\special@@coor#1{%
+ \ifcat#1a\relax% node names should start with a letter
+ \def\ps at next{\node at coor#1}%
+ \else
+ \ifx#1[\relax% special node coor: [..]A
+ \def\ps at next{\Node at coor[}%
+ \else
+ \ifx#1>\relax% PostScript code: x y
+ \def\ps at next{\special@@@@coor}%
+ \else
+ \ifx#1!\relax% PostScript code: x y
+ \def\ps at next{\raw at coor}%
+ \else
+ \ifx#1*\relax% PostScript/algebraic code: x f(x)
+ \def\ps at next{\alg at coor}%
+ \else
+ \ifx#1+\relax% algebraic code: x,f(x)
+ \def\ps at next{\algalg at coor}%
+ \else%
+ \def\ps at next{\special@@@coor#1}%
+ \fi%
+ \fi%
+ \fi%
+ \fi\fi%
+ \fi%
+ \ps at next%
+}
+\def\special@@@coor#1;#2;#3\@nil{%
+ \ifx#3;\relax
+ \polar at coor{#1}{#2}%
+ \else
+ \cartesian at coor#1,\relax,\@nil
+ \fi%
+}
+\def\special@@@@coor#1#2;#3;#4\@nil{%
+ \def\ps at A{A}\def\ps at B{#1}%
+ \ifcat\ps at A\ps at B\relax%
+ \node at coor#1#2;;\@nil%
+ \else%
+ \cartesian at coor#1#2,\relax,\@nil
+ \fi%
+}
+\def\mixed at coor#1#2{%
+ \begingroup%
+% DG/SR modification begin - Oct. 27, 1997 - Patch 6
+%\specialcoor at ii#1;;\@nil
+%\let\pst at tempa\pst at coor
+%\specialcoor at ii#2;;\@nil
+ \special@@coor#1;;\@nil%
+ \let\pst at tempa\pst at coor%
+ \special@@coor#2;;\@nil%
+% DG/SR modification end
+ \xdef\pst at tempg{\pst at tempa pop \pst at coor exch pop }%
+ \endgroup%
+ \let\pst at coor\pst at tempg%
+}
+%
+\def\polar at coor#1#2{%
+% \pssetlength\pst at dimg{#1}%
+ \pssetlength\pst at dimb{#1}% hv 2007-10-16 g is already used in get@@angle
+ \pst@@getangle{#2}%
+% \edef\pst at coor{\pst at number\pst at dimg \pst at angle \tx at PtoC}% dito
+ \edef\pst at coor{\pst at number\pst at dimb \pst at angle \tx at PtoC }%
+}
+%
+\def\raw at coor{\@ifnextchar !\raw@@coor\raw@@@coor}
+\def\raw@@coor!#1;#2\@nil{% PostScript code without using \tx at ScreenCoor
+ \edef\pst at coor{#1 }}
+\def\raw@@@coor#1;#2\@nil{% PostScript code
+ \edef\pst at coor{ #1 \tx at ScreenCoor }}
+%
+\def\alg at coor{\@ifnextchar*{\alg@@coor}{\alg@@@@coor}}
+\def\alg@@coor*#1;#2\@nil{\expandafter\alg@@@coor#1\@nil}
+\def\alg@@@coor#1 #2\@nil{% algebraic PostScript code
+%\typeout{Nummer1: #1}%
+%\typeout{Nummer2: #2}%
+ \edef\pst at coor{%
+ /Func (#1) AlgParser cvx def
+ /y #2 def
+ y Func exch \tx at ScreenCoor }}
+%
+\def\alg@@@@coor#1;#2\@nil{\expandafter\alg@@@@@coor#1\@nil}
+\def\alg@@@@@coor#1 #2\@nil{% algebraic PostScript code
+ \edef\pst at coor{%
+ /x #1 def
+ /Func (#2) AlgParser cvx def
+ x Func \tx at ScreenCoor }}
+%
+\define at boolkey[psset]{}[Pst@]{exchange}[true]{}
+\psset{exchange=false}
+%
+\def\algalg at coor#1;#2\@nil{\expandafter\algalg@@@coor#1\@nil}
+\def\algalg@@@coor#1,#2\@nil{% algebraic algebraic code
+ \edef\pst at coor{%
+ /x (#1) AlgParser cvx def
+ /Func (#2) AlgParser cvx def
+ x Func \tx at ScreenCoor }}
+%
+\def\node at coor#1\@nil{%
+ \@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps
+ \def\pst at coor{0 0 }%
+}
+\def\Node at coor{\node at coor}
+%
+\def\special at angle#1#2)#3\@nil{%
+ \ifx !#1\relax
+ \edef\pst at angle{#2\space \pst at angleunit}%
+ \else\ifx(#1\relax
+ \pst@@getcoor{#2}%
+ \edef\pst at angle{\pst at coor exch \tx at Atan}%
+ \else
+ \pst at checknum{#1#2}\pst at angle
+ \edef\pst at angle{\pst at angle \pst at angleunit}%
+ \fi\fi}
+%
+\def\special at length#1#2\@nil#3{%
+ \ifx !#1\relax
+ \edef\pst at SpecialLength{ #2 \pst at number\psunit mul }%
+ \Pst at SpecialLengthtrue
+ \else
+ \let\@psunit\psunit
+ \afterassignment\pstunit at off
+ #3 #1#2\@psunit
+ \Pst at SpecialLengthfalse
+ \fi
+}
+%
+\def\Cartesian{%
+ \def\cartesian at coor##1,##2,##3\@nil{%
+ \pssetxlength\pst at dimg{##1}%
+ \pssetylength\pst at dimh{##2}%
+ \edef\pst at coor{\pst at number\pst at dimg \pst at number\pst at dimh}%
+ }%
+ \@ifnextchar({\Cartesian@}{}%
+}
+\def\Cartesian@(#1,#2){%
+ \pssetxlength\psxunit{#1}%
+ \pssetylength\psyunit{#2}%
+ \ignorespaces
+}
+\def\Polar{%
+ \def\psput at cartesian{\psput at special}%
+ \def\cartesian at coor##1,##2,##3\@nil{\polar at coor{##1}{##2}}%
+}%
+\define at key[psset]{pstricks}{origin}[]{%
+ \pst@@getcoor{#1}%
+ \edef\psk at origin{\pst at coor T }}
+\def\psk at origin{}
+%
+\define at boolkey[psset]{pstricks}[Pst@]{algebraic}[true]{}
+\psset{algebraic=false}
+%
+\define at boolkey[psset]{pstricks}[]{swapaxes}[true]{% \if at pst
+ \@nameuse{@pst#1}%
+ \if at pst\def\psk at swapaxes{-90 rotate -1 1 scale }%
+ \else\def\psk at swapaxes{}%
+ \fi
+}
+\psset[pstricks]{swapaxes=false}
+%
+\define at boolkey[psset]{pstricks}[]{showpoints}[true]{}
+\psset[pstricks]{showpoints=false}
+%
+\let\pst at setrepeatarrowsflag\relax
+%
+\define at key[psset]{pstricks}{border}[0pt]{\pst at getlength{#1}\psk at border \pst at setrepeatarrowsflag}
+\psset[pstricks]{border=0pt}
+\define at key[psset]{pstricks}{bordercolor}[white]{\pst at getcolor{#1}\psbordercolor}
+\psset[pstricks]{bordercolor=white}
+\define at boolkey[psset]{pstricks}[ps]{doubleline}[true]{\pst at setrepeatarrowsflag}
+\psset[pstricks]{doubleline=false}
+\define at key[psset]{pstricks}{doublesep}[1.25\pslinewidth]{\def\psdoublesep{#1}}
+\psset[pstricks]{doublesep=1.25\pslinewidth}
+\define at key[psset]{pstricks}{doublecolor}[white]{\pst at getcolor{#1}\psdoublecolor}
+\psset[pstricks]{doublecolor=white}
+%
+\define at boolkey[psset]{pstricks}[ps]{shadow}[true]{\pst at setrepeatarrowsflag}
+\psset[pstricks]{shadow=false}
+\define at key[psset]{pstricks}{shadowsize}[3pt]{\pst at getlength{#1}\psk at shadowsize}
+\psset[pstricks]{shadowsize=3pt}
+\define at key[psset]{pstricks}{shadowangle}[-45]{\pst at getangle{#1}\psk at shadowangle}
+\psset[pstricks]{shadowangle=-45}
+\define at key[psset]{pstricks}{shadowcolor}[darkgrey]{\pst at getcolor{#1}\psshadowcolor}
+\psset[pstricks]{shadowcolor=darkgray}
+%
+\def\pst at repeatarrowsflag{\z@}
+\def\pst at setrepeatarrowsflag{%
+ \edef\pst at repeatarrowsflag{%
+ \ifdim\psk at border\p@>\z@ 1\else\ifpsdoubleline 1\else
+ \ifpsshadow 1\else \z@\fi\fi\fi}}
+%
+\def\psls at none{}
+\def\psls at solid{ \psk at linejoin\space setlinejoin \psk at linecap\space setlinecap stroke }
+\def\psls at coloreddashed{ \psls at solid grestore gsave \pst at usecolor\psdashcolor \tx at setlinejoin \psls at dashed }
+%
+\newdimen\pslinewidth
+\define at key[psset]{pstricks}{linewidth}[0.8pt]{\pssetlength\pslinewidth{#1}}
+\psset[pstricks]{linewidth=.8pt}
+\define at key[psset]{pstricks}{linecolor}[black]{\pst at getcolor{#1}\pslinecolor}
+\psset[pstricks]{linecolor=black}
+\define at key[psset]{pstricks}{kitecolor}[red]{\pst at getcolor{#1}\ps at kitecolor}
+\define at key[psset]{pstricks}{dartcolor}[blue]{\pst at getcolor{#1}\ps at dartcolor}
+\psset[pstricks]{kitecolor,dartcolor}
+%
+\newif\ifPst at coloreddashed
+\define at key[psset]{pstricks}{dashcolor}[white]{%
+ \ifx\relax#1\relax\Pst at coloreddashedfalse%
+ \else\Pst at coloreddashedtrue\pst at getcolor{#1}\psdashcolor
+ \fi}
+\psset{dashcolor=\relax}
+%\define at key[psset]{pstricks}{linecap}[0]{\pst at getint{#1}\psk at linecap}% hv 2007-12-01
+%\psset[pstricks]{linecap=0} >>>>>>>>>>>>> siehe unten
+\define at key[psset]{pstricks}{linejoin}[0]{\pst at getint{#1}\psk at linejoin}% hv 2007-10-13
+\psset[pstricks]{linejoin=0}
+\def\tx at setlinejoin{\psk at linejoin\space setlinejoin }% hv 2007-10-13
+%
+\def\pst at missing{%
+ \z@
+ \@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa}
+%
+%%------------------- begin patch 15 HV 2004-05-15 -------------
+\def\pst at empty{\z@}
+
+\define at key[psset]{pstricks}{dash}[5pt 3pt 0pt 0pt]{% defined in pstricks.tex
+ \pst at expandafter\psset@@dash{#1}\@nil}% Error handling for empty argument.
+\define at key[psset]{pstricks}{maxdashes}[11]{\def\psk at maxdashes{#1}}
+\psset[pstricks]{maxdashes=11}
+%
+\def\psset@@dash#1\@nil{%
+ \def\psk at dash{}%
+ \pst at cntm0
+ \def\next##1 ##2\relax{%
+ \expandafter\ifnum\psk at maxdashes>\pst at cntm\relax % 04-08-07
+ \edef\@tempa{##1}%
+ \ifx\@tempa\@empty\else% gobble leading spaces
+ \pssetlength\pst at dimc{##1}%
+ \advance\pst at cntm by 1
+ \edef\psk at dash{\psk at dash\space\pst at number\pst at dimc}%
+ \fi%
+ \edef\@tempa{##2}%
+ \ifx\@tempa\@empty\else% detect end
+ \ifx\@tempa\space\else% gobble trailing spaces
+ \next##2\relax%
+ \fi\fi%
+ \else% 04-08-07
+ \@pstrickserr{Number of dashes > \psk at maxdashes. Increasing
+ 'maxdashes' might work.}\@ehpa% 04-08-07
+ \fi% 04-08-07
+ }%
+ \expandafter\next#1 \relax}
+\psset[pstricks]{dash=5pt 3pt 0pt 0pt}% black white black white
+%%------------------- end patch 15 HV 2004-05-15 -------------
+\define at boolkey[psset]{pstricks}[ps]{dashadjust}[true]{}
+\psset[pstricks]{dashadjust}
+\def\tx at DashLine{DashLine }
+%
+\def\psls at dashed{
+ \ifPst at coloreddashed \psls at solid grestore gsave \pst at usecolor\psdashcolor \tx at setlinejoin \fi
+ \psk at linecap\space setlinecap
+ \ifpsdashadjust
+ [ \psk at dash ] \pst at linetype\space \tx at DashLine
+ \else
+ [ \psk at dash ] 0 setdash stroke
+ \fi}
+%% End patch TN; Date (YY-MM-DD): 04-07-17; 2nd part
+%
+\define at key[psset]{pstricks}{dotsep}[3pt]{\pst at getlength{#1}\psk at dotsep}
+\psset[pstricks]{dotsep=3pt}
+\def\tx at DotLine{DotLine }
+\def\psls at dotted{
+ \ifpsdashadjust
+ \psk at dotsep \pst at linetype\space \tx at DotLine
+ \else
+ [ 0 \psk at dotsep CLW add ] 0 setdash 1 setlinecap stroke
+ \fi
+}
+%
+\define at key[psset]{pstricks}{linestyle}[solid]{%
+ \@ifundefined{psls@#1}%
+ {\@pstrickserr{Line style `#1' not defined}\@eha}%
+ {\def\pslinestyle{#1}}}
+\psset[pstricks]{linestyle=solid}
+%
+\define at key[psset]{pstricks}{linecap}[0]{%
+ \def\psk at linecap{0}%
+ \ifnum#1>-1
+ \ifnum#1<3
+ \pst at getint{#1}\psk at linecap%
+ \fi\fi}
+\psset{linecap=0}
+%------------------------- Transparency modes ----------------------------
+\pst at def{setTransparency}< \psk at opacityalpha .setopacityalpha >
+\pst at def{setStrokeTransparency}< \psk at strokeopacityalpha .setstrokeopacityalpha >
+\pst at def{setBlendmode}<
+ \ifcase\psk at blendmode
+ /Normal \or
+ /Compatible \or
+ /Screen \or
+ /Multiply \or
+ /HardLight \or
+ /Darken \or
+ /Lighten \or
+ /Difference\or
+ /ColorDodge\or
+ /ColorBurn\or
+ /SoftLight\or
+ /Hue\or
+ /Saturation\or
+ /Luminosity\or
+ /Overlay\or
+ /Exclusion\or
+ /Color
+ \else
+ /Normal
+ \fi
+ .setblendmode \psk at shapealpha .setopacityalpha >
+%
+%--------------------------------- hv 2007-09-09 begin ---------------------
+% transparency needs a run through latex -> dvips -> ps2pdf14(!)
+%
+\def\e at fill@inverse{oefill}
+\define at key[psset]{pstricks}{fillcolor}[white]{%
+ \ifx\psk at fillstylename\e at fill@inverse
+ \pst at getcolor{#1}\psk at oefillcolor
+ \pst at getcolor{white}\psfillcolor
+ \else \pst at getcolor{white}\psk at oefillcolor
+ \pst at getcolor{#1}\psfillcolor
+ \fi}
+
+\psset[pstricks]{fillcolor=white}
+\define at key[psset]{pstricks}{strokeopacity}[1]{\pst at checknum{#1}\psk at strokeopacityalpha }% for lines
+\psset[pstricks]{strokeopacity=1}
+\define at key[psset]{pstricks}{opacity}[1]{\pst at checknum{#1}\psk at opacityalpha }% for filled areas
+\psset[pstricks]{opacity=1}
+\define at key[psset]{pstricks}{shapealpha}[0.6]{\pst at checknum{#1}\psk at shapealpha }
+\psset[pstricks]{shapealpha=0.6}
+\define at key[psset]{pstricks}{blendmode}[0]{\pst at getint{#1}\psk at blendmode }% must be one of
+% /Normal 0
+% /Compatible 1
+% /Screen 2
+% /Multiply 3
+% /HardLight 4
+\psset[pstricks]{blendmode=0}
+\define at key[psset]{pstricks}{fsAngle}[137.50775]{\pst at getangle{#1}\pst at fsAngle }
+\define at key[psset]{pstricks}{fsOrigin}[(0,0)]{%
+ \pst@@getcoor{#1}\edef\pst at fsOrigin{\pst at coor T }}
+\psset[pstricks]{fsOrigin={0,0},fsAngle=137.50775}
+%
+\def\tx at LineFill{LineFill }
+\def\tx at DotFill{DotFill }
+\def\tx at PenroseFill{PenroseFill }
+\def\tx at PenroseFillA{PenroseFillA }
+\def\tx at TruchetFill{TruchetFill }
+%
+\def\psfs at none{}
+\def\psfs at solid{\pst at fill{\pst at usecolor\psfillcolor \tx at setTransparency fill }}
+\def\psfs at eofill{\pst at fill{\pst at usecolor\psfillcolor \tx at setTransparency eofill}}
+\def\psfs at oefill{\pst at fill{\pst at usecolor\psk at oefillcolor \tx at setTransparency fill }\psfs at eofill }
+\def\psfs at shape{\pst at fill{\pst at usecolor\psfillcolor \tx at setBlendmode fill }}
+\def\psfs at spiral{\pst at fill{\pst at fsOrigin \pst at usecolor\psfillcolor clip newpath
+ 0 .1 500 { dup dup sqrt 4 div 0 360 arc fill \pst at fsAngle rotate } for }}
+%
+\define at key[psset]{pstricks}{hatchwidth}[0.8pt]{\pst at getlength{#1}\psk at hatchwidth}
+\psset[pstricks]{hatchwidth=.8pt}
+\define at key[psset]{pstricks}{hatchsep}[4pt]{\pst at getlength{#1}\psk at hatchsep}
+\psset[pstricks]{hatchsep=4pt}
+\define at key[psset]{pstricks}{hatchcolor}[black]{\pst at getcolor{#1}\pshatchcolor}
+\psset[pstricks]{hatchcolor=black}
+\define at key[psset]{pstricks}{hatchangle}[45]{\pst at getangle{#1}\psk at hatchangle}
+\psset[pstricks]{hatchangle=45}
+\define at key[psset]{pstricks}{hatchsepinc}[0pt]{\pst at getlength{#1}\psk at hatchsepinc}
+\define at key[psset]{pstricks}{hatchwidthinc}[0pt]{\pst at getlength{#1}\psk at hatchwidthinc}
+\psset[pstricks]{hatchwidthinc=0pt,hatchsepinc=0pt}
+%
+\def\pst at linefill#1{
+ /clipType { \ifx\relax#1\relax clip \else#1\fi} def
+ \psk at hatchangle rotate
+ \psk at hatchwidth SLW
+ \pst at usecolor\pshatchcolor
+ \psk at hatchsep
+ \psk at hatchsepinc
+ \psk at hatchwidthinc
+ \tx at LineFill }
+%
+\def\psfs at vlines{\pst at fill{\pst at linefill{}}}
+\def\psfs at eovlines{\pst at fill{\pst at linefill{eoclip}}}
+\@namedef{psfs at vlines*}{\psfs at solid \psfs at vlines}
+\@namedef{psfs at eovlines*}{\psfs at eofill \psfs at eovlines}
+\def\psfs at hlines{\pst at fill{90 rotate \pst at linefill{}}}
+\def\psfs at eohlines{\pst at fill{90 rotate \pst at linefill{eoclip}}}
+\@namedef{psfs at hlines*}{\psfs at solid \psfs at hlines}
+\@namedef{psfs at eohlines*}{\psfs at eofill \psfs at eohlines}
+\def\psfs at crosshatch{\psfs at vlines \psfs at hlines}
+\@namedef{psfs at crosshatch*}{\psfs at solid \psfs at vlines \psfs at hlines}
+\@namedef{psfs at eocrosshatch*}{\psfs at eofill \psfs at eovlines \psfs at eohlines}
+%
+\define at key[psset]{pstricks}{psscale}[1]{%
+ \def\psk@@psscale{#1}% for use with \psscalebox
+ \pst at checknum{#1}\psk at psscale}
+\psset[pstricks]{psscale=1}
+%
+\def\pst at dotFill[#1]{%
+ /clipType { \ifx\relax#1\relax clip \else #1 \fi } def
+ gsave
+ \pst at number\pslinewidth SLW
+ \pst at usecolor\pshatchcolor
+% /DotLineColor { \pst at usecolor\pslinecolor } def
+ \psk at hatchsep
+ \psk at hatchwidth
+ \tx at DotFill }
+
+\def\psfs at dots{\pst at fill{ /SolidDot false def \pst at dotFill[] }}
+\def\psfs at eodots{\pst at fill{ /SolidDot false def \pst at dotFill[eoclip] }}
+\@namedef{psfs at dots*}{\pst at fill{ /SolidDot true def \pst at dotFill[] }}
+\@namedef{psfs at eodots*}{\pst at fill{ /SolidDot true def \pst at dotFill[eoclip] }}
+%
+\def\pst at penroseFill{%
+% gsave % restore in PenroseFill
+ \pst at number\pslinewidth SLW
+ \pst at usecolor\pshatchcolor
+ \psk at psscale
+ \tx at PenroseFill }
+\def\psfs at penrose{\pst at fill\pst at penroseFill}
+\@namedef{psfs at penrose*}{\psfs at solid \psfs at penrose}
+%
+\def\pst at penroseFillA{%
+% gsave % restore in PenroseFillA
+ \pst at number\pslinewidth SLW
+% \pst at usecolor\pshatchcolor
+% on stack: scaling factor, border color, kite color, dart color
+% dup dup scale
+% /border_colour ED %
+% /kite_colour ED %
+% /dart_colour
+ { \pst at usecolor\ps at dartcolor }
+ { \pst at usecolor\ps at kitecolor }
+ { \pst at usecolor\pshatchcolor }
+ \psk at psscale
+ \tx at PenroseFillA }
+\def\psfs at penroseA{\pst at fill\pst at penroseFillA}
+\@namedef{psfs at penroseA*}{\psfs at solid \psfs at penroseA}
+%
+\def\pst at truchetFill{%
+ gsave % restore in PenroseFill
+ \pst at number\pslinewidth SLW
+ \pst at usecolor\pshatchcolor
+ \psk at psscale
+ \tx at TruchetFill }
+\def\psfs at truchet{ \pst at fill\pst at truchetFill }
+\@namedef{psfs at truchet*}{\psfs at solid \psfs at truchet}
+%
+\define at key[psset]{pstricks}{fillstyle}[none]{%
+ \def\psk at fillstylename{#1}% needed for inverse eofill
+ \edef\pst at tempg{#1}\def\pst at temph{none}%
+ \ifx\pst at tempg\pst at temph
+ \let\psk at fillstyle\relax
+ \else
+ \@ifundefined{psfs@#1}%
+ {\@pstrickserr{Undefined fill style: `#1'}\@eha}%
+ {\edef\psk at fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}%
+ \fi%
+}
+\define at key[psset]{pstricks}{addfillstyle}[]{%
+ \@ifundefined{psfs@#1}%
+ {\@pstrickserr{Undefined fill style: `#1'}\@eha}%
+ {\edef\psk at fillstyle{%
+ \expandafter\noexpand\psk at fillstyle
+ \expandafter\noexpand\csname psfs@#1\endcsname}%
+ }}
+\psset[pstricks]{fillstyle=none}
+%
+%--------------------------- continous linewidth -------------------
+\newdimen\psk at startLW
+\newdimen\psk at endLW
+\define at key[psset]{pstricks}{startLW}[\pslinewidth]{\pssetlength{\psk at startLW}{#1}}%
+\define at key[psset]{pstricks}{endLW}[\pslinewidth]{\pssetlength{\psk at endLW}{#1}}%
+\define at key[psset]{pstricks}{startWL}[380]{\pst at getint{#1}\psk at startWL}%
+\define at key[psset]{pstricks}{endWL}[780]{\pst at getint{#1}\psk at endWL}%
+\define at boolkey[psset]{pstricks}[Pst@]{variableLW}[true]{}
+\define at boolkey[psset]{pstricks}[Pst@]{variableColor}[true]{}
+\define at key[psset]{pstricks}{setflat}[0.1]{\pst at checknum{#1}\psk at setflat}%
+\psset[pstricks]{startLW=\pslinewidth,endLW=\pslinewidth,variableColor=false,
+ variableLW=false,startWL=380,endWL=780,setflat=0.1}
+%
+\def\pst at flattenpath{
+ /Coors [] def % the array of all points
+ /lambda \psk at startWL\space def
+ %
+ /add2Values { Coors aload length 2 add array astore /Coors exch def } def
+ /add6Values { Coors aload length 6 add array astore /Coors exch def } def
+%
+ \psk at setflat\space setflat % the value for the line snippets
+ flattenpath % flatten the existing path into line segments
+%
+ { add2Values } % what to do with moveto
+ { add2Values } % what to do with lineto
+ { add6Values } % what to do with curveto (not needed here)
+ { } % what to do with closepath
+ pathforall % do it for the existing path
+%
+ \pst at number\psk at startLW setlinewidth
+ \tx at setlinejoin
+ \psk at linecap\space setlinecap
+ Coors aload length 2 sub 2 div cvi /N0 exch def % set number of points
+ /NN 0 def
+ /N N0 def
+ { N 3 gt { N 3 sub /N ED }{ N 1 sub /N ED } ifelse
+ NN 1 add /NN ED
+ N 0 eq { exit } if
+ } loop
+ /dLW \pst at number\psk at endLW \pst at number\psk at startLW sub NN div def % the step for the linewidth
+ \ifPst at variableColor
+ /dColor \psk at endWL\space \psk at startWL\space sub NN div def
+ lambda dColor add dup /lambda ED
+ tx at addDict begin wavelengthToRGB Red Green Blue end setrgbcolor
+ \else
+ \pst at usecolor\pslinecolor
+ \fi
+ moveto % move to the first one
+ /N N0 def
+ {
+ N 3 gt {
+% CP 6 2 roll
+ \psk at curvature\space /c ED /b ED /a ED
+ /ArrowA {} def
+ /ArrowB {} def
+ BOC NC EOC % curveto
+ N 3 sub /N ED }{ lineto N 1 sub /N ED } ifelse
+ currentlinewidth dLW add setlinewidth % increase line width
+ \ifPst at variableColor
+ lambda dColor add dup /lambda ED
+ tx at addDict begin wavelengthToRGB Red Green Blue end setrgbcolor
+ \else
+ \pst at usecolor\pslinecolor
+ \fi
+ CP /Y ED /X ED % put coors of current point on the stack
+ stroke % draw the line segment
+ N 0 eq { exit }{ X Y moveto } ifelse
+ } loop
+% N { % repeat for the other N coords
+% lineto % line to next point
+% currentlinewidth dLW add setlinewidth % increase line width
+% lambda dColor add dup /lambda ED
+% tx at addDict begin wavelengthToRGB Red Green Blue end setrgbcolor
+% currentpoint % put coors of current point on the stack
+% 0.4 .setopacityalpha
+% stroke % draw the line segment
+% moveto
+% } repeat
+}
+
+%
+%--------------------------- A R R O W S ---------------------------
+%
+\def\psk at arrowA{}
+\def\psk at arrowB{}
+\def\pst at arrowtable{,-,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|,<D-D>,D>-<D,<D<D-D>D>} % hv --1.16
+\edef\pst at arrowtable{\pst at arrowtable,|<*->|*,|<->|}
+\begingroup
+ \catcode`\<=13
+ \catcode`\>=13
+ \catcode`\|=13
+ \gdef\pst at activearrows{\def<{\string<}\def>{\string>}\def|{\string|}}
+\endgroup
+\def\tx at BeginArrow{BeginArrow }
+\def\tx at EndArrow{EndArrow }
+%
+\def\tx at Arrow{ \tx at setStrokeTransparency Arrow }% hv 2008-01-13
+\def\tx at ArrowD{ \tx at setStrokeTransparency ArrowD }% hv 2008-01-13
+%
+\@namedef{psas@<|}{
+ \psk at tbarsize\space \tx at Tbar
+ 0 CLW 2 div T
+ newpath
+ true
+ \psk at arrowinset
+ \psk at arrowlength
+ \psk at arrowsize
+ \tx at Arrow
+}
+% ]-[ arrow
+\def\tx at BracketOut{BracketOut }
+\@namedef{psas@[}{%
+ /BracketOut {%
+ CLW mul add dup CLW sub 2 div
+%/x ED mul CLW add
+ /x ED mul neg
+ /y ED
+ /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke 0 CLW moveto } def
+ \psk at bracketlength\space \psk at tbarsize\space \tx at BracketOut
+}
+% )-( arrow
+\def\tx at RoundBracketOut{ \tx at setStrokeTransparency RoundBracketOut }% hv 2008-01-13
+\@namedef{psas@(}{%
+ /RoundBracketOut {%
+ CLW mul add dup 2 div
+%/x ED mul
+ /x ED mul neg
+ /y ED
+ /mtrx CM def
+ 0 CLW
+ 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto } def
+ \psk at rbracketlength\space \psk at tbarsize\space \tx at RoundBracketOut
+}
+% end of new definitions of the missing arrows ---- hv 1.12
+\@namedef{psas@>}{ false \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at Arrow }
+\@namedef{psas@>>}{%
+ false \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at Arrow
+ 0 h T gsave newpath
+ false \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at Arrow
+ CP grestore CP newpath moveto 2 copy
+ CLW \pst at arrowscale\space div SLW % set the original line width
+ L stroke moveto
+}
+\@namedef{psas@<}{true \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at Arrow}
+\@namedef{psas@<<}{
+ true \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at Arrow
+ CP newpath moveto 0 a neg
+ gsave
+ CLW \pst at arrowscale\space div SLW % set the original line width
+ L stroke
+ grestore
+ 0 h neg T
+ false \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at Arrow
+}
+\@namedef{psas at D>}{ false \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at ArrowD }% hv 20071211
+\@namedef{psas at D>D>}{ % hv 20071211
+ false \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at ArrowD
+ 0 h Inset sub T gsave newpath
+ false \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at ArrowD
+ CP grestore moveto
+}
+\@namedef{psas@<D}{ % hv 20071211
+ true \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at ArrowD
+}
+\@namedef{psas@<D<D}{ % hv 20071211
+ true \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at ArrowD
+ CP newpath moveto 0 a neg L stroke 0 h neg T
+ true \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at ArrowD
+}
+\define at key[psset]{pstricks}{tbarsize}[2pt 5]{%
+ \pst at expandafter\pst at getdimnum{#1} 0 {} {}\@nil
+ \edef\psk at tbarsize{\pst at number\pst at dimg \pst at tempg}}
+\psset[pstricks]{tbarsize=2pt 5}
+%
+\def\tx at Tbar{Tbar }
+\@namedef{psas@|}{\psk at tbarsize \tx at Tbar}
+\@namedef{psas@|*}{0 CLW -2 div T \psk at tbarsize \tx at Tbar}
+\@namedef{psas@>|}{%
+ \psk at tbarsize \tx at Tbar
+ 0 CLW 2 div T
+ newpath
+ false \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at Arrow
+}
+\@namedef{psas@>|*}{%
+ 0 CLW -2 div T
+ \psk at tbarsize \tx at Tbar
+ 0 CLW 2 div T
+ newpath
+ false \psk at arrowinset \psk at arrowlength \psk at arrowsize \tx at Arrow
+}
+%
+\define at key[psset]{pstricks}{bracketlength}[0.15]{\pst at checknum{#1}\psk at bracketlength}
+\psset[pstricks]{bracketlength=.15}
+\def\tx at Bracket{Bracket }
+\@namedef{psas@]}{\psk at bracketlength \psk at tbarsize \tx at Bracket}
+\define at key[psset]{pstricks}{rbracketlength}[0.15]{\pst at checknum{#1}\psk at rbracketlength}
+\psset[pstricks]{rbracketlength=.15}
+\def\tx at RoundBracket{RoundBracket }
+\@namedef{psas@)}{\psk at rbracketlength \psk at tbarsize \tx at RoundBracket}
+%
+\def\psas at c{1 \psas@@c}
+\def\psas at cc{0 CLW 2 div T 1 \psas@@c}
+\def\psas at C{2 \psas@@c}
+\def\psas@@c{%
+ setlinecap
+ 0 0 moveto
+ 0 0.1 L % changed value from 0.5 to 0.1
+ stroke
+ 0 0 moveto }
+%
+\def\psas@{}
+%
+\define at key[psset]{pstricks}{arrowLW}{\pst at getlength{#1}\psk at arrowLW}
+\psset[pstricks]{arrowLW=0}
+% arrowLW as LineWidth for the circled line ends
+%
+\def\psas at o{\psk at arrowLW\space dup 0 eq { pop }{ SLW } ifelse
+ {\pst at usecolor\psfillcolor true} false \psk at dotsize \tx at EndDot }
+\def\psas at oo{\psk at arrowLW\space dup 0 eq { pop }{ SLW } ifelse
+ {\pst at usecolor\psfillcolor true} true \psk at dotsize \tx at EndDot }
+\@namedef{psas@*}{\psk at arrowLW\space dup 0 eq { pop }{ SLW } ifelse
+ {false} false \psk at dotsize \tx at EndDot }
+\@namedef{psas@**}{\psk at arrowLW\space dup 0 eq { pop }{ SLW } ifelse
+ {false} true \psk at dotsize \tx at EndDot }
+%
+\define at key[psset]{pstricks}{arrows}[-]{%
+ \begingroup
+ \pst at activearrows
+ \xdef\pst at tempg{#1}%
+ \endgroup
+ \expandafter\psset@@arrows\pst at tempg\@empty-\@empty\@nil
+ \if at pst\else\@pstrickserr{Bad arrows specification: #1}\@ehpa\fi}
+\def\psset@@arrows#1-#2\@empty#3\@nil{%
+ \@psttrue
+ \def\ps at next##1,#1-##2,##3\@nil{\def\pst at tempg{##2}}%
+ \expandafter\ps at next\pst at arrowtable,#1-#1,\@nil
+ \@ifundefined{psas@\pst at tempg}{\@pstfalse\def\psk at arrowA{}}{\let\psk at arrowA\pst at tempg}%
+ \@ifundefined{psas@#2}{\@pstfalse\def\psk at arrowB{}}{\def\psk at arrowB{#2}}}
+\psset[pstricks]{arrows=-}
+%
+\define at key[psset]{pstricks}{arrowscale}[1]{% hv --1.12
+ \pst at getscale{#1}\psk at arrowscale
+ \pst@@arrowscale at i#1 \@nil}% hv --1.12
+\def\pst@@arrowscale at i#1 #2\@nil{\edef\pst at arrowscale{#1}}% hv --1.12
+\psset[pstricks]{arrowscale=1}
+%
+\define at key[psset]{pstricks}{arrowsize}[1.5pt 2]{%
+ \pst at expandafter\pst at getdimnum{#1} 0 {} {}\@nil
+ \edef\psk at arrowsize{\pst at number\pst at dimg \pst at tempg}%
+}
+\psset[pstricks]{arrowsize=1.5pt 2}
+\define at key[psset]{pstricks}{arrowlength}[1.4]{\pst at checknum{#1}\psk at arrowlength}
+\psset[pstricks]{arrowlength=1.4}
+\define at key[psset]{pstricks}{arrowinset}[0.4]{\pst at checknum{#1}\psk at arrowinset}%
+\psset[pstricks]{arrowinset=0.4}
+%
+\def\tx at SD{ \tx at setTransparency SD }
+\def\tx at EndDot{EndDot }
+%
+\def\pst at par{}
+\def\addto at par#1{%
+ \ifx\pst at par\@empty
+ \def\pst at par{#1}%
+ \else
+ \expandafter\def\expandafter\pst at par\expandafter{\pst at par,#1}%
+ \fi%
+}
+\def\addbefore at par#1{%
+ \ifx\pst at par\@empty
+ \def\pst at par{#1}%
+ \else
+ \toks@{#1}%
+ \pst at toks\expandafter{\pst at par}%
+ \edef\pst at par{\the\toks@,\the\pst at toks}%
+ \fi%
+}
+\def\use at par{%
+ \ifx\pst at par\@empty\else
+ \expandafter\@psset\pst at par,\@nil
+ \def\pst at par{}%
+ \fi
+}
+\def\use at keep@par{% same as \use at par, but keeps the values
+ \ifx\pst at par\@empty\else
+ \expandafter\@psset\pst at par,\@nil
+% \def\pst at par{}%
+ \fi}
+%
+\def\pst at object#1{%
+ \def\pst at par{}%
+ \pst at ifstar{%
+ \@ifnextchar[{\pst@@object{#1}}{\@nameuse{#1 at i}}}%
+}
+\def\pst@@object#1[#2]{%
+ \def\pst at par{#2}%
+ \@ifnextchar+{\@nameuse{#1 at i}}{\@nameuse{#1 at i}}%
+}
+\def\newpsobject#1#2#3{%
+\@ifundefined{#2 at i}%
+{\@pstrickserr{Graphics object `#2' not defined}\@eha}{%
+\@namedef{#1}{\pst at object{#1}}%
+\@namedef{#1 at i}{\addbefore at par{#3}\@nameuse{#2 at i}}}%
+\ignorespaces}
+%
+\def\pst at getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}}
+% ------------------------- hv 1.10 beg ------------------------
+%\def\pst@@getarrows#1#2{\addto at par{arrows=#2}#1}
+\def\pst@@getarrows#1#2{%
+ \def\pst at tempa{#2}% prevent empty arrow arguments, to allow \psline{}(...)(...)
+ \ifx\pst at tempa\@empty
+ \addto at par{arrows=-}%
+ \else
+ \addto at par{arrows=#2}%
+ \fi
+ #1%
+}
+% ------------------------- hv 1.10 end ------------------------
+%
+\def\begin at ClosedObj{%
+ \leavevmode
+ \pst at killglue
+ \begingroup
+ \use at par
+ \solid at star
+ \ifpsdoubleline\pst at setdoublesep\fi
+ \pst at addarrowdef% DG addition
+ \init at pscode}
+%
+\def\end at ClosedObj{%
+ \ifpsshadow \pst at closedshadow \fi
+ \ifdim\psk at border\p@>\z@ \pst at addborder \fi
+ \psk at fillstyle
+ \pst at stroke
+ \ifpsdoubleline \pst at doublestroke \fi
+ \ifshowpoints
+% DG modification begin - Mar. 4, 1995
+%\addto at pscode{Points aload length 2 div cvi /N ED \psdots at iii}%
+ \pst at OpenShowPoints
+% DG modification end
+ \fi
+ \use at pscode
+ \endgroup
+ \ignorespaces%
+}
+\def\begin at OpenObj{%
+ \begin at ClosedObj%
+ \let\pst at linetype\pst at arrowtype%
+ \pst at addarrowdef%
+}
+\def\begin at AltOpenObj{%
+ \begin at ClosedObj
+ \def\pst at repeatarrowsflag{\z@}%
+ \def\pst at linetype{0}}
+%
+\def\end at OpenObj{%
+ \ifpsshadow \pst at openshadow \fi
+ \ifdim\psk at border\p@>\z@ \pst at addborder \fi
+ \psk at fillstyle
+ \pst at stroke
+ \ifpsdoubleline \pst at doublestroke \fi
+ \ifnum\pst at repeatarrowsflag>\z@ \pst at repeatarrows \fi
+ \ifshowpoints \pst at OpenShowPoints \fi
+ \use at pscode
+ \endgroup
+ \ignorespaces}
+%
+\def\begin at SpecialObj{%
+ \leavevmode
+ \pst at killglue
+ \begingroup
+ \use at par
+ \init at pscode}
+%
+\def\end at SpecialObj{%
+ \use at pscode
+ \endgroup
+ \ignorespaces}
+%
+\def\pst at code{}%
+\def\init at pscode{%
+ \addto at pscode{%
+ \pst at number\pslinewidth SLW
+ \pst at usecolor\pslinecolor}%
+}
+\def\addto at pscode#1{\xdef\pst at code{\pst at code#1\space}}
+\def\use at pscode{%
+ \pstverb{
+ \pst at dict
+ \tx at STP
+ \pst at newpath
+ \psk at origin
+ \psk at swapaxes
+ \pst at code
+ end
+ }%
+ \gdef\pst at code{}%
+}
+\def\use at psCode{%
+ \pstVerb{
+ \pst at dict
+ \tx at STP
+ \pst at newpath
+ \psk at origin
+ \psk at swapaxes
+ \pst at code
+ end
+ }%
+ \gdef\pst at code{}%
+}
+\def\pst at newpath{newpath }
+%
+\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi}
+\def\KillGlue{\let\pst at killglue\pst@@killglue}
+\def\DontKillGlue{\let\pst at killglue\relax}
+\DontKillGlue
+%
+\def\solid at star{%
+ \if at star
+ \pslinewidth=\z@
+ \psdoublelinefalse
+ \def\pslinestyle{none}%
+ \def\psk at fillstyle{\psfs at solid}%
+ \let\psfillcolor\pslinecolor
+ \fi}
+%
+\def\pst at setdoublesep{%
+\pst at getlength\psdoublesep\psdoublesep
+\pslinewidth=2\pslinewidth
+\advance\pslinewidth\psdoublesep\p@
+\let\pst at setdoublesep\relax}
+\def\tx at Shadow{Shadow }
+\def\pst at closedshadow{%
+ \addto at pscode{%
+ gsave
+ \psk at shadowsize \psk at shadowangle \tx at PtoC
+ \tx at Shadow
+ \pst at usecolor\psshadowcolor
+ gsave fill grestore
+ stroke
+ grestore
+ gsave
+ \pst at usecolor\psfillcolor
+ gsave fill grestore
+ stroke
+ grestore}}
+%
+\def\pst at openshadow{%
+ \addto at pscode{%
+ gsave
+ \psk at shadowsize \psk at shadowangle \tx at PtoC
+ \tx at Shadow
+ \pst at usecolor\psshadowcolor
+ \ifx\psk at fillstyle\relax\else
+ gsave fill grestore
+ \fi
+ stroke}%
+ \pst at repeatarrows%
+ \addto at pscode{grestore}%
+ \ifx\psk at fillstyle\relax\else
+ \addto at pscode{%
+ gsave
+ \pst at usecolor\psfillcolor
+ gsave fill grestore
+ stroke
+ grestore}%
+ \fi}
+%
+\def\pst at addborder{%
+ \addto at pscode{%
+ gsave
+ \psk at border 2 mul
+ CLW add SLW
+ \pst at usecolor\psbordercolor
+ stroke
+ grestore}}
+%
+\def\pst at stroke{%
+ \ifx\pslinestyle\@none\else
+ \addto at pscode{%
+ gsave
+ \pst at number\pslinewidth SLW
+ \pst at usecolor\pslinecolor
+ \tx at setStrokeTransparency % hv 2008-01-13
+ \@nameuse{psls@\pslinestyle}
+ grestore}%
+ \fi}
+%
+\def\pst at fill#1{\addto at pscode{gsave #1 grestore}}%
+%
+\def\pst at doublestroke{%
+ \addto at pscode{%
+ gsave
+ \psdoublesep SLW
+ \pst at usecolor\psdoublecolor
+ \tx at setStrokeTransparency % hv 2016-09-23
+ stroke
+ grestore
+}}
+%
+\def\pst at arrowtype{%
+ \ifx\psk at arrowB\@empty 0 \else -2 \fi
+ \ifx\psk at arrowA\@empty 0 \else -1 \fi
+ add }
+%
+\def\pst at addarrowdef{%
+ \addto at pscode{%
+ /ArrowA {
+ \ifx\psk at arrowA\@empty
+ \pst at oplineto
+ \else
+ \pst at arrowdef{A}
+ moveto
+ \fi
+ } def
+ /ArrowB { \ifx\psk at arrowB\@empty \else \pst at arrowdef{B} \fi } def
+}}
+%
+\def\pst at arrowdef#1{%
+ \ifnum\pst at repeatarrowsflag>\z@
+ /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c
+ \fi
+ \tx at BeginArrow
+ \psk at arrowscale
+ \@nameuse{psas@\@nameuse{psk at arrow#1}}
+ \tx at EndArrow
+}
+%
+\def\pst at repeatarrows{%
+ \addto at pscode{%
+ gsave
+ \ifx\psk at arrowA\@empty\else ArrowAc ArrowA pop pop \fi
+ \ifx\psk at arrowB\@empty\else ArrowBc ArrowB pop pop pop pop \fi
+ grestore
+}}
+%
+\def\pst at OpenShowPoints{%
+ \addto at pscode{%
+ gsave
+ \psk at dotsize
+ \@nameuse{psds@\psk at dotstyle}
+ newpath
+ Points aload length 2 div 2 sub cvi /N ED
+ N 0 ge
+ { \ifx\psk at arrowA\@empty Dot \else pop pop \fi
+ N { Dot } repeat
+ \ifx\psk at arrowB\@empty Dot \else pop pop \fi }
+ { N 2 mul { pop } repeat } ifelse
+ grestore
+}}
+%
+\newif\ifPst at custom\Pst at customfalse
+\define at boolkey[psset]{pstricks}[Pst@]{noCurrentPoint}[true]{}
+\psset[pstricks]{noCurrentPoint=false}
+%
+%
+\def\pscustom{\pst at object{pscustom}}
+\long\def\pscustom at i#1{%
+ \begin at SpecialObj%
+ \solid at star%
+ \let\pst at ifcustom\iftrue%
+ \Pst at customtrue%
+ \let\begin at ClosedObj\begin at CustomObj%
+ \let\end at ClosedObj\endgroup%
+ \def\begin at OpenObj{\begin at CustomObj\pst at addarrowdef}%
+ \let\end at OpenObj\endgroup%
+ \let\begin at AltOpenObj\begin at CustomObj%
+ \def\begin at SpecialObj{%
+ \begingroup%
+ \pst at misplaced{special graphics object}%
+ \def\addto at pscode####1{}%
+ \let\end at SpecialObj\endgroup}%
+ \def\@multips(##1)(##2)##3##4{\pst at misplaced\multips}%
+ \def\psclip##1{\pst at misplaced\psclip}%
+ \def\pst at repeatarrowsflag{\z@}%
+ \let\pst at setrepeatarrowsflag\relax%
+ \showpointsfalse%
+ \def\pst at linetype{\pslinetype}%
+ \def\psk at liftpen{\z@}%
+% \psset{liftpen=0}%
+ \def\pst at cp{/currentpoint load stopped pop }%
+ \def\pst at oplineto{/lineto load stopped { moveto } if }%
+ \def\pst at optcp##1##2{\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}%
+ \let\caddto at pscode\addto at pscode%
+ \def\cuse at par##1{{\use at par##1}}%
+ \the\pst at customdefs%
+ \setbox\pst at hbox=\hbox{#1}%
+ \psk at fillstyle
+ \pst at stroke
+ \end at SpecialObj
+ \let\pst at ifcustom\iffalse
+ \ignorespaces
+}
+%
+\let\pst at ifcustom\iffalse
+%
+\def\begin at CustomObj{%
+ \begingroup%
+ \use at par%
+ \addto at pscode{
+ \pst at number\pslinewidth SLW
+ \pst at usecolor\pslinecolor
+ }%
+}
+\def\pst at oplineto{moveto }
+\def\pst at cp{}
+\def\pst at optcp#1#2{}
+\define at key[psset]{pstricks}{liftpen}[0]{%
+ \ifPst at custom%
+ \ifcase#1\relax%
+ \def\psk at liftpen{\z@}%
+ \def\pst at cp{/currentpoint load stopped pop }%
+ \def\pst at oplineto{/lineto load stopped { moveto } if }%
+ \or%
+ \def\psk at liftpen{1}%
+ \def\pst at cp{}%
+ \def\pst at oplineto{/lineto load stopped { moveto } if }%
+ \or%
+ \def\psk at liftpen{2}%
+ \def\pst at cp{}%
+ \def\pst at oplineto{moveto }%
+ \fi\fi%
+}
+\psset[pstricks]{liftpen=0}
+\def\psk at liftpen{-1}
+%
+\define at key[psset]{pstricks}{linetype}[2]{%
+ \pst at getint{#1}\pslinetype
+ \ifnum\pst at cntg<-3
+ \@pstrickserr{linetype must be greater than -3}\@ehpa
+ \def\pslinetype{2}%
+ \fi}
+\psset[pstricks]{linetype=2}% otherwise there is a problem when using e.g.
+% \psaxes[axesstyle=frame,linestyle=dashed]{->}(3,-2)
+%
+\def\caddto at pscode#1{%
+ \@pstrickserr{Command can only be used in \string\pscustom}\@ehpa}
+\let\cuse at par\caddto at pscode
+%
+\def\tx at MSave{%
+ /msavematrx
+ [ tx at Dict /msavematrx known % does msavematrix exists?
+ { msavematrx aload pop } if
+ CM % matrix currentmatrix
+ ]
+ def
+%----------------- hv begin 2004-05-07 ------------- patch 15
+ msavematrx
+%----------------- hv end 2004-05-07 ------------- patch 15
+}
+\def\tx at MRestore{% a typo in pstricks with msavematrx
+ tx at Dict /msavematrx known { length 0 gt } { false } ifelse
+ { msavematrx aload pop setmatrix } if
+}
+%
+\newtoks\pst at customdefs
+\pst at customdefs{%
+ \def\newpath{\addto at pscode{newpath}}%
+ \def\reversepath{\addto at pscode{ reversepath }}% 20131209 hv
+ \def\moveto(#1){\pst@@getcoor{#1}\addto at pscode{\pst at coor moveto}}%
+ \def\rmoveto(#1){\pst@@getcoor{#1}\addto at pscode{\pst at coor rmoveto}}%
+ \def\closepath{\addto at pscode{closepath}}%
+ \def\gsave{\begingroup\addto at pscode{gsave}}%
+ \def\grestore{\endgroup\addto at pscode{grestore}}%
+ \def\translate(#1){\pst@@getcoor{#1}\addto at pscode{\pst at coor translate}}%
+ \def\rotate#1{\pst@@getangle{#1}\addto at pscode{\pst at angle rotate}}%
+ \def\scale#1{\pst at getscale{#1}\pst at tempg\addto at pscode{\pst at tempg}}%
+ \def\msave{\addto at pscode{\tx at MSave}}%
+ \def\mrestore{\addto at pscode{\tx at MRestore}}%
+ \def\swapaxes{\addto at pscode{-90 rotate -1 1 scale}}%
+ \def\stroke{\def\pst at par{}\pst at object{stroke}}%
+ \def\fill{\def\pst at par{}\pst at object{fill}}%
+ \def\openshadow{\def\pst at par{}\pst at object{openshadow}}%
+ \def\closedshadow{\def\pst at par{}\pst at object{closedshadow}}%
+ \def\movepath(#1){\pst@@getcoor{#1}\addto at pscode{\pst at coor \tx at Shadow}}%
+ \def\lineto{\pst at onecoor{lineto}}%
+ \def\rlineto{\pst at onecoor{rlineto}}%
+ \def\curveto{\pst at threecoor{curveto}}%
+ \def\rcurveto{\pst at threecoor{rcurveto}}%
+ \def\code#1{\addto at pscode{#1}}%
+ \def\coor(#1){\pst@@getcoor{#1}\addto at pscode\pst at coor\@ifnextchar({\coor}{}}%
+ \def\rcoor{\pst at getcoors{}{}}%
+ \def\dim#1{\pssetlength\pst at dimg{#1}\addto at pscode{\pst at number\pst at dimg}}%
+ \def\setcolor#1{%
+ \@ifundefined{\string\color@#1}{}{\addto at pscode{\pst at usecolor{#1}}}}% hv 1.14 2005-12-17
+ \def\arrows#1{{\psset[pstricks]{arrows=#1}\pst at addarrowdef}}%
+ \let\file\pst at rawfile%
+} % END \pst at customdefs
+%
+\def\closedshadow at i{\cuse at par\pst at closedshadow}
+\def\openshadow at i{\cuse at par\pst at openshadow}
+\def\stroke at i{\cuse at par\pst at stroke}%
+\def\fill at i{\cuse at par\psk at fillstyle}%
+\def\pst at onecoor#1(#2){%
+\pst@@getcoor{#2}%
+\addto at pscode{\pst at coor #1}}
+\def\pst at threecoor#1(#2)#3(#4)#5(#6){%
+ \begingroup
+ \pst at getcoor{#2}\pst at tempa
+ \pst at getcoor{#4}\pst at tempb
+% DG/SR modification begin - Aug. 4, 1999 - Patch 11
+%\pst at getcoor{#6}\pst at tembc
+ \pst at getcoor{#6}\pst at tempc
+% DG/SR modification end
+ \addto at pscode{\pst at tempa \pst at tempb \pst at tempc #1}%
+ \endgroup}
+%
+\def\pst at rawfile#1{%
+ \begingroup
+ \def\do##1{\catcode`##1=12\relax}"
+ \dospecials
+ \catcode`\%=14
+ \pst@@rawfile{#1}%
+ \endgroup}
+%
+\def\pst@@rawfile#1{%
+ \immediate\openin1 #1
+ \ifeof1
+ \@pstrickserr{File `#1' not found}\@ehpa
+ \else
+ \immediate\read1 to \pst at tempg
+ \loop
+ \ifeof1 \@pstfalse\else\@psttrue\fi
+ \if at pst
+ \addto at pscode\pst at tempg
+ \immediate\read1 to \pst at tempg
+ \repeat
+ \fi
+ \immediate\closein1\relax}
+%
+\def\tx at NArray{NArray }
+\def\tx at Line{Line }
+\def\tx at Arcto{Arcto }
+\def\tx at CheckClosed{CheckClosed }
+\def\tx at Polygon{Polygon }
+\define at key[psset]{pstricks}{gangle}[0]{\pst at getangle{#1}\psk at gangle}
+\define at boolkey[psset]{pstricks}[Pst@]{trueAngle}[true]{}
+\psset[pstricks]{trueAngle=false,gangle=0}
+%
+\def\tx at Diamond{Diamond }
+\def\psdiamond{\def\pst at par{}\pst at object{psdiamond}}
+\def\psdiamond at i(#1){\@ifnextchar({\psdiamond at ii(#1)}{\psdiamond at ii(0,0)(#1)}}
+\def\psdiamond at ii(#1)(#2){%
+ \begin at ClosedObj
+ \pst at getcoor{#1}\pst at tempa
+ \pst at getcoor{#2}\pst at tempb
+ \addto at pscode{%
+ \psline at iii
+ pop
+ \psk at dimen
+ \pst at tempb
+ \psk at gangle
+ \pst at tempa
+ \tx at Diamond
+ }%
+ \def\pst at linetype{4}%
+ \end at ClosedObj}
+%
+\def\tx at Triangle{Triangle }
+\def\pstriangle{\def\pst at par{}\pst at object{pstriangle}}
+\def\pstriangle at i(#1){\@ifnextchar({\pstriangle at ii(#1)}{\pstriangle at ii(0,0)(#1)}}
+\def\pstriangle at ii(#1)(#2){%
+ \begin at ClosedObj
+ \pst at getcoor{#1}\pst at tempa% the center of the baseline
+ \pst at getcoor{#2}\pst at tempb% the height of the triangle
+ \addto at pscode{%
+ \psline at iii
+ pop % no showpoints option
+ \psk at dimen % outer/inner/middle
+ \pst at tempb
+ \psk at gangle % rotating angle
+ \pst at tempa
+ \tx at Triangle
+ }%
+ \def\pst at linetype{2}%
+ \end at ClosedObj}
+%
+\def\tx at CCA{CCA }
+\def\tx at CCA{CCA }
+\def\tx at CC{CC }
+\def\tx at IC{IC }
+\def\tx at BOC{BOC }
+\def\tx at NC{NC }
+\def\tx at EOC{EOC }
+\def\tx at BAC{BAC }
+\def\tx at NAC{NAC }
+\def\tx at EAC{EAC }
+\def\tx at OpenCurve{OpenCurve }
+\def\tx at AltCurve{AltCurve }
+\def\tx at ClosedCurve{ClosedCurve }
+%
+\define at key[psset]{pstricks}{curvature}[1 0.1 0]{%
+ \edef\pst at tempg{#1 }%
+ \expandafter\psset@@curvature\pst at tempg * * * \@nil}
+\def\psset@@curvature#1 #2 #3 #4\@nil{%
+ \pst at checknum{#1}\pst at tempg
+ \pst at checknum{#2}\pst at temph
+ \pst at checknum{#3}\pst at tempi
+ \edef\psk at curvature{\pst at tempg \pst at temph \pst at tempi}}
+%
+\psset[pstricks]{curvature=1 .1 0}
+%
+\def\pscurve{\pst at object{pscurve}}
+\def\pscurve at i{%
+ \pst at getarrows{%
+ \begin at OpenObj
+ \pst at getcoors[\pscurve at ii%
+ }%
+}
+\def\pscurve at ii{%
+ \addto at pscode{
+ \ifPst at noCurrentPoint\else\pst at cp\fi % current point
+ \psk at curvature\space /c ED /b ED /a ED
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol \psls at symbol OpenSymbolCurve \else \tx at OpenCurve \fi
+ \ifPst at variableLW \pst at flattenpath \fi
+ }%
+ \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi%
+ \end at OpenObj%
+}
+\def\psecurve{\pst at object{psecurve}}
+\def\psecurve at i{\pst at getarrows{\begin at OpenObj\pst at getcoors[\psecurve at ii}}
+\def\psecurve at ii{%
+ \addto at pscode{
+ \psk at curvature\space /c ED /b ED /a ED
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol \psls at symbol AltOpenSymbolCurve \else \tx at AltCurve \fi
+ }%
+ \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi%
+ \end at OpenObj}
+%
+\def\psccurve{\pst at object{psccurve}}
+\def\psccurve at i{\begin at ClosedObj\pst at getcoors[\psccurve at ii}
+\def\psccurve at ii{%
+ \addto at pscode{%
+ \psk at curvature\space /c ED /b ED /a ED
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol \psls at symbol ClosedSymbolCurve \else \tx at ClosedCurve \fi
+ }%
+ \def\pst at linetype{1}%
+ \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi%
+ \end at ClosedObj}
+%
+\def\pscspline{\pst at object{pscspline}}% Christoph Bersch
+\def\pscspline at i{%
+ \pst at getarrows{%
+ \begin at OpenObj
+ \pst at getcoors[\pscspline at ii
+ }%
+}
+\def\tx at Spline{Spline }
+\def\pscspline at ii{%
+ \addto at pscode{
+ \ifPst at noCurrentPoint\else\pst at cp\fi
+ \tx at setlinejoin
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol
+ \psls at symbol OpenSymbolSpline
+ \else
+ \tx at Spline
+ \fi
+ }%
+ \end at OpenObj
+}
+%
+\define at key[psset]{pstricks}{dotsize}[2pt 2]{%
+ \pst at expandafter\pst at getdimnum{#1} 0 {} {}\@nil%
+ \edef\psk@@dotsize{\pst at number\pst at dimg}%
+ \let\psk@@@dotsize\pst at tempg%
+ \edef\psk at dotsize{ /DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }}
+\psset[pstricks]{dotsize=2pt 2}
+%
+\define at key[psset]{pstricks}{dotscale}[1]{%
+ \pst at getscale{#1}\psk at dotscale
+ \ifx\psk at dotscale\@empty
+ \def\psk at xdotscale{1 }%
+ \def\psk at ydotscale{1 }%
+ \else
+ \let\psk at xdotscale\pst at tempg
+ \let\psk at ydotscale\pst at temph
+ \fi}
+%
+\def\pst at Getangle#1#2{%
+ \pst at getangle{#1}\pst at tempg
+ \def\pst at temph{0. }%
+ \ifx\pst at tempg\pst at temph\def#2{}\else\edef#2{\pst at tempg\space rotate }\fi}
+%
+\define at key[psset]{pstricks}{dotangle}[0]{%
+ \pst at getangle{#1}\psk@@dotangle
+ \ifdim\psk@@dotangle\p@=\z@
+ \let\psk at dotangle\@empty
+ \else
+ \edef\psk at dotangle{\psk@@dotangle rotate }%
+ \fi}
+\psset[pstricks]{dotangle=0}
+%
+\def\pst at getdotsize{%
+\pst at dimg=\psk@@@dotsize\pslinewidth
+\advance\pst at dimg\psk@@dotsize\p@
+\pst at dimh=\psk at ydotscale\pst at dimg
+\pst at dimg=\psk at xdotscale\pst at dimg
+\divide\pst at dimh 2
+\divide\pst at dimg 2\relax}
+%
+\psset[pstricks]{dotscale=1}
+%
+\def\psdot{\pst at object{psdot}}
+\def\psdot at i{\@ifnextchar({\psdot at ii}{\psdot at ii(\z@,\z@)}}
+\def\psdot at ii(#1){%
+ \begin at SpecialObj%
+% hv modification 1.13 2005-11-28
+ \solid at star%
+% hv modification end
+ \pst@@getcoor{#1}%
+ \addto at pscode{
+ \psk at dotsize
+ \@nameuse{psds@\psk at dotstyle}
+ \tx at setStrokeTransparency
+ \pst at coor Dot}%
+ \end at SpecialObj}
+%
+\def\psdots{\pst at object{psdots}}
+\def\psdots at i{%
+ \begin at SpecialObj%
+ \pst at getcoors[\psdots at ii}
+\def\psdots at ii{%
+ \addto at pscode{ false \tx at NArray \psdots at iii }%
+ \end at SpecialObj}
+\def\psdots at iii{%
+ \psk at dotsize
+ \@nameuse{psds@\psk at dotstyle}
+ \tx at setStrokeTransparency
+ newpath
+ n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat }
+%
+% DG: dead code (to suppress until \psset[pstricks]{dotstyle) ? - Aug. 4, 1997
+\def\tx at SQ{SQ }
+\def\tx at ST{ST }
+\def\tx at SP{SP }
+%
+\def\pst at gdot#1{ /Dot { gsave T \psk at dotangle \psk at dotscale #1 grestore } def }
+%
+\@namedef{psds@*}{\pst at gdot{ 0 0 DS \tx at SD }}
+\@namedef{psds at o}{%
+ /r2 DS CLW sub def
+ \pst at gdot{ 0 0 DS \tx at SD \pst at usecolor\psfillcolor SLW 0 0 r2 \tx at SD }}
+\@namedef{psds at square*}{ /r1 DS .886 mul def \pst at gdot{r1 \tx at SQ }}
+\@namedef{psds at square}{%
+ /r1 DS .886 mul def /r2 r1 CLW sub def
+ \pst at gdot{r1 \tx at SQ \pst at usecolor\psfillcolor r2 \tx at SQ}}
+\@namedef{psds at triangle*}{%
+ /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
+ \pst at gdot{x1 y1 \tx at ST}}
+\@namedef{psds at triangle}{%
+ /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
+ /y2 y1 CLW add def /x2 y2 1.732 mul neg def
+ \pst at gdot{x1 y1 \tx at ST \pst at usecolor\psfillcolor x2 y2 \tx at ST}}
+\@namedef{psds at pentagon*}{%
+ /r1 DS 1.149 mul def
+ \pst at gdot{r1 \tx at SP}}
+\@namedef{psds at pentagon}{%
+ DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED
+ \pst at gdot{r1 \tx at SP \pst at usecolor\psfillcolor r2 \tx at SP}}
+\@namedef{psds at +}{%
+ /DS DS 1.253 mul def
+ \pst at gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}}
+\@namedef{psds@|}{%
+ \psk at tbarsize CLW mul add 2 div /DS ED
+ \pst at gdot{0 DS moveto 0 DS neg L stroke}}
+% DG: end dead code?
+%
+\define at key[psset]{pstricks}{dotstyle}[*]{%
+ \@ifundefined{psds@#1}%
+ {\@pstrickserr{Dot style `#1' not defined}\@eha}%
+ {\edef\psk at dotstyle{#1}}}
+\psset[pstricks]{dotstyle=*}
+%
+\def\tx at FontDot{FontDot }
+\def\newpsfontdot#1[#2]#3#4{%
+ \@namedef{psds@#1}{%
+ /#3 \psk@@dotangle [#2] \tx at FontDot
+% DG/SR modification begin - Dec. 12, 1999 - Patch 14
+%/Dot { moveto #4 show } bind def }}
+ /Dot { moveto gsave \psk at dotscale #4 show grestore } bind def
+}}
+% DG/SR modification end
+\def\newpsfontdotH#1[#2]#3#4#5{% for filled objects
+ \@namedef{psds@#1}{%
+ /#3 \psk@@dotangle [#2] \tx at FontDot
+ /Dot {
+ moveto
+% \iftrue
+% DG/SR modification begin - Dec. 23, 1999 - Patch 14
+%gsave \pst at usecolor\psfillcolor #5 show grestore
+%\fi
+%#4 show
+ gsave \psk at dotscale \pst at usecolor\psfillcolor #5 show grestore % fill first
+% \fi
+ gsave \psk at dotscale #4 show grestore % show the unfilled one
+% DG/SR modification end
+ } bind def
+}}
+%
+\pstheader{pst-dots.pro}
+\newpsfontdot{*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)}
+\newpsfontdotH{o}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)}
+\newpsfontdotH{Bo}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)}
+\newpsfontdotH{triangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)}
+\newpsfontdotH{Btriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)}
+\newpsfontdot{triangle*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
+\newpsfontdotH{square}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)}
+\newpsfontdotH{Bsquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)}
+\newpsfontdot{square*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)}
+\newpsfontdotH{pentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)}
+\newpsfontdotH{Bpentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)}
+\newpsfontdot{pentagon*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)}
+% DG/SR modification begin - Mar. 18, 1997 and Dec. 16, 1999 - Patch 14
+%\newpsfontdot{diamond*}[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{StandardSymL}{<E0>}
+%\newpsfontdot{diamond}[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{StandardSymL}{<A8>}
+% D.G. modification begin - Jan. 17, 2000
+\newpsfontdotH{diamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)}
+\newpsfontdotH{Bdiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)}
+\newpsfontdot{diamond*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)}
+% DG/SR modification end
+\newpsfontdot{oplus}[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{StandardSymL}{<C5>}
+\newpsfontdot{otimes}[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{StandardSymL}{<C4>}
+\newpsfontdot{x}[1.8 0.0 0.0 1.8 -0.495 -0.4788]{StandardSymL}{<B4>}
+\newpsfontdot{+}[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{NimbusRomNo9L-Regu}{<2B>}
+\newpsfontdot{asterisk}[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{NimbusRomNo9L-Regu}{<2A>}
+\newpsfontdot{B+}[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{NimbusRomNo9L-Bold}{<2B>}
+\newpsfontdot{Basterisk}[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{NimbusRomNo9L-Bold}{<2A>}
+\newpsfontdot{|}[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{NimbusSanL-Regu}{(|)}
+% DG/SR modification begin - Oct. 27, 1997 - Patch 7
+%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{NimbusSanL-Regu}{(|)}
+% DG/SR modification end
+\newpsfontdot{B|}[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{NimbusSanL-Bold}{(|)}%
+% DG/SR modification begin - Oct. 27, 1997 - Patch 7
+%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{NimbusSanL-Bold}{(|)}
+
+% DG/SR modification end
+\iffalse
+\newpsfontdot{*}[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{StandardSymL}{<B7>}
+\newpsfontdot{o}[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{StandardSymL}{<B0>}
+\newpsfontdot{Bo}[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{NimbusRomNo9L-Bold}{<CA>}
+\fi
+% Etienne Riga
+\newpsfontdot{Asterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(k)}
+\newpsfontdot{BoldAsterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(K)}
+\newpsfontdotH{SolidAsterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(J)}{(b)}
+%
+\newpsfontdotH{Pentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)}
+\newpsfontdotH{BoldPentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)}
+\newpsfontdot{SolidPentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)}
+\newpsfontdotH{Hexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(h)}{(G)}
+\newpsfontdotH{BoldHexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(H)}{(G)}
+\newpsfontdot{SolidHexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(G)}
+\newpsfontdotH{Octogon}[1 0 0 1 0 0]{PSTricksDotFont}{(f)}{(g)}
+\newpsfontdotH{BoldOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(F)}{(g)}
+\newpsfontdot{SolidOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(g)}
+%
+\newpsfontdot{Bullet}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)}
+\newpsfontdotH{Circle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)}
+\newpsfontdotH{BoldCircle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)}
+%\newpsfontdot{SolidCircle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
+\newpsfontdotH{Triangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)}
+\newpsfontdotH{BoldTriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)}
+\newpsfontdot{SolidTriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
+\newpsfontdotH{Square}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)}
+\newpsfontdotH{BoldSquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)}
+\newpsfontdot{SolidSquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)}
+\newpsfontdot{Add}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(a)}
+\newpsfontdot{BoldAdd}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(A)}
+\newpsfontdot{Mul}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(x)}
+\newpsfontdot{BoldMul}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(X)}
+\newpsfontdotH{Oplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(m)}{(b)}
+\newpsfontdotH{BoldOplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(M)}{(b)}
+\newpsfontdotH{SolidOplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(e)}{(b)}
+\newpsfontdotH{Otimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(n)}{(b)}
+\newpsfontdotH{BoldOtimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(N)}{(b)}
+\newpsfontdotH{SolidOtimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(E)}{(b)}
+\newpsfontdot{Bar}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(i)}
+\newpsfontdot{BoldBar}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(I)}
+\newpsfontdotH{Diamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)}
+\newpsfontdotH{BoldDiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)}
+\newpsfontdot{SolidDiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)}
+%
+\newdimen\pslinearc
+\define at key[psset]{pstricks}{linearc}[0pt]{\pssetlength\pslinearc{#1}}
+\psset[pstricks]{linearc=0pt}
+%
+\def\psline{\begingroup\pst at object{psline}}
+\def\psline at i{%
+ \pst at getarrows{%
+ \begin at OpenObj
+ \pst at getcoors[\psline at ii
+ }%
+}
+\def\psline at ii{%
+ \ifx\pslinestyle\psls@@symbol\addto at pscode{ \psls at symbol SymbolLine }%
+ \else
+ \addto at pscode{
+ \ifPst at noCurrentPoint\else\pst at cp\fi % current point?
+ \psline at iii % arc and lineto type
+ \tx at Line % .pro function
+ }%
+ \fi
+ \end at OpenObj
+ \endgroup
+}
+\def\psline at iii{%
+ \ifdim\pslinearc>\z@
+ /r \pst at number\pslinearc def
+ /Lineto { \tx at Arcto } def
+ \else
+ /Lineto /lineto load def
+ \fi
+ \tx at setlinejoin % hv 2007-10-13
+ \ifshowpoints true \else false \fi
+}
+%
+\def\psLine{\pst at object{psLine}}
+\def\psLine at i{%
+ \pst at getarrows{%
+ \begin at OpenObj
+ \psLine at ii}}
+\def\psLine at ii(#1){\@ifnextchar({\psLine at iii(#1)}{\psLine at iii(0,0)(#1)}}%
+\def\psLine at iii(#1)(#2){%
+ \pst at getcoor{#1}\pst at tempA
+ \pst at getcoor{#2}\pst at tempB
+ \addto at pscode{
+ \ifPst at noCurrentPoint\else\pst at cp\fi % current point?
+ [ % start for coordinate array
+ \pst at tempB
+ \pst at tempA % order vice versa
+ 4 copy Pyth2 \psk at arrowlength ge
+ { \psline at iii \tx at Line }
+ { pop pop pop pop pop } ifelse
+ }%
+ \end at OpenObj
+ \ignorespaces
+}
+\def\psLineSegments{\leavevmode\pst at killglue\pst at object{psLineSegments}}
+\def\psLineSegments at i{\pst at getarrows{\psLineSegments at ii}}
+\def\psLineSegments at ii(#1)(#2){%
+ \begingroup
+ \use at keep@par
+ \solid at star
+ \ifpsdoubleline\pst at setdoublesep\fi
+ \init at pscode
+ \let\pst at linetype\pst at arrowtype
+ \pst at addarrowdef
+ \pst at getcoor{#1}\pst at tempA
+ \pst at getcoor{#2}\pst at tempB
+ \addto at pscode{
+ \ifPst at noCurrentPoint\else\pst at cp\fi % current point?
+ [ % start for coordinate array
+ \pst at tempB
+ \pst at tempA % order vice versa
+ 4 copy Pyth2 \psk at arrowlength ge
+ { \psline at iii \tx at Line }
+ { pop pop pop pop pop } ifelse
+ }%
+ \end at OpenObj
+ \ignorespaces
+ \@ifnextchar(\psLineSegments at ii{}%
+}%
+\def\pst at isnum#1{\pst at isnum@i\zap at space#1 \@empty\@nil}%
+\def\pst at isnum@i#1\@nil{%
+ \if!\ifnum9<1#1!\else_\fi%
+ \expandafter\@firstoftwo%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi}
+%
+\def\psset@@symbol#1#2#3#4\@nil{%
+ \ifx\relax#4\relax\def\psk at symbol{(#1)}%
+ \else%
+ \pst at isnum{#1#2#3}{%
+ \pst at cnta='#1#2#3\relax%
+ \ifnum\pst at cnta>'377\relax%
+ \@pstrickserr{Number too large!}\@ehpb%
+ \else%
+ \def\psk at symbol{(\@backslashchar#1#2#3)}%
+ \fi%
+}{\@pstrickserr{Not a number!}\@ehpb}%
+ \fi}
+%
+\define at key[psset]{pstricks}{symbol}[a]{\expandafter\psset@@symbol#1!!\@nil}
+\psset[pstricks]{symbol=a}
+%
+\newdimen\pst at symbolStep
+\define at key[psset]{pstricks}{symbolStep}[20pt]{\pst at expandafter\pst@@symbolStep#1\@nil}
+\def\pst@@symbolStep#1#2\@nil{\if-#1\pssetlength\pst at symbolStep{-#2pt}\else\pssetlength\pst at symbolStep{#1#2}\fi}
+\psset[pstricks]{symbolStep=20pt}
+
+\newdimen\pst at symbolWidth
+\newdimen\pst at symbolLinewidth
+\define at key[psset]{pstricks}{symbolWidth}[10pt]{\pssetlength\pst at symbolWidth{#1}}
+\define at key[psset]{pstricks}{symbolLinewidth}[0.5pt]{\pssetlength\pst at symbolLinewidth{#1}}
+\psset[pstricks]{symbolWidth=10pt,symbolLinewidth=0.5pt}
+
+\define at key[psset]{pstricks}{symbolFont}[Dingbats]{\def\psk at symbolFont{/#1 }}
+\psset[pstricks]{symbolFont=Dingbats}
+\define at boolkey[psset]{pstricks}[Pst@]{rotateSymbol}[true]{}
+\psset[pstricks]{rotateSymbol=false}
+\define at key[psset]{pstricks}{startAngle}[0]{\pst at getangle{#1}\psk at startAngle}
+\define at key[psset]{pstricks}{tickAngle}[0]{\pst at getangle{#1}\psk at tickAngle}
+\psset[pstricks]{startAngle=0,tickAngle=0}
+\define at boolkey[psset]{pstricks}[Pst@]{curveticks}[true]{}
+\psset[pstricks]{curveticks=false}
+
+%
+\def\psls at symbol{
+ /Symbol \psk at symbol def
+ /SymbolWidth \pst at number\pst at symbolWidth def
+ /SymbolLinewidth \pst at number\pst at symbolLinewidth def
+ /SymStep \pst at number\pst at symbolStep def
+ \psk at symbolFont findfont %0. [1.0 0.0 0.0 1.0 0.0 0.0]
+ \pst at number\pst at symbolWidth scalefont %dup
+ setfont
+ /rotateSymbol \ifPst at rotateSymbol true \else false \fi def
+ /tickAngle \psk at tickAngle\space def
+ /startAngle \psk at startAngle\space def
+ /CorrAngle \ifx\psk at rot\@empty 0 \else \psk at rot \fi def
+ /curveticks \ifPst at curveticks true \else false \fi def
+ \pst at number\pslinewidth SLW
+}
+\def\psls@@symbol{symbol}
+%
+\def\psPline{\def\pst at par{}\pst at object{psPline}}% perpendicular to another line B-C
+\def\psPline at i{%
+ \pst at getarrows{%
+ \begin at OpenObj
+ \pst at getcoors[\psPline at ii}% \pst at coors on stack
+}
+\def\psPline at ii{%
+ \addto at pscode{ % [ pC pB pA is on stack
+ /yA ED /xA ED
+ /yB ED /xB ED
+ yB sub exch xB sub div /mBC ED % the slope
+ /mA 1 mBC neg div def % orthogonal
+ /xS yA yB sub mBC xB mul add mA xA mul sub mBC mA sub div def
+ /yS mBC xS xB sub mul yB add def
+ xS yS xA yA
+ \ifPst at noCurrentPoint\else\pst at cp\fi % current point
+ \psline at iii % arc and lineto type
+ \tx at Line % .pro function
+ }%
+ \end at OpenObj%
+ \ignorespaces%
+}
+%
+\def\qline(#1)(#2){%
+ \def\pst at par{}%
+ \begin at SpecialObj
+ \def\pst at linetype{0}%
+ \pst at getcoor{#1}\pst at tempa
+ \pst@@getcoor{#2}%
+ \addto at pscode{%
+ \pst at tempa moveto \pst at coor L
+ \@nameuse{psls@\pslinestyle}%
+ }%
+ \end at SpecialObj}
+%
+\def\pspolygon{\pst at object{pspolygon}}
+\def\pspolygon at i{%
+ \begin at ClosedObj%
+ \def\pst at cp{}%
+ \pst at getcoors[\pspolygon at ii%
+}
+\def\pspolygon at ii{%
+ \ifx\pslinestyle\psls@@symbol\addto at pscode{ \psls at symbol SymbolPolygon }%
+ \else \addto at pscode{\psline at iii \tx at Polygon}%
+ \fi%
+ \def\pst at linetype{1}%
+ \end at ClosedObj}
+%
+\define at key[psset]{pstricks}{framearc}[0]{\pst at checknum{#1}\psk at framearc}
+\psset[pstricks]{framearc=0}
+%
+\define at key[psset]{pstricks}{cornersize}[relative]{\pst at expandafter\psset@@cornersize{#1}\@nil}
+\def\psset@@cornersize#1#2\@nil{%
+ \if #1a\relax
+ \def\psk at cornersize{\pst at number\pslinearc false }%
+ \else\def\psk at cornersize{\psk at framearc true }%
+ \fi}
+\psset[pstricks]{cornersize=relative}
+%
+\def\tx at Rect{Rect }
+\def\tx at OvalFrame{OvalFrame }
+\def\tx at Frame{Frame }
+%
+\define at key[psset]{pstricks}{dimen}[outer]{\pst at expandafter\psset@@dimen{#1}\@nil}
+\def\psset@@dimen#1#2\@nil{%
+ \if #1o\relax% outer
+ \def\psk at dimen{.5 }%
+ \else
+ \if #1m\relax% middle
+ \def\psk at dimen{0 }%
+ \else
+ \if #1i\relax% inner
+ \def\psk at dimen{-.5 }%
+ \fi\fi\fi}
+\psset[pstricks]{dimen=outer}
+%
+\def\psframe{\pst at object{psframe}}
+\def\psframe at i(#1){%
+ \@ifnextchar({\psframe at ii(#1)}{\psframe at ii(0,0)(#1)}}
+\def\psframe at ii(#1)(#2){%
+ \begin at ClosedObj
+ \pst at getcoor{#1}\pst at tempa
+ \pst@@getcoor{#2}%
+ \addto at pscode{ \psk at cornersize \pst at tempa \pst at coor \psk at dimen \tx at Frame }%
+ \def\pst at linetype{2}%
+ \showpointsfalse
+ \end at ClosedObj
+}
+
+\iffalse
+\def\psSquare{\pst at object{psSquare}}
+\def\psSquare at i(#1)(#2){%
+ \begin at ClosedObj
+ \pst at getcoor{#1}\pst at tempa
+ \pst at getcoor{#2}\pst at tempb
+ \addto at pscode{ \psk at cornersize
+ \pst at tempa /yA ED /xA ED
+ \pst at tempb /yB ED /xB ED
+ xA yA moveto xB yB L
+ xA xB sub yA yB sub atan /Angle ED
+ xA yA xB yB Pyth2 dup xA add exch yA add
+ \psk at dimen
+ \tx at Frame
+% grestore
+ }%
+ \def\pst at linetype{2}%
+ \showpointsfalse
+ \end at ClosedObj
+}
+\fi
+%
+\def\psTextFrame{\pst at object{psTextFrame}}
+\def\psTextFrame at i(#1)(#2)#3{%
+ \addbefore at par{ref=c}% to prevent an empty value
+ \leavevmode%
+ \pst at killglue
+ \begingroup
+ \use at par
+ \ifx\psk at yref\relax \def\psk at yref{0}\fi% no Baseline possible
+ \SpecialCoor
+ \pst at getcoor{#1}\pst at tempA
+ \pst at getcoor{#2}\pst at tempB
+ \if at star\psframe*(#1)(#2)\else\psframe(#1)(#2)\fi
+ \rput(! \pst at tempA \pst at tempB % x1 y1 x2 y2
+ exch 4 -1 roll % y1 y2 x2 x1
+ dup /x1 ED % y1 y2 x2 x1
+ sub /dx ED % y1 y2
+ exch dup /y1 ED % y2 y1
+ sub /dy ED
+ x1 dx \psk at xref\space mul add \pst at number\psxunit div
+ y1 dy \psk at yref\space mul add \pst at number\psyunit div ){#3}
+ \endgroup
+ \ignorespaces}
+%
+\def\tx at BezierNArray{ BezierNArray }
+\def\tx at OpenBezier{ OpenBezier }
+\def\tx at ClosedBezier{ ClosedBezier }
+\def\tx at BezierShowPoints{ BezierShowPoints }
+\def\tx at BezierCurve{ BezierCurve }
+\def\pst at BezierType{2 } % the default
+%
+\def\psbezier{\pst at object{psbezier}}
+\def\psbezier at i{%
+ \pst at getarrows{%
+ \begin at OpenObj
+ \pst at getcoors[\psbezier at ii%
+ }%
+}
+\def\psbezier at ii{%
+ \addto at pscode{
+ \ifPst at noCurrentPoint\else\pst at cp\fi
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol \psls at symbol OpenSymbolBezier
+ \else
+ \tx at OpenBezier
+ \ifshowpoints \tx at BezierShowPoints \fi
+ \fi
+ }%
+ \def\pst at linetype{1}%
+ \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi%
+ \end at OpenObj}
+%
+\def\pscbezier{\def\pst at par{}\pst at object{pscbezier}}
+\def\pscbezier at i{%
+ \begin at ClosedObj
+ \pst at getcoors[\pscbezier at ii}
+%
+\def\pscbezier at ii{%
+ \addto at pscode{%
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol \psls at symbol ClosedSymbolBezier
+ \else
+ \tx at ClosedBezier
+ \ifshowpoints \tx at BezierShowPoints \fi
+ \fi}%
+% \chardef\pst at linetype=1
+ \def\pst at linetype{1}%
+ \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi%
+ \end at ClosedObj}
+%
+\iffalse
+\define at key[psset]{pstricks}{epsilon}[0.005]{\pst at checknum{#1}\psk at epsilon}
+\psset[pstricks]{epsilon=0.005} % 200 steps for one curve
+%
+\def\psBezier#1{% % allowed order is 1 ... 9
+ \ifnum#1>0 \ifnum#1<10 \def\pst at BezierType{#1 }\fi\fi%
+ \def\pst at par{}\pst at object{psBezier}}
+\def\psBezier at i{%
+ \pst at getarrows{%
+ \begin at OpenObj
+ \pst at getcoors[\psBezier at ii%
+}}
+\def\psBezier at ii{%
+ \addto at pscode{%
+ \psk at epsilon % step for Bezier T=0,0+epsilon,0+i*epsilon,...,1
+ \pst at BezierType % type of the Bezier curve 2,3,4,...
+ \tx at BezierCurve
+ \ifshowpoints \tx at BezierShowPoints \fi
+ }%
+ \end at OpenObj}
+\fi
+%
+\define at key[psset]{pstricks}{pType}[0]{\pst at cntg=#1\relax\edef\psk at pType{\the\pst at cntg}}
+\psset[pstricks]{pType=0}
+\def\tx at Parab{Parab }% given by 1 point and the min/max
+\def\tx at Parabo{Parab1 }% given by 2 points for y-a=(x-b)^2
+%
+\def\psparabola{\pst at object{psparabola}}% 2009-05-19 (hv)
+\def\psparabola at i{\pst at getarrows\psparabola at ii}
+\def\psparabola at ii#1(#2)#3(#4){% #2 P #4 SP
+ \begin at OpenObj
+ \pst at getcoor{#2}\pst at tempa
+ \pst@@getcoor{#4}%
+ \addto at pscode{\pst at tempa \pst at coor
+ \ifcase\psk at pType
+ \tx at Parab \or
+ \tx at Parabo
+ \fi}%
+ \end at OpenObj}
+\let\parabola\psparabola% compatibility (hv)
+%
+%
+\define at key[psset]{pstricks}{gridwidth}[0.8pt]{\pst at getlength{#1}\psk at gridwidth}
+\psset[pstricks]{gridwidth=.8pt}
+\define at key[psset]{pstricks}{griddots}[0]{%
+ \pst at cntg=#1\relax
+ \edef\psk at griddots{\the\pst at cntg}}
+\psset[pstricks]{griddots=0}
+\define at key[psset]{pstricks}{gridcolor}[black]{\pst at getcolor{#1}\psgridcolor}
+\psset[pstricks]{gridcolor=black}
+\define at key[psset]{pstricks}{subgridwidth}[0.4pt]{\pst at getlength{#1}\psk at subgridwidth}
+\psset[pstricks]{subgridwidth=0.4pt}
+\define at key[psset]{pstricks}{subgridcolor}[gray]{\pst at getcolor{#1}\pssubgridcolor}
+\psset[pstricks]{subgridcolor=gray}
+\define at key[psset]{pstricks}{subgriddots}[0]{%
+ \pst at cntg=#1\relax\edef\psk at subgriddots{\the\pst at cntg}}
+\psset[pstricks]{subgriddots=0}
+\define at key[psset]{pstricks}{subgriddiv}[5]{%
+ \pst at cntg=#1\relax\edef\psk at subgriddiv{\the\pst at cntg}}
+\psset[pstricks]{subgriddiv=5}
+%
+\define at key[psset]{pstricks}{gridfont}[NimbusSanL-Regu]{\def\psk at gridfont{/#1 }}% hv 2007-11-13
+\ifpst at psfonts
+ \psset[pstricks]{gridfont=Helvetica}%
+\else
+ \psset[pstricks]{gridfont=NimbusSanL-Regu}%
+\fi
+%
+\define at key[psset]{pstricks}{gridlabels}[10pt]{\pst at getlength{#1}\psk at gridlabels}
+\psset[pstricks]{gridlabels=10pt}
+\define at key[psset]{pstricks}{gridlabelcolor}[black]{\pst at getcolor{#1}\psgridlabelcolor}
+\psset[pstricks]{gridlabelcolor=black}
+\define at key[psset]{pstricks}{xgridoffset}[0]{\pst at getlength{#1}\psk at xgridoffset}
+\define at key[psset]{pstricks}{ygridoffset}[0]{\pst at getlength{#1}\psk at ygridoffset}
+\psset[pstricks]{xgridoffset=0,ygridoffset=0}
+
+\def\tx at Grid{Grid }
+
+\def\psgrid{\pst at object{psgrid}}
+\def\psgrid at i{\@ifnextchar({\psgrid at ii}{\expandafter\psgrid at iv\pic at coor}}
+\def\psgrid at ii(#1){\@ifnextchar({\psgrid at iii(#1)}{\psgrid at iv(0,0)(0,0)(#1)}}
+\def\psgrid at iii(#1)(#2){\@ifnextchar({\psgrid at iv(#1)(#2)}{\psgrid at iv(#1)(#1)(#2)}}
+\def\psgrid at iv(#1)(#2)(#3){%
+ \begin at SpecialObj%
+ \pst at getcoor{#1}\pst at tempA% hv 1.11
+ \pst at getcoor{#2}\pst at tempB% hv 1.11
+ \pst@@getcoor{#3}%
+ \ifnum\psk at subgriddiv>1\relax
+ \addto at pscode{
+ /xGridOffset \psk at xgridoffset\space def
+ /yGridOffset \psk at ygridoffset\space def
+ gsave
+ \tx at setStrokeTransparency
+ \psk at subgridwidth SLW
+ \pst at usecolor\pssubgridcolor
+ \pst at tempB \pst at coor \pst at tempA % hv 1.11
+% \pst at number\psxunit \pst at number\psyunit % hv 1.11
+ \pst at number\psxunit abs \pst at number\psyunit abs % hv 1.11
+ \psk at subgriddiv\space \psk at subgriddots\space
+ {} 0
+ \psk at gridfont findfont 0 scalefont setfont % hv 1.16
+ \tx at Grid
+ grestore
+ }%
+ \fi%
+ \addto at pscode{
+ gsave
+ /xGridOffset \psk at xgridoffset def
+ /yGridOffset \psk at ygridoffset def
+ \tx at setStrokeTransparency
+ \psk at gridwidth SLW
+ \pst at usecolor\psgridcolor
+ \pst at tempB \pst at coor \pst at tempA % hv 1.11
+ \pst at number\psxunit abs \pst at number\psyunit abs % hv 1.11
+% \pst at number\psxunit \pst at number\psyunit % hv 1.11
+ 1 \psk at griddots\space { \pst at usecolor\psgridlabelcolor }
+ \psk at gridlabels
+ \psk at gridfont findfont \psk at gridlabels scalefont setfont % hv 1.16
+ \tx at Grid
+ grestore
+ }%
+ \end at SpecialObj}
+%
+\newif\ifpsmathbox
+\psmathboxtrue
+\def\pst at mathflag{\z@}
+\newtoks\everypsbox
+\let\pst at thisbox\relax
+%
+\long\def\pst at makenotverbbox#1#2{%
+ \edef\pst at mathflag{%
+ \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else\z@\fi\else\z@\fi}%
+ \setbox\pst at hbox=\hbox{%
+ \ifcase\pst at mathflag\or$\m at th\textstyle\or$\m at th\displaystyle\fi%
+ {\pst at thisbox\the\everypsbox#2}%
+ \ifnum\pst at mathflag>\z@$\fi% $
+ }%
+ #1}
+%
+\def\pst at makeverbbox#1{%
+ \def\pst at afterbox{#1}%
+ \edef\pst at mathflag{\ifpsmathbox\ifmmode\ifinner1\else2\fi\else\z@\fi\else\z@\fi}%
+ \afterassignment\pst at beginbox%
+ \setbox\pst at hbox\hbox%
+}
+\def\pst at beginbox{%
+ \ifcase\pst at mathflag\or$\m at th\or$\m at th\displaystyle\fi%
+ \bgroup\aftergroup\pst at endbox%
+ \pst at thisbox%
+ \the\everypsbox%
+}
+\def\pst at endbox{%
+ \ifnum\pst at mathflag>\z@\relax$\fi% $
+ \egroup%
+ \pst at afterbox%
+}
+\def\pst at makebox{\pst@@makebox}
+\def\psverbboxtrue{\def\pst@@makebox{\pst at makeverbbox}}
+\def\psverbboxfalse{\def\pst@@makebox{\pst at makenotverbbox}}
+\psverbboxfalse
+\def\pst at longbox{%
+ \def\pst at makebox{%
+ \gdef\pst at makebox{\pst@@makebox}%
+ \pst at makelongbox%
+ }%
+}
+\def\pst at makelongbox#1{%
+ \def\pst at afterbox{#1}%
+ \edef\pst at mathflag{%
+ \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi%
+ }%
+ \setbox\pst at hbox\hbox\bgroup
+ \aftergroup\pst at afterbox
+ \ifcase\pst at mathflag\or$\m at th\or$\m at th\displaystyle\fi
+ \begingroup
+ \pst at thisbox
+ \the\everypsbox%
+}
+\def\pst at endlongbox{%
+ \endgroup
+ \ifnum\pst at mathflag>\z@$\fi %$
+ \egroup%
+}
+\def\pslongbox#1#2{%
+ \@namedef{#1}{\pst at longbox#2}%
+ \@namedef{end#1}{\pst at endlongbox}}
+%
+\newdimen\psframesep
+\define at key[psset]{pstricks}{framesep}[3pt]{\pssetlength\psframesep{#1}}
+\psset[pstricks]{framesep=3pt}
+%
+\define at boolkey[psset]{pstricks}[ps]{boxsep}[true]{}
+\psset[pstricks]{boxsep}
+%
+\def\pst at useboxpar{%
+ \use at par
+ \if at star
+ \let\pslinecolor\psfillcolor
+ \solid at star
+ \let\solid at star\relax
+ \fi
+ \ifpsdoubleline \pst at setdoublesep \fi}
+%
+\def\psframebox{\def\pst at par{}\pst at object{psframebox}}
+\def\psframebox at i{\pst at makebox\psframebox at ii}
+\def\psframebox at ii{%
+ \begingroup
+ \pst at useboxpar
+ \pst at dima=\pslinewidth
+ \advance\pst at dima by \psframesep
+ \pst at dimc=\wd\pst at hbox\advance\pst at dimc by \pst at dima
+ \pst at dimb=\dp\pst at hbox\advance\pst at dimb by \pst at dima
+ \pst at dimd=\ht\pst at hbox\advance\pst at dimd by \pst at dima
+ \setbox\pst at hbox=\hbox{%
+ \ifpsboxsep\kern\pst at dima\fi
+ \begin at ClosedObj
+ \addto at pscode{%
+ \psk at cornersize % arcradius boolean
+ \pst at number\pst at dima neg
+ \pst at number\pst at dimb neg
+ \pst at number\pst at dimc
+ \pst at number\pst at dimd
+ .5
+ \tx at Frame%
+ }%
+ \def\pst at linetype{2}%
+ \showpointsfalse
+ \end at ClosedObj
+ \box\pst at hbox
+ \ifpsboxsep\kern\pst at dima\fi%
+ }%
+ \ifpsboxsep\dp\pst at hbox=\pst at dimb\ht\pst at hbox=\pst at dimd\fi
+ \leavevmode\box\pst at hbox
+ \endgroup}
+%
+\def\psdblframebox{\def\pst at par{}\pst at object{psdblframebox}}
+\def\psdblframebox at i{\addto at par{doubleline=true}\psframebox at i}
+%
+\define at key[psset]{pstricks}{clipcommand}[clip]{\def\pst at clipcommand{#1 }}
+\psset[pstricks]{clipcommand=clip}% alternative is eoclip
+%
+\def\psclip{\@ifnextchar[\psclip at i{\psclip at i[]}}%
+\def\psclip at i[#1]#2{%
+ \leavevmode%
+ \begingroup%
+ \ifx\relax#1\relax\else\psset{#1}\fi%
+ \begin at psclip%
+ \begingroup%
+ \def\use at pscode{%
+ \pstVerb{
+ \pst at dict
+ /mtrxc CM def
+ CP CP T
+ \tx at STV
+ \psk at origin
+ \psk at swapaxes
+ newpath
+ \pst at code
+ \pst at clipcommand
+ newpath
+ mtrxc setmatrix
+ moveto
+ 0 setgray
+ end
+ }%
+ \gdef\pst at code{}}%
+ \def\@multips(##1)(##2)##3##4{\pst at misplaced\multips}%
+ \def\nc at object##1##2##3##4{\pst at misplaced{node connection}}%
+ \hbox to\z@{#2}%
+ \endgroup%
+ \def\endpsclip{%
+ \end at psclip%
+ \endgroup}%
+ \ignorespaces}
+%
+\def\endpsclip{\pst at misplaced\endpsclip}
+\let\begin at psclip\relax
+\def\end at psclip{\pstVerb{currentpoint initclip moveto}}
+%
+\def\AltClipMode{%
+ \def\end at psclip{\pstVerb{\pst at grestore}}%
+ \def\begin at psclip{\pstVerb{gsave}}}
+ \def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}}
+% DG modification begin - Apr. 3, 1997
+% From paulus at immd5.informatik.uni-erlangen.de (Dietrich Paulus)
+%\def\clipbox@[#1]{\pst at makebox\clipbox@@{#1}}
+\def\clipbox@[#1]{\pst at makebox{\clipbox@@{#1}}}
+% DG modification end
+\def\clipbox@@#1{%
+ \pssetlength\pst at dimg{#1}%
+ \leavevmode\hbox{%
+ \begin at psclip%
+ \pst at Verb{
+ CM \tx at STV CP T newpath
+ /a \pst at number\pst at dimg def
+ /w \pst at number{\wd\pst at hbox}a add def
+ /d \pst at number{\dp\pst at hbox}a add neg def
+ /h \pst at number{\ht\pst at hbox}a add def
+ a neg d moveto
+ a neg h L
+ w h L
+ w d L
+ closepath
+ \pst at clipcommand
+ newpath
+ 0 0 moveto
+ setmatrix}%
+ \unhbox\pst at hbox%
+ \end at psclip}}
+%
+\def\psshadowbox{\def\pst at par{}\pst at object{psshadowbox}}
+\def\psshadowbox at i{\pst at makebox\psshadowbox at ii}
+\def\psshadowbox at ii{%
+\begingroup
+\pst at useboxpar
+\psshadowtrue
+\psboxseptrue
+\def\psk at shadowangle{-45 }%
+\setbox\pst at hbox=\hbox{\psframebox at ii}%
+\pst at dimh=\psk at shadowsize\p@
+\pst at dimh=.7071\pst at dimh
+\pst at dimg=\dp\pst at hbox
+\advance\pst at dimg\pst at dimh
+\dp\pst at hbox=\pst at dimg
+\pst at dimg=\wd\pst at hbox
+\advance\pst at dimg\pst at dimh
+\wd\pst at hbox=\pst at dimg
+\leavevmode
+\box\pst at hbox
+\endgroup}
+%
+\def\pscirclebox{\pst at object{pscirclebox}}
+\def\pscirclebox at i{\pst at makebox\pscirclebox at ii}
+\def\pscirclebox at ii{%
+ \begingroup
+ \pst at useboxpar
+ \setbox\pst at hbox=\hbox{%
+ \pst at nodehook
+ \pscirclebox at iii
+ \box\pst at hbox}%
+ \ifpsboxsep\pscirclebox at sep\fi
+ \leavevmode
+ \box\pst at hbox
+ \endgroup
+ \ignorespaces
+}
+\def\pscirclebox at iii{%
+\if at star
+ \pslinewidth\z@
+ \pstverb{\pst at dict \tx at STP \pst at usecolor\psfillcolor
+ newpath \pscirclebox at iv \tx at SD end}%
+\else
+ \begin at ClosedObj
+ \def\pst at linetype{4}\showpointsfalse
+ \addto at pscode{ \pscirclebox at iv\space CLW 2 div add 0 360 arc closepath}%
+ \end at ClosedObj
+\fi
+}
+%
+\def\pscirclebox at iv{
+ \pst at number{\wd\pst at hbox} 2 div
+ \pst at number{\ht\pst at hbox} \pst at number{\dp\pst at hbox} add 2 div
+ 2 copy \pst at number{\dp\pst at hbox} sub 4 2 roll
+ \tx at Pyth \pst at number\psframesep add }
+%
+\def\pscirclebox at sep{%
+ \pst at dimn=\ht\pst at hbox% % the height of the box
+ \advance\pst at dimn by \dp\pst at hbox% % the depth of the box added to \pst at dimn
+ \divide\pst at dimn by 2% % \pst at dimn/2
+ \pst at dimm=0.5\wd\pst at hbox% % the half of the width
+ \pst at Pyth\pst at dimm\pst at dimn\pst at dimo% % the diameter
+ \advance\pst at dimo by \pslinewidth%
+ \advance\pst at dimo by \psframesep%
+ \advance\pst at dimn by -\pst at dimo%
+ \setbox\pst at hbox=\hbox to 2\pst at dimo{\hss\vbox{\kern-\pst at dimn\box\pst at hbox}\hss}%
+ \advance\pst at dimn by -\dp\pst at hbox%
+ \dp\pst at hbox=-\pst at dimn}
+%
+\let\pst at nodehook\relax
+%
+\def\psCirclebox{\def\pst at par{}\pst at object{psCirclebox}}
+\def\psCirclebox at i{\pst at makebox\psCirclebox at ii}
+\def\psCirclebox at ii{%
+ \begingroup
+ \pst at useboxpar
+ \pst at dima=\ht\pst at hbox
+ \advance\pst at dima by -\dp\pst at hbox
+ \divide\pst at dima\tw@
+ \pssetlength\pst at dimb\psk at radius
+ \setbox\pst at hbox=\hbox{%
+ \pst at nodehook
+ \pscircle(.5\wd\pst at hbox,\pst at dima){\pst at dimb}%
+ \box\pst at hbox}%
+ \ifpsboxsep \psCirclebox at sep \fi
+ \leavevmode
+ \box\pst at hbox
+ \endgroup
+}
+%
+\def\psCirclebox at sep{%
+ \pst at dimc=\pst at dimb
+ \advance\pst at dimb-\pst at dima
+ \advance\pst at dima\pst at dimc
+ \setbox\pst at hbox=\hbox to\tw@\pst at dimc{%
+ \hss\vrule width \z@ depth \pst at dimb height \pst at dima
+ \box\pst at hbox\hss}}
+%
+\def\psovalbox{\def\pst at par{}\pst at object{psovalbox}}
+\def\psovalbox at i{\pst at makebox{\psovalbox at ii}}
+\def\psovalbox at ii{%
+ \begingroup
+ \pst at useboxpar
+ \psovalbox at iii
+ \ifpsboxsep\psovalbox at sep\fi
+ \leavevmode
+ \box\pst at hbox
+ \endgroup}
+%
+\def\psovalbox at iii{%
+ \psovalbox at iv
+ \setbox\pst at hbox=\hbox{%
+ \begin at ClosedObj
+ \addto at pscode{%
+ 0 360
+ \pst at number\pst at dimc CLW 2 div sub
+ \pst at number\pst at dimd CLW 2 div sub
+ \pst at number\pst at dima
+ \pst at number\pst at dimb
+ \tx at Ellipse
+ closepath }%
+ \def\pst at linetype{2}%
+ \end at ClosedObj
+ \unhbox\pst at hbox}}
+%
+\def\psovalbox at iv{%
+ \pst at dimc=\pslinewidth\advance\pst at dimc\psframesep
+ \pst at dimd=\ht\pst at hbox\advance\pst at dimd\dp\pst at hbox
+ \pst at dima=.5\wd\pst at hbox
+ \pst at dimb=.5\pst at dimd\advance\pst at dimb-\dp\pst at hbox
+ \pst at dimd=.707\pst at dimd
+ \advance\pst at dimd\pst at dimc
+ \advance\pst at dimc.707\wd\pst at hbox}
+%
+\def\psovalbox at sep{%
+ \setbox\pst at hbox\hbox to 2\pst at dimc{\hss\unhbox\pst at hbox\hss}%
+ \pst at dimg=\pst at dimd
+ \advance\pst at dimg-\pst at dimb
+ \dp\pst at hbox=\pst at dimg
+ \advance\pst at dimd\pst at dimb
+ \ht\pst at hbox=\pst at dimd}
+%
+\def\psdiabox{\def\pst at par{}\pst at object{psdiabox}}
+\def\psdiabox at i{\pst at makebox{\psdiabox at ii}}
+\def\psdiabox at ii{%
+\begingroup
+\pst at useboxpar
+\psdiabox at iii
+\ifpsboxsep\psdiabox at sep\fi
+\leavevmode
+\box\pst at hbox
+\endgroup}
+\def\psdiabox at iv{%
+\pst at dimg=.707\pslinewidth
+\advance\pst at dimg.707\psframesep
+\pst at dima=\wd\pst at hbox
+\divide\pst at dima 2
+\pst at dimc=\pst at dima
+\advance\pst at dimc\pst at dimg
+\pst at dimd=\ht\pst at hbox
+\advance\pst at dimd\dp\pst at hbox
+\divide\pst at dimd 2
+\pst at dimb=\pst at dimd
+\advance\pst at dimb-\dp\pst at hbox
+\advance\pst at dimd\pst at dimg}
+\def\psdiabox at iii{%
+\psdiabox at iv
+\setbox\pst at hbox=\hbox{%
+\begin at ClosedObj
+\addto at pscode{%
+\psline at iii
+pop
+.5
+\pst at number\pst at dimc 2 mul \pst at number\pst at dimd 2 mul
+0
+\pst at number\pst at dima \pst at number\pst at dimb
+\tx at Diamond}%
+\def\pst at linetype{4}%
+\end at ClosedObj
+\box\pst at hbox}}
+\def\psdiabox at sep{%
+\setbox\pst at hbox\hbox to 4\pst at dimc{\hss\unhbox\pst at hbox\hss}%
+\multiply\pst at dimd 2
+\advance\pst at dimd\pst at dimb
+\ht\pst at hbox\pst at dimd
+\advance\pst at dimd-2\pst at dimb
+\dp\pst at hbox\pst at dimd}
+%
+\define at key[psset]{pstricks}{trimode}[U]{\pst at expandafter\psset@@trimode{#1}\@empty\@empty\@nil}
+\def\psset@@trimode#1#2#3\@nil{%
+ \let\pst at tempg#1\relax
+ \ifx\pst at tempg*
+ \let\psk@@trimode\@empty
+ \let\pst at tempg#2\relax
+ \else
+ \let\psk@@trimode\relax
+ \fi
+ \edef\psk at trimode{%
+ \ifx R\pst at tempg 1 % Right
+ \else
+ \ifx D\pst at tempg 2 % Down
+ \else
+ \ifx L\pst at tempg 3 % Left
+ \else
+ \ifx l\pst at tempg 4 % |_
+ \else
+ \ifx r\pst at tempg 5 % _|
+ \else 0 \fi % Up
+ \fi
+ \fi
+ \fi
+ \fi}%
+}
+\psset[pstricks]{trimode=U}
+%
+\def\pstribox{\pst at object{pstribox}}
+\def\pstribox at i{\pst at makebox{\pstribox at ii}}
+\def\pstribox at ii{%
+ \begingroup
+ \pst at useboxpar
+ \pstribox at iii
+ \ifpsboxsep\pstribox at sep\fi
+ \leavevmode
+ \box\pst at hbox
+ \endgroup}
+%
+\def\pstribox at iii{%
+ \pstribox at iv
+ \setbox\pst at hbox=\hbox{%
+ \begin at ClosedObj
+ \addto at pscode{
+ \psline at iii
+ pop
+ 0.5
+ \pst at number\pst at dimc % Width
+ \pst at number\pst at dimd % Height
+ \ifcase\psk at trimode
+ \or %% 0
+ exch \or %% 1
+ \or %% 2
+ exch \or %% 3
+ \or %% 4
+ \or %% 5
+ \fi
+ \psk at trimode -90 mul
+ \pst at number\pst at dima % x coor for text
+ \pst at number\pst at dimb % y coor for text
+ \tx at Triangle}%
+ \def\pst at linetype{2}%
+ \end at ClosedObj
+ \box\pst at hbox}%
+}
+%
+\def\pstribox at iv{%
+ \pst at dimh=\pslinewidth
+ \advance\pst at dimh\psframesep
+ \pst at dimg=\ht\pst at hbox
+ \advance\pst at dimg-\dp\pst at hbox % totalheight
+ \divide\pst at dimg 2 % 0.5 totalheight
+ \edef\pst at tempa{\number\pst at dimg sp}% % For use by nodes.
+ \ifodd\psk at trimode %
+ \pst at dimb\pst at dimg
+ \else
+ \pst at dima=\wd\pst at hbox
+ \divide\pst at dima 2
+ \fi
+ \ifcase\psk at trimode
+ \pst at dimb=-\dp\pst at hbox
+ \advance\pst at dimb-\pst at dimh
+ \or\pst at dima=-\pst at dimh
+ \or\pst at dimb=\ht\pst at hbox
+ \advance\pst at dimb\pst at dimh
+ \or\pst at dima=\wd\pst at hbox
+ \advance\pst at dima\pst at dimh
+ \fi
+ \pst at dimd=\dp\pst at hbox
+ \advance\pst at dimd\ht\pst at hbox
+ \ifx\psk@@trimode\relax% no star for trimode=
+ \pst at dimc=\wd\pst at hbox
+ \advance\pst at dimc\ifodd\psk at trimode 1.447\else 1.789\fi\pst at dimh
+ \multiply\pst at dimc 2
+ \advance\pst at dimd\ifodd\psk at trimode 1.789\else 1.447\fi\pst at dimh
+ \multiply\pst at dimd 2
+ \else% trimode=R*,L*,U*,D*
+ \ifodd\psk at trimode
+ \advance\pst at dimd 1.1547\wd\pst at hbox
+ \advance\pst at dimd 3.4641\pst at dimh
+ \pst at dimc=.866\pst at dimd
+ \else
+ \advance\pst at dimd .866\wd\pst at hbox %.866=(sqrt(3)/2)
+ \advance\pst at dimd 3\pst at dimh
+ \pst at dimc=1.1547\pst at dimd % 1.1547=(2/sqrt(3))
+ \fi
+ \fi}
+%
+\def\pstribox at sep{%
+\ifodd\psk at trimode
+\advance\pst at dimb.5\pst at dimd
+\ht\pst at hbox=\pst at dimb
+\advance\pst at dimd-\pst at dimb
+\dp\pst at hbox=\pst at dimd
+\else
+\setbox\pst at hbox\hbox to \pst at dimc{\hss\unhbox\pst at hbox\hss}%
+\global\pst at dimg=.5\pst at dimc
+\fi
+\ifcase\psk at trimode
+\dp\pst at hbox-\pst at dimb
+\advance\pst at dimd\pst at dimb
+\ht\pst at hbox\pst at dimd
+\or
+\pst at dimg=.5\wd\pst at hbox
+\global\advance\pst at dimg-\pst at dima
+\setbox\pst at hbox\hbox to \pst at dimc{\kern-\pst at dima\box\pst at hbox\hss}%
+\or
+\ht\pst at hbox\pst at dimb
+\advance\pst at dimd-\pst at dimb
+\dp\pst at hbox\pst at dimd
+\or
+\pst at dimg=\pst at dimc
+\advance\pst at dimg-\pst at dima
+\global\advance\pst at dimg.5\wd\pst at hbox
+\setbox\pst at hbox\hbox to \pst at dimc{%
+\hss\box\pst at hbox\kern\psframesep\kern\pslinewidth}%
+\fi}
+%
+\define at key[psset]{pstricks}{arcsepA}[0]{\pst at getlength{#1}\psk at arcsepA}
+\define at key[psset]{pstricks}{arcsepB}[0]{\pst at getlength{#1}\psk at arcsepB}
+\define at key[psset]{pstricks}{arcsep}[0]{%
+ \pst at getlength{#1}\psk at arcsepA\let\psk at arcsepB\psk at arcsepA}
+\psset[pstricks]{arcsep=0}
+\def\tx at ArcArrow{ArcArrow }
+%
+\def\psarc{\pst at object{psarc}}
+\def\psarc at i{\@ifnextchar({\psarc at iii}{\psarc at ii}}
+\def\psarc at ii#1{\addto at par{arrows=#1}\@ifnextchar(\psarc at iii{\psarc at iii(0,0)}}
+\def\psarc at iii(#1)#2#3#4{%
+ \pst at getangle{#3}\pst at tempa
+ \pst at getangle{#4}\pst at tempb
+ \ifx\pst at tempa\pst at tempb
+ \else
+ \begin at OpenObj
+ \pst@@getcoor{#1}%
+ \pssetlength\pst at dima{#2}%
+ \addto at pscode{\psarc at iv \psarc at v
+ \ifPst at variableLW \pst at flattenpath \fi
+ }%
+ \gdef\psarc at type{0}%
+ \showpointsfalse
+ \end at OpenObj
+ \fi
+}
+%
+\def\psarcOA{\pst at object{psarcOA}}% \psarcOA[..](O)(A){angle1}{angle2}
+\def\psarcOA at i{\@ifnextchar({\psarcOA at iii}{\psarcOA at ii}}
+\def\psarcOA at ii#1{\addto at par{arrows=#1}\@ifnextchar(\psarcOA at iii{\psarcOA at iii(0,0)}}
+\def\psarcOA at iii(#1)(#2)#3#4{%
+ \pst at getangle{#3}\pst at tempa
+ \pst at getangle{#4}\pst at tempb
+ \ifx\pst at tempa\pst at tempb
+ \else
+ \begin at OpenObj
+ \pst at getcoor{#1}\pst at tempA
+ \pst at getcoor{#2}\pst at tempB
+ \addto at pscode{
+ \pst at tempA 2 copy /y ED /x ED \pst at tempB Pyth2 /r ED
+ x y translate
+ /c 57.2957 r \tx at Div def
+ /angleA
+ \pst at tempa
+ \psk at arcsepA c mul 2 div
+ \ifcase\psarc at type add \or sub \fi def
+ /angleB
+ \pst at tempb
+ \psk at arcsepB c mul 2 div
+ \ifcase\psarc at type sub \or add \fi def
+ \ifshowpoints\psarc at showpoints\fi
+ \ifx\psk at arrowA\@empty
+ \ifnum\psk at liftpen=2
+ r angleA \tx at PtoC moveto
+ \fi
+ \fi
+ /angleAtoB angleB angleA gt { true }{ false } ifelse def
+ 0 0 r
+ angleA
+ \ifx\psk at arrowA\@empty\else
+ { ArrowA CP }
+ r 0 gt \pslbrace
+ { \ifcase\psarc at type add \or sub \fi } \psrbrace\pslbrace
+ { \ifcase\psarc at type sub \or add \fi } \psrbrace ifelse
+% { \ifcase\psarc at type add \or sub \fi }
+ \tx at ArcArrow
+% dup AngleA gt AngleAtoB exor { neg } fi
+ \fi
+ angleB
+ \ifx\psk at arrowB\@empty\else
+ { ArrowB }
+ r 0 gt \pslbrace
+ { \ifcase\psarc at type sub \or add \fi } \psrbrace\pslbrace
+ { \ifcase\psarc at type add \or sub \fi } \psrbrace ifelse
+% { \ifcase\psarc at type sub \or add \fi }
+ \tx at ArcArrow
+ dup angleA gt angleAtoB xor { pop angleA } if
+ \fi
+ \ifcase\psarc at type arc \or arcn \fi
+ \ifPst at variableLW \pst at flattenpath \fi
+ x neg y neg translate
+ }%
+ \gdef\psarc at type{0}%
+ \showpointsfalse
+ \end at OpenObj
+ \fi
+}
+\def\psarc at iv{%
+ \pst at coor /y ED /x ED
+ /r \ifPst at SpecialLength \pst at SpecialLength \else \pst at number\pst at dima \fi def
+ /c 57.2957 r \tx at Div def
+ /angleA
+ \pst at tempa
+ \psk at arcsepA c mul 2 div
+ \ifcase\psarc at type add \or sub \fi
+ def
+ /angleB
+ \pst at tempb
+ \psk at arcsepB c mul 2 div
+ \ifcase\psarc at type sub \or add \fi
+ def
+ \ifshowpoints\psarc at showpoints\fi
+ \ifx\psk at arrowA\@empty
+ \ifnum\psk at liftpen=2
+ r angleA \tx at PtoC
+ y add exch x add exch moveto
+ \fi
+ \fi}
+% hv ---- 1.10 2005-05-05 ----------------------> hv begin
+\def\psarc at v{%
+ /angleAtoB angleB angleA gt { true }{ false } ifelse def
+ x y r
+ angleA
+ \ifx\psk at arrowA\@empty\else
+ { ArrowA CP }
+ r 0 gt \pslbrace
+ { \ifcase\psarc at type add \or sub \fi } \psrbrace\pslbrace
+ { \ifcase\psarc at type sub \or add \fi } \psrbrace ifelse
+% { \ifcase\psarc at type add \or sub \fi }
+ \tx at ArcArrow
+% dup AngleA gt AngleAtoB exor { neg } fi
+ \fi
+ angleB
+ \ifx\psk at arrowB\@empty\else
+ { ArrowB }
+ r 0 gt \pslbrace
+ { \ifcase\psarc at type sub \or add \fi } \psrbrace\pslbrace
+ { \ifcase\psarc at type add \or sub \fi } \psrbrace ifelse
+% { \ifcase\psarc at type sub \or add \fi }
+ \tx at ArcArrow
+ dup angleA gt angleAtoB xor { pop angleA } if
+ \fi
+ \ifcase\psarc at type arc \or arcn \fi
+}
+% hv ----- 1.10 2005-05-05 ------------------------> end
+%
+\def\psarc at type{0}
+\def\psarc at showpoints{%
+ gsave
+ newpath
+ x y moveto
+ x y r \pst at tempa \pst at tempb
+ \ifcase\psarc at type arc \or arcn \fi
+ closepath
+ CLW 2 div SLW
+ [ \psk at dash\space ] 0 setdash stroke
+ grestore }
+\def\psarcn{\def\pst at par{}\pst at object{psarcn}}
+\def\psarcn at i{\def\psarc at type{1}\psarc at i}
+%
+\def\psarcAB{\pst at object{psarcAB}}% hv 2008-11-26
+\def\psarcAB at i{%
+ \addbefore at par{psscale=1}% be sure, that it is defined
+ \pst at getarrows{%
+ \begin at OpenObj%
+ \pst at getcoors{}%
+ \psarcAB at ii
+ }%
+}
+\def\psarcAB at ii{%
+ \addto at pscode{
+ /y ED /x ED /yA ED /xA ED /yB ED /xB ED
+ /r xB yB x y Pyth2 \psk at psscale\space mul def
+ /c 57.2957 r \tx at Div def
+ /angleA
+ yA y sub xA x sub atan
+ \psk at arcsepA c mul 2 div
+ \ifcase\psarc at type add \else sub \fi
+ def
+ /angleB
+ yB y sub xB x sub atan
+ \psk at arcsepB c mul 2 div
+ \ifcase\psarc at type sub \else add \fi
+ def
+ \ifx\psk at arrowA\@empty
+ \ifnum\psk at liftpen=2
+ r angleA \tx at PtoC
+ y add exch x add exch moveto
+ \fi
+ \fi
+ \psarc at v}%
+ \gdef\psarc at type{0}%
+ \showpointsfalse%
+ \end at OpenObj%
+}
+\def\psarcnAB{\def\pst at par{}\pst at object{psarcnAB}}
+\def\psarcnAB at i{\def\psarc at type{1}\psarcAB at i}
+%
+%------------------ tvz/DG/hv (2004-05-10) begin -------------------%%
+% from Denis Giroux: http://www.tug.org/pipermail/pstricks/2001/000507.html
+%
+% I - Definition of \psellipticwedge, a generalization of \pswedge for wedges
+% of ellipses (from the code of \pswedge and \psellipse)
+%
+\def\psellipticwedge{\pst at object{psellipticwedge}}
+\def\psellipticwedge at i(#1){%
+ \@ifnextchar({\psellipticwedge at ii(#1)}{\psellipticwedge at ii(0,0)(#1)}}
+\def\psellipticwedge at ii(#1)(#2)#3#4{%
+ \begin at ClosedObj
+ \pst at getangle{#3}\pst at tempa
+ \pst at getangle{#4}\pst at tempb
+ \pst at getcoor{#1}\pst at tempc
+ \pst@@getcoor{#2}%
+ \def\pst at linetype{1}%
+ \addto at pscode{%
+ \pst at coor /ry ED /rx ED
+ \ifx\psk at rot\@empty \else \psk at rot\space rotate \fi
+ \pst at tempa
+ \ifPst at correctAngle
+ cvi 90 mod 0 eq { \pst at tempa }
+ { rx abs ry abs sub cvi 0 eq { \pst at tempa }{ rx ry
+ \tx at UserCoor exch \pst at tempa tan mul exch atan
+ \pst at tempa 180 div 0.5 add floor
+ 180 mul sub } ifelse } ifelse
+ \fi
+ \pst at tempb
+ \ifPst at correctAngle
+ cvi 90 mod 0 eq { \pst at tempb }
+ { rx abs ry abs sub cvi 0 eq { \pst at tempb }{ rx ry
+ \tx at UserCoor exch \pst at tempb tan mul exch atan
+ \pst at tempb 180 div 0.5 add floor
+ 180 mul sub } ifelse } ifelse
+ \fi
+ rx ry
+ \pst at tempc moveto
+ \ifdim\psk at dimen\p@=\z@\else
+ \psk at dimen CLW mul dup 3 1 roll
+ sub 3 1 roll sub exch
+ \fi
+ \pst at tempc
+ \tx at Ellipse
+ closepath
+ }%
+ \showpointsfalse
+ \end at ClosedObj%
+}
+%
+% Code mainly from "pstricks.tex'' 0.94 beta (TvZ)
+%
+\def\psellipticarcn{\pst at object{psellipticarcn}}
+\def\psellipticarcn at i{\let\if at psarcn\iftrue\psellipticarc at ii}
+%
+\def\psellipticarc{\pst at object{psellipticarc}}
+\def\psellipticarc at i{\let\if at psarcn\iffalse\psellipticarc at ii}
+
+\define at boolkey[psset]{pstricks}[Pst@]{correctAngle}[true]{}
+\psset{correctAngle}
+
+\let\if at psarcn\iffalse
+
+\def\psellipticarc at ii{\pst at getarrows\psellipticarc at iii}
+\def\psellipticarc at iii(#1){%
+ \@ifnextchar({\psellipticarc at iv(#1)}{\psellipticarc at iv(0,0)(#1)}}
+\def\psellipticarc at iv(#1)(#2)#3#4{%
+% \addbefore at par{correctAngle=false}
+ \pst at getangle{#3}\pst at tempc % start angle
+ \pst at getangle{#4}\pst at tempd % end angle
+ \ifx\pst at tempc\pst at tempd
+ \else % same angles? then do nothing
+ \begin at OpenObj
+ \pst at getcoor{#1}\pst at tempa % origin
+ \pst at getcoor{#2}\pst at tempb % a b
+ \addto at pscode{
+ \psellipticarc at definearg \psellipticarc at draw
+ \ifPst at variableLW \pst at flattenpath \fi
+ \ifshowpoints{}
+ gsave
+ xOrig yOrig T % set origin to ellipse origin
+ \ifx\psk at rot\@empty \else \psk at rot\space rotate \fi
+ rx ry scale % now we draw a circle :-)
+ 1 \pst at tempc % start angle
+ \ifPst at correctAngle
+ cvi 90 mod 0 eq { \pst at tempc }
+ { rx abs ry abs sub cvi 0 eq { \pst at tempc }{ rx ry
+ \tx at UserCoor exch \pst at tempc tan mul exch atan
+ \pst at tempc 180 div 0.5 add floor
+ 180 mul sub } ifelse } ifelse
+ \fi
+ PtoC moveto
+ 0 0 lineto
+ 1 \pst at tempd % end angle
+ \ifPst at correctAngle
+ cvi 90 mod 0 eq { \pst at tempd }
+ { rx ry \tx at UserCoor exch \pst at tempd tan mul exch atan
+ \pst at tempd 180 div .5 add floor 180 mul sub } ifelse
+ \fi
+ PtoC lineto 0 0 lineto
+ closepath
+ % \ifcase\psarc at type arc \or arcn \fi
+ CLW 3 div \pst at number\psunit div SLW
+ [ 1 1 \tx at UserCoor 2 mul ] 0 setdash
+ stroke
+ grestore
+ \fi
+ }%
+ \showpointsfalse
+ \end at OpenObj
+ \fi
+}
+\def\psellipticarc at definearg{%
+% \ifx\psk at rot\@empty \else \psk at rot\space rotate \fi
+ \pst at tempa /yOrig ED /xOrig ED % Origin
+ \pst at tempb % radii. Now adjust:
+ \ifdim\psk at dimen\p@=\z@\else
+ \psk at dimen CLW mul dup 3 1 roll
+ sub 3 1 roll sub exch
+ \fi
+ /ry ED /rx ED % a b
+ /angleA
+ /d { \if at psarcn sub \else add \fi } def
+% \pst at tempc
+% the angle in the parameter equation is not proportional to the real angle!
+% phi=atan(b*tan(angle)/a)+floor(angle/180+0.5)*180
+ \pst at tempc
+ \ifPst at correctAngle
+ cvi 90 mod 0 eq { \pst at tempc }
+ { rx ry \tx at UserCoor exch \pst at tempc tan mul exch atan
+ \pst at tempc 180 div .5 add floor 180 mul sub } ifelse
+ \fi
+ \psk at arcsepA 2 div
+ ArcAdjust
+ def
+ /angleB
+ /d { \if at psarcn add \else sub \fi } def
+% \pst at tempd
+ \pst at tempd
+ \ifPst at correctAngle
+ cvi 90 mod 0 eq { \pst at tempd }
+ { rx ry \tx at UserCoor exch \pst at tempd tan mul exch atan
+ \pst at tempd 180 div .5 add floor 180 mul sub } ifelse
+ \fi
+ \psk at arcsepB 2 div ArcAdjust def
+% \ifshowpoints\psellipticarc at showpoints\fi
+ \ifx\psk at arrowA\@empty
+ \ifnum\psk at liftpen=2
+ angleA cos rx mul xOrig add
+ angleA sin ry mul yOrig add
+ moveto
+ \fi%
+ \fi%
+}
+\def\psellipticarc at draw{%
+ 0 0 1
+ angleA
+ \ifx\psk at arrowA\@empty\else
+ { ArrowA CP }
+ { \if at psarcn sub \else add \fi }
+ EllipticArcArrow
+ \fi
+ angleB
+ \ifx\psk at arrowB\@empty\else
+ { ArrowB }
+ { \if at psarcn add \else sub \fi }
+ EllipticArcArrow
+ \fi
+ /mtrx CM def
+ xOrig yOrig T
+ \ifx\psk at rot\@empty \else \psk at rot\space rotate \fi
+ rx ry scale
+ \pst at ifcustom\else
+ 0 0 moveto
+ exch dup dup % end start start start
+ cos exch sin moveto % end start
+ exch % start end
+ \fi
+%% \if at star 0 0 moveto \fi % for filling
+ \if at psarcn arcn \else arc \fi
+%% \if at star 0 0 moveto \fi
+ mtrx setmatrix%
+}
+\def\psellipticarc at showpoints{%
+ gsave
+ /mtrx CM def
+ xOrig yOrig T
+ rx ry scale
+ 0 0 moveto
+ 0 0 1
+ \pst at tempc % start angle
+ \ifPst at correctAngle
+ cvi 90 mod 0 eq { \pst at tempc }
+ { rx abs ry abs sub cvi 0 eq { \pst at tempc }{ rx ry
+ \tx at UserCoor exch \pst at tempc tan mul exch atan
+ \pst at tempc 180 div 0.5 add floor
+ 180 mul sub } ifelse } ifelse
+ \fi
+ \pst at tempd % end angle
+ \ifPst at correctAngle
+ cvi 90 mod 0 eq { \pst at tempd }
+ { rx abs ry abs sub cvi 0 eq { \pst at tempd } { rx ry
+ \tx at UserCoor exch \pst at tempd tan mul exch atan
+ \pst at tempd 180 div 0.5 add floor
+ 180 mul sub } ifelse } ifelse
+ \fi
+ \ifcase\psarc at type arc \or arcn \fi
+ closepath
+ mtrx setmatrix
+ CLW 2 div SLW
+ [ \psk at dash\space ] 0 setdash
+ stroke
+ grestore %
+}
+\def\pscircle{\def\pst at par{}\pst at object{pscircle}}
+\def\pscircle at i{\@ifnextchar({\pscircle at do}{\pscircle at do(0,0)}}
+\def\pscircle at do(#1)#2{%
+ \if at star{\use at par\qdisk(#1){#2}}% qdisk does not allow
+ \else% to use opacity option
+ \addbefore at par{dimen=middle}%
+ \begin at ClosedObj
+ \pst@@getcoor{#1}%
+ \pssetlength\pst at dimc{#2}%
+ \def\pst at linetype{4}%
+ \addto at pscode{
+ \pst at coor 2 copy moveto
+ \ifPst at SpecialLength \pst at SpecialLength \else \pst at number\pst at dimc \fi
+ \psk at dimen CLW mul round % prevent rounding errors
+ sub
+ dup 0 rmoveto
+ 0 360 arc
+ \ifPst at variableLW \pst at flattenpath \fi
+ closepath
+ }%
+ \showpointsfalse
+ \end at ClosedObj
+ \fi
+ \ignorespaces}
+%
+\def\pscircleOA{\def\pst at par{}\pst at object{pscircleOA}}% hv 2008-04-14
+\def\pscircleOA at i(#1)(#2){%
+ \addbefore at par{dimen=middle}%
+ \begin at ClosedObj
+ \pst at getcoor{#1}\pst at tempA
+ \pst@@getcoor{#2}%
+ \def\pst at linetype{4}%
+ \addto at pscode{
+ \pst at tempA % x0 y0
+ 2 copy % xO yO xO yO
+ \pst at coor % xO yO xO yO xA yA
+ Pyth2 % xO yO radius
+ \psk at dimen CLW mul sub
+ \if at star \tx at SD \else
+ 0 360 arc
+ closepath
+ \fi }%
+ \showpointsfalse
+ \end at ClosedObj
+ \ignorespaces}
+%
+\def\qdisk(#1)#2{%
+ \def\pst at par{}%
+ \begin at SpecialObj
+ \pst@@getcoor{#1}%
+ \pssetlength\pst at dimg{#2}%
+ \addto at pscode{
+ \pst at coor
+ \ifPst at SpecialLength \pst at SpecialLength \else \pst at number\pst at dimg \fi
+% \pst at number\pst at dimg
+ \tx at SD }%
+ \end at SpecialObj}
+%
+\define at key[psset]{pstricks}{radius}[0.25cm]{\pst@@getlength{#1}\psk at radius}
+\psset[pstricks]{radius=.25cm}
+%
+\def\psCircle{\pst at object{psCircle}}% same as \pscircle, but uses \psk at radius
+\def\psCircle at i{\@ifnextchar({\psCircle at ii}{\psCircle at ii(0,0)}}
+\def\psCircle at ii(#1){\pscircle at do(#1){\psk at radius}}
+%
+\def\psRing{\def\pst at par{}\pst at object{psRing}}%% hv 20130405
+\def\psRing at i{\@ifnextchar({\psRing at ii}{\psRing at ii(0,0)}}
+\def\psRing at ii(#1){%
+ \pst@@getcoor{#1}%
+ \@ifnextchar[{\psRing at iii}{\psRing at iii[0,360]}}
+\def\psRing at iii[#1,#2]#3#4{% origin, inner radius, outer radius
+ \begin at ClosedObj
+ \pssetlength\pst at dimc{#3}%
+ \edef\pst at tempA{\ifPst at SpecialLength \pst at SpecialLength \else \pst at number\pst at dimc \fi}%
+ \pssetlength\pst at dimd{#4}%
+ \edef\pst at tempB{\ifPst at SpecialLength \pst at SpecialLength \else \pst at number\pst at dimd \fi}%
+ \pst at getangle{#1}\pst at tempa
+ \pst at getangle{#2}\pst at tempb
+ \def\pst at linetype{4}%
+ \addto at pscode{
+ \pst at coor translate
+% \pst at number\pst at dimc \psk at dimen CLW mul sub /InnerRadius ED
+% \pst at number\pst at dimd \psk at dimen CLW mul sub /OuterRadius ED
+ \pst at tempA\space \psk at dimen CLW mul sub /InnerRadius ED
+ \pst at tempB\space \psk at dimen CLW mul sub /OuterRadius ED
+ InnerRadius 0 moveto newpath
+ 0 0 InnerRadius \pst at tempa\space \pst at tempb\space arc
+ OuterRadius \pst at tempb\space PtoC
+ \pst at tempb\space \pst at tempa\space sub abs 360 eq { moveto }{ lineto } ifelse % whole circle or not??
+ 0 0 OuterRadius \pst at tempb\space \pst at tempa\space arcn
+ closepath
+ }%
+ \showpointsfalse
+ \end at ClosedObj
+ \ignorespaces}
+%
+\def\pswedge{\def\pst at par{}\pst at object{pswedge}}
+\def\pswedge at i{\@ifnextchar({\pswedge at ii}{\pswedge at ii(0,0)}}
+\def\pswedge at ii(#1)#2#3#4{%
+ \begin at ClosedObj
+ \pssetlength\pst at dimc{#2}%
+ \pst at getangle{#3}\pst at tempa
+ \pst at getangle{#4}\pst at tempb
+ \pst@@getcoor{#1}%
+ \def\pst at linetype{1}%
+ \addto at pscode{
+ \ifx\psk at rot\@empty 0 \else \psk at rot \fi rotate
+ \pst at coor
+ 2 copy
+ moveto
+ \ifPst at SpecialLength \pst at SpecialLength \else \pst at number\pst at dimc \fi
+ \psk at dimen CLW mul sub % Adjusted radius
+ \pst at tempa \pst at tempb
+ arc
+ closepath}%
+ \showpointsfalse
+ \end at ClosedObj
+}
+\def\tx at ellipse#1{ \ifx\psk at rot\@empty 0 \else \psk at rot \fi #1 Ellipse }
+\def\tx at Ellipse{ \ifx\psk at rot\@empty 0 \else \psk at rot \fi Ellipse }
+%
+\def\psellipse{\def\pst at par{}\pst at object{psellipse}}
+\def\psellipse at i(#1){\@ifnextchar({\psellipse at ii(#1)}{\psellipse at ii(0,0)(#1)}}
+\def\psellipse at ii(#1)(#2){%
+ \begin at ClosedObj
+ \pst at getcoor{#1}\pst at tempa
+ \pst@@getcoor{#2}%
+ \addto at pscode{
+ 0 360
+ \pst at coor
+ \ifdim\psk at dimen\p@=\z@\else
+ \psk at dimen CLW mul
+ dup 4 -1 roll sub neg 3 1 roll sub
+ \fi
+ \pst at tempa
+ \tx at ellipse{true}
+ \ifPst at variableLW \pst at flattenpath \fi
+ closepath
+ }%
+ \def\pst at linetype{2}%
+ \end at ClosedObj%
+}
+\def\psellipseAB{\def\pst at par{}\pst at object{psellipseAB}}
+\def\psellipseAB at i(#1)(#2)#3{%
+ \begin at ClosedObj
+ \pst at getcoor{#1}\pst at tempa
+ \pst at getcoor{#2}\pst at tempb
+ \addto at pscode{
+ 0 360
+ #3 \pst at number\psxunit mul
+ \pst at tempa /yA ED /xA ED
+ \pst at tempb /yB ED /xB ED
+ xA xB sub dup mul
+ yA yB sub dup mul add sqrt 2 div
+ \ifdim\psk at dimen\p@=\z@\else
+ \psk at dimen CLW mul
+ dup 4 -1 roll sub neg 3 1 roll sub
+ \fi
+ xA xB add 2 div yA yB add 2 div
+ translate 0 0
+ xB xA sub yA yB sub atan
+ Ellipse % on stack is rotate coordinates
+ \ifPst at variableLW \pst at flattenpath \fi
+ closepath
+ }%
+ \def\pst at linetype{2}%
+ \end at ClosedObj
+}
+\def\multips{\@ifnextchar({\def\pst at par{}\multips at ii}{\multips at i}}
+\def\multips at i#1{\def\pst at par{rot=#1}\multips at ii}
+\def\multips at ii(#1){\@ifnextchar({\multips at iii(#1)}{\multips at iii(\z@,\z@)(#1)}}
+\long\def\multips at iii(#1)(#2)#3#4{%
+ \begingroup
+%----------------- hv 1.10 ------------------
+ \pst at killglue
+%----------------- hv 1.10 ------------------
+ \use at par
+ \pst at getcoor{#1}\pst at tempa
+ \pst@@getcoor{#2}%
+ \pst at cnta=#3\relax
+ \init at pscode
+ \addto at pscode{%
+ \pst at tempa T \the\pst at cnta\space \pslbrace
+ gsave \ifx\psk at rot\@empty\else\psk at rot rotate \fi}%
+ \hbox to\z@{%
+ \def\init at pscode{%
+ \addto at pscode{%
+ gsave
+ \pst at number\pslinewidth SLW
+ \pst at usecolor\pslinecolor}}%
+ \def\use at pscode{\addto at pscode{grestore}}%
+ \def\psclip##1{\pst at misplaced\psclip}%
+ \def\nc at object##1##2##3##4{\pst at misplaced{node connection}}%
+ #4%
+ }%
+ \addto at pscode{grestore \pst at coor T \psrbrace repeat}%
+ \leavevmode
+ \use at pscode
+ \endgroup
+ \ignorespaces}
+\def\psscalebox#1{\pst at makebox{\ps at scalebox{#1}}}
+\def\ps at scalebox#1{%
+ \begingroup%
+ \pst at getscale{#1}\pst at tempa%
+ \let\pst at tempc\pst at tempg%
+ \let\pst at tempd\pst at temph%
+ \ps@@scalebox%
+ \endgroup}
+\def\ps@@scalebox{%
+ \leavevmode%
+ \hbox{%
+ \ifdim\pst at tempd\p@<\z@%
+ \pst at dimg=\pst at tempd\ht\pst at hbox%
+ \pst at dimh=\pst at tempd\dp\pst at hbox%
+ \dp\pst at hbox=-\pst at dimg%
+ \ht\pst at hbox=-\pst at dimh%
+ \else%
+ \ht\pst at hbox=\pst at tempd\ht\pst at hbox%
+ \dp\pst at hbox=\pst at tempd\dp\pst at hbox%
+ \fi%
+ \pst at dima=\pst at tempc\wd\pst at hbox%
+ \ifdim\pst at dima<\z@\kern-\pst at dima\fi%
+ \pst at Verb{CP CP translate \pst at tempa \tx at NET}%
+ \hbox to \z@{\box\pst at hbox\hss}%
+ \pst at Verb{
+ CP CP translate
+ 1 \pst at tempc div 1 \pst at tempd div scale
+ \tx at NET}%
+ \ifdim\pst at dima>\z@\kern\pst at dima\fi%
+ }%
+}
+\pslongbox{Scalebox}{\psscalebox}
+%
+\def\psscaleboxto(#1,#2){\pst at makebox{\ps at scaleboxto(#1,#2)}}
+\def\ps at scaleboxto(#1,#2){%
+ \begingroup
+ \pssetlength\pst at dima{#1}%
+ \pssetlength\pst at dimb{#2}%
+ \ifdim\pst at dima=\z@\else
+ \pst at divide{\pst at dima}{\wd\pst at hbox}\pst at tempc
+ \edef\pst at tempc{\pst at tempc\space}%
+ \fi
+ \ifdim\pst at dimb=\z@
+ \ifdim\pst at dima=\z@
+ \@pstrickserr{%
+ \string\psscaleboxto\space dimensions cannot both be zero}\@ehpa
+ \def\pst at tempa{}%
+ \def\pst at tempc{1 }%
+ \def\pst at tempd{1 }%
+ \else
+ \let\pst at tempd\pst at tempc
+ \fi
+ \else
+ \pst at dimc=\ht\pst at hbox
+ \advance\pst at dimc\dp\pst at hbox
+ \pst at divide{\pst at dimb}{\pst at dimc}\pst at tempd
+ \edef\pst at tempd{\pst at tempd\space}%
+ \ifdim\pst at dima=\z@ \let\pst at tempc\pst at tempd \fi
+ \fi
+ \edef\pst at tempa{\pst at tempc \pst at tempd scale }%
+ \ps@@scalebox
+ \endgroup}
+\pslongbox{Scaleboxto}{\psscaleboxto}
+%
+\def\tx at Rot{Rot }
+\def\psrotateleft{\pst at makebox{\ps at rotateleft\pst at hbox}}
+\def\ps at rotateleft#1{%
+\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
+\pst at Verb{90 \tx at Rot}
+\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}%
+\pst at Verb{-90 \tx at Rot}}}}
+\def\psrotateright{\pst at makebox{\ps at rotateright\pst at hbox}}
+\def\ps at rotateright#1{%
+% ----------- hv begin 2004-05-07 ----------- patch 15
+% \hbox{%
+ \leavevmode\hbox{%
+% ----------- hv end 2004-05-07 ----------- patch 15
+ \hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
+ \pst at Verb{-90 \tx at Rot}
+ \vbox to \z@{\hbox to \z@{\hss\box#1}\vss}%
+ \pst at Verb{90 \tx at Rot}}}}
+\def\psrotatedown{\pst at makebox{\ps at rotatedown\pst at hbox}}
+\def\ps at rotatedown#1{%
+\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1%
+\pst at Verb{180 \tx at Rot}%
+\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}%
+\pst at Verb{-180 \tx at Rot}}}}
+\pslongbox{Rotateleft}{\psrotateleft}
+\pslongbox{Rotateright}{\psrotateright}
+\pslongbox{Rotatedown}{\psrotatedown}
+% ----------- hv begin 2004-09-23 ----------- 1.11
+% compatibility stuff
+\let\rotateleft\psrotateleft
+\let\rotateright\psrotateright
+\let\rotatedown\psrotatedown
+% ----------- hv end 2005-09-23 ----------- 1.11
+\def\pst at starbox{%
+\setbox\pst at hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst at hbox}}}
+\def\pst@@makesmall#1{%
+\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}}
+\def\pst@@@makesmall#1{%
+\pst at dimh=\psk at xref\wd#1%
+\ifx\psk at yref\relax
+\pst at dimg=\dp#1%
+\else
+\pst at dimg=\psk at yref\ht#1%
+\advance\pst at dimg\psk at yref\dp#1%
+\fi
+\setbox#1=\hbox to\z@{%
+\kern-\pst at dimh\vbox to\z@{\vss\box#1\kern-\pst at dimg}\hss}}
+%
+\define at key[psset]{pstricks}{ref}[c]{\pst at expandafter\psset@@ref{#1}\@empty,,\@nil}
+\def\psset@@ref#1#2,#3,#4\@nil{%
+ \def\psk at xref{.5}%
+ \def\psk at yref{.5}%
+ \let\pst at makesmall\pst@@@makesmall
+ \ifx\@empty#3\@empty
+ \@nameuse{getref@#1}%
+ \@nameuse{getref@#2}%
+ \else
+ \pst at checknum{#1#2}\psk at xref
+ \pst at checknum{#3}\psk at yref
+ \fi}
+%
+\def\getref at c{\let\pst at makesmall\pst@@makesmall}
+\def\getref at t{\def\psk at yref{1}}
+\def\getref at b{\def\psk at yref{0}}
+\def\getref at B{\let\psk at yref\relax}
+\def\getref at l{\def\psk at xref{0}}
+\def\getref at r{\def\psk at xref{1}}
+\psset[pstricks]{ref=c}
+%
+\def\pst at rotlist{ mark RAngle /ps at a ED cleartomark ps at a neg }
+\def\pst at rottable{%
+ at 0=%
+ at U=%
+ at L=90 %
+ at D=180 %
+ at R=-90 %
+ at N=\pst at rotlist
+ at W=\pst at rotlist 90 add %
+ at S=\pst at rotlist 180 add %
+ at E=\pst at rotlist 90 sub }
+%
+\define at key[psset]{pstricks}{rot}[0]{%
+ \pst at expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil}
+\def\psset@@rot#1\@nil{%
+ \def\next##1@#1=##2@##3\@nil{%
+ \ifx##2\relax\pst at getangle{#1}\psk at rot \else\def\psk at rot{##2}\fi%
+ \pst at Verb{ gsave STV CP T /ps at rot \ifx\psk at rot\@empty 0 \else \psk at rot \fi def grestore }% (MJS)
+ }%
+ \expandafter\next\pst at rottable @#1=\relax @\@nil}
+%
+\def\psset@@@rot#1#2\@nil{%
+ \psset@@rot#2\@nil%
+ \edef\psk at rot{\pst at rotlist \ifx\psk at rot\@empty\else\space ps at rot add \fi}%
+ \pst at Verb{ gsave STV CP T /ps at rot \ifx\psk at rot\@empty 0 \else \psk at rot \fi def grestore }}% (MJS)
+%
+%\def\psset@@rot#1\@nil{%
+%\def\ps at next##1@#1=##2@##3\@nil{%
+%\ifx\relax##2\pst at getangle{#1}\psk at rot\else\def\psk at rot{##2}\fi}%
+%\expandafter\ps at next\pst at rottable @#1=\relax @\@nil}
+%
+%\def\psset@@@rot#1#2\@nil{%
+%\psset@@rot#2\@nil
+%\edef\psk at rot{\pst at rotlist \ifx\psk at rot\@empty\else\psk at rot add \fi}}
+\psset[pstricks]{rot=0}
+%
+\def\tx at RotBegin{RotBegin }
+\def\tx at RotEnd{RotEnd }
+\def\pst at rotate#1#2{%
+ \ifx#1\@empty\else
+ \setbox#2=\hbox{\pst at Verb{#1 \tx at RotBegin}\box#2\pst at Verb{\tx at RotEnd}}%
+ \fi%
+}
+\def\psput at cartesian#1{%
+\hbox to \z@{\kern\pst at dimg{\vbox to \z@{\vss\box#1\vskip\pst at dimh}\hss}}%
+}
+\def\psput at special#1{%
+ \hbox{%
+ \pst at Verb{{ \pst at coor \pstnodescale } \tx at PutCoor \tx at PutBegin }% 20150911 hv
+ \box#1%
+ \pst at Verb{ \tx at PutEnd }%
+ }%
+}
+\def\tx at PutCoor{PutCoor }
+\def\tx at PutBegin{PutBegin }
+\def\tx at PutEnd{PutEnd }
+\def\rput{\def\pst at par{}\pst at ifstar{\@ifnextchar[{\rput at i}{\rput at ii}}}
+\def\rput at i[#1]{%
+ \test at for@options#1=\@nil
+ \ifnum\the\pst at cntm=\z@
+ \addto at par{ref={#1}}%
+ \else
+ \expandafter\addto at par\expandafter{#1}%
+ \fi
+ \rput at ii
+}
+\def\test at for@options#1=#2\@nil{%
+ \if$#2$% #2 is empty -> old syntax
+ \pst at cntm=\z@
+ \else % something like foo=bar
+ \pst at cntm=\@ne
+ \fi
+}
+
+\def\rput at ii{\@ifnextchar({\rput at iv}{\rput at iii}}
+\def\rput at iii#1{\addto at par{rot={#1}}\@ifnextchar({\rput at iv}{\rput at iv(\z@,\z@)}}
+\def\rput at iv(#1){\pst at killglue\pst at makebox{\rput at v{#1}}}
+\def\rput at v#1{%
+ \begingroup
+ \use at par
+ \if at star\pst at starbox\fi
+ \pst at makesmall\pst at hbox
+ \ifx\psk at rot\@empty\else\pst at rotate{ps at rot }\pst at hbox\fi% (MJS)
+% \pst at rotate\psk at rot\pst at hbox%
+ \psput@{#1}\pst at hbox%
+ \endgroup
+ \ignorespaces}
+%
+\def\multirput{%
+ \def\pst at par{}%
+ \pst at ifstar{\@ifnextchar[{\multirput at i}{\multirput at ii}}}
+\def\multirput at i[#1]{\addto at par{ref={#1}}\multirput at ii}
+\def\multirput at ii{\@ifnextchar({\multirput at iv}{\multirput at iii}}
+\def\multirput at iii#1{\addto at par{rot={#1}}\multirput at iv}
+\def\multirput at iv(#1){%
+ \@ifnextchar({\multirput at v(#1)}{\multirput at v(\z@,\z@)(#1)}}
+\def\multirput at v(#1,#2)(#3,#4)#5{%
+ \pst at makebox{\multirput at vi(#1,#2)(#3,#4){#5}}}
+\def\multirput at vi(#1,#2)(#3,#4)#5{%
+ \pst at killglue%
+ \global\psLoopIndex=\@ne\relax
+ \begingroup
+ \use at par
+ \if at star\pst at starbox\fi
+ \pst at makesmall\pst at hbox
+ \ifx\psk at rot\@empty\else\pst at rotate{ps at rot }\pst at hbox\fi% (MJS)
+% \pst at rotate\psk at rot\pst at hbox
+ \pssetxlength\pst at dima{#1}%
+ \pssetylength\pst at dimb{#2}%
+ \pssetxlength\pst at dimc{#3}%
+ \pssetylength\pst at dimd{#4}%
+ \pst at cntg=#5\relax
+ \leavevmode
+ \loop
+ \vbox to \z@{%
+ \vss
+ \hbox to \z@{\kern\pst at dima\copy\pst at hbox\hss}%
+ \vskip\pst at dimb%
+ }%
+ \ifnum\pst at cntg>\psLoopIndex
+ \advance\pst at dima\pst at dimc
+ \advance\pst at dimb\pst at dimd
+ \global\advance\psLoopIndex by \@ne
+ \repeat
+ \endgroup
+ \ignorespaces%
+}
+%
+\newif\if at fixedradius
+\def\cput{\def\pst at par{}\pst at object{cput}}
+\def\cput at i{\@fixedradiusfalse\cput at ii}
+\def\cput at ii{\pst at killglue\@ifnextchar({\cput at iv}{\cput at iii}}
+\def\cput at iii#1{%
+ \addto at par{rot={#1}}%
+ \@ifnextchar({\cput at iv}{\cput at iv(\z@,\z@)}%
+}
+\def\cput at iv(#1){\pst at makebox{\cput at v{#1}}}
+\def\cput at v#1{%
+ \begingroup
+ \use at par
+ \setbox\pst at hbox=\hbox{%
+ \psboxsepfalse
+ \if at fixedradius\psCirclebox at ii\else\pscirclebox at ii\fi%
+ }%
+ \pst@@makesmall\pst at hbox
+ \ifx\psk at rot\@empty\else\pst at rotate{ps at rot }\pst at hbox\fi% (MJS)
+% \pst at rotate\psk at rot\pst at hbox
+ \psput@{#1}\pst at hbox
+ \endgroup
+ \ignorespaces%
+}
+%
+\def\Cput{\def\pst at par{}\pst at object{Cput}}
+\def\Cput at i{\@fixedradiustrue\cput at ii}
+\newdimen\pslabelsep
+\define at key[psset]{pstricks}{labelsep}[5pt]{%
+ \pssetlength\pslabelsep{#1}%
+ \ifx\PSTplotLoaded\endinput% Set labels for pst-plot, if laoded
+ \let\psxlabelsep\pslabelsep%
+ \let\psylabelsep\pslabelsep%
+ \fi}
+\psset[pstricks]{labelsep=5pt}
+%
+\define at key[psset]{pstricks}{refangle}[0]{\pst at expandafter\psset@@refangle{#1}\@nil}
+\def\psset@@refangle#1\@nil{%
+ \def\next##1@#1=##2"##3@##4\@nil{%
+ \ifx\relax##2%
+ \pst at getangle{#1}\psk at refangle
+ \def\psk at uputref{}%
+ \else
+ \def\psk at refangle{##2 }%
+ \def\psk at uputref{##3}%
+ \fi}%
+ \expandafter\next\pst at refangletable @#1=\relax"@\@nil%
+ \pst at Verb{ gsave STV CP T /ps at refangle \psk at refangle\space def grestore }%ADDED (MJS)
+}
+%
+\def\pst at refangletable{%
+ at r=0"20%
+ at u=90"02%
+ at l=180"10%
+ at d=-90"01%
+ at ur=45"22%
+ at ul=135"12%
+ at dr=-135"21%
+ at dl=-45"11}
+\psset[pstricks]{refangle=0}
+
+% DG/SR modification begin - Mar. 24, 1999 - Patch 10
+%\def\uput{\def\pst at par{}\@ifnextchar[{\uput at ii}{\uput at i}}
+\def\uput{\def\pst at par{}\pst at ifstar{\@ifnextchar[{\uput at ii}{\uput at i}}}
+% DG/SR modification end
+\def\uput at i#1{\addto at par{labelsep=#1}\uput at ii}
+%
+\def\uput at ii[#1]{%
+ \addto at par{refangle={#1}}%
+ \@ifnextchar({\uput at iv}{\uput at iii}}
+%
+\def\uput at iii#1{%
+ \addto at par{rot={#1}}%
+ \@ifnextchar({\uput at iv}{\uput at iv(\z@,\z@)}}
+%
+\def\uput at iv(#1){\pst at killglue\pst at makebox{\uput at v{#1}}}
+%
+\def\uput at v#1{%
+ \begingroup
+ \use at par
+ \if at star\pst at starbox\fi
+ \pstCheckCoorType{#1}% needed for \uput at vii
+ \uput at vi
+ \psput@{#1}\pst at hbox
+ \endgroup
+ \ignorespaces}
+%
+\def\uput at vi{%
+ \ifx\psk at uputref\@empty\uput at vii\tx at UUput{}%
+ \else
+ \ifx\psk at rot\@empty\expandafter\uput at viii\psk at uputref
+ \else\uput at vii\tx at UUput{}\fi
+ \fi}
+%
+\def\uput at vii#1#2{%
+ \edef\pst at coor{%
+ \ifPst at SpecialLength\pst at SpecialLength\else\pst at number\pslabelsep\fi
+% \pst at number\pslabelsep % \ifdim\pslabelsep<\z@ neg \fi
+ #2%
+ \pst at number{\wd\pst at hbox}%
+ \pst at number{\ht\pst at hbox}%
+ \pst at number{\dp\pst at hbox}%
+ \ifnum\pst at C@@rType=7
+ ps at refangle % CHANGED (MJS) FROM \psk at refangle\space
+ \ifx\psk at rot\@empty\else ps at rot\space sub \fi
+ \else
+ \psk at refangle\space
+ \ifx\psk at rot\@empty\else \psk at rot\space sub \fi
+ \fi
+ \tx at Uput #1}%
+ %\show\pst at coor
+ \setbox\pst at hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst at hbox\vss}\hss}%
+ \setbox\pst at hbox=\psput at special\pst at hbox
+ \ifnum\pst at C@@rType=7
+ \ifx\psk at rot\@empty\else\pst at rotate{ps at rot }\pst at hbox\fi% CHANGED FROM \psk at rot (MJS)
+ \else
+ \ifx\psk at rot\@empty\else\pst at rotate{\psk at rot}\pst at hbox\fi%
+ \fi}
+%
+%
+\def\uput at viii#1#2{%
+ \ifnum#1>\z@\relax\ifnum#2>\z@\relax\pslabelsep=.707\pslabelsep\fi\fi
+ \setbox\pst at hbox=\vbox to\z@{%
+ \ifnum#2=1\relax\vskip\pslabelsep\else\vss\fi
+ \hbox to\z@{%
+ \ifnum#1=2\relax\hskip\pslabelsep \else\hss\fi
+ \box\pst at hbox%
+ \ifnum#1=1\relax\hskip\pslabelsep\else\hss\fi}%
+ \ifnum#2=2\relax\vskip\pslabelsep\else\vss\fi}}
+%
+\def\tx at Uput{Uput }
+\def\tx at UUput{UUput }
+%
+\def\Rput{\def\pst at par{}\pst at ifstar{\@ifnextchar[{\Rput at ii}{\Rput at i}}}
+\def\Rput at i#1{\addto at par{labelsep=#1}\Rput at ii}
+\def\Rput at ii[#1]{\addto at par{ref={#1}}\@ifnextchar({\Rput at iv}{\Rput at iii}}
+\def\Rput at iii#1{\addto at par{rot={#1}}\@ifnextchar({\Rput at iv}{\Rput at iv(\z@,\z@)}}
+\def\Rput at iv(#1){\pst at killglue\pst at makebox{\Rput at v{#1}}}
+\def\Rput at v#1{%
+ \begingroup
+ \use at par
+ \if at star\pst at starbox\fi
+ \Rput at vi
+ \pst at makesmall\pst at hbox
+ \ifx\psk at rot\@empty\else\pst at rotate{ps at rot }\pst at hbox\fi% (MJS)
+% \pst at rotate\psk at rot\pst at hbox
+ \psput@{#1}\pst at hbox
+ \endgroup
+ \ignorespaces}
+%
+\def\Rput at vi{%
+ \pst at dimg=\dp\pst at hbox
+ \advance\pst at dimg\pslabelsep
+ \dp\pst at hbox=\pst at dimg
+ \pst at dimg=\ht\pst at hbox
+ \advance\pst at dimg\pslabelsep
+ \ht\pst at hbox=\pst at dimg
+ \setbox\pst at hbox\hbox{\kern\pslabelsep\box\pst at hbox\kern\pslabelsep}}%
+%
+\def\oldpsput{\def\pst at par{}\pst at ifstar{\@ifnextchar[{\oldpsput at i}{\oldpsput at ii}}}
+\def\oldpsput at i[#1]{\addto at par{ref={#1}}\oldpsput at ii}
+\def\oldpsput at ii{\@ifnextchar<{\oldpsput at iii}{\oldpsput at iv}}
+\def\oldpsput at iii<#1>{\rput at iii{#1}}
+\def\OldPsput{\let\psput\oldpsput}
+\def\NewPsput{\let\psput\rput}
+%
+% ----------- hv 20120219 -------------------
+\newpsstyle{gridstyle}{subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=8pt}
+\newpsstyle{gridstyleA}{subgriddiv=5,gridcolor=red!30,subgridcolor=green!20!black!10,gridlabels=0pt}
+\newif\ifshowgrid
+\newdimen\sh at wgridXunit
+\newdimen\sh at wgridYunit
+
+\define at key[psset]{pstricks}{showgrid}[b]{\expandafter\pst@@showgrid#1!!\@nil}
+\def\pst@@showgrid#1#2#3\@nil{% hv 20130403
+ \def\showgridp at s{0}%
+ \ifx#1b\showgridtrue\else% bottom
+ \ifx#1f\showgridfalse\else
+ \ifx#1t
+ \ifx#2r \showgridtrue\else% true->bottom
+ \showgridtrue\def\showgridp at s{1}\fi% top
+ \fi\fi\fi
+ \ifnum\showgridp at s>0\relax
+ \sh at wgridXunit=\psxunit
+ \sh at wgridYunit=\psyunit
+ \fi
+
+}
+\psset[pstricks]{showgrid=f}
+\define at boolkey[psset]{pstricks}[Pst@]{pgffunctions}[true]{}
+\psset[pstricks]{pgffunctions=false}
+%
+\newdimen\pst at shift
+\newif\ifPst at shift@star
+\define at key[psset]{pstricks}{shift}[0]{%
+ \ifx#1*
+ \global\Pst at shift@startrue
+ \pst at shift=\p@
+ \else
+ \global\Pst at shift@starfalse
+ \pssetlength\pst at dimg{#1}
+ \global\pst at shift\pst at dimg% only the outer pspicture env can have a shift
+ \fi}
+\psset[pstricks]{shift=0}
+%
+%------------------------------- pspicture ------------------------------
+%
+\def\pspicture{\begingroup\pst at ifstar\pst at picture}
+\def\pst at picture{\@ifnextchar[{\pst@@picture}{\pst@@picture[]}}
+\def\pst@@picture[#1]{\@ifnextchar({\pst@@picture at i[#1]}{\pst@@picture at i[#1](10,10)}}%
+\def\pst@@picture at i[#1]#2(#3,#4){\@ifnextchar(% ignore anything between [] and ()
+ {\pst@@@picture[#1](#3,#4)}%
+ {\pst@@@picture[#1](0,0)(#3,#4)}}
+%
+\def\pst@@@picture[#1](#2,#3)(#4,#5){%
+ \pssetxlength\pst at dima{#2}%
+ \pssetylength\pst at dimb{#3}%
+ \pssetxlength\pst at dimc{#4}%
+ \pssetylength\pst at dimd{#5}%
+ \ifdim\pst at dima>\pst at dimc%
+ \pst at dimg=\pst at dima%
+ \pst at dima=\pst at dimc%
+ \pst at dimc=\pst at dimg%
+ \fi%
+ \ifdim\pst at dimb>\pst at dimd%
+ \pst at dimg=\pst at dimb%
+ \pst at dimb=\pst at dimd%
+ \pst at dimd=\pst at dimg%
+ \fi%
+ \setbox\pst at hbox=\hbox\bgroup
+ \begingroup\KillGlue
+ \@ifundefined{@latexerr}{}{\let\unitlength\psunit}%
+ \edef\pic at coor{(#2,#3)(#2,#3)(#4,#5)}%
+% ----------- 1.10/12 beg hv -------------------
+ \psset{showgrid=false}% % for nested pspicture environemnets
+ \def\pst at tempA{#1}%
+ \ifx\pst at tempA\@empty\else\psset{#1}\fi% sets the shift and grid option
+ \ifx\pst at bgcolor\@empty\else\psframe*[linecolor=\pst at bgcolor](#2,#3)(#4,#5)\fi
+ \ifshowgrid\ifnum\showgridp at s=0\psgrid[style=gridstyle]\fi\fi
+% ----------- 1.10/12 end hv -------------------
+ \ignorespaces% % 2008-12-07
+ \ifPst at pgffunctions\pstVerb{ pgffunctions }\fi% hv 2013-04-17
+}
+\def\pic at coor{(0,0)(0,0)(10,10)}
+\def\endpspicture{%
+ \ifshowgrid\ifnum\showgridp at s>0
+ \psgrid[xunit=\sh at wgridXunit,yunit=\sh at wgridYunit,style=gridstyle]\fi\fi
+ \pst at killglue
+ \endgroup
+ \egroup
+ \ht\pst at hbox=\pst at dimd
+ \dp\pst at hbox=-\pst at dimb
+ \setbox\pst at hbox=\hbox{%
+ \kern-\pst at dima
+ \ifPst at shift@star%\typeout{==pstricks== old behaviour of the shift option}% shift=*
+ \advance\pst at dimd-\pst at dimb
+ \pst at dimd=0.5\pst at dimd
+ \else\pst at dimd-\pst at shift\fi
+ \advance\pst at dimd\pst at dimb
+ \lower\pst at dimd\box\pst at hbox
+ \kern\pst at dimc}%
+ \if at star\setbox\pst at hbox=\hbox{\clipbox@@\z@}\fi
+ \leavevmode
+ \ifPst at draft
+ \expandafter\ifx\csname @latexerr\endcsname\relax
+ \box\pst at hbox
+ \else% do we have LaTeX?
+ \fboxsep=0pt
+ \fbox{\rule[-\pst at shift]{0pt}{\ht\pst at hbox}\rule{\wd\pst at hbox}{0pt}}%
+ \fi
+ \else
+ \box\pst at hbox
+ \fi
+ \endgroup
+ \psset[pstricks]{shift=0}% reset value
+}
+%
+\@namedef{pspicture*}{\pspicture*}
+\@namedef{endpspicture*}{\endpspicture}
+%
+\ifx\pstcustomize\relax \input pstricks.con \fi
+\catcode`\@=\PstAtCode\relax
+%
+\endinput
+%%
+%% END: pstricks.tex
Modified: trunk/Master/texmf-dist/tex/latex/pstricks/pstricks-pdf.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pstricks/pstricks-pdf.sty 2021-04-04 02:21:09 UTC (rev 58730)
+++ trunk/Master/texmf-dist/tex/latex/pstricks/pstricks-pdf.sty 2021-04-04 02:22:41 UTC (rev 58731)
@@ -1,4 +1,4 @@
-% $Id: pstricks-pdf.sty 23 2020-09-18 06:29:04Z herbert $
+% $Id: pstricks-pdf.sty 25 2020-09-18 06:59:21Z herbert $
%%
%% This is file `pstricks-pdf.sty'.
%%
More information about the tex-live-commits
mailing list.