summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/qtree
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-07-12 22:36:03 +0000
committerKarl Berry <karl@freefriends.org>2006-07-12 22:36:03 +0000
commitd80b07e0e893dbfd60b9066eb5301370e7dbef3c (patch)
treefc82339633b94a46e122394a35b5a36d65bbda34 /Master/texmf-dist/tex/latex/qtree
parent5d6e223c42e66a96895d050c5ba962ed60263dd6 (diff)
new linguistics package qtree
git-svn-id: svn://tug.org/texlive/trunk@1828 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/qtree')
-rw-r--r--Master/texmf-dist/tex/latex/qtree/qtree.sty1007
1 files changed, 1007 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/qtree/qtree.sty b/Master/texmf-dist/tex/latex/qtree/qtree.sty
new file mode 100644
index 00000000000..f0f72543a47
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/qtree/qtree.sty
@@ -0,0 +1,1007 @@
+%
+% qtree.sty, a LaTeX macro package for drawing trees from descriptions
+% given in bracket notation.
+%
+ \def\qTreeVersion{3.1}
+ \def\qTreeDate{2006/07/10 }
+
+% QobiTree tree macros written by Jeffrey Mark Siskind (Qobi@cis.upenn.edu).
+% Front end and extensions by Alexis Dimitriadis (alexis@ling.upenn.edu).
+%
+% Please direct questions/comments to alexis@ling.upenn.edu.
+%
+
+% Most recent revisions:
+
+% 2006/03/08 -- Protected pict2e loading from possible redefinition of ^.
+% Reported by Alan Munn. Extended documentation.
+
+% 2005/12/22 -- 3.0b Removed pgf mode, switched to pict2e.sty support for
+% everything. Updated documentation.
+
+% 2005/05/22 -- Added customization hooks and `balanced' branch command,
+% fixed final whitespace in \leaf. Many small tweaks.
+
+% 2005/05/13 -- Reorganized mode selection options, merged variant file
+% forks.
+
+% 2005/04/07 -- Removed errant spaces, and arranged for trees to be truly
+% left-aligned or centered.
+
+% 2005/02/13 -- Added pgf drawing mode, mode selection support.
+
+% 2004/07/05 -- Added a way to manipulate the height of single-child nodes.
+
+% 2002/11/05 -- Fixed display bug in first branch of 5-branching nodes.
+% Reported by Paliath Narendran [dran@cs.albany.edu].
+
+% 2002/04/17 -- Added provision for ``zero branching'' (empty non-terminals),
+% as suggested by Ronald Greenberg [rig@cs.luc.edu].
+
+% 2001/09/01 -- Finally made LaTeX2e aware; eepic inclusion is now
+% controllable by a package option; massively revised
+% documentation.
+
+% 2000/10/24 -- Fixed bug in last revision that broke parsing of \qroof.
+
+% 2000/9/28 -- Fixed handling of empty labels so that tree lines stay
+% connected.
+% -- Small spacing fixes: changed \0, \1 and \2 to \rlap their
+% output so that it does not impact on centering.
+
+\typeout{Package: \qTreeDate v.\qTreeVersion Qtree: tree-drawing for
+ linguistics}
+
+% Attempt to preserve LaTeX 2.19 compatibility by not evaluating package
+% option commands unless they are defined. Probably pointless...
+%
+\ifx\ProvidesPackage\undefined \else
+ \ProvidesPackage {qtree} [\qTreeDate v.\qTreeVersion Qtree: tree-drawing for
+ linguistics]
+
+ \newif\ifqtreecenter \qtreecentertrue
+ \DeclareOption{nocenter}{\qtreecenterfalse}
+ \DeclareOption{center}{\qtreecentertrue}
+
+ % Control automatic loading of graphics extensions
+ \newif\ifq@autoload \q@autoloadtrue
+ \DeclareOption{noload}{\q@autoloadfalse}
+
+ % Compatibility options
+ \def\q@usage{Enhanced picture support for
+both pdf and PostScript is now provided by the package pict2e.sty.
+(If you need to suppress loading of pict2e.sty, use option [noload]).}
+
+ \DeclareOption{pdf}{\typeout{WARNING: Option [pdf] is obsolete. \q@usage}}
+
+ \DeclareOption{noeepic}{
+ \typeout{WARNING: Option [(no)eepic] is obsolete. \q@usage}}
+
+ \ProcessOptions
+
+ % Autoload graphics extensions, unless [noload] was given.
+ \ifq@autoload
+ % Some linguistics styles like to redefine ^, which causes problems
+ % to pict2e.sty. We protect it by temporarily forcing the default
+ % catcode for ^.
+ \edef\svcatcode@up@{\the\catcode`\^}
+ \catcode`\^=7
+ % DON'T COMMENT THIS OUT! If you don't want pict2e,
+ % just call qtree like this: \usepackage[noload]{qtree}
+ \RequirePackage{pict2e}
+ % restore the catcode of ^ to whatever value it had
+ \catcode`\^=\svcatcode@up@ \relax
+ \let\sv@up@catcode=\relax
+ \fi
+
+\fi % end of package options code
+
+
+% Begin QobiTree code
+
+\newcounter{treecount} \setcounter{treecount}{0}
+\newcounter{branchcount}
+\newsavebox{\parentbox}
+\newsavebox{\treebox}
+\newsavebox{\treeboxone}
+\newsavebox{\treeboxtwo}
+\newsavebox{\treeboxthree}
+\newsavebox{\treeboxfour}
+\newsavebox{\treeboxfive}
+\newsavebox{\treeboxsix}
+\newsavebox{\treeboxseven}
+\newsavebox{\treeboxeight}
+\newsavebox{\treeboxnine}
+\newsavebox{\treeboxten}
+\newsavebox{\treeboxeleven}
+\newsavebox{\treeboxtwelve}
+\newsavebox{\treeboxthirteen}
+\newsavebox{\treeboxfourteen}
+\newsavebox{\treeboxfifteen}
+\newsavebox{\treeboxsixteen}
+\newsavebox{\treeboxseventeen}
+\newsavebox{\treeboxeighteen}
+\newsavebox{\treeboxnineteen}
+\newsavebox{\treeboxtwenty}
+\newlength{\treeoffsetone}
+\newlength{\treeoffsettwo}
+\newlength{\treeoffsetthree}
+\newlength{\treeoffsetfour}
+\newlength{\treeoffsetfive}
+\newlength{\treeoffsetsix}
+\newlength{\treeoffsetseven}
+\newlength{\treeoffseteight}
+\newlength{\treeoffsetnine}
+\newlength{\treeoffsetten}
+\newlength{\treeoffseteleven}
+\newlength{\treeoffsettwelve}
+\newlength{\treeoffsetthirteen}
+\newlength{\treeoffsetfourteen}
+\newlength{\treeoffsetfifteen}
+\newlength{\treeoffsetsixteen}
+\newlength{\treeoffsetseventeen}
+\newlength{\treeoffseteighteen}
+\newlength{\treeoffsetnineteen}
+\newlength{\treeoffsettwenty}
+
+\newlength{\treeshiftone}
+\newlength{\treeshifttwo}
+\newlength{\treeshiftthree}
+\newlength{\treeshiftfour}
+\newlength{\treeshiftfive}
+\newlength{\treeshiftsix}
+\newlength{\treeshiftseven}
+\newlength{\treeshifteight}
+\newlength{\treeshiftnine}
+\newlength{\treeshiftten}
+\newlength{\treeshifteleven}
+\newlength{\treeshifttwelve}
+\newlength{\treeshiftthirteen}
+\newlength{\treeshiftfourteen}
+\newlength{\treeshiftfifteen}
+\newlength{\treeshiftsixteen}
+\newlength{\treeshiftseventeen}
+\newlength{\treeshifteighteen}
+\newlength{\treeshiftnineteen}
+\newlength{\treeshifttwenty}
+\newlength{\treewidthone}
+\newlength{\treewidthtwo}
+\newlength{\treewidththree}
+\newlength{\treewidthfour}
+\newlength{\treewidthfive}
+\newlength{\treewidthsix}
+\newlength{\treewidthseven}
+\newlength{\treewidtheight}
+\newlength{\treewidthnine}
+\newlength{\treewidthten}
+\newlength{\treewidtheleven}
+\newlength{\treewidthtwelve}
+\newlength{\treewidththirteen}
+\newlength{\treewidthfourteen}
+\newlength{\treewidthfifteen}
+\newlength{\treewidthsixteen}
+\newlength{\treewidthseventeen}
+\newlength{\treewidtheighteen}
+\newlength{\treewidthnineteen}
+\newlength{\treewidthtwenty}
+\newlength{\daughteroffsetone}
+\newlength{\daughteroffsettwo}
+\newlength{\daughteroffsetthree}
+\newlength{\daughteroffsetfour}
+\newlength{\branchwidthone}
+\newlength{\branchwidthtwo}
+\newlength{\branchwidththree}
+\newlength{\branchwidthfour}
+\newlength{\parentoffset}
+\newlength{\treeoffset}
+\newlength{\daughteroffset}
+\newlength{\branchwidth}
+\newlength{\parentwidth}
+\newlength{\treewidth}
+%
+
+% Fine-tuning of trees
+
+% The height of the line dominating 1-branching nodes. Can be redefined
+% at any point to change behaviour (even in mid-tree).
+\def\qtreeunaryht{2ex}
+
+% Amount of padding inserted around leaves and labels
+\def\qtreepadding{\tabcolsep}
+
+% Amound of padding under the eaves of roofs.
+\def\qroofpadding{0.4em}
+
+% Typeset a leaf or label, wrapping with padding. Multiple lines are
+% centered, unless the optional argument [c] is overridden (i.e., by \qroof)
+% The first non-optional argument (#2) is usually \qleafhook or \qlabelhook.
+% This command used to be called \ontop (also it used to be a lot simpler!)
+\newcommand{\qshow@text}[3][c]{{#2{\begin{tabular}[t]
+ {@{\hskip\qtreepadding}#1@{\hskip\qtreepadding}}#3\end{tabular}}}}
+
+% A ``leaf'' may actually be a roof; if so, we pad it normally but suppress
+% the hook; leaf and label hooks are applied separately to the parts of the
+% roof.
+\def\qshow@leaf#1{\ifx\@qseenode\qroof \qshow@text{\relax}{#1}\else
+ \qshow@text{\qleafhook}{#1}\fi}
+
+
+\let\qtreeinithook=\relax % global formatting/definitions hook
+\let\qtreefinalhook=\relax % called just after the tree is output
+\let\qleafhook=\relax % hook for leaf text
+\let\qlabelhook=\relax % hook for non-terminal labels
+\let\qbranch@hook=\relax % Called after completing a branch (undocumented)
+
+% Don't take up space for empty labels; as a result, branch segments will be
+% attached to their parent branch when no label is given.
+% (\rlap triggers space in {tabular}, so it's NON zero, and will be displayed).
+\def\showparentbox{\ifdim\wd\parentbox>0pt
+ \hspace*{\parentoffset}\usebox{\parentbox}\\\fi}
+
+
+% Adjust the bottom-most fork in a binary branching tree, so that branches
+% will be of even size if the labels are.
+% Use:
+% Invoke just before closing the bottom-most (binary) fork; for example:
+% \Tree [.X label_1 [.Y label_2 [.Z label_3 right !\qbalance{} ]
+% This works by setting the width of ``right'' to triple the width of
+% its sister, label_3. (A bit of geometry shows why :-)
+\def\qbalance{\qsetw{3\wd\treeboxtwo}}
+
+% And a debugging/learning aid:
+% Draw a (tight) frame around all parts of the tree.
+% Note that these will override any content of the format hooks.
+\def\qtreeshowframes{\let\qlabelhook=\frame \let\qleafhook=\frame}
+% We can include this in \qtreeshowframes, but it's too much information
+% \def\qbranch@hook{\setbox\treeboxone \hbox{\frame{\box\treeboxone}}}
+
+\def\qtreenoframes{\let\qlabelhook=\relax \let\qleafhook=\relax}
+% \let \qbranch@hook=\relax}
+
+
+% Put a frame around the just-completed node.
+%
+\def\qframesubtree{\setbox\treeboxone \hbox{\framebox{\box\treeboxone}}}
+
+%
+\newcommand{\poptree}{%
+\ifnum\value{treecount}=0\typeout{QobiTeX warning---Tree stack underflow}\fi
+\addtocounter{treecount}{-1}%
+\setlength{\treeoffsettwo}{\treeoffsetthree}%
+\setlength{\treeoffsetthree}{\treeoffsetfour}%
+\setlength{\treeoffsetfour}{\treeoffsetfive}%
+\setlength{\treeoffsetfive}{\treeoffsetsix}%
+\setlength{\treeoffsetsix}{\treeoffsetseven}%
+\setlength{\treeoffsetseven}{\treeoffseteight}%
+\setlength{\treeoffseteight}{\treeoffsetnine}%
+\setlength{\treeoffsetnine}{\treeoffsetten}%
+\setlength{\treeoffsetten}{\treeoffseteleven}%
+\setlength{\treeoffseteleven}{\treeoffsettwelve}%
+\setlength{\treeoffsettwelve}{\treeoffsetthirteen}%
+\setlength{\treeoffsetthirteen}{\treeoffsetfourteen}%
+\setlength{\treeoffsetfourteen}{\treeoffsetfifteen}%
+\setlength{\treeoffsetfifteen}{\treeoffsetsixteen}%
+\setlength{\treeoffsetsixteen}{\treeoffsetseventeen}%
+\setlength{\treeoffsetseventeen}{\treeoffseteighteen}%
+\setlength{\treeoffseteighteen}{\treeoffsetnineteen}%
+\setlength{\treeoffsetnineteen}{\treeoffsettwenty}%
+\setlength{\treeshifttwo}{\treeshiftthree}%
+\setlength{\treeshiftthree}{\treeshiftfour}%
+\setlength{\treeshiftfour}{\treeshiftfive}%
+\setlength{\treeshiftfive}{\treeshiftsix}%
+\setlength{\treeshiftsix}{\treeshiftseven}%
+\setlength{\treeshiftseven}{\treeshifteight}%
+\setlength{\treeshifteight}{\treeshiftnine}%
+\setlength{\treeshiftnine}{\treeshiftten}%
+\setlength{\treeshiftten}{\treeshifteleven}%
+\setlength{\treeshifteleven}{\treeshifttwelve}%
+\setlength{\treeshifttwelve}{\treeshiftthirteen}%
+\setlength{\treeshiftthirteen}{\treeshiftfourteen}%
+\setlength{\treeshiftfourteen}{\treeshiftfifteen}%
+\setlength{\treeshiftfifteen}{\treeshiftsixteen}%
+\setlength{\treeshiftsixteen}{\treeshiftseventeen}%
+\setlength{\treeshiftseventeen}{\treeshifteighteen}%
+\setlength{\treeshifteighteen}{\treeshiftnineteen}%
+\setlength{\treeshiftnineteen}{\treeshifttwenty}%
+\setlength{\treewidthtwo}{\treewidththree}%
+\setlength{\treewidththree}{\treewidthfour}%
+\setlength{\treewidthfour}{\treewidthfive}%
+\setlength{\treewidthfive}{\treewidthsix}%
+\setlength{\treewidthsix}{\treewidthseven}%
+\setlength{\treewidthseven}{\treewidtheight}%
+\setlength{\treewidtheight}{\treewidthnine}%
+\setlength{\treewidthnine}{\treewidthten}%
+\setlength{\treewidthten}{\treewidtheleven}%
+\setlength{\treewidtheleven}{\treewidthtwelve}%
+\setlength{\treewidthtwelve}{\treewidththirteen}%
+\setlength{\treewidththirteen}{\treewidthfourteen}%
+\setlength{\treewidthfourteen}{\treewidthfifteen}%
+\setlength{\treewidthfifteen}{\treewidthsixteen}%
+\setlength{\treewidthsixteen}{\treewidthseventeen}%
+\setlength{\treewidthseventeen}{\treewidtheighteen}%
+\setlength{\treewidtheighteen}{\treewidthnineteen}%
+\setlength{\treewidthnineteen}{\treewidthtwenty}%
+\setbox\treeboxtwo \box\treeboxthree
+\setbox\treeboxthree \box\treeboxfour
+\setbox\treeboxfour \box\treeboxfive
+\setbox\treeboxfive \box\treeboxsix
+\setbox\treeboxsix \box\treeboxseven
+\setbox\treeboxseven \box\treeboxeight
+\setbox\treeboxeight \box\treeboxnine
+\setbox\treeboxnine \box\treeboxten
+\setbox\treeboxten \box\treeboxeleven
+\setbox\treeboxeleven \box\treeboxtwelve
+\setbox\treeboxtwelve \box\treeboxthirteen
+\setbox\treeboxthirteen \box\treeboxfourteen
+\setbox\treeboxfourteen \box\treeboxfifteen
+\setbox\treeboxfifteen \box\treeboxsixteen
+\setbox\treeboxsixteen \box\treeboxseventeen
+\setbox\treeboxseventeen \box\treeboxeighteen
+\setbox\treeboxeighteen \box\treeboxnineteen
+\setbox\treeboxnineteen \box\treeboxtwenty }
+%
+\newcommand{\leaf}[1]{%
+\ifnum\value{treecount}=20\typeout{QobiTeX warning---Tree stack overflow}\fi%
+\addtocounter{treecount}{1}%
+\setbox\treeboxtwenty \box\treeboxnineteen
+\setbox\treeboxnineteen \box\treeboxeighteen
+\setbox\treeboxeighteen \box\treeboxseventeen
+\setbox\treeboxseventeen \box\treeboxsixteen
+\setbox\treeboxsixteen \box\treeboxfifteen
+\setbox\treeboxfifteen \box\treeboxfourteen
+\setbox\treeboxfourteen \box\treeboxthirteen
+\setbox\treeboxthirteen \box\treeboxtwelve
+\setbox\treeboxtwelve \box\treeboxeleven
+\setbox\treeboxeleven \box\treeboxten
+\setbox\treeboxten \box\treeboxnine
+\setbox\treeboxnine \box\treeboxeight
+\setbox\treeboxeight \box\treeboxseven
+\setbox\treeboxseven \box\treeboxsix
+\setbox\treeboxsix \box\treeboxfive
+\setbox\treeboxfive \box\treeboxfour
+\setbox\treeboxfour \box\treeboxthree
+\setbox\treeboxthree \box\treeboxtwo
+\setbox\treeboxtwo \box\treeboxone
+\sbox{\treeboxone}{\qshow@leaf{#1}}%
+\sbox{\treeboxone}{\raisebox{-\ht\treeboxone}{\usebox{\treeboxone}}}%
+\setlength{\treeoffsettwenty}{\treeoffsetnineteen}%
+\setlength{\treeoffsetnineteen}{\treeoffseteighteen}%
+\setlength{\treeoffseteighteen}{\treeoffsetseventeen}%
+\setlength{\treeoffsetseventeen}{\treeoffsetsixteen}%
+\setlength{\treeoffsetsixteen}{\treeoffsetfifteen}%
+\setlength{\treeoffsetfifteen}{\treeoffsetfourteen}%
+\setlength{\treeoffsetfourteen}{\treeoffsetthirteen}%
+\setlength{\treeoffsetthirteen}{\treeoffsettwelve}%
+\setlength{\treeoffsettwelve}{\treeoffseteleven}%
+\setlength{\treeoffseteleven}{\treeoffsetten}%
+\setlength{\treeoffsetten}{\treeoffsetnine}%
+\setlength{\treeoffsetnine}{\treeoffseteight}%
+\setlength{\treeoffseteight}{\treeoffsetseven}%
+\setlength{\treeoffsetseven}{\treeoffsetsix}%
+\setlength{\treeoffsetsix}{\treeoffsetfive}%
+\setlength{\treeoffsetfive}{\treeoffsetfour}%
+\setlength{\treeoffsetfour}{\treeoffsetthree}%
+\setlength{\treeoffsetthree}{\treeoffsettwo}%
+\setlength{\treeoffsettwo}{\treeoffsetone}%
+\setlength{\treeoffsetone}{0.5\wd\treeboxone}%
+\setlength{\treeshifttwenty}{\treeshiftnineteen}%
+\setlength{\treeshiftnineteen}{\treeshifteighteen}%
+\setlength{\treeshifteighteen}{\treeshiftseventeen}%
+\setlength{\treeshiftseventeen}{\treeshiftsixteen}%
+\setlength{\treeshiftsixteen}{\treeshiftfifteen}%
+\setlength{\treeshiftfifteen}{\treeshiftfourteen}%
+\setlength{\treeshiftfourteen}{\treeshiftthirteen}%
+\setlength{\treeshiftthirteen}{\treeshifttwelve}%
+\setlength{\treeshifttwelve}{\treeshifteleven}%
+\setlength{\treeshifteleven}{\treeshiftten}%
+\setlength{\treeshiftten}{\treeshiftnine}%
+\setlength{\treeshiftnine}{\treeshifteight}%
+\setlength{\treeshifteight}{\treeshiftseven}%
+\setlength{\treeshiftseven}{\treeshiftsix}%
+\setlength{\treeshiftsix}{\treeshiftfive}%
+\setlength{\treeshiftfive}{\treeshiftfour}%
+\setlength{\treeshiftfour}{\treeshiftthree}%
+\setlength{\treeshiftthree}{\treeshifttwo}%
+\setlength{\treeshifttwo}{\treeshiftone}%
+\setlength{\treeshiftone}{0pt}%
+\setlength{\treewidthtwenty}{\treewidthnineteen}%
+\setlength{\treewidthnineteen}{\treewidtheighteen}%
+\setlength{\treewidtheighteen}{\treewidthseventeen}%
+\setlength{\treewidthseventeen}{\treewidthsixteen}%
+\setlength{\treewidthsixteen}{\treewidthfifteen}%
+\setlength{\treewidthfifteen}{\treewidthfourteen}%
+\setlength{\treewidthfourteen}{\treewidththirteen}%
+\setlength{\treewidththirteen}{\treewidthtwelve}%
+\setlength{\treewidthtwelve}{\treewidtheleven}%
+\setlength{\treewidtheleven}{\treewidthten}%
+\setlength{\treewidthten}{\treewidthnine}%
+\setlength{\treewidthnine}{\treewidtheight}%
+\setlength{\treewidtheight}{\treewidthseven}%
+\setlength{\treewidthseven}{\treewidthsix}%
+\setlength{\treewidthsix}{\treewidthfive}%
+\setlength{\treewidthfive}{\treewidthfour}%
+\setlength{\treewidthfour}{\treewidththree}%
+\setlength{\treewidththree}{\treewidthtwo}%
+\setlength{\treewidthtwo}{\treewidthone}%
+\setlength{\treewidthone}{\wd\treeboxone}}
+%
+\newcommand{\branch}[2]{%
+\setcounter{branchcount}{#1}%
+% 0-branching
+\ifnum\value{branchcount}=0\leaf{#2}\else% added 2002/04/19, RIG
+% Branch label (all branch counts)
+\sbox{\parentbox}{\qshow@text{\qlabelhook}{#2}}%
+% 1-branching
+\ifnum\value{branchcount}=1
+\setlength{\parentoffset}{\treeoffsetone}%
+\addtolength{\parentoffset}{-0.5\wd\parentbox}%
+\setlength{\daughteroffset}{0in}%
+\ifdim\parentoffset<0in%
+\setlength{\daughteroffset}{-\parentoffset}%
+\setlength{\parentoffset}{0in}\fi%
+\setlength{\parentwidth}{\parentoffset}%
+\addtolength{\parentwidth}{\wd\parentbox}%
+\setlength{\treeoffset}{\daughteroffset}%
+\addtolength{\treeoffset}{\treeoffsetone}%
+\setlength{\treewidth}{\wd\treeboxone}%
+\addtolength{\treewidth}{\daughteroffset}%
+\ifdim\treewidth<\parentwidth\setlength{\treewidth}{\parentwidth}\fi%
+\sbox{\treebox}{\begin{minipage}{\treewidth}%
+\begin{flushleft}%
+\showparentbox
+{\setlength{\unitlength}{\qtreeunaryht}%
+\hspace*{\treeoffset}\qdraw@branches{1}}\\
+\vspace{-\baselineskip}%
+\hspace*{\daughteroffset}%
+\raisebox{-\ht\treeboxone}{\usebox{\treeboxone}}%
+\end{flushleft}%
+\end{minipage}}%
+\setlength{\treeoffsetone}{\parentoffset}%
+\addtolength{\treeoffsetone}{0.5\wd\parentbox}%
+\setlength{\treeshiftone}{0pt}%
+\setlength{\treewidthone}{\treewidth}%
+\sbox{\treeboxone}{\usebox{\treebox}}%
+% 2-branching
+\else\ifnum\value{branchcount}=2
+\setlength{\branchwidthone}{\treewidthtwo}%
+\addtolength{\branchwidthone}{\treeoffsetone}%
+\addtolength{\branchwidthone}{-\treeshiftone}%
+\addtolength{\branchwidthone}{-\treeoffsettwo}%
+\setlength{\branchwidth}{\branchwidthone}%
+\setlength{\daughteroffsetone}{\branchwidth}%
+\addtolength{\daughteroffsetone}{-\branchwidthone}%
+\addtolength{\daughteroffsetone}{-\treeshiftone}%
+\setlength{\parentoffset}{-0.5\wd\parentbox}%
+\addtolength{\parentoffset}{\treeoffsettwo}%
+\addtolength{\parentoffset}{0.5\branchwidth}%
+\setlength{\daughteroffset}{0in}%
+\ifdim\parentoffset<0in%
+\setlength{\daughteroffset}{-\parentoffset}%
+\setlength{\parentoffset}{0in}\fi%
+\setlength{\parentwidth}{\parentoffset}%
+\addtolength{\parentwidth}{\wd\parentbox}%
+\setlength{\treeoffset}{\daughteroffset}%
+\addtolength{\treeoffset}{\treeoffsettwo}%
+\setlength{\treewidth}{\wd\treeboxone}%
+\addtolength{\treewidth}{\daughteroffsetone}%
+\addtolength{\treewidth}{\treewidthtwo}%
+\addtolength{\treewidth}{\daughteroffset}%
+\ifdim\treewidth<\parentwidth\setlength{\treewidth}{\parentwidth}\fi%
+\sbox{\treebox}{\begin{minipage}{\treewidth}%
+\begin{flushleft}%
+\showparentbox %\frame
+{\setlength{\unitlength}{0.5\branchwidth}%
+\hspace*{\treeoffset}\qdraw@branches{2}}\\
+\vspace{-\baselineskip}%
+\hspace*{\daughteroffset}%
+\makebox[\treewidthtwo][l]%
+{\raisebox{-\ht\treeboxtwo}{\usebox{\treeboxtwo}}}%
+\hspace*{\daughteroffsetone}%
+\raisebox{-\ht\treeboxone}{\usebox{\treeboxone}}%
+\end{flushleft}%
+\end{minipage}}%
+\setlength{\treeoffsetone}{\parentoffset}%
+\addtolength{\treeoffsetone}{0.5\wd\parentbox}%
+\setlength{\treeshiftone}{0pt}%
+\setlength{\treewidthone}{\treewidth}%
+\sbox{\treeboxone}{\usebox{\treebox}}\poptree%
+% 3-branching
+\else\ifnum\value{branchcount}=3
+\setlength{\branchwidthone}{\treewidthtwo}%
+\addtolength{\branchwidthone}{\treeoffsetone}%
+\addtolength{\branchwidthone}{-\treeshiftone}%
+\addtolength{\branchwidthone}{-\treeoffsettwo}%
+\setlength{\branchwidthtwo}{\treewidththree}%
+\addtolength{\branchwidthtwo}{\treeoffsettwo}%
+\addtolength{\branchwidthtwo}{-\treeshifttwo}%
+\addtolength{\branchwidthtwo}{-\treeoffsetthree}%
+\setlength{\branchwidth}{\branchwidthone}%
+\ifdim\branchwidthtwo>\branchwidth%
+\setlength{\branchwidth}{\branchwidthtwo}\fi%
+\setlength{\daughteroffsetone}{\branchwidth}%
+\addtolength{\daughteroffsetone}{-\branchwidthone}%
+\addtolength{\daughteroffsetone}{-\treeshiftone}%
+\setlength{\daughteroffsettwo}{\branchwidth}%
+\addtolength{\daughteroffsettwo}{-\branchwidthtwo}%
+\addtolength{\daughteroffsettwo}{-\treeshifttwo}%
+\setlength{\parentoffset}{-0.5\wd\parentbox}%
+\addtolength{\parentoffset}{\treeoffsetthree}%
+\addtolength{\parentoffset}{\branchwidth}%
+\setlength{\daughteroffset}{0in}%
+\ifdim\parentoffset<0in%
+\setlength{\daughteroffset}{-\parentoffset}%
+\setlength{\parentoffset}{0in}\fi%
+\setlength{\parentwidth}{\parentoffset}%
+\addtolength{\parentwidth}{\wd\parentbox}%
+\setlength{\treeoffset}{\daughteroffset}%
+\addtolength{\treeoffset}{\treeoffsetthree}%
+\setlength{\treewidth}{\wd\treeboxone}%
+\addtolength{\treewidth}{\daughteroffsetone}%
+\addtolength{\treewidth}{\treewidthtwo}%
+\addtolength{\treewidth}{\daughteroffsettwo}%
+\addtolength{\treewidth}{\treewidththree}%
+\addtolength{\treewidth}{\daughteroffset}%
+\ifdim\treewidth<\parentwidth\setlength{\treewidth}{\parentwidth}\fi%
+\sbox{\treebox}{\begin{minipage}{\treewidth}%
+\begin{flushleft}%
+\showparentbox
+{\setlength{\unitlength}{0.5\branchwidth}%
+\hspace*{\treeoffset}\qdraw@branches{3}}\\
+\vspace{-\baselineskip}%
+\hspace*{\daughteroffset}%
+\makebox[\treewidththree][l]%
+{\raisebox{-\ht\treeboxthree}{\usebox{\treeboxthree}}}%
+\hspace*{\daughteroffsettwo}%
+\makebox[\treewidthtwo][l]%
+{\raisebox{-\ht\treeboxtwo}{\usebox{\treeboxtwo}}}%
+\hspace*{\daughteroffsetone}%
+\raisebox{-\ht\treeboxone}{\usebox{\treeboxone}}%
+\end{flushleft}%
+\end{minipage}}%
+\setlength{\treeoffsetone}{\parentoffset}%
+\addtolength{\treeoffsetone}{0.5\wd\parentbox}%
+\setlength{\treeshiftone}{0pt}%
+\setlength{\treewidthone}{\treewidth}%
+\sbox{\treeboxone}{\usebox{\treebox}}\poptree\poptree%
+% 4-branching
+\else\ifnum\value{branchcount}=4
+\setlength{\branchwidthone}{\treewidthtwo}%
+\addtolength{\branchwidthone}{\treeoffsetone}%
+\addtolength{\branchwidthone}{-\treeshiftone}%
+\addtolength{\branchwidthone}{-\treeoffsettwo}%
+\setlength{\branchwidthtwo}{\treewidththree}%
+\addtolength{\branchwidthtwo}{\treeoffsettwo}%
+\addtolength{\branchwidthtwo}{-\treeshifttwo}%
+\addtolength{\branchwidthtwo}{-\treeoffsetthree}%
+\setlength{\branchwidththree}{\treewidthfour}%
+\addtolength{\branchwidththree}{\treeoffsetthree}%
+\addtolength{\branchwidththree}{-\treeshiftthree}%
+\addtolength{\branchwidththree}{-\treeoffsetfour}%
+\setlength{\branchwidth}{\branchwidthone}%
+\ifdim\branchwidthtwo>\branchwidth%
+\setlength{\branchwidth}{\branchwidthtwo}\fi%
+\ifdim\branchwidththree>\branchwidth%
+\setlength{\branchwidth}{\branchwidththree}\fi%
+\setlength{\daughteroffsetone}{\branchwidth}%
+\addtolength{\daughteroffsetone}{-\branchwidthone}%
+\addtolength{\daughteroffsetone}{-\treeshiftone}%
+\setlength{\daughteroffsettwo}{\branchwidth}%
+\addtolength{\daughteroffsettwo}{-\branchwidthtwo}%
+\addtolength{\daughteroffsettwo}{-\treeshifttwo}%
+\setlength{\daughteroffsetthree}{\branchwidth}%
+\addtolength{\daughteroffsetthree}{-\branchwidththree}%
+\addtolength{\daughteroffsetthree}{-\treeshiftthree}%
+\setlength{\parentoffset}{-0.5\wd\parentbox}%
+\addtolength{\parentoffset}{\treeoffsetfour}%
+\addtolength{\parentoffset}{1.5\branchwidth}%
+\setlength{\daughteroffset}{0in}%
+\ifdim\parentoffset<0in%
+\setlength{\daughteroffset}{-\parentoffset}%
+\setlength{\parentoffset}{0in}\fi%
+\setlength{\parentwidth}{\parentoffset}%
+\addtolength{\parentwidth}{\wd\parentbox}%
+\setlength{\treeoffset}{\daughteroffset}%
+\addtolength{\treeoffset}{\treeoffsetfour}%
+\setlength{\treewidth}{\wd\treeboxone}%
+\addtolength{\treewidth}{\daughteroffsetone}%
+\addtolength{\treewidth}{\treewidthtwo}%
+\addtolength{\treewidth}{\daughteroffsettwo}%
+\addtolength{\treewidth}{\treewidththree}%
+\addtolength{\treewidth}{\daughteroffsetthree}%
+\addtolength{\treewidth}{\treewidthfour}%
+\addtolength{\treewidth}{\daughteroffset}%
+\ifdim\treewidth<\parentwidth\setlength{\treewidth}{\parentwidth}\fi%
+\sbox{\treebox}{\begin{minipage}{\treewidth}%
+\begin{flushleft}%
+\showparentbox
+{\setlength{\unitlength}{0.5\branchwidth}%
+\hspace*{\treeoffset}\qdraw@branches{4}}\\
+\vspace{-\baselineskip}%
+\hspace*{\daughteroffset}%
+\makebox[\treewidthfour][l]%
+{\raisebox{-\ht\treeboxfour}{\usebox{\treeboxfour}}}%
+\hspace*{\daughteroffsetthree}%
+\makebox[\treewidththree][l]%
+{\raisebox{-\ht\treeboxthree}{\usebox{\treeboxthree}}}%
+\hspace*{\daughteroffsettwo}%
+\makebox[\treewidthtwo][l]%
+{\raisebox{-\ht\treeboxtwo}{\usebox{\treeboxtwo}}}%
+\hspace*{\daughteroffsetone}%
+\raisebox{-\ht\treeboxone}{\usebox{\treeboxone}}%
+\end{flushleft}%
+\end{minipage}}%
+\setlength{\treeoffsetone}{\parentoffset}%
+\addtolength{\treeoffsetone}{0.5\wd\parentbox}%
+\setlength{\treeshiftone}{0pt}%
+\setlength{\treewidthone}{\treewidth}%
+\sbox{\treeboxone}{\usebox{\treebox}}\poptree\poptree\poptree%
+% 5-branching
+\else\ifnum\value{branchcount}=5
+\setlength{\branchwidthone}{\treewidthtwo}%
+\addtolength{\branchwidthone}{\treeoffsetone}%
+\addtolength{\branchwidthone}{-\treeshiftone}%
+\addtolength{\branchwidthone}{-\treeoffsettwo}%
+\setlength{\branchwidthtwo}{\treewidththree}%
+\addtolength{\branchwidthtwo}{\treeoffsettwo}%
+\addtolength{\branchwidthtwo}{-\treeshifttwo}%
+\addtolength{\branchwidthtwo}{-\treeoffsetthree}%
+\setlength{\branchwidththree}{\treewidthfour}%
+\addtolength{\branchwidththree}{\treeoffsetthree}%
+\addtolength{\branchwidththree}{-\treeshiftthree}%
+\addtolength{\branchwidththree}{-\treeoffsetfour}%
+\setlength{\branchwidthfour}{\treewidthfive}%
+\addtolength{\branchwidthfour}{\treeoffsetfour}%
+\addtolength{\branchwidthfour}{-\treeshiftfour}%
+\addtolength{\branchwidthfour}{-\treeoffsetfive}%
+\setlength{\branchwidth}{\branchwidthone}%
+\ifdim\branchwidthtwo>\branchwidth%
+\setlength{\branchwidth}{\branchwidthtwo}\fi%
+\ifdim\branchwidththree>\branchwidth%
+\setlength{\branchwidth}{\branchwidththree}\fi%
+\ifdim\branchwidthfour>\branchwidth%
+\setlength{\branchwidth}{\branchwidthfour}\fi%
+\setlength{\daughteroffsetone}{\branchwidth}%
+\addtolength{\daughteroffsetone}{-\branchwidthone}%
+\addtolength{\daughteroffsetone}{-\treeshiftone}%
+\setlength{\daughteroffsettwo}{\branchwidth}%
+\addtolength{\daughteroffsettwo}{-\branchwidthtwo}%
+\addtolength{\daughteroffsettwo}{-\treeshifttwo}%
+\setlength{\daughteroffsetthree}{\branchwidth}%
+\addtolength{\daughteroffsetthree}{-\branchwidththree}%
+\addtolength{\daughteroffsetthree}{-\treeshiftthree}%
+\setlength{\daughteroffsetfour}{\branchwidth}%
+\addtolength{\daughteroffsetfour}{-\branchwidthfour}%
+\addtolength{\daughteroffsetfour}{-\treeshiftfour}%
+\setlength{\parentoffset}{-0.5\wd\parentbox}%
+\addtolength{\parentoffset}{\treeoffsetfive}%
+\addtolength{\parentoffset}{2\branchwidth}%
+\setlength{\daughteroffset}{0in}%
+\ifdim\parentoffset<0in%
+\setlength{\daughteroffset}{-\parentoffset}%
+\setlength{\parentoffset}{0in}\fi%
+\setlength{\parentwidth}{\parentoffset}%
+\addtolength{\parentwidth}{\wd\parentbox}%
+\setlength{\treeoffset}{\daughteroffset}%
+\addtolength{\treeoffset}{\treeoffsetfive}%
+\setlength{\treewidth}{\wd\treeboxone}%
+\addtolength{\treewidth}{\daughteroffsetone}%
+\addtolength{\treewidth}{\treewidthtwo}%
+\addtolength{\treewidth}{\daughteroffsettwo}%
+\addtolength{\treewidth}{\treewidththree}%
+\addtolength{\treewidth}{\daughteroffsetthree}%
+\addtolength{\treewidth}{\treewidthfour}%
+\addtolength{\treewidth}{\daughteroffsetfour}%
+\addtolength{\treewidth}{\treewidthfive}%
+\addtolength{\treewidth}{\daughteroffset}%
+\ifdim\treewidth<\parentwidth\setlength{\treewidth}{\parentwidth}\fi%
+\sbox{\treebox}{\begin{minipage}{\treewidth}%
+\begin{flushleft}%
+\showparentbox
+{\setlength{\unitlength}{0.5\branchwidth}%
+\hspace*{\treeoffset}\qdraw@branches{5}}\\
+\vspace{-\baselineskip}%
+\hspace*{\daughteroffset}%
+\makebox[\treewidthfive][l]%
+{\raisebox{-\ht\treeboxfive}{\usebox{\treeboxfive}}}%
+\hspace*{\daughteroffsetfour}%
+\makebox[\treewidthfour][l]%
+{\raisebox{-\ht\treeboxfour}{\usebox{\treeboxfour}}}%
+\hspace*{\daughteroffsetthree}%
+\makebox[\treewidththree][l]%
+{\raisebox{-\ht\treeboxthree}{\usebox{\treeboxthree}}}%
+\hspace*{\daughteroffsettwo}%
+\makebox[\treewidthtwo][l]%
+{\raisebox{-\ht\treeboxtwo}{\usebox{\treeboxtwo}}}%
+\hspace*{\daughteroffsetone}%
+\raisebox{-\ht\treeboxone}{\usebox{\treeboxone}}%
+\end{flushleft}%
+\end{minipage}}%
+\setlength{\treeoffsetone}{\parentoffset}%
+\addtolength{\treeoffsetone}{0.5\wd\parentbox}%
+\setlength{\treeshiftone}{0pt}%
+\setlength{\treewidthone}{\treewidth}%
+\sbox{\treeboxone}{\usebox{\treebox}}\poptree\poptree\poptree\poptree%
+\else\typeout{QobiTeX warning--- Can't handle #1 branching}\fi\fi\fi\fi\fi\fi}
+%
+\newcommand{\faketreewidth}[1]{%
+ \sbox{\parentbox}{\qshow@text{\relax}{#1}}%
+ \setlength{\treewidthone}{0.5\wd\parentbox}%
+ \addtolength{\treewidthone}{\treeoffsetone}%
+ \setlength{\treeshiftone}{\treeoffsetone}%
+ \addtolength{\treeshiftone}{-0.5\wd\parentbox}}
+%
+
+% set-tree-width: like \faketreewidth, but takes a dimension argument
+% Use: \qsetw{1in} etc.
+\newcommand{\qsetw}[1]{%
+ \treewidthone = #1
+ \treewidthone = 0.5\treewidthone
+ \treeshiftone = -\treewidthone
+ \advance\treewidthone by \treeoffsetone
+ \advance\treeshiftone by \treeoffsetone}
+
+% Fix up alignment of the tree and print out.
+% \Tree has already taken care of centering, etc.
+%
+\newcommand{\qobitree}{%
+ % Cancel padding inserted by \qshow@text
+ \setbox\treeboxone \hbox{%
+ \hskip-\qtreepadding \box\treeboxone \hskip-\qtreepadding}%
+ % Lower box, to top-align with baseline
+ \@tempdima=\ht\treeboxone
+ \advance\@tempdima by -\ht\strutbox
+ \leavevmode \raise-\@tempdima \box\treeboxone
+ % Now clean up
+ \setlength{\treeoffsetone}{\treeoffsettwo}%
+ \setbox\treeboxone \box\treeboxtwo
+ \poptree }
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Front end for qobitree. Reads a tree in bracketed notation and
+% generates commands to build the specified tree.
+% Tokens are space-delimited; brackets {} may be used to alter grouping.
+%
+% Alexis Dimitriadis (alexis@babel.ling.upenn.edu), Dec 6, 1993.
+%
+% Sample input:
+% \Tree [ [ John ].NP [ has [ [ seen ].V [ {the book} ].NP ].T ].IP ].S
+% To insert extra material, precede token with an exclamation mark, e.g.
+% ... ].V !\faketreewidth{VPP} ...
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Very messy stack macros, to make up for lack of nested environments in
+% qobitree.
+%
+% \Spush\Stack{X} Push X on stack \Stack.
+% \Spop\Stack Pop top element off \Stack, leave in the input stream.
+% \Spopd\Stack\to\v Define \v to be the top element of \Stack, pop it.
+%
+
+% This will trigger a LaTeX diagnostic if we pop too far.
+\def\qbstack{<Stack Underflow>}
+\def\qnstack{<Stack Underflow>}
+
+
+\newtoks\qta \newtoks\qtb
+% Expand #2 and push on stack #1. Things already pushed are not
+% reexpanded.
+\long\def\Spush#1#2{\qta=\expandafter{#1}%
+ \edef#1{{#2}\noexpand\@@STP{\the\qta}}}
+
+% Push #2 on stack #1 unexpanded.
+%
+\long\def\SpushU#1#2{\qta=\expandafter{#1}\qtb={#2}%
+ \edef#1{{\the\qtb}\noexpand\@@STP{\the\qta}}}
+
+\def\@@STP{\def\@@StpV}
+
+% Pop the top element of stack #1, leaving in the input stream.
+%
+\def\Spop#1{#1\let#1=\@@StpV}
+
+% Pop the top element of stack #1, expand it, and define #2 to it.
+%
+\def\SpopD#1#2{\expandafter\qta#1\let#1=\@@StpV\edef#2{\the\qta}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is the front end proper. Everything else is just sugar.
+% (the stack macros are necessary).
+%
+\newcount\nbranches
+
+\def\Tree{\bgroup
+ \@ifundefined{qtreebugfixhook}{}\qtreebugfixhook % retained for compatibility
+ \automath \qtreeprimes@internal
+ \qtreeinithook
+ \ifqtreecenter\hskip 0pt plus 1fil\else\leavevmode\fi
+ \nbranches=0\relax \q@recurse }
+
+\def\endTree{\qobitree \qtreefinalhook \egroup}
+
+\def\q@recurse[{\@ifnextchar.{\qq@recurse}{\qq@recurse. }}
+\def\qq@recurse.#1 {\SpushU\qnstack{#1}%
+ \Spush\qbstack{\number\nbranches}\nbranches=0\relax \q@lookfornodes }
+
+% \doanode should more properly be called \doaleaf.
+% \@qseenode is the first token of our argument: handle specially if a roof.
+% The space in \leaf is for terminating the argument of \qroof
+\def\doanode#1 {\advance\nbranches by1
+ \ifx\@qseenode\qroof \leaf{#1 }%
+ \else \leaf{#1}\fi \q@lookfornodes}
+
+\def\q@lookfornodes{\@ifnextchar]{\closeoff}{%
+ \@ifnextchar[{\advance\nbranches by1\relax \q@recurse}{%
+ \@ifnextchar!{\pushliteral}{\futurelet\@qseenode\doanode}}}}
+
+\def\pushliteral!#1 {#1\relax \q@lookfornodes}
+
+\def\closeoff]{\@ifnextchar.{\expandafter\@closeoff}{\expandafter\@closeoff. }}
+% If either label is missing, use the other.
+% Otherwise, disallow mismatched labels
+% Push and pop right argument to make sure the tokens are in same state...
+\def\@closeoff.#1 {%
+ \def\rarg{#1}%
+ \SpopD\qnstack\larg
+ \ifx\larg\@empty \let\larg=\rarg
+ \else \ifx\rarg\@empty \let\rarg=\larg \fi\fi
+ \ifx\larg\rarg \else
+ \errmessage{MISMATCHED LABELS, [.\larg\ ... ].\rarg}%
+ \fi
+ \@@closeoff\larg }
+
+\def\@@closeoff#1{\branch{\number\nbranches}{#1}%
+ \SpopD\qbstack\x\nbranches=\x \relax
+% \showthe\nbranches
+ \qbranch@hook
+ \ifnum\nbranches>0 \expandafter\q@lookfornodes
+ \else \expandafter\endTree \fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% and another odd convenience:
+%
+% Make _, ^ go into math mode automatically in the scope of \automath
+%
+{ % Temporarily change catcodes
+ \catcode`\_=\active
+ \catcode`\^=\active
+
+ \global\def\automath{%
+ \catcode`\_=\active
+ \catcode`\^=\active
+ \def_##1{\@ifnextchar^{\automath@two_{##1}}{\ensuremath{\sb{##1}}}}%
+ \def^##1{\@ifnextchar_{\automath@two^{##1}}{\ensuremath{\sp{##1}}}}}
+}
+\def\automath@two#1#2#3#4{\ensuremath{#1{#2}\relax #3{#4}}}
+% Restore default catcodes for ^, _
+\def\noautomath{\catcode`\_=8 \catcode`\^=7 }
+
+
+% Let \0, \1, \2 produce ^0, $'$, $''$
+% The \rlap results in better centering of the label (ignoring the
+% superscript)
+\def\qtreeprimes@internal{%
+ \def\0{\ifmmode ^0\else \rlap{$^0$}\fi}%
+ \def\1{\ifmmode '\else \rlap{$'$}\fi}%
+ \def\2{\ifmmode ''\else \rlap{$''$}\fi}%
+}
+
+% Same commands, but without the \rlap feature
+\def\qtreeprimes{%
+ \def\0{\ensuremath{^0}}%
+ \def\1{\ensuremath{'}}%
+ \def\2{\ensuremath{''}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% qroof: Build a triangular ``roof'' with label #2 and contents (under the
+% roof) #1. The width of the roof is computed automatically. The contents
+% may contain line breaks (\\).
+%
+
+% The slope of the roof built by qroof (may be changed anywhere).
+\newcount\qroofx
+\newcount\qroofy
+\qroofx=3 \qroofy=1
+
+\newbox\@qrscratchbox
+
+% User command for requesting a roof
+%
+\def\qroof#1.#2 {{%
+ % padding under the ``eaves'' of the roof
+ \setbox\@qrscratchbox = \hbox{\let\qtreepadding=\qroofpadding
+ \qshow@text[l]{\qleafhook}{#1}}%
+ % we don't pad here, since the entire roof gets padded as a leaf.
+ \def\qtreepadding{0pt}%
+ \begin{tabular}{@{}c@{}}
+ \qshow@text{\qlabelhook}{#2}\\
+ \unitlength=\wd\@qrscratchbox \qdraw@roof \\[-0.6ex]
+ \box\@qrscratchbox
+\end{tabular}}}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DRAWING UTILITIES
+
+% The drawing routines may be redefined. The new drawing configuration
+% must provide the commands:
+%
+% \qdraw@branches{N} Draw N branches, each \unitlength wide
+% \qdraw@roof Draw a roof, \unitlength wide
+%
+% (\unitlength is set to the proper value before these are called)
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The original, ``picture'' driver: Uses the native {picture} environment.
+% It is expected that it will be augmented (originally with eepic, but now
+% with pict2e.sty)
+
+% Draws a roof with slope \qroofy/\qroofx, and width equal to the current
+% width of \unitlength (which, during the actual drawing, is set to a
+% suitable value
+% Because we must use integer arithmetic, we divide \unitlength into
+% 2\qroofx units for calculations
+
+\def\qdraw@roof{{%
+ \def\wwd{\count1}%
+ \wwd=\qroofx\relax
+ \multiply\wwd by 2
+ \divide\unitlength by \wwd
+ \begin{picture}(\wwd,\qroofy)
+ \put(0, 0){\line(1,0){\wwd}}
+ \put(0, 0){\line(\qroofx, \qroofy){\qroofx}}
+ \put(\wwd, 0){\line(-\qroofx, \qroofy){\qroofx}}
+ \end{picture}}}
+
+% Draw one of the branching structures we need, using the standard {picture}
+% environment (with or without eepic extensions).
+% The parameter \unitlength is already set appropriately
+%
+\def\qdraw@branches#1{\ifcase#1\relax % Zero case is unused
+ \or % One-branching
+ \begin{picture}(0,1)
+ \put(0,0){\line(0,1){1}}
+ \end{picture}%
+ \or % Two-branching
+ \begin{picture}(2,0.5)
+ \put(0,0){\line(2,1){1}}
+ \put(2,0){\line(-2,1){1}}
+ \end{picture}%
+ \or % Three-branching
+ \begin{picture}(4,1)
+ \put(0,0){\line(2,1){2}}
+ \put(2,0){\line(0,1){1}}
+ \put(4,0){\line(-2,1){2}}
+ \end{picture}%
+ \or % Four-branching
+ \begin{picture}(6,1)
+ \put(0,0){\line(3,1){3}}
+ \put(2,0){\line(1,1){1}}
+ \put(4,0){\line(-1,1){1}}
+ \put(6,0){\line(-3,1){3}}
+ \end{picture}%
+ \or % Five-branching
+ \begin{picture}(8,1)
+ \put(0,0){\line(4,1){4}}
+ \put(2,0){\line(2,1){2}}
+ \put(4,0){\line(0,1){1}}
+ \put(6,0){\line(-2,1){2}}
+ \put(8,0){\line(-4,1){4}}
+ \end{picture}%
+ \else\typeout{Qtree error--- Can't handle #1-way branching}
+ \fi}
+
+% END OF PICTURE driver definitions
+