diff options
Diffstat (limited to 'graphics/pstricks/base/generic/pstricks.tex')
-rw-r--r-- | graphics/pstricks/base/generic/pstricks.tex | 4595 |
1 files changed, 4595 insertions, 0 deletions
diff --git a/graphics/pstricks/base/generic/pstricks.tex b/graphics/pstricks/base/generic/pstricks.tex new file mode 100644 index 0000000000..70283822fc --- /dev/null +++ b/graphics/pstricks/base/generic/pstricks.tex @@ -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@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@check@engine + \ifx\c@lor@to@ps\@undefined + \def\c@lor@to@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@ch@ckch@ice#1#2#3{% bugfix for xkeyval + \def\XKV@tempa{#1}% + \ifx\XKV@tempa\@nnil\let\XKV@tempa\@empty\else + \def\XKV@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@pl + \XKV@addtomacro@n\XKV@tempa\@firstoftwo + \else + \XKV@addtomacro@n\XKV@tempa\@firstofone + \fi + \else + \ifXKV@pl + \XKV@addtomacro@n\XKV@tempa\@secondoftwo + \else + \XKV@toks{#2}% + \XKV@err{value `\the\XKV@toks' is not allowed}% + \XKV@addtomacro@n\XKV@tempa\@gobble + \fi + \fi + \XKV@tempa +} +% +\def\ProvidesPackageRCS#1{\typeout{Loading #1}}% +%\@ifnextchar[\ProvidesPackageRCS@i{\ProvidesPackageRCS@i[] }}%$ +%\def\ProvidesPackageRCS@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{2.97} +\def\filedate{2019/05/11} +\pst@addfams{pstricks} +% +%\define@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@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@ii{#1}{#2}{#3}% + \else \expandafter\psforeach@i#2,..,,..,\@nil{#1}{#3}\fi} +\long\def\psforeach@i#1,#2,..,#3,..,#4\@nil#5#6{% + \ifx\relax#3\relax\psforeach@ii{#5}{#1,#2}{#6}% + \else\psforeach@iii{#5}{#1}{#2}{#3}{#6}\fi} +\long\def\psforeach@ii#1#2#3{% + \begingroup + \edef\reserved@a{#2}% + \@for#1:=\reserved@a\do{#3}% + \endgroup} +\long\def\psforeach@iii#1#2#3#4#5{% + \pstFPsub\pst@tempA{#3}{#2}% + \pst@dimm=\pst@tempA pt% + \pstFPstripZeros{\pst@tempA}\pst@tempB% + \def\pst@tempA{#2}% + \def\pst@tempa{#2}% + \pst@dimn=#4pt% + \loop + \pst@dimm=\pst@tempA pt + \ifdim\pst@dimm<\pst@dimn + \pstFPadd\pst@tempA{\pst@tempA}{\pst@tempB}% + \pstFPstripZeros{\pst@tempA}\pst@tempA% + \edef\pst@tempa{\pst@tempa,\pst@tempA}% + \repeat% + \psforeach@ii{#1}{\pst@tempa}{#5}} +% +\long\def\psForeach#1#2#3{% without grouping the contents + \global\psLoopIndex=0\relax% + \if$\ifnum9<1#2$\else\fi\psforeach@ii{#1}{#2}{#3}% + \else \expandafter\psForeach@i#2,..,,..,\@nil{#1}{#3}\fi} +\long\def\psForeach@i#1,#2,..,#3,..,#4\@nil#5#6{% + \ifx\relax#3\relax\psForeach@ii{#5}{#1,#2}{#6}% + \else\psForeach@iii{#5}{#1}{#2}{#3}{#6}\fi% +} +\long\def\psForeach@ii#1#2#3{% + \edef\reserved@a{#2}% + \@for#1:=\reserved@a\do{#3}} +\long\def\psForeach@iii#1#2#3#4#5{% + \pstFPsub\pst@tempA{#3}{#2}% + \pst@dimm=\pst@tempA pt% + \pstFPstripZeros{\pst@tempA}\pst@tempB% + \def\pst@tempA{#2}% + \def\pst@tempa{#2}% + \pst@dimn=#4pt% + \loop% + \pst@dimm=\pst@tempA pt% + \ifdim\pst@dimm<\pst@dimn% + \pstFPadd\pst@tempA{\pst@tempA}{\pst@tempB}% + \pstFPstripZeros{\pst@tempA}\pst@tempA + \edef\pst@tempa{\pst@tempa,\pst@tempA}% + \repeat% + \psForeach@ii{#1}{\pst@tempa}{#5} +} + +\def\psrecur@i#1{\csname ps@rn#1\psrecur@i} +\long\def\ps@rnm#1{\endcsname{#1}#1\global\advance\psLoopIndex by \@ne} +\long\def\ps@rn#1{} +\def\psLoop#1{\global\psLoopIndex=0\relax% + \csname ps@rn\expandafter\psrecur@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@ifnextchar#1#2#3{% + \let\reserved@d= #1% + \def\reserved@a{#2}\def\reserved@b{#3}% + \futurelet\@let@token\ps@ifnch} +\def\ps@ifnch{% + \ifx\@let@token\reserved@d \let\reserved@b\reserved@a \fi + \reserved@b +} +\def\pshskip#1{\vrule \@width\z@\nobreak \hskip #1\hskip \z@skip} +% end bugfix +\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz,hv)} +\def\@pstrickserr#1#2{% + \begingroup + \newlinechar`\^^J + \edef\pst@tempc{#2}% + \expandafter\errhelp\expandafter{\pst@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@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb} +\newdimen\pst@dima +\newdimen\pst@dimb +\newdimen\pst@dimc +\newdimen\pst@dimd +\newdimen\pst@dimg +\newdimen\pst@dimh +\newdimen\pst@dimm +\newdimen\pst@dimn +\newdimen\pst@dimo +\newdimen\pst@dimp +\chardef\f@ur=4 +% +\newbox\pst@hbox +\newbox\pst@ibox +\newbox\pst@boxg +\newcount\pst@cnta +\newcount\pst@cntb +\newcount\pst@cntc +\newcount\pst@cntd +\newcount\pst@cntg +\newcount\pst@cnth +\newcount\pst@cntm +\newcount\pst@cntn +\newcount\pst@cnto +\newcount\pst@cntp +\newcount\@zero\@zero=0\relax +% +\newif\ifPst@SpecialLength +\Pst@SpecialLengthfalse +% +\newif\if@pst +\newtoks\pst@toks +\newif\if@star +\def\pst@ifstar#1{% + \@ifnextchar*{\@startrue\def\ps@next*{#1}\ps@next}{\@starfalse#1}} +% +\def\pst@expandafter#1#2{% + \def\ps@next{#1}% + \edef\@tempa{#2}% + \ifx\@tempa\@empty + \@pstrickserr{Unexpected empty argument!}\@ehpb + \def\@tempa{\@empty}% + \fi + \expandafter\ps@next\@tempa} +% +\def\pst@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@getdimdim#1 #2 #3\@nil{% + \def\pst@tempA{#2}% + \ifx\pst@tempA\@empty + \pssetlength\pst@dimn{#1}% + \pst@dimm=\z@% + \else% + \pssetlength\pst@dimm{#1}% + \pssetlength\pst@dimn{#2}% + \fi% +} +\def\pst@getxdimdim#1 #2 #3\@nil{% + \def\pst@tempA{#2}% + \ifx\pst@tempA\@empty + \pssetxlength\pst@dimn{#1}% + \pst@dimm=\z@ + \else% + \pssetxlength\pst@dimm{#1}% + \pssetxlength\pst@dimn{#2}% + \fi% +} +\def\pst@getydimdim#1 #2 #3\@nil{% + \def\pst@tempA{#2}% + \ifx\pst@tempA\@empty + \pssetylength\pst@dimn{#1}% + \pst@dimm=\z@% + \else + \pssetylength\pst@dimm{#1}% + \pssetylength\pst@dimn{#2}% + \fi} +% +% A modulo macro for integer values +% \pst@mod{34}{6}\value ==> \value is 4 +% +\def\pst@mod#1#2#3{% + \begingroup% + \pst@cntm=#1\pst@cntn=#2\relax% + \pst@cnto=\pst@cntm% + \divide\pst@cntm by \pst@cntn% + \multiply\pst@cntn by \pst@cntm% + \advance\pst@cnto by -\pst@cntn% + \edef\value{\endgroup\def\noexpand#3{\number\pst@cnto}}\value% +} +\def\pst@max#1#2#3{% + \begingroup% + \pst@cntm=#1\pst@cntn=#2\relax% + \ifnum\pst@cntm<\pst@cntn\pst@cntm=\pst@cntn\fi + \global#3=\the\pst@cntm% + \endgroup% +} +\def\pst@maxdim#1#2#3{% + \begingroup% + \pst@dimm=#1\pst@dimn=#2\relax% + \ifdim\pst@dimm<\pst@dimn\pst@dimm=\pst@dimn\fi + \global#3=\the\pst@dimm% + \endgroup% +} +\def\pst@mindim#1#2#3{% + \begingroup% + \pst@dimm=#1\pst@dimn=#2\relax% + \ifdim\pst@dimm>\pst@dimn\pst@dimm=\pst@dimn\fi + \global#3=\the\pst@dimm% + \endgroup% +} +\def\pst@abs#1#2{% + \begingroup% + \pst@cntm=#1\relax% + \ifnum\pst@cntm<\z@\pst@cntm=-\pst@cntm\fi% + \global#2=\the\pst@cntm + \endgroup% +} +\def\pst@absdim#1#2{% + \begingroup% + \pst@dimm=#1\relax% + \ifdim\pst@dimm<\z@\pst@dimm=-\pst@dimm\fi% + \global#2=\the\pst@dimm% + \endgroup% +} +% +\def\pst@pyth#1#2#3{% from pst-3d + \begingroup% + \pst@dima=#1\relax% + \ifnum\pst@dima<\z@\pst@dima=-\pst@dima\fi% dima=abs(x) + \pst@dimb=#2\relax% + \ifnum\pst@dimb<\z@\pst@dimb=-\pst@dimb\fi% dimb=abs(y) + \advance\pst@dimb\pst@dima % dimb=s=abs(x)+abs(y) + \ifnum\pst@dimb=\z@ + \global\pst@dimg=\z@ % dimg=z=sqrt(x^2+y^2) + \else + \multiply\pst@dima 8\relax % dima= 8abs(x) + \pst@@divide\pst@dima\pst@dimb % dimg =8t=8abs(x)/s + \advance\pst@dimg -4pt % dimg = 4tau = (8t-4) + \multiply\pst@dimg 2 + \pst@dimtonum\pst@dimg\pst@tempa + \pst@dima=\pst@tempa\pst@dimg % dima=(8tau)^2 + \advance\pst@dima 64pt % dima=u=[64+(8tau)^2]/2 + \divide\pst@dima 2\relax % =(8f)^2 + \pst@dimd=7pt % initial guess at sqrt(u) + \pst@@pyth\pst@@pyth\pst@@pyth % dimd=sqrt(u) + \pst@dimtonum\pst@dimd\pst@tempa + \pst@dimg=\pst@tempa\pst@dimb + \global\divide\pst@dimg 8 % dimg=z=(8f)*s/8 + \fi + \endgroup + #3=\pst@dimg} +% +\def\pst@@pyth{% dimd = g <-- (g + u/g)/2 + \pst@@divide\pst@dima\pst@dimd + \advance\pst@dimd\pst@dimg + \divide\pst@dimd 2\relax} +% +% ----- the old pst@pyth begin ----- did not use dimens +\def\pst@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@pyth end ----- +% +%------ new version \pst@divide ̣-------- by Michael Sharpe +\def\pst@divide#1#2#3{% + \pst@@divide{#1}{#2}% + \advance\pst@dimg \pst@cnta pt% + \pst@dimtonum\pst@dimg{#3}% +} +\def\pst@@divide#1#2{% + \pst@dimg=#1\relax% + \pst@dimh=#2\relax% + \pst@cnth=\pst@dimh% + \pst@cntg=\pst@dimg% + \pst@cnta=\pst@cntg% + \divide\pst@cnta\pst@cnth% + \advance\pst@dimg -\pst@cnta\pst@dimh% + \pst@cntm=67108863\relax %2^26 -1 + \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide% + \divide\pst@dimg\pst@cnth% +}% +\def\pst@@@divide{% + \ifnum% + \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cntm% + \multiply\pst@dimg\sixt@@n% + \else% + \divide\pst@cnth\sixt@@n% + \fi% +}% +% +%-------------- the old version ---------- +\iffalse +\def\pst@divide#1#2#3{% + \pst@@divide{#1}{#2}% + \pst@dimtonum\pst@dimg{#3}% +} +\def\pst@@divide#1#2{% + \pst@dimg=#1\relax + \pst@dimh=#2\relax + \pst@cntg=\pst@dimh + \pst@cnth=67108863 + \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide + \divide\pst@dimg\pst@cntg% +} +\def\pst@@@divide{% + \ifnum + \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth + \multiply\pst@dimg\sixt@@n + \else + \divide\pst@cntg\sixt@@n + \fi% +} +\fi +%-------------- end old vesrion --------------- +% +\def\pst@configerr#1{\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc} +% +\def\pstVerb#1{\pst@configerr\pstVerb} +\def\pstverb#1{\pst@configerr\pstverb} +\def\pstverbscale{\pst@configerr\pstverbscale} +\def\pstrotate{\pst@configerr\pstrotate} +\def\pstheader#1{\pst@configerr\pstheader} +\def\pstdriver{\pst@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@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{} +\@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{} +% +\pstheader{pstricks.pro} +%\pstheader{pstricks-fonts.pro} +\pstheader{pst-algparser.pro} +\pstheader{pst-tools.pro} +% +\def\pst@dict{tx@Dict begin } +\def\pst@theheaders{pstricks.pro, pst-algparser.pro} +\def\pst@Verb#1{\pstVerb{\pst@dict #1 end}} +\def\tx@Atan{Atan } +\def\tx@Div{Div } +\def\tx@NET{NET } +\def\tx@Pyth{Pyth } +\def\tx@PtoC{PtoC } +\def\tx@PathLength@{PathLength@ } +\def\tx@PathLength{PathLength } +\pst@dimg=\pstunit\relax +\ifdim\pst@dimg=1bp +\def\pst@stp{.996264 dup scale} +\else +\edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale} +\fi +\def\tx@STP{STP } +\def\tx@STV{STV } +% +%--------------------------------------- PS stuff --------------------------------- +% on stack x y +\pst@def{UserCoor}< \pst@number\psyunit div exch \pst@number\psxunit div exch > +\pst@def{ScreenCoor}< \pst@number\psyunit mul exch \pst@number\psxunit mul exch > +%--------------------------------------- PS stuff end ----------------------------- +% +\def\pst@number#1{\pst@@dimtonum#1\space} +% +%-----------------------% hv 20100413 +\def\pst@strip@dot#1{\expandafter\pst@strip@dot@i#1..\@nil} +\def\pst@strip@dot@i#1.#2.#3\@nil{% + \ifnum1#2>10\relax #1.#2\else#1\fi} +%-----------------------% hv 20100413 +\def\pst@checknum#1#2{% + \edef\ps@next{#1}% + \ifx\ps@next\@empty + \let\pst@num\z@ + \else + \expandafter\pst@@checknum\ps@next..\@nil + \fi + \ifcase\pst@num\relax + \@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa + \def#2{0 }% + \or% 1 + \edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.% + \expandafter\@gobble\the\pst@cnth\space}% + \or% 2 + \edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.% + \expandafter\@gobble\the\pst@cnth\space}% + \or% 3 + \edef#2{\pst@tempA\space}% + \fi} +\def\pst@@checknum{% + \@ifnextchar-% + {\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}% + {\@ifnextchar !% + {\def\pst@num{3}\pst@@@@@checknum} + {\let\pst@num\@ne\pst@@@checknum}}% +} +\def\pst@@@checknum#1.#2.#3\@nil{% +\afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil% +\afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil} +\def\pst@@@@checknum#1\relax\@nil{\ifx\@nil#1\@nil\else\let\pst@num\z@\fi} +% +\def\pst@@@@@checknum#1#2.#3\@nil{\def\pst@tempA{#2}}% PostScript Notation with !<code> +% +\def\pst@getnumii#1 #2 #3\@nil{% + \pst@checknum{#1}\pst@tempg% + \ifx\relax#2\relax\let\pst@temph\pst@tempg\else\pst@checknum{#2}\pst@temph\fi} +\def\pst@getnumiii#1 #2 #3 #4\@nil{% +\pst@checknum{#1}\pst@tempg% +\pst@checknum{#2}\pst@temph% +\pst@checknum{#3}\pst@tempi} +\def\pst@getnumiv#1 #2 #3 #4 #5\@nil{% +\pst@checknum{#1}\pst@tempg% +\pst@checknum{#2}\pst@temph% +\pst@checknum{#3}\pst@tempi% +\pst@checknum{#4}\pst@tempj} +% +\def\pst@getdimnum#1 #2 #3\@nil{% + \pssetlength\pst@dimg{#1}% + \pst@checknum{#2}\pst@tempg% +} +\def\pst@getscale#1#2{% read and check a scale input x [y] + \edef\pst@tempg{#1}% + \ifx\pst@tempg\@none + \def#2{}% + \else + \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil + \ifdim\pst@tempg\p@=\z@ + \@pstrickserr{Bad scaling argument `#1'}\@ehpa + \def#2{}% + \else + \ifdim\pst@temph\p@=\z@ + \@pstrickserr{Bad scaling argument `#1'}\@ehpa + \def#2{}% + \else + \edef#2{\pst@tempg\space \pst@temph\space scale }% + \fi + \fi + \fi% +} +\def\pst@getint#1#2{% read and check an integer + \pst@cntg=#1\relax + \edef#2{\the\pst@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@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@color#1{\def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor}% +\def\pst@endcolor{\pstVerb{\pst@currentcolor}} +\def\pst@currentcolor{0 setgray} +\def\altcolormode{% +\def\pst@color##1{% + \pstVerb{gsave ##1}\aftergroup\pst@endcolor}% +\def\pst@endcolor{\pstVerb{\pst@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@Dict begin /pssetRGBcolor load end def + /setcmykcolor tx@Dict begin /pssetCMYKcolor load end def }} + +\def\pst@grestore{ + currentpoint + matrix currentmatrix + currentfont + grestore + setfont + setmatrix + moveto +} +%\def\pst@usecolor#1{\csname color@#1\endcsname\space}% hv 1.14 2005--12-17 +\def\pst@usecolor#1{\csname\string\color@#1\endcsname\space} +% +\def\newgray#1#2{% + \pst@checknum{#2}\pst@tempg + \@newcolor{#1}{\pst@tempg setgray}}% +\def\newrgbcolor#1#2{% + \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil + \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}} +\def\newhsbcolor#1#2{% + \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil + \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}} +\def\newcmykcolor#1#2{% + \pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil + \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@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@Dict begin Rand setgray end}% + \@newcolor{randomrgb}{tx@Dict begin Rand Rand Rand setrgbcolor end}% + \@newcolor{randomcmyk}{tx@Dict begin Rand Rand Rand Rand setcmykcolor end}% + \@newcolor{randomhsb}{tx@Dict begin Rand Rand Rand sethsbcolor end}% + }{% + \definecolor[ps]{randomgray}{gray}{tx@Dict begin Rand end}% + \definecolor[ps]{randomrgb}{rgb}{tx@Dict begin Rand Rand Rand end}% + \definecolor[ps]{randomcmyk}{cmyk}{tx@Dict begin Rand Rand Rand Rand end}% + \definecolor[ps]{randomhsb}{hsb}{tx@Dict begin Rand Rand Rand end}% + } +% +\define@boolkey[psset]{pstricks}[Pst@]{draft}[true]{} +\define@key[psset]{pstricks}{bgcolor}{\def\pst@bgcolor{#1}}% background for pspicture +\psset[pstricks]{bgcolor={},draft=false}% \pst@bgcolor is \@empty + +\define@key[psset]{pstricks}{style}{% + \@ifundefined{pscs@#1}% + {\@pstrickserr{Custom style `#1' undefined}\@ehpa}% + {\@nameuse{pscs@#1}}% +} +\def\newpsstyle{\@ifnextchar[\newpsstyle@ii{\newpsstyle@ii[]}}%% hv 2016-12-23 +% +%\def\newpsstyle@i#1#2{\@namedef{pscs@#1}{% +% \def\pst@tempA{#2}% +% \ifx\pst@tempA\@empty\else\psset{#2}\fi}} +% +\def\newpsstyle@ii[#1]#2#3{% + \@namedef{pscs@#2}{\if$#1$\psset{#3}\else\psset[#1]{#3}\fi}}%% end +% +\def\addto@psstyle#1#2{% + \pst@toks=\expandafter{#1#2}% + \edef#1{\the\pst@toks}} +\def\addtopsstyle#1#2{% + \def\pst@tempA{#2}% + \ifx\pst@tempA\@empty\else + \@ifundefined{pscs@#1}% + {\newpsstyle{#1}{#2}}% + {\expandafter\addto@psstyle\csname pscs@#1\endcsname{\psset{#2}}}% + \fi} +%------------ hv 1.16 end ------------------- +% +\def\@none{none} +\def\pst@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@off{\let\@psunit\ignorespaces\ignorespaces} +% +\def\pssetlength#1#2{% + \let\@psunit\psunit + \afterassignment\pstunit@off + #1 #2\@psunit% +} +\def\psaddtolength#1#2{% + \let\@psunit\psunit + \afterassignment\pstunit@off + \advance#1 #2\@psunit% +} +\def\pssetxlength#1#2{% + \let\@psunit\psxunit + \ifpst@useCalc + \edef\@@temp{\pscalculate{#2}}% + \afterassignment\pstunit@off + #1 \@@temp\@psunit + \else + \afterassignment\pstunit@off + #1 #2\@psunit + \fi +} +\def\pssetylength#1#2{% + \let\@psunit\psyunit + \ifpst@useCalc + \edef\@@temp{\pscalculate{#2}}% + \afterassignment\pstunit@off + #1 \@@temp\@psunit + \else + \afterassignment\pstunit@off + #1 #2\@psunit + \fi +} +\define@key[psset]{pstricks}{unit}[1cm]{% + \pssetlength\psunit{#1}% + \psxunit=\psunit% + \psyunit=\psunit% +} +\define@key[psset]{pstricks}{runit}[1cm]{\pssetlength\psrunit{#1}} +\define@key[psset]{pstricks}{xunit}[1cm]{\pssetxlength\psxunit{#1}} +\define@key[psset]{pstricks}{yunit}[1cm]{\pssetylength\psyunit{#1}} +% +\define@key[psset]{pstricks}{PstDebug}[0]{\pst@getint{#1}\Pst@Debug}% hv 2004-06-22 +\psset[pstricks]{PstDebug=0} +\def\psDEBUG{\@ifnextchar[\psDEBUG@i{\psDEBUG@i[PSTricks]}}% +\def\psDEBUG@i[#1]#2{\ifnum\Pst@Debug>0 \expandafter\typeout{<#1>: #2}\fi}% +% +\def\pst@getlength#1#2{% + \pssetlength\pst@dimg{#1}% + \edef#2{\pst@number\pst@dimg}% +} +\def\pst@@getlength#1#2{% + \pssetlength\pst@dimg{#1}% + \edef#2{\number\pst@dimg sp}% +} +\def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor} +\def\pst@coor{0 0 } +% +\def\pst@getcoors#1#2{% + \def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}% + \def\pst@coors{}% + \pst@@getcoors +} +\def\pst@@getcoors(#1){% + \pst@@getcoor{#1}% + \edef\pst@coors{\pst@coor\pst@coors}% + \@ifnextchar({\pst@@getcoors}{\pst@aftercoors}% +} +% +\newcount\pst@C@@rType% 0: default cartesian coordinates and angles +% +\def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle} +\def\pst@angle{0 } +% +\def\cartesian@coor#1,#2,#3\@nil{% + \pssetxlength\pst@dimg{#1}% + \pssetylength\pst@dimh{#2}% + \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}% +} +\def\NormalCoor{% + \def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}% + \def\pstCheckCoorType##1{\global\pst@C@@rType=0}% + \Pst@SpecialLengthfalse + \def\pssetlength##1##2{% + \let\@psunit\psunit + \afterassignment\pstunit@off + ##1 ##2\@psunit% + }% + \def\pst@@getangle##1{% + \pst@checknum{##1}\pst@angle% + \edef\pst@angle{\pst@angle \pst@angleunit}% + }% + \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}% +} +%\NormalCoor% set to normal read of coors, angles and lengths +% +\def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}} +\def\@degrees[#1]{% + \pst@checknum{#1}\pst@tempg + \edef\pst@angleunit{360 \pst@tempg div mul }% + \pstVerb{tx@Dict begin startGlobal /pst@angleunit {\pst@angleunit} def endGlobal end}% + \ignorespaces} +% +\def\radians{\def\pst@angleunit{57.2956 mul }% + \pstVerb{tx@Dict begin startGlobal /pst@angleunit {\pst@angleunit} def endGlobal end}}% +\def\pst@angleunit{}% + +% +\def\SpecialCoor{% + \def\pst@@getcoor##1{% + \begingroup% + \pst@activecoor + \xdef\pst@tempg{##1}% + \endgroup + \expandafter\special@coor\pst@tempg||\@nil}% + \def\pstCheckCoorType##1{% + \begingroup + \pst@activecoor + \xdef\pst@tempg{##1}% + \endgroup + \psDEBUG[pstCheckCoorType]{:Checking coor \pst@tempg:}% + \expandafter\pst@CheckCoorType\pst@tempg||\@nil% + \psDEBUG[pstCheckCoorType]{::Coor type=\the\pst@C@@rType::}% + }% + \def\pssetlength##1##2{% + \begingroup% + \pst@activecoor% + \xdef\pst@tempg{##2}% + \endgroup% + \expandafter\special@length\pst@tempg\@nil{##1}% + \ignorespaces}% + \def\pst@@getangle##1{% + \begingroup% + \pst@activecoor% + \xdef\pst@tempg{##1}% + \endgroup% + \expandafter\special@angle\pst@tempg\@empty)\@nil% + }% + \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}% +} +\SpecialCoor% set to special read of coors, angles and lengths +% +\define@key[psset]{}{precode}{\def\pst@prepscode{#1 }} +\define@key[psset]{}{postcode}{\def\pst@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@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@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@CheckCoorType#1|#2|#3\@nil{% + \ifx#3|\relax + \global\pst@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@C@@rType=7 + \else + \ifcat#1a\relax% node names should start with a letter + \global\pst@C@@rType=5 + \else + \ifx#1[\relax% special node coor: [..]A + \global\pst@C@@rType=6 + \else + \ifx#1!\relax% PostScript code: x y + \global\pst@C@@rType=2 + \else + \ifx#1*\relax% algebraic PostScript code: x f(x) + \global\pst@C@@rType=4 + \else + \ifx#1+\relax% algebraic algebraic: x, f(x) + \global\pst@C@@rType=8 + \else + \ifx#4;\relax% polar coordinates + \global\pst@C@@rType=1 + \else + \global\pst@C@@rType=0 + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \psDEBUG[pstCheckCoorType]{::\the\pst@C@@rType::}% + }% +% +% +\def\special@coor#1|#2|#3\@nil{% + \ifx#3|\relax + \mixed@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@next{\node@coor#1}% + \else + \ifx#1[\relax% special node coor: [..]A + \def\ps@next{\Node@coor[}% + \else + \ifx#1>\relax% PostScript code: x y + \def\ps@next{\special@@@@coor}% + \else + \ifx#1!\relax% PostScript code: x y + \def\ps@next{\raw@coor}% + \else + \ifx#1*\relax% PostScript/algebraic code: x f(x) + \def\ps@next{\alg@coor}% + \else + \ifx#1+\relax% algebraic code: x,f(x) + \def\ps@next{\algalg@coor}% + \else% + \def\ps@next{\special@@@coor#1}% + \fi% + \fi% + \fi% + \fi\fi% + \fi% + \ps@next% +} +\def\special@@@coor#1;#2;#3\@nil{% + \ifx#3;\relax + \polar@coor{#1}{#2}% + \else + \cartesian@coor#1,\relax,\@nil + \fi% +} +\def\special@@@@coor#1#2;#3;#4\@nil{% + \def\ps@A{A}\def\ps@B{#1}% + \ifcat\ps@A\ps@B\relax% + \node@coor#1#2;;\@nil% + \else% + \cartesian@coor#1#2,\relax,\@nil + \fi% +} +\def\mixed@coor#1#2{% + \begingroup% +% DG/SR modification begin - Oct. 27, 1997 - Patch 6 +%\specialcoor@ii#1;;\@nil +%\let\pst@tempa\pst@coor +%\specialcoor@ii#2;;\@nil + \special@@coor#1;;\@nil% + \let\pst@tempa\pst@coor% + \special@@coor#2;;\@nil% +% DG/SR modification end + \xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }% + \endgroup% + \let\pst@coor\pst@tempg% +} +% +\def\polar@coor#1#2{% +% \pssetlength\pst@dimg{#1}% + \pssetlength\pst@dimb{#1}% hv 2007-10-16 g is already used in get@@angle + \pst@@getangle{#2}% +% \edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}% dito + \edef\pst@coor{\pst@number\pst@dimb \pst@angle \tx@PtoC }% +} +% +\def\raw@coor{\@ifnextchar !\raw@@coor\raw@@@coor} +\def\raw@@coor!#1;#2\@nil{% PostScript code without using \tx@ScreenCoor + \edef\pst@coor{#1 }} +\def\raw@@@coor#1;#2\@nil{% PostScript code + \edef\pst@coor{ #1 \tx@ScreenCoor }} +% +\def\alg@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@coor{% + /Func (#1) AlgParser cvx def + /y #2 def + y Func exch \tx@ScreenCoor }} +% +\def\alg@@@@coor#1;#2\@nil{\expandafter\alg@@@@@coor#1\@nil} +\def\alg@@@@@coor#1 #2\@nil{% algebraic PostScript code + \edef\pst@coor{% + /x #1 def + /Func (#2) AlgParser cvx def + x Func \tx@ScreenCoor }} +% +\define@boolkey[psset]{}[Pst@]{exchange}[true]{} +\psset{exchange=false} +% +\def\algalg@coor#1;#2\@nil{\expandafter\algalg@@@coor#1\@nil} +\def\algalg@@@coor#1,#2\@nil{% algebraic algebraic code + \edef\pst@coor{% + /x (#1) AlgParser cvx def + /Func (#2) AlgParser cvx def + x Func \tx@ScreenCoor }} +% +\def\node@coor#1\@nil{% + \@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps + \def\pst@coor{0 0 }% +} +\def\Node@coor{\node@coor} +% +\def\special@angle#1#2)#3\@nil{% + \ifx !#1\relax + \edef\pst@angle{#2\space \pst@angleunit}% + \else\ifx(#1\relax + \pst@@getcoor{#2}% + \edef\pst@angle{\pst@coor exch \tx@Atan}% + \else + \pst@checknum{#1#2}\pst@angle + \edef\pst@angle{\pst@angle \pst@angleunit}% + \fi\fi} +% +\def\special@length#1#2\@nil#3{% + \ifx !#1\relax + \edef\pst@SpecialLength{ #2 \pst@number\psunit mul }% + \Pst@SpecialLengthtrue + \else + \let\@psunit\psunit + \afterassignment\pstunit@off + #3 #1#2\@psunit + \Pst@SpecialLengthfalse + \fi +} +% +\def\Cartesian{% + \def\cartesian@coor##1,##2,##3\@nil{% + \pssetxlength\pst@dimg{##1}% + \pssetylength\pst@dimh{##2}% + \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}% + }% + \@ifnextchar({\Cartesian@}{}% +} +\def\Cartesian@(#1,#2){% + \pssetxlength\psxunit{#1}% + \pssetylength\psyunit{#2}% + \ignorespaces +} +\def\Polar{% + \def\psput@cartesian{\psput@special}% + \def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}% +}% +\define@key[psset]{pstricks}{origin}[]{% + \pst@@getcoor{#1}% + \edef\psk@origin{\pst@coor T }} +\def\psk@origin{} +% +\define@boolkey[psset]{pstricks}[Pst@]{algebraic}[true]{} +\psset{algebraic=false} +% +\define@boolkey[psset]{pstricks}[]{swapaxes}[true]{% \if@pst + \@nameuse{@pst#1}% + \if@pst\def\psk@swapaxes{-90 rotate -1 1 scale }% + \else\def\psk@swapaxes{}% + \fi +} +\psset[pstricks]{swapaxes=false} +% +\define@boolkey[psset]{pstricks}[]{showpoints}[true]{} +\psset[pstricks]{showpoints=false} +% +\let\pst@setrepeatarrowsflag\relax +% +\define@key[psset]{pstricks}{border}[0pt]{\pst@getlength{#1}\psk@border \pst@setrepeatarrowsflag} +\psset[pstricks]{border=0pt} +\define@key[psset]{pstricks}{bordercolor}[white]{\pst@getcolor{#1}\psbordercolor} +\psset[pstricks]{bordercolor=white} +\define@boolkey[psset]{pstricks}[ps]{doubleline}[true]{\pst@setrepeatarrowsflag} +\psset[pstricks]{doubleline=false} +\define@key[psset]{pstricks}{doublesep}[1.25\pslinewidth]{\def\psdoublesep{#1}} +\psset[pstricks]{doublesep=1.25\pslinewidth} +\define@key[psset]{pstricks}{doublecolor}[white]{\pst@getcolor{#1}\psdoublecolor} +\psset[pstricks]{doublecolor=white} +% +\define@boolkey[psset]{pstricks}[ps]{shadow}[true]{\pst@setrepeatarrowsflag} +\psset[pstricks]{shadow=false} +\define@key[psset]{pstricks}{shadowsize}[3pt]{\pst@getlength{#1}\psk@shadowsize} +\psset[pstricks]{shadowsize=3pt} +\define@key[psset]{pstricks}{shadowangle}[-45]{\pst@getangle{#1}\psk@shadowangle} +\psset[pstricks]{shadowangle=-45} +\define@key[psset]{pstricks}{shadowcolor}[darkgrey]{\pst@getcolor{#1}\psshadowcolor} +\psset[pstricks]{shadowcolor=darkgray} +% +\def\pst@repeatarrowsflag{\z@} +\def\pst@setrepeatarrowsflag{% + \edef\pst@repeatarrowsflag{% + \ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else + \ifpsshadow 1\else \z@\fi\fi\fi}} +% +\def\psls@none{} +\def\psls@solid{ \psk@linejoin\space setlinejoin \psk@linecap\space setlinecap stroke } +\def\psls@coloreddashed{ \psls@solid grestore gsave \pst@usecolor\psdashcolor \tx@setlinejoin \psls@dashed } +% +\newdimen\pslinewidth +\define@key[psset]{pstricks}{linewidth}[0.8pt]{\pssetlength\pslinewidth{#1}} +\psset[pstricks]{linewidth=.8pt} +\define@key[psset]{pstricks}{linecolor}[black]{\pst@getcolor{#1}\pslinecolor} +\psset[pstricks]{linecolor=black} +\define@key[psset]{pstricks}{kitecolor}[red]{\pst@getcolor{#1}\ps@kitecolor} +\define@key[psset]{pstricks}{dartcolor}[blue]{\pst@getcolor{#1}\ps@dartcolor} +\psset[pstricks]{kitecolor,dartcolor} +% +\newif\ifPst@coloreddashed +\define@key[psset]{pstricks}{dashcolor}[white]{% + \ifx\relax#1\relax\Pst@coloreddashedfalse% + \else\Pst@coloreddashedtrue\pst@getcolor{#1}\psdashcolor + \fi} +\psset{dashcolor=\relax} +%\define@key[psset]{pstricks}{linecap}[0]{\pst@getint{#1}\psk@linecap}% hv 2007-12-01 +%\psset[pstricks]{linecap=0} >>>>>>>>>>>>> siehe unten +\define@key[psset]{pstricks}{linejoin}[0]{\pst@getint{#1}\psk@linejoin}% hv 2007-10-13 +\psset[pstricks]{linejoin=0} +\def\tx@setlinejoin{\psk@linejoin\space setlinejoin }% hv 2007-10-13 +% +\def\pst@missing{% + \z@ + \@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa} +% +%%------------------- begin patch 15 HV 2004-05-15 ------------- +\def\pst@empty{\z@} + +\define@key[psset]{pstricks}{dash}[5pt 3pt 0pt 0pt]{% defined in pstricks.tex + \pst@expandafter\psset@@dash{#1}\@nil}% Error handling for empty argument. +\define@key[psset]{pstricks}{maxdashes}[11]{\def\psk@maxdashes{#1}} +\psset[pstricks]{maxdashes=11} +% +\def\psset@@dash#1\@nil{% + \def\psk@dash{}% + \pst@cntm0 + \def\next##1 ##2\relax{% + \expandafter\ifnum\psk@maxdashes>\pst@cntm\relax % 04-08-07 + \edef\@tempa{##1}% + \ifx\@tempa\@empty\else% gobble leading spaces + \pssetlength\pst@dimc{##1}% + \advance\pst@cntm by 1 + \edef\psk@dash{\psk@dash\space\pst@number\pst@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@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@boolkey[psset]{pstricks}[ps]{dashadjust}[true]{} +\psset[pstricks]{dashadjust} +\def\tx@DashLine{DashLine } +% +\def\psls@dashed{ + \ifPst@coloreddashed \psls@solid grestore gsave \pst@usecolor\psdashcolor \tx@setlinejoin \fi + \psk@linecap\space setlinecap + \ifpsdashadjust + [ \psk@dash ] \pst@linetype\space \tx@DashLine + \else + [ \psk@dash ] 0 setdash stroke + \fi} +%% End patch TN; Date (YY-MM-DD): 04-07-17; 2nd part +% +\define@key[psset]{pstricks}{dotsep}[3pt]{\pst@getlength{#1}\psk@dotsep} +\psset[pstricks]{dotsep=3pt} +\def\tx@DotLine{DotLine } +\def\psls@dotted{ + \ifpsdashadjust + \psk@dotsep \pst@linetype\space \tx@DotLine + \else + [ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke + \fi +} +% +\define@key[psset]{pstricks}{linestyle}[solid]{% + \@ifundefined{psls@#1}% + {\@pstrickserr{Line style `#1' not defined}\@eha}% + {\def\pslinestyle{#1}}} +\psset[pstricks]{linestyle=solid} +% +\define@key[psset]{pstricks}{linecap}[0]{% + \def\psk@linecap{0}% + \ifnum#1>-1 + \ifnum#1<3 + \pst@getint{#1}\psk@linecap% + \fi\fi} +\psset{linecap=0} +%------------------------- Transparency modes ---------------------------- +\pst@def{setTransparency}< \psk@opacityalpha .setopacityalpha > +\pst@def{setStrokeTransparency}< \psk@strokeopacityalpha .setopacityalpha > +\pst@def{setBlendmode}< + \ifcase\psk@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@shapealpha .setshapealpha > +% +%--------------------------------- hv 2007-09-09 begin --------------------- +% transparency needs a run through latex -> dvips -> ps2pdf14(!) +% +\def\e@fill@inverse{oefill} +\define@key[psset]{pstricks}{fillcolor}[white]{% + \ifx\psk@fillstylename\e@fill@inverse + \pst@getcolor{#1}\psk@oefillcolor + \pst@getcolor{white}\psfillcolor + \else \pst@getcolor{white}\psk@oefillcolor + \pst@getcolor{#1}\psfillcolor + \fi} + +\psset[pstricks]{fillcolor=white} +\define@key[psset]{pstricks}{strokeopacity}[1]{\pst@checknum{#1}\psk@strokeopacityalpha }% for lines +\psset[pstricks]{strokeopacity=1} +\define@key[psset]{pstricks}{opacity}[1]{\pst@checknum{#1}\psk@opacityalpha }% for filled areas +\psset[pstricks]{opacity=1} +\define@key[psset]{pstricks}{shapealpha}[0.6]{\pst@checknum{#1}\psk@shapealpha } +\psset[pstricks]{shapealpha=0.6} +\define@key[psset]{pstricks}{blendmode}[0]{\pst@getint{#1}\psk@blendmode }% must be one of +% /Normal 0 +% /Compatible 1 +% /Screen 2 +% /Multiply 3 +% /HardLight 4 +\psset[pstricks]{blendmode=0} +\define@key[psset]{pstricks}{fsAngle}[137.50775]{\pst@getangle{#1}\pst@fsAngle } +\define@key[psset]{pstricks}{fsOrigin}[(0,0)]{% + \pst@@getcoor{#1}\edef\pst@fsOrigin{\pst@coor T }} +\psset[pstricks]{fsOrigin={0,0},fsAngle=137.50775} +% +\def\tx@LineFill{LineFill } +\def\tx@DotFill{DotFill } +\def\tx@PenroseFill{PenroseFill } +\def\tx@PenroseFillA{PenroseFillA } +\def\tx@TruchetFill{TruchetFill } +% +\def\psfs@none{} +\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor \tx@setTransparency fill }} +\def\psfs@eofill{\pst@fill{\pst@usecolor\psfillcolor \tx@setTransparency eofill}} +\def\psfs@oefill{\pst@fill{\pst@usecolor\psk@oefillcolor \tx@setTransparency fill }\psfs@eofill } +\def\psfs@shape{\pst@fill{\pst@usecolor\psfillcolor \tx@setBlendmode fill }} +\def\psfs@spiral{\pst@fill{\pst@fsOrigin \pst@usecolor\psfillcolor clip newpath + 0 .1 500 { dup dup sqrt 4 div 0 360 arc fill \pst@fsAngle rotate } for }} +% +\define@key[psset]{pstricks}{hatchwidth}[0.8pt]{\pst@getlength{#1}\psk@hatchwidth} +\psset[pstricks]{hatchwidth=.8pt} +\define@key[psset]{pstricks}{hatchsep}[4pt]{\pst@getlength{#1}\psk@hatchsep} +\psset[pstricks]{hatchsep=4pt} +\define@key[psset]{pstricks}{hatchcolor}[black]{\pst@getcolor{#1}\pshatchcolor} +\psset[pstricks]{hatchcolor=black} +\define@key[psset]{pstricks}{hatchangle}[45]{\pst@getangle{#1}\psk@hatchangle} +\psset[pstricks]{hatchangle=45} +\define@key[psset]{pstricks}{hatchsepinc}[0pt]{\pst@getlength{#1}\psk@hatchsepinc} +\define@key[psset]{pstricks}{hatchwidthinc}[0pt]{\pst@getlength{#1}\psk@hatchwidthinc} +\psset[pstricks]{hatchwidthinc=0pt,hatchsepinc=0pt} +% +\def\pst@linefill#1{ + /clipType { \ifx\relax#1\relax clip \else#1\fi} def + \psk@hatchangle rotate + \psk@hatchwidth SLW + \pst@usecolor\pshatchcolor + \psk@hatchsep + \psk@hatchsepinc + \psk@hatchwidthinc + \tx@LineFill } +% +\def\psfs@vlines{\pst@fill{\pst@linefill{}}} +\def\psfs@eovlines{\pst@fill{\pst@linefill{eoclip}}} +\@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines} +\@namedef{psfs@eovlines*}{\psfs@eofill \psfs@eovlines} +\def\psfs@hlines{\pst@fill{90 rotate \pst@linefill{}}} +\def\psfs@eohlines{\pst@fill{90 rotate \pst@linefill{eoclip}}} +\@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines} +\@namedef{psfs@eohlines*}{\psfs@eofill \psfs@eohlines} +\def\psfs@crosshatch{\psfs@vlines \psfs@hlines} +\@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines} +\@namedef{psfs@eocrosshatch*}{\psfs@eofill \psfs@eovlines \psfs@eohlines} +% +\define@key[psset]{pstricks}{psscale}[1]{% + \def\psk@@psscale{#1}% for use with \psscalebox + \pst@checknum{#1}\psk@psscale} +\psset[pstricks]{psscale=1} +% +\def\pst@dotFill[#1]{% + /clipType { \ifx\relax#1\relax clip \else #1 \fi } def + gsave + \pst@number\pslinewidth SLW + \pst@usecolor\pshatchcolor +% /DotLineColor { \pst@usecolor\pslinecolor } def + \psk@hatchsep + \psk@hatchwidth + \tx@DotFill } + +\def\psfs@dots{\pst@fill{ /SolidDot false def \pst@dotFill[] }} +\def\psfs@eodots{\pst@fill{ /SolidDot false def \pst@dotFill[eoclip] }} +\@namedef{psfs@dots*}{\pst@fill{ /SolidDot true def \pst@dotFill[] }} +\@namedef{psfs@eodots*}{\pst@fill{ /SolidDot true def \pst@dotFill[eoclip] }} +% +\def\pst@penroseFill{% +% gsave % restore in PenroseFill + \pst@number\pslinewidth SLW + \pst@usecolor\pshatchcolor + \psk@psscale + \tx@PenroseFill } +\def\psfs@penrose{\pst@fill\pst@penroseFill} +\@namedef{psfs@penrose*}{\psfs@solid \psfs@penrose} +% +\def\pst@penroseFillA{% +% gsave % restore in PenroseFillA + \pst@number\pslinewidth SLW +% \pst@usecolor\pshatchcolor +% on stack: scaling factor, border color, kite color, dart color +% dup dup scale +% /border_colour ED % +% /kite_colour ED % +% /dart_colour + { \pst@usecolor\ps@dartcolor } + { \pst@usecolor\ps@kitecolor } + { \pst@usecolor\pshatchcolor } + \psk@psscale + \tx@PenroseFillA } +\def\psfs@penroseA{\pst@fill\pst@penroseFillA} +\@namedef{psfs@penroseA*}{\psfs@solid \psfs@penroseA} +% +\def\pst@truchetFill{% + gsave % restore in PenroseFill + \pst@number\pslinewidth SLW + \pst@usecolor\pshatchcolor + \psk@psscale + \tx@TruchetFill } +\def\psfs@truchet{ \pst@fill\pst@truchetFill } +\@namedef{psfs@truchet*}{\psfs@solid \psfs@truchet} +% +\define@key[psset]{pstricks}{fillstyle}[none]{% + \def\psk@fillstylename{#1}% needed for inverse eofill + \edef\pst@tempg{#1}\def\pst@temph{none}% + \ifx\pst@tempg\pst@temph + \let\psk@fillstyle\relax + \else + \@ifundefined{psfs@#1}% + {\@pstrickserr{Undefined fill style: `#1'}\@eha}% + {\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}% + \fi% +} +\define@key[psset]{pstricks}{addfillstyle}[]{% + \@ifundefined{psfs@#1}% + {\@pstrickserr{Undefined fill style: `#1'}\@eha}% + {\edef\psk@fillstyle{% + \expandafter\noexpand\psk@fillstyle + \expandafter\noexpand\csname psfs@#1\endcsname}% + }} +\psset[pstricks]{fillstyle=none} +% +%--------------------------- continous linewidth ------------------- +\newdimen\psk@startLW +\newdimen\psk@endLW +\define@key[psset]{pstricks}{startLW}[\pslinewidth]{\pssetlength{\psk@startLW}{#1}}% +\define@key[psset]{pstricks}{endLW}[\pslinewidth]{\pssetlength{\psk@endLW}{#1}}% +\define@key[psset]{pstricks}{startWL}[380]{\pst@getint{#1}\psk@startWL}% +\define@key[psset]{pstricks}{endWL}[780]{\pst@getint{#1}\psk@endWL}% +\define@boolkey[psset]{pstricks}[Pst@]{variableLW}[true]{} +\define@boolkey[psset]{pstricks}[Pst@]{variableColor}[true]{} +\define@key[psset]{pstricks}{setflat}[0.1]{\pst@checknum{#1}\psk@setflat}% +\psset[pstricks]{startLW=\pslinewidth,endLW=\pslinewidth,variableColor=false, + variableLW=false,startWL=380,endWL=780,setflat=0.1} +% +\def\pst@flattenpath{ + /Coors [] def % the array of all points + /lambda \psk@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@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@number\psk@startLW setlinewidth + \tx@setlinejoin + \psk@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@number\psk@endLW \pst@number\psk@startLW sub NN div def % the step for the linewidth + \ifPst@variableColor + /dColor \psk@endWL\space \psk@startWL\space sub NN div def + lambda dColor add dup /lambda ED + tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor + \else + \pst@usecolor\pslinecolor + \fi + moveto % move to the first one + /N N0 def + { + N 3 gt { +% CP 6 2 roll + \psk@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@variableColor + lambda dColor add dup /lambda ED + tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor + \else + \pst@usecolor\pslinecolor + \fi + CP /Y ED /X ED % put coors of current point on the stack +% 0.4 .setopacityalpha + 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@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@arrowA{} +\def\psk@arrowB{} +\def\pst@arrowtable{,-,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|,<D-D>,D>-<D,<D<D-D>D>} % hv --1.16 +\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|} +\begingroup + \catcode`\<=13 + \catcode`\>=13 + \catcode`\|=13 + \gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}} +\endgroup +\def\tx@BeginArrow{BeginArrow } +\def\tx@EndArrow{EndArrow } +% +\def\tx@Arrow{ \tx@setStrokeTransparency Arrow }% hv 2008-01-13 +\def\tx@ArrowD{ \tx@setStrokeTransparency ArrowD }% hv 2008-01-13 +% +\@namedef{psas@<|}{ + \psk@tbarsize\space \tx@Tbar + 0 CLW 2 div T + newpath + true + \psk@arrowinset + \psk@arrowlength + \psk@arrowsize + \tx@Arrow +} +% ]-[ arrow +\def\tx@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@bracketlength\space \psk@tbarsize\space \tx@BracketOut +} +% )-( arrow +\def\tx@RoundBracketOut{ \tx@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@rbracketlength\space \psk@tbarsize\space \tx@RoundBracketOut +} +% end of new definitions of the missing arrows ---- hv 1.12 +\@namedef{psas@>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow } +\@namedef{psas@>>}{% + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + 0 h T gsave newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + CP grestore CP newpath moveto 2 copy + CLW \pst@arrowscale\space div SLW % set the original line width + L stroke moveto +} +\@namedef{psas@<}{true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} +\@namedef{psas@<<}{ + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + CP newpath moveto 0 a neg + gsave + CLW \pst@arrowscale\space div SLW % set the original line width + L stroke + grestore + 0 h neg T + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +} +\@namedef{psas@D>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD }% hv 20071211 +\@namedef{psas@D>D>}{ % hv 20071211 + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD + 0 h Inset sub T gsave newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD + CP grestore moveto +} +\@namedef{psas@<D}{ % hv 20071211 + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD +} +\@namedef{psas@<D<D}{ % hv 20071211 + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD + CP newpath moveto 0 a neg L stroke 0 h neg T + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD +} +\define@key[psset]{pstricks}{tbarsize}[2pt 5]{% + \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil + \edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}} +\psset[pstricks]{tbarsize=2pt 5} +% +\def\tx@Tbar{Tbar } +\@namedef{psas@|}{\psk@tbarsize \tx@Tbar} +\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar} +\@namedef{psas@>|}{% + \psk@tbarsize \tx@Tbar + 0 CLW 2 div T + newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +} +\@namedef{psas@>|*}{% + 0 CLW -2 div T + \psk@tbarsize \tx@Tbar + 0 CLW 2 div T + newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +} +% +\define@key[psset]{pstricks}{bracketlength}[0.15]{\pst@checknum{#1}\psk@bracketlength} +\psset[pstricks]{bracketlength=.15} +\def\tx@Bracket{Bracket } +\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket} +\define@key[psset]{pstricks}{rbracketlength}[0.15]{\pst@checknum{#1}\psk@rbracketlength} +\psset[pstricks]{rbracketlength=.15} +\def\tx@RoundBracket{RoundBracket } +\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket} +% +\def\psas@c{1 \psas@@c} +\def\psas@cc{0 CLW 2 div T 1 \psas@@c} +\def\psas@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@key[psset]{pstricks}{arrowLW}{\pst@getlength{#1}\psk@arrowLW} +\psset[pstricks]{arrowLW=0} +% arrowLW as LineWidth for the circled line ends +% +\def\psas@o{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot } +\def\psas@oo{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot } +\@namedef{psas@*}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {false} false \psk@dotsize \tx@EndDot } +\@namedef{psas@**}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {false} true \psk@dotsize \tx@EndDot } +% +\define@key[psset]{pstricks}{arrows}[-]{% + \begingroup + \pst@activearrows + \xdef\pst@tempg{#1}% + \endgroup + \expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil + \if@pst\else\@pstrickserr{Bad arrows specification: #1}\@ehpa\fi} +\def\psset@@arrows#1-#2\@empty#3\@nil{% + \@psttrue + \def\ps@next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% + \expandafter\ps@next\pst@arrowtable,#1-#1,\@nil + \@ifundefined{psas@\pst@tempg}{\@pstfalse\def\psk@arrowA{}}{\let\psk@arrowA\pst@tempg}% + \@ifundefined{psas@#2}{\@pstfalse\def\psk@arrowB{}}{\def\psk@arrowB{#2}}} +\psset[pstricks]{arrows=-} +% +\define@key[psset]{pstricks}{arrowscale}[1]{% hv --1.12 + \pst@getscale{#1}\psk@arrowscale + \pst@@arrowscale@i#1 \@nil}% hv --1.12 +\def\pst@@arrowscale@i#1 #2\@nil{\edef\pst@arrowscale{#1}}% hv --1.12 +\psset[pstricks]{arrowscale=1} +% +\define@key[psset]{pstricks}{arrowsize}[1.5pt 2]{% + \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil + \edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}% +} +\psset[pstricks]{arrowsize=1.5pt 2} +\define@key[psset]{pstricks}{arrowlength}[1.4]{\pst@checknum{#1}\psk@arrowlength} +\psset[pstricks]{arrowlength=1.4} +\define@key[psset]{pstricks}{arrowinset}[0.4]{\pst@checknum{#1}\psk@arrowinset}% +\psset[pstricks]{arrowinset=0.4} +% +\def\tx@SD{ \tx@setTransparency SD } +\def\tx@EndDot{EndDot } +% +\def\pst@par{} +\def\addto@par#1{% + \ifx\pst@par\@empty + \def\pst@par{#1}% + \else + \expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}% + \fi% +} +\def\addbefore@par#1{% + \ifx\pst@par\@empty + \def\pst@par{#1}% + \else + \toks@{#1}% + \pst@toks\expandafter{\pst@par}% + \edef\pst@par{\the\toks@,\the\pst@toks}% + \fi% +} +\def\use@par{% + \ifx\pst@par\@empty\else + \expandafter\@psset\pst@par,\@nil + \def\pst@par{}% + \fi +} +\def\use@keep@par{% same as \use@par, but keeps the values + \ifx\pst@par\@empty\else + \expandafter\@psset\pst@par,\@nil +% \def\pst@par{}% + \fi} +% +\def\pst@object#1{% + \def\pst@par{}% + \pst@ifstar{% + \@ifnextchar[{\pst@@object{#1}}{\@nameuse{#1@i}}}% +} +\def\pst@@object#1[#2]{% + \def\pst@par{#2}% + \@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}% +} +\def\newpsobject#1#2#3{% +\@ifundefined{#2@i}% +{\@pstrickserr{Graphics object `#2' not defined}\@eha}{% +\@namedef{#1}{\pst@object{#1}}% +\@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}% +\ignorespaces} +% +\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}} +% ------------------------- hv 1.10 beg ------------------------ +%\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1} +\def\pst@@getarrows#1#2{% + \def\pst@tempa{#2}% prevent empty arrow arguments, to allow \psline{}(...)(...) + \ifx\pst@tempa\@empty + \addto@par{arrows=-}% + \else + \addto@par{arrows=#2}% + \fi + #1% +} +% ------------------------- hv 1.10 end ------------------------ +% +\def\begin@ClosedObj{% + \leavevmode + \pst@killglue + \begingroup + \use@par + \solid@star + \ifpsdoubleline\pst@setdoublesep\fi + \pst@addarrowdef% DG addition + \init@pscode} +% +\def\end@ClosedObj{% + \ifpsshadow \pst@closedshadow \fi + \ifdim\psk@border\p@>\z@ \pst@addborder \fi + \psk@fillstyle + \pst@stroke + \ifpsdoubleline \pst@doublestroke \fi + \ifshowpoints +% DG modification begin - Mar. 4, 1995 +%\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}% + \pst@OpenShowPoints +% DG modification end + \fi + \use@pscode + \endgroup + \ignorespaces% +} +\def\begin@OpenObj{% + \begin@ClosedObj% + \let\pst@linetype\pst@arrowtype% + \pst@addarrowdef% +} +\def\begin@AltOpenObj{% + \begin@ClosedObj + \def\pst@repeatarrowsflag{\z@}% + \def\pst@linetype{0}} +% +\def\end@OpenObj{% + \ifpsshadow \pst@openshadow \fi + \ifdim\psk@border\p@>\z@ \pst@addborder \fi + \psk@fillstyle + \pst@stroke + \ifpsdoubleline \pst@doublestroke \fi + \ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi + \ifshowpoints \pst@OpenShowPoints \fi + \use@pscode + \endgroup + \ignorespaces} +% +\def\begin@SpecialObj{% + \leavevmode + \pst@killglue + \begingroup + \use@par + \init@pscode} +% +\def\end@SpecialObj{% + \use@pscode + \endgroup + \ignorespaces} +% +\def\pst@code{}% +\def\init@pscode{% + \addto@pscode{% + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor}% +} +\def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}} +\def\use@pscode{% + \pstverb{ + \pst@dict + \tx@STP + \pst@newpath + \psk@origin + \psk@swapaxes + \pst@code + end + }% + \gdef\pst@code{}% +} +\def\use@psCode{% + \pstVerb{ + \pst@dict + \tx@STP + \pst@newpath + \psk@origin + \psk@swapaxes + \pst@code + end + }% + \gdef\pst@code{}% +} +\def\pst@newpath{newpath } +% +\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi} +\def\KillGlue{\let\pst@killglue\pst@@killglue} +\def\DontKillGlue{\let\pst@killglue\relax} +\DontKillGlue +% +\def\solid@star{% + \if@star + \pslinewidth=\z@ + \psdoublelinefalse + \def\pslinestyle{none}% + \def\psk@fillstyle{\psfs@solid}% + \let\psfillcolor\pslinecolor + \fi} +% +\def\pst@setdoublesep{% +\pst@getlength\psdoublesep\psdoublesep +\pslinewidth=2\pslinewidth +\advance\pslinewidth\psdoublesep\p@ +\let\pst@setdoublesep\relax} +\def\tx@Shadow{Shadow } +\def\pst@closedshadow{% + \addto@pscode{% + gsave + \psk@shadowsize \psk@shadowangle \tx@PtoC + \tx@Shadow + \pst@usecolor\psshadowcolor + gsave fill grestore + stroke + grestore + gsave + \pst@usecolor\psfillcolor + gsave fill grestore + stroke + grestore}} +% +\def\pst@openshadow{% + \addto@pscode{% + gsave + \psk@shadowsize \psk@shadowangle \tx@PtoC + \tx@Shadow + \pst@usecolor\psshadowcolor + \ifx\psk@fillstyle\relax\else + gsave fill grestore + \fi + stroke}% + \pst@repeatarrows% + \addto@pscode{grestore}% + \ifx\psk@fillstyle\relax\else + \addto@pscode{% + gsave + \pst@usecolor\psfillcolor + gsave fill grestore + stroke + grestore}% + \fi} +% +\def\pst@addborder{% + \addto@pscode{% + gsave + \psk@border 2 mul + CLW add SLW + \pst@usecolor\psbordercolor + stroke + grestore}} +% +\def\pst@stroke{% + \ifx\pslinestyle\@none\else + \addto@pscode{% + gsave + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor + \tx@setStrokeTransparency % hv 2008-01-13 + \@nameuse{psls@\pslinestyle} + grestore}% + \fi} +% +\def\pst@fill#1{\addto@pscode{gsave #1 grestore}}% +% +\def\pst@doublestroke{% + \addto@pscode{% + gsave + \psdoublesep SLW + \pst@usecolor\psdoublecolor + \tx@setStrokeTransparency % hv 2016-09-23 + stroke + grestore +}} +% +\def\pst@arrowtype{% + \ifx\psk@arrowB\@empty 0 \else -2 \fi + \ifx\psk@arrowA\@empty 0 \else -1 \fi + add } +% +\def\pst@addarrowdef{% + \addto@pscode{% + /ArrowA { + \ifx\psk@arrowA\@empty + \pst@oplineto + \else + \pst@arrowdef{A} + moveto + \fi + } def + /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def +}} +% +\def\pst@arrowdef#1{% + \ifnum\pst@repeatarrowsflag>\z@ + /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c + \fi + \tx@BeginArrow + \psk@arrowscale + \@nameuse{psas@\@nameuse{psk@arrow#1}} + \tx@EndArrow +} +% +\def\pst@repeatarrows{% + \addto@pscode{% + gsave + \ifx\psk@arrowA\@empty\else ArrowAc ArrowA pop pop \fi + \ifx\psk@arrowB\@empty\else ArrowBc ArrowB pop pop pop pop \fi + grestore +}} +% +\def\pst@OpenShowPoints{% + \addto@pscode{% + gsave + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} + newpath + Points aload length 2 div 2 sub cvi /N ED + N 0 ge + { \ifx\psk@arrowA\@empty Dot \else pop pop \fi + N { Dot } repeat + \ifx\psk@arrowB\@empty Dot \else pop pop \fi } + { N 2 mul { pop } repeat } ifelse + grestore +}} +% +\newif\ifPst@custom\Pst@customfalse +\define@boolkey[psset]{pstricks}[Pst@]{noCurrentPoint}[true]{} +\psset[pstricks]{noCurrentPoint=false} +% +% +\def\pscustom{\pst@object{pscustom}} +\long\def\pscustom@i#1{% + \begin@SpecialObj% + \solid@star% + \let\pst@ifcustom\iftrue% + \Pst@customtrue% + \let\begin@ClosedObj\begin@CustomObj% + \let\end@ClosedObj\endgroup% + \def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}% + \let\end@OpenObj\endgroup% + \let\begin@AltOpenObj\begin@CustomObj% + \def\begin@SpecialObj{% + \begingroup% + \pst@misplaced{special graphics object}% + \def\addto@pscode####1{}% + \let\end@SpecialObj\endgroup}% + \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% + \def\psclip##1{\pst@misplaced\psclip}% + \def\pst@repeatarrowsflag{\z@}% + \let\pst@setrepeatarrowsflag\relax% + \showpointsfalse% + \def\pst@linetype{\pslinetype}% + \def\psk@liftpen{\z@}% +% \psset{liftpen=0}% + \def\pst@cp{/currentpoint load stopped pop }% + \def\pst@oplineto{/lineto load stopped { moveto } if }% + \def\pst@optcp##1##2{\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}% + \let\caddto@pscode\addto@pscode% + \def\cuse@par##1{{\use@par##1}}% + \the\pst@customdefs% + \setbox\pst@hbox=\hbox{#1}% + \psk@fillstyle + \pst@stroke + \end@SpecialObj + \let\pst@ifcustom\iffalse + \ignorespaces +} +% +\let\pst@ifcustom\iffalse +% +\def\begin@CustomObj{% + \begingroup% + \use@par% + \addto@pscode{ + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor + }% +} +\def\pst@oplineto{moveto } +\def\pst@cp{} +\def\pst@optcp#1#2{} +\define@key[psset]{pstricks}{liftpen}[0]{% + \ifPst@custom% + \ifcase#1\relax% + \def\psk@liftpen{\z@}% + \def\pst@cp{/currentpoint load stopped pop }% + \def\pst@oplineto{/lineto load stopped { moveto } if }% + \or% + \def\psk@liftpen{1}% + \def\pst@cp{}% + \def\pst@oplineto{/lineto load stopped { moveto } if }% + \or% + \def\psk@liftpen{2}% + \def\pst@cp{}% + \def\pst@oplineto{moveto }% + \fi\fi% +} +\psset[pstricks]{liftpen=0} +\def\psk@liftpen{-1} +% +\define@key[psset]{pstricks}{linetype}[2]{% + \pst@getint{#1}\pslinetype + \ifnum\pst@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@pscode#1{% + \@pstrickserr{Command can only be used in \string\pscustom}\@ehpa} +\let\cuse@par\caddto@pscode +% +\def\tx@MSave{% + /msavematrx + [ tx@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@MRestore{% a typo in pstricks with msavematrx + tx@Dict /msavematrx known { length 0 gt } { false } ifelse + { msavematrx aload pop setmatrix } if +} +% +\newtoks\pst@customdefs +\pst@customdefs{% + \def\newpath{\addto@pscode{newpath}}% + \def\reversepath{\addto@pscode{ reversepath }}% 20131209 hv + \def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}% + \def\rmoveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor rmoveto}}% + \def\closepath{\addto@pscode{closepath}}% + \def\gsave{\begingroup\addto@pscode{gsave}}% + \def\grestore{\endgroup\addto@pscode{grestore}}% + \def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}% + \def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}% + \def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}% + \def\msave{\addto@pscode{\tx@MSave}}% + \def\mrestore{\addto@pscode{\tx@MRestore}}% + \def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}% + \def\stroke{\def\pst@par{}\pst@object{stroke}}% + \def\fill{\def\pst@par{}\pst@object{fill}}% + \def\openshadow{\def\pst@par{}\pst@object{openshadow}}% + \def\closedshadow{\def\pst@par{}\pst@object{closedshadow}}% + \def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}% + \def\lineto{\pst@onecoor{lineto}}% + \def\rlineto{\pst@onecoor{rlineto}}% + \def\curveto{\pst@threecoor{curveto}}% + \def\rcurveto{\pst@threecoor{rcurveto}}% + \def\code#1{\addto@pscode{#1}}% + \def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}% + \def\rcoor{\pst@getcoors{}{}}% + \def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}% + \def\setcolor#1{% + \@ifundefined{\string\color@#1}{}{\addto@pscode{\pst@usecolor{#1}}}}% hv 1.14 2005-12-17 + \def\arrows#1{{\psset[pstricks]{arrows=#1}\pst@addarrowdef}}% + \let\file\pst@rawfile% +} % END \pst@customdefs +% +\def\closedshadow@i{\cuse@par\pst@closedshadow} +\def\openshadow@i{\cuse@par\pst@openshadow} +\def\stroke@i{\cuse@par\pst@stroke}% +\def\fill@i{\cuse@par\psk@fillstyle}% +\def\pst@onecoor#1(#2){% +\pst@@getcoor{#2}% +\addto@pscode{\pst@coor #1}} +\def\pst@threecoor#1(#2)#3(#4)#5(#6){% + \begingroup + \pst@getcoor{#2}\pst@tempa + \pst@getcoor{#4}\pst@tempb +% DG/SR modification begin - Aug. 4, 1999 - Patch 11 +%\pst@getcoor{#6}\pst@tembc + \pst@getcoor{#6}\pst@tempc +% DG/SR modification end + \addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}% + \endgroup} +% +\def\pst@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@tempg + \loop + \ifeof1 \@pstfalse\else\@psttrue\fi + \if@pst + \addto@pscode\pst@tempg + \immediate\read1 to \pst@tempg + \repeat + \fi + \immediate\closein1\relax} +% +\def\tx@NArray{NArray } +\def\tx@Line{Line } +\def\tx@Arcto{Arcto } +\def\tx@CheckClosed{CheckClosed } +\def\tx@Polygon{Polygon } +\define@key[psset]{pstricks}{gangle}[0]{\pst@getangle{#1}\psk@gangle} +\define@boolkey[psset]{pstricks}[Pst@]{trueAngle}[true]{} +\psset[pstricks]{trueAngle=false,gangle=0} +% +\def\tx@Diamond{Diamond } +\def\psdiamond{\def\pst@par{}\pst@object{psdiamond}} +\def\psdiamond@i(#1){\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}} +\def\psdiamond@ii(#1)(#2){% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa + \pst@getcoor{#2}\pst@tempb + \addto@pscode{% + \psline@iii + pop + \psk@dimen + \pst@tempb + \psk@gangle + \pst@tempa + \tx@Diamond + }% + \def\pst@linetype{4}% + \end@ClosedObj} +% +\def\tx@Triangle{Triangle } +\def\pstriangle{\def\pst@par{}\pst@object{pstriangle}} +\def\pstriangle@i(#1){\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}} +\def\pstriangle@ii(#1)(#2){% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa% the center of the baseline + \pst@getcoor{#2}\pst@tempb% the height of the triangle + \addto@pscode{% + \psline@iii + pop % no showpoints option + \psk@dimen % outer/inner/middle + \pst@tempb + \psk@gangle % rotating angle + \pst@tempa + \tx@Triangle + }% + \def\pst@linetype{2}% + \end@ClosedObj} +% +\def\tx@CCA{CCA } +\def\tx@CCA{CCA } +\def\tx@CC{CC } +\def\tx@IC{IC } +\def\tx@BOC{BOC } +\def\tx@NC{NC } +\def\tx@EOC{EOC } +\def\tx@BAC{BAC } +\def\tx@NAC{NAC } +\def\tx@EAC{EAC } +\def\tx@OpenCurve{OpenCurve } +\def\tx@AltCurve{AltCurve } +\def\tx@ClosedCurve{ClosedCurve } +% +\define@key[psset]{pstricks}{curvature}[1 0.1 0]{% + \edef\pst@tempg{#1 }% + \expandafter\psset@@curvature\pst@tempg * * * \@nil} +\def\psset@@curvature#1 #2 #3 #4\@nil{% + \pst@checknum{#1}\pst@tempg + \pst@checknum{#2}\pst@temph + \pst@checknum{#3}\pst@tempi + \edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}} +% +\psset[pstricks]{curvature=1 .1 0} +% +\def\pscurve{\pst@object{pscurve}} +\def\pscurve@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\pscurve@ii% + }% +} +\def\pscurve@ii{% + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi % current point + \psk@curvature\space /c ED /b ED /a ED + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol \psls@symbol OpenSymbolCurve \else \tx@OpenCurve \fi + \ifPst@variableLW \pst@flattenpath \fi + }% + \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% + \end@OpenObj% +} +\def\psecurve{\pst@object{psecurve}} +\def\psecurve@i{\pst@getarrows{\begin@OpenObj\pst@getcoors[\psecurve@ii}} +\def\psecurve@ii{% + \addto@pscode{ + \psk@curvature\space /c ED /b ED /a ED + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol \psls@symbol AltOpenSymbolCurve \else \tx@AltCurve \fi + }% + \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% + \end@OpenObj} +% +\def\psccurve{\pst@object{psccurve}} +\def\psccurve@i{\begin@ClosedObj\pst@getcoors[\psccurve@ii} +\def\psccurve@ii{% + \addto@pscode{% + \psk@curvature\space /c ED /b ED /a ED + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol \psls@symbol ClosedSymbolCurve \else \tx@ClosedCurve \fi + }% + \def\pst@linetype{1}% + \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% + \end@ClosedObj} +% +\def\pscspline{\pst@object{pscspline}}% Christoph Bersch +\def\pscspline@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\pscspline@ii + }% +} +\def\tx@Spline{Spline } +\def\pscspline@ii{% + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi + \tx@setlinejoin + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol + \psls@symbol OpenSymbolSpline + \else + \tx@Spline + \fi + }% + \end@OpenObj +} +% +\define@key[psset]{pstricks}{dotsize}[2pt 2]{% + \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil% + \edef\psk@@dotsize{\pst@number\pst@dimg}% + \let\psk@@@dotsize\pst@tempg% + \edef\psk@dotsize{ /DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }} +\psset[pstricks]{dotsize=2pt 2} +% +\define@key[psset]{pstricks}{dotscale}[1]{% + \pst@getscale{#1}\psk@dotscale + \ifx\psk@dotscale\@empty + \def\psk@xdotscale{1 }% + \def\psk@ydotscale{1 }% + \else + \let\psk@xdotscale\pst@tempg + \let\psk@ydotscale\pst@temph + \fi} +% +\def\pst@Getangle#1#2{% + \pst@getangle{#1}\pst@tempg + \def\pst@temph{0. }% + \ifx\pst@tempg\pst@temph\def#2{}\else\edef#2{\pst@tempg\space rotate }\fi} +% +\define@key[psset]{pstricks}{dotangle}[0]{% + \pst@getangle{#1}\psk@@dotangle + \ifdim\psk@@dotangle\p@=\z@ + \let\psk@dotangle\@empty + \else + \edef\psk@dotangle{\psk@@dotangle rotate }% + \fi} +\psset[pstricks]{dotangle=0} +% +\def\pst@getdotsize{% +\pst@dimg=\psk@@@dotsize\pslinewidth +\advance\pst@dimg\psk@@dotsize\p@ +\pst@dimh=\psk@ydotscale\pst@dimg +\pst@dimg=\psk@xdotscale\pst@dimg +\divide\pst@dimh 2 +\divide\pst@dimg 2\relax} +% +\psset[pstricks]{dotscale=1} +% +\def\psdot{\pst@object{psdot}} +\def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}} +\def\psdot@ii(#1){% + \begin@SpecialObj% +% hv modification 1.13 2005-11-28 + \solid@star% +% hv modification end + \pst@@getcoor{#1}% + \addto@pscode{ + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} + \tx@setStrokeTransparency + \pst@coor Dot}% + \end@SpecialObj} +% +\def\psdots{\pst@object{psdots}} +\def\psdots@i{% + \begin@SpecialObj% + \pst@getcoors[\psdots@ii} +\def\psdots@ii{% + \addto@pscode{ false \tx@NArray \psdots@iii }% + \end@SpecialObj} +\def\psdots@iii{% + \psk@dotsize + \@nameuse{psds@\psk@dotstyle} + \tx@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@SQ{SQ } +\def\tx@ST{ST } +\def\tx@SP{SP } +% +\def\pst@gdot#1{ /Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def } +% +\@namedef{psds@*}{\pst@gdot{ 0 0 DS \tx@SD }} +\@namedef{psds@o}{% + /r2 DS CLW sub def + \pst@gdot{ 0 0 DS \tx@SD \pst@usecolor\psfillcolor SLW 0 0 r2 \tx@SD }} +\@namedef{psds@square*}{ /r1 DS .886 mul def \pst@gdot{r1 \tx@SQ }} +\@namedef{psds@square}{% + /r1 DS .886 mul def /r2 r1 CLW sub def + \pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}} +\@namedef{psds@triangle*}{% + /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def + \pst@gdot{x1 y1 \tx@ST}} +\@namedef{psds@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@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}} +\@namedef{psds@pentagon*}{% + /r1 DS 1.149 mul def + \pst@gdot{r1 \tx@SP}} +\@namedef{psds@pentagon}{% + DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED + \pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}} +\@namedef{psds@+}{% + /DS DS 1.253 mul def + \pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}} +\@namedef{psds@|}{% + \psk@tbarsize CLW mul add 2 div /DS ED + \pst@gdot{0 DS moveto 0 DS neg L stroke}} +% DG: end dead code? +% +\define@key[psset]{pstricks}{dotstyle}[*]{% + \@ifundefined{psds@#1}% + {\@pstrickserr{Dot style `#1' not defined}\@eha}% + {\edef\psk@dotstyle{#1}}} +\psset[pstricks]{dotstyle=*} +% +\def\tx@FontDot{FontDot } +\def\newpsfontdot#1[#2]#3#4{% + \@namedef{psds@#1}{% + /#3 \psk@@dotangle [#2] \tx@FontDot +% DG/SR modification begin - Dec. 12, 1999 - Patch 14 +%/Dot { moveto #4 show } bind def }} + /Dot { moveto gsave \psk@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@FontDot + /Dot { + moveto +% \iftrue +% DG/SR modification begin - Dec. 23, 1999 - Patch 14 +%gsave \pst@usecolor\psfillcolor #5 show grestore +%\fi +%#4 show + gsave \psk@dotscale \pst@usecolor\psfillcolor #5 show grestore % fill first +% \fi + gsave \psk@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@key[psset]{pstricks}{linearc}[0pt]{\pssetlength\pslinearc{#1}} +\psset[pstricks]{linearc=0pt} +% +\def\psline{\pst@object{psline}} +\def\psline@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\psline@ii + }% +} +\def\psline@ii{% + \ifx\pslinestyle\psls@@symbol\addto@pscode{ \psls@symbol SymbolLine }% + \else + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi % current point? + \psline@iii % arc and lineto type + \tx@Line % .pro function + }% + \fi + \end@OpenObj +} +\def\psline@iii{% + \ifdim\pslinearc>\z@ + /r \pst@number\pslinearc def + /Lineto { \tx@Arcto } def + \else + /Lineto /lineto load def + \fi + \tx@setlinejoin % hv 2007-10-13 + \ifshowpoints true \else false \fi +} +% +\def\psLine{\pst@object{psLine}} +\def\psLine@i{% + \pst@getarrows{% + \begin@OpenObj + \psLine@ii}} +\def\psLine@ii(#1){\@ifnextchar({\psLine@iii(#1)}{\psLine@iii(0,0)(#1)}}% +\def\psLine@iii(#1)(#2){% + \pst@getcoor{#1}\pst@tempA + \pst@getcoor{#2}\pst@tempB + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi % current point? + [ % start for coordinate array + \pst@tempB + \pst@tempA % order vice versa + 4 copy Pyth2 \psk@arrowlength ge + { \psline@iii \tx@Line } + { pop pop pop pop pop } ifelse + }% + \end@OpenObj + \ignorespaces +} +\def\psLineSegments{\leavevmode\pst@killglue\pst@object{psLineSegments}} +\def\psLineSegments@i{\pst@getarrows{\psLineSegments@ii}} +\def\psLineSegments@ii(#1)(#2){% + \begingroup + \use@keep@par + \solid@star + \ifpsdoubleline\pst@setdoublesep\fi + \init@pscode + \let\pst@linetype\pst@arrowtype + \pst@addarrowdef + \pst@getcoor{#1}\pst@tempA + \pst@getcoor{#2}\pst@tempB + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi % current point? + [ % start for coordinate array + \pst@tempB + \pst@tempA % order vice versa + 4 copy Pyth2 \psk@arrowlength ge + { \psline@iii \tx@Line } + { pop pop pop pop pop } ifelse + }% + \end@OpenObj + \ignorespaces + \@ifnextchar(\psLineSegments@ii{}% +}% +\def\pst@isnum#1{\pst@isnum@i\zap@space#1 \@empty\@nil}% +\def\pst@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@symbol{(#1)}% + \else% + \pst@isnum{#1#2#3}{% + \pst@cnta='#1#2#3\relax% + \ifnum\pst@cnta>'377\relax% + \@pstrickserr{Number too large!}\@ehpb% + \else% + \def\psk@symbol{(\@backslashchar#1#2#3)}% + \fi% +}{\@pstrickserr{Not a number!}\@ehpb}% + \fi} +% +\define@key[psset]{pstricks}{symbol}[a]{\expandafter\psset@@symbol#1!!\@nil} +\psset[pstricks]{symbol=a} +% +\newdimen\pst@symbolStep +\define@key[psset]{pstricks}{symbolStep}[20pt]{\pst@expandafter\pst@@symbolStep#1\@nil} +\def\pst@@symbolStep#1#2\@nil{\if-#1\pssetlength\pst@symbolStep{-#2pt}\else\pssetlength\pst@symbolStep{#1#2}\fi} +\psset[pstricks]{symbolStep=20pt} + +\newdimen\pst@symbolWidth +\newdimen\pst@symbolLinewidth +\define@key[psset]{pstricks}{symbolWidth}[10pt]{\pssetlength\pst@symbolWidth{#1}} +\define@key[psset]{pstricks}{symbolLinewidth}[0.5pt]{\pssetlength\pst@symbolLinewidth{#1}} +\psset[pstricks]{symbolWidth=10pt,symbolLinewidth=0.5pt} + +\define@key[psset]{pstricks}{symbolFont}[Dingbats]{\def\psk@symbolFont{/#1 }} +\psset[pstricks]{symbolFont=Dingbats} +\define@boolkey[psset]{pstricks}[Pst@]{rotateSymbol}[true]{} +\psset[pstricks]{rotateSymbol=false} +\define@key[psset]{pstricks}{startAngle}[0]{\pst@getangle{#1}\psk@startAngle} +\define@key[psset]{pstricks}{tickAngle}[0]{\pst@getangle{#1}\psk@tickAngle} +\psset[pstricks]{startAngle=0,tickAngle=0} +\define@boolkey[psset]{pstricks}[Pst@]{curveticks}[true]{} +\psset[pstricks]{curveticks=false} + +% +\def\psls@symbol{ + /Symbol \psk@symbol def + /SymbolWidth \pst@number\pst@symbolWidth def + /SymbolLinewidth \pst@number\pst@symbolLinewidth def + /SymStep \pst@number\pst@symbolStep def + \psk@symbolFont findfont %0. [1.0 0.0 0.0 1.0 0.0 0.0] + \pst@number\pst@symbolWidth scalefont %dup + setfont + /rotateSymbol \ifPst@rotateSymbol true \else false \fi def + /tickAngle \psk@tickAngle\space def + /startAngle \psk@startAngle\space def + /CorrAngle \ifx\psk@rot\@empty 0 \else \psk@rot \fi def + /curveticks \ifPst@curveticks true \else false \fi def + \pst@number\pslinewidth SLW +} +\def\psls@@symbol{symbol} +% +\def\psPline{\def\pst@par{}\pst@object{psPline}}% perpendicular to another line B-C +\def\psPline@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\psPline@ii}% \pst@coors on stack +} +\def\psPline@ii{% + \addto@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@noCurrentPoint\else\pst@cp\fi % current point + \psline@iii % arc and lineto type + \tx@Line % .pro function + }% + \end@OpenObj% + \ignorespaces% +} +% +\def\qline(#1)(#2){% + \def\pst@par{}% + \begin@SpecialObj + \def\pst@linetype{0}% + \pst@getcoor{#1}\pst@tempa + \pst@@getcoor{#2}% + \addto@pscode{% + \pst@tempa moveto \pst@coor L + \@nameuse{psls@\pslinestyle}% + }% + \end@SpecialObj} +% +\def\pspolygon{\pst@object{pspolygon}} +\def\pspolygon@i{% + \begin@ClosedObj% + \def\pst@cp{}% + \pst@getcoors[\pspolygon@ii% +} +\def\pspolygon@ii{% + \ifx\pslinestyle\psls@@symbol\addto@pscode{ \psls@symbol SymbolPolygon }% + \else \addto@pscode{\psline@iii \tx@Polygon}% + \fi% + \def\pst@linetype{1}% + \end@ClosedObj} +% +\define@key[psset]{pstricks}{framearc}[0]{\pst@checknum{#1}\psk@framearc} +\psset[pstricks]{framearc=0} +% +\define@key[psset]{pstricks}{cornersize}[relative]{\pst@expandafter\psset@@cornersize{#1}\@nil} +\def\psset@@cornersize#1#2\@nil{% + \if #1a\relax + \def\psk@cornersize{\pst@number\pslinearc false }% + \else\def\psk@cornersize{\psk@framearc true }% + \fi} +\psset[pstricks]{cornersize=relative} +% +\def\tx@Rect{Rect } +\def\tx@OvalFrame{OvalFrame } +\def\tx@Frame{Frame } +% +\define@key[psset]{pstricks}{dimen}[outer]{\pst@expandafter\psset@@dimen{#1}\@nil} +\def\psset@@dimen#1#2\@nil{% + \if #1o\relax% outer + \def\psk@dimen{.5 }% + \else + \if #1m\relax% middle + \def\psk@dimen{0 }% + \else + \if #1i\relax% inner + \def\psk@dimen{-.5 }% + \fi\fi\fi} +\psset[pstricks]{dimen=outer} +% +\def\psframe{\pst@object{psframe}} +\def\psframe@i(#1){% + \@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}} +\def\psframe@ii(#1)(#2){% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa + \pst@@getcoor{#2}% + \addto@pscode{ \psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame }% + \def\pst@linetype{2}% + \showpointsfalse + \end@ClosedObj +} + +\iffalse +\def\psSquare{\pst@object{psSquare}} +\def\psSquare@i(#1)(#2){% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa + \pst@getcoor{#2}\pst@tempb + \addto@pscode{ \psk@cornersize + \pst@tempa /yA ED /xA ED + \pst@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@dimen + \tx@Frame +% grestore + }% + \def\pst@linetype{2}% + \showpointsfalse + \end@ClosedObj +} +\fi +% +\def\psTextFrame{\pst@object{psTextFrame}} +\def\psTextFrame@i(#1)(#2)#3{% + \addbefore@par{ref=c}% to prevent an empty value + \leavevmode% + \pst@killglue + \begingroup + \use@par + \ifx\psk@yref\relax \def\psk@yref{0}\fi% no Baseline possible + \SpecialCoor + \pst@getcoor{#1}\pst@tempA + \pst@getcoor{#2}\pst@tempB + \if@star\psframe*(#1)(#2)\else\psframe(#1)(#2)\fi + \rput(! \pst@tempA \pst@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@xref\space mul add \pst@number\psxunit div + y1 dy \psk@yref\space mul add \pst@number\psyunit div ){#3} + \endgroup + \ignorespaces} +% +\def\tx@BezierNArray{ BezierNArray } +\def\tx@OpenBezier{ OpenBezier } +\def\tx@ClosedBezier{ ClosedBezier } +\def\tx@BezierShowPoints{ BezierShowPoints } +\def\tx@BezierCurve{ BezierCurve } +\def\pst@BezierType{2 } % the default +% +\def\psbezier{\pst@object{psbezier}} +\def\psbezier@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\psbezier@ii% + }% +} +\def\psbezier@ii{% + \addto@pscode{ + \ifPst@noCurrentPoint\else\pst@cp\fi + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol \psls@symbol OpenSymbolBezier + \else + \tx@OpenBezier + \ifshowpoints \tx@BezierShowPoints \fi + \fi + }% + \def\pst@linetype{1}% + \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% + \end@OpenObj} +% +\def\pscbezier{\def\pst@par{}\pst@object{pscbezier}} +\def\pscbezier@i{% + \begin@ClosedObj + \pst@getcoors[\pscbezier@ii} +% +\def\pscbezier@ii{% + \addto@pscode{% + \ifshowpoints true \else false \fi + \ifx\pslinestyle\psls@@symbol \psls@symbol ClosedSymbolBezier + \else + \tx@ClosedBezier + \ifshowpoints \tx@BezierShowPoints \fi + \fi}% +% \chardef\pst@linetype=1 + \def\pst@linetype{1}% + \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% + \end@ClosedObj} +% +\iffalse +\define@key[psset]{pstricks}{epsilon}[0.005]{\pst@checknum{#1}\psk@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@BezierType{#1 }\fi\fi% + \def\pst@par{}\pst@object{psBezier}} +\def\psBezier@i{% + \pst@getarrows{% + \begin@OpenObj + \pst@getcoors[\psBezier@ii% +}} +\def\psBezier@ii{% + \addto@pscode{% + \psk@epsilon % step for Bezier T=0,0+epsilon,0+i*epsilon,...,1 + \pst@BezierType % type of the Bezier curve 2,3,4,... + \tx@BezierCurve + \ifshowpoints \tx@BezierShowPoints \fi + }% + \end@OpenObj} +\fi +% +\define@key[psset]{pstricks}{pType}[0]{\pst@cntg=#1\relax\edef\psk@pType{\the\pst@cntg}} +\psset[pstricks]{pType=0} +\def\tx@Parab{Parab }% given by 1 point and the min/max +\def\tx@Parabo{Parab1 }% given by 2 points for y-a=(x-b)^2 +% +\def\psparabola{\pst@object{psparabola}}% 2009-05-19 (hv) +\def\psparabola@i{\pst@getarrows\psparabola@ii} +\def\psparabola@ii#1(#2)#3(#4){% #2 P #4 SP + \begin@OpenObj + \pst@getcoor{#2}\pst@tempa + \pst@@getcoor{#4}% + \addto@pscode{\pst@tempa \pst@coor + \ifcase\psk@pType + \tx@Parab \or + \tx@Parabo + \fi}% + \end@OpenObj} +\let\parabola\psparabola% compatibility (hv) +% +% +\define@key[psset]{pstricks}{gridwidth}[0.8pt]{\pst@getlength{#1}\psk@gridwidth} +\psset[pstricks]{gridwidth=.8pt} +\define@key[psset]{pstricks}{griddots}[0]{% + \pst@cntg=#1\relax + \edef\psk@griddots{\the\pst@cntg}} +\psset[pstricks]{griddots=0} +\define@key[psset]{pstricks}{gridcolor}[black]{\pst@getcolor{#1}\psgridcolor} +\psset[pstricks]{gridcolor=black} +\define@key[psset]{pstricks}{subgridwidth}[0.4pt]{\pst@getlength{#1}\psk@subgridwidth} +\psset[pstricks]{subgridwidth=0.4pt} +\define@key[psset]{pstricks}{subgridcolor}[gray]{\pst@getcolor{#1}\pssubgridcolor} +\psset[pstricks]{subgridcolor=gray} +\define@key[psset]{pstricks}{subgriddots}[0]{% + \pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}} +\psset[pstricks]{subgriddots=0} +\define@key[psset]{pstricks}{subgriddiv}[5]{% + \pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}} +\psset[pstricks]{subgriddiv=5} +% +\define@key[psset]{pstricks}{gridfont}[NimbusSanL-Regu]{\def\psk@gridfont{/#1 }}% hv 2007-11-13 +\ifpst@psfonts + \psset[pstricks]{gridfont=Helvetica}% +\else + \psset[pstricks]{gridfont=NimbusSanL-Regu}% +\fi +% +\define@key[psset]{pstricks}{gridlabels}[10pt]{\pst@getlength{#1}\psk@gridlabels} +\psset[pstricks]{gridlabels=10pt} +\define@key[psset]{pstricks}{gridlabelcolor}[black]{\pst@getcolor{#1}\psgridlabelcolor} +\psset[pstricks]{gridlabelcolor=black} +\define@key[psset]{pstricks}{xgridoffset}[0]{\pst@getlength{#1}\psk@xgridoffset} +\define@key[psset]{pstricks}{ygridoffset}[0]{\pst@getlength{#1}\psk@ygridoffset} +\psset[pstricks]{xgridoffset=0,ygridoffset=0} + +\def\tx@Grid{Grid } + +\def\psgrid{\pst@object{psgrid}} +\def\psgrid@i{\@ifnextchar({\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}} +\def\psgrid@ii(#1){\@ifnextchar({\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}} +\def\psgrid@iii(#1)(#2){\@ifnextchar({\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}} +\def\psgrid@iv(#1)(#2)(#3){% + \begin@SpecialObj% + \pst@getcoor{#1}\pst@tempA% hv 1.11 + \pst@getcoor{#2}\pst@tempB% hv 1.11 + \pst@@getcoor{#3}% + \ifnum\psk@subgriddiv>1\relax + \addto@pscode{ + /xGridOffset \psk@xgridoffset\space def + /yGridOffset \psk@ygridoffset\space def + gsave + \tx@setStrokeTransparency + \psk@subgridwidth SLW + \pst@usecolor\pssubgridcolor + \pst@tempB \pst@coor \pst@tempA % hv 1.11 +% \pst@number\psxunit \pst@number\psyunit % hv 1.11 + \pst@number\psxunit abs \pst@number\psyunit abs % hv 1.11 + \psk@subgriddiv\space \psk@subgriddots\space + {} 0 + \psk@gridfont findfont 0 scalefont setfont % hv 1.16 + \tx@Grid + grestore + }% + \fi% + \addto@pscode{ + gsave + /xGridOffset \psk@xgridoffset def + /yGridOffset \psk@ygridoffset def + \tx@setStrokeTransparency + \psk@gridwidth SLW + \pst@usecolor\psgridcolor + \pst@tempB \pst@coor \pst@tempA % hv 1.11 + \pst@number\psxunit abs \pst@number\psyunit abs % hv 1.11 +% \pst@number\psxunit \pst@number\psyunit % hv 1.11 + 1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor } + \psk@gridlabels + \psk@gridfont findfont \psk@gridlabels scalefont setfont % hv 1.16 + \tx@Grid + grestore + }% + \end@SpecialObj} +% +\newif\ifpsmathbox +\psmathboxtrue +\def\pst@mathflag{\z@} +\newtoks\everypsbox +\let\pst@thisbox\relax +% +\long\def\pst@makenotverbbox#1#2{% + \edef\pst@mathflag{% + \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else\z@\fi\else\z@\fi}% + \setbox\pst@hbox=\hbox{% + \ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi% + {\pst@thisbox\the\everypsbox#2}% + \ifnum\pst@mathflag>\z@$\fi% $ + }% + #1} +% +\def\pst@makeverbbox#1{% + \def\pst@afterbox{#1}% + \edef\pst@mathflag{\ifpsmathbox\ifmmode\ifinner1\else2\fi\else\z@\fi\else\z@\fi}% + \afterassignment\pst@beginbox% + \setbox\pst@hbox\hbox% +} +\def\pst@beginbox{% + \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi% + \bgroup\aftergroup\pst@endbox% + \pst@thisbox% + \the\everypsbox% +} +\def\pst@endbox{% + \ifnum\pst@mathflag>\z@\relax$\fi% $ + \egroup% + \pst@afterbox% +} +\def\pst@makebox{\pst@@makebox} +\def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}} +\def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}} +\psverbboxfalse +\def\pst@longbox{% + \def\pst@makebox{% + \gdef\pst@makebox{\pst@@makebox}% + \pst@makelongbox% + }% +} +\def\pst@makelongbox#1{% + \def\pst@afterbox{#1}% + \edef\pst@mathflag{% + \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi% + }% + \setbox\pst@hbox\hbox\bgroup + \aftergroup\pst@afterbox + \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi + \begingroup + \pst@thisbox + \the\everypsbox% +} +\def\pst@endlongbox{% + \endgroup + \ifnum\pst@mathflag>\z@$\fi %$ + \egroup% +} +\def\pslongbox#1#2{% + \@namedef{#1}{\pst@longbox#2}% + \@namedef{end#1}{\pst@endlongbox}} +% +\newdimen\psframesep +\define@key[psset]{pstricks}{framesep}[3pt]{\pssetlength\psframesep{#1}} +\psset[pstricks]{framesep=3pt} +% +\define@boolkey[psset]{pstricks}[ps]{boxsep}[true]{} +\psset[pstricks]{boxsep} +% +\def\pst@useboxpar{% + \use@par + \if@star + \let\pslinecolor\psfillcolor + \solid@star + \let\solid@star\relax + \fi + \ifpsdoubleline \pst@setdoublesep \fi} +% +\def\psframebox{\def\pst@par{}\pst@object{psframebox}} +\def\psframebox@i{\pst@makebox\psframebox@ii} +\def\psframebox@ii{% + \begingroup + \pst@useboxpar + \pst@dima=\pslinewidth + \advance\pst@dima by \psframesep + \pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima + \pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima + \pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima + \setbox\pst@hbox=\hbox{% + \ifpsboxsep\kern\pst@dima\fi + \begin@ClosedObj + \addto@pscode{% + \psk@cornersize % arcradius boolean + \pst@number\pst@dima neg + \pst@number\pst@dimb neg + \pst@number\pst@dimc + \pst@number\pst@dimd + .5 + \tx@Frame% + }% + \def\pst@linetype{2}% + \showpointsfalse + \end@ClosedObj + \box\pst@hbox + \ifpsboxsep\kern\pst@dima\fi% + }% + \ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi + \leavevmode\box\pst@hbox + \endgroup} +% +\def\psdblframebox{\def\pst@par{}\pst@object{psdblframebox}} +\def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i} +% +\define@key[psset]{pstricks}{clipcommand}[clip]{\def\pst@clipcommand{#1 }} +\psset[pstricks]{clipcommand=clip}% alternative is eoclip +% +\def\psclip{\@ifnextchar[\psclip@i{\psclip@i[]}}% +\def\psclip@i[#1]#2{% + \leavevmode% + \begingroup% + \ifx\relax#1\relax\else\psset{#1}\fi% + \begin@psclip% + \begingroup% + \def\use@pscode{% + \pstVerb{ + \pst@dict + /mtrxc CM def + CP CP T + \tx@STV + \psk@origin + \psk@swapaxes + newpath + \pst@code + \pst@clipcommand + newpath + mtrxc setmatrix + moveto + 0 setgray + end + }% + \gdef\pst@code{}}% + \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% + \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% + \hbox to\z@{#2}% + \endgroup% + \def\endpsclip{% + \end@psclip% + \endgroup}% + \ignorespaces} +% +\def\endpsclip{\pst@misplaced\endpsclip} +\let\begin@psclip\relax +\def\end@psclip{\pstVerb{currentpoint initclip moveto}} +% +\def\AltClipMode{% + \def\end@psclip{\pstVerb{\pst@grestore}}% + \def\begin@psclip{\pstVerb{gsave}}} + \def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}} +% DG modification begin - Apr. 3, 1997 +% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus) +%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}} +\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}} +% DG modification end +\def\clipbox@@#1{% + \pssetlength\pst@dimg{#1}% + \leavevmode\hbox{% + \begin@psclip% + \pst@Verb{ + CM \tx@STV CP T newpath + /a \pst@number\pst@dimg def + /w \pst@number{\wd\pst@hbox}a add def + /d \pst@number{\dp\pst@hbox}a add neg def + /h \pst@number{\ht\pst@hbox}a add def + a neg d moveto + a neg h L + w h L + w d L + closepath + \pst@clipcommand + newpath + 0 0 moveto + setmatrix}% + \unhbox\pst@hbox% + \end@psclip}} +% +\def\psshadowbox{\def\pst@par{}\pst@object{psshadowbox}} +\def\psshadowbox@i{\pst@makebox\psshadowbox@ii} +\def\psshadowbox@ii{% +\begingroup +\pst@useboxpar +\psshadowtrue +\psboxseptrue +\def\psk@shadowangle{-45 }% +\setbox\pst@hbox=\hbox{\psframebox@ii}% +\pst@dimh=\psk@shadowsize\p@ +\pst@dimh=.7071\pst@dimh +\pst@dimg=\dp\pst@hbox +\advance\pst@dimg\pst@dimh +\dp\pst@hbox=\pst@dimg +\pst@dimg=\wd\pst@hbox +\advance\pst@dimg\pst@dimh +\wd\pst@hbox=\pst@dimg +\leavevmode +\box\pst@hbox +\endgroup} +% +\def\pscirclebox{\pst@object{pscirclebox}} +\def\pscirclebox@i{\pst@makebox\pscirclebox@ii} +\def\pscirclebox@ii{% + \begingroup + \pst@useboxpar + \setbox\pst@hbox=\hbox{% + \pst@nodehook + \pscirclebox@iii + \box\pst@hbox}% + \ifpsboxsep\pscirclebox@sep\fi + \leavevmode + \box\pst@hbox + \endgroup + \ignorespaces +} +\def\pscirclebox@iii{% +\if@star + \pslinewidth\z@ + \pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor + newpath \pscirclebox@iv \tx@SD end}% +\else + \begin@ClosedObj + \def\pst@linetype{4}\showpointsfalse + \addto@pscode{ \pscirclebox@iv\space CLW 2 div add 0 360 arc closepath}% + \end@ClosedObj +\fi +} +% +\def\pscirclebox@iv{ + \pst@number{\wd\pst@hbox} 2 div + \pst@number{\ht\pst@hbox} \pst@number{\dp\pst@hbox} add 2 div + 2 copy \pst@number{\dp\pst@hbox} sub 4 2 roll + \tx@Pyth \pst@number\psframesep add } +% +\def\pscirclebox@sep{% + \pst@dimn=\ht\pst@hbox% % the height of the box + \advance\pst@dimn by \dp\pst@hbox% % the depth of the box added to \pst@dimn + \divide\pst@dimn by 2% % \pst@dimn/2 + \pst@dimm=0.5\wd\pst@hbox% % the half of the width + \pst@Pyth\pst@dimm\pst@dimn\pst@dimo% % the diameter + \advance\pst@dimo by \pslinewidth% + \advance\pst@dimo by \psframesep% + \advance\pst@dimn by -\pst@dimo% + \setbox\pst@hbox=\hbox to 2\pst@dimo{\hss\vbox{\kern-\pst@dimn\box\pst@hbox}\hss}% + \advance\pst@dimn by -\dp\pst@hbox% + \dp\pst@hbox=-\pst@dimn} +% +\let\pst@nodehook\relax +% +\def\psCirclebox{\def\pst@par{}\pst@object{psCirclebox}} +\def\psCirclebox@i{\pst@makebox\psCirclebox@ii} +\def\psCirclebox@ii{% + \begingroup + \pst@useboxpar + \pst@dima=\ht\pst@hbox + \advance\pst@dima by -\dp\pst@hbox + \divide\pst@dima\tw@ + \pssetlength\pst@dimb\psk@radius + \setbox\pst@hbox=\hbox{% + \pst@nodehook + \pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}% + \box\pst@hbox}% + \ifpsboxsep \psCirclebox@sep \fi + \leavevmode + \box\pst@hbox + \endgroup +} +% +\def\psCirclebox@sep{% + \pst@dimc=\pst@dimb + \advance\pst@dimb-\pst@dima + \advance\pst@dima\pst@dimc + \setbox\pst@hbox=\hbox to\tw@\pst@dimc{% + \hss\vrule width \z@ depth \pst@dimb height \pst@dima + \box\pst@hbox\hss}} +% +\def\psovalbox{\def\pst@par{}\pst@object{psovalbox}} +\def\psovalbox@i{\pst@makebox{\psovalbox@ii}} +\def\psovalbox@ii{% + \begingroup + \pst@useboxpar + \psovalbox@iii + \ifpsboxsep\psovalbox@sep\fi + \leavevmode + \box\pst@hbox + \endgroup} +% +\def\psovalbox@iii{% + \psovalbox@iv + \setbox\pst@hbox=\hbox{% + \begin@ClosedObj + \addto@pscode{% + 0 360 + \pst@number\pst@dimc CLW 2 div sub + \pst@number\pst@dimd CLW 2 div sub + \pst@number\pst@dima + \pst@number\pst@dimb + \tx@Ellipse + closepath }% + \def\pst@linetype{2}% + \end@ClosedObj + \unhbox\pst@hbox}} +% +\def\psovalbox@iv{% + \pst@dimc=\pslinewidth\advance\pst@dimc\psframesep + \pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox + \pst@dima=.5\wd\pst@hbox + \pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox + \pst@dimd=.707\pst@dimd + \advance\pst@dimd\pst@dimc + \advance\pst@dimc.707\wd\pst@hbox} +% +\def\psovalbox@sep{% + \setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}% + \pst@dimg=\pst@dimd + \advance\pst@dimg-\pst@dimb + \dp\pst@hbox=\pst@dimg + \advance\pst@dimd\pst@dimb + \ht\pst@hbox=\pst@dimd} +% +\def\psdiabox{\def\pst@par{}\pst@object{psdiabox}} +\def\psdiabox@i{\pst@makebox{\psdiabox@ii}} +\def\psdiabox@ii{% +\begingroup +\pst@useboxpar +\psdiabox@iii +\ifpsboxsep\psdiabox@sep\fi +\leavevmode +\box\pst@hbox +\endgroup} +\def\psdiabox@iv{% +\pst@dimg=.707\pslinewidth +\advance\pst@dimg.707\psframesep +\pst@dima=\wd\pst@hbox +\divide\pst@dima 2 +\pst@dimc=\pst@dima +\advance\pst@dimc\pst@dimg +\pst@dimd=\ht\pst@hbox +\advance\pst@dimd\dp\pst@hbox +\divide\pst@dimd 2 +\pst@dimb=\pst@dimd +\advance\pst@dimb-\dp\pst@hbox +\advance\pst@dimd\pst@dimg} +\def\psdiabox@iii{% +\psdiabox@iv +\setbox\pst@hbox=\hbox{% +\begin@ClosedObj +\addto@pscode{% +\psline@iii +pop +.5 +\pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul +0 +\pst@number\pst@dima \pst@number\pst@dimb +\tx@Diamond}% +\def\pst@linetype{4}% +\end@ClosedObj +\box\pst@hbox}} +\def\psdiabox@sep{% +\setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}% +\multiply\pst@dimd 2 +\advance\pst@dimd\pst@dimb +\ht\pst@hbox\pst@dimd +\advance\pst@dimd-2\pst@dimb +\dp\pst@hbox\pst@dimd} +% +\define@key[psset]{pstricks}{trimode}[U]{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil} +\def\psset@@trimode#1#2#3\@nil{% + \let\pst@tempg#1\relax + \ifx\pst@tempg* + \let\psk@@trimode\@empty + \let\pst@tempg#2\relax + \else + \let\psk@@trimode\relax + \fi + \edef\psk@trimode{% + \ifx R\pst@tempg 1 % Right + \else + \ifx D\pst@tempg 2 % Down + \else + \ifx L\pst@tempg 3 % Left + \else + \ifx l\pst@tempg 4 % |_ + \else + \ifx r\pst@tempg 5 % _| + \else 0 \fi % Up + \fi + \fi + \fi + \fi}% +} +\psset[pstricks]{trimode=U} +% +\def\pstribox{\pst@object{pstribox}} +\def\pstribox@i{\pst@makebox{\pstribox@ii}} +\def\pstribox@ii{% + \begingroup + \pst@useboxpar + \pstribox@iii + \ifpsboxsep\pstribox@sep\fi + \leavevmode + \box\pst@hbox + \endgroup} +% +\def\pstribox@iii{% + \pstribox@iv + \setbox\pst@hbox=\hbox{% + \begin@ClosedObj + \addto@pscode{ + \psline@iii + pop + 0.5 + \pst@number\pst@dimc % Width + \pst@number\pst@dimd % Height + \ifcase\psk@trimode + \or %% 0 + exch \or %% 1 + \or %% 2 + exch \or %% 3 + \or %% 4 + \or %% 5 + \fi + \psk@trimode -90 mul + \pst@number\pst@dima % x coor for text + \pst@number\pst@dimb % y coor for text + \tx@Triangle}% + \def\pst@linetype{2}% + \end@ClosedObj + \box\pst@hbox}% +} +% +\def\pstribox@iv{% + \pst@dimh=\pslinewidth + \advance\pst@dimh\psframesep + \pst@dimg=\ht\pst@hbox + \advance\pst@dimg-\dp\pst@hbox % totalheight + \divide\pst@dimg 2 % 0.5 totalheight + \edef\pst@tempa{\number\pst@dimg sp}% % For use by nodes. + \ifodd\psk@trimode % + \pst@dimb\pst@dimg + \else + \pst@dima=\wd\pst@hbox + \divide\pst@dima 2 + \fi + \ifcase\psk@trimode + \pst@dimb=-\dp\pst@hbox + \advance\pst@dimb-\pst@dimh + \or\pst@dima=-\pst@dimh + \or\pst@dimb=\ht\pst@hbox + \advance\pst@dimb\pst@dimh + \or\pst@dima=\wd\pst@hbox + \advance\pst@dima\pst@dimh + \fi + \pst@dimd=\dp\pst@hbox + \advance\pst@dimd\ht\pst@hbox + \ifx\psk@@trimode\relax% no star for trimode= + \pst@dimc=\wd\pst@hbox + \advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh + \multiply\pst@dimc 2 + \advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh + \multiply\pst@dimd 2 + \else% trimode=R*,L*,U*,D* + \ifodd\psk@trimode + \advance\pst@dimd 1.1547\wd\pst@hbox + \advance\pst@dimd 3.4641\pst@dimh + \pst@dimc=.866\pst@dimd + \else + \advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2) + \advance\pst@dimd 3\pst@dimh + \pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3)) + \fi + \fi} +% +\def\pstribox@sep{% +\ifodd\psk@trimode +\advance\pst@dimb.5\pst@dimd +\ht\pst@hbox=\pst@dimb +\advance\pst@dimd-\pst@dimb +\dp\pst@hbox=\pst@dimd +\else +\setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}% +\global\pst@dimg=.5\pst@dimc +\fi +\ifcase\psk@trimode +\dp\pst@hbox-\pst@dimb +\advance\pst@dimd\pst@dimb +\ht\pst@hbox\pst@dimd +\or +\pst@dimg=.5\wd\pst@hbox +\global\advance\pst@dimg-\pst@dima +\setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}% +\or +\ht\pst@hbox\pst@dimb +\advance\pst@dimd-\pst@dimb +\dp\pst@hbox\pst@dimd +\or +\pst@dimg=\pst@dimc +\advance\pst@dimg-\pst@dima +\global\advance\pst@dimg.5\wd\pst@hbox +\setbox\pst@hbox\hbox to \pst@dimc{% +\hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}% +\fi} +% +\define@key[psset]{pstricks}{arcsepA}[0]{\pst@getlength{#1}\psk@arcsepA} +\define@key[psset]{pstricks}{arcsepB}[0]{\pst@getlength{#1}\psk@arcsepB} +\define@key[psset]{pstricks}{arcsep}[0]{% + \pst@getlength{#1}\psk@arcsepA\let\psk@arcsepB\psk@arcsepA} +\psset[pstricks]{arcsep=0} +\def\tx@ArcArrow{ArcArrow } +% +\def\psarc{\pst@object{psarc}} +\def\psarc@i{\@ifnextchar({\psarc@iii}{\psarc@ii}} +\def\psarc@ii#1{\addto@par{arrows=#1}\@ifnextchar(\psarc@iii{\psarc@iii(0,0)}} +\def\psarc@iii(#1)#2#3#4{% + \pst@getangle{#3}\pst@tempa + \pst@getangle{#4}\pst@tempb + \ifx\pst@tempa\pst@tempb + \else + \begin@OpenObj + \pst@@getcoor{#1}% + \pssetlength\pst@dima{#2}% + \addto@pscode{\psarc@iv \psarc@v + \ifPst@variableLW \pst@flattenpath \fi + }% + \gdef\psarc@type{0}% + \showpointsfalse + \end@OpenObj + \fi +} +% +\def\psarcOA{\pst@object{psarcOA}}% \psarcOA[..](O)(A){angle1}{angle2} +\def\psarcOA@i{\@ifnextchar({\psarcOA@iii}{\psarcOA@ii}} +\def\psarcOA@ii#1{\addto@par{arrows=#1}\@ifnextchar(\psarcOA@iii{\psarcOA@iii(0,0)}} +\def\psarcOA@iii(#1)(#2)#3#4{% + \pst@getangle{#3}\pst@tempa + \pst@getangle{#4}\pst@tempb + \ifx\pst@tempa\pst@tempb + \else + \begin@OpenObj + \pst@getcoor{#1}\pst@tempA + \pst@getcoor{#2}\pst@tempB + \addto@pscode{ + \pst@tempA 2 copy /y ED /x ED \pst@tempB Pyth2 /r ED + x y translate + /c 57.2957 r \tx@Div def + /angleA + \pst@tempa + \psk@arcsepA c mul 2 div + \ifcase\psarc@type add \or sub \fi def + /angleB + \pst@tempb + \psk@arcsepB c mul 2 div + \ifcase\psarc@type sub \or add \fi def + \ifshowpoints\psarc@showpoints\fi + \ifx\psk@arrowA\@empty + \ifnum\psk@liftpen=2 + r angleA \tx@PtoC moveto + \fi + \fi + /angleAtoB angleB angleA gt { true }{ false } ifelse def + 0 0 r + angleA + \ifx\psk@arrowA\@empty\else + { ArrowA CP } + r 0 gt \pslbrace + { \ifcase\psarc@type add \or sub \fi } \psrbrace\pslbrace + { \ifcase\psarc@type sub \or add \fi } \psrbrace ifelse +% { \ifcase\psarc@type add \or sub \fi } + \tx@ArcArrow +% dup AngleA gt AngleAtoB exor { neg } fi + \fi + angleB + \ifx\psk@arrowB\@empty\else + { ArrowB } + r 0 gt \pslbrace + { \ifcase\psarc@type sub \or add \fi } \psrbrace\pslbrace + { \ifcase\psarc@type add \or sub \fi } \psrbrace ifelse +% { \ifcase\psarc@type sub \or add \fi } + \tx@ArcArrow + dup angleA gt angleAtoB xor { pop angleA } if + \fi + \ifcase\psarc@type arc \or arcn \fi + \ifPst@variableLW \pst@flattenpath \fi + x neg y neg translate + }% + \gdef\psarc@type{0}% + \showpointsfalse + \end@OpenObj + \fi +} +\def\psarc@iv{% + \pst@coor /y ED /x ED + /r \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dima \fi def + /c 57.2957 r \tx@Div def + /angleA + \pst@tempa + \psk@arcsepA c mul 2 div + \ifcase\psarc@type add \or sub \fi + def + /angleB + \pst@tempb + \psk@arcsepB c mul 2 div + \ifcase\psarc@type sub \or add \fi + def + \ifshowpoints\psarc@showpoints\fi + \ifx\psk@arrowA\@empty + \ifnum\psk@liftpen=2 + r angleA \tx@PtoC + y add exch x add exch moveto + \fi + \fi} +% hv ---- 1.10 2005-05-05 ----------------------> hv begin +\def\psarc@v{% + /angleAtoB angleB angleA gt { true }{ false } ifelse def + x y r + angleA + \ifx\psk@arrowA\@empty\else + { ArrowA CP } + r 0 gt \pslbrace + { \ifcase\psarc@type add \or sub \fi } \psrbrace\pslbrace + { \ifcase\psarc@type sub \or add \fi } \psrbrace ifelse +% { \ifcase\psarc@type add \or sub \fi } + \tx@ArcArrow +% dup AngleA gt AngleAtoB exor { neg } fi + \fi + angleB + \ifx\psk@arrowB\@empty\else + { ArrowB } + r 0 gt \pslbrace + { \ifcase\psarc@type sub \or add \fi } \psrbrace\pslbrace + { \ifcase\psarc@type add \or sub \fi } \psrbrace ifelse +% { \ifcase\psarc@type sub \or add \fi } + \tx@ArcArrow + dup angleA gt angleAtoB xor { pop angleA } if + \fi + \ifcase\psarc@type arc \or arcn \fi +} +% hv ----- 1.10 2005-05-05 ------------------------> end +% +\def\psarc@type{0} +\def\psarc@showpoints{% + gsave + newpath + x y moveto + x y r \pst@tempa \pst@tempb + \ifcase\psarc@type arc \or arcn \fi + closepath + CLW 2 div SLW + [ \psk@dash\space ] 0 setdash stroke + grestore } +\def\psarcn{\def\pst@par{}\pst@object{psarcn}} +\def\psarcn@i{\def\psarc@type{1}\psarc@i} +% +\def\psarcAB{\pst@object{psarcAB}}% hv 2008-11-26 +\def\psarcAB@i{% + \addbefore@par{psscale=1}% be sure, that it is defined + \pst@getarrows{% + \begin@OpenObj% + \pst@getcoors{}% + \psarcAB@ii + }% +} +\def\psarcAB@ii{% + \addto@pscode{ + /y ED /x ED /yA ED /xA ED /yB ED /xB ED + /r xB yB x y Pyth2 \psk@psscale\space mul def + /c 57.2957 r \tx@Div def + /angleA + yA y sub xA x sub atan + \psk@arcsepA c mul 2 div + \ifcase\psarc@type add \else sub \fi + def + /angleB + yB y sub xB x sub atan + \psk@arcsepB c mul 2 div + \ifcase\psarc@type sub \else add \fi + def + \ifx\psk@arrowA\@empty + \ifnum\psk@liftpen=2 + r angleA \tx@PtoC + y add exch x add exch moveto + \fi + \fi + \psarc@v}% + \gdef\psarc@type{0}% + \showpointsfalse% + \end@OpenObj% +} +\def\psarcnAB{\def\pst@par{}\pst@object{psarcnAB}} +\def\psarcnAB@i{\def\psarc@type{1}\psarcAB@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@object{psellipticwedge}} +\def\psellipticwedge@i(#1){% + \@ifnextchar({\psellipticwedge@ii(#1)}{\psellipticwedge@ii(0,0)(#1)}} +\def\psellipticwedge@ii(#1)(#2)#3#4{% + \begin@ClosedObj + \pst@getangle{#3}\pst@tempa + \pst@getangle{#4}\pst@tempb + \pst@getcoor{#1}\pst@tempc + \pst@@getcoor{#2}% + \def\pst@linetype{1}% + \addto@pscode{% + \pst@coor /ry ED /rx ED + \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi + \pst@tempa + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempa } + { rx abs ry abs sub cvi 0 eq { \pst@tempa }{ rx ry + \tx@UserCoor exch \pst@tempa tan mul exch atan + \pst@tempa 180 div 0.5 add floor + 180 mul sub } ifelse } ifelse + \fi + \pst@tempb + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempb } + { rx abs ry abs sub cvi 0 eq { \pst@tempb }{ rx ry + \tx@UserCoor exch \pst@tempb tan mul exch atan + \pst@tempb 180 div 0.5 add floor + 180 mul sub } ifelse } ifelse + \fi + rx ry + \pst@tempc moveto + \ifdim\psk@dimen\p@=\z@\else + \psk@dimen CLW mul dup 3 1 roll + sub 3 1 roll sub exch + \fi + \pst@tempc + \tx@Ellipse + closepath + }% + \showpointsfalse + \end@ClosedObj% +} +% +% Code mainly from "pstricks.tex'' 0.94 beta (TvZ) +% +\def\psellipticarcn{\pst@object{psellipticarcn}} +\def\psellipticarcn@i{\let\if@psarcn\iftrue\psellipticarc@ii} +% +\def\psellipticarc{\pst@object{psellipticarc}} +\def\psellipticarc@i{\let\if@psarcn\iffalse\psellipticarc@ii} + +\define@boolkey[psset]{pstricks}[Pst@]{correctAngle}[true]{} +\psset{correctAngle} + +\let\if@psarcn\iffalse + +\def\psellipticarc@ii{\pst@getarrows\psellipticarc@iii} +\def\psellipticarc@iii(#1){% + \@ifnextchar({\psellipticarc@iv(#1)}{\psellipticarc@iv(0,0)(#1)}} +\def\psellipticarc@iv(#1)(#2)#3#4{% +% \addbefore@par{correctAngle=false} + \pst@getangle{#3}\pst@tempc % start angle + \pst@getangle{#4}\pst@tempd % end angle + \ifx\pst@tempc\pst@tempd + \else % same angles? then do nothing + \begin@OpenObj + \pst@getcoor{#1}\pst@tempa % origin + \pst@getcoor{#2}\pst@tempb % a b + \addto@pscode{ + \psellipticarc@definearg \psellipticarc@draw + \ifPst@variableLW \pst@flattenpath \fi + \ifshowpoints{} + gsave + xOrig yOrig T % set origin to ellipse origin + \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi + rx ry scale % now we draw a circle :-) + 1 \pst@tempc % start angle + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempc } + { rx abs ry abs sub cvi 0 eq { \pst@tempc }{ rx ry + \tx@UserCoor exch \pst@tempc tan mul exch atan + \pst@tempc 180 div 0.5 add floor + 180 mul sub } ifelse } ifelse + \fi + PtoC moveto + 0 0 lineto + 1 \pst@tempd % end angle + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempd } + { rx ry \tx@UserCoor exch \pst@tempd tan mul exch atan + \pst@tempd 180 div .5 add floor 180 mul sub } ifelse + \fi + PtoC lineto 0 0 lineto + closepath + % \ifcase\psarc@type arc \or arcn \fi + CLW 3 div \pst@number\psunit div SLW + [ 1 1 \tx@UserCoor 2 mul ] 0 setdash + stroke + grestore + \fi + }% + \showpointsfalse + \end@OpenObj + \fi +} +\def\psellipticarc@definearg{% +% \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi + \pst@tempa /yOrig ED /xOrig ED % Origin + \pst@tempb % radii. Now adjust: + \ifdim\psk@dimen\p@=\z@\else + \psk@dimen CLW mul dup 3 1 roll + sub 3 1 roll sub exch + \fi + /ry ED /rx ED % a b + /angleA + /d { \if@psarcn sub \else add \fi } def +% \pst@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@tempc + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempc } + { rx ry \tx@UserCoor exch \pst@tempc tan mul exch atan + \pst@tempc 180 div .5 add floor 180 mul sub } ifelse + \fi + \psk@arcsepA 2 div + ArcAdjust + def + /angleB + /d { \if@psarcn add \else sub \fi } def +% \pst@tempd + \pst@tempd + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempd } + { rx ry \tx@UserCoor exch \pst@tempd tan mul exch atan + \pst@tempd 180 div .5 add floor 180 mul sub } ifelse + \fi + \psk@arcsepB 2 div ArcAdjust def +% \ifshowpoints\psellipticarc@showpoints\fi + \ifx\psk@arrowA\@empty + \ifnum\psk@liftpen=2 + angleA cos rx mul xOrig add + angleA sin ry mul yOrig add + moveto + \fi% + \fi% +} +\def\psellipticarc@draw{% + 0 0 1 + angleA + \ifx\psk@arrowA\@empty\else + { ArrowA CP } + { \if@psarcn sub \else add \fi } + EllipticArcArrow + \fi + angleB + \ifx\psk@arrowB\@empty\else + { ArrowB } + { \if@psarcn add \else sub \fi } + EllipticArcArrow + \fi + /mtrx CM def + xOrig yOrig T + \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi + rx ry scale + \pst@ifcustom\else + 0 0 moveto + exch dup dup % end start start start + cos exch sin moveto % end start + exch % start end + \fi +%% \if@star 0 0 moveto \fi % for filling + \if@psarcn arcn \else arc \fi +%% \if@star 0 0 moveto \fi + mtrx setmatrix% +} +\def\psellipticarc@showpoints{% + gsave + /mtrx CM def + xOrig yOrig T + rx ry scale + 0 0 moveto + 0 0 1 + \pst@tempc % start angle + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempc } + { rx abs ry abs sub cvi 0 eq { \pst@tempc }{ rx ry + \tx@UserCoor exch \pst@tempc tan mul exch atan + \pst@tempc 180 div 0.5 add floor + 180 mul sub } ifelse } ifelse + \fi + \pst@tempd % end angle + \ifPst@correctAngle + cvi 90 mod 0 eq { \pst@tempd } + { rx abs ry abs sub cvi 0 eq { \pst@tempd } { rx ry + \tx@UserCoor exch \pst@tempd tan mul exch atan + \pst@tempd 180 div 0.5 add floor + 180 mul sub } ifelse } ifelse + \fi + \ifcase\psarc@type arc \or arcn \fi + closepath + mtrx setmatrix + CLW 2 div SLW + [ \psk@dash\space ] 0 setdash + stroke + grestore % +} +\def\pscircle{\def\pst@par{}\pst@object{pscircle}} +\def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}} +\def\pscircle@do(#1)#2{% + \if@star{\use@par\qdisk(#1){#2}}% qdisk does not allow + \else% to use opacity option + \addbefore@par{dimen=middle}% + \begin@ClosedObj + \pst@@getcoor{#1}% + \pssetlength\pst@dimc{#2}% + \def\pst@linetype{4}% + \addto@pscode{ + \pst@coor 2 copy moveto + \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi + \psk@dimen CLW mul round % prevent rounding errors + sub + dup 0 rmoveto + 0 360 arc + \ifPst@variableLW \pst@flattenpath \fi + closepath + }% + \showpointsfalse + \end@ClosedObj + \fi + \ignorespaces} +% +\def\pscircleOA{\def\pst@par{}\pst@object{pscircleOA}}% hv 2008-04-14 +\def\pscircleOA@i(#1)(#2){% + \addbefore@par{dimen=middle}% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempA + \pst@@getcoor{#2}% + \def\pst@linetype{4}% + \addto@pscode{ + \pst@tempA % x0 y0 + 2 copy % xO yO xO yO + \pst@coor % xO yO xO yO xA yA + Pyth2 % xO yO radius + \psk@dimen CLW mul sub + \if@star \tx@SD \else + 0 360 arc + closepath + \fi }% + \showpointsfalse + \end@ClosedObj + \ignorespaces} +% +\def\qdisk(#1)#2{% + \def\pst@par{}% + \begin@SpecialObj + \pst@@getcoor{#1}% + \pssetlength\pst@dimg{#2}% + \addto@pscode{ + \pst@coor + \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimg \fi +% \pst@number\pst@dimg + \tx@SD }% + \end@SpecialObj} +% +\define@key[psset]{pstricks}{radius}[0.25cm]{\pst@@getlength{#1}\psk@radius} +\psset[pstricks]{radius=.25cm} +% +\def\psCircle{\pst@object{psCircle}}% same as \pscircle, but uses \psk@radius +\def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}} +\def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}} +% +\def\psRing{\def\pst@par{}\pst@object{psRing}}%% hv 20130405 +\def\psRing@i{\@ifnextchar({\psRing@ii}{\psRing@ii(0,0)}} +\def\psRing@ii(#1){% + \pst@@getcoor{#1}% + \@ifnextchar[{\psRing@iii}{\psRing@iii[0,360]}} +\def\psRing@iii[#1,#2]#3#4{% origin, inner radius, outer radius + \begin@ClosedObj + \pssetlength\pst@dimc{#3}% + \edef\pst@tempA{\ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi}% + \pssetlength\pst@dimd{#4}% + \edef\pst@tempB{\ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimd \fi}% + \pst@getangle{#1}\pst@tempa + \pst@getangle{#2}\pst@tempb + \def\pst@linetype{4}% + \addto@pscode{ + \pst@coor translate +% \pst@number\pst@dimc \psk@dimen CLW mul sub /InnerRadius ED +% \pst@number\pst@dimd \psk@dimen CLW mul sub /OuterRadius ED + \pst@tempA\space \psk@dimen CLW mul sub /InnerRadius ED + \pst@tempB\space \psk@dimen CLW mul sub /OuterRadius ED + InnerRadius 0 moveto newpath + 0 0 InnerRadius \pst@tempa\space \pst@tempb\space arc + OuterRadius \pst@tempb\space PtoC + \pst@tempb\space \pst@tempa\space sub abs 360 eq { moveto }{ lineto } ifelse % whole circle or not?? + 0 0 OuterRadius \pst@tempb\space \pst@tempa\space arcn + closepath + }% + \showpointsfalse + \end@ClosedObj + \ignorespaces} +% +\def\pswedge{\def\pst@par{}\pst@object{pswedge}} +\def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}} +\def\pswedge@ii(#1)#2#3#4{% + \begin@ClosedObj + \pssetlength\pst@dimc{#2}% + \pst@getangle{#3}\pst@tempa + \pst@getangle{#4}\pst@tempb + \pst@@getcoor{#1}% + \def\pst@linetype{1}% + \addto@pscode{ + \ifx\psk@rot\@empty 0 \else \psk@rot \fi rotate + \pst@coor + 2 copy + moveto + \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi + \psk@dimen CLW mul sub % Adjusted radius + \pst@tempa \pst@tempb + arc + closepath}% + \showpointsfalse + \end@ClosedObj +} +\def\tx@ellipse#1{ \ifx\psk@rot\@empty 0 \else \psk@rot \fi #1 Ellipse } +\def\tx@Ellipse{ \ifx\psk@rot\@empty 0 \else \psk@rot \fi Ellipse } +% +\def\psellipse{\def\pst@par{}\pst@object{psellipse}} +\def\psellipse@i(#1){\@ifnextchar({\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}} +\def\psellipse@ii(#1)(#2){% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa + \pst@@getcoor{#2}% + \addto@pscode{ + 0 360 + \pst@coor + \ifdim\psk@dimen\p@=\z@\else + \psk@dimen CLW mul + dup 4 -1 roll sub neg 3 1 roll sub + \fi + \pst@tempa + \tx@ellipse{true} + \ifPst@variableLW \pst@flattenpath \fi + closepath + }% + \def\pst@linetype{2}% + \end@ClosedObj% +} +\def\psellipseAB{\def\pst@par{}\pst@object{psellipseAB}} +\def\psellipseAB@i(#1)(#2)#3{% + \begin@ClosedObj + \pst@getcoor{#1}\pst@tempa + \pst@getcoor{#2}\pst@tempb + \addto@pscode{ + 0 360 + #3 \pst@number\psxunit mul + \pst@tempa /yA ED /xA ED + \pst@tempb /yB ED /xB ED + xA xB sub dup mul + yA yB sub dup mul add sqrt 2 div + \ifdim\psk@dimen\p@=\z@\else + \psk@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@variableLW \pst@flattenpath \fi + closepath + }% + \def\pst@linetype{2}% + \end@ClosedObj +} +\def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}} +\def\multips@i#1{\def\pst@par{rot=#1}\multips@ii} +\def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}} +\long\def\multips@iii(#1)(#2)#3#4{% + \begingroup +%----------------- hv 1.10 ------------------ + \pst@killglue +%----------------- hv 1.10 ------------------ + \use@par + \pst@getcoor{#1}\pst@tempa + \pst@@getcoor{#2}% + \pst@cnta=#3\relax + \init@pscode + \addto@pscode{% + \pst@tempa T \the\pst@cnta\space \pslbrace + gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}% + \hbox to\z@{% + \def\init@pscode{% + \addto@pscode{% + gsave + \pst@number\pslinewidth SLW + \pst@usecolor\pslinecolor}}% + \def\use@pscode{\addto@pscode{grestore}}% + \def\psclip##1{\pst@misplaced\psclip}% + \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% + #4% + }% + \addto@pscode{grestore \pst@coor T \psrbrace repeat}% + \leavevmode + \use@pscode + \endgroup + \ignorespaces} +\def\psscalebox#1{\pst@makebox{\ps@scalebox{#1}}} +\def\ps@scalebox#1{% + \begingroup% + \pst@getscale{#1}\pst@tempa% + \let\pst@tempc\pst@tempg% + \let\pst@tempd\pst@temph% + \ps@@scalebox% + \endgroup} +\def\ps@@scalebox{% + \leavevmode% + \hbox{% + \ifdim\pst@tempd\p@<\z@% + \pst@dimg=\pst@tempd\ht\pst@hbox% + \pst@dimh=\pst@tempd\dp\pst@hbox% + \dp\pst@hbox=-\pst@dimg% + \ht\pst@hbox=-\pst@dimh% + \else% + \ht\pst@hbox=\pst@tempd\ht\pst@hbox% + \dp\pst@hbox=\pst@tempd\dp\pst@hbox% + \fi% + \pst@dima=\pst@tempc\wd\pst@hbox% + \ifdim\pst@dima<\z@\kern-\pst@dima\fi% + \pst@Verb{CP CP translate \pst@tempa \tx@NET}% + \hbox to \z@{\box\pst@hbox\hss}% + \pst@Verb{ + CP CP translate + 1 \pst@tempc div 1 \pst@tempd div scale + \tx@NET}% + \ifdim\pst@dima>\z@\kern\pst@dima\fi% + }% +} +\pslongbox{Scalebox}{\psscalebox} +% +\def\psscaleboxto(#1,#2){\pst@makebox{\ps@scaleboxto(#1,#2)}} +\def\ps@scaleboxto(#1,#2){% + \begingroup + \pssetlength\pst@dima{#1}% + \pssetlength\pst@dimb{#2}% + \ifdim\pst@dima=\z@\else + \pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc + \edef\pst@tempc{\pst@tempc\space}% + \fi + \ifdim\pst@dimb=\z@ + \ifdim\pst@dima=\z@ + \@pstrickserr{% + \string\psscaleboxto\space dimensions cannot both be zero}\@ehpa + \def\pst@tempa{}% + \def\pst@tempc{1 }% + \def\pst@tempd{1 }% + \else + \let\pst@tempd\pst@tempc + \fi + \else + \pst@dimc=\ht\pst@hbox + \advance\pst@dimc\dp\pst@hbox + \pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd + \edef\pst@tempd{\pst@tempd\space}% + \ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi + \fi + \edef\pst@tempa{\pst@tempc \pst@tempd scale }% + \ps@@scalebox + \endgroup} +\pslongbox{Scaleboxto}{\psscaleboxto} +% +\def\tx@Rot{Rot } +\def\psrotateleft{\pst@makebox{\ps@rotateleft\pst@hbox}} +\def\ps@rotateleft#1{% +\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% +\pst@Verb{90 \tx@Rot} +\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}% +\pst@Verb{-90 \tx@Rot}}}} +\def\psrotateright{\pst@makebox{\ps@rotateright\pst@hbox}} +\def\ps@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@Verb{-90 \tx@Rot} + \vbox to \z@{\hbox to \z@{\hss\box#1}\vss}% + \pst@Verb{90 \tx@Rot}}}} +\def\psrotatedown{\pst@makebox{\ps@rotatedown\pst@hbox}} +\def\ps@rotatedown#1{% +\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1% +\pst@Verb{180 \tx@Rot}% +\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}% +\pst@Verb{-180 \tx@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@starbox{% +\setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}} +\def\pst@@makesmall#1{% +\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}} +\def\pst@@@makesmall#1{% +\pst@dimh=\psk@xref\wd#1% +\ifx\psk@yref\relax +\pst@dimg=\dp#1% +\else +\pst@dimg=\psk@yref\ht#1% +\advance\pst@dimg\psk@yref\dp#1% +\fi +\setbox#1=\hbox to\z@{% +\kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}} +% +\define@key[psset]{pstricks}{ref}[c]{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil} +\def\psset@@ref#1#2,#3,#4\@nil{% + \def\psk@xref{.5}% + \def\psk@yref{.5}% + \let\pst@makesmall\pst@@@makesmall + \ifx\@empty#3\@empty + \@nameuse{getref@#1}% + \@nameuse{getref@#2}% + \else + \pst@checknum{#1#2}\psk@xref + \pst@checknum{#3}\psk@yref + \fi} +% +\def\getref@c{\let\pst@makesmall\pst@@makesmall} +\def\getref@t{\def\psk@yref{1}} +\def\getref@b{\def\psk@yref{0}} +\def\getref@B{\let\psk@yref\relax} +\def\getref@l{\def\psk@xref{0}} +\def\getref@r{\def\psk@xref{1}} +\psset[pstricks]{ref=c} +% +\def\pst@rotlist{ mark RAngle /ps@a ED cleartomark ps@a neg } +\def\pst@rottable{% +@0=% +@U=% +@L=90 % +@D=180 % +@R=-90 % +@N=\pst@rotlist +@W=\pst@rotlist 90 add % +@S=\pst@rotlist 180 add % +@E=\pst@rotlist 90 sub } +% +\define@key[psset]{pstricks}{rot}[0]{% + \pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil} +\def\psset@@rot#1\@nil{% + \def\next##1@#1=##2@##3\@nil{% + \ifx##2\relax\pst@getangle{#1}\psk@rot \else\def\psk@rot{##2}\fi% + \pst@Verb{ gsave STV CP T /ps@rot \ifx\psk@rot\@empty 0 \else \psk@rot \fi def grestore }% (MJS) + }% + \expandafter\next\pst@rottable @#1=\relax @\@nil} +% +\def\psset@@@rot#1#2\@nil{% + \psset@@rot#2\@nil% + \edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\space ps@rot add \fi}% + \pst@Verb{ gsave STV CP T /ps@rot \ifx\psk@rot\@empty 0 \else \psk@rot \fi def grestore }}% (MJS) +% +%\def\psset@@rot#1\@nil{% +%\def\ps@next##1@#1=##2@##3\@nil{% +%\ifx\relax##2\pst@getangle{#1}\psk@rot\else\def\psk@rot{##2}\fi}% +%\expandafter\ps@next\pst@rottable @#1=\relax @\@nil} +% +%\def\psset@@@rot#1#2\@nil{% +%\psset@@rot#2\@nil +%\edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}} +\psset[pstricks]{rot=0} +% +\def\tx@RotBegin{RotBegin } +\def\tx@RotEnd{RotEnd } +\def\pst@rotate#1#2{% + \ifx#1\@empty\else + \setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}% + \fi% +} +\def\psput@cartesian#1{% +\hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}% +} +\def\psput@special#1{% + \hbox{% + \pst@Verb{{ \pst@coor \pstnodescale } \tx@PutCoor \tx@PutBegin }% 20150911 hv + \box#1% + \pst@Verb{ \tx@PutEnd }% + }% +} +\def\tx@PutCoor{PutCoor } +\def\tx@PutBegin{PutBegin } +\def\tx@PutEnd{PutEnd } +\def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}} +\def\rput@i[#1]{% + \test@for@options#1=\@nil + \ifnum\the\pst@cntm=\z@ + \addto@par{ref={#1}}% + \else + \expandafter\addto@par\expandafter{#1}% + \fi + \rput@ii +} +\def\test@for@options#1=#2\@nil{% + \if$#2$% #2 is empty -> old syntax + \pst@cntm=\z@ + \else % something like foo=bar + \pst@cntm=\@ne + \fi +} + +\def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}} +\def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}} +\def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}} +\def\rput@v#1{% + \begingroup + \use@par + \if@star\pst@starbox\fi + \pst@makesmall\pst@hbox + \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) +% \pst@rotate\psk@rot\pst@hbox% + \psput@{#1}\pst@hbox% + \endgroup + \ignorespaces} +% +\def\multirput{% + \def\pst@par{}% + \pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}} +\def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii} +\def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}} +\def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv} +\def\multirput@iv(#1){% + \@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}} +\def\multirput@v(#1,#2)(#3,#4)#5{% + \pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}} +\def\multirput@vi(#1,#2)(#3,#4)#5{% + \pst@killglue% + \global\psLoopIndex=\@ne\relax + \begingroup + \use@par + \if@star\pst@starbox\fi + \pst@makesmall\pst@hbox + \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) +% \pst@rotate\psk@rot\pst@hbox + \pssetxlength\pst@dima{#1}% + \pssetylength\pst@dimb{#2}% + \pssetxlength\pst@dimc{#3}% + \pssetylength\pst@dimd{#4}% + \pst@cntg=#5\relax + \leavevmode + \loop + \vbox to \z@{% + \vss + \hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}% + \vskip\pst@dimb% + }% + \ifnum\pst@cntg>\psLoopIndex + \advance\pst@dima\pst@dimc + \advance\pst@dimb\pst@dimd + \global\advance\psLoopIndex by \@ne + \repeat + \endgroup + \ignorespaces% +} +% +\newif\if@fixedradius +\def\cput{\def\pst@par{}\pst@object{cput}} +\def\cput@i{\@fixedradiusfalse\cput@ii} +\def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}} +\def\cput@iii#1{% + \addto@par{rot={#1}}% + \@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}% +} +\def\cput@iv(#1){\pst@makebox{\cput@v{#1}}} +\def\cput@v#1{% + \begingroup + \use@par + \setbox\pst@hbox=\hbox{% + \psboxsepfalse + \if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi% + }% + \pst@@makesmall\pst@hbox + \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) +% \pst@rotate\psk@rot\pst@hbox + \psput@{#1}\pst@hbox + \endgroup + \ignorespaces% +} +% +\def\Cput{\def\pst@par{}\pst@object{Cput}} +\def\Cput@i{\@fixedradiustrue\cput@ii} +\newdimen\pslabelsep +\define@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@key[psset]{pstricks}{refangle}[0]{\pst@expandafter\psset@@refangle{#1}\@nil} +\def\psset@@refangle#1\@nil{% + \def\next##1@#1=##2"##3@##4\@nil{% + \ifx\relax##2% + \pst@getangle{#1}\psk@refangle + \def\psk@uputref{}% + \else + \def\psk@refangle{##2 }% + \def\psk@uputref{##3}% + \fi}% + \expandafter\next\pst@refangletable @#1=\relax"@\@nil% + \pst@Verb{ gsave STV CP T /ps@refangle \psk@refangle\space def grestore }%ADDED (MJS) +} +% +\def\pst@refangletable{% +@r=0"20% +@u=90"02% +@l=180"10% +@d=-90"01% +@ur=45"22% +@ul=135"12% +@dr=-135"21% +@dl=-45"11} +\psset[pstricks]{refangle=0} + +% DG/SR modification begin - Mar. 24, 1999 - Patch 10 +%\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}} +\def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}} +% DG/SR modification end +\def\uput@i#1{\addto@par{labelsep=#1}\uput@ii} +% +\def\uput@ii[#1]{% + \addto@par{refangle={#1}}% + \@ifnextchar({\uput@iv}{\uput@iii}} +% +\def\uput@iii#1{% + \addto@par{rot={#1}}% + \@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}} +% +\def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}} +% +\def\uput@v#1{% + \begingroup + \use@par + \if@star\pst@starbox\fi + \pstCheckCoorType{#1}% needed for \uput@vii + \uput@vi + \psput@{#1}\pst@hbox + \endgroup + \ignorespaces} +% +\def\uput@vi{% + \ifx\psk@uputref\@empty\uput@vii\tx@UUput{}% + \else + \ifx\psk@rot\@empty\expandafter\uput@viii\psk@uputref + \else\uput@vii\tx@UUput{}\fi + \fi} +% +\def\uput@vii#1#2{% + \edef\pst@coor{% + \ifPst@SpecialLength\pst@SpecialLength\else\pst@number\pslabelsep\fi +% \pst@number\pslabelsep % \ifdim\pslabelsep<\z@ neg \fi + #2% + \pst@number{\wd\pst@hbox}% + \pst@number{\ht\pst@hbox}% + \pst@number{\dp\pst@hbox}% + \ifnum\pst@C@@rType=7 + ps@refangle % CHANGED (MJS) FROM \psk@refangle\space + \ifx\psk@rot\@empty\else ps@rot\space sub \fi + \else + \psk@refangle\space + \ifx\psk@rot\@empty\else \psk@rot\space sub \fi + \fi + \tx@Uput #1}% + %\show\pst@coor + \setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}% + \setbox\pst@hbox=\psput@special\pst@hbox + \ifnum\pst@C@@rType=7 + \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% CHANGED FROM \psk@rot (MJS) + \else + \ifx\psk@rot\@empty\else\pst@rotate{\psk@rot}\pst@hbox\fi% + \fi} +% +% +\def\uput@viii#1#2{% + \ifnum#1>\z@\relax\ifnum#2>\z@\relax\pslabelsep=.707\pslabelsep\fi\fi + \setbox\pst@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@hbox% + \ifnum#1=1\relax\hskip\pslabelsep\else\hss\fi}% + \ifnum#2=2\relax\vskip\pslabelsep\else\vss\fi}} +% +\def\tx@Uput{Uput } +\def\tx@UUput{UUput } +% +\def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}} +\def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii} +\def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}} +\def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}} +\def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}} +\def\Rput@v#1{% + \begingroup + \use@par + \if@star\pst@starbox\fi + \Rput@vi + \pst@makesmall\pst@hbox + \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) +% \pst@rotate\psk@rot\pst@hbox + \psput@{#1}\pst@hbox + \endgroup + \ignorespaces} +% +\def\Rput@vi{% + \pst@dimg=\dp\pst@hbox + \advance\pst@dimg\pslabelsep + \dp\pst@hbox=\pst@dimg + \pst@dimg=\ht\pst@hbox + \advance\pst@dimg\pslabelsep + \ht\pst@hbox=\pst@dimg + \setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}% +% +\def\oldpsput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}} +\def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii} +\def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}} +\def\oldpsput@iii<#1>{\rput@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@wgridXunit +\newdimen\sh@wgridYunit + +\define@key[psset]{pstricks}{showgrid}[b]{\expandafter\pst@@showgrid#1!!\@nil} +\def\pst@@showgrid#1#2#3\@nil{% hv 20130403 + \def\showgridp@s{0}% + \ifx#1b\showgridtrue\else% bottom + \ifx#1f\showgridfalse\else + \ifx#1t + \ifx#2r \showgridtrue\else% true->bottom + \showgridtrue\def\showgridp@s{1}\fi% top + \fi\fi\fi + \ifnum\showgridp@s>0\relax + \sh@wgridXunit=\psxunit + \sh@wgridYunit=\psyunit + \fi + +} +\psset[pstricks]{showgrid=f} +\define@boolkey[psset]{pstricks}[Pst@]{pgffunctions}[true]{} +\psset[pstricks]{pgffunctions=false} +% +\newdimen\pst@shift +\newif\ifPst@shift@star +\define@key[psset]{pstricks}{shift}[0]{% + \ifx#1* + \global\Pst@shift@startrue + \pst@shift=\p@ + \else + \global\Pst@shift@starfalse + \pssetlength\pst@dimg{#1} + \global\pst@shift\pst@dimg% only the outer pspicture env can have a shift + \fi} +\psset[pstricks]{shift=0} +% +%------------------------------- pspicture ------------------------------ +% +\def\pspicture{\begingroup\pst@ifstar\pst@picture} +\def\pst@picture{\@ifnextchar[{\pst@@picture}{\pst@@picture[]}} +\def\pst@@picture[#1]{\@ifnextchar({\pst@@picture@i[#1]}{\pst@@picture@i[#1](10,10)}}% +\def\pst@@picture@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@dima{#2}% + \pssetylength\pst@dimb{#3}% + \pssetxlength\pst@dimc{#4}% + \pssetylength\pst@dimd{#5}% + \ifdim\pst@dima>\pst@dimc% + \pst@dimg=\pst@dima% + \pst@dima=\pst@dimc% + \pst@dimc=\pst@dimg% + \fi% + \ifdim\pst@dimb>\pst@dimd% + \pst@dimg=\pst@dimb% + \pst@dimb=\pst@dimd% + \pst@dimd=\pst@dimg% + \fi% + \setbox\pst@hbox=\hbox\bgroup + \begingroup\KillGlue + \@ifundefined{@latexerr}{}{\let\unitlength\psunit}% + \edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}% +% ----------- 1.10/12 beg hv ------------------- + \psset{showgrid=false}% % for nested pspicture environemnets + \def\pst@tempA{#1}% + \ifx\pst@tempA\@empty\else\psset{#1}\fi% sets the shift and grid option + \ifx\pst@bgcolor\@empty\else\psframe*[linecolor=\pst@bgcolor](#2,#3)(#4,#5)\fi + \ifshowgrid\ifnum\showgridp@s=0\psgrid[style=gridstyle]\fi\fi +% ----------- 1.10/12 end hv ------------------- + \ignorespaces% % 2008-12-07 + \ifPst@pgffunctions\pstVerb{ pgffunctions }\fi% hv 2013-04-17 +} +\def\pic@coor{(0,0)(0,0)(10,10)} +\def\endpspicture{% + \ifshowgrid\ifnum\showgridp@s>0 + \psgrid[xunit=\sh@wgridXunit,yunit=\sh@wgridYunit,style=gridstyle]\fi\fi + \pst@killglue + \endgroup + \egroup + \ht\pst@hbox=\pst@dimd + \dp\pst@hbox=-\pst@dimb + \setbox\pst@hbox=\hbox{% + \kern-\pst@dima + \ifPst@shift@star%\typeout{==pstricks== old behaviour of the shift option}% shift=* + \advance\pst@dimd-\pst@dimb + \pst@dimd=0.5\pst@dimd + \else\pst@dimd-\pst@shift\fi + \advance\pst@dimd\pst@dimb + \lower\pst@dimd\box\pst@hbox + \kern\pst@dimc}% + \if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi + \leavevmode + \ifPst@draft + \expandafter\ifx\csname @latexerr\endcsname\relax + \box\pst@hbox + \else% do we have LaTeX? + \fboxsep=0pt + \fbox{\rule[-\pst@shift]{0pt}{\ht\pst@hbox}\rule{\wd\pst@hbox}{0pt}}% + \fi + \else + \box\pst@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 |