summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/forest
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-07-17 22:40:12 +0000
committerKarl Berry <karl@freefriends.org>2015-07-17 22:40:12 +0000
commit814c22af4dad35e3c03216c3e2c1c27b60e59c9e (patch)
tree6b3a4b00c97adc79a16a063c2b1b8b68211ddbeb /Master/texmf-dist/source/latex/forest
parentec26e0d4b947f92b60e9f50e76b07c2a6e7c0734 (diff)
forest (17jul15)
git-svn-id: svn://tug.org/texlive/trunk@37872 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/forest')
-rw-r--r--Master/texmf-dist/source/latex/forest/forest.dtx278
1 files changed, 147 insertions, 131 deletions
diff --git a/Master/texmf-dist/source/latex/forest/forest.dtx b/Master/texmf-dist/source/latex/forest/forest.dtx
index a914af0812d..bb2694e1974 100644
--- a/Master/texmf-dist/source/latex/forest/forest.dtx
+++ b/Master/texmf-dist/source/latex/forest/forest.dtx
@@ -1,4 +1,4 @@
-% \CheckSum{12854}
+% \CheckSum{12878}
% \iffalse meta-comment
% forest.dtx
%% `forest' is a `pgf/tikz'-based package for drawing (linguistic) trees.
@@ -3967,6 +3967,10 @@
% \section{Changelog}
%
% \begin{description}
+% \item[v1.09 (2015/07/15)] \mbox{}
+% \begin{compactitem}
+% \item Bugfix: child alignment was not done in nodes with a single child, see \href{http://tex.stackexchange.com/questions/255309/elementary-forest-question-meaning-of-calign-parent-anchor-and-child-anchor}{this question on TeX.SE}.
+% \end{compactitem}
% \item[v1.08 (2015/07/10)] \mbox{}
% \begin{compactitem}
% \item Fix externalization (compatibility with new |tikz| features).
@@ -4033,7 +4037,7 @@
%
% Identification.
% \begin{macrocode}
-\ProvidesPackage{forest}[2015/07/10 v1.08 Drawing (linguistic) trees]
+\ProvidesPackage{forest}[2015/07/15 v1.09 Drawing (linguistic) trees]
\RequirePackage{tikz}[2010/10/13]
\usetikzlibrary{shapes}
@@ -7038,6 +7042,14 @@
\else
\pack@sibling@uniform@main{last}{first}{previous}{next}%
\fi
+ \else
+ \ifnum\forestove{n children}=1
+% \end{macrocode}
+% No need to run packing, but we still need to align the children.
+% \begin{macrocode}
+\typeout{DEBUG calign: \forestove{content} --- \forestove{calign}}%
+ \csname forest@calign@\forestove{calign}\endcsname
+ \fi
\fi
}
% \end{macrocode}
@@ -7248,143 +7260,147 @@
% node edges.
% \begin{macrocode}
\csdef{forest@calign@fixed angles}{%
- \edef\forest@ca@first@child{\forest@node@nornbarthchildid{\forestove{calign primary child}}}%
- \edef\forest@ca@second@child{\forest@node@nornbarthchildid{\forestove{calign secondary child}}}%
- \ifnum\forestove{reversed}=1
- \let\forest@temp\forest@ca@first@child
- \let\forest@ca@first@child\forest@ca@second@child
- \let\forest@ca@second@child\forest@temp
- \fi
- \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
- \forestOget{\forest@ca@second@child}{l}\forest@ca@second@l
- \pgfmathsetlengthmacro\forest@ca@desired@s@distance{%
- tan(\forestove{calign secondary angle})*\forest@ca@second@l
- -tan(\forestove{calign primary angle})*\forest@ca@first@l
- }%
- \forestOget{\forest@ca@first@child}{s}\forest@ca@first@s
- \forestOget{\forest@ca@second@child}{s}\forest@ca@second@s
- \pgfmathsetlengthmacro\forest@ca@actual@s@distance{%
- \forest@ca@second@s-\forest@ca@first@s}%
- \ifdim\forest@ca@desired@s@distance>\forest@ca@actual@s@distance\relax
- \ifdim\forest@ca@actual@s@distance=0pt
- \pgfmathsetlength\pgfutil@tempdima{tan(\forestove{calign primary angle})*\forest@ca@second@l}%
- \pgfmathsetlength\pgfutil@tempdimb{\forest@ca@desired@s@distance/(\forestove{n children}-1)}%
- \forest@node@foreachchild{%
- \forestoeset{s}{\the\pgfutil@tempdima}%
- \advance\pgfutil@tempdima\pgfutil@tempdimb
- }%
- \def\forest@calign@anchor{0pt}%
- \else
- \pgfmathsetmacro\forest@ca@ratio{%
- \forest@ca@desired@s@distance/\forest@ca@actual@s@distance}%
- \forest@node@foreachchild{%
- \pgfmathsetlengthmacro\forest@temp{\forest@ca@ratio*\forestove{s}}%
- \forestolet{s}\forest@temp
- }%
- \pgfmathsetlengthmacro\forest@calign@anchor{%
- -tan(\forestove{calign primary angle})*\forest@ca@first@l}%
+ \ifnum\forestove{n children}>1
+ \edef\forest@ca@first@child{\forest@node@nornbarthchildid{\forestove{calign primary child}}}%
+ \edef\forest@ca@second@child{\forest@node@nornbarthchildid{\forestove{calign secondary child}}}%
+ \ifnum\forestove{reversed}=1
+ \let\forest@temp\forest@ca@first@child
+ \let\forest@ca@first@child\forest@ca@second@child
+ \let\forest@ca@second@child\forest@temp
\fi
- \else
- \ifdim\forest@ca@desired@s@distance<\forest@ca@actual@s@distance\relax
- \pgfmathsetlengthmacro\forest@ca@ratio{%
- \forest@ca@actual@s@distance/\forest@ca@desired@s@distance}%
- \forest@node@foreachchild{%
- \pgfmathsetlengthmacro\forest@temp{\forest@ca@ratio*\forestove{l}}%
- \forestolet{l}\forest@temp
- }%
- \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
- \pgfmathsetlengthmacro\forest@calign@anchor{%
- -tan(\forestove{calign primary angle})*\forest@ca@first@l}%
+ \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
+ \forestOget{\forest@ca@second@child}{l}\forest@ca@second@l
+ \pgfmathsetlengthmacro\forest@ca@desired@s@distance{%
+ tan(\forestove{calign secondary angle})*\forest@ca@second@l
+ -tan(\forestove{calign primary angle})*\forest@ca@first@l
+ }%
+ \forestOget{\forest@ca@first@child}{s}\forest@ca@first@s
+ \forestOget{\forest@ca@second@child}{s}\forest@ca@second@s
+ \pgfmathsetlengthmacro\forest@ca@actual@s@distance{%
+ \forest@ca@second@s-\forest@ca@first@s}%
+ \ifdim\forest@ca@desired@s@distance>\forest@ca@actual@s@distance\relax
+ \ifdim\forest@ca@actual@s@distance=0pt
+ \pgfmathsetlength\pgfutil@tempdima{tan(\forestove{calign primary angle})*\forest@ca@second@l}%
+ \pgfmathsetlength\pgfutil@tempdimb{\forest@ca@desired@s@distance/(\forestove{n children}-1)}%
+ \forest@node@foreachchild{%
+ \forestoeset{s}{\the\pgfutil@tempdima}%
+ \advance\pgfutil@tempdima\pgfutil@tempdimb
+ }%
+ \def\forest@calign@anchor{0pt}%
+ \else
+ \pgfmathsetmacro\forest@ca@ratio{%
+ \forest@ca@desired@s@distance/\forest@ca@actual@s@distance}%
+ \forest@node@foreachchild{%
+ \pgfmathsetlengthmacro\forest@temp{\forest@ca@ratio*\forestove{s}}%
+ \forestolet{s}\forest@temp
+ }%
+ \pgfmathsetlengthmacro\forest@calign@anchor{%
+ -tan(\forestove{calign primary angle})*\forest@ca@first@l}%
+ \fi
+ \else
+ \ifdim\forest@ca@desired@s@distance<\forest@ca@actual@s@distance\relax
+ \pgfmathsetlengthmacro\forest@ca@ratio{%
+ \forest@ca@actual@s@distance/\forest@ca@desired@s@distance}%
+ \forest@node@foreachchild{%
+ \pgfmathsetlengthmacro\forest@temp{\forest@ca@ratio*\forestove{l}}%
+ \forestolet{l}\forest@temp
+ }%
+ \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
+ \pgfmathsetlengthmacro\forest@calign@anchor{%
+ -tan(\forestove{calign primary angle})*\forest@ca@first@l}%
+ \fi
\fi
+ \forest@calign@s@shift{-\forest@calign@anchor}%
\fi
- \forest@calign@s@shift{-\forest@calign@anchor}%
}
\csdef{forest@calign@fixed edge angles}{%
- \edef\forest@ca@first@child{\forest@node@nornbarthchildid{\forestove{calign primary child}}}%
- \edef\forest@ca@second@child{\forest@node@nornbarthchildid{\forestove{calign secondary child}}}%
- \ifnum\forestove{reversed}=1
- \let\forest@temp\forest@ca@first@child
- \let\forest@ca@first@child\forest@ca@second@child
- \let\forest@ca@second@child\forest@temp
- \fi
- \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
- \forestOget{\forest@ca@second@child}{l}\forest@ca@second@l
- \forestoget{parent@anchor}\forest@ca@parent@anchor
- \forest@ca@parent@anchor
- \edef\forest@ca@parent@anchor@s{\the\pgf@x}%
- \edef\forest@ca@parent@anchor@l{\the\pgf@y}%
- \forestOget{\forest@ca@first@child}{child@anchor}\forest@ca@first@child@anchor
- \forest@ca@first@child@anchor
- \edef\forest@ca@first@child@anchor@s{\the\pgf@x}%
- \edef\forest@ca@first@child@anchor@l{\the\pgf@y}%
- \forestOget{\forest@ca@second@child}{child@anchor}\forest@ca@second@child@anchor
- \forest@ca@second@child@anchor
- \edef\forest@ca@second@child@anchor@s{\the\pgf@x}%
- \edef\forest@ca@second@child@anchor@l{\the\pgf@y}%
- \pgfmathsetlengthmacro\forest@ca@desired@second@edge@s{tan(\forestove{calign secondary angle})*%
- (\forest@ca@second@l-\forest@ca@second@child@anchor@l+\forest@ca@parent@anchor@l)}%
- \pgfmathsetlengthmacro\forest@ca@desired@first@edge@s{tan(\forestove{calign primary angle})*%
- (\forest@ca@first@l-\forest@ca@first@child@anchor@l+\forest@ca@parent@anchor@l)}
- \pgfmathsetlengthmacro\forest@ca@desired@s@distance{\forest@ca@desired@second@edge@s-\forest@ca@desired@first@edge@s}%
- \forestOget{\forest@ca@first@child}{s}\forest@ca@first@s
- \forestOget{\forest@ca@second@child}{s}\forest@ca@second@s
- \pgfmathsetlengthmacro\forest@ca@actual@s@distance{%
- \forest@ca@second@s+\forest@ca@second@child@anchor@s
- -\forest@ca@first@s-\forest@ca@first@child@anchor@s}%
- \ifdim\forest@ca@desired@s@distance>\forest@ca@actual@s@distance\relax
- \ifdim\forest@ca@actual@s@distance=0pt
- \forestoget{n children}\forest@temp@n@children
- \forest@node@foreachchild{%
- \forestoget{child@anchor}\forest@temp@child@anchor
- \forest@temp@child@anchor
- \edef\forest@temp@child@anchor@s{\the\pgf@x}%
- \pgfmathsetlengthmacro\forest@temp{%
- \forest@ca@desired@first@edge@s+(\forestove{n}-1)*\forest@ca@desired@s@distance/(\forest@temp@n@children-1)+\forest@ca@first@child@anchor@s-\forest@temp@child@anchor@s}%
- \forestolet{s}\forest@temp
- }%
- \def\forest@calign@anchor{0pt}%
- \else
- \pgfmathsetmacro\forest@ca@ratio{%
- \forest@ca@desired@s@distance/\forest@ca@actual@s@distance}%
- \forest@node@foreachchild{%
- \forestoget{child@anchor}\forest@temp@child@anchor
- \forest@temp@child@anchor
- \edef\forest@temp@child@anchor@s{\the\pgf@x}%
- \pgfmathsetlengthmacro\forest@temp{%
- \forest@ca@ratio*(%
- \forestove{s}-\forest@ca@first@s
- +\forest@temp@child@anchor@s-\forest@ca@first@child@anchor@s)%
- +\forest@ca@first@s
- +\forest@ca@first@child@anchor@s-\forest@temp@child@anchor@s}%
- \forestolet{s}\forest@temp
- }%
- \pgfmathsetlengthmacro\forest@calign@anchor{%
- -tan(\forestove{calign primary angle})*(\forest@ca@first@l-\forest@ca@first@child@anchor@l+\forest@ca@parent@anchor@l)%
- +\forest@ca@first@child@anchor@s-\forest@ca@parent@anchor@s
- }%
+ \ifnum\forestove{n children}>1
+ \edef\forest@ca@first@child{\forest@node@nornbarthchildid{\forestove{calign primary child}}}%
+ \edef\forest@ca@second@child{\forest@node@nornbarthchildid{\forestove{calign secondary child}}}%
+ \ifnum\forestove{reversed}=1
+ \let\forest@temp\forest@ca@first@child
+ \let\forest@ca@first@child\forest@ca@second@child
+ \let\forest@ca@second@child\forest@temp
\fi
- \else
- \ifdim\forest@ca@desired@s@distance<\forest@ca@actual@s@distance\relax
- \pgfmathsetlengthmacro\forest@ca@ratio{%
- \forest@ca@actual@s@distance/\forest@ca@desired@s@distance}%
- \forest@node@foreachchild{%
- \forestoget{child@anchor}\forest@temp@child@anchor
- \forest@temp@child@anchor
- \edef\forest@temp@child@anchor@l{\the\pgf@y}%
- \pgfmathsetlengthmacro\forest@temp{%
- \forest@ca@ratio*(%
- \forestove{l}+\forest@ca@parent@anchor@l-\forest@temp@child@anchor@l)
- -\forest@ca@parent@anchor@l+\forest@temp@child@anchor@l}%
- \forestolet{l}\forest@temp
- }%
- \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
- \pgfmathsetlengthmacro\forest@calign@anchor{%
- -tan(\forestove{calign primary angle})*(\forest@ca@first@l+\forest@ca@parent@anchor@l-\forest@temp@child@anchor@l)%
- +\forest@ca@first@child@anchor@s-\forest@ca@parent@anchor@s
- }%
+ \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
+ \forestOget{\forest@ca@second@child}{l}\forest@ca@second@l
+ \forestoget{parent@anchor}\forest@ca@parent@anchor
+ \forest@ca@parent@anchor
+ \edef\forest@ca@parent@anchor@s{\the\pgf@x}%
+ \edef\forest@ca@parent@anchor@l{\the\pgf@y}%
+ \forestOget{\forest@ca@first@child}{child@anchor}\forest@ca@first@child@anchor
+ \forest@ca@first@child@anchor
+ \edef\forest@ca@first@child@anchor@s{\the\pgf@x}%
+ \edef\forest@ca@first@child@anchor@l{\the\pgf@y}%
+ \forestOget{\forest@ca@second@child}{child@anchor}\forest@ca@second@child@anchor
+ \forest@ca@second@child@anchor
+ \edef\forest@ca@second@child@anchor@s{\the\pgf@x}%
+ \edef\forest@ca@second@child@anchor@l{\the\pgf@y}%
+ \pgfmathsetlengthmacro\forest@ca@desired@second@edge@s{tan(\forestove{calign secondary angle})*%
+ (\forest@ca@second@l-\forest@ca@second@child@anchor@l+\forest@ca@parent@anchor@l)}%
+ \pgfmathsetlengthmacro\forest@ca@desired@first@edge@s{tan(\forestove{calign primary angle})*%
+ (\forest@ca@first@l-\forest@ca@first@child@anchor@l+\forest@ca@parent@anchor@l)}
+ \pgfmathsetlengthmacro\forest@ca@desired@s@distance{\forest@ca@desired@second@edge@s-\forest@ca@desired@first@edge@s}%
+ \forestOget{\forest@ca@first@child}{s}\forest@ca@first@s
+ \forestOget{\forest@ca@second@child}{s}\forest@ca@second@s
+ \pgfmathsetlengthmacro\forest@ca@actual@s@distance{%
+ \forest@ca@second@s+\forest@ca@second@child@anchor@s
+ -\forest@ca@first@s-\forest@ca@first@child@anchor@s}%
+ \ifdim\forest@ca@desired@s@distance>\forest@ca@actual@s@distance\relax
+ \ifdim\forest@ca@actual@s@distance=0pt
+ \forestoget{n children}\forest@temp@n@children
+ \forest@node@foreachchild{%
+ \forestoget{child@anchor}\forest@temp@child@anchor
+ \forest@temp@child@anchor
+ \edef\forest@temp@child@anchor@s{\the\pgf@x}%
+ \pgfmathsetlengthmacro\forest@temp{%
+ \forest@ca@desired@first@edge@s+(\forestove{n}-1)*\forest@ca@desired@s@distance/(\forest@temp@n@children-1)+\forest@ca@first@child@anchor@s-\forest@temp@child@anchor@s}%
+ \forestolet{s}\forest@temp
+ }%
+ \def\forest@calign@anchor{0pt}%
+ \else
+ \pgfmathsetmacro\forest@ca@ratio{%
+ \forest@ca@desired@s@distance/\forest@ca@actual@s@distance}%
+ \forest@node@foreachchild{%
+ \forestoget{child@anchor}\forest@temp@child@anchor
+ \forest@temp@child@anchor
+ \edef\forest@temp@child@anchor@s{\the\pgf@x}%
+ \pgfmathsetlengthmacro\forest@temp{%
+ \forest@ca@ratio*(%
+ \forestove{s}-\forest@ca@first@s
+ +\forest@temp@child@anchor@s-\forest@ca@first@child@anchor@s)%
+ +\forest@ca@first@s
+ +\forest@ca@first@child@anchor@s-\forest@temp@child@anchor@s}%
+ \forestolet{s}\forest@temp
+ }%
+ \pgfmathsetlengthmacro\forest@calign@anchor{%
+ -tan(\forestove{calign primary angle})*(\forest@ca@first@l-\forest@ca@first@child@anchor@l+\forest@ca@parent@anchor@l)%
+ +\forest@ca@first@child@anchor@s-\forest@ca@parent@anchor@s
+ }%
+ \fi
+ \else
+ \ifdim\forest@ca@desired@s@distance<\forest@ca@actual@s@distance\relax
+ \pgfmathsetlengthmacro\forest@ca@ratio{%
+ \forest@ca@actual@s@distance/\forest@ca@desired@s@distance}%
+ \forest@node@foreachchild{%
+ \forestoget{child@anchor}\forest@temp@child@anchor
+ \forest@temp@child@anchor
+ \edef\forest@temp@child@anchor@l{\the\pgf@y}%
+ \pgfmathsetlengthmacro\forest@temp{%
+ \forest@ca@ratio*(%
+ \forestove{l}+\forest@ca@parent@anchor@l-\forest@temp@child@anchor@l)
+ -\forest@ca@parent@anchor@l+\forest@temp@child@anchor@l}%
+ \forestolet{l}\forest@temp
+ }%
+ \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
+ \pgfmathsetlengthmacro\forest@calign@anchor{%
+ -tan(\forestove{calign primary angle})*(\forest@ca@first@l+\forest@ca@parent@anchor@l-\forest@temp@child@anchor@l)%
+ +\forest@ca@first@child@anchor@s-\forest@ca@parent@anchor@s
+ }%
+ \fi
\fi
+ \forest@calign@s@shift{-\forest@calign@anchor}%
\fi
- \forest@calign@s@shift{-\forest@calign@anchor}%
}
% \end{macrocode}
%