%% BEGIN pst-tree.tex \def\fileversion{0.93-97} \def\filedate{1997/03/25} %% %% pstree.tex: Tree macros for PSTricks. %% %% COPYRIGHT 1993, by Timothy Van Zandt, tvz@Princeton.EDU %% See pstricks.doc or pstricks.tex for copying restrictions. %% \message{ v\fileversion, \filedate} \csname PSTreeLoaded\endcsname \let\PSTreeLoaded\endinput \ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi\relax \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 \newbox\pstree@rootbox \newbox\pstree@box \def\pstree@succrow{% \ifpstreeflip \def\pssubtree@vertical{\pssubtree@vertical@vflip}% \else \def\pssubtree@vertical{\pssubtree@vertical@v}% \fi \def\pstree@node{\pstree@node@v}% \def\pssubtree@horizontal{\pssubtree@horizontal@v}}% \def\pssubtree@vertical@v{% \vrule height \pst@dimc depth \pst@dimd width \z@ \ifnum\psnodecnt=\z@ \global\let\pstree@theleftprofile\pstree@leftprofile \global\let\pstree@therightprofile\pstree@rightprofile \else \psk@thistreefit\pstree@therightprofile\pstree@leftprofile \kern\the\pst@cnth sp \pstree@zip\pstree@therightprofile \pstree@rightprofile\pstree@therightprofile \global\advance\pstree@cnt\pst@cnth \pst@cnth=\pstree@cnt \pstree@zip\pstree@leftprofile \pstree@theleftprofile\pstree@theleftprofile \fi \box\pstree@box \global\advance\psnodecnt 1\relax}% \def\pssubtree@vertical@vflip{% \vrule height \pst@dimc depth \pst@dimd width \z@ \ifnum\psnodecnt=\z@ \global\let\pstree@theleftprofile\pstree@leftprofile \global\let\pstree@therightprofile\pstree@rightprofile \else \psk@thistreefit\pstree@theleftprofile\pstree@rightprofile \kern-\pst@cnth sp \pstree@zip\pstree@theleftprofile \pstree@leftprofile\pstree@theleftprofile \global\advance\pstree@cnt\pst@cnth \pst@cnth=\pstree@cnt \pstree@zip\pstree@rightprofile \pstree@therightprofile\pstree@therightprofile \fi \box\pstree@box \global\advance\psnodecnt 1\relax}% \def\pstree@node@v{% \edef\pstree@leftprofile{\psk@thistreenodesize\pst@dima,\pstree@stop,}% \edef\pstree@rightprofile{\psk@thistreenodesize\pst@dimb,\pstree@stop,}% \pssubtree@vertical}% \def\pssubtree@horizontal@v{% \pstree@max\pstree@upprofile\pst@cntg \pst@dimc=\pst@cntg sp \pstree@max\pstree@downprofile\pst@cntg \pst@dimd=\pst@cntg sp \pstree@treebboxadjust \edef\pstree@leftprofile{\number\pst@dima,\pstree@stop,}% \edef\pstree@rightprofile{\number\pst@dimb,\pstree@stop,}% \pssubtree@vertical}% \def\pstree@tightfit#1#2{% \pst@cnth=\z@ \edef\next{\noexpand\pstree@@tightfit#1\noexpand\@nil#2\noexpand\@nil}% \next \advance\pst@cnth\psk@thistreesep\relax \advance\pst@cnth\pstree@tspace\relax \gdef\pstree@tspace{\z@}} \def\pstree@@tightfit#1,#2\@nil#3,#4\@nil{% \ifnum#1=\pstree@stop \let\next\relax \else \ifnum#3=\pstree@stop \let\next\relax \else \pst@cntg=#1 \advance\pst@cntg#3 \ifnum\pst@cntg>\pst@cnth \pst@cnth=\pst@cntg \fi \def\next{\pstree@@tightfit#2\@nil#4\@nil}% \fi \fi \next} \def\pstree@loosefit#1#2{% \pstree@max{#1}\pst@cnth \pstree@max{#2}\pst@cntg \advance\pst@cnth\pst@cntg \advance\pst@cnth\psk@thistreesep\relax \advance\pst@cnth\pstree@tspace\relax \gdef\pstree@tspace{\z@}} \def\tspace#1{% \pst@@killglue \pssetlength\pst@dimg{#1}% \xdef\pstree@tspace{\number\pst@dimg}% \ignorespaces} \def\psset@treefit#1{% \@ifundefined{pstree@#1fit}% {\@pstrickserr{Bad `treefit' parameter value: `#1'}\@ehpa}% {\expandafter\let\expandafter\psk@treefit\csname pstree@#1fit\endcsname}} \psset@treefit{tight} \def\psset@thistreefit#1{% \@ifundefined{pstree@#1fit}% {\@pstrickserr{Bad `treefit' parameter value: `#1'}\@ehpa}% {\expandafter\let\expandafter\psk@thistreefit \csname pstree@#1fit\endcsname}} \psset@treefit{tight} \def\pstree@zip#1#2#3{% \def\pst@tempg{}% \edef\next{\noexpand\pstree@@zip#1\noexpand\@nil#2\noexpand\@nil}% \next \global\let#3\pst@tempg} \def\pstree@@zip#1,#2\@nil#3,#4\@nil{% \ifnum#1=\pstree@stop \edef\pst@tempg{\pst@tempg#3,#4}% \let\next\relax \else \ifnum#3=\pstree@stop \pst@cntg=#1 \advance\pst@cntg-\pst@cnth \edef\pst@tempg{\pst@tempg\the\pst@cntg,}% \def\next{\pstree@@zip#2\@nil\pstree@stop,\@nil}% \else \edef\pst@tempg{\pst@tempg#3,}% \def\next{\pstree@@zip#2\@nil#4\@nil}% \fi \fi \next} \def\pstree@max#1#2{% \pst@cntg=\z@ \expandafter\pstree@@max#1% #2=\pst@cntg}% \def\pstree@@max#1,{% \ifnum#1=\pstree@stop\else \ifnum#1>\pst@cntg \pst@cntg=#1 \fi \expandafter\pstree@@max \fi} \def\pstree@add#1{% \def\pst@tempg{}% \expandafter\pstree@@add#1% \xdef#1{\pst@tempg\pstree@stop,}} \def\pstree@@add#1,{% \ifnum#1=\pstree@stop\else \pst@cnth=#1 \advance\pst@cnth\pst@cntg \xdef\pst@tempg{\pst@tempg\the\pst@cnth,}% \expandafter\pstree@@add \fi} \newcount\psnodecnt \let\c@psnodecnt\psnodecnt \newcount\pstreelevel \let\c@pstreelevel\pstreelevel \newcount\pstreecnt \let\c@pstreecnt\pstreecnt \newcount\pstree@cnt \def\pstree{\def\pst@par{}\pst@object{pstree}} \def\pstree@i{\def\pstree@makebox{\pst@@makebox}\pstree@ii} \def\psTree{\def\pst@par{}\pst@object{psTree}} \def\psTree@i{\def\pstree@makebox{\pst@makelongbox}\pstree@ii} \def\endpsTree{\pst@endlongbox\ignorespaces} \def\pstree@ii{% \ifnum\pstreelevel=\z@ \let\pstree@savedshortput\pst@shortput \psset@shortput{tab}% \else \pst@@killglue \fi \begingroup \begingroup \def\pstree@node{% \xdef\pstree@next{% \noexpand\@psttrue \noexpand\def\noexpand\pst@tempa{\number\pst@dima}% \noexpand\def\noexpand\pst@tempb{\number\pst@dimb}% \noexpand\def\noexpand\pst@tempc{\number\pst@dimc}% \noexpand\def\noexpand\pst@tempd{\number\pst@dimd}}% \box\pstree@box}% \def\pssubtree@horizontal{\pssubtree@horizontal@o}% \def\pssubtree@vertical{\pssubtree@vertical@o}% \global\let\pstree@next\relax \pst@makebox\pstree@iii} \def\pstree@iii{% \global\setbox\pst@boxg=\box\pst@hbox \endgroup \setbox\pstree@rootbox=\box\pst@boxg \@pstfalse \pstree@next \if@pst \ifdim\wd\pstree@rootbox=\z@\else \@pstrickserr{Extraneous space in root node}\@ehpa \wd\pstree@rootbox=\z@ \fi \else \@pstrickserr{Missing or bad root node (level \the\pstreelevel, node \the\psnodecnt)}\@ehpa \def\pstree@next{% \def\pst@tempa{0}% \def\pst@tempb{0}% \def\pst@tempc{0}% \def\pst@tempd{0}}% \wd\pstree@rootbox=\z@ \fi \pstree@savevalues \begingroup \pstree@initsuccvalues \pstree@setlevelpar \pstree@do} \def\pstree@setlevelpar{% \advance\pstreelevel1 \let\psk@thislevelsep\relax \let\psk@thistreesep\relax \let\psk@thistreefit\relax \let\psk@thistreenodesize\relax \csname pstreehook\romannumeral\pstreelevel\endcsname \use@par \ifx\psk@thistreesep\relax \let\psk@thistreesep\psk@treesep \fi \ifx\psk@thistreenodesize\relax \let\psk@thistreenodesize\psk@treenodesize \fi \ifx\psk@thistreefit\relax \let\psk@thistreefit\psk@treefit \fi \ifx\psk@thislevelsep\relax \let\psk@thislevelsep\psk@levelsep \let\psk@thislevelsepmode\psk@levelsepmode \fi \ifnum\psk@treemode=\pstree@predmode\else \global\advance\pstreecnt1 \edef\pstree@thetree{\the\pstreecnt}% \let\pstree@predmode\psk@treemode \fi \ifx\psk@thislevelsepmode\relax \pst@dimg=\psk@thislevelsep\relax \pst@cntg=0\@nameuse{% pstree@levelsepadjust-\pstree@thetree-\the\pstreelevel}% \advance\pst@dimg\pst@cntg sp \edef\psk@thislevelsep{\number\pst@dimg sp}% \fi \ifnum\psk@treemode>1 \def\pst@tposflip{1 sub neg }% \else \def\pst@tposflip{}% \fi \ifx\pstree@bboxadjust\@empty\else \xdef\pstree@treebboxadjust{% \pstree@bboxadjust \ifpsshowbbox\noexpand\pstree@showbbox\fi}% \gdef\pstree@bboxadjust{}% \fi \let\pst@thispsbox\@skiplevelfalse} \def\pstree@predmode{-1} \def\pstree@savevalues{% \edef\pstree@restorevalues{% \noexpand\gdef\noexpand\pstree@theleftprofile{\pstree@theleftprofile}% \noexpand\gdef\noexpand\pstree@therightprofile{\pstree@therightprofile}% \noexpand\gdef\noexpand\pstree@theupprofile{\pstree@theupprofile}% \noexpand\gdef\noexpand\pstree@thedownprofile{\pstree@thedownprofile}% \noexpand\gdef\noexpand\pstree@tspace{\pstree@tspace}% \noexpand\gdef\noexpand\pssucc{\pssucc}% \global\psnodecnt=\the\psnodecnt\relax \global\pstree@cnt=\the\pstree@cnt\relax}% \let\pstree@savebboxadjust\pstree@treebboxadjust} \def\pstree@initsuccvalues{% \def\pstree@therightprofile{\pstree@stop,}% \let\pstree@theleftprofile\pstree@therightprofile \let\pstree@theupprofile\pstree@therightprofile \let\pstree@thedownprofile\pstree@therightprofile \psnodecnt=\z@ \pstree@cnt\z@ \gdef\pstree@tspace{\z@}% \let\pspred\pssucc} \def\pssucc{T} \pstree@initsuccvalues \def\pstree@down{% \pstree@succrow \pstree@makebox{\pstree@vertical{\lower}}} \def\pstree@up{% \pstree@succrow \pstree@makebox{\pstree@vertical{\raise}}} \def\pstree@levelsepadjust#1#2{% \pst@cntg=0\@nameuse{pstree@levelsepadjust-#1}% \ifnum#2>\pst@cntg \expandafter\xdef\csname pstree@levelsepadjust-#1\endcsname {#2}% \fi} \def\pstree@initlevelsepadjust{% \@ifundefined{@latexerr}{% \immediate\openin1 \jobname.pst \ifeof1 \else \input \jobname.pst \fi \immediate\closein1 \csname newwrite\endcsname\pstree@auxout \immediate\openout\pstree@auxout \jobname.pst }% {\let\pstree@auxout\@auxout}% \global\let\pstree@initlevelsepadjust\relax} \newcount\pstree@stop \pstree@stop=-987654321 \def\pstree@vertical#1{% \pst@cntg=\ifpstreeflip-\fi\wd\pst@hbox \divide\pst@cntg 2 \pstree@add\pstree@theleftprofile \pstree@add\pstree@therightprofile \pst@dimg=\psk@thislevelsep\relax \ifx\psk@thislevelsepmode\relax \pstree@vertlevelsepadjust{#1}% \fi \global\setbox\pstree@box=\hbox{% \vrule height \pst@tempc sp depth \pst@tempd sp width \z@ \unhbox\pstree@rootbox #1\pst@dimg\hbox to\z@{\hss\unhbox\pst@hbox\hss}}% \if@skiplevel \skiplevel@vertical \else \endgroup \fi \edef\pstree@leftprofile{\pst@tempa,\pstree@theleftprofile}% \edef\pstree@rightprofile{\pst@tempb,\pstree@therightprofile}% \pst@dimc=\ht\pstree@box \pst@dimd=\dp\pstree@box \ifpsshowbbox \pstree@max\pstree@leftprofile\pst@cntg \pst@dima=\pst@cntg sp \pstree@max\pstree@rightprofile\pst@cntg \pst@dimb=\pst@cntg sp \pstree@showbbox \fi \dp\pstree@box=\z@ \ht\pstree@box=\z@ \pstree@restorevalues \pssubtree@vertical \global\let\pstree@treebboxadjust\pstree@savebboxadjust \endgroup \ifnum\pstreelevel>\z@\expandafter\ignorespaces\fi} \def\pstree@vertlevelsepadjust#1{% \ifx\if@filesw\iffalse\else \ifx#1\lower \pst@dimh=\pst@tempd sp \advance\pst@dimh\ht\pst@hbox \else \pst@dimh=\pst@tempc sp \advance\pst@dimh\dp\pst@hbox \fi \immediate\write\@auxout{% \string\pstree@levelsepadjust {\pstree@thetree-\the\pstreelevel}{\number\pst@dimh}}% \fi} \def\pstree@succcolumn{% \def\pssubtree@vertical{\pssubtree@vertical@h}% \def\pssubtree@horizontal{\pssubtree@horizontal@h}% \def\pstree@node{\pstree@node@h}}% \def\pssubtree@horizontal@h{% \xdef\pstree@theleftprofile{\number\pst@dima,\pstree@theleftprofile}% \xdef\pstree@therightprofile{\number\pst@dimb,\pstree@therightprofile}% \ifnum\psnodecnt=\z@ \global\let\pstree@theupprofile\pstree@upprofile \global\let\pstree@thedownprofile\pstree@downprofile \box\pstree@box \else \ifpstreeflip \pssubtree@horizontal@@hflip \else \pssubtree@horizontal@@h \fi \fi \global\advance\psnodecnt 1\relax} \def\pssubtree@horizontal@@h{% \psk@thistreefit\pstree@thedownprofile\pstree@upprofile \global\advance\pstree@cnt\pst@cnth \lower\the\pstree@cnt sp\box\pstree@box \pstree@zip\pstree@thedownprofile\pstree@downprofile\pstree@thedownprofile \pst@cnth=\pstree@cnt \pstree@zip\pstree@upprofile\pstree@theupprofile\pstree@theupprofile} \def\pssubtree@horizontal@@hflip{% \psk@thistreefit\pstree@theupprofile\pstree@downprofile \global\advance\pstree@cnt\pst@cnth \raise\the\pstree@cnt sp\box\pstree@box \pstree@zip\pstree@theupprofile\pstree@upprofile\pstree@theupprofile \pst@cnth=\pstree@cnt \pstree@zip\pstree@downprofile\pstree@thedownprofile\pstree@thedownprofile} \def\pstree@node@h{% \edef\pstree@upprofile{\psk@thistreenodesize\pst@dimc,\pstree@stop,}% \edef\pstree@downprofile{\psk@thistreenodesize\pst@dimd,\pstree@stop,}% \pssubtree@horizontal@h}% \def\pssubtree@vertical@h{% \pstree@max\pstree@leftprofile\pst@cntg \pst@dima=\pst@cntg sp \pstree@max\pstree@rightprofile\pst@cntg \pst@dimb=\pst@cntg sp \pstree@treebboxadjust \edef\pstree@upprofile{\number\pst@dimc,\pstree@stop,}% \edef\pstree@downprofile{\number\pst@dimd,\pstree@stop,}% \pssubtree@horizontal@h}% \newif\if@psrighttree \def\pstree@right{% \@psrighttreetrue \pstree@succcolumn \pstree@makebox\pstree@horizontal} \def\pstree@left{% \@psrighttreefalse \pstree@succcolumn \pstree@makebox\pstree@horizontal} \def\pstree@horizontal{% \ifdim\wd\pst@hbox=\z@\else \@pstrickserr{Extraneous space in tree successors}\@ehpa \fi \pst@cntg=\ifpstreeflip\ht\else\dp\fi\pst@hbox \divide\pst@cntg 2 \pstree@add\pstree@theupprofile \pstree@add\pstree@thedownprofile \ifx\psk@thislevelsepmode\relax \pstree@horizlevelsepadjust \fi \pst@dimg\psk@thislevelsep\relax \global\setbox\pstree@box=\hbox{% \unhbox\pstree@rootbox \kern\if@psrighttree\else-\fi\pst@dimg \ifpstreeflip\lower\else\raise\fi\pst@cntg sp\box\pst@hbox}% \if@psrighttree \pst@dimh=\pst@dimg \pstree@max\pstree@therightprofile\pst@cntg \global\advance\pst@dimh\pst@cntg sp \global\pst@dimg=\pst@tempa sp \else \pstree@max\pstree@theleftprofile\pst@cntg \global\advance\pst@dimg\pst@cntg sp \global\pst@dimh=\pst@tempb sp \fi \if@skiplevel \skiplevel@horizontal \else \endgroup \fi \pst@dima=\pst@dimg \pst@dimb=\pst@dimh \edef\pstree@upprofile{\pst@tempc,\pstree@theupprofile}% \edef\pstree@downprofile{\pst@tempd,\pstree@thedownprofile}% \dp\pstree@box=\z@ \ht\pstree@box=\z@ \wd\pstree@box=\z@ \ifpsshowbbox \pstree@max\pstree@upprofile\pst@cntg \pst@dimc=\pst@cntg sp \pstree@max\pstree@downprofile\pst@cntg \pst@dimd=\pst@cntg sp \pstree@showbbox \fi \pstree@restorevalues \pssubtree@horizontal \endgroup \ifnum\pstreelevel>\z@\expandafter\ignorespaces\fi} \def\pstree@horizlevelsepadjust#1{% \ifx\if@filesw\iffalse\else \if@psrighttree \pst@dimh=\pst@tempb sp \pstree@max\pstree@theleftprofile\pst@cntg \advance\pst@dimh\pst@cntg sp \else \pst@dimh=\pst@tempa sp \pstree@max\pstree@therightprofile\pst@cntg \advance\pst@dimh\pst@cntg sp \fi \immediate\write\@auxout{% \string\pstree@levelsepadjust {\pstree@thetree-\the\pstreelevel}{\number\pst@dimh}}% \fi} \def\psset@treemode#1{% \pst@cntg= \ifx#1U\@empty2\else\ifx#1R\@empty1\else\ifx#1L\@empty3\else0\fi\fi\fi \relax \edef\psk@treemode{\the\pst@cntg}% \ifcase\pst@cntg \let\pstree@do\pstree@down \or \let\pstree@do\pstree@right \or \let\pstree@do\pstree@up \or \let\pstree@do\pstree@left \fi} \def\psk@treemode{0} \let\pstree@do\pstree@down \def\psset@treesep#1{% \pssetlength\pst@dimg{#1}% \edef\psk@treesep{\number\pst@dimg}}% \psset@treesep{.75cm} \def\psset@thistreesep#1{% \pssetlength\pst@dimg{#1}% \edef\psk@thistreesep{\number\pst@dimg}}% \def\psset@treenodesize#1{% \pssetlength\pst@dimg{#1}% \ifdim\pst@dimg<\z@ \let\psk@treenodesize\number \else \edef\psk@treenodesize{\number\pst@dimg\noexpand\@gobble}% \fi} \psset@treenodesize{-1pt} \def\psset@thistreenodesize#1{% \pssetlength\pst@dimg{#1}% \ifdim\pst@dimg<\z@ \let\psk@thistreenodesize\number \else \edef\psk@thistreenodesize{\number\pst@dimg\noexpand\@gobble}% \fi} \def\psset@levelsep#1{% \pst@expandafter{\pst@ifstar\psset@@levelsep}{#1}\@nil} \def\psset@@levelsep#1\@nil{% \pst@@getlength{#1}\psk@levelsep \if@star \pstree@initlevelsepadjust \let\psk@levelsepmode\relax \else \def\psk@levelsepmode{}% \fi} \psset@levelsep{2cm} \def\psset@thislevelsep#1{% \pst@expandafter{\pst@ifstar\psset@@thislevelsep}{#1}\@nil} \def\psset@@thislevelsep#1\@nil{% \pst@@getlength{#1}\psk@thislevelsep \if@star \pstree@initlevelsepadjust \let\psk@thislevelsepmode\relax \else \def\psk@thislevelsepmode{}% \fi} \newif\ifpstreeflip \def\psset@treeflip#1{\@nameuse{pstreeflip#1}} \psset@treeflip{false} \def\pstree@node@o{% \leavevmode \hbox{% \vrule height \pst@dimc depth \pst@dimd width \z@ \kern\pst@dima \box\pstree@box \kern\pst@dimb}} \def\pssubtree@vertical@o{% \pstree@max\pstree@leftprofile\pst@cntg \pst@dima=\pst@cntg sp \pstree@max\pstree@rightprofile\pst@cntg \pst@dimb=\pst@cntg sp \pstree@treebboxadjust \pstree@node} \def\pssubtree@horizontal@o{% \pstree@max\pstree@upprofile\pst@cntg \pst@dimc=\pst@cntg sp \pstree@max\pstree@downprofile\pst@cntg \pst@dimd=\pst@cntg sp \pstree@treebboxadjust \pstree@node} \def\pstree@outer{% \def\pstree@node{\pstree@node@o}% \def\pssubtree@vertical{\pssubtree@vertical@o}% \def\pssubtree@horizontal{\pssubtree@horizontal@o}% \pstreelevel=\z@ \def\pstree@predmode{-1}% \def\pst@tposflip{}% \let\pst@thisbox\relax \let\pst@shortput\pstree@savedshortput} \let\pstree@savedshortput\ignorespaces \pstree@outer \newif\ifpsshowbbox \def\psset@showbbox#1{\@nameuse{psshowbbox#1}}% \psset@showbbox{false} \def\pstree@showbbox{% \setbox\pstree@box=\hbox{% \psframe[linewidth=0,linecolor=black,linestyle=solid,fillstyle=none]% (-\pst@dima,-\pst@dimd)(\pst@dimb,\pst@dimc)% \box\pstree@box}}% \def\psset@edge#1{% \def\psedge{#1}% \ifx\psedge\@none \def\psedge##1##2{}% \fi} \psset@edge{\ncline} \def\pspred{T} \def\pstree@makenodebox{% \pst@@killglue \let\pst@thispsbox\pstree@outer \pst@makebox} \def\begin@treenode{% \pst@@killglue \begingroup \use@par \global\let\pstree@edge\psedge \xdef\pssucc{\pspred-\the\psnodecnt}} \def\MakeShortTnput#1{% \def\end@treenode{\@ifnextchar#1{\tnput@}{\end@@treenode}}} \MakeShortTnput{~} \def\end@@treenode{% \pstree@bboxadjust \gdef\pstree@bboxadjust{}% \ifpsshowbbox\pstree@showbbox\fi \pstree@node \endgroup \ifnum\pstreelevel>\z@ \pstree@edge{\pspred}{\pssucc}% \expandafter\pst@shortput \else \expandafter\ignorespaces \fi} \def\pstree@bboxadjust{} \def\pstree@setbboxadjust#1#2{% \pssetlength\pst@dimg{#1}% \xdef\pstree@bboxadjust{% \pstree@bboxadjust #2\number\pst@dimg sp\relax}} \def\psset@bbl#1{\pstree@setbboxadjust{#1}{\pst@dima=}} \def\psset@bbr#1{\pstree@setbboxadjust{#1}{\pst@dimb=}} \def\psset@bbh#1{\pstree@setbboxadjust{#1}{\pst@dimc=}} \def\psset@bbd#1{\pstree@setbboxadjust{#1}{\pst@dimd=}} \def\psset@xbbl#1{\pstree@setbboxadjust{#1}{\advance\pst@dima}} \def\psset@xbbr#1{\pstree@setbboxadjust{#1}{\advance\pst@dimb}} \def\psset@xbbh#1{\pstree@setbboxadjust{#1}{\advance\pst@dimc}} \def\psset@xbbd#1{\pstree@setbboxadjust{#1}{\advance\pst@dimd}} \let\pstree@treebboxadjust\relax \def\Tn{\def\pst@par{}\pst@object{Tn}} \def\Tn@i{% \pst@@killglue \global\let\pssucc\pspred \begingroup \pst@dima=\z@ \pst@dimb=\z@ \pst@dimc=\z@ \pst@dimd=\z@ \setbox\pstree@box=\hbox{}%% \pstree@node \endgroup \ignorespaces} \def\Tp{\def\pst@par{}\pst@object{Tp}} \def\Tp@i{% \begin@treenode \pst@dima=\z@ \pst@dimb=\z@ \pst@dimc=\z@ \pst@dimd=\z@ \setbox\pstree@box=\hbox{% \pst@newnode{\pssucc}{10}{0 0 }{\tx@InitPnode}}% \end@treenode} \def\Tc{\def\pst@par{}\pst@object{Tc}} \def\Tc@i#1{% \begin@treenode \pssetlength\pst@dima{#1}% \pst@dimb=\pst@dima \pst@dimc=\pst@dima \pst@dimd=\pst@dima \nodealignfalse \setbox\pstree@box=\hbox{\cnode@ii(\z@,\z@){#1}{\pssucc}}% \end@treenode} \def\TC{\def\pst@par{}\pst@object{TC}} \def\TC@i{\Tc@i{\psk@radius}} \def\Toval{\def\pst@par{}\pst@object{Toval}} \def\Toval@i{\pstree@makenodebox{\Toval@ii\ovalnode@ii}} \def\Toval@ii#1{% \begin@treenode \nodealigntrue \setbox\pstree@box=\hbox{#1\pssucc}% \pst@dima=\wd\pstree@box \divide\pst@dima 2 \pst@dimb=\pst@dima \pst@dimc=\ht\pstree@box \pst@dimd=\dp\pstree@box \setbox\pstree@box=\hbox to\z@{\hss\unhbox\pstree@box\hss}% \dp\pstree@box=\z@ \ht\pstree@box=\z@ \end@treenode} \def\Tcircle{\def\pst@par{}\pst@object{Tcircle}} \def\Tcircle@i{\pstree@makenodebox{\Toval@ii\circlenode@ii}} \def\Tf{\def\pst@par{}\pst@object{Tf}} \def\Tf@i{\Toval@ii{\fnode@ii()}} \def\Tdia{\def\pst@par{}\pst@object{Tdia}} \def\Tdia@i{\pstree@makenodebox{\Toval@ii\dianode@ii}} \def\Ttri{\def\pst@par{}\pst@object{Ttri}} \def\Ttri@i{\pstree@makenodebox{\Ttri@ii}} \def\Ttri@ii{% \begin@treenode \nodealigntrue \setbox\pstree@box=\hbox{\trinode@ii\pssucc}% \pst@dima=\pst@dimg % Set by \pst@triboxsep \pst@dimb=\wd\pstree@box \advance\pst@dimb-\pst@dima \pst@dimc=\ht\pstree@box \pst@dimd=\dp\pstree@box \setbox\pstree@box=\hbox to\z@{\hss\unhbox\pstree@box\hss}% \dp\pstree@box=\z@ \ht\pstree@box=\z@ \end@treenode} \def\Tr{\def\pst@par{}\pst@object{Tr}} % Modification Sebastian Rahtz - 27 Oct. 1996 %\def\Tr@i{\pstree@makenodebox{\Tr@ii{\begingroup\rnode@ii}}} \def\Tr@i{\pstree@makenodebox{\Tr@ii{\rnode@iii\rnode@iv}}} \def\Tr@ii#1{% \begin@treenode \def\pstree@nodehook{% \xdef\pstree@next{\pst@dima=\number\pst@dima sp\relax}}% \nodealigntrue \setbox\pstree@box\hbox{#1\pssucc}% \pstree@next \pst@dimb=\wd\pstree@box \advance\pst@dimb-\pst@dima \pst@dimc=\ht\pstree@box \pst@dimd=\dp\pstree@box \setbox\pstree@box\hbox to\z@{\kern-\pst@dima\unhbox\pstree@box\hss}% \ht\pstree@box=\z@ \dp\pstree@box=\z@ \end@treenode} \def\TR{\def\pst@par{}\pst@object{TR}} % Modification Denis GIROU (CNRS/IDRIS) - 25 Oct. 1996 %\def\TR@i{\pstree@makenodebox{\Tr@ii{\Rnode@ii}}} \def\TR@i{\pstree@makenodebox{\Tr@ii{\rnode@iii\Rnode@ii}}} \def\Tdot{\def\pst@par{}\pst@object{Tdot}} \def\Tdot@i{% \begin@treenode \def\pstree@nodehook{\xdef\pstree@next{% \pst@dima=\number\pst@dima sp\relax \pst@dimc=\number\pst@dimb sp\relax}}% \nodealignfalse \setbox\pstree@box=\hbox{\dotnode@ii(\z@,\z@)\pssucc}% \pstree@next \pst@dimb=\pst@dima \pst@dimd=\pst@dimc \end@treenode} \def\psset@fansize#1{\pst@@getlength{#1}\psk@fansize} \psset@fansize{1cm} \def\Tfan{\def\pst@par{}\pst@object{Tfan}} \def\Tfan@i{% \addto@par{edge=none}% \begin@treenode \solid@star \pst@dimb=\psk@fansize \pst@dimd=\pslinewidth \advance\pst@dimb-\pst@dimd \divide\pst@dimb 2 \divide\pst@dimd 2 \ifodd\psk@treemode\relax \pst@dima=\pst@dimd \pst@dimc=\pst@dimb \else \pst@dima=\pst@dimb \pst@dimc=\pst@dimd \fi \setbox\pstree@box=\hbox{% \pst@newnode{\pssucc}{16}{}{% /Y 0 def /X 0 def /l \pst@number\pst@dima def /r l def /u \pst@number\pst@dimc def /d u def /NodePos { \tx@GetRnodePos } def}% \def\pst@linetype{1}% \nc@object{Closed}{\pspred}{\pssucc}{.5}{% tx@Dict begin \psline@iii pop end /w \pst@number\pst@dimb CLW 2 div sub def /m \ifodd\psk@treemode false \else true \fi def \tx@Tfan}}% \pst@dimb=\pst@dima \pst@dimd=\pst@dimc \end@treenode} \def\psset@tnsep#1{% \def\pst@tempg{#1}% \ifx\pst@tempg\@empty \def\psk@tnsep{\number\pslabelsep sp}% \else \pst@@getlength{#1}\psk@tnsep \fi} \psset@tnsep{} \def\psset@tnyref#1{\def\psk@tnyref{#1}}% \psset@tnyref{} \def\psset@tnheight#1{\edef\psk@tnheight{#1}} \psset@tnheight{\ht\strutbox} \def\psset@tndepth#1{\edef\psk@tndepth{#1}} \psset@tndepth{\dp\strutbox} \def\psset@tnpos#1{% \def\pst@tempg{#1}% \ifx\pst@tempg\@empty \def\psk@tnpos{% \ifcase\psk@treemode b\or r\or a\or l\fi}% \else \@ifundefined{pstree@tnput@#1}% {\@pstrickserr{Bad tnpos: `#1'}\@ehpa}% {\edef\psk@tnpos{#1}}% \fi} \psset@tnpos{} \def\tnput@#1{\def\pst@par{}\pst@object{tnput}} \def\tnput@i{\pstree@makenodebox{\tnput@ii}} \def\tnput@ii{% \begingroup \use@par \xdef\next{% \if@star\noexpand\pst@starbox\fi \noexpand\def\noexpand\psk@thistndepth{\psk@tndepth}% \noexpand\def\noexpand\psk@thistnheight{\psk@tnheight}% \noexpand\def\noexpand\psk@thistnyref{\psk@tnyref}% \noexpand\def\noexpand\psk@thistnsep{\psk@tnsep}% \expandafter\noexpand\csname pstree@tnput@\psk@tnpos\endcsname}% \endgroup \next \end@treenode} \@namedef{pstree@tnput@b}{% \pstree@tnput@@v\pst@dimd\ht\dp\lower\psk@thistnheight} \@namedef{pstree@tnput@a}{% \pstree@tnput@@v\pst@dimc\dp\ht\raise\psk@thistndepth} \def\pstree@tnput@@v#1#2#3#4#5{% \pst@dimh=\wd\pst@hbox \pst@dimg=\psk@href\pst@dimh \advance\pst@dimg\pst@dimh \divide\pst@dimg 2 \advance\pst@dimh-\pst@dimg \ifdim\pst@dimg>\pst@dima \pst@dima=\pst@dimg \fi \ifdim\pst@dimh>\pst@dimb \pst@dimb=\pst@dimh \fi \pst@dimh=\psk@thistnsep\relax \ifdim\pst@dimh<\z@ \pst@dimh=-\pst@dimh \else \advance\pst@dimh#1% \fi \pssetlength\dimen@{#5}% \ifdim\dimen@>#2\pst@hbox \advance\pst@dimh\dimen@\relax \else \advance\pst@dimh#2\pst@hbox \fi \setbox\pstree@box=\hbox{% \box\pstree@box #4\pst@dimh\hbox to\z@{\kern-\pst@dimg\unhbox\pst@hbox\hss}}% #1=#3\pstree@box \dp\pstree@box=\z@ \ht\pstree@box=\z@} \@namedef{pstree@tnput@l}{% \pstree@tnput@@h\pst@dima{% \hss \lower\pst@dimg\box\pst@hbox \kern\pst@dimh \box\pstree@box}} \@namedef{pstree@tnput@r}{% \pstree@tnput@@h\pst@dimb{% \box\pstree@box \kern\pst@dimh \lower\pst@dimg\box\pst@hbox \hss}}% \def\pstree@tnput@@h#1#2{% \ifx\psk@thistnyref\@empty \pssetlength\pst@dimg\psk@vref \else \pst@dimg=\ht\pst@hbox \advance\pst@dimg\dp\pst@hbox \pst@dimg=\psk@thistnyref\pst@dimg \advance\pst@dimg-\dp\pst@hbox \fi \pst@dimh=\psk@thistnsep\relax \ifdim\pst@dimh<\z@ \pst@dimh=-\pst@dimh \else \advance\pst@dimh#1% \fi #1=\pst@dimh \advance#1\wd\pst@hbox \setbox\pstree@box=\hbox to\z@{#2}% \ifdim\ht\pstree@box>\pst@dimc \pst@dimc=\ht\pstree@box \fi \ifdim\dp\pstree@box>\pst@dimd \pst@dimd=\dp\pstree@box \fi \dp\pstree@box=\z@ \ht\pstree@box=\z@} \newif\if@skiplevel \def\skiplevel{\def\pst@par{}\pst@object{skiplevel}} \def\skiplevel@i{\def\pstree@makebox{\pst@@makebox}\skiplevel@ii} \def\skiplevel@ii{% \pst@@killglue \begingroup \let\pssucc\pspred \def\pst@tempa{0}% \def\pst@tempb{0}% \def\pst@tempc{0}% \def\pst@tempd{0}% \setbox\pstree@rootbox=\hbox{}% \pstree@savevalues \begingroup \pstree@initsuccvalues \pstree@setlevelpar \@skipleveltrue \pstree@do} \def\pstree@gettop#1{\expandafter\pstree@@gettop#1\@nil} \def\pstree@@gettop#1,#2\@nil{#1} \def\skiplevel@horizontal{% \pst@dimc=\pstree@gettop\pstree@theupprofile sp \pst@dimd=\pstree@gettop\pstree@thedownprofile sp \pstree@treebboxadjust \gdef\pstree@treebboxadjust{}% \xdef\pstree@next{% \noexpand\def\noexpand\pst@tempc{\number\pst@dimc}% \noexpand\def\noexpand\pst@tempd{\number\pst@dimd}}% \endgroup \pstree@next} \def\skiplevel@vertical{% \pst@dima=\pstree@gettop\pstree@theleftprofile sp \pst@dimb=\pstree@gettop\pstree@therightprofile sp \pstree@treebboxadjust \gdef\pstree@treebboxadjust{}% \xdef\pstree@next{% \noexpand\def\noexpand\pst@tempa{\number\pst@dima}% \noexpand\def\noexpand\pst@tempb{\number\pst@dimb}}% \endgroup \pstree@next} \def\skiplevels{\def\pst@par{}\pst@object{skiplevels}} \def\skiplevels@i#1{% \pst@@killglue \begingroup \pst@cnta=#1\relax \edef\skiplevels@num{\the\pst@cnta}% \def\pstree@makebox{\pst@makelongbox}% \def\endskiplevels{}% \loop \ifnum\pst@cnta>\z@ \advance\pst@cnta-1 \expandafter\def\expandafter\endskiplevels\expandafter{% \endskiplevels\pst@endlongbox} \skiplevel@ii \repeat \expandafter\def\expandafter\endskiplevels\expandafter{% \endskiplevels\endgroup\ignorespaces} \ignorespaces} \catcode`\@=\TheAtCode\relax \endinput %% %% END: pst-tree.tex