% \iffalse
% Copyright 2022 Jiro Senju
%
% This package 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
% any later version.
%
% This package 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 package. If not, see .
%
%\NeedsTeXFormat{LaTeX2e}
%\ProvidesPackage{familytree}%
%[2022/06/27 v3.1 familytree]
%
%<*driver>
\documentclass[draft]{ltxdoc}
\let\Ocmd=\cmd
\renewcommand{\cmd}[1]{%
%\hskip-\parindent
\parbox{.95\textwidth}{\Ocmd{#1}}%
}
%
\input{fonts}
%
\usepackage[dvipdfmx,final]{graphicx}
\usepackage[final]{listings}
\lstset{basicstyle=\small\ttfamily,
language=TeX,
columns=[c]flexible,
tabsize=4,
%frame=tb,
keepspaces=true,
%lineskip=-.1em,
belowskip=\medskipamount}
\usepackage{multicol}
\usepackage{needspace}
%
% hyperref should come last
\usepackage[dvipdfmx,final,pdfusetitle]{hyperref}
% bookmarksdepth=section
% pdffitwindow=true
% pdfpagetransition=Dissolve
% pdfstartview=FitB
\hypersetup{
hyperfootnotes=false,
colorlinks=true,
linkcolor=blue,
% anchorcolor=black,
% citecolor=black,
% urlcolor=black,
bookmarks=true,
bookmarksnumbered=true,
setpagesize=false,
%pdftitle={},
%pdfauthor={},
pdfpagelayout=SinglePage,
pdfpagemode=UseOutlines,
pdfstartview=FitH
}
%
\usepackage{\jobname}
%
\makeatletter
\def\meta@font@select{\slshape}
\def\fps@table{htbp}
\let\part=\@gobble
%
\newcount\ft@lastsection
\newcommand{\subsectImpl}[1][\subsection]{%
\iftrue% debugging code
\@tempcnta=\numexpr\thesection + 1\relax%
\ifnum\@tempcnta>\ft@lastsection\else%
Jump to \hyperlink{section.\the\@tempcnta}{next section}%
\fi%
\fi%
\needspace{4\baselineskip}%
#1{Implementation}%
}
\makeatother
%
\newcommand{\parag}[1]{%
\allowbreak%
\paragraph{#1}\nopagebreak\hskip0pt\nopagebreak%
%\medskip%
}
\newcounter{CS}[section]
\newcommand{\CS}{%
\ifnum\theCS=0%
control sequence%
\stepcounter{CS}%
\else%
CS%
\fi%
}
\newcommand{\srcfig}[2][]{%
\lstinputlisting{\Dir/#2print}%
\nopagebreak[4]%
\hfil\includegraphics[#1]{\Dir/#2.pdf}%
}
\newcommand{\NoDescription}{\vspace*{-.9\baselineskip}}
\newcommand{\IhadtoSplit}{%
This is not a good structure since it bogusly splits a long code into
a few parts, and may global variables. Comparing to the non-split
version, the split one is just a little better.
}
\let\tableautorefname=\tablename%
\renewcommand{\subsectionautorefname}{}
\newcommand{\refnm}[1]{%
\autoref{#1} ``\nameref{#1}''%
}
%
% \EnableCrossrefs
\DisableCrossrefs
% \PageIndex
%\CodelineIndex
\makeatletter
\let\theCodelineNo=\reset@font
\AtEndDocument{%
\immediate\write\@auxout{%
\string\global\string\ft@lastsection=\thesection%
}%
}
\makeatother
%\RecordChanges
%
\begin{document}
\MakeShortVerb{\|}
\let\PrintIndexO=\PrintIndex
\let\PrintIndex=\relax
\DocInput{\jobname.dtx}
\DocInclude{ft-individual}
\DocInclude{ft-sibling}
\DocInclude{ft-gens}
\DocInclude{ft-marriage}
\DocInclude{ft-lib}
%\PrintChanges
% \PrintIndexO
\end{document}
%
% \fi
%
% \GetFileInfo{\jobname.sty}
% \title{{\spaceskip=1ex\textsf{\jobname} package \fileversion}}
% \author{Jiro Senju\\\texttt{\small jiro1010senju AT gmail DOT com}}
% \date{\filedate}
% \maketitle
%
% Draws a Family Tree.
%
% Defines a box describing an individual, and connects the multiple
% boxes by lines.
% The line represents the sibling, the parent-child relation ship, or
% the marriage.
%
% \begin{itemize}
% \item Excluding the marriage box, you can get a maleline\slash patrilineal
% tree, or a femaleline\slash matrilineal tree.
% \item For Japanese, |jlreq.cls| vertical option (|tate|) is supported.
% \end{itemize}
% \bigskip
%
% \setcounter{tocdepth}{2}
% \columnseprule=\arrayrulewidth
% \begin{multicols}{2}
% \tableofcontents
% \end{multicols}
% \bigskip
%
% \setcounter{secnumdepth}{0}
% \section{Introduction}
%
% Family Tree is interesting.
% But also, it can be really complicated, especially including the
% siblings and marriages.
%
% Graphviz (|dot(1)|) is a good tool to draw a family tree, but I want
% more straightforward understandability.
% Here I try developing some macros to draw a family tree easily.
% I am not a TeXnician, but I hope it helps someone who wants to draw
% and view a large family tree.
% Tested on TeX Live 2019.
% Any comments will be appreciated.
%
% \subsection{Development}
%
% Basically all \CS s have a prefix ``|ft|''.
% But non-prefix names are also defined by |\let| as an alias\slash
% synonym, to improve the usability and the visibility.
% Obviously only when the name is undefined.
% If \CS{} name is already defined and |familytree| pkg cannot define the alias,
% |\message| is generated.
% This document tries using the |ft|-less alias name, but a few are used
% with the prefixed name.
% \smallskip
%
% There are multiple |dtx| files, but the generated |sty| is only one.
% |ft-lib.dtx| is described at last of this document, but it comes
% first in |sty|.
% \medskip
%
% In the beginning, I was going to implement using |\hbox| and |\vbox|
% or |tabular| environment. I thought they would be enough.
% After defining the boxes, I would connect them by lines, then I got a
% trouble.
% |latex| adjusts the position of the boxes by inserting a glue or
% something, and their connection points are shifted. I could not find a
% good universal solution.
% Can TikZ or something define the absolute coordinates and the lines? I
% don't know.
% To connect the lines, I had to choose |picture| environment.
%
% The depth of a character was another trouble, or I don't have enough
% experience and
% knowledge. To layout the boxes in |picture|, I have to consider the
% depth of the box.
% To support the Japanese in vertical mode, the depth is very important. In
% horizontal mode, the depth is very alike of the English alphabets. But
% in vertical mode, the depth is a half size of a character.
% I didn't know that, and it took very long time for me.
%
% \subsection{Structure}
%
% Defines every element as a box in the tree, and connects them by lines.
% In defining a box, we also define its connection points which make the
% box to be connectable later.
%
% These are the elements.
%
% \begin{enumerate}
% \item individual box
% \begin{itemize}
% \item child mark to represent one is adopted or biological child
% \item one's title
% \item one's name
% \item maleline\slash femaleline for the patrilineal\slash matrilineal tree
% \item additional information\par
% birth\slash death year-month-date, nickname, or anything
% \end{itemize}
%
% \item sibling box
% \begin{itemize}
% \item a line between the child marks
% \item interval box to make a space between individuals
% \end{itemize}
%
% \item marriage box
% \begin{itemize}
% \item marriage line (double line) to connect the husband and the wife
% \end{itemize}
%
% \item parent-child relationship or generations box
% \end{enumerate}
%
% \setcounter{secnumdepth}{3}