summaryrefslogtreecommitdiff
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
parent3bf95a44b19b38cd429bb35ec50c1a68fef77122 (diff)
tree-dvips reinstated per author license declaration
git-svn-id: svn://tug.org/texlive/trunk@21751 c570f23f-e606-0410-a88d-b1316a301751
-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
-rw-r--r--Master/texmf-dist/dvips/tree-dvips/tree-dvips91.pro110
-rw-r--r--Master/texmf-dist/tex/latex/tree-dvips/lingmacros.sty312
-rw-r--r--Master/texmf-dist/tex/latex/tree-dvips/tree-dvips.sty271
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds3
-rw-r--r--Master/tlpkg/tlpsrc/collection-humanities.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/tree-dvips.tlpsrc0
15 files changed, 2211 insertions, 2 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}
+
+
diff --git a/Master/texmf-dist/dvips/tree-dvips/tree-dvips91.pro b/Master/texmf-dist/dvips/tree-dvips/tree-dvips91.pro
new file mode 100644
index 00000000000..3ecf33fbd93
--- /dev/null
+++ b/Master/texmf-dist/dvips/tree-dvips/tree-dvips91.pro
@@ -0,0 +1,110 @@
+%!
+TeXDict begin /@beginspec{gsave Resolution 72 div VResolution -72 div scale
+treedict begin}def /@endspec{end grestore}def /treedict 200 dict def treedict
+begin /pt{72 mul 72.07 div}def /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 /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 /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 /alignpoint{2 copy sub abs 1 le{add 2 div
+round dup}if}def /getnode{nodes exch get}def /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 /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 0 0 moveto headlength neg halfheadthickness neg
+lineto headlength insetlength sub neg 0 lineto headlength neg
+halfheadthickness lineto closepath fill savematrix setmatrix end}def
+/arrowfill{gsave newpath arrowwidth arrowlength arrowinset arrow grestore}def
+/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
+/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 4 copy 0
+arrowdict begin arrowlength arrowinset sub end arrowline 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 4 copy arrowdict begin arrowlength arrowinset
+sub end dup arrowline 4 copy gsave newpath arrowfill grestore gsave newpath 4
+2 roll arrowfill grestore grestore}def /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 /nodetriangle{gsave exch nodes exch get nodebottom moveto
+dup nodes exch get nodetopleft lineto nodes exch get nodetopright lineto
+closepath stroke grestore}def /slope{/y1 exch def /x1 exch def /y0 exch def
+/x0 exch def y1 y0 sub x1 x0 sub div}def /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 /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
+/getloc{3 -1 roll nodes exch get dup begin depth end 3 1 roll exch cvx exec 4
+2 roll}def /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 /arrowfiddledict 10 dict def /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 moveto 6 2 roll 4 copy 10 4 roll arrowlength arrowinset
+sub toangle 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 arrowlength arrowinset sub toangle arrowfiddle curveto 0 toangle
+arrowfiddle arrowfill stroke grestore}def /delink{gsave 4 copy newslope 6 2
+roll newmidpoint delinkline}def /delinkline{moveto dup 0 eq{blong 2 div neg 0
+rmoveto blong 0 rlineto 2 pop}{exch dup 0 eq{0 blong 2 div neg rmoveto 0 blong
+rlineto 2 pop}{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 /delinkcurve{8 copy 8 copy bezslope 10 2 roll bezmidpoint
+delinkline}def /xyarrange{exch 3 1 roll 5 -1 roll 7 -1 roll exch 4 2 roll}def
+/calcx{exch 3 mul 3 -1 roll 3 mul add add add 8 mul}def /calcy{add exch sub
+exch sub}def /bezmidpoint{xyarrange calcx 5 1 roll calcx exch}def /bezslope{
+xyarrange calcy 5 1 roll calcy exch}def /newmidpoint{exch 4 -1 roll add 2 div
+3 1 roll add 2 div}def /newslope{4 -1 roll exch 4 1 roll sub 3 1 roll sub exch
+}def /nodebox{nodes exch get begin gsave newpath x y moveto h w dobox cleanup
+stroke grestore end}def /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 /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 /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 /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
+/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 /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 /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 end
diff --git a/Master/texmf-dist/tex/latex/tree-dvips/lingmacros.sty b/Master/texmf-dist/tex/latex/tree-dvips/lingmacros.sty
new file mode 100644
index 00000000000..829effe52cc
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/tree-dvips/lingmacros.sty
@@ -0,0 +1,312 @@
+% Lingmacros
+% include
+% \enumsentence, \eenumsentence, \ex
+% \smalltree
+% \shortex, \shortexnt (\shortexdt no longer needed)
+% \clap, \ollap, \orlap, \oclap on analogy with \rlap and \llap
+% \outerfs
+
+% this file created 1/23/89 by Emma Pease, CSLI
+% modified 4/1/91 by Emma Pease
+% some comments added 8/25/94 by Emma Pease
+
+%Note (for those who use jbmacros):
+% (a) the enumsentence macro is very similar to the \example command
+% in jbmacros; however, it does not have the annoying habit of leaving
+% the example number on one page and the example on the next (some
+% jbmacros don't have this problem). The eenumsentence macro is very
+% similar to the \examples macro.
+% (b) \ex may be different
+
+% the enumsentence macro.
+%
+% \enumsentence{This is an example}
+% produces
+% (1) This is an example
+% while
+% \enumsentence[(a)]{This is another example}
+% produces
+% (a) This is another example
+%
+% A related macros is
+% \eenumsentence{\item[a.] A third example
+% \item[b.] A fourth example}
+% which produces
+% (2) a. A third example
+% b. A fourth example
+%
+% other macro is \ex{1} which produces the number of the following
+% enumsentence (\ex{0} produces number of preceeding enumsentence and
+% so on.)
+%
+% The standard \label command also works within \enumsentence and
+% \eenumsentence.
+%
+% the \enumsentence counter.
+\newcounter{enums}
+
+% Use the command
+%
+% \@addtoreset{enums}{chapter}
+%
+% if you wish it to automatically reset counting at the start of each chapter.
+% Since this is a \@ command you will need to surround it by
+% \makeatletter ... \makeatother
+% if it is in your document proper instead of a style file
+% do not use these commands if the \@addtoreset is in a style file or
+% things will break.
+
+
+% \widelabel is defined for use when the width of the enumsentence or
+% eenumsentence number is wider than 20pt (default labelwidth). As a
+% rule of thumb if your enumerated sentences are only 1 or 2 digit
+% you don't need to worry. At 3 digits, set \widelabel to 2.78pt at 4
+% digits set to 7.78pt.
+
+\newdimen\widelabel
+\widelabel=0pt
+
+
+\def\enumsentence{\@ifnextchar[{\@enumsentence}% %]
+{\refstepcounter{enums}\@enumsentence[(\theenums)]}}
+
+\long\def\@enumsentence[#1]#2{\begin{list}{}{%
+\advance\leftmargin by\widelabel \advance\labelwidth by \widelabel}
+\item[#1] #2
+\end{list}}
+
+% The \ex definition
+\newcounter{tempcnt}
+
+\newcommand{\ex}[1]{\setcounter{tempcnt}{\value{enums}}%
+\addtocounter{tempcnt}{#1}%
+\arabic{tempcnt}}
+
+% modified \@item command \unhbox\@tempboxa replaces \makelabel{#1}
+% Used to get \eenumsentence to work correctly
+\def\@item[#1]{\if@noparitem \@donoparitem
+ \else \if@inlabel \indent \par \fi
+ \ifhmode \unskip\unskip \par \fi
+ \if@newlist \if@nobreak \@nbitem \else
+ \addpenalty\@beginparpenalty
+ \addvspace\@topsep \addvspace{-\parskip}\fi
+ \else \addpenalty\@itempenalty \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+\fi
+\everypar{\global\@minipagefalse\global\@newlistfalse
+ \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+ \penalty\z@ \fi
+ \everypar{}}\global\@nobreakfalse
+\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
+\setbox\@tempboxa\hbox{\makelabel{#1}}%
+\global\setbox\@labels
+ \hbox{\unhbox\@labels \hskip \itemindent
+ \hskip -\labelwidth \hskip -\labelsep
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else \hbox to\labelwidth {\unhbox\@tempboxa}\fi
+ \hskip \labelsep}\ignorespaces}
+
+% for enumerated enumsentences. Internal enumeration is alpha if not
+% otherwise defined.
+
+% counter for items within \eenumsentence. (might use enumi instead?)
+\newcounter{enumsi}
+
+% \eenumsentence{\item[a.] A third \label{bar}example \toplabel{foo}
+% \item[b.] A fourth \label{baz}example}
+% Testing references \ref{foo}, \ref{bar}, and \ref{baz}.
+% which produces
+% (3) a. A third example
+% b. A fourth example
+% Testing references 3, 3a, and 3b.
+
+% To ensure that labels in \eenumsentence come out right.
+%
+\def\theenumsi{\theenums\alph{enumsi}}
+\newdimen\eeindent
+\eeindent=15pt
+% changes \leftmargin increased by \eeindent
+% \labelwidth increased by \eeindent
+% .. .. .leftmargin.. .. .. .. ..
+% oldlabelwidth eeindent labelsep actual entry
+% 20pt 15pt 5pt
+% (enumlabel) eelabel
+% eelabel
+
+\def\@mklab#1{\hfil#1}
+\def\enummklab#1{\hfil(\eelabel)\hbox to \eeindent{\hfil#1}}
+\def\enummakelabel#1{\enummklab{#1}\global\let\makelabel=\@mklab}
+\def\toplabel#1{{\edef\@currentlabel{\p@enums\theenums}\label{#1}}}
+
+\def\eenumsentence{\@ifnextchar[{\@eenumsentence}% %]
+{\refstepcounter{enums}\@eenumsentence[\theenums]}}
+
+\long\def\@eenumsentence[#1]#2{\def\eelabel{#1}\let\holdlabel\makelabel%
+\begin{list}{\alph{enumsi}.}{\usecounter{enumsi}%
+\advance\leftmargin by \eeindent \advance\leftmargin by \widelabel%
+\advance\labelwidth by \eeindent \advance\labelwidth by \widelabel%
+\let\makelabel=\enummakelabel}
+#2
+\end{list}\let\makelabel\holdlabel}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% smalltree
+% use
+% \smalltree{& &a\\
+% &b& &c\\
+% d& &e& &f}
+% produces
+% a
+% b c
+% d e f
+
+
+\long\def\smalltree#1{\leavevmode{\def\\{\cr\noalign{\vskip12pt}}%
+\def\mc##1##2{\multispan{##1}{\hfil##2\hfil}}%
+\tabskip=1em%
+\hbox{\vtop{\halign{&\hfil##\hfil\cr
+#1\crcr}}}}}
+
+% modsmalltree
+% use
+% \modsmalltree{3}{&&a\\ &b&&c\\ d&&e&&f}
+% and produces the same output
+% \mc{n}{item} within either will produce item centered across n
+% number of columns
+% \modsmalltree[arraystretch]{num of cols}{argument}
+%
+\def\modsmalltree{\@ifnextchar[{\@modsmalltree}{\@modsmalltree[2]}}
+
+\long\def\@modsmalltree[#1]#2#3{{\def\mc##1##2{%
+\multicolumn{##1}{c}{\def\arraystretch{1}##2}}%
+\def\arraystretch{#1}%
+\def\ns{\def\arraystretch{1}}%
+\setbox0=\hbox{\begin{tabular}[t]{@{}*{#2}{c}@{}}
+#3
+\end{tabular}}%
+\dimen0=\ht0
+\advance\dimen0 by -\arraystretch \ht\strutbox
+\advance\dimen0 by \ht\strutbox
+\ht0=\dimen0
+\dimen0=\dp0
+\advance\dimen0 by -\arraystretch \dp\strutbox
+\advance\dimen0 by \dp\strutbox
+\dp0=\dimen0
+\leavevmode\box0}}
+
+% center lap creates a box of 0 width centered on the point
+\def\clap#1{\hbox to 0pt{\hss#1\hss}}
+%The first argument in both of these commands is the distance above the
+%baseline desired. The second is what is the actual text.
+% over right lap
+\def\orlap#1#2{\vbox to0pt{\vss\hbox to 0pt{#2\hss}\hbox{\vrule height#1
+width0pt depth0pt}}}
+% over left lap
+\def\ollap#1#2{\vbox to0pt{\vss\hbox to 0pt{\hss#2}\hbox{\vrule height#1
+width0pt depth0pt}}}
+% over center lap
+\def\oclap#1#2{\vbox to0pt{\vss\hbox to 0pt{\hss#2\hss}\hbox{\vrule height#1
+width0pt depth0pt}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% need to be modified?
+
+% Format
+% \shortex{4}{a & b & c & d}
+% {z & y & x & w}
+% {mnop}
+% produces
+% a b c d
+% z y x w
+% mnop
+%
+% \shortexdt takes two gloss lines
+% \shortexnt takes no gloss lines
+
+\def\shortex#1#2#3#4{\begin{tabular}[t]{@{}*{#1}{l@{\ }}}
+#2\\ #3\\ \multicolumn{#1}{@{}l@{}}{\parbox{\linewidth}{#4}}
+\end{tabular}}
+
+%\def\shortexdt#1#2#3#4#5{\begin{tabular}[t]{@{}*{#1}{l@{\ }}}
+%#2\\ #3\\ \multicolumn{#1}{@{}l@{}}{#4}\\
+%\multicolumn{#1}{@{}l@{}}{#5}
+%\end{tabular}}
+
+\def\shortexnt#1#2#3{\begin{tabular}[t]{@{}*{#1}{l@{\ }}}
+#2\\ #3
+\end{tabular}}
+
+%%%%%%%%%
+% Long-example macros
+%
+% \longex{4}{2}
+% {a & b & c & d}{e & f}
+% {z & y & x & w}{v & u}
+% {mnopqrs}
+% produces
+% a b c d
+% z y x w
+% e f
+% v u
+% mnopqrs
+%
+% \longexdt takes two translation lines
+% \longexnt takes no translation lines
+% \longex can also handle multiple translations, as can \shortex above.
+
+\def\longex#1#2#3#4#5#6#7{\begin{tabular}[t]{@{}l}
+ \begin{tabular}[t]{@{}*{#1}{l@{\ \ }}}
+ #3\\ #5 \end{tabular}\vspace{.5ex}\\
+ \begin{tabular}[t]{@{}*{#2}{l@{\ \ }}}
+ #4\\ #6\\[.5ex] \multicolumn{#2}{@{}l@{}}{\begin{tabular}[t]{@{}l@{}}
+ #7 \end{tabular}} \end{tabular} \end{tabular}}
+
+\def\longexdt#1#2#3#4#5#6#7#8{\begin{tabular}[t]{@{}l}
+ \begin{tabular}[t]{@{}*{#1}{l@{\ \ }}}
+ #3\\ #5 \end{tabular}\vspace{.5ex}\\
+ \begin{tabular}[t]{@{}*{#2}{l@{\ \ }}}
+ #4\\ #6\\[.5ex] \multicolumn{#2}{@{}l@{}}{#7}\\
+ \multicolumn{#2}{@{}l@{}}{#8}
+ \end{tabular} \end{tabular}}
+
+\def\longexnt#1#2#3#4#5#6{\begin{tabular}[t]{@{}l}
+ \begin{tabular}[t]{@{}*{#1}{l@{\ \ }}}
+ #3\\ #5 \end{tabular}\vspace{.5ex}\\
+ \begin{tabular}[t]{@{}*{#2}{l@{\ \ }}}
+ #4\\ #6 \end{tabular} \end{tabular}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% need to create equivalent of AVM structures.
+
+% Structure is
+% \outerfs{alpha & beta\\ gamma & delta}
+% produces
+% __ __
+% | alpha beta |
+% | gamma delta |
+% -- --
+%
+% \outerfs can be nested.
+% inside of enumsentence use with \evnup[2pt]{\outerfs{. . .}}
+% to ensure that top of fs structure lines up with the number
+%
+% Note that you can use \\[1ex] to increase the space between
+% individual lines
+
+\def\outerfs#1{$\left[\begin{tabular}{ll}#1\end{tabular}\right]$}
+
+% \evnup is used to line up the enumsentence number and an entry along
+% the top. It can take an argument to improve lining up.
+\def\evnup{\@ifnextchar[{\@evnup}{\@evnup[0pt]}}
+
+\def\@evnup[#1]#2{\setbox1=\hbox{#2}%
+\dimen1=\ht1 \advance\dimen1 by -.5\baselineskip%
+\advance\dimen1 by -#1%
+\leavevmode\lower\dimen1\box1}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% End of main lingmacros
+%
diff --git a/Master/texmf-dist/tex/latex/tree-dvips/tree-dvips.sty b/Master/texmf-dist/tex/latex/tree-dvips/tree-dvips.sty
new file mode 100644
index 00000000000..31218352a85
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/tree-dvips/tree-dvips.sty
@@ -0,0 +1,271 @@
+% how to run.
+% \input tree.sty or \documentstyle[tree]{..}
+% run through latex as you normally do
+% remember to send it to a postscript printer
+
+% Written by Emma Pease
+% Modified by Avery Andrews May 1992
+% Modifications suggested by Gintautas Grigelionis
+% (gintas@theophys.kth.se) added May 1995
+% arrows fixed on anodeconnect and aanodeconnect added May 1995 by Emma
+
+% to do, fix barnodeconnect arrows
+% clean up code
+
+%% version .91 - May 16, 1995
+\typeout{tree-dvips version .91 of May 16, 1995}
+
+% This ensures that the header file for postscript is inserted. Note
+% that extracting pages with dvips will keep this header file but that
+% extracting with dviselect will not unless the absolute first page is
+% included.
+\special{header=tree-dvips91.pro}
+
+
+% The \pscmd command insures that all things in the postscript are
+% properly bracketed. Also included are the current parameters for
+% nodemargin, width of lines, dashlength, arrow width, length, and inset.
+
+\def\pscmd#1{\special{ps:@beginspec%
+/nodemargin \@int{\the\nodemargin}\space pt def %
+\@int{\the\treelinewidth}\space pt setlinewidth %
+\ifdim\dashlength=0pt [] 0 setdash%
+/arrowwidth \@int{\the\arrowwidth}\space pt def %
+/arrowlength \@int{\the\arrowlength}\space pt def %
+/arrowinset \@int{\the\arrowinset}\space pt def %
+\else [\@int{\the\dashlength}\space pt] 0 setdash \fi\space #1 %
+@endspec}}
+
+% \@int ensures that the numbers are passed down to the printer
+% correctly.
+{\catcode`p=12 \catcode`t=12 \gdef\wnum#1pt{#1}}
+\def\@int#1{\expandafter\wnum#1}
+
+
+% PARAMETERS IN TREE MODE
+
+% nodemargin is the extra margin around the hbox enclosing the node.
+% treelinewidth is the width of the lines
+% dashlength is the length of the dashes
+
+\newdimen\nodemargin %
+\nodemargin=2pt
+
+\newdimen\treelinewidth
+\treelinewidth=.3pt
+
+\newdimen\dashlength
+\dashlength=0pt
+
+% * _
+% *
+% * * arrowwidth
+% *
+% * _
+% | | arrowlength
+% | | arrowinset
+
+% arrowwidth
+
+\newdimen\arrowwidth
+\arrowwidth 3pt
+
+\newdimen\arrowlength
+\arrowlength 4pt
+
+\newdimen\arrowinset
+\arrowinset 1pt
+
+% Some commands to manipulate parameters
+
+\def\thinline{\treelinewidth=.3pt}
+
+% \makedash{dimen} makes dashes of dimen length if dimen = 0pt then
+% solid line
+\def\makedash#1{\dashlength=#1}
+
+\def\arrowhead#1#2#3{\arrowwidth#1\arrowlength#2\arrowinset#3}
+
+
+% NODE COMMANDS
+
+% A node defines a region of the page with a height, depth, width, and
+% location of the lower left hand corner
+
+\def\node#1#2{\leavevmode
+ \setbox1=\hbox{#2}\pscmd{/#1 \@int{\the\wd1} \space pt
+ \@int{\the\ht1} \space pt
+ \@int{\the\dp1} \space pt
+ node}\box1\relax}
+
+
+% nodepoint is a specialized node with 0pt width, height, and depth
+% Unlike \node is can be displaced.
+% \nodepoint{nodename}[horizontal displacement][vertical displacement]
+% default is current point
+\def\nodepoint#1{\@ifnextchar [{\@nodepoint{#1}}{\@nodepoint{#1}[0pt][0pt]}}
+
+\def\@nodepoint#1[#2][#3]{{\@tempdima=#2 \@tempdimb=#3%
+\pscmd{/nodemargin 0 def %
+/#1 \@int{\the\@tempdima}\space pt \@int{\the\@tempdimb}\space pt %
+rmoveto 0 0 0 node}}}
+
+
+
+
+\newtoks\pos@t \pos@t={top}
+\newtoks\pos@b \pos@b={bottom}
+\newtoks\pos@l \pos@l={left}
+\newtoks\pos@r \pos@r={right}
+\newtoks\pos@tl \pos@tl={topleft}
+\newtoks\pos@tr \pos@tr={topright}
+\newtoks\pos@bl \pos@bl={bottomleft}
+\newtoks\pos@br \pos@br={bottomright}
+
+
+% COMMANDS FOR CONNECTING NODES
+
+% nodeconnect commands
+% \nodeconnect
+% \anodeconnect - arrow at toloc
+% \aanodeconnect - arrow at both ends
+% arguments are [fromloc]{fromnode}[toloc]{tonode}
+
+% \nodeconnect[fromloc]{fromnode}[toloc]{tonode}
+\def\nodeconnect{\@ifnextchar [{\@nodeconnect}{\@nodeconnect[b]}}
+\def\@nodeconnect[#1]#2{\@ifnextchar [{\@@nodeconnect[#1]{#2}}{\@@nodeconnect[#1]{#2}[t]}}
+
+\def\@@nodeconnect[#1]#2[#3]#4{\pscmd{%
+/#2 getnode node\the\csname pos@#1\endcsname \space%
+/#4 getnode node\the\csname pos@#3\endcsname\space nodeconnect}}
+
+% \delink[fromloc]{fromnode}[toloc]{tonode}{length}
+% places a bar of length perpendicular to and halfway along the line
+% connecting the two locations.
+\def\delink{\@ifnextchar [{\@delink}{\@delink[b]}}
+\def\@delink[#1]#2{\@ifnextchar [{\@@delink[#1]{#2}}{\@@delink[#1]{#2}[t]}}
+
+\def\@@delink[#1]#2[#3]#4#5{\@tempdima=#5%
+\pscmd{/blong \@int{\the\@tempdima} \space pt def%
+/#2 getnode node\the\csname pos@#1\endcsname \space%
+/#4 getnode node\the\csname pos@#3\endcsname\space delink}}
+
+
+% \anodeconnect[fromloc]{fromnode}[toloc]{tonode}
+% The tonode has an arrow pointing to it
+\def\anodeconnect{\@ifnextchar [{\@anodeconnect}{\@anodeconnect[b]}}
+\def\@anodeconnect[#1]#2{\@ifnextchar [{\@@anodeconnect[#1]{#2}}{\@@anodeconnect[#1]{#2}[t]}}
+
+\def\@@anodeconnect[#1]#2[#3]#4{\pscmd{%
+/#2 getnode node\the\csname pos@#1\endcsname \space%
+/#4 getnode node\the\csname pos@#3\endcsname\space arrownodeconnect}}
+
+% \aanodeconnect[fromloc]{fromnode}[toloc]{tonode}
+% double arrowed line
+\def\aanodeconnect{\@ifnextchar [{\@aanodeconnect}{\@aanodeconnect[b]}}
+\def\@aanodeconnect[#1]#2{\@ifnextchar [{\@@aanodeconnect[#1]{#2}}{\@@aanodeconnect[#1]{#2}[t]}}
+
+\def\@@aanodeconnect[#1]#2[#3]#4{\pscmd{%
+/#2 getnode node\the\csname pos@#1\endcsname \space%
+/#4 getnode node\the\csname pos@#3\endcsname\space doublearrownodeconnect}}
+
+
+% nodecurve commands
+% nodecurve... no arrow
+% anodecurve.. arrow at to
+% aanodecurve.. arrows at to and from
+% arguments:
+% \..[fromloc][fromang]{fromnode}[toloc][toang]{tonode}{fdepth}[tdepth]
+% defaults
+% fromloc [b]
+% toloc [t]
+% fromang 0 (in degrees) direction is calculated counterclockwise
+% toang 0 (in degrees) direction is calculated counterclockwise
+% tdepth same as fdepth
+
+
+% nodecurve commands set value of \@arrow, then invoke \nodecurve@
+
+\newcount\@arrow
+\newdimen\@tempdimc
+
+\def\nodecurve{\@arrow=0\nodecurve@}
+\def\anodecurve{\@arrow=1\nodecurve@}
+\def\aanodecurve{\@arrow=2\nodecurve@}
+\def\delinkcurve#1{\@tempdimc=#1%
+\@arrow=3\nodecurve@}
+
+\def\nodecurve@{\@ifnextchar [{\@nodecurve@}{\@nodecurve@[b]}}
+
+\def\@nodecurve@[#1]{\@ifnextchar [{\a@nodecurve@[#1]}{\a@nodecurve@[#1][0]}}
+
+\def\a@nodecurve@[#1][#2]#3{\@ifnextchar [{\@a@nodecurve@[#1][#2]{#3}}%
+{\@a@nodecurve@[#1][#2]{#3}[t]}}
+
+\def\@a@nodecurve@[#1][#2]#3[#4]{\@ifnextchar [{\a@a@nodecurve@[#1][#2]#3[#4]}%
+{\a@a@nodecurve@[#1][#2]#3[#4][0]}}
+
+\def\a@a@nodecurve@[#1][#2]#3[#4][#5]#6#7{\@ifnextchar [%
+{\@a@a@nodecurve@[#1][#2]{#3}[#4][#5]{#6}{#7}}%
+{\@a@a@nodecurve@[#1][#2]{#3}[#4][#5]{#6}{#7}[#7]}}
+
+\def\@a@a@nodecurve@[#1][#2]#3[#4][#5]#6#7[#8]{\@tempdima=#7%
+\@tempdimb=#8%
+\@tempdimc=10pt%
+\pscmd{/depth \@int{\the\@tempdimb} \space pt def %
+ /toangle \space #5 \space def %
+ /fromangle \space #2 \space def %
+ /#6 \the\csname pos@#4\endcsname cur\space %
+ /depth \@int{\the\@tempdima} \space pt def %
+ /#3 \the\csname pos@#1\endcsname cur\space %
+ \ifnum\@arrow=0 nodecurve \else % select & invoke PS command
+ \ifnum\@arrow=1 arrownodecurve \else
+ \ifnum\@arrow=2 arrow2nodecurve \else
+ /blong \@int{\the\@tempdimc} \space pt def
+ delinkcurve
+ \fi\fi\fi}}
+
+
+
+% above is well tested below is not
+\newif\iftransparent
+
+\def\nodebox#1{\pscmd{/#1 nodebox}}
+\def\nodeoval#1{\pscmd{/#1 nodeoval}}
+\def\nodetriangle#1#2{\pscmd{/#1 /#2 nodetriangle}}
+
+% \nodecircle[depth]{nodename}
+
+\def\nodecircle{\@ifnextchar [ {\@nodecircle}{\@nodecircle[0pt]}}
+
+\def\@nodecircle[#1]#2{\@tempdima=#1%
+\iftransparent
+\pscmd{\@int{\the\@tempdima}\space pt /#2 nodecircletrans}
+\else
+\pscmd{\@int{\the\@tempdima}\space pt /#2 nodecircle}\fi}
+
+
+% \barnodeconnect[depth]{fromnode}{tonode}
+\def\barnodeconnect{\@ifnextchar[ {\@barnodeconnect}{\@barnodeconnect[5pt]}}
+
+\def\@barnodeconnect[#1]#2#3{\@tempdima=#1 \ifdim\@tempdima<0pt
+\pscmd{\@int{\the\@tempdima}\space pt %
+/#2 getnode nodebottom /#3 getnode nodebottom barnodeconnect}
+\else
+\pscmd{\@int{\the\@tempdima}\space pt %
+/#2 getnode nodetop /#3 getnode nodetop barnodeconnect}
+\fi}
+
+\def\abarnodeconnect{\@ifnextchar[ {\@abarnodeconnect}{\@abarnodeconnect[5pt]}}
+
+\def\@abarnodeconnect[#1]#2#3{\@tempdima=#1 \ifdim\@tempdima<0pt
+\pscmd{\@int{\the\@tempdima}\space pt %
+/#2 getnode nodebottom /#3 getnode nodebottom arrowbarnodeconnect}
+% above replaces the line below.
+% /#2 getnode nodebottom /#3 getnode nodebottom abarnodeconnect}
+\else
+\pscmd{\@int{\the\@tempdima}\space pt %
+/#2 getnode nodetop /#3 getnode nodetop arrowbarnodeconnect}
+\fi}
+
+
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index 88ef0cd0b82..cd18ce36c11 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -347,7 +347,7 @@ my @TLP_working = qw(
tkz-base tkz-doc tkz-linknodes tkz-orm tkz-tab
tocbibind tocloft tocvsec2 todo todonotes
tokenizer toolbox tools topfloat totcount totpages
- trajan trfsigns trimspaces trivfloat trsym truncate
+ trajan tree-dvips trfsigns trimspaces trivfloat trsym truncate
tucv tufte-latex tugboat tugboat-plain turkmen turnstile turnthepage
twoinone twoup
txfonts txfontsb txgreeks type1cm typehtml typogrid
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index 72c9893a34e..0231167f90e 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -760,7 +760,7 @@ $Master = "$mydir/../..";
'translation-footmisc-de', "die 'skipping, nocommercial'",
'translation-pst-jtree-de', "die 'skipping, nocommercial'",
'translator', "die 'skipping, now part of beamer'",
- 'tree-dvips', "die 'skipping, noinfo license, latex 2.09'",
+# 'tree-dvips', "die 'skipping, noinfo license, latex 2.09'",
'turkishintro',"die 'skipping, nosource'",
'turnstile', "&MAKEflatten",
'turnthepage', "&MAKEflatten",
@@ -1980,6 +1980,7 @@ $standardclean = '\.head|\.tmp|\.dvi|\.log|\.out|\.aux|\.toc|\.lof|\.lot'
'stix' => 'STIX_Font_Release_Documentation_2010.pdf', # no source
'stubs' => 'stubs.pdf', # no source
'susy' => 'susy.pdf', # no source
+ 'tree-dvips' => 'avm.*', # author no response
'xskak' => 'xskak.pdf', # no source
);
diff --git a/Master/tlpkg/tlpsrc/collection-humanities.tlpsrc b/Master/tlpkg/tlpsrc/collection-humanities.tlpsrc
index 424333197ca..a92149f7c5f 100644
--- a/Master/tlpkg/tlpsrc/collection-humanities.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-humanities.tlpsrc
@@ -32,6 +32,7 @@ depend rtklage
depend screenplay
depend sides
depend stage
+depend tree-dvips
depend verse
depend xyling
depend collection-latex
diff --git a/Master/tlpkg/tlpsrc/tree-dvips.tlpsrc b/Master/tlpkg/tlpsrc/tree-dvips.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/tree-dvips.tlpsrc