% ecltree.sty (C) hideki isozaki Nov. 12, 1990 % FMi fix: use \protected@edef instead of \edef (2002/11) % % It may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.2 % 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.2 or later is part of all distributions of LaTeX % version 1999/12/01 or later. % % In this style file, I intentionally didn't use ordinary % terms such as \tree, \subtree, \leaf etc. % because I will use different tree macros in one file. % % This macro needs epic.sty % Confirm your epic.sty does not contain \makeatother at EOF. % \makeatletter \typeout{ECL Tree graph macro by isozaki, Nov. 12, 1990 + 2e FIX} % Ignore End Of Line \endlinechar=-1\relax % Dimensions and Boxes : See below \newdimen\@BundleWidth \newdimen\@BundleDepth \newdimen\@BundleHeight \newbox\@NodeBox \newdimen\GapDepth \GapDepth=15\p@ \newdimen\GapWidth \GapWidth=4\p@ \newdimen\EdgeLabelSep \EdgeLabelSep=7\p@ % % --------------- - % | \@TopLabel | | % --------------- - | % (\@SupportX,\@SupportY) | | % / \ | | % / \ | | % / \ | \GapDepth | \@BundleHeight % / \ | | % / \ | | %(\@HandleX,0) \ | | % -------------- -------------- - - % | \@NodeBox | | \@NodeBox | | \@BundleDepth % | | -------------- | % -------------- - % |---| % \GapWidth % % |-----------------------------| % \@PicWidth % % The main environment to make a (sub)tree: bundle % \begin{bundle} \chunk_1 \chunk_2 ... \chunk_n \end{bundle} % \def\bundle#1{\leavevmode\hbox\bgroup \endlinechar=-1 \def\@TopLabel{#1} \def\@HandleList{} \def\@EdgeLabels{} \protected@edef\@EdgeLabelsY{\expandafter\@RemoveDim\the\EdgeLabelSep} \unitlength=\p@ \@BundleWidth=\z@ \@BundleHeight=\z@ \@BundleDepth=\z@ \ignorespaces} \def\endbundle{ \advance\@BundleWidth by -\GapWidth \hskip-\GapWidth \setbox\@NodeBox=\hbox{\vbox{\null\@TopLabel}} \advance\@BundleHeight by \GapDepth \advance\@BundleHeight by \ht\@NodeBox \advance\@BundleHeight by \dp\@NodeBox \vrule\@height\@BundleHeight\@width\z@\@depth\@BundleDepth \protected@edef\@SupportY{\expandafter\@RemoveDim\the\GapDepth} \protected@edef\@SupportX{\expandafter\@RemoveDim\the\@BundleWidth} \setbox\@NodeBox=\hbox to \z@{\hss\@TopLabel\hss} \hskip-\@BundleWidth \protected@edef\@EdgeLabels{\@EdgeLabels{}} \protected@edef\@PicWidth{\expandafter\@RemoveDim\the\@BundleWidth} \@BundleWidth=0.5\@BundleWidth \protected@edef\@SupportX{\expandafter\@RemoveDim\the\@BundleWidth} \@DrawBundle} \def\@DrawBundle{ \begin{picture}(\@PicWidth,0)(0,0) \protected@edef\@HandleList{\expandafter\@cdr\@HandleList\@nil} \@for\@HandleX:=\@HandleList\do{ \@DrawLine(\@SupportX,\@SupportY)(\@HandleX,0) \put(\@HandleX,\@EdgeLabelsY){ \makebox(0,0){\expandafter\@car\@EdgeLabels\@nil}} \protected@edef\@EdgeLabels{\expandafter\@cdr\@EdgeLabels\@nil}} \put(\@SupportX,\@SupportY){\raise\dp\@NodeBox\box\@NodeBox} \end{picture}\egroup} % % \chunk[#1]{#2} means a leaf or a subtree. % #1 ... Label for the edge which connects the leaf or the subtree % with its parent node. (optional argument) % #2 ... Label for the leaf or the subtree % \def\chunk{\@ifnextchar[{\@chunk}{\@chunk[]}} \def\@chunk[#1]#2{\protected@edef\@EdgeLabels{\@EdgeLabels{#1}} \setbox\@NodeBox=\vtop{\null\hbox{#2}} \advance\@BundleWidth by 0.5\wd\@NodeBox \ifnum\@BundleDepth<\dp\@NodeBox \@BundleDepth=\dp\@NodeBox\fi \protected@edef\@HandleList{\@HandleList, \expandafter\@RemoveDim\the\@BundleWidth} \advance\@BundleWidth by 0.5\wd\@NodeBox \advance\@BundleWidth by \GapWidth \box\@NodeBox\hskip\GapWidth \ignorespaces} % To change line attribute % ex. % \drawwith{\path} ... efficient solid line defined by eepic.sty % \drawwith{\dashline{2}} \def\drawwith#1{\def\@DrawLine{#1}} % Default \drawwith{\drawline} % Ordinary catcode for p and t is 11 % Application of \the to dimen generates text such as 1.0pt. % This pt's catcode is 12. {\catcode`\p=12 \catcode`\t=12 \gdef\@RemoveDim#1pt{#1}} % Restore original End Of Line \endlinechar=13\relax \endinput