[comp.text.tex] Hierarchical trees

mernst@theory.lcs.mit.edu (Michael Ernst) (01/11/91)

I'm looking for a macro that will let me draw hierarchical trees in the
style of genealogical, organizational, or parse charts.  I'd like to get

                                A
                                |
                --------------------------------
                |                        |     |
                B                        J     K
                |                              |
  --------------------------------             L
  |       |         |            |             |
  C       D         E            I          -------
                    |                       |     |
              ------------                  M     N
	      |     |    |
	      F     G    H

from the "obvious" input, say

\tree{A}[\tree{B}[C,D,\tree{E}[F,G,H],I],J,\tree{K}[\tree{L}[M,N]]]

or something similar (the format of the TeX code is flexible).

Your help is much appreciated.
					-Michael Ernst
					 mernst@theory.lcs.mit.edu 

isozaki@csli.Stanford.EDU (Hideki Isozaki) (01/12/91)

>I'm looking for a macro that will let me draw hierarchical trees in the
>style of genealogical, organizational, or parse charts.
>I'd like to get

You can get my style file by anonymous ftp 
in sun.soe.clarkson.edu:pub/tex/latex-style/nodeedge.shar.


>                                A
>                                |
>                --------------------------------
>                |                        |     |
>                B                        J     K

It draws direct slanted lines using epic/eepic commands by default, 
but I think you can draw such a tree 
with an additional macro definition for \crank as below.

Ex.
\documentstyle[epic,ecltree]{article}

\makeatletter
\newdimen\@midY
\def\crank#1(#2,#3)(#4,#5){%
        \@midY=#3\p@\advance\@midY by #5\p@\divide\@midY by 2\relax
        \edef\@MidY{\expandafter\@RemoveDim\the\@midY}%
        #1(#2,#3)(#2,\@MidY)(#4,\@MidY)(#4,#5)}
\makeatother

\begin{document}

\drawwith{\crank\drawline}

\begin{bundle}{A}
\chunk{\begin{bundle}{B}
        \chunk{C}
        \chunk{D}
        \chunk{E}
        \chunk{I}
        \end{bundle}}
\chunk{J}
\chunk{K}
\end{bundle}

\end{document}

Hideki ISOZAKI

Stanford Univ. & NTT

teexdwu@ioe.lon.ac.uk (DOMINIK WUJASTYK) (01/13/91)

In article <MERNST.91Jan11023825@emu.lcs.mit.edu> mernst@theory.lcs.mit.edu (Michael Ernst) writes:
>I'm looking for a macro that will let me draw hierarchical trees in the
>style of genealogical, organizational, or parse charts.  I'd like to get
>
>                                A
>                                |
>                --------------------------------
>                |                        |     |
>                B                        J     K
>                |                              |
>  --------------------------------             L
>  |       |         |            |             |
>  C       D         E            I          -------
>                    |                       |     |
>              ------------                  M     N
>	      |     |    |
>	      F     G    H
>
>from the "obvious" input, say
>
>\tree{A}[\tree{B}[C,D,\tree{E}[F,G,H],I],J,\tree{K}[\tree{L}[M,N]]]

There's a file chomsky.tex that is in the standard TeX archives and
will do exactly what you want.

Dominik

hwb@texnix.stgt.sub.org (Harald Boegeholz) (01/14/91)

Hi!

Some time ago I wrote some TeX-macros to typeset trees. Since
two people asked recently, here they are (quite short, so I thought
I might post). Be aware, though, of two possible problems:
  1. The macros use the \specials defined by emTeX. If your DVI-driver
     doesn't support these, you won't see any lines.
  2. The semantic nest size required is considerable (too many boxes
     inside of boxes inside of boxes...), so you'll possibly need
     a TeX which is "large" in this respect for typesetting complex trees.

Hope this helps
Harald
------------------ cut here with a sharp knife ------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% tree macros by Harald Boegeholz
% This file uses the \specials defined by emTeX to draw the lines!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcount\pointnumber \pointnumber=0
\newcount\father
\font\nodefont=cmr7
\def\nextpoint{\global\advance\pointnumber by 1\relax}
\def\endsubtrees{\endsubtrees}
\def\tn#1{\vbox{%
  \vskip.5mm
  \hbox{\nodefont\hskip1ex\relax #1\hskip1ex}
  \vskip.5mm
  }%
}
\def\tree#1#2{%
  \vtop{%
    \nextpoint
    \father=\pointnumber
    \halign{\hfil##\hfil\cr
      #1\cr
      \special{em:point \number\father}\cr
      \noalign{\vskip5mm}
      \hbox{\subtrees#2\endsubtrees}\cr
    }%
  }%
}%
\def\subtrees#1{\ifx#1\endsubtrees\let\next\relax\else
  \vbox{\halign{\hfil##\hfil\cr
    \nextpoint
    \special{em:point \number\pointnumber}%
    \special{em:line \number\pointnumber h,\number\father h}\cr
    #1\cr
  }}%
  \let\next\subtrees\fi
  \next
}
\def\labeledtree#1#2{\vbox{\offinterlineskip\halign{\hfil##\hfil\cr
  #1\cr
  \noalign{\vskip3pt}%
  $\scriptstyle#2$\cr
}}}

\parindent0pt
\raggedbottom

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% macros end here ... sample follows:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


{\labeledtree{% 
  {\tree{\tn{1}}{% 
    {\tree{\tn{2}}{% 
      {\tn{3}}% 
      {\tn{4}}% 
      }}% 
    {\tree{\tn{5}}{% 
      {\tn{6}}% 
      }}% 
    }}% 
}{[1,2,2,1,5]}}% 

\bye
------------------ cut here with a sharp knife ------------------------
--
Harald Boegeholz |Home:       hwb@texnix.stgt.sub.org (read daily)
                 |University: boegehol@az3.informatik.uni-stuttgart.de
                 |            ^ please use the latter for large (>100k) mails