summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/rrgtrees
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/rrgtrees
Initial commit
Diffstat (limited to 'macros/latex/contrib/rrgtrees')
-rw-r--r--macros/latex/contrib/rrgtrees/Makefile31
-rw-r--r--macros/latex/contrib/rrgtrees/README15
-rw-r--r--macros/latex/contrib/rrgtrees/rrgtrees.dtx843
-rw-r--r--macros/latex/contrib/rrgtrees/rrgtrees.ins62
-rw-r--r--macros/latex/contrib/rrgtrees/rrgtrees.pdfbin0 -> 104859 bytes
5 files changed, 951 insertions, 0 deletions
diff --git a/macros/latex/contrib/rrgtrees/Makefile b/macros/latex/contrib/rrgtrees/Makefile
new file mode 100644
index 0000000000..67bca1007a
--- /dev/null
+++ b/macros/latex/contrib/rrgtrees/Makefile
@@ -0,0 +1,31 @@
+#
+# This makefile is mainly for my convenience, so that the tarball is
+# made with all the right bits. But I'm including it in the distro
+# for people who want to see how I make the pdf file....
+#
+SRC=rrgtrees.dtx rrgtrees.ins Makefile
+PRODUCTS=rrgtrees.sty
+SIDEEFFECTS=rrgtrees.aux rrgtrees.log rrgtrees.dvi
+DOCS=rrgtrees.pdf README
+
+doc: rrgtrees.pdf
+
+rrgtrees.dvi: rrgtrees.sty rrgtrees.dtx
+ latex rrgtrees.dtx
+ latex rrgtrees.dtx
+
+rrgtrees.ps: rrgtrees.dvi
+ dvips rrgtrees.dvi -o rrgtrees.ps
+
+rrgtrees.pdf: rrgtrees.ps
+ ps2pdf rrgtrees.ps rrgtrees.pdf
+
+
+rrgtrees.sty: $(SRC)
+ latex rrgtrees.ins
+clean:
+ -rm $(SIDEEFFECTS)
+spotless:
+ -rm $(PRODUCTS) $(DOCS)
+tarball: $(SRC) $(DOCS)
+ tar -czvf rrgtrees.tgz $(SRC) $(DOCS)
diff --git a/macros/latex/contrib/rrgtrees/README b/macros/latex/contrib/rrgtrees/README
new file mode 100644
index 0000000000..7b297f1a57
--- /dev/null
+++ b/macros/latex/contrib/rrgtrees/README
@@ -0,0 +1,15 @@
+RRGtrees
+A set of LaTeX macros that makes it easy to produce linguistic tree
+diagrams suitable for Role and Reference Grammar (RRG). This package allows the
+construction of trees with crossing lines, as is required by some languages
+in this theory.
+There is no known limit on number of tree nodes or levels.
+
+Requires the pst-node and pst-tree LaTeX packages.
+
+The package also contains some macros useful for typsetting certain
+other aspects of an RRG-based language write-up.
+
+PDF files may be created via ps2pdf (ghostscript) or similar converter,
+but not via pdflatex.
+
diff --git a/macros/latex/contrib/rrgtrees/rrgtrees.dtx b/macros/latex/contrib/rrgtrees/rrgtrees.dtx
new file mode 100644
index 0000000000..859f8ec1fa
--- /dev/null
+++ b/macros/latex/contrib/rrgtrees/rrgtrees.dtx
@@ -0,0 +1,843 @@
+% \iffalse meta-comment
+%% rrgtrees.dtx. Copyright (c) D. J. Gardner 2001-2004
+%
+% This program may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.2
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.2 or later is part of all distributions of LaTeX
+% version 1999/12/01 or later.
+%
+% This program consists of the files rrgtrees.dtx and rrgtrees.ins
+
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+%
+% Changes:
+% Dec 2001: Current codebase finished
+% Jul 2002: Try making dtx file. Give up with lack of time, examples and docs.
+% Nov 2004: Have another go, and succeed. Add |\SEML| command.
+%
+
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%<*driver>
+\documentclass[draft]{ltxdoc}
+\DeclareRobustCommand\package[1]{\textsf{#1}}
+\usepackage{rrgtrees}
+\usepackage{geometry}
+\geometry{a4paper,hmargin=2cm,vmargin=2cm,nohead}
+\begin{document}
+\title{\textsf{RRG trees} package\\Version \rrgversion\small\rrgversiondate}
+\author{D.J.Gardner}\date{Document date: \rrgdocversiondate}\maketitle
+\DeclareRobustCommand\package[1]{\textsf{#1}}
+\DocInput{rrgtrees.dtx}
+\end{document}
+%</driver>
+%<*package>
+% \fi
+% \StopEventually{}
+\def\rrgversion{1.1}
+\def\rrgversiondate{Nov 14 2004}
+\def\rrgdocversiondate{Dec 14 2004}
+% \iffalse meta-comment
+%</package>
+% \fi
+%
+%\section{Introduction}
+%This package provides a simplified interface to pstricks module pst-tree
+%for drawing the complex syntactic trees found in RRG.
+%
+%Role and Reference Grammar is a grammatical (syntactic) theory of human
+%language that, unlike certain other theories, does not make every language
+%look like English. It also acknowledges that certain syntactic phenomena
+%cannot be accounted for except by reference to semantic and pragmatic
+%considerations. As such is well suited to the analysis of
+%languages with features like: free word order; interesting split
+%ergative/accusative systems; pragmatic and/or semantic case assignment;
+%switch-reference systems
+%and minority languages in general. For further details, see e.g.
+%``Syntax'', Van Valin and LaPolla, Cambridge University Press:Cambridge
+%1993.
+%
+%In \LaTeX\ terms, the most challenging aspect of it is that it allows (nay,
+%rejoices in having!) syntactic trees which have lines that cross, and also
+%has an ``operator projection'' that is a distinct representation from the
+%syntactic tree of clause, NPs, etc. While it would be possible to draw
+%these with a graphics package, the nice features of \LaTeX\ that might
+%allow the tree to self-scale to the document font, and adjust its
+%parameters depending on the font used and which words are to be displayed
+%would be lost. Such diagrams are not easy to
+%construct using the \package{pst-tree} (part of pstricks) macros, but are
+%possible by carefully combining \package{pst-tree} with some
+%\package{pst-node} commands. The flexibility of \package{pst-tree} in
+%allowing any number of decendent nodes, unlike other tree packages I've
+%found, is clearly important for ease of use with language data.
+%This package aims to make RRG trees far easier to construct than would be
+%possible using the raw commands.
+%
+%The package also provides macros for displaying and typesetting other
+%representations used in RRG, such as the \pred{pred}() style of elements
+%used in logical structures.
+%
+%\section{Drawing Basic Trees}
+%An attempt has been made to make the commands for drawing trees and
+%tree-elements relatively simple, while allowing flexibility. If the full
+%flexibility of the \package{pst-node} and \package{pst-tree} commands is required, there
+%should be no problem of mixing those in, indeed some complex constructions
+%will need to use direct \package{pst-node} and \package{pst-tree} commands.
+%
+%It may be helpful to think of the commands as being divided between two
+%categories: tree-building and line drawing; or alternatively between the
+%operator projection commands, and the syntactic structure commands.
+%Actually these two are pretty much orthogonal, and thus we have four
+%groups of commands, although there is considerable fuzziness at the edges
+%(e.g. line drawing commands which also include tree building elements, and
+%tree elements that require some line drawing).
+%
+%\subsection{Basic Commands}
+%The following example produces the layered structure for
+%`the cat walked to the mat', but marks the final PP as unanalysed with a
+%triangle. Normal font changing commands work and
+%the separation between levels and nodes of the tree may be changed using
+%the normal pst-tree settings. In the example, the left-hand version was
+%produced by preceeding the commands with \verb+\psset{treesep=2ex}+,
+%the right-hand by preceeding them with
+%\verb+\small\bfseries+ \verb+\psset{treesep=2ex+, \verb+levelsep=3em}+.
+%
+%\begin{center}
+%\DeleteShortVerb{\|}
+%\begin{tabular}{p{0.33\textwidth}c|c}
+%\begin{verbatim}
+%\CLAUSE{
+% \CORE{
+% \OPR{2}{the}
+% \ARG{\WORD(NP){cat}}
+% \NUC{walked}
+% \AAJ{
+% \FanEnd{PP}{to the mat}
+% }
+% }
+%}
+%\end{verbatim}&
+%\psset{treesep=2ex}
+%\CLAUSE{
+% \CORE{
+% \OPR{2}{the}
+% \ARG{\WORD(NP){cat}}
+% \NUC{walked}
+% \AAJ{\FanEnd{PP}{to the mat}}
+% }
+%}~~~
+%&
+%\small\bfseries
+%\psset{treesep=2ex,levelsep=3em}
+%~~~\CLAUSE{
+% \CORE{
+% \OPR{2}{the}
+% \ARG{\WORD(NP){cat}}
+% \NUC{walked}
+% \AAJ{\FanEnd{PP}{to the mat}}
+% }
+%}
+%\\
+%\end{tabular}
+%\end{center}
+%The commands \verb+\WORD+ and \verb+\NUC+ may optionally be followed by an
+%operator projection (see section~\ref{OP}), \verb+\FanEnd+ may not.
+%\verb+\NUC+ also has an optional argument
+%which allows the user to specify
+%non-verb predicating elements, e.g.~\verb+\NUC[ADJ]{green}+. \verb+\OPR+
+%is used to make operators, which have no drawn link to the layered
+%structure. It takes two required arguments --- the number of levels/layers
+%that should be skipped and the word itself --- and an optional argument
+%which is a node name. See section~\ref{OP} for further details.
+%
+%\verb+\FanEnd+ and \verb+\CORE+ type commands accept an optional argument that
+%specifies the node name for the \Core\ label. In the case of
+%\verb+\FanEnd+, this label applies to the text at the top of the triangle.
+%Other commands that behave in a similar manner to
+%\verb+\CORE+ are: \verb+\SENTENCE+, \verb+\CLAUSE+, \verb+\PP+,
+%\verb+\NP+, \verb+\NCORE+, and \verb+\NNUC+.
+%
+%By some devious trickery, \verb+\FanEnd+ may (in addition to the label) have
+%either two or three arguments. If two arguments are given, as in the
+%example, the the triangle or fan goes one level deep. If three arguments
+%are given, then the first argument specifies how many levels deep the fan
+%should be. I.e either \{top\}\{text\} or \{levels\}\{top\}\{text\} may be
+%specified.
+%If for some reason fine adjustments are needed to make the text
+%marking the fan line up with the rest of the sentence, the macro
+%\verb+\rrgfantweak+ may be altered from the default of -1pt.
+%
+%\subsection{Periphery and Complementisers}
+%A periphery element may be added using any of four commands, depending on which
+%side (left or right) it is of the relevant core it is to modify,
+%and whether the
+%label `\Periphery' should be positioned at a set distance
+%from the core or whether it should be positioned normally above its
+%decendant nodes.
+%
+%The `fixed offset' commands are \verb+\LPERIPH+ and \verb+\RPERIPH+, the
+%`right angle' commands \verb+\lPERIPH+, \verb+\rPERIPH+, for left and
+%right respectively.
+%
+%The right angle commands take three required arguments: the number of
+%levels/layers to skip, the label for the upper node, and a tree.
+%The fixed distance commands have an additional argument specifying
+%the distance from the modified core. All periphery aelements may have an
+%optional argument to specify the core to which they should apply. If this is
+%used, then the relevant core should be labeled also, but with a prepended
+%`CORE', as in the example below.
+%Often it is more pleasing to have the periphery decended from an upper
+%invisible node (created by \verb+\TOP+) than to have it distort the tree to
+%which it logically belongs.
+%
+%\begin{tabular}{p{0.5\textwidth}c}
+%\begin{verbatim}
+%\psset{treesep=2ex}
+%\TOP{
+% \OPR{4}{the}
+% \CLAUSE{
+% \CORE[COREa]{
+% \ARG{\WORD(NP){cat}}
+% \NUC{walked}
+% \AAJ{\FanEnd{PP}{to the mat}}
+% }
+% \rPERIPH[a]{2}{PP}{\WORD{on the floor}}
+% }
+%}
+%\dolinks
+%\end{verbatim}
+%&
+%\psset{treesep=2ex}
+%\TOP{
+% \OPR{4}{the}
+% \CLAUSE{
+% \CORE[COREa]{
+% \ARG{\WORD(NP){cat}}
+% \NUC{walked}
+% \AAJ{\FanEnd{PP}{to the mat}}
+% }
+% }
+% \rPERIPH[a]{3}{PP}{\WORD{on the floor}}
+%}
+%\dolinks
+%\\
+%\end{tabular}
+%
+%Complementisers (or clause linkage markers) are basicly of the same form as
+%the periphery command, except they do not have a tree argument. On the
+%assumption that these usually come before the linked element, there is also
+%a short form: \verb+\CMPL+. which is the same as \verb+\lCMPL+. If a
+%[label] argument is given, this should be the exact label of the core or
+%clause node which the \verb+\CMPL+ modifies. The default is to label the
+%item \CMPLtext, but changing \verb+\CMPLtext+ will have immediate effect.
+%
+%Note that the final command in the example is \verb+\dolinks+. This command
+%draws the parts of any periphery and complementisers that were not drawn by
+%the commands themselves. It should come after all linked nodes have been
+%defined but before the next page break.
+%\subsection{Tree Labeling Commands}
+%The following table gives the commands that are used in labeling the tree,
+%with their default definitions and result. The commands may of course be
+%used in the main text and redefined as necessary.:
+%\begin{center}
+%\begin{tabular}{lll}
+%\verb+\Sentence+&\verb+{\scshape Sentence}+&\Sentence\\
+%\verb+\Clause+&\verb+{\scshape Clause}+&\Clause\\
+%\verb+\Core+&\verb+{\scshape Core}+&\Core\\
+%\verb+\Conj+&\verb+{\scshape Conj}+&\Conj\\
+%\verb+\CMPLtext+&\verb+{\scshape cmpl}+&\CMPLtext\\
+%\verb+\Nuc+&\verb+{\scshape Nuc}+&\Nuc\\
+%\verb+\Arg+&\verb+{\scshape Arg}+&\Arg\\
+%\verb+\aaj+&\verb+{\scshape AAJ}+&\aaj\\
+%\verb+\pp+&\verb+{\scshape PP}+&\pp\\
+%\verb+\np+&\verb+{\scshape NP}+&\np\\
+%\verb+\Periphery+&\verb+{\scshape Periphery}+&\Periphery\\
+%\end{tabular}
+%\end{center}
+%\subsection{The Operator Projection}\label{OP}
+%The RRG projection decends below the text line. In this package there are
+%three main commands concerned with the operator projection: \verb+\OP+,
+%\verb+\OPJoin+ and \verb+\LINK+ (which also has variants \verb+\LLINK+,
+%\verb+\RLINK+, \verb+\lLINK+ and \verb+\rLINK+, corresponding to the
+%\verb+\CMPL+ commands). \verb+\OP+
+%is used to draw (and label) the operator layers below verbs and nouns;
+%\verb+\OPJoin+ is used in complex sentences to join two such stacks
+%together and start a new stack of operator layers (positioned half-way
+%between the two); and
+%\verb+\LINK+ draws perpendicular links from operators to these layers,
+%labeling them as specified. As expected, \verb+\LLINK+ and \verb+\RLINK+
+%place their text a specified distance from the node in the tree to which
+%they join.
+%
+%Due to the way that the \package{pst-tree} commands work, \verb+\OPJoin+
+%cannot be used within any tree structure, and also it has not been possible
+%thus far to automatically add to the height of the picture in an accurate
+%manner. Thus some calculation is needed to account for extra depth of the
+%structure that \verb+\OPJoin+ adds. The extra height it is necessary to
+%allow for at the bottom of the figure is ((2$+$operator levels in this
+%stack) $-$ Maximum number of operators in other stacks)$\times$\verb+\rrgoprsep+.
+%
+%In the case that an operator should decend from only part of a word (e.g.
+%an affix) or from a non-word position (e.g. the beginning or end of the text),
+%the \textsf{pst-node} commands \verb+\pnode+ and \verb+\Rnode+.
+%should be used. The following example and the
+%table of arguments in the section~\ref{toa} should make things clearer.
+%\begin{verbatim}
+%\begin{center}
+%\psset{treesep=2ex}
+%\TOP{
+%\OPR[DEFa]{5}{the}
+%\CLAUSE{
+% \CORE{
+% \CORE[COREa]{
+% \ARG{
+% \NP{
+% \WORD{cat}{
+% \OP{N}{\OP{\Nuc\subN}{\OP{\Core\subN}{\OP[cat]{\np}}}}
+% }
+% }
+% }
+% \LINK{DEFa}{cat}{DEF}
+% \OPR[might]{2}{\pnode{IF}might}
+% \OPR[not]{2}{not}
+% \NUC{forget}{\OP{V}{\OP{\Nuc}{\OP[forgetcore]{\Core}}}}
+% }
+% \CMPL[COREb]{3}{to}
+% \CORE[COREb]{
+% \NUC{eat}{\OP{V}{\OP{\Nuc}{\OP[eatcore]{\Core}}}}
+% \OPR[DEFb]{2}{the}
+% \ARG{
+% \NP{
+% \WORD{rat}{
+% \OP{N}{\OP{\Nuc\subN}{\OP{\Core\subN}{\OP[rat]{\np}}}}
+% }
+% \LINK{DEFb}{rat}{DEF}
+% }
+% }
+% }
+% }
+%}
+%\rPERIPH{4}{ADV}{\WORD{tomorrow}}
+%}
+%\OPJoin{forgetcore}{eatcore}{\OP[a]{\Core}{
+% \OP[b]{\Clause}{\OP[c]{\Clause}{\OP[d]{\Clause}}}}}
+%\LINK{might}{b}{MOD}
+%\LINK{not}{a}{NEG}
+%\LLINK{8em}{IF}{d}{IF}
+%\LINK{IF}{c}{TNS}
+%\dolinks
+%\vspace{6\rrgoprsep}
+%\end{center}
+%\end{verbatim}
+%
+%\begin{center}
+%\psset{treesep=2ex}
+%\TOP{
+%\OPR[DEFa]{5}{the}
+%\CLAUSE{
+% \CORE{
+% \CORE[COREa]{
+% \ARG{
+% \NP{
+% \WORD{cat}{
+% \OP{N}{\OP{\Nuc\subN}{\OP{\Core\subN}{\OP[cat]{\np}}}}
+% }
+% }
+% }
+% \LINK{DEFa}{cat}{DEF}
+% \OPR[might]{2}{\pnode{IF}might}
+% \OPR[not]{2}{not}
+% \NUC{forget}{\OP{V}{\OP{\Nuc}{\OP[forgetcore]{\Core}}}}
+% }
+% \CMPL[COREb]{3}{to}
+% \CORE[COREb]{
+% \NUC{eat}{\OP{V}{\OP{\Nuc}{\OP[eatcore]{\Core}}}}
+% \OPR[DEFb]{2}{the}
+% \ARG{
+% \NP{
+% \WORD{rat}{
+% \OP{N}{\OP{\Nuc\subN}{\OP{\Core\subN}{\OP[rat]{\np}}}}
+% }
+% \LINK{DEFb}{rat}{DEF}
+% }
+% }
+% }
+% }
+%}
+%\rPERIPH{4}{ADV}{\WORD{tomorrow}}
+%}
+%\OPJoin{forgetcore}{eatcore}{\OP{\Core}{\OP[a]{\Clause}{\OP[b]{\Clause}{\OP[c]{\Clause}{\OP[d]{\Clause}}}}}}
+%\LINK{might}{b}{MOD}
+%\LINK{not}{a}{NEG}
+%\LLINK{8em}{IF}{d}{IF}
+%\LINK{IF}{c}{TNS}
+%\dolinks
+%\vspace{6\rrgoprsep}
+%\end{center}
+%
+%\section{Tree-Building Commands and Arguments}
+%In the table below, items in italic and their delimiters are optional.
+%Where an argument is labeled ``tree'', that argument may be filled with one
+%or more of the commands below, though some obviously make more sence than
+%others. An argument labeled ``word'' or ``text'' is anything that
+%should appear in the tree, the only difference between the
+%arguments, is that ``text'' arguments are intended to be the text of the
+%analysed sentence, and ``word'' arguments label different parts of the tree
+%structure. Arguments labeled ``name'' are node names, which may be used for
+%drawing lines to and from by various commands.
+%\label{toa}
+%\begin{center}
+%\begin{tabular}{llp{0.35\textwidth}cc}
+%\textbf{Command} & \textbf{Arguments} &\textbf{Summary} &
+%\textbf{Item} & \textbf{Default}\\
+%&&&\textbf{Named}& \textbf{Name}\\
+%\verb+\TOP+ & \{tree\} &Makes (zero sized) logical tree, but top node and
+%lines are not drawn. & \\
+%\verb+\SENTENCE+ & [\emph{name}]\{tree\} & New layer of structure &
+%Top&\textsf{SEN}
+%\\
+%\verb+\CLAUSE+ & [\emph{name}]\{tree\} &New layer of structure &
+%Top&\textsf{CLS}\\
+%\verb+\CORE+ & [\emph{name}]\{tree\} &New layer of structure &
+%Top&\textsf{CORE}\\
+%\verb+\ARG+ & [\emph{name}]\{tree\} &New layer of structure &
+%Top&\textsf{arg}\\
+%\verb+\AAJ+ & [\emph{name}]\{tree\} &New layer of structure &
+%Top&\textsf{aaj}\\
+%\verb+\PP+ & [\emph{name}]\{tree\} &New layer of structure & Top&\textsf{PP}\\
+%\verb+\NP+ & [\emph{name}]\{tree\} &New layer of structure & Top&\textsf{NP}\\
+%\verb+\NCORE+ & [\emph{name}]\{tree\} &New layer of structure &
+%Top&\textsf{NC}\\
+%\verb+\NNUC+ & [\emph{name}]\{tree\} &New layer of structure &
+%Top&\textsf{NN}\\
+%\verb+\OPR+ & [\emph{name}]\{num\}\{text\} &Entry \textbf{num} levels below
+%current node & Text&\textsf{opr}\\
+%\verb+\FanEnd+ & [\emph{name}]\{\emph{num}\}\{word\}\{text\} & Triangle/Fan
+%(i.e. unanalysed) entry below current node, with the apex marked with the
+%word argument. & Top&\textsf{fan}\\
+%\verb+\End+ & [\emph{name}]\{text\}\{\emph{tree}\}& Obsolete simpler
+%version of \verb+\WORD+ & Text & \textsf{x} \\
+%\verb+\WORD+ & [\emph{name}](\emph{word})\{text\}\emph{\{tree\}} &Creates one or
+%two level entry below current node.& Text&\textsf{x}\\
+%\verb+\NUC+ & [\emph{word}]\{text\}\emph{\{tree\}}& Predicating Nucleus &\\
+%\verb+\OP+ & [\emph{name}]\{word\}\emph{\{tree\}}& Operator projection
+%layer & Text&\textsf{op}\\
+%\end{tabular}
+%\end{center}
+%\section{Line Drawing Commands}
+%\begin{center}
+%\begin{tabular}{llp{0.45\textwidth}}
+%\textbf{Command} & \textbf{Arguments} &\textbf{Summary} \\
+%\verb+\CMPL+ &[\emph{name}]\{num\}\{text\} & Also \verb+\rCMPL+. Links to
+%the object named (default: \textsf{CLAUSE}) with right-angle connections.\\
+%\verb+\LCMPL+ &[\emph{name}]\{length\}\{num\}\{text\} & Also \verb+\RCMPL+.
+%Links to the object named (default: \textsf{CLAUSE}) with \CMPLtext\
+%centered \textsf{length} from
+%target.\\
+%\verb+\lPERIPH+ &[\emph{Extn}]\{num\}\{word\}\{\emph{tree}\} & Also
+%\verb+\rPERIPH+. Links to the object named \hfil\penalty0\hbox{``COREExtn''} with
+%right-angle connections.\\
+%\verb+\LPERIPH+ &[\emph{Extn}]\{length\}\{num\}\{word\}\{\emph{tree}\}
+%& Also \verb+\RPERIPH+. Links to the object named \hfil\penalty0\hbox{``COREExtn''} with
+%\Periphery\ centered \textsf{length} from target.\\
+%\verb+\lLINK+ &[\emph{extra}]\{name\}\{name\}\{word\}
+%& Also \verb+\rLINK+. Links two named objects with
+%right-angle connections.\\
+%\verb+\LLINK+ &[\emph{extra}]\{length\}\{name\}\{name\}\{word\}
+%& Also \verb+\RLINK+. Links two named objects with
+%\textsf{text} centered \textsf{length} from target.\\
+%\end{tabular}
+%\end{center}
+%In the above table the parameter named \emph{extra} is appended to the
+%optional argument of a \verb+\ncdiag+ or \verb+\ncangle+ command. It may be
+%used for forcing certain unusual drawing styles, but is best ignored. If
+%used it must start with a comma.
+%\section{Misc. Commands}
+%\subsection{Logical Structures}
+%\begin{tabular}{lll}
+%\textbf{Command} & \textbf{Result} & \textbf{Description} \\
+%\verb+\pred{greet}+&\pred{greet} & Predicate in logical structure \\
+%\verb+\prddo+ & \prddo & Shorthand for \verb+\pred{do}+ \\
+%\verb+\prdDO+ & \prdDO & Shorthand for \verb+\pred{DO}+ \\
+%\verb+\SEML+&\SEML&Shorthand for \verb+{\textsf{SEML}\,}+\\
+%\verb+\INGR+&\INGR&Shorthand for \verb+{\textsf{INGR}\,}+\\
+%\verb+\BECOME+&\BECOME&Shorthand for \verb+{\textsf{BECOME}\,}+\\
+%\verb+\CAUSE+&\CAUSE&Shorthand for \verb+{\textsf{CAUSE}\,}+\\
+%\verb+\NOT+&\NOT&Shorthand for \verb+{\textsf{NOT}\,}+\\
+%\end{tabular}
+%\subsection{Other Commands and Lengths}
+%\begin{tabular}{llp{0.65\textwidth}}
+%\verb+\textsubscript{}+ & Macro& Subscript equivalent for
+%\verb+textsuperscript+ command that is unaccountably missing from
+%latex.ltx\\
+%\verb+\sup{}+ & Macro & Shorthand for \verb+\textsuperscript+ \\
+%\verb+\sub{}+ & Macro & Shorthand for \verb+\textsubscript+ \\
+%\verb+\subN+& Macro & Shorthand for \verb+\textsubscript{\scshape{n}}+, for
+%labeling\vfill e.g.\ \Core\subN\ (typed: \verb+\Core\subN+)\\
+%\verb+\rrgoprsep+ & Length & Separation between levels on operator
+%projection (default is 1.5em)\\
+%\verb+\rrgfantweak+ & Macro & Fine adjustment of fan (triangle) height.
+%(default -1pt)\\
+%\verb+\dolinks+& Macro&Necessary to actually draw and label lines for
+%periphery and complementiser commands. \\
+%\end{tabular}
+% \iffalse meta-comment
+% \fi
+%\section{The code itself}
+%\MakeShortVerb{\|}
+% \iffalse meta-comment
+%<*package>
+% \fi
+% \begin{macrocode}
+\ProvidesPackage{rrgtrees}[2004/11/14 RRG tree drawing]
+\RequirePackage{pst-node,pst-tree}
+% \end{macrocode}
+%\subsection{Logical structures}
+% Before we start with the tree commands proper, we'll use some shortcuts for
+% writing logical structures\ldots
+% \begin{macrocode}
+\newcommand{\pred}[2][]{\textbf{#2}\ensuremath{'_{#1}}}
+\newcommand\SEML{\textsf{SEML}\,}
+\newcommand\INGR{\textsf{INGR}\,}
+\newcommand\BECOME{\textsf{BECOME}\,}
+\newcommand\CAUSE{\textsf{CAUSE}\,}
+\newcommand\NOT{\textsf{NOT}\,}
+\newcommand\prddo{\pred{do}}
+\newcommand\prdDO{\pred{DO}}
+% \end{macrocode}
+%
+% \ldots\ and some tree entries that we want to be consistent
+%
+% \begin{macrocode}
+\def\Sentence{{\scshape Sentence}}
+\def\Clause{{\scshape Clause}}
+\def\Core{{\scshape Core}}
+\def\Conj{{\scshape Conj}}
+\def\CMPLtext{{\scshape cmpl}}
+\def\Nuc{{\scshape Nuc}}
+\def\Arg{{\scshape Arg}}
+\def\aaj{{\scshape AAJ}}
+\def\pp{{\scshape PP}}
+\def\np{{\scshape NP}}
+\def\Periphery{{\scshape Periphery}}
+% \end{macrocode}
+%\subsection{Initial setup}
+%We'll now define a few lengths and sane defaults that will be
+%needed later.
+% \begin{macrocode}
+\newlength\rrgoprsep
+\newlength\rrg@tmpdim
+\newlength\rrg@tmpdima
+\newlength\rrg@tmpdimb
+\setlength{\rrgoprsep}{1.5em}
+% \end{macrocode}
+%
+%\subsection{Generic versions of commands and internally used bits.}
+%
+% \begin{macrocode}
+\def\rrg@empty@toks{\global\let\rrg@dolinks\@empty}
+\rrg@empty@toks
+% \end{macrocode}
+%The |\dolinks| is used to draw things that can only be done once the rest
+%of the tree is defined. Tokens to be executed are deferred into a
+%collecting point by many commands and the macro executes the
+%tokens in the internal collection, and
+%then resets the token list for the next tree.
+% \begin{macrocode}
+\def\dolinks{\rrg@dolinks\rrg@empty@toks}
+\def\@once@tmp{}
+\def\rrg@addlinks{\g@addto@macro\rrg@dolinks}
+\newcommand{\rrg@newnode}[1]{\@namedef{rrg@node@#1}{\null}}
+% \end{macrocode}
+%
+% If this had worked, it would have automatically and drawn the line if
+% possible, or added a delay otherwise. It would have been nicer,
+% but it didn't work.
+% Dunno why.
+%
+% \begin{macrocode}
+%%Broken code:
+%%\newcommand{\rrg@do@or@add@link}[3]{\@ifundefined{rrg@node@#1}{\typeout{#1
+%% undefined}\rrg@addlinks{#3}}{\@ifundefined{rrg@node@#2}
+%% {\typeout{#2 undefined}\rrg@addlinks{#3}}{#3}}}
+% \end{macrocode}
+
+%
+%This combines an arbitary level skip, with a right angled join, as used in
+%periphery and clause link marker elements.
+%
+%Parameters:
+% \#1 = Pre-skip;
+% \#2 = Name of top node;
+% \#3 = Name of link-to node;
+% \#4 = Text of top node;
+% \#5 = Lower tree;
+% \#6 = Mark at Right angle;
+% \#7 = Join angle at link-to node.
+%
+% \begin{macrocode}
+\newcommand{\rightangle@link}[7]{
+\settowidth{\rrg@tmpdim}{#4}%
+\skiplevels{#1}%
+\rrg@newnode{#2}%
+\ifdim\rrg@tmpdim>0pt
+\pstree{\TR[edge=none, name=#2]{#4}}{%
+#5}%
+\else%
+\TR[edge=none,name=#2]{#5}%
+\fi%
+\endskiplevels%
+\rrg@addlinks{\ncangle[angleA=90,angleB=#7,armB=0]{->}{#2}{#3}%
+\ncput*[npos=1]{#6}}}
+% \end{macrocode}
+
+% This version produces a diagonal link for close spacing or
+% line-crossing periphery (etc) elements.
+% \begin{macrocode}
+\newcommand{\diag@link}[8]{
+\settowidth{\rrg@tmpdim}{#4}%
+\expandafter\typeout{\the\rrg@tmpdim}
+\skiplevels{#1}%
+\rrg@newnode{#2}%
+\ifdim\rrg@tmpdim>0pt
+\pstree{\TR[edge=none, name=#2]{#4}}{%
+#5}%
+\else%
+\typeout{#4:#5}%
+\TR[edge=none,name=#2]{#5}%
+\fi%
+\endskiplevels%
+\rrg@addlinks{\ncdiagg[angleA=#7,armA=#8]{<-}{#3}{#2}%
+\ncput*[npos=1]{#6}}}
+% \end{macrocode}
+% Different versions of predicating nucleus, depending on presence of an
+% operator projection
+% \begin{macrocode}
+\newcommand{\@NUCa}[3]{\pstree{\TR{\@do@once\Nuc}}{
+\pstree{\TR{#1}}{\pstree{\TR[name=verb]{\ncput*[npos=1.5]{\scshape{Pred}}#2}}{#3}}}}
+\newcommand{\@NUCn}[2]{\pstree{\TR{\@do@once\Nuc}}{\pstree{\TR{#1}}%
+{\TR[name=verb]{\ncput*[npos=1.5]{\scshape{Pred}}#2}}}}
+% \end{macrocode}
+
+%\subsection{User commands for periphery, etc.}
+% \begin{macrocode}
+\newcommand{\CMPL}[3][CLAUSE]{\rightangle@link{#2}{CMPL#1}{#1}{}{#3}{\CMPLtext}{180}}
+\newcommand{\lCMPL}{\CMPL}
+\newcommand{\rCMPL}[3][CLAUSE]{\rightangle@link{#2}{CMPL#1}{#1}{}{#3}{\CMPLtext}{0}}
+\newcommand{\LCMPL}[4][CLAUSE]{\diag@link{#2}{CMPL#1}{#1}{}{#3}{\CMPLtext}{180}{#4}}
+\newcommand{\RCMPL}[4][CLAUSE]{\diag@link{#2}{CMPL#1}{#1}{}{#3}{\CMPLtext}{0}{#4}}
+\newcommand{\lPERIPH}[4][]{\rightangle@link{#2}{PERIPH#1}{CORE#1}%
+{#3}{#4}{\Periphery}{180}}
+\newcommand{\rPERIPH}[4][]{\rightangle@link{#2}{PERIPH#1}{CORE#1}%
+{#3}{#4}{\Periphery}{0}}
+\newcommand{\LPERIPH}[5][]{\diag@link{#2}{PERIPH#1}{CORE#1}{#3}%
+{#4}{\Periphery}{180}{#5}}
+\newcommand{\RPERIPH}[5][]{\diag@link{#2}{PERIPH#1}{CORE#1}{#3}%
+{#4}{\Periphery}{0}[#5]}
+% \end{macrocode}
+
+
+%\subsection{Predicating Nucleus}
+% \begin{macrocode}
+\newcommand{\NUC}[2][V]{\@ifnextchar\bgroup{\@NUCa{#1}{#2}}{\@NUCn{#1}{#2}}}
+% \end{macrocode}
+%
+%\subsection{More normal tree parts}
+%\subsubsection{Basic components}
+% \begin{macrocode}
+\newcommand{\TOP}[1]{\pstree[thislevelsep=0pt,linestyle=none]{\Tn}%
+{\psset{linestyle=solid}#1}}
+\newcommand{\SENTENCE}[2][SEN]{\pstree{\TR[name=#1]{\Sentence}\@do@once}{#2}}
+\newcommand{\CLAUSE}[2][CLS]{\pstree{\TR[name=#1]{\Clause}\@do@once}{#2}}
+\newcommand{\CORE}[2][CORE]{\pstree{\TR[name=#1]{\Core}\@do@once}{#2}}
+\newcommand{\ARG}[2][arg]{\pstree{\TR[name=#1]{\Arg}\@do@once}{#2}}
+\newcommand{\AAJ}[2][aaj]{\pstree{\TR[name=#1]{\aaj}\@do@once}{#2}}
+\newcommand{\PP}[2][PP]{\pstree{\TR[name=#1]{\pp}\@do@once}{#2}}
+\newcommand{\NP}[2][NP]{\pstree{\TR[name=#1]{\np}\@do@once}{#2}}
+\newcommand{\NCORE}[2][NC]{\pstree{\TR[name=#1]{\Core\subN}\@do@once}{#2}}
+\newcommand{\NNUC}[2][NN]{\pstree{\TR[name=#1]{\Nuc\subN}\@do@once}{#2}}
+% \end{macrocode}
+%\subsubsection{Word node}
+%% |\WORD| tries to be flexible in the arguments it gets.
+%% The user may optionally include the (part of speach) a |[name]| for the
+%% |{word}| node, and possibly being followed by an |{operator projection}|.
+%% E.g. |\WORD{hello}|, |\WORD[hi]{hello}|, |\WORD(N){cat}|,
+%% |\WORD(N)[pussy]{cat}|
+%% are all permitted, as is any of the above with an operator projection
+% \begin{macrocode}
+\newcommand{\WORD}{\let\@word@tmp=\empty\@ifnextchar(%) bracket match
+{\@word@ii}{\@word@i}}
+\newcommand{\@word@i}[2][x]{\@end{#1}{#2}} % Nice easy single level word
+\def\@word@ii(#1){\@ifnextchar[%] bracket match % we have a fuller tree.
+{\@word@iii{#1}}{\@word@iii{#1}[x]}}
+% Here goes!
+\def\@word@iii#1[#2]#3{\@ifnextchar\bgroup% operators follow
+{\@word@iv{#1}{#2}{#3}}{\pstree{\TR{#1}\@do@once}{\TR[name=#2]{#3}}}}
+
+\newcommand{\@word@iv}[4]{\pstree{\TR{#1}\@do@once}{\pstree{\TR[name=#2]{#3}}{#4}}}
+% \end{macrocode}
+%
+% |\@do@once| does the delayed linestyle reset required by someone using
+% |\UNJOINED|
+% \begin{macrocode}
+\newcommand{\@do@once}{\@once@tmp\def\@once@tmp{}}
+\newcommand{\UNJOINED}{\def\@once@tmp{\global\let\psedge\@save@edge}%
+\let\@save@edge\psedge\def\psedge##1##2{}}
+% \end{macrocode}
+%\subsubsection{Operator node}
+%|\OPR| is used for marking the supplied word as an operator. It has no
+%representation in the upper tree but is described as though it were part
+%of it. The optional firse parameter is its tag label (for drawing linking
+%lines, the second defines the number of logical levels to skip, which is a
+%function of the node placement.
+% \begin{macrocode}
+\newcommand{\OPR}[3][opr]{\skiplevels{#2}{\TR[edge=none,name=#1]{#3}}\endskiplevels}
+% \end{macrocode}
+%\subsection{Operator tree and linking}
+% |\OP| defines items in the operator projection.
+% \begin{macrocode}
+\newcommand\OP[2][op]{\psset{levelsep=\rrgoprsep}\@end{#1}{\@do@once#2}}
+\newcommand{\oprlink}[4]{%
+\ncput*[npos=1 #1]{\rnode{label}{#4}}%
+\ncline[linestyle=dashed]{#2}{label}\ncline{->}{label}{#3}%
+}
+\newcommand{\LLINK}[5][]{%
+\ncdiagg[linestyle=none,angleA=180,armA=#2]{#4}{#3}%
+\oprlink{#1}{#3}{#4}{#5}
+}
+\newcommand{\RLINK}[5][]{%
+\ncdiagg[linestyle=none,angleA=0,armA=#2]{<-}{#4}{#3}%
+\oprlink{#1}{#3}{#4}{#5}
+}
+\newcommand{\rLINK}[4][]{\ncangle[linestyle=none,angleA=-90,angleB=0 #1]{#2}{#3}%
+\oprlink{}{#2}{#3}{#4}
+}
+\newcommand{\LINK}[4][]{\ncangle[linestyle=none,angleA=-90,angleB=180 #1]{#2}{#3}%
+\oprlink{}{#2}{#3}{#4}
+}
+\newcommand{\lLINK}{\LINK}
+% \end{macrocode}
+% The |\End| command is just a simple terminal node, which may have an
+% operator tree following it..
+% \begin{macrocode}
+\newcommand{\End}[2][x]{\@end{#1}{#2}}
+% \end{macrocode}
+%
+% First attempt at clever operators. It might even work one day.
+%
+% \begin{macrocode}
+%\newcommand\Ende{\@ifnextchar[%]
+%{\@Ende}{\@Ende[x]}}
+%
+%\def\@Ende[#1]#2{\def\@End{\TR[name=#1]{#2}}%
+%\typeout{@Ende}
+%\@check@Ende}
+%
+%\def\@check@Ende{\@ifnextchar(% ] bracket matching
+%{\typeout{Brkt}}{\typeout{No Brkt}}
+%\@End}%
+%
+%\def\@check@OP{%
+%\typeout{\@End}
+%\@ifnextchar[% ] bracket matching
+%{\@OP}{\@ifnextchar<% > bracket matching
+%{\@OP[x]}{}}%
+%}
+%\def\@OP[#1]<#2>{\typeout{OP}\def\@Tmp{\expandafter\pstree{\TR[name=#1]{#2}}%
+%{\@End}}\let\@End=\@Tmp}
+% \end{macrocode}
+
+%
+% The |\@end| command is run by all things that could be followed by optional
+% decendents. Optional parts are enclosed in \{\}, just like a normal arg.
+% The reason for this is so that the user dosn't need to define the
+% tree in some horrible inverted order, or remember a whole different set
+% of commands.
+%
+% \begin{macrocode}
+\newcommand{\@end}[2]{\@ifnextchar\bgroup% matching
+{\@are@ops{#1}{#2}}{\@end@{#1}{#2}}}
+\newcommand{\@end@}[2]{\TR[name=#1]{#2}}
+\def\@are@ops#1#2#3{\pstree{\@end@{#1}{#2}}{#3}}
+% \end{macrocode}
+%\subsection{Macros for fans/triangles}
+% Adjustment in position of fan label due to height of line or something similar.
+%
+% \begin{macrocode}
+\def\rrgfantweak{-1pt}
+% \end{macrocode}
+%
+% Draw a fan, but first find out how many arguments we have. I.e. we allow
+% |\FanEnd{depth}{head}{text}| or
+% |\FanEnd{head}{text}|
+% plus an optional [label] for the head.
+%
+% \begin{macrocode}
+\newcommand{\FanEnd}[3][fan]{%
+\@ifnextchar\bgroup{\@fanend{#1}{#2}{#3}}{\@@fanend{#1}{1}{#2}{#3}}}
+\def\@fanend#1#2#3#4{\@@fanend{#1}{#2}{#3}{#4}}
+\newcommand{\@@fanend}[4]{
+\setbox\@tempboxa\hbox{#4}%
+\setlength{\rrg@tmpdim}{\wd\@tempboxa}%
+\addtolength{\rrg@tmpdim}{-1ex}%
+\setlength{\rrg@tmpdimb}{\psk@levelsep}%
+\setlength{\rrg@tmpdima}{\psk@levelsep}%
+\setlength{\rrg@tmpdimb}{#2\rrg@tmpdima}%
+\addtolength{\rrg@tmpdimb}{+0.7ex}%
+\addtolength{\rrg@tmpdimb}{-\ht\@tempboxa}%
+\addtolength{\rrg@tmpdimb}{-\pslabelsep}%
+\addtolength{\rrg@tmpdimb}{\rrgfantweak}%
+\pstree[thislevelsep=\rrg@tmpdimb]{\TR{#3}}{\Tfan[fansize=\rrg@tmpdim]%
+\nbput*[npos=1.5,name=#1]{#4}}
+}
+% \end{macrocode}
+% \subsection{Final bits and pieces}
+% This one should have been defined in latex.ltx
+% \begin{macrocode}
+\DeclareRobustCommand*\textsubscript[1]{%
+ \@textsubscript{\selectfont#1}}
+\def\@textsubscript#1{%
+ {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
+% \end{macrocode}
+% Now I make some shortcuts, and use the |\textsubscript| command
+% \begin{macrocode}
+\newcommand{\spr}[1]{\textsuperscript{#1}}
+\newcommand{\sub}[1]{\textsubscript{#1}}
+\newcommand{\subN}{\textsubscript{\scshape{n}}}
+% \end{macrocode}
+%OPJoin is used to define a joined operator tree - see example in text.
+%%Args for |\OPJoin| are:
+%% [Offset from centre] \{node\} \{node\} \{Text/structure\}
+% \begin{macrocode}
+\newcommand{\OPJoin}[4][2\rrgoprsep]{\ncline[linestyle=none]{#2}{#3}%
+\nbput[labelsep=#1,npos=0.5]{\Rnode{join-#2-#3}{#4}%
+}\ncline[linestyle=solid]{#2}{join-#2-#3}%
+\ncdiag[armA=0,armB=0]{#3}{join-#2-#3}}
+% \end{macrocode}
+% It could get very confusing if the user re-defines these.. curved trees,
+% anyone?
+% \begin{macrocode}
+\def\psedge{\ncdiag}
+\psset{levelsep=3.5em,nodesep=1pt,angleA=-90,angleB=90,armA=0,armB=0}
+% \end{macrocode}
+% \iffalse meta-comment
+%</package>
+% \fi
diff --git a/macros/latex/contrib/rrgtrees/rrgtrees.ins b/macros/latex/contrib/rrgtrees/rrgtrees.ins
new file mode 100644
index 0000000000..c30249c016
--- /dev/null
+++ b/macros/latex/contrib/rrgtrees/rrgtrees.ins
@@ -0,0 +1,62 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%%
+% Copyright 2004 by David Gardner
+%
+% This program can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License Distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt; either
+% version 1 of the License, or any later version.
+%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\batchfile{rrgtrees.ins}
+\input docstrip.tex
+\preamble
+Copyright (c) D. J. Gardner 2001-2004
+
+This program may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.2
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.2 or later is part of all distributions of LaTeX
+version 1999/12/01 or later.
+
+This program consists of the files rrgtree.dtx and rrgtree.ins
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Error reports in case of UNCHANGED versions to
+David Gardner: djardner at softhome dot net
+\endpreamble
+
+\keepsilent
+\Msg{*** Generating .sty and .tex files ***}
+\generateFile{rrgtrees.sty}{f}{%
+ \from{rrgtrees.dtx}{package}}
+
+
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space rrgtrees.sty}
+\Msg{*}
+\Msg{* To produce the user documentation, latex the file rrgtrees.dtx}
+\Msg{* (twice to get references) and then use dvips to make a postscript}
+\Msg{* version --- the package uses pstricks, so you need to go via}
+\Msg{* postscript for decent results.}
+\Msg{*}
+\Msg{***********************************************************}
+}
+
+\endinput
+
diff --git a/macros/latex/contrib/rrgtrees/rrgtrees.pdf b/macros/latex/contrib/rrgtrees/rrgtrees.pdf
new file mode 100644
index 0000000000..6866f6c4b1
--- /dev/null
+++ b/macros/latex/contrib/rrgtrees/rrgtrees.pdf
Binary files differ