%% pstricks.tex %% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt %% COPYRIGHT 2000-2003 by Denis Girou. %% Copyright 2004- by Herbert Voss % % 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 43,44 and 77ff %% !! loading config file pstricks.con line 445 %% !! loading pro files line 458ff %% !! fileversion and date see line 84f %% !! loaded arrow stuff line 1482 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax \newif\if@pstLaTeX \@pstLaTeXtrue % %\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 \@pstLaTeXfalse \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}}% needed for the pgf packages %\@ifnextchar[\ProvidesPackageRCS@i{\ProvidesPackageRCS@i[] }}%$ %\def\ProvidesPackageRCS@i[#1]#2{} \ifx\pgfkeysloaded\relax\else \if@pstLaTeX \RequirePackage{pgffor} % pgffor depends on pgfkeys \else % format is plaintex \input pgffor.tex \fi \fi \let\pgfforeach\foreach % \def\fileversion{3.21} \def\filedate{2024/11/16} \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 \space for immediate help.}% \errmessage{#1}% \endgroup} \def\@ehpa{% Your command was ignored. Default value substituted.^^J Type \space \space to procede.} \def\@ehpb{% Your command was ignored. Will recover best I can.^^J Type \space \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 \space to quit.} \def\@ehpd{% Not allowed optional argument.^^J Will proceed with the default setting.^^J Type \space X \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 \global\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 version --------------- % \def\pst@configerr#1{\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc} \newif\ifPSTlualatex \ifdefined\directlua \ifdefined\app@cmd@latex % do we have auto-pst-pdf-lua loaded? \PSTlualatexfalse % \typeout{--- We are running lualatex or dvilualatex with auto-pst-pdf-lua ---}% \else \ifnum\outputmode=1 \PSTlualatextrue % \typeout{--- We are running lualatex with luapstricks ---}% \else \PSTlualatexfalse % \typeout{--- We are running dvilualatex without luapstricks ---}% \fi \fi \else \typeout{--- We are running latex or xelatex ---}% \PSTlualatexfalse \fi \ifPSTlualatex \directlua{require'luapstricks'}% \def\pstdriver{LuaLaTeX}% \def\pstverb{\luaPST}% \def\pstVerb{\luaPST direct}% \def\pstunit{1bp}% \def\pstverbscale{}% \def\pstnodescale{}% \def\pstheader{\luaPST immediate file}% \def\c@lor@to@ps#1\@@{\luaPSTcolor{#1}} % \AltClipMode % now done after the definition of \AltClipMode, see below % Not sure if we need ``neg'' here or not % \def\pstrotate{CP CP translate 3 -1 roll neg rotate \tx@NET} \else \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 \fi % \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{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 ! % \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 % % \input pstricks-color % % \def\pst@grestore{ currentpoint matrix currentmatrix currentfont grestore setfont setmatrix moveto } \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} % \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{% \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} \let\pst@setrepeatarrowsflag\relax % \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\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 revision 952 gt { .setstrokeconstantalpha }{ .setopacityalpha } ifelse > \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=770,setflat=0.1} % \def\pst@flattenpath{ 20 dict begin /Coors [] def /Cmds [] def /NoOfSteps 0 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 /addmoveto { -1 Cmds aload length 1 add array astore /Cmds exch def } def /addlineto { 0 Cmds aload length 1 add array astore /Cmds exch def } def /addcurveto { 1 Cmds aload length 1 add array astore /Cmds exch def } def \psk@setflat\space setflat % the value for the line snippets flattenpath % flatten the existing path into line segments { add2Values addmoveto} % what to do with moveto { NoOfSteps 1 add /NoOfSteps ED add2Values addlineto} % what to do with lineto { NoOfSteps 1 add /NoOfSteps ED add6Values addcurveto} % what to do with curveto (not needed here) { } % nothing for closepath pathforall % /dLW \pst@number\psk@endLW \pst@number\psk@startLW sub NoOfSteps div def % the step for the linewidth \ifPst@variableColor /dColor \psk@endWL\space \psk@startWL\space sub NoOfSteps div def % same for color \fi %%% \pst@number\psk@startLW setlinewidth \tx@setlinejoin \psk@linecap\space setlinecap /lambda \psk@startWL def Cmds length /Ncmds ED % number of the commands is the length of the array /CoorIndex 0 def Ncmds 1 sub -1 0 { % on stack is the loop index Cmds exch get /cmdNo ED % get command as nuber -1, 0, 1 | moveto, lineto, curveto cmdNo 0 eq { Coors CoorIndex 2 getinterval aload pop lineto CoorIndex 2 add /CoorIndex ED } { cmdNo 0 lt { Coors CoorIndex 2 getinterval aload pop moveto CoorIndex 2 add /CoorIndex ED } { Coors CoorIndex 6 getinterval aload pop curveto CoorIndex 6 add /CoorIndex ED } ifelse } ifelse % else is curveto \ifPst@variableColor lambda dColor add dup /lambda ED tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor \else \pst@usecolor\pslinecolor \fi currentlinewidth dLW add setlinewidth CP /yCurr ED /xCurr ED stroke % draw the line segment xCurr yCurr moveto % go to the last point } for end } % %--------------------------- A R R O W S --------------------------- \input pstricks-arrows %% ---------------------- end arrow part ---------------------- % \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\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@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 } % %--------------------------- PSTricks dots ----------------------- \input{pstricks-dots} %--------------------------- PSTricks dots end ------------------- % \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]{% \ifPSTlualatex \ifx\relax#1\relax \def\psk@gridfont{\fontid\font\space .findfontid }% \else \def\psk@gridfont{/#1 findfont }% hv 2007-11-13 \fi \else \def\psk@gridfont{/#1 findfont }% hv 2007-11-13 \fi }% \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}{griddx}[1]{\def\psk@xgridDX{#1 }} \define@key[psset]{pstricks}{griddy}[1]{\def\psk@ygridDY{#1 }} \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,griddx=1,griddy=1} \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 /GridDX \psk@xgridDX def /GridDY \psk@ygridDY 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 0 scalefont setfont % hv 1.16 \tx@Grid grestore }% \fi \addto@pscode{ gsave /xGridOffset \psk@xgridoffset def /yGridOffset \psk@ygridoffset def /GridDX \psk@xgridDX def /GridDY \psk@ygridDY 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 \psk@gridlabels scalefont setfont % hv 1.16 \tx@Grid grestore }% \end@SpecialObj \ignorespaces} % \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}}} \ifPSTlualatex \AltClipMode \fi \def\psclipbox{\@ifnextchar[{\psclipbox@}{\psclipbox@[\z@]}} % DG modification begin - Apr. 3, 1997 % From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus) %\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}} \def\psclipbox@[#1]{\pst@makebox{\psclipbox@@{#1}}} % DG modification end \def\psclipbox@@#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}% 20220109 hv \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}% 20220109 hv \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{% \ifPSTlualatex \def\pst@tempA{-90 }% \def\pst@tempB{90 }% \else \def\pst@tempA{90 }% \def\pst@tempB{-90 }% \fi \pst@makebox{\ps@rotateleft\pst@hbox}} \def\ps@rotateleft#1{% \leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% \pst@Verb{\pst@tempA \tx@Rot}% \vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}% \pst@Verb{\pst@tempB \tx@Rot}}}} % \def\psrotateright{% \ifPSTlualatex \def\pst@tempA{90 }% \def\pst@tempB{-90 }% \else \def\pst@tempA{-90 }% \def\pst@tempB{90 }% \fi \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{\pst@tempA \tx@Rot} \vbox to \z@{\hbox to \z@{\hss\box#1}\vss}% \pst@Verb{\pst@tempB \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} % % % U Up 0 % L Left 90 % D Down 180 % R Right 270 % % N North *0 % W West *90 % S South *180 % E East *270 % \ifPSTlualatex \def\pst@rotlist{ mark RAngle /ps@a ED cleartomark ps@a }% \else \def\pst@rotlist{ mark RAngle /ps@a ED cleartomark ps@a neg }% \fi \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\relax#1\relax\else \setbox#2=\hbox{\pst@Verb{% check for empty #1 (#1) /strAngle ED strAngle length 0 eq { 0 }{ #1 } ifelse %\ifPSTlualatex neg \fi \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}% \fi }% % \setbox#2=\hbox{\pst@Verb{% check for empty #1 % (#1) /strAngle ED strAngle length 0 eq { 0 }{ #1 } ifelse % %\ifPSTlualatex neg \fi % \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}% \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 \ifPSTlualatex neg \fi }\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 \ifPSTlualatex \ifnum\pst@C@@rType=7 \ifx\psk@rot\@empty\else\pst@rotate{ps@rot neg}\pst@hbox\fi% CHANGED FROM \psk@rot (MJS) \else \ifx\psk@rot\@empty\else\pst@rotate{\psk@rot\space neg}\pst@hbox\fi% \fi \else \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 \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 \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 } \define@key[psset]{pstricks}{showgrid}[b]{\expandafter\pst@@showgrid#1!!\@nil} \define@boolkey[psset]{pstricks}[Pst@]{showframe}[true]{} \define@boolkey[psset]{pstricks}[Pst@]{calcframe}[true]{} \psset[pstricks]{showgrid=f,showframe=false,calcframe=false} \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\ps@readmargin#1,#2,#3,#4,#5\@nil{% \ifx\\#2\\ % \typeout{>>> Case 1 para}% \pst@getlength{#1}\ps@margin@left \let\ps@margin@right\ps@margin@left \let\ps@margin@top\ps@margin@left \let\ps@margin@bottom\ps@margin@left \else \ifx\\#3\\% % \typeout{>>> Case 2 para: #1,#2}% \pst@getlength{#1}\ps@margin@left \def\ps@margin@right{0}% \pst@getlength{#2}\ps@margin@bottom \def\ps@margin@top{0} \else % \typeout{>>> Case 4 para: #1,#2,#3,#4}% \pst@getlength{#1}\ps@margin@left \pst@getlength{#2}\ps@margin@bottom \pst@getlength{#3}\ps@margin@right \pst@getlength{#4}\ps@margin@top \fi\fi %\typeout{>>>>>>>>>\ps@margin@left,\ps@margin@bottom,\ps@margin@right,\ps@margin@top}% }% \define@key[psset]{pstricks}{margin}[0pt]{\ps@readmargin#1,,,,\@nil} \psset[pstricks]{margin=0pt} % \ExplSyntaxOn \define@key[psset]{pstricks}{alt}[]{\tl_set:Ne\l__tag_graphic_alt_tl{\text_purify:n{#1}}} %\define@boolkey[psset]{pstricks}[]{artifact}[true]{} \define@key[psset]{pstricks}{artifact}{% \bool_set_true:N \l__tag_graphic_artifact_bool \bool_set_false:N \l__tag_graphic_BBox_bool } \define@key[psset]{pstricks}{actualtext}[]{% \tl_set:Ne\l__tag_graphic_actual_tl{\text_purify:n{#1}} \bool_set_false:N \l__tag_graphic_BBox_bool } \define@key[psset]{pstricks}{correct-BBox}{% \bool_set_true:N \l__tag_graphic_bboxcorr_bool \seq_set_split:Nnn\l__tag_graphic_bboxcorr_seq{~}{#1~0pt~0pt~0pt~0pt}% } \define@key[psset]{pstricks}{tag}[]{% \str_case:nnF {#1}{ {artifact} { \bool_set_true:N \l__tag_graphic_artifact_bool \bool_set_false:N \l__tag_graphic_BBox_bool } {false}{\tag_stop:} } {\tl_set:Nn\l__tag_graphic_struct_tl{#1}} } \ExplSyntaxOff \newcount\ps@imagectr \ps@imagectr=0 %\newif\ifPst@findcoor %\Pst@findcoorfalse % \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]}}% \def\pst@@picture@@i[#1]{% \def\pic@coor{(0,0)(0,0)}% \gdef\pscoor{(10,10)}% \ifPst@calcframe \typeout{>>>Check for file \jobname-\the\numexpr\ps@imagectr+1.psaux}% \IfFileExists{\jobname-\the\numexpr\ps@imagectr+1.psaux} {\input{\jobname-\the\numexpr\ps@imagectr+1.psaux}% \xdef\pic@coor{(0,0)\pscoor}% \typeout{----->>\pic@coor}% \typeout{----->>\pscoor}% } {%\gdef\pscoor{(10,10)} %\def\pic@coor{(0,0)(0,0)(10,10)} }% % \typeout{>>>\pscoor}% \fi \edef\@temp{[\noexpand#1]\pscoor}% \expandafter\pst@@picture@i\@temp} % \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}% \pstVerb{/xCanvasLeft \pst@number\pst@dima def /yCanvasLeft \pst@number\pst@dimb def /xCanvasRight \pst@number\pst@dimc def /yCanvasRight \pst@number\pst@dimd def }% \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@calcframe\pstVerb{ .trackbbox }\global\advance\ps@imagectr by 1 \fi \ifPst@pgffunctions\pstVerb{ pgffunctions }\fi% hv 2013-04-17 } %\def\pic@coor{(0,0)(0,0)(10,10)} \def\endpspicture{% \ifPst@calcframe \ifPSTlualatex \pstVerb{ .trackedbbox % xmin ymin xmax ymax % Die Koordinaten sind relativ zur Seite, also verschieben wir sie % zum aktuellen Punkt. currentpoint matrix translate dup invertmatrix dup 4 1 roll transform /YMAX exch def /XMAX exch def transform /YMIN exch def /XMIN exch def % Now we have all absolute coordinates \ifPst@showframe % Um jetzt an diesen Koordinaten zu zeichnen, ist das natürlich % ungünstig und wir müssen zurück schieben... (Oder den Code % umordnen, aber warum einfach wenns auch kompliziert geht ;P) XMIN YMIN XMAX XMIN sub YMAX YMIN sub % lower left, width, height 4 copy gsave currentpoint translate newpath rectstroke newpath 0 0 moveto % x0 y0 x1 y1 \ps@margin@top\space add \ps@margin@bottom\space add 4 1 roll % y1 x0 y0 x1 \ps@margin@right\space add \ps@margin@left\space add 4 1 roll % x1 y1 x0 y0 \ps@margin@bottom\space sub 4 1 roll % y0 x1 y1 x0 \ps@margin@left\space sub 4 1 roll % x0 y0 x1 y1 [3 3] 0 setdash rectstroke grestore \fi (\jobname-\the\ps@imagectr.psaux) (w) file /CoorFile exch def (\\gdef\\pscoor{\string\() CoorFile exch writestring XMIN %\pst@number\psxunit div \ps@margin@left\space sub 20 string cvs CoorFile exch writestring (pt, ) CoorFile exch writestring YMIN %\pst@number\psyunit div \ps@margin@bottom\space sub 20 string cvs CoorFile exch writestring (pt\string\)\string\() CoorFile exch writestring XMAX %\pst@number\psxunit div \ps@margin@right\space add 20 string cvs CoorFile exch writestring (pt, ) CoorFile exch writestring YMAX %\pst@number\psyunit div \ps@margin@top\space add 20 string cvs CoorFile exch writestring (pt\string\)}\% ) CoorFile exch writestring %(Unit is \pst@number\psyunit/\pst@number\psyunit) 40 string cvs CoorFile exch writestring CoorFile closefile }% \else \global\Pst@calcframefalse \PackageError{PSTricks}{You need to run lualatex for calculating the bounding box or set calcframe=false}{}%\@ehpa \fi \fi \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{\psclipbox@@\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 %%% changed 20230430 by hv, confuses otherwise the dvi color handling \ifluatex\pstVerb{0.8 setlinewidth 0 setgray}\fi% default setting (needed for lualatex) %%% \catcode`\@=\PstAtCode\relax % \endinput %% %% END: pstricks.tex