summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/tree-dvips
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-03-17 23:48:17 +0000
committerKarl Berry <karl@freefriends.org>2011-03-17 23:48:17 +0000
commit569f3ceae0a1a258e89aca93afbeada0f9129831 (patch)
treea13b80740433137426be2670e60d123af5f79296 /Master/texmf-dist/doc/latex/tree-dvips
parent3bf95a44b19b38cd429bb35ec50c1a68fef77122 (diff)
tree-dvips reinstated per author license declaration
git-svn-id: svn://tug.org/texlive/trunk@21751 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/tree-dvips')
-rw-r--r--Master/texmf-dist/doc/latex/tree-dvips/Makefile12
-rw-r--r--Master/texmf-dist/doc/latex/tree-dvips/README48
-rw-r--r--Master/texmf-dist/doc/latex/tree-dvips/README.TEXLIVE9
-rw-r--r--Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.pdfbin0 -> 32938 bytes
-rw-r--r--Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.tex124
-rw-r--r--Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script718
-rw-r--r--Master/texmf-dist/doc/latex/tree-dvips/tree-manual.pdfbin0 -> 70864 bytes
-rw-r--r--Master/texmf-dist/doc/latex/tree-dvips/tree-manual.tex603
8 files changed, 1514 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/tree-dvips/Makefile b/Master/texmf-dist/doc/latex/tree-dvips/Makefile
new file mode 100644
index 00000000000..348d436136a
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tree-dvips/Makefile
@@ -0,0 +1,12 @@
+
+ALLFILES = README Makefile lingmacros.sty tree-dvips.sty avm.sty tree-dvips91.pro \
+ tree-dvips91.script tree-manual.tex lingmacros-manual.tex avm-doc.tex \
+ avm-doc.sty
+
+all: tree-dvips.pro
+
+tar:
+ tar cf tree-dvips.tar ${ALLFILES}
+
+tree-dvips.pro: tree-dvips.script
+ squeeze < tree-dvips.script > tree-dvips.pro
diff --git a/Master/texmf-dist/doc/latex/tree-dvips/README b/Master/texmf-dist/doc/latex/tree-dvips/README
new file mode 100644
index 00000000000..19ce0b8266e
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tree-dvips/README
@@ -0,0 +1,48 @@
+tree-dvips: There are three items in this package. All files released
+under the LaTeX Project Public License, version 1, or (at your option),
+any later version.
+
+1. CSLI postscript drawing macros. Created by Emma Pease
+(erpease at gmail dot com).
+
+latest update: May 16, 1995
+version .91
+
+These macros were originally created to draw the lines between nodes
+in the trees created by the tree macros in lingmacros.sty. They will
+only work with dvips version 541 or later (by Tomas Rokicki available
+on labrea.stanford.edu) but can be easily modified to be used with
+earlier versions of dvips and slightly less easily modified for other
+dvi to postscript convertors.
+
+Problems:
+
+Be wary of using page extraction programs such as dviselect as you may
+accidently drop the special command loading the header file if you do
+not include the first page. dvips's own page selection commands will
+keep the special.
+
+If rotating, the nodeconnects should be included within the boundaries
+of the \rotate command
+
+
+2. CSLI linguistics macros (lingmacros.sty). Created by various folk at
+CSLI but maintained by Emma Pease.
+
+3. The avm.sty file is a separate package created by Chris Manning
+(manning@lcl.cmu.edu) while he was at csli. It is included by
+permission from him.
+
+
+To install, place
+
+tree-dvips.pro
+
+in the postscript header path for dvips.
+
+place the three .sty files where you put latex style files
+
+Two things not included in this file but may be needed are
+the squeeze program and rotate.sty. Both are available with dvips.
+
+
diff --git a/Master/texmf-dist/doc/latex/tree-dvips/README.TEXLIVE b/Master/texmf-dist/doc/latex/tree-dvips/README.TEXLIVE
new file mode 100644
index 00000000000..aaafa27a49e
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tree-dvips/README.TEXLIVE
@@ -0,0 +1,9 @@
+The following files have been removed in the TeX Live installation of
+the current package, typically due to duplication, lack of space, or
+missing source code. You can find these files on CTAN at
+ http://mirror.ctan.org/macros/latex209/contrib/trees/tree-dvips
+If questions or concerns, email tex-live@tug.org.
+
+ avm-doc.tex
+ avm.sty
+ avm-doc.sty
diff --git a/Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.pdf b/Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.pdf
new file mode 100644
index 00000000000..3f77416afa3
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.tex b/Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.tex
new file mode 100644
index 00000000000..23b0c84d509
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.tex
@@ -0,0 +1,124 @@
+\documentstyle[lingmacros]{article}
+
+\title{Linguistic Macros}
+\author{Emma Pease}
+\date{May 10,1995}
+
+\begin{document}
+
+\maketitle
+
+The lingmacros file contains a few macros that may be of use to
+linguists. The major commands are
+\begin{enumerate}
+\item The enumsentence macros for creating example sentences
+\begin{center}
+\begin{verbatim}
+\enumsentence[label]{sentence}
+\eenumsentence[label]{\item[label] sentence 1
+ \item[label] sentence 2}
+\end{verbatim}
+\end{center}
+ The enumsentence macros are similar to the math equation environment
+except that they take regular text. The \verb+\label+ command can be
+used inside of them.\footnote{The enumsentence macros use the counter,
+enums. For more information read the style file.} Inside of the
+eenumsentence either the \verb+\toplabel+ command for the sentence
+number only or the \verb+\label+ for sentence number and sublabel.
+Also defined is
+\verb+\ex{number}+ which gives a relative reference. \verb+(\ex{1})+
+or \verb+(\ref{senta})+ give the number of the next enumsentence (\ex{1})
+or (\ref{senta}); \verb+(\ex{2})+ or \verb+(\ref{sentb})+ of the second
+succeeding enumsentence (\ex{2}) or (\ref{sentb}).
+\verb+(\ref{sentbb})+ will give (\ref{sentbb}).
+ \enumsentence{This is the first sentence\label{senta}}
+\eenumsentence{\item this is a second sentence \toplabel{sentb}
+ \item this is a third sentence\label{sentbb}}
+\begin{center}
+\begin{verbatim}
+\enumsentence{This is the first sentence\label{senta}}
+\eenumsentence{\item this is a second sentence \toplabel{sentb}
+ \item this is a third sentence\label{sentbb}}
+\end{verbatim}
+\end{center}
+
+
+\item The tree macros
+\begin{center}
+\begin{verbatim}
+\smalltree{alignment structure}
+\modsmalltree{number of columns}{alignment structure}
+\end{verbatim}
+\end{center}
+\verb+\smalltree+ is based on the tabular environment with a large
+baselineskip. A simple example should suffice.
+\enumsentence{\smalltree{& &a\\
+ &b& &c\\
+ d& &e& &f}}
+\begin{center}
+\begin{verbatim}
+\enumsentence{\smalltree{& &a\\
+ &b& &c\\
+ d& &e& &f}}
+\end{verbatim}
+\end{center}
+\verb+\modsmalltree+ sometime works better.
+\enumsentence{\modsmalltree{5}{& &a\\
+ &b& \mc{3}{this is long}\\
+ d& &e& &f}}
+\begin{center}
+\begin{verbatim}
+\enumsentence{\modsmalltree{5}{& &a\\
+ &b& \mc{3}{this is long}\\
+ d& &e& &f}}
+\end{verbatim}
+\end{center}
+ Note the use of the \verb+\mc{number of columns}{text}+ to span
+several columns. The \verb+\clap{text}+ might also be useful; it is
+similar to the \verb+\rlap+ and \verb+\llap+ commands and produces a
+centered hbox of zero width. Lines need to be drawn in by hand or one
+can use the tree-dvips macros.
+
+\item The gloss macros
+\begin{center}
+\begin{verbatim}
+\shortex{number of columns}{first line}{second line}{gloss}
+\shortexnt{number of columns}{first line}{second line}
+\end{verbatim}
+\end{center}
+These can be combined to produce most of the glosses that linguists
+should need.
+\enumsentence{\shortex{6}{Was & ist & dem & Kind & geschenkt&worden?}
+ {What& is & the & child& given &been?}
+ {What has been given to the child?}
+ \item \shortexnt{7}
+{Das & Fin\'anzamt & hat & ihn & geschnappt &(und & nicht}
+{the &finance authority & has & him & caught &(and &not}
+
+\shortex{2}{die &Polizei).}
+ {the &police).}
+ {It was the IRS that caught him (and not the police).}}
+\begin{center}
+\begin{verbatim}
+\enumsentence{\shortex{6}{Was & ist & dem & Kind & geschenkt&worden?}
+ {What& is & the & child& given &been?}
+ {What has been given to the child?}}
+ \item \shortexnt{7}
+{Das & Fin\'anzamt & hat & ihn & geschnappt &(und & nicht}
+{the &finance authority & has & him & caught &(and &not}
+
+\shortex{2}{die &Polizei).}
+ {the &police)}
+ {It was the IRS that caught him (and not the police).}}
+\end{verbatim}
+\end{center}
+Unfortunately, I've not figured out a fullproof method of breaking
+the glosses automatically so they have to be done by hand.
+
+\item AVM structures: These exist within lingmacros but Chris
+Manning's AVM macro package is better.
+
+
+\end{enumerate}
+\end{document}
+
diff --git a/Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script b/Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script
new file mode 100644
index 00000000000..cc0937f43c8
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script
@@ -0,0 +1,718 @@
+% grestore
+% special commands for setting up tree macros
+%% version .91 - May 16, 1995
+
+TeXDict begin
+
+% the commands needed to get any of this working. The first section
+% may need to be modified if different dvi to postscript programs are
+% used.
+
+% redefinition of /@beginspec suggested by Gintas Grigelionis
+% (gintas@theophys.kth.se) 5/95. also dropped bop_hook and texpsmatrix
+%
+% /@beginspec {gsave texpsmatrix setmatrix treedict begin} def
+/@beginspec {gsave
+ Resolution 72 div VResolution -72 div scale
+ treedict begin} def
+/@endspec {end grestore} def
+
+% for landscape Landscape=true, letter Landscape=false
+% In dvips 5.5 and later, the matrix in landscape was changed from
+% [0.0 -1.0 1.0 0.0 0.0 0.0] to the current setting of [0.0 1.0 -1.0
+% 0.0 0.0 0.0]. If you are using an earlier version, switch back.
+
+/treedict 200 dict def treedict begin
+
+% num pt num (converts a number in TeX pts (72.27 pts/in) to
+% postscript pts (72pts/in)
+/pt {72 mul 72.07 div} def
+
+% end of first section
+
+% definition of a node as a box containing the following information
+% The x y location of the lower left hand corner of the box
+% the height of the box (h)
+% the width of the box (w)
+% nodemargin is added to all sides to ensure a boundary around the box
+% str w h d node -
+% (nodemargin is defined in the TeX file)
+/nodemargin 2 def
+/nodes 100 dict def
+/node { /dpth exch def
+ /hght exch def
+ /wdth exch def
+ 4 dict dup begin
+ /x /y currentpoint
+ dpth sub nodemargin sub exch 3 1 roll def
+ nodemargin sub def
+ /h hght dpth add nodemargin dup add add def
+ /w wdth nodemargin dup add add def
+ end nodes 3 1 roll put} def
+
+
+% commands to find various locations around the nodebox
+%
+% nodetopleft nodetop nodetopright
+% *--------*--------*
+% | |
+% | |
+% nodeleft * (nodebox) * noderight
+% | |
+% | |
+% *--------*--------*
+% nodebotleft nodebottom nodebotright
+%
+
+
+% all of these take
+% dict nodebottom x1 y1 [dict has x y h w defined]
+/nodebottom {begin
+ x w 2 div add y
+ end} def
+/nodetop {begin
+ x w 2 div add y h add
+ end} def
+/nodeleft {begin
+ x y h 2 div add
+ end} def
+/noderight {begin
+ x w add y h 2 div add
+ end} def
+/nodetopleft {begin
+ x y h add
+ end} def
+/nodetopright {begin
+ x w add y h add
+ end} def
+/nodebottomleft {begin
+ x y
+ end} def
+/nodebottomright {begin
+ x w add y
+ end} def
+
+% some more locations of use
+/farright {begin
+ x w add depth add h 2 div y add
+ end} def
+
+/farleft {begin
+ x depth sub h 2 div y add
+ end} def
+
+/farbottom {begin
+ x w 2 div add y depth sub
+ end} def
+
+/fartop {begin
+ x w 2 div add y h add depth add
+ end} def
+
+/farbottomleft {begin
+ x depth 45 cos mul sub y depth 45 sin mul sub
+ end} def
+
+/farbottomright {begin
+ x w add depth 45 cos mul add y depth 45 sin mul sub
+ end} def
+
+/fartopright {begin
+ x w add depth 45 cos mul add y h add depth 45 sin mul add
+ end} def
+
+/fartopleft {begin
+ x depth 45 cos mul sub y h add depth 45 sin mul add
+ end} def
+
+
+% connects two nodes with a straight line
+% add location information (e.g., whether to go from
+% nodetop to nodeleft ...
+
+% nodename1 loc1 nodename2 loc2 nodeconnect -
+% e.g., a nodetop b nodebottom nodeconnect
+
+% to see if straight lines are indeed straight
+% x1 x2 alignpoint x1' x2' finds out if the two numbers are less than
+% one pixel apart if so make x1'=x2'
+
+/alignpoint {2 copy sub abs 1 le {add 2 div round dup} if} def
+
+% nodelocation nodename getnodepoint x y
+/getnode {nodes exch get} def
+
+% xfrom yfrom xto yto nodeconnect -
+/nodeconnect { gsave
+ transform 4 2 roll
+ transform
+ exch 4 1 roll alignpoint
+ 4 2 roll alignpoint
+ 4 1 roll exch
+ itransform moveto itransform lineto
+ stroke
+ grestore
+ } def
+
+% arrowheads
+% xtail ytail xtip ytip headthickness headlength insetlength arrow -
+
+/arrowdict 15 dict def
+
+arrowdict begin
+ /mtrx matrix def
+end
+
+/arrow {arrowdict begin
+ /insetlength exch def
+ /headlength exch def
+ /halfheadthickness exch 2 div def
+ /tipy exch def /tipx exch def
+ /taily exch def /tailx exch def
+
+ /dx tipx tailx sub def
+ /dy tipy taily sub def
+ /angle dy dx atan def
+
+ /savematrix mtrx currentmatrix def
+ tipx tipy translate
+ angle rotate
+% following is for arrow
+ 0 0 moveto
+ headlength neg halfheadthickness neg lineto
+ headlength insetlength sub neg 0 lineto
+ headlength neg halfheadthickness lineto
+ closepath
+ fill
+ savematrix setmatrix
+ end } def
+
+% does regular filled arrowhead
+/arrowfill {gsave
+ newpath
+ arrowwidth arrowlength arrowinset arrow
+ grestore} def
+
+% draws line for arrow but not arrow head(s)
+% xtail ytail xtip ytip tailfix tipfix arrowline
+/arrowline {arrowdict begin
+ gsave
+ newpath
+ /tipfix exch def
+ /tailfix exch def
+ /tipy exch def /tipx exch def
+ /taily exch def /tailx exch def
+
+ /dx tipx tailx sub def
+ /dy tipy taily sub def
+ /angle dy dx atan def
+
+ /savematrix mtrx currentmatrix def
+ tipx tipy translate
+ angle rotate
+ tipfix neg 0 moveto
+ savematrix setmatrix
+ /savematrix mtrx currentmatrix def
+ tailx taily translate
+ angle rotate
+ tailfix 0 lineto
+ savematrix setmatrix
+ stroke
+ grestore
+ end} def
+
+
+% xfrom yfrom xto yto testcmd -
+% arrownodeconnect
+/arrownodeconnect{ gsave
+ transform 4 2 roll
+ transform
+ exch 4 1 roll alignpoint
+ 4 2 roll alignpoint
+ 4 1 roll exch
+ itransform 4 2 roll itransform
+% line
+ 4 copy
+ 0 arrowdict begin arrowlength arrowinset sub end arrowline
+% arrow
+ gsave
+ newpath
+ arrowfill
+ grestore
+ grestore
+ } def
+
+
+/doublearrownodeconnect{ gsave
+ transform 4 2 roll
+ transform
+ exch 4 1 roll alignpoint
+ 4 2 roll alignpoint
+ 4 1 roll exch
+ itransform 4 2 roll itransform
+% line
+% 4 copy moveto lineto
+% stroke
+ 4 copy
+ arrowdict begin arrowlength arrowinset sub end dup arrowline
+ 4 copy
+% arrow at one end
+ gsave
+ newpath
+ arrowfill
+ grestore
+% arrow at other end
+ gsave
+ newpath
+ 4 2 roll arrowfill
+ grestore
+ grestore
+ } def
+
+
+% connecting with a bar like
+% _______________
+% | |
+% or like
+% _______________
+% | |
+% | node
+% node
+
+% depth fromnode fromloc tonode toloc
+% depth x1 y1 x2 y2 barnodeconnect -
+/barnodeconnect {4 2 roll
+ 2 copy moveto
+ 5 -1 roll add
+ dup 3 1 roll
+ lineto
+ 2 index exch
+ lineto lineto
+ stroke
+ } def
+
+/arrowbarnodeconnect {4 2 roll
+ 2 copy moveto
+ 5 -1 roll add
+ dup 3 1 roll
+ lineto
+ 2 index exch
+ 4 copy lineto lineto
+ gsave
+ newpath
+ 4 2 roll
+ arrowfill
+ fill
+ grestore
+ stroke
+ } def
+
+
+% Takes two nodes and forms a triangle
+% node1
+% /\
+% / \
+% ----
+% nodess
+%
+% fromnodename tonodename nodetriangle -
+/nodetriangle {
+ gsave
+ exch
+ nodes exch get nodebottom moveto
+ dup
+ nodes exch get nodetopleft lineto
+ nodes exch get nodetopright lineto
+ closepath
+ stroke
+ grestore } def
+
+
+% not sure what I am using the following for
+% x y x y slope num
+/slope {/y1 exch def
+ /x1 exch def
+ /y0 exch def
+ /x0 exch def
+ y1 y0 sub x1 x0 sub div
+ } def
+
+% x y x y midpoint x y
+/midpoint {/y1 exch def
+ /x1 exch def
+ /y0 exch def
+ /x0 exch def
+ x1 x0 sub abs
+ x1 x0 ge {x0 add} {x1 add} ifelse
+ y1 y0 sub abs
+ y1 y0 ge {y0 add} {y1 add} ifelse
+ } def
+
+
+% variant of curveto where x1 y1 = x2 y2
+/tancurveto {1 index exch
+ curveto} def
+
+/nodetancurve {/depth exch def
+ /to exch def
+ /from exch def
+ gsave
+ nodes from get noderight moveto
+
+ nodes to get noderight
+ tancurveto
+ stroke
+ grestore } def
+
+
+
+% the node curves draw curves between two points
+%
+% this swaps a dictionary around an angle, pulls out depth, & dismisses
+% the dictionary.
+% node locname farloc angle depth
+
+/getloc {3 -1 roll
+ nodes exch get dup
+ begin depth end
+ 3 1 roll
+ exch cvx exec
+ 4 2 roll} def
+
+% nodename rightcur x1 y1 x2 y2
+/rightcur {0 /noderight getloc} def
+/leftcur {180 /nodeleft getloc } def
+/topcur {90 /nodetop getloc} def
+/bottomcur {270 /nodebottom getloc} def
+/topleftcur {135 /nodetopleft getloc} def
+/toprightcur {45 /nodetopright getloc} def
+/bottomleftcur {225 /nodebottomleft getloc} def
+/bottomrightcur {315 /nodebottomright getloc} def
+
+% (depth predefined) x1 y1 x2 y2 x3 y3 x4 y4 nodecurve -
+% where nodename nodeposition produces x1 y1 x2 y2
+% where x1 y1 are the endpoint, x2 y2 end-control, etc.
+
+% adjustments for arrowheads, etc.
+/arrowfiddledict 10 dict def
+
+% x1 y1 angle depth shift twist arrowfiddle x3 y3 x4 y4
+% where x3 y3 are revised endpoint for arrow-headed bezier curves
+/arrowfiddle {arrowfiddledict begin
+ /twist exch def
+ /shift exch def
+ /shaft exch def
+ /angle exch twist add def
+ /tipy exch def /tipx exch def
+ tipx angle cos shaft mul add
+ tipy angle sin shaft mul add
+ tipx angle cos shift mul add
+ tipy angle sin shift mul add
+ end} def
+
+/nodecurve {gsave
+ 0 fromangle arrowfiddle moveto
+ 6 2 roll
+ 0 toangle arrowfiddle curveto
+ stroke
+ grestore} def
+
+/arrownodecurve {gsave
+ 0 fromangle arrowfiddle % adjust from angle
+ moveto
+ 6 2 roll
+ 4 copy 10 4 roll % prepare arrowhead material
+ arrowlength arrowinset sub %arrowfiddle param.
+ toangle % ditto
+ arrowfiddle
+ curveto
+ 0 toangle arrowfiddle arrowfill
+ stroke
+ grestore} def
+
+/arrow2nodecurve {gsave
+ 4 copy
+ 0 fromangle arrowfiddle arrowfill
+ arrowlength arrowinset sub fromangle arrowfiddle
+ moveto
+ 6 2 roll
+ 4 copy 10 4 roll % prepare arrowhead material
+ arrowlength arrowinset sub %arrowfiddle param.
+ toangle % ditto
+ arrowfiddle
+ curveto
+ 0 toangle arrowfiddle arrowfill
+ stroke
+ grestore} def
+
+
+% commands for doing things along line
+% blong (predefined) xfrom yfrom xto yto delink -
+% need to find halfway point
+/delink { gsave
+ 4 copy newslope
+ 6 2 roll newmidpoint
+ delinkline } def
+
+%% calculated (dx dy xmid ymid) now moveto midpoint
+% moveto dup 0 eq
+%% duplicate dy and check whether line is horizontal
+% {blong 2 div neg 0 rmoveto blong 0 rlineto 2 pop}
+%% line not horizontal so check whether vertical
+% {exch dup 0 eq
+% {0 blong 2 div neg rmoveto 0 blong rlineto 2 pop}
+%% If neither than calculate standard case (dy dx)
+% {div neg dup dup mul 1 add sqrt
+% blong exch div
+% 2 copy mul 2 copy 2 div neg exch 2 div neg exch
+% rmoveto rlineto 1 pop} ifelse} ifelse
+% stroke
+% grestore
+% } def
+
+% actually draws the line
+% dx dy xmid ymid delinkline -
+
+/delinkline { moveto dup 0 eq
+% duplicate dy and check whether line is horizontal
+ {blong 2 div neg 0 rmoveto blong 0 rlineto 2 pop}
+% line not horizontal so check whether vertical
+ {exch dup 0 eq
+ {0 blong 2 div neg rmoveto 0 blong rlineto 2 pop}
+% If neither than calculate standard case (dy dx)
+ {div neg dup dup mul 1 add sqrt
+ blong exch div
+ 2 copy mul 2 copy 2 div neg exch 2 div neg exch
+ rmoveto rlineto 1 pop} ifelse} ifelse
+ stroke
+ grestore
+ } def
+
+
+%
+% delink curve
+% blong (predefined) x0 y0 x1 y1 x2 y2 x3 y3 delinkcurve -
+
+/delinkcurve { 8 copy 8 copy
+ bezslope 10 2 roll % push to back
+ bezmidpoint
+ delinkline
+} def
+
+% x0 y0 x1 y1 x2 y2 x3 y3 xyarrange x0 x1 x2 x3 y0 y1 y2 y3
+ % x0 y0 x1 y1 x2 y2 x3 y3
+/xyarrange { exch % x0 y0 x1 y1 x2 y2 y3 x3
+ 3 1 roll % x0 y0 x1 y1 x2 x3 y2 y3
+ 5 -1 roll % x0 y0 x1 x2 x3 y2 y3 y1
+ 7 -1 roll % x0 x1 x2 x3 y2 y3 y1 y0
+ exch % x0 x1 x2 x3 y2 y3 y0 y1
+ 4 2 roll } def % x0 x1 x2 x3 y0 y1 y2 y3
+
+% x0 x1 x2 x3 calcx xn 8(x3+3x2+3x1+x0)=xn
+/calcx { exch 3 mul
+ 3 -1 roll 3 mul
+ add add add 8 mul} def
+
+% x0 x1 x2 x3 calcx xn x3+x2-x1-x0=xn
+/calcy { add exch sub exch sub } def
+
+
+% x0 y0 x1 y1 x2 y2 x3 y3 bezmidpoint xm ym
+% using the following equations
+% xb=8*(x3+3x2+3x1+x0)
+% yb=8*(y3+3y2+3y1+y0)
+
+/bezmidpoint {xyarrange
+calcx 5 1 roll calcx exch
+} def
+
+
+% x0 y0 x1 y1 x2 y2 x3 y3 bezslope dx dy
+% equations are dx=x3+x2-x1-x0
+% dy=y3+y2-y1-y0
+/bezslope {xyarrange
+calcy 5 1 roll calcy exch
+} def
+
+% finds midpoint between two points xfrom yfrom xto yto newmidpoint xmid ymid
+/newmidpoint { exch
+ 4 -1 roll
+ add 2 div
+ 3 1 roll
+ add 2 div
+ } def
+
+% finds slope between two points: xfrom yfrom xto yto newslope dx dy
+/newslope { 4 -1 roll
+ exch
+ 4 1 roll
+ sub 3 1 roll sub exch
+ } def
+
+
+%% commands for drawing things around nodes
+% nodename nodebox -
+/nodebox {nodes exch get begin
+ gsave
+ newpath
+ x y moveto
+ h w dobox
+ cleanup
+ stroke
+ grestore
+ end} def
+
+
+% nodename nodecircle -
+% would be nice to have a parameter that adjusts diameter of circle
+% depth nodename nodecircle -
+/nodecircle {nodes exch get begin
+ gsave
+ newpath
+ w 2 div x add h 2 div y add
+ w w mul h h mul add sqrt 2 div 4 -1 roll add
+ 360 0 arcn
+ cleanup
+ stroke
+ grestore
+ end} def
+
+% no cleanup
+/nodecircletrans {nodes exch get begin
+ gsave
+ newpath
+ w 2 div x add h 2 div y add
+ w w mul h h mul add sqrt 2 div 4 -1 roll add
+ 360 0 arcn
+ stroke
+ grestore
+ end} def
+
+% nodename nodeoval -
+/nodeoval {nodes exch get begin
+ gsave
+ newpath
+ x 2 sub y 2 sub moveto
+ h 4 add w 4 add dooval
+ cleanup
+ stroke
+ grestore
+ end } def
+
+% ratio depth nodename testnodeoval -
+% ratio should be between 0 and 1
+/testnodeoval {nodes exch get begin
+ gsave
+ newpath
+ h h mul w w mul add sqrt div dup dup dup
+ w mul neg x add exch
+ h mul neg y add
+ moveto
+ dup
+ h mul 2 mul h add exch
+ w mul 2 mul w add
+ testdooval
+ stroke
+ grestore
+ end } def
+
+
+/cleanup{gsave
+ x y moveto
+ h nodemargin sub .5 add w nodemargin sub .5 add doccbox
+ 1 setgray fill grestore
+}def
+
+/boxdict 4 dict def
+boxdict /mtrx matrix put
+
+/dobox{boxdict begin
+ /w exch def
+ /h exch def
+ /savematrix mtrx currentmatrix def
+ 0 h rlineto
+ w 0 rlineto
+ 0 h neg rlineto
+ closepath
+ savematrix setmatrix
+ end} def
+
+% do box in counterclockwise fashion
+/doccbox{boxdict begin
+ /w exch def
+ /h exch def
+ /savematrix mtrx currentmatrix def
+ w 0 rlineto
+ 0 h rlineto
+ w neg 0 rlineto
+ closepath
+ savematrix setmatrix
+ end} def
+
+
+/ovaldict 6 dict def
+ovaldict /mtrx matrix put
+
+% h w ovaldict -
+/dooval{ovaldict begin
+ /w exch def
+ /h exch def
+ /savematrix mtrx currentmatrix def
+ 0 h 2 div rmoveto
+ 0 h 2 div nodemargin sub
+ nodemargin h 2 div
+ w 2 div h 2 div
+ rcurveto
+ w 2 div nodemargin sub 0
+ w 2 div nodemargin neg
+ w 2 div h 2 div neg
+ rcurveto
+ 0 h 2 div neg nodemargin add
+ nodemargin neg h 2 div neg
+ w 2 div neg h 2 div neg
+ rcurveto
+ w 2 div neg nodemargin add 0
+ w 2 div neg nodemargin
+ w 2 div neg h 2 div
+ rcurveto
+ savematrix setmatrix
+ end} def
+
+% give height and width of a box and the lower left hand point
+% produce a curve that will enclose the box.
+% initial point already defined
+% ratio h w testdooval -
+/testdooval{ovaldict begin
+ /w exch def
+ /h exch def
+ /r exch def
+ h 2 div neg r mul dup
+ h 2 div dup
+ r mul 3 1 roll
+ 2 r sub mul
+ 0 h
+ rcurveto
+ w 2 div dup
+ r mul exch
+ 2 r sub mul
+ w 2 div r mul dup 3 1 roll
+ w 0
+ rcurveto
+ h 2 div r mul dup
+ h 2 div neg dup
+ r mul 3 1 roll
+ 2 r sub mul
+ 0 h neg
+ rcurveto
+ w 2 div neg dup
+ r mul exch
+ 2 r sub mul
+ w 2 div neg r mul dup 3 1 roll
+ w neg 0
+ rcurveto
+ end} def
+
+end % of treedict
+
+end % of TeXdict
+% gsave
diff --git a/Master/texmf-dist/doc/latex/tree-dvips/tree-manual.pdf b/Master/texmf-dist/doc/latex/tree-dvips/tree-manual.pdf
new file mode 100644
index 00000000000..02fa97f4025
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tree-dvips/tree-manual.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/tree-dvips/tree-manual.tex b/Master/texmf-dist/doc/latex/tree-dvips/tree-manual.tex
new file mode 100644
index 00000000000..9f942fd415c
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tree-dvips/tree-manual.tex
@@ -0,0 +1,603 @@
+\documentstyle[tree-dvips,rotate,lingmacros]{article}
+
+\title{Tree Macros}
+\author{Emma Pease}
+\date{May 10, 1995}
+
+\begin{document}
+
+\maketitle
+
+The tree macros package allows one to integrate \LaTeX\ and Postscript.
+For example, one can use \LaTeX\ to layout a tree and have Postscript
+draw the lines.
+\begin{center}
+ \begin{tabular}{ccc}
+&\node{ab}{top node}\\[3ex]
+\node{ac}{left node} && \node{c}{right node}\\[3ex]
+ && \node{d}{odd node}
+\end{tabular}
+\nodeconnect{ab}{ac}
+\nodeconnect{ab}{c}
+\nodeconnect{c}{d}
+\nodecurve[r]{ab}[r]{d}{1in}
+\anodeconnect[b]{ac}[l]{d}
+\anodecurve[l]{ab}[l]{ac}{1in}
+\end{center}
+
+These macros work by defining locations on a page and then
+manipulating them in a variety of ways. The commands that created the
+above tree are as follows:
+ \begin{verbatim}
+\begin{tabular}{ccc}
+ &\node{a}{top node}\\[3ex]
+\node{b}{left node} & & \node{c}{right node}\\[3ex]
+ & & \node{d}{odd node}
+\end{tabular}
+\nodeconnect{a}{b}
+\nodeconnect{a}{c}
+\nodeconnect{c}{d}
+\nodecurve[r]{a}[r]{d}{1in}
+\anodeconnect[b]{b}[l]{d}
+\anodecurve[l]{a}[l]{b}{1in}
+\end{verbatim}
+ You will notice that four nodes are defined, a, b, c, and d, using the
+\verb+\node+ command. These nodes are then connected using the
+\verb+\nodeconnect+ and \verb+\nodecurve+ commands.
+
+\section{Locating Commands}
+
+Location commands are those that deal with defining a location on a
+page. The basic command
+ \begin{center}
+\begin{verbatim}
+\node{nodename}{object}
+\end{verbatim}
+\end{center}
+ Each node has its name, height, width, and the location of the lower
+left hand corner point passed down to postscript where it will remain
+until needed. Note that the object will be printed by \TeX\ but the
+lines drawn by Postscript. A variant
+of this command is
+ \begin{center}
+\begin{verbatim}
+\nodepoint{nodename}[horizontal displace][vertical displace]
+\end{verbatim}
+\end{center}
+ The node's height and width are 0pts, but the location can be
+displaced.
+
+\section{Connecting Commands}
+
+These commands connect two or more nodes.
+
+\subsection{nodeconnect}
+
+One basic command is
+\begin{center}
+\begin{verbatim}
+\nodeconnect[fromloc]{fromnodename}[toloc]{tonodename}
+\end{verbatim}
+\end{center}
+ fromnodename and tonodename must be the names of two existing nodes.
+Imagine the node as a box, fromloc and toloc are the locations on that
+box to draw the connecting lines.
+\begin{center}\nodemargin=9pt
+\begin{tabular}{lcr}
+tl & {t} &{tr}\\[2ex]
+{l} & \node{a}{object} &{r}\\[2ex]
+{bl}& {b} &{br}
+\end{tabular}
+\nodebox{a}
+\end{center}
+ The present choices are t [top], b [bottom], l [left], r [right], tl
+[topleft], tr [topright], bl [bottomleft], and br [bottomright].
+These could be expanded. By default the fromloc is bottom and the
+toloc is top.
+
+Variants of this command are
+\begin{verbatim}
+\anodeconnect[fromloc]{fromnodename}[toloc]{tonodename}
+\aanodeconnect[fromloc]{fromnodename}[toloc]{tonodename}
+\end{verbatim}
+The first places an arrow pointing to the second node. The second puts
+arrows on both ends of the line.
+\begin{center}
+\begin{tabular}{ccccc}
+ &\node{a}{Top node}\\[3ex]
+\node{b}{left node\strut} & & \node{c}{right node\strut}&\qquad &\node{d}{farright\strut}
+\end{tabular}
+\nodeconnect{a}{b}
+\nodeconnect[t]{c}[b]{a}
+\anodeconnect[r]{b}[l]{c}
+\aanodeconnect[r]{c}[l]{d}
+\end{center}
+\begin{verbatim}
+\begin{tabular}{ccccc}
+ &\node{a}{Top node}\\[3ex]
+\node{b}{left node\strut} & & \node{c}{right node\strut}
+ &\qquad &\node{d}{farright\strut}
+\end{tabular}
+\nodeconnect{a}{b}
+\nodeconnect[t]{c}[b]{a}
+\anodeconnect[r]{b}[l]{c}
+\aanodeconnect[r]{c}[l]{d}
+\end{verbatim}
+Note the \verb+\strut+. This ensures that both nodes have the same
+height and depth.
+
+\subsection{barnodeconnect}
+
+Another way of connecting is via the bar connect commands
+\begin{verbatim}
+\barnodeconnect[depth]{fromnodename}{tonodename}
+\abarnodeconnect[depth]{fromnodename}{tonodename}
+\end{verbatim}
+For example,
+\begin{center}
+\node{c}{\strut This} \node{a}{\strut is} a \node{b}{\strut test} of
+barnodeconnect.
+\barnodeconnect{a}{b}
+\barnodeconnect[-5pt]{a}{c}
+\bigskip\bigskip
+
+\node{c}{\strut This} \node{a}{\strut is} a \node{b}{\strut test}
+\node{d}{\strut of} abarnodeconnect. \node{e}{\strut Note} arrows.
+\abarnodeconnect[10pt]{a}{b}
+\abarnodeconnect[-10pt]{a}{c}
+\abarnodeconnect[-10pt]{b}{d}
+\abarnodeconnect[10pt]{e}{d}
+\end{center}\bigskip
+\begin{verbatim}
+\node{c}{\strut This} \node{a}{\strut is} a \node{b}{\strut test}
+of barnodeconnect.
+\barnodeconnect{a}{b}
+\barnodeconnect[-5pt]{a}{c}
+\bigskip\bigskip
+
+\node{c}{\strut This} \node{a}{\strut is} a \node{b}{\strut test}
+\node{d}{\strut of} abarnodeconnect. \node{e}{\strut Note} arrows.
+\abarnodeconnect[10pt]{a}{b}
+\abarnodeconnect[-10pt]{a}{c}
+\abarnodeconnect[-10pt]{b}{d}
+\abarnodeconnect[10pt]{e}{d}
+\end{verbatim}
+ A negative depth places the bar below the line; a positive depth (or
+the default, which is 5pt) places the bar above the line.
+
+
+\subsection{nodecurve}
+
+The nodecurve commands allow curves between nodes.
+\begin{verbatim}
+\nodecurve[fromloc][fromang]{fromnodename}[toloc][toang]{tonodename}{fdepth}[tdepth]
+\anodecurve[fromloc][fromang]{fromnodename}[toloc][toang]{tonodename}{fdepth}[tdepth]
+\aanodecurve[fromloc][fromang]{fromnodename}[toloc][toang]{tonodename}{fdepth}[tdepth]
+\end{verbatim}
+The options fromloc and toloc are the same as for \verb+\nodeconnect+.
+The options fromang and toang are the angle of incidence in degrees to the
+location with 0 being perpendicular and the default. Angles are
+calculated counterclockwise. fdepth and tdepth are dimensions and
+allow one to adjust how curved the curve is.
+\begin{center}
+\begin{tabular}{ccc}
+ &\node{a}{Top node}\\[3ex]
+\node{b}{left node\strut} & & \node{c}{right node\strut}
+\end{tabular}
+\nodecurve[b]{b}[b]{c}{.3in}
+\anodecurve[l]{a}[l]{b}{20pt}[40pt]
+\aanodecurve[r]{a}[r]{c}{60pt}[20pt]
+\hfill
+\begin{tabular}{c}
+\node{d}{Top}\\
+\node{e}{Bottom}
+\end{tabular}
+\nodecurve[l]{d}[l]{e}{30pt}
+\nodecurve[l]{d}[l]{e}{30pt}[40pt]
+\nodecurve[l]{d}[l]{e}{30pt}[50pt]
+\nodecurve[l]{d}[l]{e}{30pt}[5pt]
+
+\nodecurve[r]{d}[r]{e}{30pt}
+\nodecurve[r][20]{d}[r][-30]{e}{30pt}
+
+\bigskip
+
+\end{center}
+\begin{verbatim}
+\begin{tabular}{ccc}
+ &\node{a}{Top node}\\[3ex]
+\node{b}{left node\strut} & & \node{c}{right node\strut}
+\end{tabular}
+\nodecurve[b]{b}[b]{c}{.3in}
+\anodecurve[l]{a}[l]{b}{20pt}[40pt]
+\aanodecurve[r]{a}[r]{c}{60pt}[20pt]
+\hfill
+\begin{tabular}{c}
+\node{d}{Top}\\
+\node{e}{Bottom}
+\end{tabular}
+% here follow some curves that adjust fdepth and tdepth
+\nodecurve[l]{d}[l]{e}{30pt}
+\nodecurve[l]{d}[l]{e}{30pt}[40pt]
+\nodecurve[l]{d}[l]{e}{30pt}[50pt]
+\nodecurve[l]{d}[l]{e}{30pt}[5pt]
+
+% here follow some curves that adjust toang and fromang
+\nodecurve[r]{d}[r]{e}{30pt}
+\nodecurve[r][20]{d}[r][-30]{e}{30pt}
+\end{verbatim}
+
+\subsection{Other connecting commands}
+
+A few odd commands
+\begin{verbatim}
+\nodetriangle{fromnodename}{tonodename}
+\end{verbatim}
+This creates a triangle whose apex is the bottom of
+\verb+fromnodename+ and whose base is the top of \verb+tonodename+.
+\begin{center}
+\begin{tabular}{c}
+\node{a}{Top}\\[4ex]
+\node{b}{This is the bottom}
+\end{tabular}
+\nodetriangle{a}{b}
+
+\end{center}
+\begin{verbatim}
+\begin{tabular}{c}
+\node{a}{Top}\\[4ex]
+\node{b}{This is the bottom}
+\end{tabular}
+\nodetriangle{a}{b}
+\end{verbatim}
+The last command is meant to be used with the \verb+\nodeconnect+
+command. It causes a short line to cross perpendicular to the line.
+\begin{verbatim}
+\delink[fromloc]{fromnodename}[toloc]{tonodename}{length}
+\end{verbatim}
+An example follows
+\begin{center}
+\node{a}{leftnode\strut}\hspace{1in}\node{b}{rightnode\strut}
+\nodeconnect[r]{a}[l]{b}
+\delink[r]{a}[l]{b}{10pt}
+\end{center}
+
+\section{Single Node commands}
+
+These commands adjust something around a single node rather than
+connecting nodes. The basic commands are
+ \begin{center}
+\begin{verbatim}
+\nodebox{nodename}
+\nodecircle[depth]{nodename}
+\nodeoval{nodename}
+\end{verbatim}
+\end{center}
+They draw, respectively, a box, circle, or oval around the given node.
+\begin{center}
+\node{a}{node}\hfill \node{b}{node} \hfill \node{c}{node}
+\nodebox{a} \nodecircle{b} \nodeoval{c}
+\end{center}
+ You will probably wish to call these commands after you have called
+all the connecting commands you will be using in a particular diagram.
+
+
+\section{Parameters}
+
+At the moment there are three parameters that can be changed. They
+are
+\begin{itemize}
+\item \verb+\nodemargin+ - A node's height and width are defined as
+the height plus depth and width of an hbox enclosing the object plus the
+nodemargin on each side. The default is 2pt.
+
+\item \verb+\treelinewidth+ - The width of the lines. The default is .3pt.
+
+\item \verb+\dashlength+ - The length of the dash, if you are using
+dashed lines. The default is 0pt (solid line).\footnote{The length
+of the dash and the length between the dashes are the same. An
+exercise for someone who knows postscript and tex is to allow the dash
+and the blank to vary in size.}
+
+\item \verb+\arrowwidth+ - the width of the arrowhead in the
+ \verb+\anodeconnect+ and \verb+\anodecurve+ commands. Default is
+ 3 pt.
+
+\item \verb+\arrowlength+ - the length of the arrowhead. Default is
+ 4pt.
+
+\item \verb+\arrowinset+ - the inset in the arrow. Default is 1pt.
+
+\end{itemize}
+The command \verb+\arrowhead{width}{length}{inset}+ allows one to
+define all three parameters in one go.
+\begin{center}
+\node{a}{This} \node{b}{is} a \node{c}{line}.\\[5ex]
+\node{d}{This} \node{e}{is} a \node{f}{line}.%
+% The following gives examples of differing insets of arrowheads
+\arrowhead{4pt}{6pt}{0pt}%
+\anodeconnect{a}{d}%
+\arrowhead{4pt}{6pt}{1pt}%
+\anodeconnect{b}{e}%
+\arrowhead{4pt}{6pt}{3pt}%
+\anodeconnect{c}{f}%
+
+% the following gives examples of differing lengths
+% and widths of the arrowhead
+\arrowhead{4pt}{6pt}{2pt}%
+\anodeconnect[t]{d}[b]{a}%
+\arrowhead{4pt}{8pt}{2pt}%
+\anodeconnect[t]{e}[b]{b}%
+\arrowhead{2pt}{6pt}{2pt}%
+\anodeconnect[t]{f}[b]{c}%
+
+\end{center}
+\begin{verbatim}
+\node{a}{This} \node{b}{is} a \node{c}{line}.\\[5ex]
+\node{d}{This} \node{e}{is} a \node{f}{line}.%
+% The arrows pointing down give examples of differing insets of arrowheads
+\arrowhead{4pt}{6pt}{0pt}%
+\anodeconnect{a}{d}%
+\arrowhead{4pt}{6pt}{1pt}%
+\anodeconnect{b}{e}%
+\arrowhead{4pt}{6pt}{3pt}%
+\anodeconnect{c}{f}%
+
+% the arrows pointing up give examples of differing lengths
+% and widths of the arrowheads.
+\arrowhead{4pt}{6pt}{2pt}%
+\anodeconnect[t]{d}[b]{a}%
+\arrowhead{4pt}{8pt}{2pt}%
+\anodeconnect[t]{e}[b]{b}%
+\arrowhead{2pt}{6pt}{2pt}%
+\anodeconnect[t]{f}[b]{c}%
+\end{verbatim}
+
+\section{How to Run}
+
+Add the style file, tree-dvips.sty,
+\begin{verbatim}
+\documentstyle[tree-dvips]{article}
+\end{verbatim}
+Run through \LaTeX\ and send to a postscript printer using dvips
+(written by Tomas Rokicki).
+
+
+\section{Examples}
+
+A series of examples follow.
+\begin{center}
+\let\mc=\multicolumn
+\begin{tabular}[t]{@{}lllllllll@{}}
+ & & & &\node{a}{VP} \\[2ex]
+ &\node{b}{PP}
+ & & & & &\mc{2}{c}{\node{c}{V$'$}}\\[2ex]
+ & & &\node{d}{NP} \\[2ex]
+ & &\nodepoint{e}
+ & &\node{f}{NP} \\
+ & & &\hfill\nodepoint{r}[0pt][3pt] \\
+ &\hfil\node{g}{AP}
+ & &\hfil\node{h}{NP}
+ & & & &\hfil\node{i}{NP}\\[2ex]
+\node{j}{P}
+ &\hfil\node{k}{A}
+ & \node{l}{Prt}
+ &\hfil\node{m}{N}
+ &\node{n}{Prt}
+ &\node{o}{N}
+ &\node{p}{V}
+ &\hfil\node{q}{N}\\[2ex]
+`zaw &`oN &`geq&?njiaw&`geq&`dou& khe &tshjaN \\
+toward &red & & bird & &head& open&gun \\[1ex]
+\mc{9}{@{}l}{`shoot at the red head of the bird'} \\
+\end{tabular}
+\nodeconnect{a}{b}
+\nodeconnect{a}{c}
+\nodeconnect{b}{d}
+\nodeconnect{b}{j}
+\nodeconnect{c}{p}
+\nodeconnect{c}{i}
+\nodeconnect{d}{e}
+\nodeconnect{e}{g}
+\nodeconnect{e}{l}
+\nodeconnect{d}{f}
+\nodeconnect{g}{k}
+\nodeconnect{f}{r}
+\nodeconnect{r}{h}
+\nodeconnect{r}{n}
+\nodeconnect{f}{o}
+\nodeconnect{h}{m}
+\nodeconnect{i}{q}
+
+\end{center}
+\begin{verbatim}
+\let\mc=\multicolumn
+\begin{tabular}[t]{@{}lllllllll@{}}
+ & & & &\node{a}{VP} \\[2ex]
+ &\node{b}{PP}
+ & & & & &\mc{2}{c}{\node{c}{V$'$}}\\[2ex]
+ & & &\node{d}{NP} \\[2ex]
+ & &\nodepoint{e}
+ & &\node{f}{NP} \\
+ & & &\hfill\nodepoint{r}[0pt][3pt] \\
+ &\hfil\node{g}{AP}
+ & &\hfil\node{h}{NP}
+ & & & &\hfil\node{i}{NP}\\[2ex]
+\node{j}{P}
+ &\hfil\node{k}{A}
+ & \node{l}{Prt}
+ &\hfil\node{m}{N}
+ &\node{n}{Prt}
+ &\node{o}{N}
+ &\node{p}{V}
+ &\hfil\node{q}{N}\\[2ex]
+`zaw&`oN &`geq&?njiaw&`geq&`dou& khe &tshjaN \\
+toward &red & & bird & &head& open&gun \\[1ex]
+\mc{9}{@{}l}{`shoot at the red head of the bird'} \\
+\end{tabular}
+\nodeconnect{a}{b} \nodeconnect{e}{l}
+\nodeconnect{a}{c} \nodeconnect{d}{f}
+\nodeconnect{b}{d} \nodeconnect{g}{k}
+\nodeconnect{b}{j} \nodeconnect{f}{r}
+\nodeconnect{c}{p} \nodeconnect{r}{h}
+\nodeconnect{c}{i} \nodeconnect{r}{n}
+\nodeconnect{d}{e} \nodeconnect{f}{o}
+\nodeconnect{e}{g} \nodeconnect{h}{m}
+\nodeconnect{i}{q}
+\end{verbatim}
+ The following two examples use \verb+\outerfs+ and
+\verb+\modsmalltree+; these are both part of the lingmacros package.
+See \verb+lingmacros.sty+ for more information.
+ \enumsentence[(100)]{\evnup[2pt]
+{\outerfs{ Focus & \outerfs{subj & \outerfs{\ \nodepoint{a}\ }\\[1ex]
+ obl$_{th}$ & \outerfs{Pred & `Pro'\\
+ Refl & +}\\[1ex]
+ Pred & `proud$\langle(\uparrow {\rm subj})
+ (\uparrow {\rm obl}_{th})\rangle$'}\nodepoint{d}[-3pt][0pt]\\[2ex]
+ Subj & \outerfs{Pred & `Max'}\\[1ex]
+ Comp & \outerfs{Subj &\outerfs{Pred & `Larry'}\nodepoint{c}[-3pt][0pt]\\[1ex]
+ Xcomp&\outerfs{\ \nodepoint{b}\ }\\[1ex]
+ Pred & `be$\langle(\uparrow {\rm xcomp})
+ (\uparrow {\rm subj})\rangle$'}\\[1ex]
+ Pred & `think$\langle(\uparrow {\rm subj})
+ (\uparrow {\rm comp})\rangle$'}\\
+}
+\nodecurve[r]{a}[r]{c}{2in}[.5in]
+\anodecurve[r]{d}[r]{b}{1in}[2in]
+}
+\begin{verbatim}
+\enumsentence[(100)]{\evnup[2pt]
+{\outerfs{
+Focus & \outerfs{subj & \outerfs{\ \nodepoint{a}\ }\\[1ex]
+ obl$_{th}$ & \outerfs{Pred & `Pro'\\
+ Refl & +}\\[1ex]
+ Pred & `proud$\langle(\uparrow {\rm subj})
+ (\uparrow {\rm obl}_{th})\rangle$'}%
+\nodepoint{d}[-3pt][0pt]\\[2ex]
+Subj & \outerfs{Pred & `Max'}\\[1ex]
+Comp & \outerfs{Subj &\outerfs{Pred & `Larry'}%
+\nodepoint{c}[-3pt][0pt]\\[1ex]
+ Xcomp&\outerfs{\ \nodepoint{b}\ }\\[1ex]
+ Pred & `be$\langle(\uparrow {\rm xcomp})
+ (\uparrow {\rm subj})\rangle$'}\\[1ex]
+Pred & `think$\langle(\uparrow {\rm subj})
+ (\uparrow {\rm comp})\rangle$'}\\
+}
+\nodecurve[r]{a}[r]{c}{2in}[.5in]
+\anodecurve[r]{d}[r]{b}{1in}[2in]
+}
+\end{verbatim}
+\enumsentence{\modsmalltree{6}{
+ & & &\ns\node{a}{\begin{tabular}[t]{@{}c@{}}S\\
+ {}[+R]\end{tabular}} \\
+ &\node{b}{NP} & & & & \node{c}{VP} \\
+\node{d}{Det}& &\node{e}{N$^1$} \\
+\node{h}{the}&\node{i}{N} & & \node{f}{PP} &&\node{g}{are
+ totally false}\\
+ &\node{n}{rumors}&\node{j}{P} &&\ns\node{k}{\begin{tabular}[t]{@{}c@{}}NP\\
+ {}[+R] \end{tabular}}\\
+ & &\node{l}{about} &&\node{m}{whom}}
+\nodeconnect{a}{b}
+\nodeconnect{a}{c}
+\nodeconnect{b}{d}
+\nodeconnect{b}{e}
+\nodeconnect{d}{h}
+\nodeconnect{e}{i}
+\nodeconnect{e}{f}
+\nodeconnect{i}{n}
+\nodeconnect{f}{j}
+\nodeconnect{f}{k}
+\nodeconnect{j}{l}
+\nodeconnect{k}{m}
+\nodetriangle{c}{g}
+{\makedash{4pt}
+\anodecurve[t]{b}[l]{a}{10pt}
+\anodecurve[t]{e}[r]{b}{10pt}
+\anodecurve[t]{f}[r]{e}{10pt}
+\anodecurve[t]{k}[r]{f}{10pt}
+}}
+\begin{verbatim}
+\enumsentence{\modsmalltree{6}{
+ & & &\ns\node{a}{\begin{tabular}[t]{@{}c@{}}S\\
+ {}[+R]\end{tabular}} \\
+ &\node{b}{NP}
+ & & && \node{c}{VP} \\
+\node{d}{Det}
+ & &\node{e}{N$^1$} \\
+\node{h}{the}
+ &\node{i}{N}
+ & &\node{f}{PP}
+ &&\node{g}{are totally false}\\
+ &\node{n}{rumors}
+ &\node{j}{P}
+ & &\ns\node{k}{\begin{tabular}[t]{@{}c@{}}NP\\
+ {}[+R] \end{tabular}}\\
+ & &\node{l}{about}
+ & &\node{m}{whom}}
+\nodeconnect{a}{b} \nodeconnect{e}{f}
+\nodeconnect{a}{c} \nodeconnect{i}{n}
+\nodeconnect{b}{d} \nodeconnect{f}{j}
+\nodeconnect{b}{e} \nodeconnect{f}{k}
+\nodeconnect{d}{h} \nodeconnect{j}{l}
+\nodeconnect{e}{i} \nodeconnect{k}{m}
+\nodetriangle{c}{g}
+{\makedash{4pt}
+\anodecurve[t]{b}[l]{a}{10pt} \anodecurve[t]{f}[r]{e}{10pt}
+\anodecurve[t]{e}[r]{b}{10pt} \anodecurve[t]{k}[r]{f}{10pt}
+}}
+\end{verbatim}
+
+\section{Rotation}
+
+With the {\tt rotate.sty} file one can also rotate figures. This is
+useful with wide figures that won't fit on within the page boundaries
+unless turned sideways. Earlier versions of the tree macros didn't
+work with this.
+
+\rotate[l]{\modsmalltree{3}{&\node{a}{top}\\
+\node{b}{left} && \node{c}{right}}
+\nodeconnect{a}{b}
+\nodeconnect{a}{c}
+}
+
+\begin{verbatim}
+\rotate[l]{\modsmalltree{3}{&\node{a}{top}\\
+\node{b}{left} && \node{c}{right}}
+\nodeconnect{a}{b}
+\nodeconnect{a}{c}
+}
+\end{verbatim}
+
+Note that the connection commands are within the boundaries of the
+\verb+\rotate+ command.
+
+\section{Errors}
+
+A multitude of caveats.
+\begin{itemize}
+ \item Any commands calling nodes must be read while \TeX\ is still
+processing the page the nodes are defined on. In other words don't
+define the nodes on page 1 and connect them with commands that appear
+at the end of the paper.
+
+\item Nodes mentioned in node connecting commands must exist or else
+ the job won't print.
+
+\item Make sure the dvips postscript output is sent to a postscript
+printer. It is possible to send the dvi, but not the postscript,
+output to another printer; the lines just won't appear, assuming the
+printer ignores specials it doesn't know about.
+
+
+\end{itemize}
+
+\section{Thanks}
+
+Thanks to all those who've helped me over the years, including Avery
+Andrews who revamped the arrows for me and Gintas Grigelionis who
+suggested how to finally get the rotation to work correctly.
+
+
+\end{document}
+
+