diff options
author | Karl Berry <karl@freefriends.org> | 2011-03-17 23:48:17 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-03-17 23:48:17 +0000 |
commit | 569f3ceae0a1a258e89aca93afbeada0f9129831 (patch) | |
tree | a13b80740433137426be2670e60d123af5f79296 | |
parent | 3bf95a44b19b38cd429bb35ec50c1a68fef77122 (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/Makefile | 12 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/tree-dvips/README | 48 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/tree-dvips/README.TEXLIVE | 9 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.pdf | bin | 0 -> 32938 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.tex | 124 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script | 718 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/tree-dvips/tree-manual.pdf | bin | 0 -> 70864 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/tree-dvips/tree-manual.tex | 603 | ||||
-rw-r--r-- | Master/texmf-dist/dvips/tree-dvips/tree-dvips91.pro | 110 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/tree-dvips/lingmacros.sty | 312 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/tree-dvips/tree-dvips.sty | 271 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 2 | ||||
-rwxr-xr-x | Master/tlpkg/libexec/ctan2tds | 3 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/collection-humanities.tlpsrc | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/tree-dvips.tlpsrc | 0 |
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 Binary files differnew file mode 100644 index 00000000000..3f77416afa3 --- /dev/null +++ b/Master/texmf-dist/doc/latex/tree-dvips/lingmacros-manual.pdf 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 ¬} + +\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 ¬} + +\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 Binary files differnew file mode 100644 index 00000000000..02fa97f4025 --- /dev/null +++ b/Master/texmf-dist/doc/latex/tree-dvips/tree-manual.pdf 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 |