Tree, a program for displaying trees. Greg Lee, lee@uhccux.uhcc.hawaii.edu, 7/90 * * Announcement * ///////\\\\\\ * / \ * Tree Drawing Program * \ / * \\\\\\\////// * Available * * The above is from the following tree-definition: \tree -b9 ( (*(*\O(*\O(*\O(*\O))))) ((Announcement\O(Available\I\O (Tree Drawing()) (\ \ \ \ Program()) ) )) (*(*\O(*\O(*\O(*\O))))) ) 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: barker@ling.ucsc.edu. 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 example: % 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, also: \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, `' is an optional single digit argument, and `' is an obligatory non-negative integer argument. Command: Option: Function: \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 "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 "boldness" -b do shaded triangles or bold lines (see below) -g 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' 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 =(family\T(Martha Henry))(uncle)(aunt)(kin(Fred)(Milly\H))) with values from 0 through 9 for and with option `-b': 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 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': \tree S NP Det\L - the N - rain VP - V - falls to get back a parenthesized version that you can give to `tree': \tree (S (NP (Det\L(the)) (N(rain))) (VP(V(falls)))) 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