diff --git a/.github/workflows/bfs-report.yml b/.github/workflows/bfs-report.yml new file mode 100644 index 0000000..698b56a --- /dev/null +++ b/.github/workflows/bfs-report.yml @@ -0,0 +1,55 @@ +name: Build bfs report +on: [push] +jobs: + build_latex: + runs-on: ubuntu-latest + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.7.0 + + + - name: Set up Git repository + uses: actions/checkout@v3 + + - run: | + cd 2023/bfs/report + sudo apt-get update + sudo apt install inkscape + make depext-deb + make + + - name: Upload PDF file + uses: actions/upload-artifact@v3 + with: + name: PDF + path: 2023/bfs/report/burashnikov_bfs.pdf + + # - name: example-class-relations--svg + # uses: dante-ev/latex-action@latest + # with: + # root_file: vkr.tex + # compiler: xelatex + # args: -interaction=nonstopmode -shell-escape + +# name: Build LaTeX document +# on: [push] +# jobs: +# build_latex: +# runs-on: ubuntu-latest +# steps: +# - name: Set up Git repository +# uses: actions/checkout@v3 + +# - name: Compile LaTeX document +# uses: xu-cheng/latex-action@v2 +# with: +# root_file: vkr.tex +# latexmk_use_xelatex: true +# latexmk_shell_escape: true +# extra_system_packages: texlive-lang-cyrillic texlive-xetex texlive-bibtex-extra texlive-plain-generic texlive-fonts-recommended + +# - name: Upload PDF file +# uses: actions/upload-artifact@v3 +# with: +# name: PDF +# path: main.pdf diff --git a/.github/workflows/depinspect-report.yml b/.github/workflows/depinspect-report.yml index 70b3cf3..71ec8a6 100644 --- a/.github/workflows/depinspect-report.yml +++ b/.github/workflows/depinspect-report.yml @@ -1,4 +1,4 @@ -name: Build LaTeX document +name: Build depinspect report on: [push] jobs: build_latex: @@ -7,19 +7,22 @@ jobs: - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.7.0 - - name: Set up Git repository - uses: actions/checkout@v2 - - run: sudo apt-get update - - run: make depext-deb + - name: Set up Git repository + uses: actions/checkout@v3 - - run: make + - run: | + cd 2023/depinspect/report + sudo apt-get update + sudo apt install inkscape + make depext-deb + make - name: Upload PDF file uses: actions/upload-artifact@v3 with: - name: depinspect-report - path: 2023/depinspect/report/burashnikov-depinspect.pdf + name: PDF + path: 2023/depinspect/report/burashnikov_depinspect.pdf # - name: example-class-relations--svg # uses: dante-ev/latex-action@latest diff --git a/2023/bfs/report/.latexindent.yaml b/2023/bfs/report/.latexindent.yaml new file mode 100644 index 0000000..9ed2fad --- /dev/null +++ b/2023/bfs/report/.latexindent.yaml @@ -0,0 +1,680 @@ +# +# latexindent.pl, version 3.20.5, 2023-04-07 +# +# defaultSettings.yaml, the default settings for latexindent.pl +# +# a script that aims to beautify .tex, .sty, .cls files +# +# (or latexindent.exe if you're on Windows) +# +#--------------------------------------------------------------------------------------- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# 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. See the +# GNU General Public License for more details. +# +# See http://www.gnu.org/licenses/. +# +# Chris Hughes, 2017 +# +# For all communication, please visit: https://github.com/cmhughes/latexindent.pl +# +#--------------------------------------------------------------------------------------- +# You should feel encouraged to change anything you like in these settings, but +# it would probably be better to have your own user settings +# files somewhere else - remember that this file may be overwritten +# when you update your tex distribution. Please see the manual linked from: +# +# https://github.com/cmhughes/latexindent.pl +# +# for details of how to create and configure your own settings files. +# +# Please read the manual (linked from above) first to understand what each switch does. +# +#--------------------------------------------------------------------------------------- + +# latexindent can be called to act on a file without using the file's extension, +# e.g, simply +# latexindent myfile +# in which case the choice of file extension is chosen +# according to the choices made in fileExtensionPreference +# Other file extensions can be added. +fileExtensionPreference: + .tex: 1 + .sty: 2 + .cls: 3 + .bib: 4 + +# default file extension of backup file (if -w switch is active) +# for example, if your .tex file is called +# myfile.tex +# and you specify the backupExtension as BACKUP.bak then your +# backup file will be +# myfileBACKUP.bak +backupExtension: .bak + +# only one backup per file: +# - if onlyOneBackUp is 0 then, as a safety measure, +# the number on the extension increments by 1 each time: +# +# myfile.bak0, myfile.bak1, myfile.bak2 +# - if you set onlyOnebackUp to 1, then the backup file will +# be overwritten each time (not recommended until you trust the script) +onlyOneBackUp: 0 + +# some users may want a finite number of backup files, +# say at most 3; in which case, they can change this maxNumberOfBackUps. +# +# If maxNumberOfBackUps is set to 0 (or less) then infinitely +# many backups are possible, unless onlyOneBackUp is switched on +maxNumberOfBackUps: 0 + +# some users may wish to cycle through back up files. +# +# for example, with maxNumberOfBackUps: 4, they may +# wish to delete the oldest back up file, and keep only the most recent. +# +# copy myfile.bak1 to myfile.bak0 +# copy myfile.bak2 to myfile.bak1 +# copy myfile.bak3 to myfile.bak2 +# copy myfile.bak4 to myfile.bak3 +# +# the back up will be written to myfile.bak4 +cycleThroughBackUps: 0 + +# preferences for information displayed in the log file +logFilePreferences: + showEveryYamlRead: 1 + showAmalgamatedSettings: 0 + showDecorationStartCodeBlockTrace: 0 + showDecorationFinishCodeBlockTrace: 0 + endLogFileWith: '--------------' + showGitHubInfoFooter: 1 + Dumper: + Terse: 1 + Indent: 1 + Useqq: 1 + Deparse: 1 + Quotekeys: 0 + Sortkeys: 1 + Pair: " => " + +# verbatim environments specified +# in this field will not be changed at all! +verbatimEnvironments: + verbatim: 1 + lstlisting: 1 + minted: 1 + +# verbatim commands such as \verb! body !, \lstinline$something else$ +verbatimCommands: + verb: 1 + lstinline: 1 + +# no indent blocks (not necessarily verbatim +# environments) which are marked as %\begin{noindent} +# or anything else that you detail in the following +noIndentBlock: + noindent: 1 + cmhtest: 1 + +# \begin{document} and \end{document} are treated differently +# by latexindent within filecontents environments +fileContentsEnvironments: + filecontents: 1 + filecontents*: 1 + +# indent preamble +indentPreamble: 0 + +# assume no preamble in cls, sty, by default +lookForPreamble: + .tex: 1 + .sty: 0 + .cls: 0 + .bib: 0 + +# some preambles can contain \begin and \end statements +# that are not in their 'standard environment block', for example, +# consider the following key = values: +# preheadhook={\begin{mdframed}[style=myframedstyle]}, +# postfoothook=\end{mdframed}, +preambleCommandsBeforeEnvironments: 0 + +# default value of indentation +defaultIndent: "\t" + +# remove trailing whitespace from all lines +removeTrailingWhitespace: + beforeProcessing: 0 + afterProcessing: 1 + +# name of code blocks that should have their body aligned at ampersand delimiters +# Disabled because it makes horrible diffs +lookForAlignDelims: +# tabular: +# delims: 1 +# alignDoubleBackSlash: 1 +# spacesBeforeDoubleBackSlash: 1 +# multiColumnGrouping: 0 +# alignRowsWithoutMaxDelims: 1 +# spacesBeforeAmpersand: 1 +# spacesAfterAmpersand: 1 +# justification: left +# alignFinalDoubleBackSlash: 0 +# dontMeasure: 0 +# delimiterRegEx: (?]*?>) + keyEqualsValuesBracesBrackets: + name: [a-zA-Z@\*0-9_\/.:\#-]+[a-zA-Z@\*0-9_\/.\h\{\}:\#-]*? + follow: (?:(?<]+? + follow: \h|\R|\{|\[|\$|\)|\( + UnNamedGroupingBracesBrackets: + follow: \{|\[|,|&|\)|\(|\$ + arguments: + before: (?:#\d\h*;?,?\/?)+|\<.*?\> + between: _|\^|\* + trailingComments: + notPreceededBy: (?}{{$\to$}}3 {===}{{$\equiv$}}1 {=/=}{{$\not\equiv$}}1 -% {|>}{{$\triangleright$}}3 {\\/}{{$\vee$}}2 +% literate={->}{{$\to$}}3 {===}{{$\equiv$}}1 {=/=}{{$\not\equiv$}}1 +% {|>}{{$\triangleright$}}3 {\\/}{{$\vee$}}2 % {/\\}{{$\wedge$}}2 {>=}{{$\ge$}}1 {<=}{{$\le$}} 1, % morecomment=[s]{(*}{*)} %} @@ -81,14 +81,14 @@ \definecolor{redstrings}{rgb}{0.9,0,0} \lstdefinelanguage{pseudoFSharp}% - {morekeywords={let, new, match, with,, open, module, namespace, type, of, member, % - and, for, while, true, false, in, do, begin, end, fun, function, return, yield, try, % - mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit, finally }, - otherkeywords={ let!, return!, do!, yield!, use!, var, from, select, where, call, by }, - keywordstyle=\color{redstrings}, - sensitive=true, - tabsize=2, - comment=[l][\color{greencomments}]{//} +{morekeywords={let, new, match, with,, open, module, namespace, type, of, member, % + and, for, while, true, false, in, do, begin, end, fun, function, return, yield, try, % + mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit, finally }, + otherkeywords={ let!, return!, do!, yield!, use!, var, from, select, where, call, by }, + keywordstyle=\color{redstrings}, + sensitive=true, + tabsize=2, + comment=[l][\color{greencomments}]{//} } \definecolor{codegreen}{rgb}{0,0.6,0} @@ -97,23 +97,23 @@ \definecolor{backcolour}{rgb}{1.0,1.0,1.0} \lstdefinestyle{codelistingstyle}{ - backgroundcolor=\color{backcolour}, - commentstyle=\color{codegreen}, - keywordstyle=\color{magenta}, - numberstyle=\small\color{codegray}, - stringstyle=\color{codepurple}, - basicstyle=\ttfamily\small, - breakatwhitespace=false, - breaklines=true, - captionpos=b, - keepspaces=true, - numbers=left, - numbersep=5pt, - showspaces=false, - showstringspaces=false, - showtabs=false, - tabsize=2, - commentstyle=\color{codegreen} + backgroundcolor=\color{backcolour}, + commentstyle=\color{codegreen}, + keywordstyle=\color{magenta}, + numberstyle=\small\color{codegray}, + stringstyle=\color{codepurple}, + basicstyle=\ttfamily\small, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2, + commentstyle=\color{codegreen} } \let\sq=\textquotesingle diff --git a/2023/bfs/report/qtree.sty b/2023/bfs/report/qtree.sty new file mode 100644 index 0000000..4db8284 --- /dev/null +++ b/2023/bfs/report/qtree.sty @@ -0,0 +1,1010 @@ +% +% qtree.sty, a LaTeX macro package for drawing trees from descriptions +% given in bracket notation. +% + \def\qTreeVersion{3.1b} + \def\qTreeDate{2008/12/12 } + +% 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: + +% 2008/12/12 -- 3.1b A roof with an empty label will be connected to the tree +% branches (but will look ugly because of the different angles) + +% 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{} +\def\qnstack{} + + +\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@{}} + \setbox\@tempboxa = \hbox{\qshow@text{\qlabelhook}{#2}}% + \ifdim\wd\@tempboxa>0pt \box\@tempboxa \\ \fi + \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 +