CTAN Comprehensive TeX Archive Network

Directory graphics/tree

Tree, a program for displaying trees.

			Greg Lee, lee@uhccux.uhcc.hawaii.edu, 7/90

			*                             *
                        *        ///////\\\\\\        *
                                /             \        
                        *  Tree Drawing      Program  *
                                \             /        
                        *        \\\\\\\//////        *
                        *                             *

The above is from the following tree-definition:

			\tree -b9
	((Announcement\O(Available\I\O (Tree Drawing()) (\ \ \ \ Program()) ) ))

The `tree' program formats trees for screen display or printing with
TeX.  The program, supporting utilities, and accompanying documents are
free and in the public domain.  If you distribute a modified version of
`tree', please keep your version in the public domain.

At the University of Hawaii, the tree program is available on the
uhccux system in directory ~lingua/bin with source code and documents
in directory ~lee/src/Tree.  And in the Linguistics Department, the
program is available on uhl2 in directory /usr/local/bin with source
code and documents in ~greg/Tree.

The predecessor program to this was written by Chris Barker, the
Linguistics Board at University of California, Santa Cruz, email:

This version has been tested only on Unix:  SunOS 3.5, Ultrix 3.1, and
SysV 3.50 (Unixpc).  It requires the `lex' utility to compile, or else
`flex', which is the free version of Unix `lex' by Vern Pacson.  The
Makefile is set up to use `flex'.  To compile the source, type "make",
which will process the source code with flex then will invoke the C
compiler.  This creates 3 programs:  `tree', `tpar', and `unpar'.  The
last two are minor utilities that you may not have any need for; they
are described below.  Typing "make tex" compiles `mdoc' and uses that
and `tree' and `tpar' to create some .tex files with examples and
a document on the tree program.

Basic usage for screen display is:  "tree textfile", where the
textfile has some trees.  After you've made the program, try displaying
the example files with:

	% tree sample
	% tree texsample

The texsample file is intended to illustrate printed output using TeX,
which you can get with the following (adapted for your local conventions
for using TeX and printing):

	% tree -t texsample > texsample.tex
	% tex texsample
	% lpr -d texsample.dvi

And you can follow the similar procedure for the file sample.  This
should get you printout of trees done with horizontal and vertical
lines.  If you have a PostScript printer, the following may work to get
trees made with slanty lines:

	% tree -u texsample > texsample.tex
	% tex texsample
	% lpr -d texsample.dvi

That is, everything the same, except use `-u' instead of `-t'.  (`-t' is
for TeX; the only logic to the `-u' is that `u' comes after `t'.) If
this last doesn't work right, the most likely thing to have gone wrong
is that your local PostScript driver program does not treat TeX \special
commands, which I've used to embed PS code, in the same way that mine
does.  If that's a problem, there are two things you can do about it.
(1) Find out what should be in a TeX \special to tell your driver to
just spit out literally into its output whatever it finds in a \special,
then modify the Makefile or the C code in the source tex.c accordingly
(see `SKEY' in the code), or (2) email me and I'll send you my PS driver
program (which is a modification of the free dvi2ps program from MIT).

The Makefile also provides for "make tex" to create TeXable files
use.tex, sample.tex, texsample.tex, and ptsample.tex for a sort of user
manual and some sample output.  If you can't get the `-u' option to
work, you can change the definition of UT in the Makefile to -t.

Tree has some options for modifying or decorating trees in various ways.
Some of these can be used either for all the trees in a source text file
by giving the option on the command line after `tree', or for some
individual tree by giving the option after the `\tree' command within
the text file.  For instance, if the text has

	\tree -t (S (Q (did) (V' (you go))))

then TeX code will be generated for this particular tree in the text,
but not necessarily for other trees in that text file.  Here is another

	% tree -L < filename
	\tree -L (S(NP(N(features)))(V'(V(galore))))

The first Unix command will have `tree' omit all connecting lines under
nodes for all trees in the file `filename'.  The second, as a line in a
text file processed by tree, will do that for just the one tree that
follows.  There are other options that apply just to single nodes within
a tree, which are given as backslash plus some capital letter.  As it
happens, in this instance there is an option \L for individual nodes,

	\tree (S(NP(N\L(features)))(V'(\L V(galore))))

which omits lines under just the two nodes `N' and `V'.  The second \L
in this example has to be separated by a space from the following V so
`tree' can tell that this is not a TeX command with the name `LV'.  (If
it happens that you need to use a TeX command with the name `L' in a
node, you could use \\L for this, but it is necessary to use \\ for
TeX commands only in such cases of conflict.)

Here is a reference list of the options or commands for formatting
individual nodes.  (See the man page and the "use" document for more
info.) In this list, `<d>' is an optional single digit argument, and
`<n>' is an obligatory non-negative integer argument.

	  Command:	Option:	Function:

     \D<d> "daughter"		label discontinuous daughter
     \E    "even"	  -E	select basis for flatten command
     \F    "flatten"	  -F	move nodes to lowest level
     \H    "head"		center mother over this daughter
     \I    "invert"	  -I	turn tree upside down
     \L    "lexical"	  -L	don't put lines under nodes
     \M<d> "mother"		label mother of discontinuous daughter
     \O    "omit"	  -O	omit line above nodes
     \P    "phantom"		as "omit" but retain spacing
     \T    "triangle"	  -T	put triangles under nodes
     \R    "relational"	  -R	put aligned verticals at right of nodes
     \B<d> "boldness"	  -b<n> do shaded triangles or bold lines (see below)
			  -g<n> use n as the minimal gap between nodes
			  -v	don't suppress TeX commands on screen
			  -q	suppress warnings

All commands of the form backslash plus capital letter `tree' assumes
are intended for it, and it eats them up without comment, even though
in most cases they don't do anything.

The option `-b<n>' has different effects depending on output is
tty-style or TeX code.  The sample files have examples for the latter.
For tty output, here is a series of trees showing how the connecting
"lines" can be varied.  These are from the tree definition:

  \tree (bold =<n>(family\T(Martha Henry))(uncle)(aunt)(kin(Fred)(Milly\H)))

with values from 0 through 9 for <n> and with option `-b<n>':

	              bold =0
	     |       |       |       |
	   family  uncle    aunt    kin
	_____|______          _______|
	|__________|          |      |
	Martha Henry         Fred  Milly
	              bold =1
	     |       |       |       |
	   family  uncle    aunt    kin
	+----+-----+          -------|
	|----------|          |      |
	Martha Henry         Fred  Milly
	              bold =2
	     :       :       :       :
	   family  uncle    aunt    kin
	 ....:.....           .......:
	::::::::::::          :      :
	Martha Henry         Fred  Milly
	              bold =3
	     |       |       |       |
	   family  uncle    aunt    kin
	||||||||||||          ||||||||
	||||||||||||          |      |
	Martha Henry         Fred  Milly
	              bold =4
	     :       :       :       :
	   family  uncle    aunt    kin
	::::::::::::          ::::::::
	::::::::::::          :      :
	Martha Henry         Fred  Milly
	              bold =5
	      ........../ \.......... 
	     /       :       :       \
	   family  uncle    aunt    kin
	 ..../\....           .......:
	::::::::::::          /      *
	Martha Henry         Fred  Milly
	              bold =6
	      __________/ \__________ 
	     /       |       |       \
	   family  uncle    aunt    kin
	 ____/\____           _______|
	||||||||||||          /      *
	Martha Henry         Fred  Milly
	              bold =7
	      <<<<<<<<<<< >>>>>>>>>>> 
	     /       |       |       \
	   family  uncle    aunt    kin
	 <<<<<>>>>>           <<<<<<<|
	|----------|          /      *
	Martha Henry         Fred  Milly
	              bold =8
	     /       |       |       \
	   family  uncle    aunt    kin
	 /////\\\\\           ///////|
	||||||||||||          /      *
	Martha Henry         Fred  Milly
	              bold =9
	     /       |       |       \
	   family  uncle    aunt    kin
	 /////\\\\\           ///////|
	|**********|          /      *
	Martha Henry         Fred  Milly

The \B<d> command selects the different styles on a node-by-node
basis, affecting the lines just below the node with the command.
\B without argument is the same as \B9.

The utilities `tpar' and `unpar' are for trees using indentation
for indicating structure rather than parenthesization.  For instance,
feed this to `tpar':

	    Det\L - the
	    N - rain
	  VP - V - falls

to get back a parenthesized version that you can give to `tree':


With the option `-v', `tpar' will put some ending parens on new lines,
and with the option `-t' it will turn bracketed digits and i,j,k,x,y,z
into the TeX code for subscripting the digit or letter, and also
translate N',A',V',P' into TeX code for putting bars over the letters.
The `unpar' utility translates the other way, substituting indentation
for parenthesization and, with the `-t' option, going back to the
bracket and prime notation from the TeX code.  The file tpsample has
example trees in indented form.

Bug reports and suggestions for changes are welcome.

Greg Lee
U.S.mail: 562 Moore Hall, Dept. of Linguistics, Univ. of Hawaii, HONO, HI 96822
INTERNET: lee@uhccux.uhcc.hawaii.edu
BITNET:   lee@uhccux

Download the contents of this package in one zip archive (48.6k).

gl-tree – Linguistic trees with a preprocessor

Trees are described by a \tree command followed by a parenthesised outline of the tree to be typeset. Possible output includes commands, possibly using PostScript \specials to do the more difficult things (like sloped lines).

The preprocessors are specified (mostly) as lex tables; a Makefile is provided.

LicensesPublic Domain Software
MaintainerGreg Lee
Guest Book Sitemap Contact Contact Author