summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-01-13 22:23:41 +0000
committerKarl Berry <karl@freefriends.org>2015-01-13 22:23:41 +0000
commit9da0834459cf637fe4859f8b41f1ec7fcf725d2e (patch)
treefe22eb3209df4a5268f596c1e0459dbb38dac6df /Master
parentaa554adb4c5282f8b587a157a47bfe79285696d9 (diff)
genealogytree (13jan15)
git-svn-id: svn://tug.org/texlive/trunk@36048 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/genealogytree/CHANGES22
-rw-r--r--Master/texmf-dist/doc/latex/genealogytree/README47
-rw-r--r--Master/texmf-dist/doc/latex/genealogytree/genealogytree.doc.sources.zipbin0 -> 6944 bytes
-rw-r--r--Master/texmf-dist/doc/latex/genealogytree/genealogytree.pdfbin0 -> 405381 bytes
-rw-r--r--Master/texmf-dist/tex/latex/genealogytree/genealogytree.sty101
-rw-r--r--Master/texmf-dist/tex/latex/genealogytree/gtrcore.debug.code.tex134
-rw-r--r--Master/texmf-dist/tex/latex/genealogytree/gtrcore.options.code.tex84
-rw-r--r--Master/texmf-dist/tex/latex/genealogytree/gtrcore.parser.code.tex520
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds1
-rw-r--r--Master/tlpkg/tlpsrc/collection-pictures.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/genealogytree.tlpsrc0
12 files changed, 911 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/genealogytree/CHANGES b/Master/texmf-dist/doc/latex/genealogytree/CHANGES
new file mode 100644
index 00000000000..8c9a29c8379
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/genealogytree/CHANGES
@@ -0,0 +1,22 @@
+%% The LaTeX package genealogytree - version 0.10 (2015/01/12)
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2013-2015 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% -------------------------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This work consists of all files listed in README
+%%
+
+(2013-2014): pre publication development
+
+version 0.10 (2015/01/12): initial public release (alpha version)
diff --git a/Master/texmf-dist/doc/latex/genealogytree/README b/Master/texmf-dist/doc/latex/genealogytree/README
new file mode 100644
index 00000000000..b208c47985b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/genealogytree/README
@@ -0,0 +1,47 @@
+%% The LaTeX package genealogytree - version 0.10 (2015/01/12)
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2013-2015 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% -------------------------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This work consists of all files listed in README
+%%
+
+Pedigree and genealogical tree diagrams are proven tools to visualize genetic
+and relational connections between individuals. The naming for mathematical tree
+structures with parent nodes and child nodes is traded from historical family
+diagrams. However, even the smallest family entity consisting of two parents and
+several children is no mathematical tree but a more general graph. The
+genealogytree packages provides a set of tools to typeset such genealogical
+trees or, more precisely, to typeset a set of special graphs for the description
+of family-like structures. The package uses an autolayout algorithm which can be
+customized to e.g. prioritize certain paths.
+
+Contents of the package
+=======================
+ 'README' this file
+ 'CHANGES' log of changes (history)
+ 'genealogytree.sty' LaTeX package file (style file)
+ '*.code.tex' LaTeX package file (library of genealogytree)
+ 'genealogytree.pdf' Documentation for genealogytree
+ 'genealogytree.doc.sources.zip' Source code of the documentation
+
+Installation
+============
+Copy the contents of the 'genealogytree.tds.zip' from CTAN to your local TeX
+file tree.
+
+Alternatively, put the files to their respective locations within the TeX installation:
+ 'genealogytree.sty' -> /tex/latex/genealogytree
+ '*.code.tex' -> /tex/latex/genealogytree
+ all other files -> /doc/latex/genealogytree
diff --git a/Master/texmf-dist/doc/latex/genealogytree/genealogytree.doc.sources.zip b/Master/texmf-dist/doc/latex/genealogytree/genealogytree.doc.sources.zip
new file mode 100644
index 00000000000..edb0fbe5a1d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/genealogytree/genealogytree.doc.sources.zip
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/genealogytree/genealogytree.pdf b/Master/texmf-dist/doc/latex/genealogytree/genealogytree.pdf
new file mode 100644
index 00000000000..e4e72e55bd2
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/genealogytree/genealogytree.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/genealogytree/genealogytree.sty b/Master/texmf-dist/tex/latex/genealogytree/genealogytree.sty
new file mode 100644
index 00000000000..b75d6c54c62
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/genealogytree/genealogytree.sty
@@ -0,0 +1,101 @@
+%% The LaTeX package genealogytree - version 0.10 (2015/01/12)
+%% genealogytree.sty: genealogy trees (graphs)
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2013-2015 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% -------------------------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This work consists of all files listed in README
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{genealogytree}[2015/01/12 version 0.10 genealogy trees]
+\def\gtr@version{0.10}
+
+\RequirePackage{pgf}[2008/01/15]
+\RequirePackage{etoolbox}[2011/01/03]
+
+\def\gtr@warning#1{\PackageWarning{genealogytree}{#1}}
+\def\gtr@error#1{\PackageError{genealogytree}{#1}}
+
+\pgfkeys{/handlers/.gstore in/.code=\pgfkeysalso{\pgfkeyscurrentpath/.code=\gdef#1{##1}}}
+\pgfkeys{/handlers/.xstore in/.code=\pgfkeysalso{\pgfkeyscurrentpath/.code=\xdef#1{##1}}}
+\pgfkeys{/gtr/.is family}
+\def\gtrset{\pgfqkeys{/gtr}}
+
+\def\gtr@optionlist{}
+
+\def\gtr@set@library@version#1{%
+ \def\gtr@library@version{#1}%
+ \typeout{Library (genealogytree): '\gtr@library@inload' version '\gtr@library@version'}
+ \gtr@check@library@version%
+}
+
+\def\gtr@check@library@version{%
+ \ifx\gtr@library@version\gtr@version\else%
+ \PackageError{genealogytree}{genealogytree version '\gtr@version' loads library '\gtr@library@inload' with version '\gtr@library@version'}
+ \fi%
+}
+
+\def\gtruselibrary#1{\gtrset{library/.cd,#1}}
+\@onlypreamble\gtruselibrary
+
+\providecommand{\gtrpkgprefix}{}
+
+\def\gtr@input@library@in#1{%
+ \input\gtrpkgprefix#1\relax%
+}
+
+\let\gtr@input@library=\gtr@input@library@in%
+
+\def\gtr@input@library@ex#1{%
+ \let\gtr@input@library=\gtr@input@library@in%
+ \edef\gtr@at@catcode{\the\catcode`@}%
+ \catcode`\@11\relax%
+ \gtr@input@library@in{#1}%
+ \catcode`\@\gtr@at@catcode\relax%
+ \let\gtr@input@library=\gtr@input@library@ex%
+}
+
+\def\gtr@load@library#1#2{%
+ \pgfkeysifdefined{/gtr/libload/#1}{}{%
+ \pgfkeyssetvalue{/gtr/libload/#1}{}%
+ \def\gtr@library@inload{#2}%
+ \def\gtr@library@version{-}%
+ \gtr@input@library{#2}%
+ \gtr@check@library@version}%
+}
+
+\def\gtr@add@library#1#2{%
+ \gtrset{library/#1/.code={\gtr@load@library{#1}{#2}}}%
+ \DeclareOption{#1}{\appto\gtr@optionlist{,#1}}%
+}
+\def\gtr@add@library@style#1#2{%
+ \gtrset{library/#1/.style={#2}}%
+ \DeclareOption{#1}{\appto\gtr@optionlist{,#1}}%
+}
+
+\gtr@add@library{core.parser}{gtrcore.parser.code.tex}
+\gtr@add@library{core.options}{gtrcore.options.code.tex}
+\gtr@add@library{core.debug}{gtrcore.debug.code.tex}
+
+\ProcessOptions*
+
+\gtruselibrary{%
+ core.parser,%
+ core.options,%
+ core.debug,%
+}
+
+\edef\gtr@temp{\noexpand\gtruselibrary{\gtr@optionlist}}
+\gtr@temp
+\let\gtr@input@library=\gtr@input@library@ex%
diff --git a/Master/texmf-dist/tex/latex/genealogytree/gtrcore.debug.code.tex b/Master/texmf-dist/tex/latex/genealogytree/gtrcore.debug.code.tex
new file mode 100644
index 00000000000..47f7807ef82
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/genealogytree/gtrcore.debug.code.tex
@@ -0,0 +1,134 @@
+%% The LaTeX package genealogytree - version 0.10 (2015/01/12)
+%% gtrcore.debug.code.tex: Debugger
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2014-2015 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% -------------------------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This work consists of all files listed in README
+%%
+\gtr@set@library@version{0.10}
+
+\definecolorseries{gtr@debug}{rgb}{grad}[rgb]{.95,.85,.55}{3,11,17}
+\resetcolorseries[16]{gtr@debug}
+
+\def\gtr@debug@colorletfamily#1{%
+ \pgfmathsetmacro\gtr@temp@col{int(Mod(\csuse{gtr@fam@\gtr@currentfamily @debugnum},16)+1)}%
+ \colorlet{#1}{gtr@debug!![\gtr@temp@col]}%
+}
+
+\def\gtr@debug@setleveldistance#1{%
+ \pgfmathsetmacro#1{-(\gtrkv@debug@markerleft-\gtrkv@debug@markerright)*e^(-abs(\number\gtr@c@level)/4)-\gtrkv@debug@markerright}%
+}
+
+\tcbset{%
+ gtr@debug@box/.style={enhanced,beforeafter skip=0pt,flushleft upper,
+ boxrule=0.25mm,leftrule=5mm,colframe=gtr@debug@color,
+ arc=5mm,boxsep=0pt,top=1mm,bottom=1mm},
+ debug marker left/.store in=\gtrkv@debug@markerleft,
+ debug marker right/.store in=\gtrkv@debug@markerright,
+ debug marker left=1.3cm,
+ debug marker right=0.3cm,
+}
+
+\def\gtr@debug@person@content#1#2#3#4{%
+ \gtr@debug@colorletfamily{gtr@debug@color}%
+ \begin{tcolorbox}[gtr@debug@box,sharp corners=west,
+ interior style={top color=gtr@debug@color!30!white,bottom color=gray!10!white},
+ overlay={\node[fill=gtr@debug@color!10!white,draw=black] at ([xshift=2.5mm]frame.west) {\small #1};}]
+ #2: Individual~\gtr@currentperson~(\number\gtr@c@pid),
+ Family~\gtr@currentfamily~(\csuse{gtr@fam@\gtr@currentfamily @debugnum}),
+ Level~\number\gtr@c@level%
+ \ifblank{#3}{}{\par Options: {\ttfamily\detokenize{#3}}}%
+ \par Content: {\ttfamily\detokenize{#4}}%
+ \end{tcolorbox}%
+}
+
+\def\gtr@debug@family@begin#1#2{%
+ \gtr@debug@colorletfamily{gtr@debug@color}%
+ \begin{tcolorbox}[gtr@debug@box,rightrule=5mm,sharp corners,
+ colback=gtr@debug@color!30!white,
+ overlay={%
+ \gtr@debug@setleveldistance{\gtr@temp}%
+ \path[draw=gtr@debug@color,very thick,->] (frame.west) -- ++(\gtr@temp pt,0) -- ++(0,-0.5);
+ }]%
+ Start: #1 Family~{\csuse{gtr@fam@\gtr@currentfamily @debugnum}} (\gtr@currentfamily), Level~\number\gtr@c@level
+ \ifblank{#2}{}{\par Options: {\ttfamily\detokenize{#2}}}%
+ \end{tcolorbox}%
+}
+
+\def\gtr@debug@family@end#1{%
+ \gtr@debug@colorletfamily{gtr@debug@color}%
+ \begin{tcolorbox}[gtr@debug@box,rightrule=5mm,sharp corners,
+ colback=gtr@debug@color!30!white,
+ overlay={%
+ \gtr@debug@setleveldistance{\gtr@temp}%
+ \path[draw=gtr@debug@color,very thick,->] (frame.west) -- ++(\gtr@temp pt,0) -- ++(0,0.5);
+ }]%
+ End: #1 Family~{\csuse{gtr@fam@\gtr@currentfamily @debugnum}} (\gtr@currentfamily), Level~\number\gtr@c@level
+ \end{tcolorbox}%
+}
+
+\newcommand{\gtrparserdebug}[2][]{%
+ \begingroup%
+ \parskip0pt%
+ %
+ \appto\gtr@next@family{\csedef{gtr@fam@\gtr@currentfamily @debugnum}{\number\gtr@c@family}}%
+ %
+ \let\gtr@org@@parse@err=\gtr@parse@err%
+ \let\gtr@org@@parse@error=\gtr@parse@error%
+ \let\gtr@org@@parse@error@token=\gtr@parse@error@token%
+ \def\gtr@parse@err{%
+ \fbox{\textbf{Parser error}}%
+ \gtr@org@@parse@err}%
+ \long\def\gtr@parse@error##1{%
+ \fbox{\textbf{Parser: undefined ##1}}%
+ \gtr@org@@parse@error{##1}}%
+ \long\def\gtr@parse@error@token{%
+ \fbox{\textbf{Parser: unfeasible token '\@gtr@token'}}%
+ \gtr@org@@parse@error@token}%
+ %
+ \def\gtr@proc@@parent@begin##1{\gtr@debug@family@begin{Parent}{##1}}%
+ \def\gtr@proc@@child@begin##1{\gtr@debug@family@begin{Child}{##1}}%
+ \def\gtr@proc@@union@begin##1{\gtr@debug@family@begin{Union}{##1}}%
+ \def\gtr@proc@@sandclock@begin##1{\gtr@debug@family@begin{Sandclock}{##1}}%
+ %
+ \def\gtr@proc@@parent@end{\gtr@debug@family@end{Parent}}%
+ \def\gtr@proc@@child@end{\gtr@debug@family@end{Child}}%
+ \def\gtr@proc@@union@end{\gtr@debug@family@end{Union}}%
+ \def\gtr@proc@@sandclock@end{\gtr@debug@family@end{Sandclock}}%
+ %
+ \long\def\gtr@proc@@parent@g@content##1##2{\gtr@debug@person@content{g}{Child}{##1}{##2}}%
+ \long\def\gtr@proc@@child@g@content##1##2{\gtr@debug@person@content{g}{Parent}{##1}{##2}}%
+ \long\def\gtr@proc@@p@content##1##2{\gtr@debug@person@content{p}{Parent}{##1}{##2}}%
+ \long\def\gtr@proc@@c@content##1##2{\gtr@debug@person@content{c}{Child}{##1}{##2}}%
+ %
+ \def\gtr@positioning{}%
+ %
+ \colorlet{gtr@debug@color}{black!75!white}%
+ \begin{tcolorbox}[gtr@debug@box,before skip=\medskipamount,
+ sharp corners,toprule=1mm,rightrule=5mm]
+ Genealogytree Parser Debugger
+ \ifblank{#1}{}{\par Graph Options: {\ttfamily\detokenize{#1}}}%
+ \end{tcolorbox}%
+ \gtr@parsegraph[#1]{#2}%
+ \begin{tcolorbox}[
+ gtr@debug@box,after skip=\medskipamount,sharp corners,colframe=black!75!white,
+ bottomrule=1mm,rightrule=5mm]
+ End of Genealogytree Parser Debugger
+ \end{tcolorbox}%
+ \endgroup%
+}
+
+\newcommand{\gtrparserdebuginput}[2][]{%
+ \gtrparserdebug[#1]{input{#2}}}
diff --git a/Master/texmf-dist/tex/latex/genealogytree/gtrcore.options.code.tex b/Master/texmf-dist/tex/latex/genealogytree/gtrcore.options.code.tex
new file mode 100644
index 00000000000..5045d286944
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/genealogytree/gtrcore.options.code.tex
@@ -0,0 +1,84 @@
+%% The LaTeX package genealogytree - version 0.10 (2015/01/12)
+%% gtrcore.options.code.tex: Options
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2013-2015 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% -------------------------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This work consists of all files listed in README
+%%
+\gtr@set@library@version{0.10}
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%% Key Management
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif\ifgtr@timeflow@vertical
+
+\def\gtr@init@timeflow@down{%
+ \gtr@timeflow@verticaltrue%
+ \let\gtrkv@node@minwidth=\gtrkv@node@minsize%
+ \let\gtrkv@node@maxwidth=\gtrkv@node@maxsize%
+ \let\gtrkv@node@minheigth=\gtrkv@level@size%
+ \let\gtrkv@node@maxheigth=\gtrkv@level@size%
+}
+
+\let\gtr@init@timeflow@up=\gtr@init@timeflow@down
+
+\def\gtr@init@timeflow@left{%
+ \gtr@timeflow@verticalfalse%
+ \let\gtrkv@node@minwidth=\gtrkv@level@size%
+ \let\gtrkv@node@maxwidth=\gtrkv@level@size%
+ \let\gtrkv@node@minheigth=\gtrkv@node@minsize%
+ \let\gtrkv@node@maxheigth=\gtrkv@node@maxsize%
+}
+
+\let\gtr@init@timeflow@right=\gtr@init@timeflow@left
+
+
+\gtrset{%
+ child distance in parent graph/.store in=\gtrkv@dist@sibling@par,%
+ child distance in child graph/.store in=\gtrkv@dist@sibling@chi,%
+ parent distance in parent graph/.store in=\gtrkv@dist@parent@par,%
+ parent distance in child graph/.store in=\gtrkv@dist@parent@chi,%
+ further distance/.store in=\gtrkv@dist@further,%
+ %
+ child distance/.style={child distance in parent graph=#1,child distance in child graph=#1},%
+ parent distance/.style={parent distance in parent graph=#1,parent distance in child graph=#1},%
+ %
+ level/.style=,
+}
+
+\gtrset{%
+ timeflow/.store in=\gtrkv@timeflow,
+ level distance/.store in=\gtrkv@level@distance,
+ level size/.store in=\gtrkv@level@size,
+ node sizes/.code args={#1~#2}{\def\gtrkv@node@minsize{#1}\def\gtrkv@node@maxsize{#2}},
+ node size/.style={node sizes=#1~#1},%
+ proband level/.store in=\gtrkv@proband@level,
+ tree offset/.store in=\gtrkv@tree@offset,
+}
+
+\gtrset{%
+ timeflow=down,
+ level distance=5mm,
+ level size=3.5cm,
+ node size=2.5cm,
+ proband level=0,
+ tree offset=0pt,
+ child distance in parent graph=1mm,%
+ child distance in child graph=2mm,%
+ parent distance in parent graph=2mm,%
+ parent distance in child graph=1mm,%
+ further distance=3mm,%
+}
diff --git a/Master/texmf-dist/tex/latex/genealogytree/gtrcore.parser.code.tex b/Master/texmf-dist/tex/latex/genealogytree/gtrcore.parser.code.tex
new file mode 100644
index 00000000000..36f83a328a0
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/genealogytree/gtrcore.parser.code.tex
@@ -0,0 +1,520 @@
+%% The LaTeX package genealogytree - version 0.10 (2015/01/12)
+%% gtrcore.parser.code.tex: Parser
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2013-2015 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% -------------------------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This work consists of all files listed in README
+%%
+\gtr@set@library@version{0.10}
+
+%% (local) stack implementation
+\def\gtrnewstack#1{%
+ \csedef{gtr@stack@#1@size}{0}%
+}
+
+\def\gtrstacksize#1{%
+ \csname gtr@stack@#1@size\endcsname%
+}
+
+\def\gtrstackpush#1#2{%
+ \count@\gtrstacksize{#1}%
+ \advance\count@ 1\relax%
+ \csedef{gtr@stack@#1@size}{\number\count@}%
+ \csedef{gtr@stack@#1@\romannumeral\count@}{#2}%
+}
+
+\def\gtrstackpopto#1#2{%
+ \count@\gtrstacksize{#1}%
+ \edef#2{\csname gtr@stack@#1@\romannumeral\count@\endcsname}%
+ \advance\count@ -1\relax%
+ \csedef{gtr@stack@#1@size}{\number\count@}%
+}
+
+\def\gtrstackpop#1{%
+ \count@\gtrstacksize{#1}%
+ \csname gtr@stack@#1@\romannumeral\count@\endcsname%
+ \advance\count@ -1\relax%
+ \csedef{gtr@stack@#1@size}{\number\count@}%
+}
+
+\def\gtrstackpeekto#1#2{%
+ \count@\gtrstacksize{#1}%
+ \edef#2{\csname gtr@stack@#1@\romannumeral\count@\endcsname}%
+}
+
+\def\gtrstackpeek#1{%
+ \count@\gtrstacksize{#1}%
+ \csname gtr@stack@#1@\romannumeral\count@\endcsname%
+}
+
+\def\gtrmakestack#1{%
+ \gtrnewstack{#1}%
+ \csdef{#1size}{\gtrstacksize{#1}}%
+ \csdef{#1push}{\gtrstackpush{#1}}%
+ \csdef{#1popto}{\gtrstackpopto{#1}}%
+ \csdef{#1pop}{\gtrstackpop{#1}}%
+ \csdef{#1peekto}{\gtrstackpeekto{#1}}%
+ \csdef{#1peek}{\gtrstackpeek{#1}}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%% Main Parser
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcount\gtr@c@level%
+\newcount\gtr@c@family%
+\newcount\gtr@c@pid%
+
+\gtrmakestack{gtr@famstack@}%
+\gtrmakestack{gtr@levelstack@}%
+
+\gtr@c@family\z@\relax%---- reset ?
+\gtr@c@pid\z@\relax%%---- reset ?
+
+\def\gtr@level@argument@reset{%
+ \dimdef\gtr@rv@level@distance{\gtrkv@level@distance}%
+ \dimdef\gtr@rv@level@size{\gtrkv@level@size}%
+ \dimdef\gtr@rv@node@minsize{\gtrkv@node@minsize}%
+ \dimdef\gtr@rv@node@maxsize{\gtrkv@node@maxsize}%
+ \dimdef\gtr@rv@dist@sibling@par{\gtrkv@dist@sibling@par}%
+ \dimdef\gtr@rv@dist@sibling@chi{\gtrkv@dist@sibling@chi}%
+ \dimdef\gtr@rv@dist@parent@par{\gtrkv@dist@parent@par}%
+ \dimdef\gtr@rv@dist@parent@chi{\gtrkv@dist@parent@chi}%
+ \dimdef\gtr@rv@dist@further{\gtrkv@dist@further}%
+ \let\gtr@rv@tcboptions\gtrkv@tcboptions%
+}
+
+
+\def\gtr@level@argument@set{%
+ \let\gtrkv@level@distance\gtr@rv@level@distance%
+ \let\gtrkv@level@size\gtr@rv@level@size%
+ \let\gtrkv@node@minsize\gtr@rv@node@minsize%
+ \let\gtrkv@node@maxsize\gtr@rv@node@maxsize%
+ \let\gtrkv@dist@sibling@par\gtr@rv@dist@sibling@par%
+ \let\gtrkv@dist@sibling@chi\gtr@rv@dist@sibling@chi%
+ \let\gtrkv@dist@parent@par\gtr@rv@dist@parent@par%
+ \let\gtrkv@dist@parent@chi\gtr@rv@dist@parent@chi%
+ \let\gtrkv@dist@further\gtr@rv@dist@further%
+ \let\gtrkv@tcboptions\gtr@rv@tcboptions%
+ %
+ \gtrset{level=\number\gtr@c@level}%
+ \pgfkeysifdefined{/gtr/level \number\gtr@c@level/.@cmd}{%
+ \gtrset{level \number\gtr@c@level}%
+ }{%
+ }%
+ \gtr@init@leveldimens%
+}
+
+\newcommand{\gtr@parsegraph}[2][]{%
+ \gtrset{#1}%
+ %
+ \let\gtr@timeflow=\gtrkv@timeflow%
+ \letcs\gtr@init@leveldimens{gtr@init@timeflow@\gtr@timeflow}%
+ \letcs\gtr@set@level@position{gtr@set@level@position@\gtr@timeflow}%
+ \letcs\gtr@set@position@family{gtr@set@position@family@\gtr@timeflow}%
+ %
+ \edef\gtr@level@reference{0pt}%
+ \gtr@level@argument@reset%
+ \gtr@set@level{\gtrkv@proband@level}%
+ \let\gtr@currentfamily=\@undefined%
+ \numdef\gtr@num@fam@first{\gtr@c@family+1}%
+ \numdef\gtr@num@per@first{\gtr@c@pid+1}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@graph}#2x%
+ \numdef\gtr@num@fam@last{\gtr@c@family}%
+ \numdef\gtr@num@per@last{\gtr@c@pid}%
+ \edef\gtr@temp{\romannumeral\number\gtr@num@fam@first}%
+ \csdimdef{gtr@fam@\gtr@temp @offset}{\gtrkv@tree@offset}%
+ \gtr@positioning%
+}
+
+\def\gtr@parse@graphwithhandle#1{%
+ \let\gtr@handle@continue=#1%
+ \gtr@parse@graph%
+}
+
+\def\gtr@parse@graph{%
+ \afterassignment\gtr@handle@graph\let\@gtr@token=%
+}
+
+\def\gtr@handle@graph{%
+ \let\@next=\gtr@parse@error@token%
+ \ifx\@gtr@token x%
+ \let\@next=\gtr@parse@x%
+ \else%
+ \expandafter\ifx\space\@gtr@token%
+ \let\@next\gtr@parse@graph%
+ \else%
+ \ifx\@gtr@token i%
+ \let\@next\gtr@parse@input@%
+ \else%
+ \gtr@handle@continue%
+ \fi%
+ \fi%
+ \fi%
+ \@next%
+}
+
+\def\gtr@handle@continue@graph{%
+ \ifx\@gtr@token p%
+ \let\gtr@handle@continue\gtr@handle@continue@parent%
+ \let\@next=\gtr@parse@graph@parent@%
+ \else%
+ \ifx\@gtr@token c%
+ \let\gtr@handle@continue\gtr@handle@continue@child%
+ \let\@next=\gtr@parse@graph@child@%
+ \else%
+ \ifx\@gtr@token s%
+ \let\gtr@handle@continue\gtr@handle@continue@sandclock%
+ \let\@next=\gtr@parse@graph@sandclock@%
+ \fi%
+ \fi%
+ \fi%
+}
+
+
+\def\gtr@parse@graph@parent@ arent{\@ifnextchar[{\gtr@parent@@parent}{\gtr@parent@@parent[]}}
+
+\def\gtr@parse@graph@child@ hild{%
+ \gtr@up@level%
+ \dimdef\gtr@level@reference{\gtr@level@reference+\gtrkv@level@size+\gtrkv@level@distance}%
+ \@ifnextchar[{\gtr@child@@child}{\gtr@child@@child[]}}
+
+\def\gtr@parse@graph@sandclock@ andclock{\@ifnextchar[{\gtr@sandclock@@}{\gtr@sandclock@@[]}}
+
+\def\gtr@parse@input@ nput#1{\expandafter\expandafter\expandafter \gtr@parse@graph \csname @@input\endcsname #1 }
+
+\def\gtr@parse@x{}
+
+\def\gtr@parse@err{%
+ \gtr@error{Parser error}%
+}
+
+\def\gtr@parse@error@token{%
+ \show\@gtr@token
+ \gtr@error{Parser: unfeasible token}%
+}
+
+\long\def\gtr@parse@error#1{%
+ \gtr@error{Parser: undefined #1}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%% Parent Parser
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\gtr@handle@continue@parent{%
+ \ifx\@gtr@token g%
+ \let\@next=\gtr@pparse@g%
+ \else%
+ \ifx\@gtr@token p%
+ \let\@next=\gtr@pparse@p%
+ \else
+ \ifx\@gtr@token c%
+ \let\@next=\gtr@pparse@c%
+ \fi%
+ \fi%
+ \fi%
+}
+
+\def\gtr@pparse@c{\@ifnextchar[{\gtr@parent@@c}{\gtr@parent@@c[]}}
+\long\def\gtr@parent@@c[#1]#2{%
+ \gtr@trav@@c[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@parent}%
+}
+
+\def\gtr@pparse@p{%
+ \@ifnextchar a{\gtr@pparse@parent@}{\gtr@pparse@p@}}
+\def\gtr@pparse@parent@ arent{\@ifnextchar[{\gtr@parent@@parent}{\gtr@parent@@parent[]}}
+\long\def\gtr@parent@@parent[#1]#2{%
+ \gtr@trav@@parent[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@parent}%
+}
+\def\gtr@pparse@p@{\@ifnextchar[{\gtr@parent@@p}{\gtr@parent@@p[]}}
+\long\def\gtr@parent@@p[#1]#2{%
+ \gtr@trav@@p[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@parent}%
+}
+
+\def\gtr@pparse@g{\@ifnextchar[{\gtr@parent@@g}{\gtr@parent@@g[]}}
+\long\def\gtr@parent@@g[#1]#2{%
+ \gtr@trav@@parent@g[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@parent}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%% Child Parser
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\gtr@handle@continue@child{%
+ \ifx\@gtr@token g%
+ \let\@next=\gtr@cparse@g%
+ \else%
+ \ifx\@gtr@token p%
+ \let\@next=\gtr@cparse@p%
+ \else
+ \ifx\@gtr@token c%
+ \let\@next=\gtr@cparse@c%
+ \else
+ \ifx\@gtr@token u%
+ \let\@next=\gtr@cparse@u%
+ \fi
+ \fi%
+ \fi%
+ \fi%
+}
+
+
+\def\gtr@cparse@p{\@ifnextchar[{\gtr@child@@p}{\gtr@child@@p[]}}
+\long\def\gtr@child@@p[#1]#2{%
+ \gtr@trav@@p[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@child}%
+}
+
+\def\gtr@cparse@c{%
+ \@ifnextchar h{\gtr@cparse@child@}{\gtr@cparse@c@}}
+\def\gtr@cparse@child@ hild{\@ifnextchar[{\gtr@child@@child}{\gtr@child@@child[]}}
+\long\def\gtr@child@@child[#1]#2{%
+ \gtr@trav@@child[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@child}%
+}
+\def\gtr@cparse@c@{\@ifnextchar[{\gtr@child@@c}{\gtr@child@@c[]}}
+\long\def\gtr@child@@c[#1]#2{%
+ \gtr@trav@@c[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@child}%
+}
+
+\def\gtr@cparse@u nion{\@ifnextchar[{\gtr@child@@union}{\gtr@child@@union[]}}
+\long\def\gtr@child@@union[#1]#2{%
+ \gtr@trav@@union[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@child}%
+}
+
+\def\gtr@cparse@g{\@ifnextchar[{\gtr@child@@g}{\gtr@child@@g[]}}
+\long\def\gtr@child@@g[#1]#2{%
+ \gtr@trav@@child@g[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@child}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%% Union Parser
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\gtr@handle@continue@union{%
+ \ifx\@gtr@token c%
+ \let\@next=\gtr@uparse@c%
+ \else%
+ \ifx\@gtr@token p%
+ \let\@next=\gtr@uparse@p%
+ \fi%
+ \fi%
+}
+
+\def\gtr@uparse@c{%
+ \@ifnextchar h{\gtr@uparse@child@}{\gtr@uparse@c@}}
+\def\gtr@uparse@child@ hild{\@ifnextchar[{\gtr@union@@child}{\gtr@union@@child[]}}
+\long\def\gtr@union@@child[#1]#2{%
+ \let\gtr@handle@continue\gtr@handle@continue@child%
+ \gtr@trav@@child[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@union}%
+}
+\def\gtr@uparse@c@{\@ifnextchar[{\gtr@union@@c}{\gtr@union@@c[]}}
+\long\def\gtr@union@@c[#1]#2{%
+ \gtr@trav@@c[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@union}%
+}
+
+\def\gtr@uparse@p{\@ifnextchar[{\gtr@union@@p}{\gtr@union@@p[]}}
+\long\def\gtr@union@@p[#1]#2{%
+ \gtr@trav@@p[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@union}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%% Sandclock Parser
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\gtr@handle@continue@sandclock{%
+ \ifx\@gtr@token c%
+ \let\@next=\gtr@sparse@c%
+ \else%
+ \ifx\@gtr@token p%
+ \let\@next=\gtr@sparse@p%
+ \fi%
+ \fi%
+}
+
+
+\long\def\gtr@sandclock@@[#1]#2{%
+ \gtr@trav@@sandclock[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@graph}%
+}
+
+\def\gtr@sparse@c{%
+ \@ifnextchar h{\gtr@sparse@child@}{\gtr@sparse@c@}}
+\def\gtr@sparse@child@ hild{\@ifnextchar[{\gtr@sandclock@@child}{\gtr@sandclock@@child[]}}
+\long\def\gtr@sandclock@@child[#1]#2{%
+ \gtr@trav@@child[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@sandclock}%
+}
+\def\gtr@sparse@c@{\@ifnextchar[{\gtr@sandclock@@c}{\gtr@sandclock@@c[]}}
+\long\def\gtr@sandclock@@c[#1]#2{%
+ \gtr@trav@@c[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@sandclock}%
+}
+
+\def\gtr@sparse@p{%
+ \@ifnextchar a{\gtr@sparse@parent@}{\gtr@sparse@p@}}
+\def\gtr@sparse@parent@ arent{\@ifnextchar[{\gtr@sandclock@@parent}{\gtr@sandclock@@parent[]}}
+\long\def\gtr@sandclock@@parent[#1]#2{%
+ \gtr@trav@@parent[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@sandclock}%
+}
+\def\gtr@sparse@p@{\@ifnextchar[{\gtr@sandclock@@p}{\gtr@sandclock@@p[]}}
+\long\def\gtr@sandclock@@p[#1]#2{%
+ \gtr@trav@@p[#1]{#2}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@sandclock}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%% Traversing
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\gtr@next@family{%
+ \ifdef{\gtr@currentfamily}{\gtr@famstack@push{\gtr@currentfamily}}{}%
+ \advance\gtr@c@family 1\relax%
+ \edef\gtr@currentfamily{\romannumeral\gtr@c@family}%
+}
+
+\def\gtr@previous@family{%
+ \ifnum\gtr@famstack@size>0%
+ \gtr@famstack@popto{\gtr@currentfamily}%
+ \else%
+ \let\gtr@currentfamily=\@undefined%
+ \fi%
+}
+
+\def\gtr@next@person{%
+ \advance\gtr@c@pid 1\relax%
+ \edef\gtr@currentperson{\romannumeral\gtr@c@pid}%
+}
+
+\def\gtr@set@level#1{%
+ \gtr@c@level#1\relax%
+ \edef\gtr@currentlevel{\romannumeral\numexpr 1000+\gtr@c@level\relax}%
+ \gtr@level@argument@set%
+}
+
+\def\gtr@up@level{%
+ \advance\gtr@c@level 1\relax%
+ \edef\gtr@currentlevel{\romannumeral\numexpr 1000+\gtr@c@level\relax}%
+ \gtr@level@argument@set%
+}
+
+\def\gtr@up@level@push{%
+ \gtr@levelstack@push{\gtr@level@reference}%
+ \gtr@up@level%
+ \dimdef\gtr@level@reference{\gtr@level@reference+\gtrkv@level@size+\gtrkv@level@distance}%
+}
+
+\def\gtr@up@level@pop{%
+ \gtr@up@level%
+ \gtr@levelstack@popto{\gtr@level@reference}%
+}
+
+\def\gtr@down@level{%
+ \advance\gtr@c@level -1\relax%
+ \edef\gtr@currentlevel{\romannumeral\numexpr 1000+\gtr@c@level\relax}%
+ \gtr@level@argument@set%
+}
+
+\def\gtr@down@level@push{%
+ \gtr@levelstack@push{\gtr@level@reference}%
+ \dimdef\gtr@level@reference{\gtr@level@reference-\gtrkv@level@size-\gtrkv@level@distance}%
+ \gtr@down@level%
+}
+
+\def\gtr@down@level@pop{%
+ \gtr@down@level%
+ \gtr@levelstack@popto{\gtr@level@reference}%
+}
+
+\long\def\gtr@trav@@parent[#1]#2{%
+ \gtr@up@level@push%
+ \gtr@next@family%
+ \gtr@proc@@parent@begin{#1}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@parent}#2x%
+ \gtr@proc@@parent@end%
+ \gtr@previous@family%
+ \gtr@down@level@pop%
+}
+
+\long\def\gtr@trav@@child[#1]#2{%
+ \gtr@down@level@push%
+ \gtr@next@family%
+ \gtr@proc@@child@begin{#1}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@child}#2x%
+ \gtr@proc@@child@end%
+ \gtr@previous@family%
+ \gtr@up@level@pop%
+}
+
+\long\def\gtr@trav@@sandclock[#1]#2{%
+ \gtr@up@level@push%
+ \gtr@next@family%
+ \gtr@proc@@sandclock@begin{#1}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@sandclock}#2x%
+ \gtr@proc@@sandclock@end%
+ \gtr@previous@family%
+ \gtr@down@level@pop%
+}
+
+\long\def\gtr@trav@@union[#1]#2{%
+ \gtr@next@family%
+ \gtr@proc@@union@begin{#1}%
+ \gtr@parse@graphwithhandle{\gtr@handle@continue@union}#2x%
+ \gtr@proc@@union@end%
+ \gtr@previous@family%
+}
+
+\long\def\gtr@trav@@parent@g[#1]#2{%
+ \gtr@down@level@push%
+ \gtr@next@person%
+ \gtr@proc@@parent@g@content{#1}{#2}%
+ \gtr@up@level@pop%
+}
+
+\long\def\gtr@trav@@child@g[#1]#2{%
+ \gtr@next@person%
+ \gtr@proc@@child@g@content{#1}{#2}%
+}
+
+\long\def\gtr@trav@@p[#1]#2{%
+ \gtr@next@person%
+ \gtr@proc@@p@content{#1}{#2}%
+}
+
+\long\def\gtr@trav@@c[#1]#2{%
+ \gtr@down@level@push%
+ \gtr@next@person%
+ \gtr@proc@@c@content{#1}{#2}%
+ \gtr@up@level@pop%
+}
+
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index 411923eaa1b..9c012babe5b 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -228,7 +228,7 @@ my @TLP_working = qw(
fullblck fullminipage fullwidth
functan fundus-calligra fundus-cyr fundus-sueterlin fwlw
g-brief gaceta galois gamebook garrigues gastex gatech-thesis gates gauss
- gb4e gcard gchords gcite geschichtsfrkl genealogy gene-logic
+ gb4e gcard gchords gcite geschichtsfrkl genealogy genealogytree gene-logic
genmisc genmpage gentium-tug gentle geometry geometry-de
german germbib germkorr getfiledate getmap getoptk
gfsartemisia gfsbaskerville gfsbodoni gfscomplutum gfsdidot gfsneohellenic
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index 5eaafac2310..efe0001d2f6 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -1467,6 +1467,7 @@ $standardtex='\.(.bx|cfg|sty|clo|ldf|cls|def|fd|fontspec|cmap|4ht)$';
'frame', 'frame\.tex|' . $standardtex,
'frankenstein','\.(sto|stq)|' . $standardtex,
'gates', '\.lua|gates.tex|' . $standardtex, # both t-gates and gates
+ 'genealogytree','code\.tex|' . $standardtex,
'genmisc', '\.sty|\.tex',
'geometry', '\.sty|\.clo|\.ldf|\.cls|\.def|\.fd$', # not cfg
'geometry-de', 'NULL', # all doc
diff --git a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
index c555998620a..5662a381b55 100644
--- a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
@@ -41,6 +41,7 @@ depend fast-diagram
depend fig4latex
depend flowchart
depend forest
+depend genealogytree
depend getmap
depend gincltex
depend gnuplottex
diff --git a/Master/tlpkg/tlpsrc/genealogytree.tlpsrc b/Master/tlpkg/tlpsrc/genealogytree.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/genealogytree.tlpsrc