| % Copyright 2014 by Laurent Mazet |
| % |
| % This file may be distributed and/or modified |
| % |
| % 1. under the LaTeX Project Public License and/or |
| % 2. under the GNU Public License. |
| % |
| \def\Genealogy@Version{2014/09/27, v. 0.3} |
| \NeedsTeXFormat{LaTeX2e}[1995/12/01] |
| \ProvidesClass{genealogy}[\Genealogy@Version] |
| % |
| \LoadClass{article} |
| % |
| \RequirePackage{tikz} |
| \usetikzlibrary{trees} |
| \usetikzlibrary{calc} |
| % |
| \RequirePackage[paperwidth=\maxdimen,paperheight=\maxdimen]{geometry} |
| % |
| \RequirePackage[active,tightpage]{preview} |
| \PreviewEnvironment{tikzpicture} |
| % |
| \setlength\PreviewBorder{5pt} |
| % |
| \newlength\xstep |
| \setlength\xstep{24mm} |
| \newlength\ystep |
| \setlength\ystep{10mm} |
| % |
| \newcommand{\childof}[3]{ |
| \draw [child] (#1) |- ($ (#2) + (#3) $) -| (#2); |
| } |
| \newcommand{\childofunion}[3]{\childof{#1}{#3}{0,1.0}\childof{#2}{#3}{0,1.0}} |
| \newcommand{\childofsecondunion}[3]{\childof{#1}{#3}{0,1.2}\childof{#2}{#3}{0,1.2}} |
| \newcommand{\childofthridunion}[3]{\childof{#1}{#3}{0,0.8}\childof{#2}{#3}{0,0.8}} |
| \newcommand{\married}[2]{ |
| \draw [link] (#1) -- node[above] {\textmarried} (#2); |
| } |
| \newcommand{\divorced}[2]{ |
| \draw [link] (#1) -- node[above] {\textdivorced} (#2); |
| } |
| \newcommand{\link}[2]{ |
| \draw [link] (#1) -- (#2); |
| } |
| \newcommand{\person}[6]{ |
| \pgfmathparse{mod(#5 + #6, 2)} |
| \edef\g{\pgfmathresult} |
| \node [#3] (#1) at ($ 2 *(#4, 0) - 2 *(0, #5) + (\g, 0) $) {#2}; |
| } |
| % |
| \newcommand{\resetoffset}{ |
| \xdef\offset{0} |
| \pgfmathparse{\level + \inclevel} |
| \xdef\level{\pgfmathresult} |
| \xdef\inclevel{1} |
| } |
| \newcommand{\shiftoffset}[1]{ |
| \pgfmathparse{\offset + #1} |
| \xdef\offset{\pgfmathresult} |
| \ifdim\offset pt>\maxoffset pt\xdef\maxoffset{\offset}\fi |
| } |
| % |
| \newcommand{\addperson}[3]{ |
| \person{#1}{#2}{#3}{\offset}{\level}{\gapoddeven} |
| \shiftoffset{1} |
| } |
| \newcommand{\male}[2]{\addperson{#1}{#2}{male}} |
| \newcommand{\female}[2]{\addperson{#1}{#2}{female}} |
| % |
| \newenvironment{subtree}{ |
| \pgfmathparse{2 * (mod(\level, 2) + \offset) * \xstep} |
| \edef\x{\pgfmathresult} |
| \pgfmathparse{-2 * (\level) * \ystep} |
| \edef\y{\pgfmathresult} |
| |
| \pgfmathparse{mod(\level, 2)} |
| \xdef\gapoddeven{\pgfmathresult} |
| |
| \xdef\maxoffset{0} |
| \edef\savedoffset{\offset} |
| \xdef\offset{0} |
| |
| \edef\savedlevel{\level} |
| \xdef\level{0} |
| |
| \edef\savedinclevel{\inclevel} |
| \xdef\inclevel{1} |
| |
| \begin{scope}[shift=\x,yshift=\y] |
| }{ |
| \end{scope} |
| |
| \xdef\gapoddeven{0} |
| |
| \pgfmathparse{\savedoffset + \maxoffset} |
| \xdef\offset{\pgfmathresult} |
| |
| \pgfmathparse{\level + 1} |
| \xdef\inclevel{\pgfmathresult} |
| \ifdim\savedinclevel pt>\inclevel pt\xdef\inclevel{\savedinclevel}\fi |
| |
| \xdef\level{\savedlevel} |
| } |
| % |
| \AtBeginDocument{ |
| % |
| \footnotesize |
| % |
| \tikzstyle{person} = [rectangle,draw,minimum width=10em] |
| \tikzstyle{female} = [person,fill=red!20,rounded corners] |
| \tikzstyle{male} = [person,fill=blue!20] |
| \tikzstyle{child} = [->,>=stealth,thick] |
| \tikzstyle{link} = [-,thick] |
| % |
| \begin{tikzpicture}[=\xstep,y=\ystep] |
| \xdef\offset{0} |
| \xdef\maxoffset{0} |
| \xdef\level{0} |
| \xdef\inclevel{1} |
| \xdef\gapoddeven{0} |
| } |
| % |
| \AtEndDocument{ |
| \end{tikzpicture} |
| } |