From 626f1e34d772de35aee29ef2a526f3d9e8686e80 Mon Sep 17 00:00:00 2001 From: David Chiang Date: Fri, 16 Dec 2022 09:09:56 -0500 Subject: [PATCH] initial commit for GitHub --- LICENSE.md | 7 + README.md | 40 +++++ pgfsubpic.sty | 4 + pgfsubpic.tex | 209 ++++++++++++++++++++++ pgftree.sty | 6 + pgftree.tex | 215 ++++++++++++++++++++++ tikz-qtree-compat.sty | 72 ++++++++ tikz-qtree-manual.pdf | Bin 0 -> 106370 bytes tikz-qtree-manual.tex | 402 ++++++++++++++++++++++++++++++++++++++++++ tikz-qtree.sty | 4 + tikz-qtree.tex | 204 +++++++++++++++++++++ 11 files changed, 1163 insertions(+) create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 pgfsubpic.sty create mode 100644 pgfsubpic.tex create mode 100644 pgftree.sty create mode 100644 pgftree.tex create mode 100644 tikz-qtree-compat.sty create mode 100644 tikz-qtree-manual.pdf create mode 100644 tikz-qtree-manual.tex create mode 100644 tikz-qtree.sty create mode 100644 tikz-qtree.tex diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..2196277 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,7 @@ +Copyright 2002, 2009 by David Chiang + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..ee6a6f8 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# tikz-qtree + +Version 1.2 (20 Apr 2012) + +This package provides a macro for drawing trees with TikZ using the +easy syntax of Alexis Dimitriadis' +[Qtree](https://ctan.org/pkg/qtree). It improves on TikZ's standard +tree-drawing facility by laying out tree nodes without collisions, and +it improves on Qtree by adding lots of features from TikZ (for +example, edge labels, arrows between nodes). + +Please see tikz-qtree-manual.pdf for instructions and examples. + +Version history: +1.2 (2012/04/20) + - level-specific styles (thanks to Andrew Stacey) + +1.12 (2011/10/10) + - fixed bug that was inserting spaces + +1.11 (2010/12/25): + - options don't break options for standard TikZ trees + +1.1 (2009/12/25): + - much deeper trees can be typeset without exceeding capacity + - sideways trees + - extra package for improved Qtree compatibility + - connections can be drawn to whole subtrees instead of nodes + +1 (2009/12/22): + - initial release + +## Credits + +David Chiang (dchiang@nd.edu) + +## License + +This package is available under the MIT License. Please see LICENSE.md +for details. diff --git a/pgfsubpic.sty b/pgfsubpic.sty new file mode 100644 index 0000000..500470a --- /dev/null +++ b/pgfsubpic.sty @@ -0,0 +1,4 @@ +\RequirePackage{pgf} + +\input{pgfsubpic.tex} +\endinput diff --git a/pgfsubpic.tex b/pgfsubpic.tex new file mode 100644 index 0000000..baa3584 --- /dev/null +++ b/pgfsubpic.tex @@ -0,0 +1,209 @@ +% pgfsubpic.tex +% Version 1.1, 25 Dec 2009 + +% Copyright 2009 by David Chiang + +% 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 2 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. + +% You should have received a copy of the GNU General Public License along +% with this program; if not, write to the Free Software Foundation, Inc., +% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +% New in version 1.1: +% - the ability to save a subpicture in local variables +% - nodes in subpictures are tracked if the subpicture is placed with arbitrary transforms +% - new \pgffitsubpicture macro to transform a subpicture (preserving aspect) to fit in a desired box + +\newdimen\pgf@subpicminx +\newdimen\pgf@subpicminy +\newdimen\pgf@subpicmaxx +\newdimen\pgf@subpicmaxy + +% Special virtual node for current subpicture's bounding box +\expandafter\def\csname pgf@sh@ns@current subpicture\endcsname{rectangle} +\expandafter\def\csname pgf@sh@np@current subpicture\endcsname{% + \def\southwest{\pgfqpoint{\pgf@subpicminx}{\pgf@subpicminy}}% + \def\northeast{\pgfqpoint{\pgf@subpicmaxx}{\pgf@subpicmaxy}}% +} +\expandafter\def\csname pgf@sh@nt@current subpicture\endcsname{{\pgf@pt@aa}{\pgf@pt@ab}{\pgf@pt@ba}{\pgf@pt@bb}{\the\pgf@pt@x}{\the\pgf@pt@y}} % the transformation at invocation time +\expandafter\def\csname pgf@sh@pi@current subpicture\endcsname{\pgfpictureid} + +% Create a pgfpicture inside an hbox for delayed placement +\def\pgfsubpicture{% +\expandafter\global\expandafter\setbox\pgf@hbox=\hbox\bgroup +\pgfinterruptpicture +\pgfpicture +\relax % not sure why. otherwise a curly brace immediately after causes an error +} + +\def\endpgfsubpicture{ +\global\pgf@subpicminx=\pgf@picminx +\global\pgf@subpicminy=\pgf@picminy +\global\pgf@subpicmaxx=\pgf@picmaxx +\global\pgf@subpicmaxy=\pgf@picmaxy +\global\edef\subpictureid{\pgfpictureid}% +\pgfsetbaseline{\pgf@picminy}% +\endpgfpicture% +\endpgfinterruptpicture% +\egroup +} + +% Allocate registers for saving a subpicture. #1 is text, not a control sequence. +\def\pgfnewsubpicture#1{% +\expandafter\newbox\csname pgf@subpic@hbox@#1\endcsname +\expandafter\newdimen\csname pgf@subpic@minx@#1\endcsname +\expandafter\newdimen\csname pgf@subpic@miny@#1\endcsname +\expandafter\newdimen\csname pgf@subpic@maxx@#1\endcsname +\expandafter\newdimen\csname pgf@subpic@maxy@#1\endcsname +} + +% saved subpictures are local to the current group +\def\pgfsavesubpicture#1{% +\expandafter\setbox\csname pgf@subpic@hbox@#1\endcsname\box\pgf@hbox +\csname pgf@subpic@minx@#1\endcsname\pgf@subpicminx +\csname pgf@subpic@miny@#1\endcsname\pgf@subpicminy +\csname pgf@subpic@maxx@#1\endcsname\pgf@subpicmaxx +\csname pgf@subpic@maxy@#1\endcsname\pgf@subpicmaxy +\expandafter\edef\csname pgf@subpic@id@#1\endcsname{\subpictureid}% +} + +% place current subpicture into named subpicture +\def\pgfmergesubpicture#1{% +\begin{pgfsubpicture} +% place current subpicture +\pgfplacesubpicture +% override containing picture +\expandafter\xdef\csname pgf@sh@pi@\subpictureid\endcsname{\csname pgf@subpic@id@#1\endcsname}% +% copy contents of #1 +\pgfrestoresubpicture{#1} +\pgflowlevelobj{\pgftransformshift{\pgfqpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}}{\pgfqbox\pgf@hbox} +\pgfpathrectanglecorners{\pgfqpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}{\pgfqpoint{\the\pgf@subpicmaxx}{\the\pgf@subpicmaxy}}% +\pgfusepath{use as bounding box}% +% +\end{pgfsubpicture} +\expandafter\setbox\csname pgf@subpic@hbox@#1\endcsname\box\pgf@hbox +\csname pgf@subpic@minx@#1\endcsname\pgf@subpicminx +\csname pgf@subpic@miny@#1\endcsname\pgf@subpicminy +\csname pgf@subpic@maxx@#1\endcsname\pgf@subpicmaxx +\csname pgf@subpic@maxy@#1\endcsname\pgf@subpicmaxy +% but don't save the new picture id, keep the existing one +} + +\def\pgfrestoresubpicture#1{% +\edef\act{\global\noexpand\setbox\pgf@hbox\noexpand\box\csname pgf@subpic@hbox@#1\endcsname}\act +\expandafter\global\expandafter\pgf@subpicminx\csname pgf@subpic@minx@#1\endcsname +\expandafter\global\expandafter\pgf@subpicminy\csname pgf@subpic@miny@#1\endcsname +\expandafter\global\expandafter\pgf@subpicmaxx\csname pgf@subpic@maxx@#1\endcsname +\expandafter\global\expandafter\pgf@subpicmaxy\csname pgf@subpic@maxy@#1\endcsname +\xdef\subpictureid{\csname pgf@subpic@id@#1\endcsname}% +} + +% Place a previously-created subpicture, lining up its origin with the current origin +\def\pgfplacesubpicture{ +\pgfscope +% expand current bounding box to accommodate subpicture +\pgfpathrectanglecorners{\pgfqpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}{\pgfqpoint{\the\pgf@subpicmaxx}{\the\pgf@subpicmaxy}}% +\pgfusepath{use as bounding box}% +% +% make the subpicture a node in the containing picture +\expandafter\gdef\csname pgf@sh@ns@\subpictureid\endcsname{rectangle}% +\expandafter\xdef\csname pgf@sh@np@\subpictureid\endcsname{% + \noexpand\def\noexpand\southwest{\noexpand\pgfqpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}% + \noexpand\def\noexpand\northeast{\noexpand\pgfqpoint{\the\pgf@subpicmaxx}{\the\pgf@subpicmaxy}}% +}% +\pgfgettransform\pgf@temp +\expandafter\xdef\csname pgf@sh@nt@\subpictureid\endcsname{\pgf@temp}% +\expandafter\xdef\csname pgf@sh@pi@\subpictureid\endcsname{\pgfpictureid}% +% +% align origin of subpicture with origin +\pgftransformshift{\pgfqpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}% +\pgfqboxsynced{\pgf@hbox}% +\endpgfscope +} + +% Hook onto existing macro \pgf@shape@interpictureshift. +% This is called whenever we look up an anchor of a node. +% This hook recursively checks to see if the node's picture +% is a subpicture of another, and if so, adjusts its position accordingly. + +% This is slow. It makes drawing trees O(n^2) in the depth of the tree. +% The alternative is to store, for each picture, a list of the nodes +% inside it. But this way doesn't require us to hijack \pgfnode, and +% is robust to re-placement of a subpicture. A compromise would be +% to store, for each picture, a list of the *subpictures* inside it. + +\let\orig@pgf@shape@interpictureshift\pgf@shape@interpictureshift +\def\unwind@subpic#1{% +% is #1 the current picture? +\edef\subpicid{#1}% +\ifx\subpicid\pgfpictureid +% yes, we're done +\else +% does #1 have a parent picture? +\expandafter\ifx\csname pgf@sh@pi@#1\endcsname\relax +% no, the original node was not inside the current picture +\fallback +\else +% yes, apply transform and move up to parent picture +{% + \pgfsettransform{\csname pgf@sh@nt@#1\endcsname}% + \pgf@pos@transform{\pgf@x}{\pgf@y}% + \global\pgf@x=\pgf@x + \global\pgf@y=\pgf@y +}% +\unwind@subpic{\csname pgf@sh@pi@#1\endcsname}% +\fi +\fi +} +\def\pgf@shape@interpictureshift#1{% +\edef\fallback{\pgf@x=\the\pgf@x\pgf@y=\the\pgf@y\noexpand\orig@pgf@shape@interpictureshift{#1}}% +\unwind@subpic{\csname pgf@sh@pi@#1\endcsname}% +} + +% \pgffitsubpicture{sw}{ne} +% Make the subpicture fit in the rectangle from sw to ne, preserving its aspect ratio. +\def\pgffitsubpicture#1#2{% +% current size +\pgfpointdiff{\pgfpointanchor{current subpicture}{south west}}{\pgfpointanchor{current subpicture}{north east}}% +\pgf@xa=\pgf@x \pgf@ya=\pgf@y +% desired size +\pgf@process{\pgfpointdiff{#1}{#2}}% +\pgf@xb=\pgf@x \pgf@yb=\pgf@y +\pgfmathparse{min(\pgf@xb/\pgf@xa,\pgf@yb/\pgf@ya)}% +\pgfmathparse{min(1,\pgfmathresult)}% +\pgftransformscale{\pgfmathresult}% +% +% current position +\pgfpointanchor{current subpicture}{center}% +\pgf@xa=\pgf@x \pgf@ya=\pgf@y +% desired position +% we scaled transform, so apply reverse scaling to argument +\pgfmathparse{1/\pgfmathresult}% +\pgf@process{\pgfpointscale{\pgfmathresult}{\pgfpointlineattime{0.5}{#1}{#2}}}% +\pgf@xb=\pgf@x \pgf@yb=\pgf@y +\pgfpointdiff{\pgfpoint{\pgf@xa}{\pgf@ya}}{\pgfpoint{\pgf@xb}{\pgf@yb}}% +\pgftransformshift{\pgfpoint{\pgf@x}{\pgf@y}}% +} + +% utility functions -- not currently used + +\def\pgfnodedelete#1{% +\expandafter\global\expandafter\let\csname pgf@sh@ns@#1\endcsname\relax +\expandafter\global\expandafter\let\csname pgf@sh@np@#1\endcsname\relax +\expandafter\global\expandafter\let\csname pgf@sh@nt@#1\endcsname\relax +\expandafter\global\expandafter\let\csname pgf@sh@pi@#1\endcsname\relax +\expandafter\global\expandafter\let\csname pgf@sh@ma@#1\endcsname\relax +} + +\def\pgfnodeifexists#1#2#3{% +\expandafter\ifx\csname pgf@sh@ns@#1\endcsname\relax#3\else#2\fi +} + diff --git a/pgftree.sty b/pgftree.sty new file mode 100644 index 0000000..1c30ea4 --- /dev/null +++ b/pgftree.sty @@ -0,0 +1,6 @@ +\RequirePackage{pgf} +\RequirePackage{pgffor} +\RequirePackage{pgfsubpic} + +\input{pgftree.tex} +\endinput diff --git a/pgftree.tex b/pgftree.tex new file mode 100644 index 0000000..7f67c8f --- /dev/null +++ b/pgftree.tex @@ -0,0 +1,215 @@ +% pgftree.tex +% Version 1.2, 20 Apr 2012 + +% Copyright 2009 by David Chiang + +% 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 2 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. + +% You should have received a copy of the GNU General Public License along +% with this program; if not, write to the Free Software Foundation, Inc., +% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +% New in version 1.2: +% - level-specific styles (thanks to Andrew Stacey) + +% New in version 1.1: +% - major restructuring to not do arbitrary nesting of subpicture environments +% - sideways trees + +% To do: +% - trees with all leaves at same level +% - if \nodename does not exist as desired, wrap inside a rectangle node +% - don't use pgfsubpic internals + +\newdimen\levelsep \levelsep=30pt +\newdimen\subtreesep \subtreesep=2pt +\newdimen\smuggle@levelsep +\newdimen\smuggle@subtreesep +\newdimen\this@levelsep +\newdimen\this@subtreesep + +\def\leveldirection{down} +\def\siblingdirection{right} + +% definitions of growing directions +\def\pgftree@levelshift{\csname pgftree@levelshift@\leveldirection\endcsname} +\def\pgftree@parentanchor{\csname pgftree@parentanchor@\leveldirection\endcsname} +\def\pgftree@childanchor{\csname pgftree@childanchor@\leveldirection\endcsname} +% these assume that the current subpicture is the child +\def\pgftree@presiblingshift{\csname pgftree@presiblingshift@\siblingdirection\endcsname} +\def\pgftree@postsiblingshift{\csname pgftree@postsiblingshift@\siblingdirection\endcsname} + +\def\pgftree@levelshift@down{\pgfpoint{0}{-\levelsep}} +\def\pgftree@parentanchor@down{south} +\def\pgftree@childanchor@down{north} + +\def\pgftree@levelshift@up{\pgfpoint{0}{\levelsep}} +\def\pgftree@parentanchor@up{north} +\def\pgftree@childanchor@up{south} + +\def\pgftree@levelshift@right{\pgfpoint{\levelsep}{0}} +\def\pgftree@parentanchor@right{east} +\def\pgftree@childanchor@right{west} + +\def\pgftree@levelshift@left{\pgfpoint{-\levelsep}{0}} +\def\pgftree@parentanchor@left{west} +\def\pgftree@childanchor@left{east} + +\def\pgftree@presiblingshift@right{\pgf@process{\pgf@x-\pgf@subpicminx \advance\pgf@x\subtreesep \pgf@y 0pt}} +\def\pgftree@postsiblingshift@right{\pgf@process{\pgf@x\pgf@subpicmaxx \pgf@y 0pt}} + +\def\pgftree@presiblingshift@left{\pgf@process{\pgf@x-\pgf@subpicmaxx \advance\pgf@x-\subtreesep \pgf@y 0pt}} +\def\pgftree@postsiblingshift@left{\pgf@process{\pgf@x\pgf@subpicminx \pgf@y 0pt}} + +\def\pgftree@presiblingshift@up{\pgf@process{\pgf@x 0pt \pgf@y-\pgf@subpicminy \advance\pgf@y\subtreesep}} +\def\pgftree@postsiblingshift@up{\pgf@process{\pgf@x 0pt \pgf@y\pgf@subpicmaxy}} + +\def\pgftree@presiblingshift@down{\pgf@process{\pgf@x 0pt \pgf@y-\pgf@subpicmaxy \advance\pgf@y-\subtreesep}} +\def\pgftree@postsiblingshift@down{\pgf@process{\pgf@x 0pt \pgf@y\pgf@subpicminy}} + +% for convenience if you are using \pgftree directly +\def\drawnode#1{\pgfnode{rectangle}{base}{#1}{\nodename}{\pgfusepath{discard}}} +\def\drawedge{% +\pgfpathmoveto{\pgfpointanchor{\parentnodename}{\pgftree@parentanchor}}% +\pgfpathlineto{\pgfpointanchor{\nodename}{\pgftree@childanchor}}% +\pgfusepath{stroke}} + +% local variables that we need to assign to inside a \pgfforeach +\newdimen\pgftree@childx +\newdimen\pgftree@savechildx +\newdimen\pgftree@childy +\newdimen\pgftree@savechildy +\newcount\pgftree@childi +\newcount\pgftree@savechildi +\newcount\pgftree@level +\newdimen\pgftree@depth + +%%% \pgftree{subtree} + +\def\pgftree#1{% +\def\nodename{r}% +\pgftree@level=0\relax +\pgftree@depth=0pt\relax +#1% +\pgfplacesubpicture +} + +%%% \pgfsubtree{root}{subtrees} +% The first argument draws the root node using PGF/TikZ commands. +% The node must be named \nodename. + +% The second argument is a sequence of 3n tokens. +% Token 3n-2 draws the nth edge. It should draw an edge from \parentnodename to \nodename. +% Token 3n-1 is a hook that can change \levelsep or \subtreesep for child n only. +% Token 3n draws the nth subtree. Its root must be named \nodename. + +\pgfnewsubpicture{children} +\newdimen\pgftree@lastchildx +\newdimen\pgftree@lastchildy + +\def\pgfsubtree#1#2{% +\let\parentnodename\nodename +\pgftree@savechildx=\pgftree@childx +\pgftree@savechildy=\pgftree@childy +\pgftree@savechildi=\pgftree@childi +% Build subpicture with all the children and their subtrees +{\pgftree@childx=0pt% +\pgftree@childy=0pt% +\pgftree@childi=0% +\process@children #2}% +\begin{pgfsubpicture}% +% Create node +#1% +\ifnum\pgftree@childi>0% +% Place children +{% center so that parent is midway between origins of first and last children +\pgftransformshift{\pgfpointscale{-0.5}{\pgfqpoint{\the\pgftree@childx}{\the\pgftree@childy}}}% +\pgfplacesubpicture}% +% Draw the edges +{\pgftree@childi=0% +\process@edges #2}% +\fi +\end{pgfsubpicture}% +\global\pgftree@childi=\pgftree@savechildi +\global\pgftree@childx=\pgftree@savechildx +\global\pgftree@childy=\pgftree@savechildy +} + +\def\process@children{% +\pgfutil@ifnextchar\egroup +{% No more children, step back to origin of last child +\global\pgftree@childx\pgftree@lastchildx +\global\pgftree@childy\pgftree@lastchildy +\global\pgftree@childi\pgftree@childi +\ifnum\pgftree@childi>0% +\pgfrestoresubpicture{children}% pass children back to caller +\fi +}% +{\@process@children}% +} +\def\@process@children#1#2#3{% +% #1 is the edge, #2 is the hook, #3 is the child +{% call hook to get \levelsep and \subtreesep +% and put them in \this@levelsep and \this@subtreesep +% to hide them from descendants +#2% +\global\smuggle@levelsep\levelsep +\global\smuggle@subtreesep\subtreesep}% +\this@levelsep\smuggle@levelsep +\this@subtreesep\smuggle@subtreesep +% Build the current child +{\edef\nodename{\parentnodename-\the\pgftree@childi}% +\advance\pgftree@level by 1\relax +\advance\pgftree@depth by \this@levelsep +#3}% +\begin{pgfsubpicture}% +% Place current child +{% +% The \levelsep and \subtreesep set in #2 apply only here +\levelsep\this@levelsep +\subtreesep\this@subtreesep +\ifnum\pgftree@childi>0% the first child is always at 0 +\pgftree@presiblingshift \global\advance\pgftree@childx\pgf@x \global\advance\pgftree@childy\pgf@y +\fi +\pgftransformshift{\pgftree@levelshift}% +\pgftransformshift{\pgfqpoint{\the\pgftree@childx}{\the\pgftree@childy}}% +\pgfplacesubpicture +\global\pgftree@lastchildx\pgftree@childx +\global\pgftree@lastchildy\pgftree@childy +\pgftree@postsiblingshift \global\advance\pgftree@childx\pgf@x \global\advance\pgftree@childy\pgf@y +}% +% Save the augmented row of children back into "children" +\end{pgfsubpicture} +\ifnum\pgftree@childi>0% +\pgfmergesubpicture{children} +\else +\pgfsavesubpicture{children}% +\fi +\advance\pgftree@childi by 1% +\process@children +} + +\def\process@edges{% +\pgfutil@ifnextchar\egroup +{}% +{\@process@edges}% +} +\def\@process@edges#1#2#3{% +\edef\nodename{\parentnodename-\the\pgftree@childi}% +#1% +\advance\pgftree@childi by 1% +\process@edges +} + +\def\subtreeof#1{% +% the subpicture which contains a node also contains exactly its subtree +\csname pgf@sh@pi@#1\endcsname +} diff --git a/tikz-qtree-compat.sty b/tikz-qtree-compat.sty new file mode 100644 index 0000000..f60ae32 --- /dev/null +++ b/tikz-qtree-compat.sty @@ -0,0 +1,72 @@ +% tikz-qtree-compat.tex +% Version 1.1, 25 Dec 2009 + +\RequirePackage{tikz-qtree} + +\let\orig@Tree\Tree +\def\Tree{\automath \qtreeprimes@internal \orig@Tree} + +\def\qsetw#1{\message{\noexpand\qsetw is not supported, sorry!}} +\def\faketreewidth#1{\message{\noexpand\faketreewidth is not supported, sorry!}} +\def\qbalance{\message{\noexpand\qbalance is not supported, sorry!}} +\def\qframesubtree{\message{\noexpand\qframesubtree is not supported, sorry!}} + +% Implement \qroof as a fancy leaf node +\newtoks\@qrooflabel + +\def\qroof#1.{% +\begin{tikzpicture}[baseline] +{\pgftransformshift{\pgftree@levelshift}% +\node(qroofbot){#1};} +\@qroof +} +\def\@qroof{\@ifnextchar\egroup{% +% since we are putting the qroof inside a node, we already have an inner sep +% so for the purposes of defining our bounding box, we must eliminate inner sep +\begin{pgfsubpicture} +\node [inner sep=0pt] {\the\@qrooflabel};% +\end{pgfsubpicture} +\pgfpathrectanglecorners{\pgfpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}{\pgfpoint{\the\pgf@subpicmaxx}{\the\pgf@subpicmaxy}}% +\pgfusepath{use as bounding box}% +\node (qrooftop) {\the\@qrooflabel}; +\draw \roof@edge{qrooftop}{qroofbot};% +\end{tikzpicture}} +{\@@qroof}} +\def\@@qroof#1{\expandafter\@qrooflabel\expandafter{\the\@qrooflabel #1}\@qroof} + +%%% This is lifted straight from qtree.sty + +% 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{''}}} + diff --git a/tikz-qtree-manual.pdf b/tikz-qtree-manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..37348bbb5b0842ad10a98a372ab0a6b8afa68ea9 GIT binary patch literal 106370 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 D+L(L@ literal 0 HcmV?d00001 diff --git a/tikz-qtree-manual.tex b/tikz-qtree-manual.tex new file mode 100644 index 0000000..26bc978 --- /dev/null +++ b/tikz-qtree-manual.tex @@ -0,0 +1,402 @@ +\documentclass{article} + +\usepackage{mathspec,xltxtra} + +\setmainfont[Mapping=tex-text]{DejaVu Serif} +\setmonofont[Scale=0.95]{DejaVu Sans Mono} +\newfontfamily\verbfont[Scale=0.8]{DejaVu Sans Mono} +\newfontfamily\ar[Script=Arabic]{DejaVu Sans} +\newfontfamily\ja{Hiragino Maru Gothic Pro} +\newfontfamily\javerbfont[Scale=0.85,LetterSpace=5.0]{Hiragino Maru Gothic Pro} +\setmathrm{DejaVu Serif} \setmathfont(Digits,Latin){DejaVu Serif} + +\usepackage{tikz} +\usepackage{tikz-qtree} + +\usepackage{fullpage} + +\usepackage{fancyvrb,fvrb-ex} +\fvset{gobble=0,xleftmargin=0.5in,xrightmargin=2.75in,formatcom=\verbfont} +\VerbatimFootnotes + +\newcommand\tikztree{\texttt{tikz-qtree}} + +\tikzset{>=latex} + +\title{\tikztree: better trees with TikZ} +\author{David Chiang\\\texttt{chiang@isi.edu}} +\date{Version 1.2 (22 Apr 2012)} + +\begin{document} + +\maketitle + +The \tikztree{} package provides a macro for drawing trees with +TikZ\footnote{\texttt{http://sourceforge.net/projects/pgf/}} using the +easy syntax of Alexis Dimitriadis' +Qtree\footnote{\texttt{http://www.ling.upenn.edu/advice/latex/qtree/}}. It +improves on TikZ's standard tree-drawing facility by laying out tree +nodes without collisions; it improves on Qtree by adding lots of +features from TikZ; and it improves on \verb|pst-qtree| in being +usable with pdf\TeX{} and +\XeTeX{}.\footnote{Although \XeTeX{} works with \verb|pst-qtree| using the \verb|xetex-pstricks| package. For typesetting very large trees or a large number of trees, this may be the better option.} + +\section{Basics} + +To load the package in \LaTeX{}: +\begin{Verbatim} +\usepackage{tikz} +\usepackage{tikz-qtree} +\end{Verbatim} +% +The simplest usage is identical to Qtree: +\begin{center} +\begin{SideBySideExample} +\Tree [.S [.NP [.Det the ] [.N cat ] ] + [.VP [.V sat ] + [.PP [.P on ] + [.NP [.Det the ] [.N mat ] ] ] ] ] +\end{SideBySideExample} +\end{center} +Subtrees are delimited by square brackets. A subtree's root label is +joined by a dot (\verb|.|) to its opening bracket.\footnote{You can +also write the label after the closing bracket instead of the opening +bracket, or both, or neither. Please see the Qtree documentation for +details.} As in Qtree, spaces are required after every (internal or +leaf) node label. + +\verb|\Tree| works inside or outside a +\verb|tikzpicture| environment, but many of the features described +below require the explicit \verb|tikzpicture| environment. + +\goodbreak + +\section{Tree options} + +Some options for standard TikZ trees work for \verb|\Tree| as +well: +\begin{itemize} +\item \verb|level distance|: vertical distance between the anchors of a parent and its children +\item \verb|sibling distance|: horizontal distance between the boundaries of sister subtrees (not the anchors of their roots, as in standard TikZ trees). Note that TikZ nodes already have some horizontal space around them (\verb|inner xsep|, by default \verb|0.3333em|), so even \verb|sibling distance=0pt| leaves some room. +\end{itemize} +These are set either by writing +\verb|\tikzset{|\textit{option}\verb|=|\textit{value}\verb|}| or by +writing \verb|[|\textit{option}\verb|=|\textit{value}\verb|]| after a +\verb|\begin{tikzpicture}| or \verb|\begin{scope}|.\footnote{Allowing +options after \verb|\Tree| would have made sense, but there would be +no way to disambiguate the two uses of square brackets.} For example: + +\begin{center} +\begin{SideBySideExample} +\begin{tikzpicture} +\tikzset{level distance=60pt} +\Tree [.NP [.Adj tall ] [.N tree ] ] +\end{tikzpicture} +% +\begin{tikzpicture}[sibling distance=72pt] +\Tree [.NP [.Adj fat ] [.N tree ] ] +\end{tikzpicture} +\end{SideBySideExample} +\end{center} + +The \verb|grow=|\textit{direction}\/ and \verb|grow'=|\textit{direction}\/ options control the orientation of trees just as for standard TikZ trees. However, \textit{direction}\/ must be one of \verb|up|, \verb|down|, \verb|left|, or \verb|right|. The difference between \verb|grow| and \verb|grow'| is that \verb|grow| places children counterclockwise with respect to their parent and \verb|grow'| places them clockwise: +\begin{center} +\begin{SideBySideExample} +\begin{tikzpicture}[grow'=down] +\Tree [.NP [.Adj reverse ] [.N tree ] ] +\end{tikzpicture} +% +\begin{tikzpicture}[grow'=up] +\Tree [.NP [.Adj upside-down ] [.N tree ] ] +\end{tikzpicture} +\end{SideBySideExample} +\vspace{3ex} +\begin{SideBySideExample} +\begin{tikzpicture}[grow=left] +\tikzset{level distance=60pt,sibling distance=18pt} +\tikzset{execute at begin node=\strut} +\Tree [.NP [.Adj sideways ] [.N tree ] ] +\end{tikzpicture} +\end{SideBySideExample} +\end{center} +Note that in sideways trees, \verb|level distance| is horizontal and \verb|sibling distance| is vertical. Sideways trees do take a little extra adjusting to look right, since the defaults are geared towards vertically growing trees. The meaning of the option \verb|execute at begin node=\strut| is, before typesetting the label of every node, insert the command \verb|\strut|, which is an invisible box that maximizes the height and depth of the node. + +\section{Styles} + +\subsection{Node styles} + +The following TikZ styles are automatically applied to tree nodes, +providing a hook for you to change the appearance of nodes or particular kinds of nodes: +\begin{itemize} +\item \verb|every tree node| applies to every node (default: \verb|anchor=base|) +\item \verb|every internal node| applies to every internal node +\item \verb|every leaf node| applies to every leaf node +\item \texttt{every level $n$ node} applies to every node at level $n$, where $n=0$ is the root +\end{itemize} + +The options for nodes are all handled by TikZ and are +described in detail in the TikZ documentation. For example, if you +have a font named \verb|\ar| and want to set all the leaf labels in +this font: +\begin{center} +\begin{SideBySideExample} +\begin{tikzpicture} +\tikzset{grow'=down} +\tikzset{every leaf node/.style={font=\ar}} +\Tree [.S [.NP القط ] + [.VP [.V وجلس ] + [.PP [.P على ] [.NP حصيرة ] ] ] ] +\end{tikzpicture} +\end{SideBySideExample} +\end{center} + +You can make the nodes in a sideways tree line up on their left edge using \verb|anchor=base west|: +\begin{center} +\begin{SideBySideExample} +\begin{tikzpicture} +\tikzset{grow'=right,level distance=32pt} +\tikzset{execute at begin node=\strut} +\tikzset{every tree node/.style={anchor=base west}} +\Tree [.S [.NP [.Det the ] [.N cat ] ] + [.VP [.V sat ] + [.PP [.P on ] + [.NP [.Det the ] [.N mat ] ] ] ] ] +\end{tikzpicture} +\end{SideBySideExample} +\end{center} + +In Qtree, it was allowed to use a line break (\verb|\\|) inside a node. TikZ nodes by default don't allow this, but the \verb|align| option (in PGF/TikZ version 2.1 or later) enables it as a side effect:\footnote{Thanks to Alan Munn for figuring this out. Prior to PGF/TikZ version 2.1, the fix was to use the options \verb|text width=2em,text centered|.} +\begin{center} +\begin{SideBySideExample} +\begin{tikzpicture} +\tikzset{every tree node/.style={align=center,anchor=north}} +\Tree [.S [.NP Det\\the N\\cat ] + [.VP V\\sat + [.PP P\\on + [.NP Det\\the N\\mat ] ] ] ] +\end{tikzpicture} +\end{SideBySideExample} +\end{center} + +\subsection{Edge styles} + +The \verb|edge from parent| style applies to every edge (default value: \verb|draw|). By defining this style, you can change the appearance of all the edges in a tree. For example, if you want the edges to be a little darker: +\begin{center} +\begin{SideBySideExample} +\begin{tikzpicture} +\tikzset{edge from parent/.append style={very thick}} +\Tree [.S [.NP [.Det the ] [.N cat ] ] + [.VP [.V sat ] + [.PP [.P on ] + [.NP [.Det the ] [.N mat ] ] ] ] ] +\end{tikzpicture} +\end{SideBySideExample} +\end{center} +Note that we must say \verb|.append style| instead of just \verb|.style|, in order to retain the \verb|draw| option without which the edge will be invisible. +As a more complex example, edges have an +\verb|edge from parent path| option which lets you change the shape of +the edge. Its value is a TikZ path expressed in terms of +\verb|\tikzparentnode|, the parent node, and \verb|\tikzchildnode|, +the child node. +\begin{center} +\begin{SideBySideExample} +\begin{tikzpicture} +\tikzset{edge from parent/.style= + {draw, + edge from parent path={(\tikzparentnode.south) + -- +(0,-8pt) + -| (\tikzchildnode)}}} +\Tree [.S [.NP [.Det the ] [.N cat ] ] + [.VP [.V sat ] + [.PP [.P on ] + [.NP [.Det the ] [.N mat ] ] ] ] ] +\end{tikzpicture} +\end{SideBySideExample} +\end{center} + +\subsection{Node placement styles} + +The following styles aren't applied to nodes, but affect the placement of nodes. By defining these styles, you can change the options \verb|level distance| or \verb|sibling distance| for different parts of the tree.\footnote{Thanks to Andrew Stacey for helping with the implementation.} +\begin{itemize} +\item \texttt{level $n$} applies to the placement of level $n$ (relative to level $n-1$) +\item \texttt{level $n$+} applies to level $n$ and below +\item \verb|interior| applies to the placement of internal nodes (except the root) +\item \verb|frontier| applies to the placement of leaves +\end{itemize} + +\begin{center} +\begin{SideBySideExample} +\begin{tikzpicture} +\tikzset{level 1/.style={level distance=36pt}} +\tikzset{level 2/.style={level distance=32pt}} +\tikzset{level 3+/.style={level distance=28pt}} +\Tree [.S [.NP [.Det the ] [.N cat ] ] + [.VP [.V sat ] + [.PP [.P on ] + [.NP [.Det the ] [.N mat ] ] ] ] ] +\end{tikzpicture} +\end{SideBySideExample} +\end{center} + +In this context, you can also set the option \verb|distance from root|, which positions a level relative to the root instead of the parent level. This is particularly useful for aligning all the leaf nodes: +\begin{center} +\begin{SideBySideExample} +\begin{tikzpicture} +\tikzset{frontier/.style={distance from root=150pt}} +\Tree [.S [.NP [.Det the ] [.N cat ] ] + [.VP [.V sat ] + [.PP [.P on ] + [.NP [.Det the ] [.N mat ] ] ] ] ] +\end{tikzpicture} +\end{SideBySideExample} +\end{center} +Unfortunately, the depth of the deepest leaf node is a global property of the tree and not easy to know during tree rendering, so you do have to specify the absolute depth of the leaf nodes. It will typically be an integer multiple of \verb|level distance|. + +\section{Embedding TikZ nodes} + +Inside a \verb|\Tree|, in place of a node label, you can use a TikZ +\verb|\node| command.\footnote{\verb|\Tree| specifically watches out +for the token \verb|\node|; do not use \verb|\path node| or other +equivalents.} +\begin{quote} +\verb|\node [|\textit{options}\verb|] (|\textit{name}\verb|) {|\textit{label}\verb|};| +\end{quote} +Don't forget the terminating semicolon. The +\verb|[|\textit{options}\verb|]|, which are optional, let you change +the appearance of the node; for example, the \verb|draw| option draws +a border around the node. The \verb|(|\textit{name}\verb|)|, which is +also optional, can be used for drawing lines/arrows to/from the node. +\begin{center} +\begin{Example} +\begin{tikzpicture} +\Tree [.CP [.NP \node(wh){what}; ] + [.C$'$ [.I did ] + [.\node[draw]{IP}; + [.NP [.Det the ] [.N cat ] ] + [.VP [.V sit ] + [.PP [.P on ] + [.\node[draw]{NP}; + [.NP [.Det a ] [.N book ] ] + [.PP [.P about ] [.NP \node(t){$t$}; ] ] ] ] ] ] ] ] +\draw[semithick,->] (t)..controls +(south west:5) and +(south:5)..(wh); +\end{tikzpicture} +\end{Example} +\end{center} + +You can also refer to the whole subtree rooted at the node named \textit{name}\/ using \verb|\subtreeof{|\textit{name}\verb|}|: +\begin{center} +\begin{SideBySideExample} +\begin{tikzpicture} +\Tree [.S [.NP [.Det the ] [.N cat ] ] + [.\node(site){VP}; [.V sat ] ] ] +\begin{scope}[shift={(1in,0.5in)}] +\Tree [.\node(root){VP}; VP$^\ast$ + [.PP [.P on ] + [.NP [.Det the ] [.N mat ] ] ] ] +\end{scope} +\draw[->](\subtreeof{root}.140).. + controls +(west:1) and +(east:1)..(site); +\end{tikzpicture} +\end{SideBySideExample} +\end{center} + +\noindent Another example for machine translation people: +\begin{center} +\fvset{formatcom=\javerbfont} +\begin{SideBySideExample} +\begin{tikzpicture} +\begin{scope}[frontier/.style={distance from root=150pt}] +\Tree [.S [.NP [.Det \node(e1){the}; ] + [.N \node(e2){cat}; ] ] + [.VP [.V \node(e3){sat}; ] + [.PP [.P \node(e4){on}; ] + [.NP [.Det \node(e5){the}; ] + [.N \node(e6){mat}; ] ] ] ] ] +\end{scope} +\begin{scope}[xshift=9pt,yshift=-5in,grow'=up, + frontier/.style={distance from root=150pt}] +\tikzset{every leaf node/.style={font=\ja}} +\Tree [.S [.NP \node(j1){猫が}; ] + [.VP [.PP [.NP [.NP \node(j2){マット}; ] + [.Part \node(j3){の}; ] + [.NP \node(j4){上}; ] ] + [.P \node(j5){に}; ] ] + [.V \node(j6){土}; ] ] ] +\end{scope} +\begin{scope}[dashed] +\draw (e1)--(j1); +\draw (e2)--(j1); +\draw (e3)--(j6); +\draw (e4)--(j4); +\draw (e4)--(j5); +\draw (e5)--(j2); +\draw (e6)--(j2); +\end{scope} +\end{tikzpicture} +\end{SideBySideExample} +\end{center} + +\section{Explicit edges} + +The edge from a parent to a child node is normally automatically drawn +for you, but you can do it yourself with an \verb|\edge| command +\emph{before}\/ the corresponding child node. It is similar to the +TikZ \verb|edge from parent| command.\footnote{Except that a TikZ +\texttt{edge from parent} comes after the child node. I thought it was +more logical to put it before.} +\begin{quote} +\verb|\edge [|\textit{options}\verb|];| +\end{quote} +Again, don't forget the semicolon. The +\verb|[|\textit{options}\verb|]|, which are optional, let you change +the appearance of the edge, as described above. + +There is a predefined edge style \verb|roof| that draws a triangle-shaped edge over a node, like Qtree's \verb|\qroof|: +\begin{center} +\begin{Example} +\begin{tikzpicture}[level distance=40pt] +\Tree [.S [.NP [.N this ] ] + [.VP [.V is ] + [.NP \edge[roof]; {a noun phrase the complexity of which + is too great for me to parse} ] ] ] +\end{tikzpicture} +\end{Example} +\end{center} + +You can also add a label to the edge, using the following syntax: +\begin{quote} +\verb|\edge [|\textit{options}\verb|] node [|\textit{options}\verb|] {|\textit{label}\verb|};| +\end{quote} +Typically one will use the \verb|auto| option for edge labels, which +places the label to the side of the edge. +\begin{center} +\begin{SideBySideExample}[xrightmargin=1.25in] +\newcommand{\initial}[1]{\ensuremath{\alpha_{\textrm{\scriptsize #1}}}} +\newcommand{\auxiliary}[1]{\ensuremath{\beta_{\textrm{\scriptsize #1}}}} +\begin{tikzpicture}[level distance=36pt,sibling distance=12pt] +\Tree [.\initial{sat} + \edge node[auto=right]{1}; \initial{cat} + \edge[dashed] node[auto=left]{2}; + [.\auxiliary{on} + \edge node[auto=left]{2}; \initial{mat} ] ] +\end{tikzpicture} +\end{SideBySideExample} +\end{center} +The fact that \verb|auto=left| draws a label on the right and +\verb|auto=right| draws a label on the left makes sense if you think +about the tree growing from the root to the leaves. + +\section{Qtree compatibility} + +For basic trees, \tikztree{} can be used as a drop-in replacement for Qtree, but most of Qtree's advanced features are either not accessed in the same way in \tikztree{} or not implemented at all. There is a package \verb|tikz-qtree-compat| which can be loaded to improve compatibility. Supported so far are: +\begin{itemize} +\item Superscripts and subscripts outside of math mode, and \verb|\automath| +\item The \verb|\0|, \verb|\1|, and \verb|\2| commands, and \verb|\qtreeprimes| +\item The \verb|\qroof| command +\end{itemize} +For unsupported commands, warning messages are printed, but your file should compile. + +\section*{Acknowledgements} +This was all Dan Gildea's idea. Thanks to Alan Munn for his very helpful suggestions, and to Andrew Stacey for modifications. + +\end{document} diff --git a/tikz-qtree.sty b/tikz-qtree.sty new file mode 100644 index 0000000..8f572cd --- /dev/null +++ b/tikz-qtree.sty @@ -0,0 +1,4 @@ +\RequirePackage{tikz} +\RequirePackage{pgftree} +\input{tikz-qtree.tex} +\endinput diff --git a/tikz-qtree.tex b/tikz-qtree.tex new file mode 100644 index 0000000..c28db5b --- /dev/null +++ b/tikz-qtree.tex @@ -0,0 +1,204 @@ +% tikz-qtree.tex +% Version 1.2, 20 Apr 2012 + +% Copyright (C) 2002, 2009 by David Chiang + +% 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 2 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. + +% You should have received a copy of the GNU General Public License along +% with this program; if not, write to the Free Software Foundation, Inc., +% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +% New in version 1.2: +% - level-specific styles (thanks to Andrew Stacey) + +% New in version 1.11: +% - make options compatible with standard tikz trees + +% New in version 1.1: +% - sideways trees + +%% These macros facilitate building up an object recursively before +%% putting it into the input stream. + +\newtoks\@result +\def\@call#1#2{\let\@cont=#2\bgroup\@result={}#1} +\def\@return{\global\@result=\@result\egroup\@cont} + +\def\@ifequal#1#2{\edef\testa{#1}\edef\testb{#2}\ifx\testa\testb} + +%% scan a tree: this just scans a subtree and then puts it onto the +%% input stream + +\def\Tree{\@call\@subtree\@Tree} +\def\@Tree{% +%\showthe\@result %debug +\ifpgfpicture % is there a test for tikzpicture? +\pgftree{\the\@result}% +\else +\tikzpicture[baseline]\pgftree{\the\@result}\endtikzpicture +\fi +} + +%% scan a subtree +\newtoks\child@list +\newtoks\root@node + +\def\@subtree[{% +\root@node={}% +\pgfutil@ifnextchar.{\@call\@interior\@@subtree}{\@@@subtree}} +\def\@@subtree{% +\root@node=\@result +\@@@subtree +} +\def\@@@subtree{% +\@call\@children\@@@@subtree +} +\def\@@@@subtree]{% +\child@list=\@result +\pgfutil@ifnextchar.{\@call\@interior\@@@@@subtree}{\@@@@@@subtree}} +\def\@@@@@subtree{% +%%% Check for mismatch. +\@ifequal{\the\root@node}{\pgfutil@empty}% + \root@node=\@result +\fi +\@ifequal{\the\root@node}{\the\@result}\else + \message{Warning: mismatched labels, \the\root@node{} and \the\@result.}% +\fi +\@@@@@@subtree +} +\def\@@@@@@subtree{% +\@ifequal{\the\root@node}{\pgfutil@empty}% +\edef\act{\noexpand\@result={% +\noexpand\subtree@hook +\noexpand\pgfsubtree{\noexpand\path coordinate (\noexpand\nodename);}{\the\child@list}}}% +\else +\edef\act{\noexpand\@result={% +\noexpand\subtree@hook +\noexpand\pgfsubtree{\the\root@node}{\the\child@list}}}% +\fi +\act +\@return} + +%% scan a sequence of subtrees or leaves + +\newif\ifscanned@edge + +\def\@children{% +\scanned@edgefalse +\child@list{}% +\@@children} +\def\@@children{% +\pgfutil@ifnextchar]{\@result\child@list\@return}{% end of children +\pgfutil@ifnextchar\edge{% explicit edge +\ifscanned@edge +\message{Warning: more than one edge given for a single child}\let\next\@@children % ignore +\else +\scanned@edgetrue\let\next\@@@children +\fi +\@call\@edge\next}{% +% else, a real node is next +\ifscanned@edge\else % no explicit edge, supply default +\expandafter\child@list\expandafter{\the\child@list{\edge@adapter{}}}% +\fi +\scanned@edgefalse +\pgfutil@ifnextchar[{% subtree +\expandafter\child@list\expandafter{\the\child@list{\level@hook\interior@hook}}% +\@call\@subtree\@@@children}% +{% leaf +\expandafter\child@list\expandafter{\the\child@list{\level@hook\frontier@hook}}% +\@call\@leaf\@@@children}% +}}} +\def\@@@children{% +% wrap child inside curly braces +\expandafter\@result\expandafter{\expandafter{\the\@result}}% +\edef\act{\noexpand\child@list{\the\child@list \the\@result}}\act +\@@children +} + +\def\@interior.{\@result{\node[alias=\nodename][every tree node,every internal node,every level \the\pgftree@level\space node/.try]}\@label} + +\def\@leaf{\@call\@label\@@leaf} +\def\@@leaf{\edef\act{\noexpand\@result{% +\noexpand\subtree@hook +\noexpand\pgfsubtree{\noexpand\node[alias=\noexpand\nodename][every tree node,every leaf node,every level \noexpand\the\pgftree@level\space node/.try]\the\@result}{}}}\act\@return} + +\def\@edge\edge #1;{% +\@result{\edge@adapter{#1}}% +\@return} +\def\edge@adapter#1{% +\let\tikzparentnode\parentnodename +\let\tikzchildnode\nodename +\path edge from parent #1;% +} + +\def\level@hook{% +{\advance\pgftree@level by 1\relax +\xdef\@act{\noexpand\tikzset{level \the\pgftree@level/.try}}}\@act} +\def\subtree@hook{% +%\edef\act{\noexpand\tikzset{every tree node/.append code={\noexpand\tikzset{every level \the\pgftree@level+ node/.try}}}}\act +{\advance\pgftree@level by 1\relax +\xdef\@act{\noexpand\tikzset{level \the\pgftree@level+/.try}}}\@act +} +\def\interior@hook{\tikzset{interior/.try}} +\def\frontier@hook{\tikzset{frontier/.try}} + +% a label is either text or PGF/TikZ code starting with \node +\def\@label{\pgfutil@ifnextchar\node{\@litlabel}{\@@label}} +\def\@@label#1 {% +\expandafter\@result\expandafter{\the\@result{#1};}% +\@return} + +% try to copy \node command into \@result without stripping braces +\def\@litlabel\node{\@@litlabel} +\def\@@litlabel{\pgfutil@ifnextchar\bgroup{\@@@litlabel}{\@@@@litlabel}} +\def\@@@litlabel#1{\expandafter\@result\expandafter{\the\@result {#1}}\@@litlabel} +\def\@@@@litlabel#1;{\expandafter\@result\expandafter{\the\@result #1;}\@return} + +% predefined edges + +\def\tree@edge#1#2{(#1.\pgftree@parentanchor) -- (#2.\pgftree@childanchor)} + +\def\roof@edge#1#2{\csname roof@edge@\leveldirection\endcsname{#1}{#2}} +\def\roof@edge@down#1#2{(#1.south) -- (#2.north west) -- (#2.north east) -- cycle} +\def\roof@edge@up#1#2{(#1.north) -- (#2.south west) -- (#2.south east) -- cycle} +\def\roof@edge@left#1#2{(#1.west) -- (#2.north east) -- (#2.south east) -- cycle} +\def\roof@edge@right#1#2{(#1.east) -- (#2.north west) -- (#2.south west) -- cycle} + +%%% Options +\pgfkeysgetvalue{/tikz/level distance/.@cmd}{\orig@leveldistance} +\tikzoption{level distance}{\pgfmathsetlength\levelsep{#1}\orig@leveldistance#1\pgfeov} +\tikzoption{distance from root}{\pgfmathsetlength\levelsep{#1}\advance\levelsep by -\pgftree@depth} +\pgfkeysgetvalue{/tikz/sibling distance/.@cmd}{\orig@siblingdistance} +\tikzoption{sibling distance}{\pgfmathsetlength\subtreesep{#1}\orig@siblingdistance#1\pgfeov} % different semantics + +% I don't really like this scheme +\pgfkeysgetvalue{/tikz/grow/.@cmd}{\orig@grow} +\tikzoption{grow}{\csname grow@#1\endcsname\orig@grow#1\pgfeov} +\pgfkeysgetvalue{/tikz/grow'/.@cmd}{\orig@growprime} +\tikzoption{grow'}{\csname growprime@#1\endcsname\orig@growprime#1\pgfeov} +\def\grow@up{\def\leveldirection{up}\def\siblingdirection{left}} +\def\grow@down{\def\leveldirection{down}\def\siblingdirection{right}} +\def\growprime@up{\def\leveldirection{up}\def\siblingdirection{right}} +\def\growprime@down{\def\leveldirection{down}\def\siblingdirection{left}} +\def\grow@left{\def\leveldirection{left}\def\siblingdirection{down}} +\def\grow@right{\def\leveldirection{right}\def\siblingdirection{up}} +\def\growprime@left{\def\leveldirection{left}\def\siblingdirection{up}} +\def\growprime@right{\def\leveldirection{right}\def\siblingdirection{down}} + +% defaults appropriate for linguistic trees +\def\tikz@edge@to@parent@path{\tree@edge{\tikzparentnode}{\tikzchildnode}} +\tikzset{every tree node/.style={anchor=base}} +\tikzset{every leaf node/.style={}} +\tikzset{every internal node/.style={}} + +% predefined roof style +\tikzset{roof/.style={edge from parent path=\roof@edge{\tikzparentnode}{\tikzchildnode}}}