diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-12 23:54:33 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-12 23:54:33 +0000 |
commit | 805344f28ed18694af2af866bb17dcd325dff2a6 (patch) | |
tree | 5baedcbb70109480948132583616eb7b25854f45 /Master/texmf-dist/tex/latex/ecltree | |
parent | 5d42018a330f8685e7f2025488d58476673f2cbd (diff) |
ecltree
git-svn-id: svn://tug.org/texlive/trunk@845 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/ecltree')
-rw-r--r-- | Master/texmf-dist/tex/latex/ecltree/eclbip.sty | 112 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/ecltree/ecltree.sty | 142 |
2 files changed, 254 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/ecltree/eclbip.sty b/Master/texmf-dist/tex/latex/ecltree/eclbip.sty new file mode 100644 index 00000000000..478ecd2bcc5 --- /dev/null +++ b/Master/texmf-dist/tex/latex/ecltree/eclbip.sty @@ -0,0 +1,112 @@ +% eclbip.sty (C) Hideki ISOZAKI Nov. 24, 1990 +% \ignorespaces Dec.2, 1990 +% draw a bipartite graph with epic.sty + +\typeout{ECL Bipartite graph style file by isozaki Dec.2, 1990} + +\endlinechar=-1\relax +\makeatletter + +\newdimen\bip@len +\newbox\bip@box + +% #1...Width of Left Node Group +% #2...Width of Gap between Left Node Group and Right Node Group +% #3...Width of Right Node Group +% #4...Height of Vertical Gap between Nodes +% #5...Width of a Bullet and its Label + +\def\bipartite#1#2#3#4#5{ + \bip@init\bip@sep{#4} + \bip@init\bip@lW{#1} + \bip@init\bip@eW{#2} + \bip@init\bip@rW{#3} + \let\bip@lX=\bip@lW + \bip@init\bip@rX{\bip@lX\p@}\bip@add\bip@rX{#2} + \bip@init\bip@tX{\bip@rX\p@}\bip@add\bip@tX{#3} + \bip@init\bip@lY{\z@} + \bip@init\bip@rY{\z@} + \xdef\bip@bot{0.0} + \bip@init\bip@elX{\bip@lX\p@} + \bip@add\bip@elX{#5} + \bip@init\bip@erX{\bip@rX\p@} + \bip@add\bip@erX{-#5} + \unitlength=\p@ + \def\endbipartite{\endpicture + \hbox{\vrule\@depth\bip@bot\p@\@height\z@\@width\z@}} + \picture(\bip@tX,0)(0,0)\ignorespaces} + +% +% \leftnode[#1]{#2} +% #1=label, #2=content +% +% \leftnode{#1}=\leftnode[#1]{#1} +% + +\def\leftnode{\@dblarg{\@leftnode}} + +\def\@leftnode[#1]#2{ + \setbox\bip@box=\hbox to \z@{\hss + \@iparbox[c]{\bip@lW\p@}{\raggedleft #2}} + \bip@init\bip@halfH{-.5\ht\bip@box} + \bip@add\bip@halfH{-.5\dp\bip@box} + \bip@init\bip@corrY{\bip@halfH\p@} + \bip@add\bip@corrY{\dp\bip@box} + \bip@add\bip@lY{\bip@halfH\p@} + \put(\bip@lX,\bip@lY){\raise\bip@corrY\p@\box\bip@box} + \put(\bip@elX,\bip@lY){\makebox(0,0){$\bullet$}} + \expandafter\edef\csname bip@L#1\endcsname{\bip@lY} + \bip@add\bip@lY{\bip@halfH\p@} + \bip@max\bip@bot{-\bip@lY\p@} + \bip@add\bip@lY{-\bip@sep\p@}\ignorespaces} + +\def\rightnode{\@dblarg{\@rightnode}} + +\def\@rightnode[#1]#2{ + \setbox\bip@box=\hbox to \z@{ + \@iparbox[c]{\bip@rW\p@}{\raggedright #2}\hss} + \bip@init\bip@halfH{-.5\ht\bip@box} + \bip@add\bip@halfH{-.5\dp\bip@box} + \bip@init\bip@corrY{\bip@halfH\p@} + \bip@add\bip@corrY{\dp\bip@box} + \bip@add\bip@rY{\bip@halfH\p@} + \put(\bip@rX,\bip@rY){\raise\bip@corrY\p@\box\bip@box} + \put(\bip@erX,\bip@rY){\makebox(0,0){$\bullet$}} + \expandafter\edef\csname bip@R#1\endcsname{\bip@rY} + \bip@add\bip@rY{\bip@halfH\p@} + \bip@max\bip@bot{-\bip@rY\p@} + \bip@add\bip@rY{-\bip@sep\p@}\ignorespaces} + +% +% Draw Edges between Nodes +% + +\def\brush#1{\def\bip@brush{#1}\ignorespaces} +\brush{\drawline} + +\def\match#1#2{ + \bip@brush(\bip@elX,\@nameuse{bip@L#1})(\bip@erX,\@nameuse{bip@R#2}) + \ignorespaces} + +% +% (1) Avoidance of too much use of dimen. +% (2) Easy conversion between picture coord and real dimen +% ---> Keep dimen without 'pt' +% + +\def\bip@init#1#2{\bip@len=#2\relax + \edef#1{\expandafter\@RemoveDim\the\bip@len}} + +\def\bip@add#1#2{\bip@len=#1\p@\relax\advance\bip@len by #2\relax + \edef#1{\expandafter\@RemoveDim\the\bip@len}} + +\def\bip@max#1#2{\bip@len=#1\p@\relax + \ifdim\bip@len<#2\relax\bip@len=#2 + \xdef#1{\expandafter\@RemoveDim\the\bip@len}\fi} + +{\catcode`\p=12 \catcode`\t=12 +\gdef\@RemoveDim#1pt{#1}} + +\endlinechar=13\relax + +\endinput diff --git a/Master/texmf-dist/tex/latex/ecltree/ecltree.sty b/Master/texmf-dist/tex/latex/ecltree/ecltree.sty new file mode 100644 index 00000000000..927f50a54b0 --- /dev/null +++ b/Master/texmf-dist/tex/latex/ecltree/ecltree.sty @@ -0,0 +1,142 @@ +% ecltree.sty (C) hideki isozaki Nov. 12, 1990 +% +% 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} + +% 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{} + \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 + \edef\@SupportY{\expandafter\@RemoveDim\the\GapDepth} + \edef\@SupportX{\expandafter\@RemoveDim\the\@BundleWidth} + \setbox\@NodeBox=\hbox to \z@{\hss\@TopLabel\hss} + \hskip-\@BundleWidth + \edef\@EdgeLabels{\@EdgeLabels{}} + \edef\@PicWidth{\expandafter\@RemoveDim\the\@BundleWidth} + \@BundleWidth=0.5\@BundleWidth + \edef\@SupportX{\expandafter\@RemoveDim\the\@BundleWidth} + \@DrawBundle} + + +\def\@DrawBundle{ + \begin{picture}(\@PicWidth,0)(0,0) + \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}} + \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{\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 + \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 + + |