summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-05-30 00:14:18 +0000
committerKarl Berry <karl@freefriends.org>2006-05-30 00:14:18 +0000
commitc784f93856c0d51f9796295d01a735d10b9faebd (patch)
tree27a0c661023b27daf4b28dedbff40ce89889c99a
parentbbe4b4aa208edad91c551fcac1c8af2a6a7d61c1 (diff)
new pstricks package pst-pdgr
git-svn-id: svn://tug.org/texlive/trunk@1618 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-xBuild/cdbuild/ctan2tds.pl77
-rwxr-xr-xBuild/tools/tpm-ctan-check8
-rw-r--r--Master/texmf-dist/doc/generic/pst-pdgr/README26
-rw-r--r--Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.bib50
-rw-r--r--Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.pdfbin0 -> 180016 bytes
-rw-r--r--Master/texmf-dist/source/generic/pst-pdgr/Makefile54
-rw-r--r--Master/texmf-dist/source/generic/pst-pdgr/pst-pdgr.dtx2158
-rw-r--r--Master/texmf-dist/source/generic/pst-pdgr/pst-pdgr.ins48
-rw-r--r--Master/texmf-dist/tex/generic/pst-pdgr/pst-pdgr.tex292
-rw-r--r--Master/texmf-dist/tex/latex/pst-pdgr/pst-pdgr.cfg17
-rw-r--r--Master/texmf-dist/tex/latex/pst-pdgr/pst-pdgr.sty32
-rw-r--r--Master/texmf-dist/tpm/pst-pdgr.tpm33
-rw-r--r--Master/texmf/lists/pst-pdgr12
-rw-r--r--Master/texmf/tpm/collection-pstricks.tpm5
14 files changed, 2777 insertions, 35 deletions
diff --git a/Build/cdbuild/ctan2tds.pl b/Build/cdbuild/ctan2tds.pl
index 53a35a7a6e2..6f1b91dfbcd 100755
--- a/Build/cdbuild/ctan2tds.pl
+++ b/Build/cdbuild/ctan2tds.pl
@@ -220,6 +220,7 @@ chdir $startdir || die "chdir($startdir) failed: $!";
'pst-math', "&MAKEpst",
'pst-optic', "&MAKEpst",
'pst-osci', "&MAKEpst",
+ 'pst-pdgr', "&MAKEpst",
'pst-poly', "&MAKEpst",
'pst-slpe', "&MAKEpst",
'pst-uml', "&MAKEpst",
@@ -893,7 +894,6 @@ else
$whichdocformat = $specialdocfmt{$package}
|| ($dest eq "texmf-doc" ? "english" : $standarddocfmt);
- print "\n----------------------------------\n";
print "<$whichformat> <$whichdocformat> $packagedir ($package) -> $DEST\n";
if ($special{$package} ne "") {
eval $special{$package};
@@ -910,6 +910,14 @@ else
}
+sub xchdir
+{
+ my ($dir) = @_;
+ chdir ($dir) || die "chdir($dir) failed: $!";
+ print "ctan2tds.pl: chdir($dir)\n";
+}
+
+
# some packages (e.g., vntex) are tl-ready.
#
@@ -2111,24 +2119,37 @@ sub MAKElfb {
}
sub MAKElh {
-# this simply copies source files
- chdir($packagedir) || die ("ERROR: cannot open directory");
-&runjob("mkdir -p $DEST/fonts/source/lh");
-&runjob("mkdir -p $DEST/doc/fonts/lh");
-&runjob("mkdir -p $DEST/source/fonts/lh");
-&runjob("$CP -r doc/* $DEST/doc/fonts/lh");
-&runjob("$CP -r INSTALL *.* tex $DEST/doc/fonts/lh");
-&runjob("$CP -r mf/* $DEST/fonts/source/lh");
-
-chdir("tex");
+ # this simply copies source files and then runs tex to make .mf's.
+ &xchdir ($packagedir);
+ #
+ &runjob("mkdir -p $DEST/doc/fonts");
+ &runjob("$CP -r doc/fonts/lh $DEST/doc/fonts");
+ #
+ &runjob("mkdir -p $DEST/fonts/source");
+ &runjob("$CP -r fonts/source/lh $DEST/fonts/source");
+
+ &runjob("mkdir -p $DEST/source/fonts");
+ &runjob("$CP -r source/lh $DEST/source/fonts");
+
+ &xchdir ("$DEST/source/fonts/lh/tex");
+ &runjob("mkdir -p wrk"); # 99allenc.tex wants to write there
+ &runjob ("tex 99allenc.tex");
+# &inst_lh_fonts ("01cm-lh","lcy");
+# &inst_lh_fonts ("03cm-wn","ot2");
+# &inst_lh_fonts ("11ex-rx","x2");
+# &inst_lh_fonts ("12ex-la","t2a");
+# &inst_lh_fonts ("13ex-lb","t2b");
+# &inst_lh_fonts ("14ex-lc","t2c");
+# &inst_lh_fonts ("15ex-ld","t2d");
+}
- &inst_lh_fonts ("12ex-la","t2a");
- &inst_lh_fonts ("13ex-lb","t2b");
- &inst_lh_fonts ("14ex-lc","t2c");
- &inst_lh_fonts ("15ex-ld","t2d");
- &inst_lh_fonts ("11ex-rx","x2");
- &inst_lh_fonts ("03cm-wn","ot2");
- &inst_lh_fonts ("01cm-lh","lcy");
+sub inst_lh_fonts {
+ my ($texfile,$dir) = @_;
+ &runjob("tex $texfile ");
+ &runjob("rm -f $texfile.dvi $texfile.log");
+ &runjob("mkdir -p $DEST/fonts/source/lh/lh-$dir");
+ &runjob("$CP wrk/*.mf $DEST/fonts/source/lh/lh-$dir");
+ &runjob("rm -r wrk/*");
}
sub MAKElucida {
@@ -2319,13 +2340,16 @@ sub MAKEbeebe {
&SYSTEM("rm *");
}
+# pstricks packages usually support both plain and latex.
+#
sub MAKEpst {
- print "\t SPECIAL $package starts\n";
+ print "\t SPECIAL pst $package starts\n";
$standardtex = qq{^$package\.(tex|sty)};
$whichformat='generic';
$whichdocformat='generic';
+ $specialsourcefmt{$package}='generic';
&setup;
- chdir("$DEST/doc/$whichdocformat/$package");
+ &xchdir("$DEST/doc/$whichdocformat/$package");
&buildfilelist;
$inspatt=$standardins if ! $inspatt;
@@ -2335,19 +2359,12 @@ sub MAKEpst {
&dotex;
&dotype1;
killfiles($cleanpatt);
- &SYSTEM("mkdir -p $DEST/tex/latex/$package; mv $DEST/tex/generic/$package/*sty $DEST/tex/latex/$package");
+ &SYSTEM("mkdir -p $DEST/tex/latex/$package");
+ &SYSTEM("mv $DEST/tex/generic/$package/*sty $DEST/tex/latex/$package");
+ &SYSTEM("mv $DEST/doc/generic/$package/*cfg $DEST/tex/latex/$package");
}
-sub inst_lh_fonts {
- local($texfile,$dir) = @_;
-&runjob("tex $texfile ");
-&runjob("rm -f $texfile.dvi $texfile.log");
-&runjob("mkdir -p $DEST/fonts/source/lh/lh-$dir");
-&runjob("$CP wrk/*.mf $DEST/fonts/source/lh/lh-$dir");
-&runjob("rm -r wrk/*");
-}
-
sub MAKEfontinst {
chdir("$packagedir");
&runjob("mkdir -p $DEST/tex/latex/fontinst");
diff --git a/Build/tools/tpm-ctan-check b/Build/tools/tpm-ctan-check
index c8041221d04..8e4b18a2b40 100755
--- a/Build/tools/tpm-ctan-check
+++ b/Build/tools/tpm-ctan-check
@@ -43,7 +43,7 @@ sub main
"hyphen-norwegian", "hyphen-ukenglish", "hyphen-usorbian",
"ibygrk", "iopart-num",
"koma-script",
- "labelcase", "ledmac", "lewis", "lfb", "lineno",
+ "labelcase", "ledmac", "lewis", "lfb", "lh", "lineno",
"lshort-bulgarian", "lshort-dutch", "lshort-english",
"lshort-finnish", "lshort-french", "lshort-german",
"lshort-italian", "lshort-japanese", "lshort-korean",
@@ -65,9 +65,9 @@ sub main
"plnfss", "poemscol", "powerdot", "powerdot-doc-vn",
"ppr-prv", "preview", "proof", "pstricks", "pstricks-add",
"pst-3d", "pst-barcode", "pst-blur", "pst-eucl",
- "pst-labo", "pst-lens", "pst-osci", "pst-slpe",
+ "pst-labo", "pst-lens", "pst-osci", "pst-pdgr", "pst-slpe",
"sciposter", "sectionbox", "seminar", "semioneside", "setspace",
- "sf298", "sides", "sparklines", "sttools", "struktex",
+ "sf298", "sides", "sparklines", "spotcolor", "sttools", "struktex",
"subfig", "sudoku", "svninfo",
"tabulary", "talk", "tamethebeast", "tex-refs", "texshade",
"textcase", "textpos", "thumbpdf", "bin-thumbpdf",
@@ -234,9 +234,11 @@ sub read_tpm
"info/$me", # Type1fonts
"graphics/$me", # sparklines
"graphics/metapost/contrib/macros/$me", # mpattern
+ "graphics/pstricks/contrib/pedigree/$me", # pst-pdgr
"graphics/pstricks/contrib/$me", # pstricks-add
"fonts/$me", # MnSymbol
"fonts/gothic/$me", # blacklettert1
+ "fonts/cyrillic/$me/texmf", # lh
"fonts/greek/$me", # lfb
"fonts/ps-type1/$me", # cm-super
"fonts/ps-type1/$menotype1", # esint-type1
diff --git a/Master/texmf-dist/doc/generic/pst-pdgr/README b/Master/texmf-dist/doc/generic/pst-pdgr/README
new file mode 100644
index 00000000000..bac5e7b43f0
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-pdgr/README
@@ -0,0 +1,26 @@
+ Creating Medical Pedigree with PSTricks and LaTeX
+ Boris Veytsman & Leila Akhmadeeva
+ Version 0.2a, April 2006
+
+This package is a set of macros based on PSTricks to draw medical
+pedigrees according to the recommendations for standardized human
+pedigree nomenclature. The drawing commands place the symbols on a
+pspicture canvas. An interface for making trees is also provided.
+The package can be used both with LaTeX and PlainTeX. A separate
+Perl program for generating TeX files from spreadsheets is
+provided elsewhere on CTAN.
+
+To extract the files, run pst-pdgr.ins through latex. Then move the
+files pst-pdgr.sty & pst-pdgr.cfg to the place where LaTeX files are
+kept in your system, e. g. /usr/share/texmf/tex/latex/pst-pdgr/, and
+the file pst-pdgr.tex to the place where generic TeX files are kept in
+your system, e.g. /usr/share/texmf/tex/generic/pstricks/pst-pdgr/.
+
+The documentation is in the file pst-pdgr.pdf. You may use the
+provided Makefile to re-typeset it.
+
+Copyright 2006, Boris Veytsman <borisv@lk.net>, Leila Akhmadeeva
+
+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.
diff --git a/Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.bib b/Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.bib
new file mode 100644
index 00000000000..c9ab559619d
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.bib
@@ -0,0 +1,50 @@
+Generated on Wed Apr 19 11:55:35 2006 (1145462135).
+
+
+,-------------------.
+| BIBTEX ENTRIES |
+`-------------------'
+
+@book{Harper01:MDBook,
+ address = {Philadelphia},
+ author = {Peter Harper},
+ edition = {Third},
+ publisher = {W. B. Saunders},
+ title = {Myotonic Dystrophy},
+ year = {2001},
+}
+
+@article{PedigreeNomenclature95,
+ author = {Robin L. Bennett and Kathryn A. Steinhaus and
+ Stefanie B. Uhrich and Corrine K. O'Sullivan and
+ Robert G. Resta and Debra Lochner-Doyle and
+ Dorene S. Markei and Victoria Vincent and
+ Jan Hamanishi},
+ journal = {Am. J. Hum. Genet.},
+ number = {3},
+ pages = {745--752},
+ title = {Recommendations for Standardized Human Pedigree
+ Nomenclature},
+ volume = {56},
+ year = {1995},
+}
+
+
+@manual{PSTricks93,
+ author = {Van Zandt, Timothy},
+ month = {March},
+ note = {Available from CTAN at
+ \path{tex-archive/graphics/pstricks/obsolete/doc}},
+ title = {PSTricks: PostScript Macros for Generic \TeX},
+ year = {1993},
+}
+
+@manual{pedigree-perl,
+ author = {Boris Veytsman and Leila Akhmadeeva},
+ month = {April},
+ note = {Available from CTAN at \path{support/pedigree}},
+ title = {A Program For Automatic Pedigree Construction With pst-pdgr.
+ User Manual and Algorithm Description},
+ year = {2006},
+
+}
diff --git a/Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.pdf b/Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.pdf
new file mode 100644
index 00000000000..4f3d673d861
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/generic/pst-pdgr/Makefile b/Master/texmf-dist/source/generic/pst-pdgr/Makefile
new file mode 100644
index 00000000000..9717ba35c2e
--- /dev/null
+++ b/Master/texmf-dist/source/generic/pst-pdgr/Makefile
@@ -0,0 +1,54 @@
+#
+# Makefile for pst-pdgr package
+#
+# This file is in public domain
+#
+# $Id: Makefile,v 1.10 2006/05/17 16:27:18 boris Exp $
+#
+
+PACKAGE=pst-pdgr
+
+all: $(PACKAGE).pdf
+
+%.pdf: %.ps
+ ps2pdf -sAutoRotatePages=None $<
+
+%.ps: %.dvi
+ dvips -Ppdf -o $@ $<
+
+%.dvi: %.dtx $(PACKAGE).sty $(PACKAGE).tex
+ latex $<
+ - bibtex $*
+ latex $<
+ - makeindex -s gind.ist -o $*.ind $*.idx
+ - makeindex -s gglo.ist -o $*.gls $*.glo
+ latex $<
+ while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \
+ do latex $<; done
+
+
+%.sty: %.ins %.dtx
+ latex $<
+
+
+%.tex: %.ins %.dtx
+ latex $<
+
+.PRECIOUS: $(PACKAGE).cfg $(PACKAGE).tex $(PACKAGE).sty
+
+
+clean:
+ $(RM) $(PACKAGE).tex $(PACKAGE).sty $(PACKAGE).log $(PACKAGE).aux \
+ $(PACKAGE).cfg $(PACKAGE).glo $(PACKAGE).idx $(PACKAGE).toc \
+ $(PACKAGE).ilg $(PACKAGE).ind $(PACKAGE).out $(PACKAGE).lof \
+ $(PACKAGE).lot $(PACKAGE).bbl $(PACKAGE).blg $(PACKAGE).gls \
+ $(PACKAGE).dvi $(PACKAGE).ps
+
+veryclean: clean
+ $(RM) $(PACKAGE).pdf
+
+#
+# Archive for the distribution. Includes typeset documentation
+#
+archive: all clean
+ tar -czvf pst-pdgr.tgz --exclude '*~' --exclude '*.tgz' --exclude CVS .
diff --git a/Master/texmf-dist/source/generic/pst-pdgr/pst-pdgr.dtx b/Master/texmf-dist/source/generic/pst-pdgr/pst-pdgr.dtx
new file mode 100644
index 00000000000..784a068fd81
--- /dev/null
+++ b/Master/texmf-dist/source/generic/pst-pdgr/pst-pdgr.dtx
@@ -0,0 +1,2158 @@
+% \iffalse
+%<*gobble>
+% $Id: pst-pdgr.dtx,v 1.43 2006/05/16 22:16:43 boris Exp $
+%
+% Copyright 2006, Boris Veytsman <borisv@lk.net>, Leila Akhmadeeva
+% 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 the license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2003/06/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Boris Veytsman
+%
+% This work consists of the file pst-pdgr.dtx and the
+% derived files pst-pdgr.tex, pst-pdgr.sty, pst-pdgr.pdf.
+%
+% \fi
+% \CheckSum{505}
+%
+% \changes{v0.1}{2006/04/18}{The interface is mostly done}
+% \changes{v0.2}{2006/04/19}{Added new examples}
+%
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+%\iffalse
+% \begin{macrocode}
+\documentclass{ltxdoc}
+\usepackage{array}
+\usepackage{url}
+\usepackage{graphicx}
+\usepackage{pst-pdgr}
+\usepackage{pstricks-add}
+% Taken from xkeyval.dtx
+\makeatletter
+\def\DescribeOption#1{\leavevmode\@bsphack
+ \marginpar{\raggedleft\PrintDescribeOption{#1}}%
+ \SpecialOptionIndex{#1}\@esphack\ignorespaces}
+\def\PrintDescribeOption#1{\strut\emph{option}\\\MacroFont #1\ }
+\def\SpecialOptionIndex#1{\@bsphack
+ \index{#1\actualchar{\protect\ttfamily#1}
+ (option)\encapchar usage}%
+ \index{options:\levelchar#1\actualchar{\protect\ttfamily#1}\encapchar
+ usage}\@esphack}
+\def\DescribeOptions#1{\leavevmode\@bsphack
+ \marginpar{\raggedleft\strut\emph{options}%
+ \@for\@tempa:=#1\do{%
+ \\\strut\MacroFont\@tempa\SpecialOptionIndex\@tempa
+ }}\@esphack\ignorespaces}
+\makeatother
+\DoNotIndex{\@Alph,\@alph,\@arabic,\@badmath}
+\DoNotIndex{\@centercr}
+\DoNotIndex{\@empty,\@ignoretrue}
+\DoNotIndex{\@ixpt}
+\DoNotIndex{\@M,\@minus,\@ne,\@plus}
+\DoNotIndex{\\,\addtolength}
+\DoNotIndex{\advance}
+\DoNotIndex{\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+\DoNotIndex{\bullet}
+\DoNotIndex{\cdot,\cr,\day,\DeclareOption}
+\DoNotIndex{\def,\DocInput,\documentclass}
+\DoNotIndex{\DoNotIndex,\egroup,\ifx,\else,\fi,\endtrivlist}
+\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+\DoNotIndex{\endlist,\everycr,\ExecuteOptions}
+\DoNotIndex{\filedate,\filename,\fileversion}
+\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+\DoNotIndex{\hsize,\hskip,\hspace,\hss,\ifcase,\or,\fi}
+\DoNotIndex{\ifvmode,\fi,\ifnum,\fi,\input}
+\DoNotIndex{\kern,\leavevmode,\let,\leftmark}
+\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark}
+\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+\DoNotIndex{\NeedsTeXFormat,\newdimen}
+\DoNotIndex{\newpage,\nobreak,\noindent,\number}
+\DoNotIndex{\p@}
+\DoNotIndex{\pagestyle,\par}
+\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+\DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font}
+\DoNotIndex{\rightmargin,\rlap,\rmfamily}
+\DoNotIndex{\setbox,\setcounter,\setlength}
+\DoNotIndex{\skip,\slshape,\space}
+\DoNotIndex{\trivlist,\typeout,\tw@}
+\DoNotIndex{\vskip,\vspace,\year,\z@}
+%
+\DoNotIndex{\@ptsize,\@sptoken,\addtocounter,\afterassignment}
+\DoNotIndex{\AtEndOfPackage,\baselineskip,\boxmaxdepth,\clearpage}
+\DoNotIndex{\clubpenalty,\csname,\CurrentOption,\DeclareRobustCommand}
+\DoNotIndex{\eject,\endcsname,\evensidemargin,\expandafter}
+\DoNotIndex{\footnotesize,\footskip,\fromaddress,\futurelet}
+\DoNotIndex{\headheight,\headsep,\hfuzz,\ignorespaces}
+\DoNotIndex{\InputIfFileExists,\large,\lineskip,\loop}
+\DoNotIndex{\MakeUppercase,\MessageBreak,\mbox,\multiply}
+\DoNotIndex{\newcount,\newif,\newlength,\newtoks,\nolinebreak}
+\DoNotIndex{\nopagebreak,\normalfont,\normalsize,\null,\newline}
+\DoNotIndex{\oddsidemargin,\PackageError,\PackageInfo}
+\DoNotIndex{\paperheight,\paperwidth,\parbox,\parindent}
+\DoNotIndex{\PassOptionsToPackage,\ProvidesPackage,\RequirePackage}
+\DoNotIndex{\rule,\selectfont,\sffamily,\sloppy,\small,\spaceskip}
+\DoNotIndex{\stepcounter,\textheight,\textwidth,\the,\topmargin}
+\DoNotIndex{\unhbox,\voidb@x,\vsize,\vfuzz,\widowpenalty,\xspaceskip}
+\DoNotIndex{\AtBeginDocument,\AtEndDocument}
+\DoNotIndex{\endinput,\ProvidesFile,\message,\catcode,\@}
+\DoNotIndex{\PSTricksLoaded,\PSTXKeyLoaded,\PSTnodesLoaded,\PSTreeLoaded}
+\DoNotIndex{\pst@addfams,\define@key,\define@choicekey,\pssetlength}
+\DoNotIndex{\@nameuse,\@namedef,\psset,\rnode,\@ifnextchar,\pscircle}
+\DoNotIndex{\psdot,\pscircle,\pspolygon,\qline,\rput,\psline,\psframe}
+\DoNotIndex{\@pstrickserr,\@ehpa,\pst@checknum,\lput,\ncline,\pspicture}
+\DoNotIndex{\ncangle,\pnode,\pspicture,\endpspicture,\Tr}
+\DoNotIndex{\ifdim,\fi}
+\PageIndex
+\CodelineIndex
+\RecordChanges
+\EnableCrossrefs
+\begin{document}
+ \DocInput{pst-pdgr.dtx}
+\end{document}
+% \end{macrocode}
+%</gobble>
+% \fi
+% \MakeShortVerb{|}
+%
+%\GetFileInfo{pst-pdgr.sty}
+%\title{Creating Medical Pedigree with PSTricks and \LaTeX.
+% \thanks{\copyright Boris Veytsman, Leila Akhmadeeva 2006}}
+%\author{Boris Veytsman, \path{borisv@lk.net} \and Leila Akhmadeeva}
+%\date{\filedate, \fileversion}
+%\maketitle
+%\begin{abstract}
+% A set of macros based on |PSTricks| to draw medical pedigrees
+% according to the recommendations for standardized human pedigree
+% nomenclature. The drawing commands place the symbols on a
+% |pspicture| canvas. An interface for making trees is also
+% provided. The package can be used both with \LaTeX{} and
+% \PlainTeX. A separate |Perl| program for generating \TeX{} files
+% from spreadsheets is provided elsewhere on |CTAN|.
+%\end{abstract}
+%
+% \clearpage
+%
+%\tableofcontents
+%
+% \clearpage
+%
+%\listoffigures
+%\listoftables
+% \clearpage
+%
+%\section{User Guide}
+%\label{sec:user_guide}
+%
+%
+%\subsection{Introduction}
+%\label{sec:intro}
+%
+% Medical pedigree is a very important tool for clinicians, genetic
+% researchers and educators. As stated
+% in~\cite{PedigreeNomenclature95}, ``The construction of an accurate
+% family pedigree is a fundamental component of a clinical genetic
+% evaluation and of human genetic research.'' Unfortunately, up to
+% now most geneticians make the pedigrees manually. There are several
+% programs for doing so (see a list at
+% \url{http://www.kumc.edu/gec/prof/genecomp.html#pedigree}), but they
+% are rather expensive, lack multilanguage support and the quality of
+% typesetting is somewhat lacking. This package tries to offer a
+% \LaTeX-based solution for this problem. It could be used with a
+% companion \path{Perl} program \path{pedigree}~\cite{pedigree-perl},
+% which converts databases of patients into a \LaTeX{} file.
+%
+% Note that there are ways to draw genealogical trees with
+% |PSTricks|~\cite{PSTricks93}; see the beautiful ones at
+% \url{http://www.tug.org/PSTricks/main.cgi?file=Examples/Genealogy/genealogy}.
+% Unfortunately, medical pedigrees are often not \emph{trees}.
+% Therefore we do not use tree approach throughout, but provide it as
+% an alternative. Our general approach is based on the use of
+% nodes~\cite[Part~VII]{PSTricks93}. Each person or entity is a node,
+% and the lines are in fact |\ncline|s. This provides a flexibility
+% to draw complex pedigrees.
+%
+% Each node in the system \emph{must} have a name. To prevent
+% confusion with names of individuals, we call such name an \emph{id}.
+% As usual in |PSTricks|, it is a sequence of letters and numbers
+% starting with a letter. This rule is very important; a name like 1
+% or 1-1 can lead to mysterious PostScript errors.
+%
+% Our symbols follows the standard~\cite{PedigreeNomenclature95} with
+% the exception that we do not implement showing several conditions
+% on the same chart.
+%
+% To use the package, add the line
+% \begin{verbatim}
+% \usepackage{pst-pdgr}
+% \end{verbatim}
+% to a \LaTeX{} document or
+% \begin{verbatim}
+% \input pst-pdgr.tex
+% \end{verbatim}
+% to a \PlainTeX{} one. Note that since this is a |PSTricks|
+% package, you need to use \path{tex-dvips} path to compile your
+% document. If you need a PDF document, you can use \path{ps2pdf} or
+% packages like \path{pst-pdf}, \path{ps4pdf}, \path{pstricks}.
+%
+% If you are using the package in a \LaTeX{} document, you have an
+% added benefit of a local configuration file |pst-pdgr.cfg|. Such
+% file, if exists, will be read. It can be used to override package
+% settings (use |\AtEndOfPackage| for this).
+%
+%
+%
+%\subsection{Global Settings}
+%\label{sec:globals}
+%
+% By default the size of each node is |0.5 unit|. You can change
+% the size by setting the value of |unit| (1\,cm by default)
+% with |\psset|
+%
+%\DescribeMacro{\affectedstyle}
+%\DescribeMacro{\affectedbgcolor}
+% By default the affected individual is drawn as a black node. This
+% could be changed by setting |\affectedstyle| and
+% |\affectedbgcolor|, see Figure~\ref{fig:affectedstyle}.
+%\DescribeMacro{\affectedfgcolor}
+% Sometimes we need to write something inside a node representing an
+% affected individual. An example in~\cite{PedigreeNomenclature95}
+% changes in this situation the style from filled to hatched, which
+% looks inconsistent. We rather change the color of the foreground,
+% as shown on Fig.~\ref{fig:affectedfgcolor}.
+%
+% \begin{figure}
+% \centering
+% \begin{minipage}[t]{0.4\linewidth}
+% \centering
+% \begin{pspicture}(2,2)
+% \def\affectedbgcolor{blue}
+% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1}
+% \end{pspicture}\leavevmode\\
+% \small
+% |\def\affectedbgcolor{%|\\
+% |blue}|
+% \end{minipage}
+% \begin{minipage}[t]{0.4\linewidth}
+% \centering
+% \begin{pspicture}(2,2)
+% \def\affectedstyle{fillstyle=hlines, hatchcolor=\affectedbgcolor}
+% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1}
+% \end{pspicture}\leavevmode\\
+% \small
+% |\def\affectedstyle{fillstyle=%|\\
+% |hlines,hatchcolor=\affectedbgcolor}|
+% \end{minipage}
+% \caption{Setting Style of Affected Individuals}
+% \label{fig:affectedstyle}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{minipage}[t]{0.4\linewidth}
+% \centering
+% \begin{pspicture}(2,2)
+% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1}
+% \rput(1,1){\expandafter\textcolor\expandafter{%
+% \affectedfgcolor}{\Huge 2}}
+% \end{pspicture}\leavevmode\\
+% \small
+% default
+% \end{minipage}
+% \begin{minipage}[t]{0.4\linewidth}
+% \centering
+% \begin{pspicture}(2,2)
+% \def\affectedfgcolor{green}
+% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1}
+% \rput(1,1){\expandafter\textcolor\expandafter{%
+% \affectedfgcolor}{\Huge 2}}
+% \end{pspicture}
+% \small
+% |\def\affectedfgcolor{green}|
+% \end{minipage}
+% \caption{Use of Foreground Colors for Affected Individuals }
+% \label{fig:affectedfgcolor}
+% \end{figure}
+%
+%
+%\subsection{Node Drawing Commands}
+%\label{sec:node_commands}
+%
+%
+% The node drawing commands are based on the |\pnode| commands from
+% |PSTricks|~\cite[Part~VII]{PSTricks93}. It is the preferred command
+% for drawing, for example, a ``marriage node'' (see the examples
+% below). It is useful to remember this when drawing complex
+% pedigrees.
+%
+%
+%\subsubsection{One Person}
+%\label{sec:person}
+%
+% \DescribeMacro{\pstPerson} The main command in the package is
+% |\pstPerson|. It draws one person, which is a |PSTricks| node. It
+% has the following structure: |\pstPerson|\oarg{options}\marg{id}.
+% The parameter \meta{id} is the name of the node. It can be used to
+% make connections to the node (see below).
+%
+% There are many options to this command. As other |PSTricks|
+% options, the also can be set globally through |\psset| command.
+%
+%
+% \DescribeOptions{sex,condition,deceased,proband,adopted,evaluated}
+% The first group of options describes the state of the person: sex,
+% condition with respect to the decease, whether the person is
+% deceased, is a proband, was adopted and was evaluated. These
+% options are listed in Table~\ref{tab:person_state_opts}. Some
+% options of this group can take only two values: |true| or |false|.
+% For simplicity the clause |=true| can be omitted, so the clauses
+% |adopted=true| and |adopted| are equivalent. Two options: |sex| and
+% |condition| can take several values each (geneticians consider three
+% possibilities for sex: |male|, |female| and |unknown|). Again for
+% simplicity the clauses |sex=| and |condition=| can be omitted, so
+% the invocations |sex=male| and |male| are equivalent, as well as
+% |condition=asymptomatic| and |asymptomatic|.
+%
+% \DescribeOptions{insidetext,abovetext,belowtext,lefttext,righttext}
+% The second group of options (Table~\ref{tab:person_text_opts}) is
+% used to putting text comments inside the symbol, above it, below it
+% or to the right or left to it. The text will be typeset in a
+% |PSTricks| LR-box~\cite{PSTricks93}; additional control over the
+% text position can be achieved by using |\parbox| or \PlainTeX{}
+% boxes.
+%
+% \DescribeOptions{abovetextrp,belowtextrp,lefttextrp,righttextrp}
+% The third group of options (Table~\ref{tab:person_text_rp_opts}) is
+% used to set the text position with respect to the node. They set
+% the reference point of the text. They correspond to the usual
+% notation: |r| being right, |l| being left, |t| being top, |b| being
+% bottom and |B| being baseline. The setting |={}| makes the
+% reference point to be the center of the box. Note that to prevent
+% the text above and below the symbol to clash with the descent lines,
+% the spaces of |2\pslinewidth| are added to the right and to the left
+% of the symbol.
+%
+% Examples of usage of this command are shown in
+% Table~\ref{tab:pstPerson}.
+%
+%
+% \begin{table}
+% \centering
+% \begin{tabular}{l>{\raggedright\obeylines
+% }p{0.3\linewidth}lp{0.3\linewidth}}
+% \hline
+% Option & Values & Default & Description \\
+% \hline
+% |sex| & |male|, |female|, |unknown| & |unknown| & Sex of the
+% person\\
+% |condition| & |normal|, |obligatory|, |asymptomatic|, |affected|
+% & |normal| & The condition of the person\\
+% |deceased| & |true|, |false| & |false| & Whether the person is
+% deceased \\
+% |proband| & |true|, |false| & |false| & Whether the person is a
+% proband\\
+% |adopted| & |true|, |false| & |false| & Whether the individual
+% is adopted \\
+% |evaluated| & |true|, |false| & |false| & Whether a documented
+% evaluation took place\\
+% \hline
+% \end{tabular}
+% \caption{Options Showing State of a Person}
+% \label{tab:person_state_opts}
+% \end{table}
+%
+%
+%
+% \begin{table}
+% \centering
+% \begin{tabular}{l>{\raggedright\obeylines
+% }llp{0.5\linewidth}}
+% \hline
+% Option & Values & Default & Description \\
+% \hline
+% |insidetext| & String & None & A text to be placed inside the
+% symbol (number of individuals, pregnancy, etc.)\\
+% |abovetext| & String & None & A text to be placed above the
+% symbol (name, number, etc.)\\
+% |belowtext| & String & None & A text to be placed below the
+% symbol (name, number, etc.)\\
+% |lefttext| & String & None & A text to be placed to the left of the
+% symbol (name, number, etc.)\\
+% |righttext| & String & None & A text to be placed to the right of the
+% symbol (name, number, etc.)\\
+% \hline
+% \end{tabular}
+% \caption{Options for Making Textual Comments}
+% \label{tab:person_text_opts}
+% \end{table}
+%
+% \begin{table}
+% \centering
+% \begin{tabular}{l>{\raggedright\obeylines
+% }p{0.25\linewidth}lp{0.35\linewidth}}
+% \hline
+% Option & Values & Default & Description \\
+% \hline
+% |abovetextrp| & Combination of |r| or |l| and |t|, |b| or |B| &
+% |lB| & The reference point for the text above the symbol\\
+% |belowtextrp| & Combination of |r| or |l| and |t|, |b| or |B| &
+% |lt| & The reference point for the text below the symbol\\
+% |lefttextrp| & Combination of |r| or |l| and |t|, |b| or |B| &
+% |r| & The reference point for the text to the left the symbol\\
+% |righttextrp| & Combination of |r| or |l| and |t|, |b| or |B| &
+% |l| & The reference point for the text to the right the symbol\\
+% \hline
+% \end{tabular}
+% \caption{Options for Setting Text Reference Point}
+% \label{tab:person_text_rp_opts}
+% \end{table}
+%
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{1.5}
+% \begin{tabular}{>{\tt\bslash pstPerson[}p{0.6\textwidth}<{]\{P\}}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Result\rule{0.5cm}{0cm}\\
+% \hline
+% condition=asymptomatic &
+% \pstPerson[condition=asymptomatic]{A} \\
+% condition=affected, sex=male, evaluated &
+% \pstPerson[condition=affected,sex=male, evaluated]{A} \\
+% obligatory, female &
+% \pstPerson[obligatory, female]{A} \\
+% asymptomatic, male, proband &
+% \pstPerson[asymptomatic, male, proband]{A} \\
+% condition=obligatory, sex=male, deceased &
+% \pstPerson[condition=obligatory, sex=male, deceased]{A} \\
+% sex=female, adopted, condition=affected, abovetext=Jane &
+% \pstPerson[sex=female, adopted, condition=affected,
+% abovetext=Jane]{A} \\
+% sex=male, condition=affected, belowtext=20 yr, deceased &
+% \pstPerson[sex=male, condition=affected, deceased,
+% belowtext=20 yr]{A} \\[5ex]
+% unknown, affected, righttext=\bslash
+% parbox\{1cm\}\{\bslash footnotesize A \bslash\bslash 1 w\} &
+% \pstPerson[unknown, affected,
+% righttext=\parbox{1cm}{\footnotesize A\\1 w}]{A} \\
+% sex=male, insidetex=5 &
+% \pstPerson[sex=male, insidetext=5]{A}\\
+% sex=female, condition=affected, insidetext=P &
+% \pstPerson[sex=female, condition=affected, insidetext=P]{A}\\
+% sex=female, affected, belowtext=\bslash
+% parbox\{1cm\}\{\bslash centering SB\bslash\bslash 2wks\}, deceased &
+% \pstPerson[sex=female, affected, deceased,
+% belowtext=\parbox{1cm}{\centering SB\\ 2wks}]{A} \\[7ex]
+% \hline
+% \end{tabular}
+% \caption{Examples of Persons}
+% \label{tab:pstPerson}
+% \end{table}
+%
+%
+%\subsubsection{Pregnancy Not Carried To Term}
+%\label{sec:abortion}
+%
+% \DescribeMacro{\pstAbortion}
+% The command |\pstAbortion| is used to draw a pregnancy not carried
+% to term: spontaneous abortions or terminated pregnancies. The
+% format of it the same as for the command |\pstPerson| (see
+% Section~\ref{sec:person}): |\pstAbortion|\oarg{options}\marg{id}.
+% However, many of options listed in Table~\ref{tab:person_state_opts} are
+% silently ignored. The only options meaningful for these nodes are
+% |sex| and |condition| (only |normal| and |affected| values are
+% possible). All options listed in Table~\ref{tab:person_text_opts}
+% and \ref{tab:person_text_rp_opts} are valid and have the same
+% meaning as in Section~\ref{sec:person}.
+%
+% \DescribeOption{sab}
+% The command has also an option |sab| with the values |true| or
+% |false|. If it is |true|, the pregnancy is a spontaneous abortion.
+% Otherwise it is terminated. Examples of usage of this command are
+% shown in Table~\ref{tab:abortions}.
+%
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{2}
+% \begin{tabular}{>{\tt\bslash pstAbortion[}p{0.6\textwidth}<{]\{A\}}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Symbol\\
+% \hline
+% belowtext=male & \rule{0cm}{1cm} \pstAbortion[belowtext=male]{A}\\
+% sab, righttext=1w & \pstAbortion[sab, righttext=1w]{A}\\
+% affected & \pstAbortion[affected]{A}\\
+% \hline
+% \end{tabular}
+% \caption{Examples of Abortion Symbols}
+% \label{tab:abortions}
+% \end{table}
+%
+%\subsubsection{Childlessness and Infertility}
+%\label{sec:childness}
+%
+% The symbols for childlessness and infertility are listed under
+% ``line definitions'' in~\cite{PedigreeNomenclature95}. However, to
+% make the placing the symbols on the chart more flexible, we assign
+% nodes to them.
+%
+% \DescribeMacro{\pstChildless}
+% The command for drawing these symbols
+% has the same structure as the other node drawing commands:
+% |\pstChildless}|\oarg{options}\marg{id}.
+% While all options listed in Table~\ref{tab:pstPerson} are valid, the
+% only meaningful one is |belowtext|. Note that the option
+% |belowtextrp| is silently ignored: the text is always centered
+% below the infertility symbol.
+%
+% \DescribeOption{infertile}
+% There is one additional option
+% |infertile|, which can have values |true| of |false|. If it is
+% |false|, the person (or relationship) is childless by choice (or by
+% an unknown reason). The clause |=true| can be omitted.
+%
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{2}
+% \begin{tabular}{>{\tt\bslash pstChildless[}p{0.6\textwidth}<{]\{C\}}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Symbol\rule{0.5cm}{0cm}\\
+% \hline
+% belowtext=vasectomy &
+% \pstChildless[belowtext=vasectomy]{A}\\
+% belowtext=anospermia, infertile &
+% \pstChildless[belowtext=anospermia, infertile]{A}\\
+% \hline
+% \end{tabular}
+% \caption{Examples of Childlessness or Infertility Symbols}
+% \label{tab:childness}
+% \end{table}
+%
+%
+%
+%\subsection{Connection Drawing Commands}
+%\label{sec:lines}
+%
+% The connections in pedigrees are based on |\ncline| and friends.
+% There are, however, some additional features for pedigree
+% connections.
+%
+%
+%\subsubsection{Relationship}
+%\label{sec:relationship}
+%
+%\DescribeMacro{\pstRelationship}
+% Relationships are marriages or other unions. The main command for
+% drawing relationships is
+% |\pstRelationship|\oarg{options}\marg{nodeA}\marg{nodeB}. It draws
+% a relationship line between \marg{nodeA} and \marg{nodeB}. Normal
+% |PSTricks| options like |linestyle=dashed| can be used with the
+% expected effect.
+%
+% \DescribeOptions{broken,consanguinic,descentnode,brokenpos,descentnodepos,rellinecmd}
+% There are also several options specific for this command, listed in
+% Table~\ref{tab:relationship_opts}. The options |broken| and
+% |consanguinic| are self-explanatory. The option |descentnode| is
+% used, if we want the descent lines to start at a node on the
+% relationship line. The name of this descent node must satisfy the
+% usual criteria for the node (see Section~\ref{sec:intro}). The
+% options |brokenpos| and |descentnodepos| determine, where on the
+% relationship line the corresponding objects are placed. The option
+% |rellinecmd| allows to change the default straight line for the
+% relationship to something else, like |ncbar|, |ncangle|, etc.
+% Examples of this command use are shown in
+% Table~\ref{tab:pstRelationship}
+%
+%
+%
+% \begin{table}
+% \centering
+% \begin{tabular}{l>{\raggedright\obeylines
+% }p{0.2\linewidth}lp{0.3\linewidth}}
+% \hline
+% Option & Values & Default & Description \\
+% \hline
+% |broken| & |true|, |false| & |false| & Whether the
+% relationship no longer exists\\
+% |consanguinic| & |true|, |false| & |false| & Whether the
+% relationship is consanguinic\\
+% |descentnode| & Node name & None & A node that will be used
+% to draw descent lines for the relationship \\
+% |brokenpos| & A number between 0 and 1 & 0.3 & Where to put the
+% symbol for broken relationship on the line (as a fraction of the
+% line length)\\
+% |descentnodepos| & A number & 0.5 & Where
+% to put the the descent node on the relationship line\\
+% |rellinecmd| & Name & |ncline| & Name of the line drawing
+% command (without \textbackslash)\\
+% \hline
+% \end{tabular}
+% \caption{Options for Relationship Lines}
+% \label{tab:relationship_opts}
+% \end{table}
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{1.5}
+% \begin{tabular}{>{\tt\raggedright\obeylines }b{0.6\textwidth}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Result\\
+% \hline
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(2.5,0.5)\{\bslash pstPerson[female]\{B\}\}
+% \bslash pstRelationship[broken]\{A\}\{B\}
+% &
+% \begin{pspicture}[shift=-1](3,1)
+% \rput(0.5,0.5){\pstPerson[male]{A}}
+% \rput(2.5,0.5){\pstPerson[female]{B}}
+% \pstRelationship[broken]{A}{B}
+% \end{pspicture}\\
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(2.5,0.5)\{\bslash pstPerson[female]\{B\}\}
+% \bslash pstRelationship[consanguinic]\{A\}\{B\}
+% &
+% \begin{pspicture}[shift=-1](3,1)
+% \rput(0.5,0.5){\pstPerson[male]{A}}
+% \rput(2.5,0.5){\pstPerson[female]{B}}
+% \pstRelationship[consanguinic]{A}{B}
+% \end{pspicture}\\
+% \bslash rput(0.5,1.5)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(2.5,1.5)\{\bslash pstPerson[female]\{B\}\}
+% \bslash rput(1.5,0.5)\{\bslash pstPerson[female]\{C\}\}
+% \bslash pstRelationship[descentnode=AB]\{A\}\{B\}
+% \bslash ncline\{AB\}\{C\}
+% &
+% \begin{pspicture}[shift=-1](3,2)
+% \rput(0.5,1.5){\pstPerson[male]{A}}
+% \rput(2.5,1.5){\pstPerson[female]{B}}
+% \rput(1.5,0.5){\pstPerson[female]{C}}
+% \pstRelationship[descentnode=AB]{A}{B}
+% \ncline{AB}{C}
+% \end{pspicture}\\
+% \bslash rput(0.5,1.5)\{\bslash
+% pstPerson[male, belowtext=1-1]\{A\}\}
+% \bslash rput(2.5,1.5)\{\bslash
+% pstPerson[affected, female, belowtext=1-2]\{B\}\}
+% \bslash rput(1.5,0.6)\{\bslash pstPerson[male,
+% belowtext=2-1]\{C\}\}
+% \bslash pstRelationship[descentnode=AB, rellinecmd=ncangle,
+% angleA=90, angleB=90, descentnodepos=1.5,
+% broken, brokenpos=1.2]\{A\}\{B\}
+% \bslash ncline\{AB\}\{C\}
+% &
+% \begin{pspicture}[shift=-1](3,3)
+% \rput(0.5,1.5){\pstPerson[male,belowtext=1-1]{A}}
+% \rput(2.5,1.5){\pstPerson[affected,female, belowtext=1-2]{B}}
+% \rput(1.5,0.6){\pstPerson[male, belowtext=2-1]{C}}
+% \pstRelationship[descentnode=AB, rellinecmd=ncangle,
+% angleA=90, angleB=90, descentnodepos=1.5,
+% broken, brokenpos=1.2]{A}{B}
+% \ncline{AB}{C}
+% \end{pspicture}\\
+% \hline
+% \end{tabular}
+% \caption{Examples of Relationships}
+% \label{tab:pstRelationship}
+% \end{table}
+%
+%
+%\subsubsection{Descent}
+%\label{sec:pstDescent}
+%
+% The paper~\cite{PedigreeNomenclature95} distinguishes between
+% descent line and sibs line. We, however, will call all segments of
+% the line, joining a parent (or a descent node) and a child the
+% descent line. \DescribeMacro{\pstDescent} The main command for
+% showing parent-child relations is
+% |\pstDescent|\oarg{options}\marg{Parent}\marg{Child}. It has no
+% special options, but the usual |\PSTricks| options for lines are
+% valid. The most important option is |armB|: the length of the
+% segment between the parent node and the sib line. Note that to make
+% the sib line straight the actual direction of the |\ncangle| used by
+% |\pstRelationship| internally is \emph{reversed}: from \marg{Child}
+% to \marg{Parent}. Examples of this command are shown in
+% Table~\ref{tab:pstDescent}. Note the option |linestyle=dashed| used
+% to show social parentage in the first example.
+%
+%
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{1.5}
+% \begin{tabular}{>{\tt\raggedright\obeylines }b{0.6\textwidth}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Result\\
+% \hline
+% \bslash rput(1.5,2)\{\bslash pstPerson[female]\{A\}\}
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[female, adopted]\{B\}\}
+% \bslash rput(1.5,0.5)\{\bslash pstPerson[male]\{C\}\}
+% \bslash rput(2.5,0.5)\{\bslash pstAbortion[female]\{D\}\}
+% \bslash pstDescent[linestyle=dashed]\{A\}\{B\}
+% \bslash pstDescent\{A\}\{C\}
+% \bslash pstDescent\{A\}\{D\}
+% &
+% \begin{pspicture}[shift=-1](3,2.5)
+% \rput(1.5,2){\pstPerson[female]{A}}
+% \rput(0.5,0.5){\pstPerson[female, adopted]{B}}
+% \rput(1.5,0.5){\pstPerson[male]{C}}
+% \rput(2.5,0.5){\pstAbortion[female]{D}}
+% \pstDescent[linestyle=dashed]{A}{B}
+% \pstDescent{A}{C}
+% \pstDescent{A}{D}
+% \end{pspicture}\\
+% \bslash psset\{armB=1\}
+% \bslash rput(0.5,2)\{\bslash pstPerson[male, belowtext=Fred]\{A\}\}
+% \bslash rput(2.5,2)\{\bslash pstPerson[female, obligatory, belowtext=Ginger]\{B\}\}
+% \bslash pstRelationship[descentnode=AB]\{A\}\{B\}
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[male,asymptomatic, belowtext=John]\{C1\}\}
+% \bslash rput(1.5,0.5)\{\bslash pstPerson[female, belowtext=Mary]\{C2\}\}
+% \bslash rput(2.5,0.5)\{\bslash pstAbortion[sab, affected, belowtext=male]\{C3\}\}
+% \bslash pstDescent\{AB\}\{C1\}
+% \bslash pstDescent\{AB\}\{C2\}
+% \bslash pstDescent\{AB\}\{C3\}
+% &
+% \begin{pspicture}[shift=-1](0,-0.2)(3.5,2.5)
+% \psset{armB=1}
+% \rput(0.5,2){\pstPerson[male, belowtext=Fred]{A}}
+% \rput(2.5,2){\pstPerson[female, obligatory, belowtext=Ginger]{B}}
+% \pstRelationship[descentnode=AB]{A}{B}
+% \rput(0.5,0.5){\pstPerson[male,asymptomatic, belowtext=John]{C1}}
+% \rput(1.5,0.5){\pstPerson[female, belowtext=Mary]{C2}}
+% \rput(2.5,0.5){\pstAbortion[sab, affected, belowtext=male]{C3}}
+% \pstDescent{AB}{C1}
+% \pstDescent{AB}{C2}
+% \pstDescent{AB}{C3}
+% \end{pspicture}\\
+% \bslash rput(0.5,1.5)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(2.5,1.5)\{\bslash pstPerson[female]\{B\}\}
+% \bslash pstRelationship[descentnode=AB]\{A\}\{B\}
+% \bslash rput(1.5,0.5)\{\bslash pstChildless[infertile, belowtext=anospermia]\{C\}\}
+% \bslash pstDescent\{AB\}\{C\}
+% &
+% \begin{pspicture}[shift=-1](0,-0.2)(3,2)
+% \rput(0.5,1.5){\pstPerson[male]{A}}
+% \rput(2.5,1.5){\pstPerson[female]{B}}
+% \pstRelationship[descentnode=AB]{A}{B}
+% \rput(1.5,0.5){\pstChildless[belowtext=anospermia, infertile]{C}}
+% \pstDescent{AB}{C}
+% \end{pspicture}\\
+% \hline
+% \end{tabular}
+% \caption{Examples of Descent Lines}
+% \label{tab:pstDescent}
+% \end{table}
+%
+%
+%\subsubsection{Twins}
+%\label{sec:pstTwins}
+%
+%
+%
+% \DescribeMacro{\pstTwins} A special care is needed when we talk
+% about twins. First, the user must define a \emph{twin node}: the
+% node which is used as a nexus for twin lines. Then the following
+% command draws all the necessary
+% lines: \\
+% |\pstTwins|\oarg{options}\marg{Parent}\marg{TwinNode}\marg{LeftTwin}\marg{RightTwin}.
+%
+% \DescribeOptions{monozygotic,qzygotic,mzlinepos,addtwins}
+% The options for this command are listed in
+% Table~\ref{tab:twin_opts}. The option |monozygotic| allows to show
+% that the twins are monozygotic. The actual position of the
+% horizontal line is determined by the option |mzlinepos|. If it is
+% unknown, whether the twins are monozygotic or not, |qzygotic|
+% options draws a question mark, as recommended
+% by~\cite{PedigreeNomenclature95}. Note that |mzlinepos| in this
+% situation helps to position the question mark properly. The option
+% |addtwin| allows to draw pedigrees with more than two twins. It can
+% be repeated several times if necessary. Examples of the usage of
+% this command are shown in Table~\ref{tab:pstTwins}.
+%
+% \begin{table}
+% \centering
+% \begin{tabular}{l>{\raggedright\obeylines
+% }p{0.2\linewidth}lp{0.3\linewidth}}
+% \hline
+% Option & Values & Default & Description \\
+% \hline
+% |monozygotic| & |true|, |false| & |false| & Whether the twins
+% are monozygotic\\
+% |qzygotic| & |true|, |false| & |false| & Whether the
+% monozygoticity of twins is questionable\\
+% |addtwin| & Twin node & Node & Additional twin node id if
+% there are more than two twins (this
+% option may be repeated)\\
+% |mzlinepos| & A number & 0.5 & Where to put the horizontal
+% line for monozygotic twins (as a factor of the total line length)\\
+% \hline
+% \end{tabular}
+% \caption{Options for Twins Lines}
+% \label{tab:twin_opts}
+% \end{table}
+%
+%
+% \begin{table}
+% \centering
+% \def\arraystretch{1.5}
+% \begin{tabular}{>{\tt\raggedright\obeylines }b{0.6\textwidth}c}
+% \hline
+% \multicolumn{1}{l}{Command} & Result\\
+% \hline
+% \bslash rput(1.5,2)\{\bslash pstPerson[female]\{A\}\}
+% \bslash rput(1,1.1)\{\bslash pnode\{Twins\}\}
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[male]\{B\}\}
+% \bslash rput(1.5,0.5)\{\bslash pstPerson[male]\{C\}\}
+% \bslash rput(2.5,0.5)\{\bslash pstPerson[female]\{D\}\}
+% \bslash pstTwins[monozygotic]\{A\}\{Twins\}\{B\}\{C\}
+% \bslash pstDescent\{A\}\{D\}
+% &
+% \begin{pspicture}(3,2.5)
+% \rput(1.5,2){\pstPerson[female]{A}}
+% \rput(1,1.1){\pnode{Twins}}
+% \rput(0.5,0.5){\pstPerson[male]{B}}
+% \rput(1.5,0.5){\pstPerson[male]{C}}
+% \rput(2.5,0.5){\pstPerson[female]{D}}
+% \pstTwins[monozygotic]{A}{Twins}{B}{C}
+% \pstDescent{A}{D}
+% \end{pspicture}\\
+% \bslash rput(0.5,2)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(2.5,2)\{\bslash pstPerson[female]\{B\}\}
+% \bslash pstRelationship[descentnode=AB]\{A\}\{B\}
+% \bslash rput(1.5,1.2)\{\bslash pnode\{Twins\}\}
+% \bslash rput(1,0.5)\{\bslash pstPerson[male]\{C1\}\}
+% \bslash rput(2,0.5)\{\bslash pstPerson[male]\{C2\}\}
+% \bslash pstTwins[qzygotic, mzlinepos=0.8]\{AB\}\{Twins\}\{C1\}\{C2\}
+% &
+% \begin{pspicture}(3,2.5)
+% \rput(0.5,2){\pstPerson[male]{A}}
+% \rput(2.5,2){\pstPerson[female]{B}}
+% \pstRelationship[descentnode=AB]{A}{B}
+% \rput(1.5,1.2){\pnode{Twins}}
+% \rput(1,0.5){\pstPerson[male]{C1}}
+% \rput(2,0.5){\pstPerson[male]{C2}}
+% \pstTwins[qzygotic, mzlinepos=0.8]{AB}{Twins}{C1}{C2}
+% \end{pspicture}\\
+% \bslash rput(1.5,2)\{\bslash pstPerson[male]\{A\}\}
+% \bslash rput(1.5,1.5)\{\bslash pnode\{Twins\}\}
+% \bslash rput(0.5,0.5)\{\bslash pstPerson[female]\{B\}\}
+% \bslash rput(1.2,0.5)\{\bslash pstPerson[female]\{C\}\}
+% \bslash rput(1.9,0.5)\{\bslash pstPerson[female]\{D\}\}
+% \bslash rput(2.6,0.5)\{\bslash pstPerson[female]\{E\}\}
+% \bslash pstTwins[addtwin=C, addtwin=D]\{A\}\{Twins\}\{B\}\{E\}
+% &
+% \begin{pspicture}(3,2.5)
+% \rput(1.5,2){\pstPerson[male]{A}}
+% \rput(1.5,1.5){\pnode{Twins}}
+% \rput(0.5,0.5){\pstPerson[female]{B}}
+% \rput(1.2,0.5){\pstPerson[female]{C}}
+% \rput(1.9,0.5){\pstPerson[female]{D}}
+% \rput(2.6,0.5){\pstPerson[female]{E}}
+% \pstTwins[addtwin=C, addtwin=D]{A}{Twins}{B}{E}
+% \end{pspicture}\\
+% \hline
+% \end{tabular}
+% \caption{Examples of Twins Lines}
+% \label{tab:pstTwins}
+% \end{table}
+%
+%
+%
+%\subsection{Making Trees}
+%\label{sec:trees}
+%
+% As discussed above (Section~\ref{sec:intro}), the medical pedigrees
+% are not necessary trees. Even if they are, they are usually not
+% simple layered trees. Nevertheless sometimes pedigree can be
+% represented as a layered tree. For such cases we provide tree
+% drawing commands. See the discussion in~\cite{pedigree-perl} for
+% more details.
+%
+% \DescribeMacro{\TpstPerson}
+% \DescribeMacro{\TpstAbortion}
+% \DescribeMacro{\TpstChildless}
+% The macros |\TpstPerson|, |\TpstAbortion| and |\TpstChildless| have
+% the same options and arguments as their ``normal'' counterparts. You
+% probably need to use command like
+% \begin{verbatim}
+% \def\psedge{\pstDescent}
+% \psset{armB=1}
+% \end{verbatim}
+% in your code. An example of us of such commands is shown on
+% Figure~\ref{fig:example_tree}. Note that the resulting figure is
+% \emph{not} a tree! The corresponding code is shown on
+% Figure~\ref{fig:example_tree_code}.
+%
+% \begin{figure}
+% \centering
+% \begin{pspicture}(0,1)(7,7)
+% \rput(3,4){%
+% \pstree{\TpstPerson[female, obligatory, belowtext=Ann]{Ann}}{%
+% \def\psedge{\pstDescent}\psset{armB=1}
+% \pstree{\TpstPerson[male, affected, belowtext=John]{John}}{%
+% \TpstPerson[female, belowtext=Sue]{Sue}
+% \TpstPerson[male, belowtext=Paul]{Paul}
+% \TpstAbortion[affected, belowtext=male]{A1}
+% \pstree[thislevelsep=1.2]{\TpstPerson[male,
+% belowtext=Peter, affected, proband]{Peter}}{%
+% \def\psedge{\ncline}
+% \TpstChildless[infertile]{C1}
+% }
+% }
+% \pstree{\TpstPerson[female, belowtext=Mary]{Mary}}{
+% \TpstPerson[female, belowtext=Joan]{Joan}
+% }
+% }
+% }
+% \pstRelationship[consanguinic]{Peter}{Joan}
+% \end{pspicture}
+% \caption{Example of Using Tree-Making Commands}
+% \label{fig:example_tree}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{verbatim}
+% \begin{pspicture}(0,1)(7,7)
+% \rput(3,4){%
+% \pstree{\TpstPerson[female, obligatory, belowtext=Ann]{Ann}}{%
+% \def\psedge{\pstDescent}\psset{armB=1}
+% \pstree{\TpstPerson[male, affected, belowtext=John]{John}}{%
+% \TpstPerson[female, belowtext=Sue]{Sue}
+% \TpstPerson[male, belowtext=Paul]{Paul}
+% \TpstAbortion[affected, belowtext=male]{A1}
+% \pstree[thislevelsep=1.2]{\TpstPerson[male,
+% belowtext=Peter, affected, proband]{Peter}}{%
+% \def\psedge{\ncline}
+% \TpstChildless[infertile]{C1}
+% }
+% }
+% \pstree{\TpstPerson[female, belowtext=Mary]{Mary}}{
+% \TpstPerson[female, belowtext=Joan]{Joan}
+% }
+% }
+% }
+% \pstRelationship[consanguinic]{Peter}{Joan}
+% \end{pspicture}
+% \end{verbatim}
+% \caption{Code Producing Figure~\ref{fig:example_tree}}
+% \label{fig:example_tree_code}
+% \end{figure}
+%
+%
+%
+%\subsection{More Examples}
+%\label{sec:examples}
+%
+% A number of examples were listed above. Here we show even more
+% examples of complex pedigrees.
+%
+% On Figure~\ref{fig:example_PROMM} we show an example of a pedigree
+% from~\cite{Harper01:MDBook}. The corresponding code is listed on
+% Figure~\ref{fig:example_PROMM_code}.
+%
+% \begin{figure}
+% \centering
+% \begin{pspicture}(6,6)
+% \psset{belowtextrp=t, armB=1}
+% \rput(2.5,5.5){\pstPerson[male, deceased, belowtext=I:1]{I:1}}
+% \rput(3.5,5.5){\pstPerson[female, deceased, belowtext=I:2]{I:2}}
+% \pstRelationship[descentnode=I:1_2]{I:1}{I:2}
+% \rput(1,3.5){\pstPerson[female, affected, belowtext=II:1]{II:1}}
+% \pstDescent{I:1_2}{II:1}
+% \rput(2,3.5){\pstPerson[male, belowtext=II:2]{II:2}}
+% \pstRelationship[descentnode=II:1_2]{II:1}{II:2}
+% \rput(3.5,3.5){\pstPerson[male, affected, belowtext=II:3]{II:3}}
+% \pstDescent{I:1_2}{II:3}
+% \rput(4.5,3.5){\pstPerson[female, belowtext=II:4]{II:4}}
+% \pstRelationship[descentnode=II:3_4]{II:3}{II:4}
+% \rput(5.5,3.5){\pstPerson[female, affected, deceased, proband,
+% belowtext=II:5]{II:5}}
+% \pstDescent{I:1_2}{II:5}
+% \rput(0.5,1.5){\pstPerson[female, belowtext=III:1]{III:1}}
+% \pstDescent{II:1_2}{III:1}
+% \rput(1.5,1.5){\pstPerson[female, belowtext=III:2]{III:2}}
+% \pstDescent{II:1_2}{III:2}
+% \rput(2.5,1.5){\pstPerson[female, deceased,
+% belowtext=\parbox{2cm}{\centering III:3\\4/52}]{III:3}}
+% \pstDescent{II:1_2}{III:3}
+% \rput(3.5,1.5){\pstPerson[female, affected,
+% belowtext=III:4]{III:4}}
+% \pstDescent{II:3_4}{III:4}
+% \rput(4.5,1.5){\pstPerson[male, insidetext=?,
+% belowtext=III:5]{III:5}}
+% \pstDescent{II:3_4}{III:5}
+% \end{pspicture}
+% \caption{Example of a Pedigree of a Family With PROMM
+% From~\cite[p.~48]{Harper01:MDBook}}
+% \label{fig:example_PROMM}
+% \end{figure}
+%
+%
+% \begin{figure}
+% \centering
+% \begin{verbatim}
+% \begin{pspicture}(6,6)
+% \psset{belowtextrp=t, armB=1}
+% \rput(2.5,5.5){\pstPerson[male, deceased, belowtext=I:1]{I:1}}
+% \rput(3.5,5.5){\pstPerson[female, deceased, belowtext=I:2]{I:2}}
+% \pstRelationship[descentnode=I:1_2]{I:1}{I:2}
+% \rput(1,3.5){\pstPerson[female, affected, belowtext=II:1]{II:1}}
+% \pstDescent{I:1_2}{II:1}
+% \rput(2,3.5){\pstPerson[male, belowtext=II:2]{II:2}}
+% \pstRelationship[descentnode=II:1_2]{II:1}{II:2}
+% \rput(3.5,3.5){\pstPerson[male, affected, belowtext=II:3]{II:3}}
+% \pstDescent{I:1_2}{II:3}
+% \rput(4.5,3.5){\pstPerson[female, belowtext=II:4]{II:4}}
+% \pstRelationship[descentnode=II:3_4]{II:3}{II:4}
+% \rput(5.5,3.5){\pstPerson[female, affected, deceased, proband,
+% belowtext=II:5]{II:5}}
+% \pstDescent{I:1_2}{II:5}
+% \rput(0.5,1.5){\pstPerson[female, belowtext=III:1]{III:1}}
+% \pstDescent{II:1_2}{III:1}
+% \rput(1.5,1.5){\pstPerson[female, belowtext=III:2]{III:2}}
+% \pstDescent{II:1_2}{III:2}
+% \rput(2.5,1.5){\pstPerson[female, deceased,
+% belowtext=\parbox{2cm}{\centering III:3\\4/52}]{III:3}}
+% \pstDescent{II:1_2}{III:3}
+% \rput(3.5,1.5){\pstPerson[female, affected,
+% belowtext=III:4]{III:4}}
+% \pstDescent{II:3_4}{III:4}
+% \rput(4.5,1.5){\pstPerson[male, insidetext=?,
+% belowtext=III:5]{III:5}}
+% \pstDescent{II:3_4}{III:5}
+% \end{pspicture}
+% \end{verbatim}
+% \caption{Code Producing Figure~\ref{fig:example_PROMM}}
+% \label{fig:example_PROMM_code}
+% \end{figure}
+%
+%
+% A very complex pedigree is used as an example
+% in~\cite{PedigreeNomenclature95}. On
+% Figure~\ref{fig:complex_example} we reproduce this pedigree. The
+% corresponding code is shown on
+% Figures~\ref{fig:complex_example_codeI},
+% \ref{fig:complex_example_codeII} and~\ref{fig:complex_example_codeIII}.
+%
+% \begin{figure}
+% \centering
+% \rotatebox{90}{
+% \begin{pspicture}(0.7,0)(21.3,9)
+% \psset{armB=1.1, hatchsep=1.5pt}
+% \rput(3.5,8){Ethnic Background}
+% \rput(18.5,8){Ethnic Background}
+% \rput(3.5,7.5){\rnode{OType1}{O'Type}}
+% \rput(18.5,7.5){\pnode{Origin2}}
+% \rput(6.5,7.5){\rnode{Quest1}{?}}
+% \rput(1,6.5){\Huge I}
+% \rput(1.5,6.5){\pstPerson[male, belowtext=1]{I1}}
+% \rput(2.5,6.5){\pstPerson[female, obligatory, belowtext=2]{I2}}
+% \rput(3.5,6.5){\pstPerson[male, belowtext=3]{I3}}
+% \rput(4.5,6.5){\pstPerson[male, belowtext=4]{I4}}
+% \rput(5.5,6.5){\pstPerson[male, belowtext=5]{I5}}
+% \rput(6.5,6.5){\pstPerson[female, affected,
+% belowtext=6]{I6}}
+% \rput(2,7.2){\pnode{Twins1}}
+% \rput(4,7.2){\pnode{Twins2}}
+% \pstTwins[armB=0]{OType1}{Twins1}{I1}{I2}
+% \pstTwins[qzygotic, armB=0, mzlinepos=0.8]{OType1}{Twins2}{I3}{I4}
+% \pstDescent[armB=0]{OType1}{I5}
+% \pstDescent[armB=0]{Quest1}{I6}
+% \pstRelationship[descentnode=I5I6]{I5}{I6}
+% \rput(1.5,5.5){\pstChildless{CI1}}
+% \ncline{I1}{CI1}
+% \rput(13.5,6.5){\pstPerson[male, deceased, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering d. 72 y\\7}]{I7}}
+% \rput(15.5,6.5){\pstPerson[female, deceased, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering d. 70 y\\8}]{I8}}
+% \pstRelationship[descentnode=I7I8]{I7}{I8}
+% \rput(21,6.5){\pstPerson[insidetext=5, belowtext=9--14,
+% belowtextrp=rt]{I9}}
+% \pstDescent[armB=0]{Origin2}{I8}
+% \pstDescent[armB=0]{Origin2}{I9}
+% \rput(1,4.5){\Huge II}
+% \rput(2.5,4.5){\pstPerson[male, affected, belowtext=1,
+% abovetext=Proto, abovetextrp=rB]{II1}}
+% \pstDescent{I2}{II1}
+% \rput(4.5,4.5){\pstPerson[female, asymptomatic,
+% belowtext=\parbox{3cm}{32 y\\
+% $E_3-$\\$E_4+$(45n/18n)\\2}, abovetext={Sterrie},
+% abovetextrp=rB, evaluated]{II2}}
+% \pstDescent{I5I6}{II2}
+% \pstRelationship[consanguinic, descentnode=II1II2]{II1}{II2}
+% \rput(5.5,5.2){\rnode{Quest2}{?}}
+% \rput(5.5,4.5){\pstPerson[female, insidetext=D,
+% belowtext=3]{II3}}
+% \ncline{Quest2}{II3}
+% \rput(6.5,5.2){\rnode{Quest3}{?}}
+% \rput(6.5,4.5){\pstPerson[male, insidetext=D,
+% belowtext=4]{II4}}
+% \ncline{Quest3}{II4}
+% \rput(7.5,4.5){\pstPerson[female, belowtext=5]{II5}}
+% \rput(8.5,4.5){\pstPerson[male, abovetext=Gary, abovetextrp=rB,
+% belowtext=\parbox{2cm}{36 y\\$E_3-$\\6},
+% evaluated]{II6}}
+% \rput(9.5,4.5){\pstPerson[male, abovetext={Gene},
+% belowtext=\parbox{2cm}{36 y\\$E_3-$\\7},
+% evaluated]{II7}}
+% \rput(9,5.2){\pnode{Twins3}}
+% \pstTwins[monozygotic]{I5I6}{Twins3}{II6}{II7}
+% \pstRelationship{II5}{II6}
+% \rput(7.5,5.7){O'Type}
+% \rput(11.5,4.5){\pstPerson[female, proband,
+% belowtext=\parbox{1cm}{35 y\\8}, abovetext=Feene]{II8}}
+% \pstRelationship[descentnode=II7II8]{II7}{II8}
+% \rput(13.5,4.5){\pstPerson[male, belowtext=9]{II9}}
+% \pstRelationship[broken, descentnode=II8II9,
+% descentnodepos=0.85]{II8}{II9}
+% \rput(16,4.5){\pstPerson[abovetext=Stacey, female,
+% abovetextrp=rB,
+% belowtext=\parbox{1cm}{33y\\ 10}]{II10}}
+% \def\affectedstyle{fillstyle=crosshatch}
+% \rput(17,4.5){\pstPerson[male, affected, abovetext=Sam,
+% belowtext=\parbox{3cm}{31 y\\ $E_2+$\\
+% 11}, hatchsep=3pt]{II11}}
+% \rput(17,3.5){\pstChildless[infertile]{C2}}
+% \ncline{II11}{C2}
+% \rput(18,4.5){\pstPerson[male, obligatory,
+% abovetext=Donald,
+% belowtext=\parbox{3cm}{29 y\\ $E_2+$ \\
+% 12}]{II12}}
+% \pstDescent{I7I8}{II8}
+% \pstDescent{I7I8}{II10}
+% \pstDescent{I7I8}{II11}
+% \pstDescent{I7I8}{II12}
+% \rput(19,4.5){\pstPerson[female, belowtext=13]{II13}}
+% \pstRelationship[descentnode=II12II13]{II12}{II13}
+% \rput(20,4.5){\pstPerson[female, insidetext=S,
+% belowtext=14]{II14}}
+% \rput(21,4.5){\pstPerson[insidetext=n]{II15}}
+% \pstDescent{I9}{II15}
+% \rput(1,2.5){\Huge III}
+% \rput(3,2.5){\pstPerson[male, adopted, belowtext=1]{III1}}
+% \rput(4,2.5){\pstPerson[insidetext=P, belowtext=2]{III2}}
+% \pstDescent[linestyle=dashed]{II1II2}{III1}
+% \pstDescent{II1II2}{III2}
+% \ncline{II3}{III2}
+% \rput(7.5,2.5){\pstPerson[insidetext=P,
+% belowtext=\parbox{2cm}{6 wk\\3}]{III3}}
+% \pstDescent{II5}{III3}
+% \ncline{II4}{III3}
+% \def\affectedstyle{fillstyle=vlines}
+% \rput(10,2.5){\pstAbortion[affected,
+% belowtext=\parbox{2cm}{\centering
+% female\\18wk\\$E_1+$(tri 21)\\4},
+% belowtextrp=t]{III4}}
+% \rput(11,2.5){\pstPerson[insidetext=P,
+% belowtext=\parbox{1cm}{16wk\\5}]{III5}}
+% \pstDescent{II7II8}{III4}
+% \pstDescent{II7II8}{III5}
+% \rput(12,2.5){\pstAbortion[belowtext=6]{III6}}
+% \rput(13,2.5){\pstAbortion[sab, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering female\\19 wk\\
+% 7}]{III7}}
+% \rput(14,2.5){\pstPerson[adopted, male,
+% belowtext=\parbox{1cm}{10 y\\ 8}]{III8}}
+% \pstDescent{II8II9}{III6}
+% \pstDescent{II8II9}{III7}
+% \pstDescent{II8II9}{III8}
+% \ncline[linestyle=dashed]{II10}{III8}
+% \rput(15,2.5){\pstAbortion[sab, belowtext=9]{III9}}
+% \def\affectedstyle{fillstyle=hlines}
+% \rput(16,2.5){\pstAbortion[sab, belowtextrp=t, affected,
+% belowtext=\parbox{2cm}{\centering male\\ 20 wk\\ $E_1+$
+% (tri 18)\\ 10}]{III10}}
+% \rput(17,2.5){\pstPerson[deceased, female,
+% belowtext=\parbox{1cm}{\centering SB\\32 wk\\
+% 11}]{III11}}
+% \pstDescent{II10}{III9}
+% \pstDescent{II10}{III10}
+% \pstDescent{II10}{III11}
+% \rput(20,2.5){\pstPerson[insidetext=P,
+% belowtext=12]{III12}}
+% \pstDescent{II14}{III12}
+% \ncline{II12II13}{III12}
+% \end{pspicture}
+% }
+% \caption{A Complex Pedigree From~\cite{PedigreeNomenclature95}}
+% \label{fig:complex_example}
+% \end{figure}
+%
+%
+% \begin{figure}
+% \centering
+% \begin{verbatim}
+% \psset{armB=1.1, hatchsep=1.5pt}
+% \rput(3.5,8){Ethnic Background}
+% \rput(18.5,8){Ethnic Background}
+% \rput(3.5,7.5){\rnode{OType1}{O'Type}}
+% \rput(18.5,7.5){\pnode{Origin2}}
+% \rput(6.5,7.5){\rnode{Quest1}{?}}
+% \rput(1,6.5){\Huge I}
+% \rput(1.5,6.5){\pstPerson[male, belowtext=1]{I1}}
+% \rput(2.5,6.5){\pstPerson[female, obligatory, belowtext=2]{I2}}
+% \rput(3.5,6.5){\pstPerson[male, belowtext=3]{I3}}
+% \rput(4.5,6.5){\pstPerson[male, belowtext=4]{I4}}
+% \rput(5.5,6.5){\pstPerson[male, belowtext=5]{I5}}
+% \rput(6.5,6.5){\pstPerson[female, affected,
+% belowtext=6]{I6}}
+% \rput(2,7.2){\pnode{Twins1}}
+% \rput(4,7.2){\pnode{Twins2}}
+% \pstTwins[armB=0]{OType1}{Twins1}{I1}{I2}
+% \pstTwins[qzygotic, armB=0, mzlinepos=0.8]{OType1}{Twins2}{I3}{I4}
+% \pstDescent[armB=0]{OType1}{I5}
+% \pstDescent[armB=0]{Quest1}{I6}
+% \pstRelationship[descentnode=I5I6]{I5}{I6}
+% \rput(1.5,5.5){\pstChildless{CI1}}
+% \ncline{I1}{CI1}
+% \rput(13.5,6.5){\pstPerson[male, deceased, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering d. 72 y\\7}]{I7}}
+% \rput(15.5,6.5){\pstPerson[female, deceased, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering d. 70 y\\8}]{I8}}
+% \pstRelationship[descentnode=I7I8]{I7}{I8}
+% \rput(21,6.5){\pstPerson[insidetext=5, belowtext=9--14,
+% belowtextrp=rt]{I9}}
+% \pstDescent[armB=0]{Origin2}{I8}
+% \pstDescent[armB=0]{Origin2}{I9}
+% \end{verbatim}
+% \caption{Code for Figure~\ref{fig:complex_example}: Generation I}
+% \label{fig:complex_example_codeI}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{verbatim}
+% \rput(1,4.5){\Huge II}
+% \rput(2.5,4.5){\pstPerson[male, affected, belowtext=1,
+% abovetext=Proto, abovetextrp=rB]{II1}}
+% \pstDescent{I2}{II1}
+% \rput(4.5,4.5){\pstPerson[female, asymptomatic,
+% belowtext=\parbox{3cm}{32 y\\
+% $E_3-$\\$E_4+$(45n/18n)\\2}, abovetext={Sterrie},
+% abovetextrp=rB, evaluated]{II2}}
+% \pstDescent{I5I6}{II2}
+% \pstRelationship[consanguinic, descentnode=II1II2]{II1}{II2}
+% \rput(5.5,5.2){\rnode{Quest2}{?}}
+% \rput(5.5,4.5){\pstPerson[female, insidetext=D,
+% belowtext=3]{II3}}
+% \ncline{Quest2}{II3}
+% \rput(6.5,5.2){\rnode{Quest3}{?}}
+% \rput(6.5,4.5){\pstPerson[male, insidetext=D,
+% belowtext=4]{II4}}
+% \ncline{Quest3}{II4}
+% \rput(7.5,4.5){\pstPerson[female, belowtext=5]{II5}}
+% \rput(8.5,4.5){\pstPerson[male, abovetext=Gary, abovetextrp=rB,
+% belowtext=\parbox{2cm}{36 y\\$E_3-$\\6},
+% evaluated]{II6}}
+% \rput(9.5,4.5){\pstPerson[male, abovetext={Gene},
+% belowtext=\parbox{2cm}{36 y\\$E_3-$\\7},
+% evaluated]{II7}}
+% \rput(9,5.2){\pnode{Twins3}}
+% \pstTwins[monozygotic]{I5I6}{Twins3}{II6}{II7}
+% \pstRelationship{II5}{II6}
+% \rput(7.5,5.7){O'Type}
+% \rput(11.5,4.5){\pstPerson[female, proband,
+% belowtext=\parbox{1cm}{35 y\\8}, abovetext=Feene]{II8}}
+% \pstRelationship[descentnode=II7II8]{II7}{II8}
+% \rput(13.5,4.5){\pstPerson[male, belowtext=9]{II9}}
+% \pstRelationship[broken, descentnode=II8II9,
+% descentnodepos=0.85]{II8}{II9}
+% \rput(16,4.5){\pstPerson[abovetext=Stacey, female,
+% abovetextrp=rB,
+% belowtext=\parbox{1cm}{33y\\ 10}]{II10}}
+% \def\affectedstyle{fillstyle=crosshatch}
+% \rput(17,4.5){\pstPerson[male, affected, abovetext=Sam,
+% belowtext=\parbox{3cm}{31 y\\ $E_2+$\\
+% 11}, hatchsep=3pt]{II11}}
+% \rput(17,3.5){\pstChildless[infertile]{C2}}
+% \ncline{II11}{C2}
+% \rput(18,4.5){\pstPerson[male, obligatory,
+% abovetext=Donald,
+% belowtext=\parbox{3cm}{29 y\\ $E_2+$ \\
+% 12}]{II12}}
+% \pstDescent{I7I8}{II8}
+% \pstDescent{I7I8}{II10}
+% \pstDescent{I7I8}{II11}
+% \pstDescent{I7I8}{II12}
+% \rput(19,4.5){\pstPerson[female, belowtext=13]{II13}}
+% \pstRelationship[descentnode=II12II13]{II12}{II13}
+% \rput(20,4.5){\pstPerson[female, insidetext=S,
+% belowtext=14]{II14}}
+% \rput(21,4.5){\pstPerson[insidetext=n]{II15}}
+% \pstDescent{I9}{II15}
+% \end{verbatim}
+% \caption{Code for Figure~\ref{fig:complex_example}: Generation II}
+% \label{fig:complex_example_codeII}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{verbatim}
+% \rput(1,2.5){\Huge III}
+% \rput(3,2.5){\pstPerson[male, adopted, belowtext=1]{III1}}
+% \rput(4,2.5){\pstPerson[insidetext=P, belowtext=2]{III2}}
+% \pstDescent[linestyle=dashed]{II1II2}{III1}
+% \pstDescent{II1II2}{III2}
+% \ncline{II3}{III2}
+% \rput(7.5,2.5){\pstPerson[insidetext=P,
+% belowtext=\parbox{2cm}{6 wk\\3}]{III3}}
+% \pstDescent{II5}{III3}
+% \ncline{II4}{III3}
+% \def\affectedstyle{fillstyle=vlines}
+% \rput(10,2.5){\pstAbortion[affected,
+% belowtext=\parbox{2cm}{\centering
+% female\\18wk\\$E_1+$(tri 21)\\4},
+% belowtextrp=t]{III4}}
+% \rput(11,2.5){\pstPerson[insidetext=P,
+% belowtext=\parbox{1cm}{16wk\\5}]{III5}}
+% \pstDescent{II7II8}{III4}
+% \pstDescent{II7II8}{III5}
+% \rput(12,2.5){\pstAbortion[belowtext=6]{III6}}
+% \rput(13,2.5){\pstAbortion[sab, belowtextrp=t,
+% belowtext=\parbox{2cm}{\centering female\\19 wk\\
+% 7}]{III7}}
+% \rput(14,2.5){\pstPerson[adopted, male,
+% belowtext=\parbox{1cm}{10 y\\ 8}]{III8}}
+% \pstDescent{II8II9}{III6}
+% \pstDescent{II8II9}{III7}
+% \pstDescent{II8II9}{III8}
+% \ncline[linestyle=dashed]{II10}{III8}
+% \rput(15,2.5){\pstAbortion[sab, belowtext=9]{III9}}
+% \def\affectedstyle{fillstyle=hlines}
+% \rput(16,2.5){\pstAbortion[sab, belowtextrp=t, affected,
+% belowtext=\parbox{2cm}{\centering male\\ 20 wk\\ $E_1+$
+% (tri 18)\\ 10}]{III10}}
+% \rput(17,2.5){\pstPerson[deceased, female,
+% belowtext=\parbox{1cm}{\centering SB\\32 wk\\
+% 11}]{III11}}
+% \pstDescent{II10}{III9}
+% \pstDescent{II10}{III10}
+% \pstDescent{II10}{III11}
+% \rput(20,2.5){\pstPerson[insidetext=P,
+% belowtext=12]{III12}}
+% \pstDescent{II14}{III12}
+% \ncline{II12II13}{III12}
+% \end{verbatim}
+% \caption{Code for Figure~\ref{fig:complex_example}: Generation III}
+% \label{fig:complex_example_codeIII}
+% \end{figure}
+%\clearpage
+%
+%
+%\StopEventually{}
+%
+%\section{Implementation}
+%\label{sec:implementation}
+%
+%
+%
+%\subsection{Identification and Setting Up}
+%\label{sec:identification}
+%
+%
+%Traditionally |PSTricks| works in two regimes: the \LaTeX one and
+%the plain one. Probably it is a good idea to keep this
+%tradition. Therefore we will use a \TeX{} file \path{pst-pdgr.tex}
+%and a \LaTeX file \path{pst-pdgr.sty}. They have different means of
+%preserving from loading twice and identification.
+%
+% \begin{macro}{\PSTPedigreeLoaded}
+% A \TeX{} guard |\PSTPedigreeLoaded| prevents the double loading
+% of the file:
+% \begin{macrocode}
+%<*tex>
+\csname PSTPedigreeLoaded\endcsname
+\let\PSTPedigreeLoaded\endinput
+%</tex>
+% \end{macrocode}
+% \end{macro}
+%
+%Now we can start real identification. Note the difference between
+%the ways a \LaTeX{} style, a \LaTeX{} configuration file and a \TeX{}
+%file announce itself
+% \begin{macrocode}
+%<latex>\NeedsTeXFormat{LaTeX2e}
+%<latex>\ProvidesPackage{pst-pdgr}
+%<cfg>\ProvidesFile{pst-pdgr.cfg}
+%<tex>\message{
+[2006/04/18 v0.2a Medical Pedigree with PSTricks]
+%<tex>}
+% \end{macrocode}
+%
+% The \LaTeX{} style is in fact just a wrapper: it calls the
+% configuration file, and then the \TeX file, which does the real
+% work:
+% \begin{macrocode}
+%<*latex>
+\InputIfFileExists{pst-pdgr.cfg}{%
+ \typeout{Loading configuration file pst-pdgr.cfg}}{%
+ \typeout{Configuration file pst-pdgr.cfg is not found}}
+\input{pst-pdgr.tex}
+%</latex>
+% \end{macrocode}
+%
+% Now we are dealing (almost) exclusively with \TeX.
+% \begin{macrocode}
+%<*tex>
+% \end{macrocode}
+%
+% Check the packages we use are loaded:
+% \begin{macrocode}
+\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
+\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi
+\ifx\PSTreeLoaded\endinput\else\input pst-tree.tex\fi
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex\fi
+% \end{macrocode}
+%
+% We set up that |@| symbol:
+% \begin{macrocode}
+\catcode`\@=11\relax
+% \end{macrocode}
+% and set up keys for our package
+% \begin{macrocode}
+\pst@addfams{pst-pdgr}
+% \end{macrocode}
+%
+%\subsection{Global Parameters}
+%\label{sec:impl_globals}
+%
+% These macros define the way affected individuals are drawn
+% \begin{macro}{\affectedbgcolor}
+% The background color:
+% \begin{macrocode}
+\def\affectedbgcolor{gray}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\affectedfgcolor}
+% The foreground color for the text:
+% \begin{macrocode}
+\def\affectedfgcolor{white}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\affectedstyle}
+% And the style:
+% \begin{macrocode}
+\def\affectedstyle{fillstyle=solid, fillcolor=\affectedbgcolor}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@intxtcolor}
+% Normally the color of the inside text for normal persons is the
+% current color:
+% \begin{macrocode}
+\def\pst@pdgr@instxtcolor{\relax}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%\subsection{Options}
+%\label{sec:impl_opts}
+%
+% Here we define the option for the commands and their action.
+%
+%
+%\subsubsection{Choice Options}
+%\label{sec:impl_choice}
+%
+% This groups of options sets a key from a given set of choices.
+% \begin{macro}{\pst@pdgr@sex}
+% First, the sex of the person. The numbers 0, 1 and 2 correspond
+% to the sequence in the alternatives list
+% \begin{macrocode}
+\def\pst@pdgr@sex{0}
+\define@choicekey[psset]{pst-pdgr}{sex}[\pst@pdgr@temp \pst@pdgr@sex]{%
+ unknown,male,female}[unknown]{}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@condition}
+% Next, the condition of the person. The numbers again correspond
+% to the sequence in the alternatives list
+% \begin{macrocode}
+\def\pst@pdgr@condition{0}
+\define@choicekey[psset]{pst-pdgr}{%
+ condition}[\pst@pdgr@temp \pst@pdgr@condition]{%
+ normal,obligatory,asymptomatic,affected}[normal]{}
+% \end{macrocode}
+% \end{macro}
+%
+% A bunch of shortcuts
+% \begin{macrocode}
+\define@key[psset]{pst-pdgr}{unknown}[]{\psset{sex=unknown}}
+\define@key[psset]{pst-pdgr}{male}[]{\psset{sex=male}}
+\define@key[psset]{pst-pdgr}{female}[]{\psset{sex=female}}
+\define@key[psset]{pst-pdgr}{normal}[]{\psset{condition=normal}}
+\define@key[psset]{pst-pdgr}{obligatory}[]{\psset{condition=obligatory}}
+\define@key[psset]{pst-pdgr}{asymptomatic}[]{\psset{condition=asymptomatic}}
+\define@key[psset]{pst-pdgr}{affected}[]{\psset{condition=affected}}
+% \end{macrocode}
+%
+%
+%
+%\subsubsection{Boolean Options}
+%\label{sec:impl_bool}
+%
+% True or false options.
+%
+%
+% \begin{macro}{\pst@pdgr@defineboolkey}
+% We use use our own version of definition of boolean keys, rather
+% than the one provided by |xkeyval|.
+% \begin{macrocode}
+\def\pst@pdgr@defineboolkey#1{%
+\expandafter\newif\csname ifpst@pdgr@#1\endcsname%
+\csname pst@pdgr@#1false\endcsname%
+\define@key[psset]{pst-pdgr}{#1}[true]{%
+ \@nameuse{pst@pdgr@#1##1}}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\ifpst@pdgr@deceased}
+% Whether the individual is deceased:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{deceased}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@proband}
+% Whether the individual is a proband:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{proband}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@adopted}
+% Whether the individual is adopted:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{adopted}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@evaluated}
+% Whether the individual is evaluated:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{evaluated}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@sab}
+% Whether the abortion is SAB:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{sab}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@infertile}
+% Whether the individual or relationship is infertile:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{infertile}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@broken}
+% Whether the relationship is broken:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{broken}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@consanguinic}
+% Whether the relationship is consanguinic:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{consanguinic}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@monozygotic}
+% Whether the twins are monozygotic:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{monozygotic}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifpst@pdgr@qzygotic}
+% Whether the are questionably monozygotic:
+% \begin{macrocode}
+\pst@pdgr@defineboolkey{qzygotic}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%\subsubsection{String Options}
+%\label{sec:impl_string}
+%
+% Options setting up strings.
+%
+%
+% \begin{macro}{\pst@pdgr@insidetext}
+% Text inside the symbol
+% \begin{macrocode}
+\def\pst@pdgr@insidetext{}%
+\define@key[psset]{pst-pdgr}{insidetext}{%
+ \def\pst@pdgr@insidetext{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@belowtext}
+% Text below the symbol
+% \begin{macrocode}
+\def\pst@pdgr@belowtext{}%
+\define@key[psset]{pst-pdgr}{belowtext}{%
+ \def\pst@pdgr@belowtext{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@abovetext}
+% Text above the symbol
+% \begin{macrocode}
+\def\pst@pdgr@abovetext{}%
+\define@key[psset]{pst-pdgr}{abovetext}{%
+ \def\pst@pdgr@abovetext{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@lefttext}
+% Text to the left of the symbol
+% \begin{macrocode}
+\def\pst@pdgr@lefttext{}%
+\define@key[psset]{pst-pdgr}{lefttext}{%
+ \def\pst@pdgr@lefttext{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@righttext}
+% Text to the right of the symbol
+% \begin{macrocode}
+\def\pst@pdgr@righttext{}%
+\define@key[psset]{pst-pdgr}{righttext}{%
+ \def\pst@pdgr@righttext{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@descentnode}
+% Name of the descent node
+% \begin{macrocode}
+\def\pst@pdgr@descentnode{}%
+\define@key[psset]{pst-pdgr}{descentnode}{%
+ \def\pst@pdgr@descentnode{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@rellinecmd}
+% Command to draw relationship lines:
+% \begin{macrocode}
+\def\pst@pdgr@rellinecmd{\ncline}%
+\define@key[psset]{pst-pdgr}{rellinecmd}{%
+ \def\pst@pdgr@rellinecmd{\@nameuse{#1}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% A number of text positioning commands.
+% \begin{macro}{\pst@pdgr@abovetextrp}
+% The command to set the reference position for the text above the
+% symbol.
+% \begin{macrocode}
+\def\pst@pdgr@abovetextrp{lB}%
+\define@key[psset]{pst-pdgr}{abovetextrp}{%
+ \def\pst@pdgr@abovetextrp{#1}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Added the command}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@belowtextrp}
+% The command to set the reference position for the text below the
+% symbol.
+% \begin{macrocode}
+\def\pst@pdgr@belowtextrp{lt}%
+\define@key[psset]{pst-pdgr}{belowtextrp}{%
+ \def\pst@pdgr@belowtextrp{#1}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Added the command}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@lefttextrp}
+% The command to set the reference position for the text to the left
+% of the symbol.
+% \begin{macrocode}
+\def\pst@pdgr@lefttextrp{r}%
+\define@key[psset]{pst-pdgr}{lefttextrp}{%
+ \def\pst@pdgr@lefttextrp{#1}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Added the command}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@righttextrp}
+% The command to set the reference position for the text to the right
+% of the symbol.
+% \begin{macrocode}
+\def\pst@pdgr@righttextrp{l}%
+\define@key[psset]{pst-pdgr}{righttextrp}{%
+ \def\pst@pdgr@righttextrp{#1}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Added the command}
+% \end{macro}
+%
+% The option |addtwin| for |\pstTwin| command is special. Since it
+% can be repeated, we want it to be executed immediately. We store
+% the name of the descentnode in |\pst@pdgr@tempnode|
+% \begin{macrocode}
+\define@key[psset]{pst-pdgr}{addtwin}{\ncline{\pst@pdgr@tempnode}{#1}}%
+\define@key[psset]{pst-pdgr}{descentnode}{%
+ \def\pst@pdgr@descentnode{#1}}%
+% \end{macrocode}
+%
+%
+%
+%\subsubsection{Numerical Options}
+%\label{sec:impl_opts_num}
+%
+% The options to set up numerical values.
+%
+% \begin{macro}{\pst@pdgr@descentnodepos}
+% The position of the descent node on the relationship line
+% \begin{macrocode}
+\def\pst@pdgr@descentnodepos{0.5}
+\define@key[psset]{pst-pdgr}{descentnodepos}{%
+ \pst@checknum{#1}\pst@pdgr@descentnodepos%
+ \ifdim\pst@pdgr@descentnodepos \p@<\z@
+ \def\pst@pdgr@descentnodepos{0.5}%
+ \@pstrickserr{Bad `descentnodepos' value: `#1'. Must be >0}\@ehpa%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@brokenpos}
+% The position of the broken line symbol on the relationship line
+% \begin{macrocode}
+\def\pst@pdgr@brokenpos{0.3}
+\define@key[psset]{pst-pdgr}{brokenpos}{%
+ \pst@checknum{#1}\pst@pdgr@brokenpos%
+ \ifdim\pst@pdgr@brokenpos \p@<\z@
+ \def\pst@pdgr@brokenpos{0.3}%
+ \@pstrickserr{Bad `brokenpos' value: `#1'. Must be >0}\@ehpa%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pst@pdgr@mzlinepos}
+% The position of the monozygotic line or question mark on the twins
+% line:
+% \begin{macrocode}
+\def\pst@pdgr@mzlinepos{0.5}
+\define@key[psset]{pst-pdgr}{mzlinepos}{%
+ \pst@checknum{#1}\pst@pdgr@mzlinepos%
+ \ifdim\pst@pdgr@mzlinepos \p@<\z@%
+ \def\pst@pdgr@mzlinepos{0.5}%
+ \@pstrickserr{Bad `mzlinepos' value: `#1'. Must be >0}\@ehpa%
+ \fi%
+ \ifdim\pst@pdgr@mzlinepos \p@>\p@\relax%
+ \def\pst@pdgr@mzlinepos{0.5}%
+ \@pstrickserr{Bad `mzlinepos' value: `#1'. Must be <1}\@ehpa%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%\subsection{Drawing A Person}
+%\label{sec:impl_pstPerson}
+%
+% And now the main macro.
+%
+% \begin{macro}{\pstPerson}
+% First, the standard processing of optional parameter
+% \begin{macrocode}
+\def\pstPerson{\@ifnextchar[{\pstPerson@i}{\pstPerson@i[]}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstPerson@i}
+% And now we are ready for a real work. Actually we create a
+% |rnode| and put everything inside. We add a |\pspicture| for the
+% node to have non-zero size.
+% \begin{macrocode}
+\def\pstPerson@i[#1]#2{%
+ \rnode{#2}{%
+ \psset{arrows=-, linestyle=solid}%
+ \psset{#1}%
+ \pspicture[shift=-0.25](-0.25,-0.25)(0.25,0.25)%
+% \end{macrocode}
+% Condition processing.
+% \begin{macrocode}
+ \ifcase\pst@pdgr@condition\relax % Nothing to do if normal
+ \or % obligatory
+ \psdot(0,0)%
+ \or % asymptomatic
+ \qline(0,0.25)(0,-0.25)%
+ \or % affected
+ \expandafter\psset\expandafter{\affectedstyle}%
+ \def\pst@pdgr@instxtcolor{\csname\affectedfgcolor\endcsname}%
+ \fi%
+% \end{macrocode}
+% The actual drawing
+% \begin{macrocode}
+ \ifcase\pst@pdgr@sex\relax % First, unknown sex. A diamond
+ \pspolygon(0,0.25)(0.25,0)(0,-0.25)(-0.25,0)%
+ \or % Male. A square with side 0.5
+ \pspolygon(-0.25,-0.25)(-0.25,0.25)(0.25,0.25)(0.25,-0.25)%
+ \or % Female. A circle with radius 0.25
+ \pscircle{0.25}%
+ \fi%
+% \end{macrocode}
+% Necessary for next
+% \begin{macrocode}
+ \psset{fillstyle=none}%
+% \end{macrocode}
+%
+% Deceased or not?
+% \begin{macrocode}
+ \ifpst@pdgr@deceased%
+ \qline(-0.33,-0.33)(0.33,0.33)%
+ \fi%
+% \end{macrocode}
+% Proband or not?
+% \begin{macrocode}
+ \ifpst@pdgr@proband%
+ \psline[arrows=->](-0.55,-0.55)(-0.29,-0.29)%
+ \fi%
+% \end{macrocode}
+% Adopted or not?
+% \begin{macrocode}
+ \ifpst@pdgr@adopted%
+ \psline(-0.25,-0.35)(-0.35,-0.35)(-0.35,0.35)(-0.25,0.35)%
+ \psline(0.25,-0.35)(0.35,-0.35)(0.35,0.35)(0.25,0.35)%
+ \fi%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Slightly increased brackets for the ``adopted''
+% symbol}
+% Evaluated or not?
+% \begin{macrocode}
+ \ifpst@pdgr@evaluated%
+ \rput(0.4,-0.4){$\ast$}%
+ \fi%
+% \end{macrocode}
+%
+% Now a bunch of text putting commands
+% \begin{macrocode}
+ \ifx\pst@pdgr@abovetext\@empty\relax\else%
+ \rput[\pst@pdgr@abovetextrp](0,0.4){%
+ \kern2\pslinewidth\pst@pdgr@abovetext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@belowtext\@empty\relax\else%
+ \rput[\pst@pdgr@belowtextrp](0,-0.4){%
+ \kern2\pslinewidth\pst@pdgr@belowtext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@righttext\@empty\relax\else%
+ \rput[\pst@pdgr@righttextrp](0.4,0){\pst@pdgr@righttext}%
+ \fi%
+ \ifx\pst@pdgr@lefttext\@empty\relax\else%
+ \rput[\pst@pdgr@lefttextrp](-0.4,0){\pst@pdgr@lefttext}%
+ \fi%
+% \end{macrocode}
+% Inside text is a bit more difficult since we want to be able to
+% do reverse video if necessary
+% \begin{macrocode}
+ \ifx\pst@pdgr@insidetext\@empty\relax\else%
+ \rput(0,0){\pst@pdgr@instxtcolor\pst@pdgr@insidetext}%
+ \fi%
+ \endpspicture%
+}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Changed text positioning}
+% \end{macro}
+%
+%
+%\subsection{Drawing A Terminated Pregnancy}
+%\label{sec:impl_pstAbortion}
+%
+% \begin{macro}{\pstAbortion}
+% First, the standard processing of optional parameter
+% \begin{macrocode}
+\def\pstAbortion{\@ifnextchar[{\pstAbortion@i}{\pstAbortion@i[]}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstAbortion@i}
+% And the actual macro:
+% \begin{macrocode}
+\def\pstAbortion@i[#1]#2{%
+ \rnode{#2}{%
+ \psset{arrows=-, linestyle=solid}%
+ \psset{#1}%
+% \end{macrocode}
+%
+% The standard~\cite{PedigreeNomenclature95} requires the lines for
+% the terminated pregnancies to be shorter than for the normal ones.
+% A way to do this is to make the node \emph{higher}:
+% \begin{macrocode}
+ \pspicture[shift=-0.25](-0.25,-0.25)(0.25,0.5)%
+% \end{macrocode}
+%
+%
+% Condition processing:
+% \begin{macrocode}
+ \ifcase\pst@pdgr@condition\relax % Nothing to do if normal
+ \or \relax % Nothing to do if obligatory
+ \or \relax % Nothing to do if asymptomatic
+ \or % affected
+ \expandafter\psset\expandafter{\affectedstyle}%
+ \fi%
+% \end{macrocode}
+%
+% If this is a terminated pregnancy, we use the same symbol as for
+% |deceased|:
+% \begin{macrocode}
+ \ifpst@pdgr@sab\relax\else%
+ \qline(-0.25,0.1)(0.25,0.6)%
+ \fi%
+% \end{macrocode}
+%
+% The actual drawing
+% \begin{macrocode}
+ \pspolygon(-0.25,0.25)(0,0.5)(0.25,0.25)
+% \end{macrocode}
+%
+% And text putting commands
+% \begin{macrocode}
+ \ifx\pst@pdgr@abovetext\@empty\relax\else%
+ \rput[\pst@pdgr@abovetextrp](0,0.65){%
+ \kern2\pslinewidth\pst@pdgr@abovetext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@belowtext\@empty\relax\else%
+ \rput[\pst@pdgr@belowtextrp](0,0.1){%
+ \kern2\pslinewidth\pst@pdgr@belowtext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@righttext\@empty\relax\else%
+ \rput[\pst@pdgr@righttextrp](0.4,0.35){\pst@pdgr@righttext}%
+ \fi%
+ \ifx\pst@pdgr@lefttext\@empty\relax\else%
+ \rput[\pst@pdgr@lefttextrp](-0.4,0.35){\pst@pdgr@lefttext}%
+ \fi%
+ \endpspicture%
+}}%
+% \end{macrocode}
+% \changes{v0.2}{2006/04/18}{Changed text positioning}
+% \end{macro}
+%
+%
+%\subsection{Drawing A Childlessness Symbol}
+%\label{sec:impl_childless}
+%
+% \begin{macro}{\pstChildless}
+% Again, the standard processing of optional parameter
+% \begin{macrocode}
+\def\pstChildless{\@ifnextchar[{\pstChildless@i}{\pstChildless@i[]}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstChildless@i}
+% And the actual macro:
+% \begin{macrocode}
+\def\pstChildless@i[#1]#2{%
+ \rnode{#2}{%
+ \psset{arrows=-, linestyle=solid}%
+ \psset{#1}%
+% \end{macrocode}
+% The actual drawing depends on the |infertile| option. If it is
+% true, we want a double line (an non-zero height). Otherwise this is
+% a single line with zero height:
+% \begin{macrocode}
+ \ifpst@pdgr@infertile % double line
+ \pspicture[shift=-0.05](-0.2,-0.05)(0.2,0.05)%
+ \qline(-0.2,-0.05)(0.2,-0.05)%
+ \qline(-0.2,0.05)(0.2,0.05)%
+ \endpspicture%
+ \else % single line
+ \qline(-0.2,0)(0.2,0)%
+ \fi%
+% \end{macrocode}
+% And the text below the symbol:
+% \begin{macrocode}
+ \ifx\pst@pdgr@belowtext\@empty\relax\else%
+ \rput[t](0,-0.2){\pst@pdgr@belowtext}%
+ \fi%
+}}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+%\subsection{Drawing A Relationship Line}
+%\label{sec:impl_pstRelationship}
+%
+% \begin{macro}{\pstRelationship}
+% The |\pstRelationship| command can have both optional and
+% non-optional parameters:
+% \begin{macrocode}
+\def\pstRelationship{\@ifnextchar[{%
+ \pstRelationship@i}{\pstRelationship@i[]}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstRelationship@i}
+% The actual macro:
+% \begin{macrocode}
+\def\pstRelationship@i[#1]#2#3{%
+ \begingroup%
+ \psset{arrows=-, linestyle=solid, nodesep=0.7\pslinewidth}%
+ \psset{#1}%
+% \end{macrocode}
+% A consanguinic relationship is shown by a double line:
+% \begin{macrocode}
+ \ifpst@pdgr@consanguinic%
+ \psset{doubleline=true}%
+ \else%
+ \psset{doubleline=false}%
+ \fi%
+% \end{macrocode}
+% The actual drawing
+% \begin{macrocode}
+ \pst@pdgr@rellinecmd{#2}{#3}%
+% \end{macrocode}
+% The broken relationships are shown using //:
+% \begin{macrocode}
+ \ifpst@pdgr@broken%
+ \lput(\pst@pdgr@brokenpos){/\kern-0.7ex/}%
+ \fi%
+% \end{macrocode}
+% And the descent node
+% \begin{macrocode}
+ \ifx\pst@pdgr@descentnode\@empty\relax%
+ \else%
+ \lput(\pst@pdgr@descentnodepos){\pnode{\pst@pdgr@descentnode}}%
+ \fi%
+ \endgroup%
+}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+%\subsection{Drawing a Descent Line}
+%\label{sec:impl_pstDescent}
+%
+% \begin{macro}{\pstDescent}
+% The standard option processing command:
+% \begin{macrocode}
+\def\pstDescent{\@ifnextchar[{\pstDescent@i}{\pstDescent@i[]}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstDescent@i}
+% The actual macro. Note the ``reverse'' direction of the line:
+% this is because for |\ncangle| only |armB| is constant, and we
+% want the sib line to be straight
+% \begin{macrocode}
+\def\pstDescent@i[#1]#2#3{%
+ \begingroup%
+ \psset{arrows=-, linestyle=solid, angleA=90, %
+ angleB=-90}%
+ \psset{#1}%
+ \ncangle{#3}{#2}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%\subsection{Drawing Twins}
+%\label{sec:impl_pstTwins}
+%
+% \begin{macro}{\pstTwins}
+% The standard option processing command:
+% \begin{macrocode}
+\def\pstTwins{\@ifnextchar[{\pstTwins@i}{\pstTwins@i[]}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pstTwins@i}
+% The actual macro. Note that we need to keep the twin node in
+% |\pst@pdgr@tempnode| to correctly process |addtwin|.
+% \begin{macrocode}
+\def\pstTwins@i[#1]#2#3#4#5{%
+ \begingroup%
+ \def\pst@pdgr@tempnode{#3}
+ \psset{arrows=-, linestyle=solid, angleA=90, %
+ angleB=-90}%
+ \psset{#1}%
+% \end{macrocode}
+% The descent line from the parent to the twin node
+% \begin{macrocode}
+ \pstDescent{#2}{#3}%
+% \end{macrocode}
+% And the twin lines and nodes
+% \begin{macrocode}
+ \ncline{#3}{#4}%
+ \lput(\pst@pdgr@mzlinepos){\pnode{pst@pdgr@tempnodeA}}%
+ \ncline{#3}{#5}%
+ \lput(\pst@pdgr@mzlinepos){\pnode{pst@pdgr@tempnodeB}}%
+% \end{macrocode}
+% The monozygotic or qzygotic line
+% \begin{macrocode}
+ \ifpst@pdgr@monozygotic%
+ \ncline{pst@pdgr@tempnodeA}{pst@pdgr@tempnodeB}%
+ \else%
+ \ifpst@pdgr@qzygotic%
+ \ncline[linestyle=none]{pst@pdgr@tempnodeA}{pst@pdgr@tempnodeB}%
+ \lput(0.5){?}%
+ \fi%
+ \fi%
+ \endgroup}%
+% \end{macrocode}
+%
+%
+% \end{macro}
+%
+%
+%\subsection{Tree Making Commands}
+%\label{sec:impl_trees}
+%
+% \begin{macro}{\pst@pdgr@makeTcommand}
+% The general macro to create a tree command from the normal command
+% \begin{macrocode}
+\def\pst@pdgr@makeTcommand#1{%
+ \@namedef{T#1}{%
+ \@ifnextchar[{\@nameuse{T#1@i}}{\@nameuse{T#1@i}[]}}%
+ \@namedef{T#1@i}[##1]##2{%
+ \Tr{\@nameuse{#1@i}[##1]{##2}}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% And the macros
+% \begin{macro}{\TpstPerson}
+% Drawing a person
+% \begin{macrocode}
+\pst@pdgr@makeTcommand{pstPerson}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TpstAbortion}
+% Drawing an abortion
+% \begin{macrocode}
+\pst@pdgr@makeTcommand{pstAbortion}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TpstChildless}
+% Drawing a childlessness symbol
+% \begin{macrocode}
+\pst@pdgr@makeTcommand{pstChildless}%
+% \end{macrocode}
+% \end{macro}
+%
+%\subsection{Finishing Touch}
+%\label{sec:finish}
+%
+%
+% \begin{macrocode}
+%</tex>
+% \end{macrocode}
+%\Finale
+%\clearpage
+%
+%\iffalse\bibliography{genetics,neurology,tex}\fi
+%\bibliography{pst-pdgr}
+%\bibliographystyle{plain}
+%
+%\PrintChanges
+%\clearpage
+%\PrintIndex
+%
+\endinput
diff --git a/Master/texmf-dist/source/generic/pst-pdgr/pst-pdgr.ins b/Master/texmf-dist/source/generic/pst-pdgr/pst-pdgr.ins
new file mode 100644
index 00000000000..544dcde06c7
--- /dev/null
+++ b/Master/texmf-dist/source/generic/pst-pdgr/pst-pdgr.ins
@@ -0,0 +1,48 @@
+%
+% Doctrip file for pst-pedigree
+% This file is in public domain
+% $Id: pst-pdgr.ins,v 1.6 2006/04/19 20:30:09 boris Exp $
+%
+\def\batchfile{pst-pdgr.ins}
+\input docstrip
+\keepsilent
+\showprogress
+
+\declarepreamble\cfg
+
+You are allowed and encouraged to modify THIS file.
+
+Good luck
+
+\endpreamble
+
+% This should be deleted in the final version
+\askforoverwritefalse
+
+\generate{%
+ \file{pst-pdgr.tex}{\from{pst-pdgr.dtx}{tex}}
+ \file{pst-pdgr.sty}{\from{pst-pdgr.dtx}{latex}}
+ \usepreamble\empty\usepreamble\cfg\file{pst-pdgr.cfg}{\from{pst-pdgr.dtx}{cfg}}}
+
+\obeyspaces
+\Msg{*********************************************************}%
+\Msg{* Congratulations! You successfully generated the *}%
+\Msg{* pst-pdgr package. *}%
+\Msg{* *}%
+\Msg{* Please move the files pst-pdgr.sty & pst-pdgr.cfg to *}%
+\Msg{* the place where LaTeX files are kept in your system; *}%
+\Msg{* e. g. /usr/share/texmf/tex/latex/pst-pdgr/. Please *}%
+\Msg{* move the file pst-pdgr.tex to the place where generic *}%
+\Msg{* TeX files are kept in your system, for example *}%
+\Msg{* /usr/share/texmf/tex/generic/pstricks/pst-pdgr/. *}%
+\Msg{* *}%
+\Msg{* You may customize your settings by changing the file *}%
+\Msg{* pst-pdgr.cfg. *}%
+\Msg{* *}%
+\Msg{* The documentation is in the file pst-pdgr.pdf. You *}%
+\Msg{* may use the provided Makefile to re-typeset it. *}%
+\Msg{* *}%
+\Msg{* The package is released under LPPL *}%
+\Msg{* *}%
+\Msg{* Happy TeXing! *}%
+\Msg{*********************************************************}% \ No newline at end of file
diff --git a/Master/texmf-dist/tex/generic/pst-pdgr/pst-pdgr.tex b/Master/texmf-dist/tex/generic/pst-pdgr/pst-pdgr.tex
new file mode 100644
index 00000000000..ad8394bdf25
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pst-pdgr/pst-pdgr.tex
@@ -0,0 +1,292 @@
+%%
+%% This is file `pst-pdgr.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pst-pdgr.dtx (with options: `tex')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from pst-pdgr.tex.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file pst-pdgr.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\csname PSTPedigreeLoaded\endcsname
+\let\PSTPedigreeLoaded\endinput
+\message{
+[2006/04/18 v0.2a Medical Pedigree with PSTricks]
+}
+\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
+\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi
+\ifx\PSTreeLoaded\endinput\else\input pst-tree.tex\fi
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex\fi
+\catcode`\@=11\relax
+\pst@addfams{pst-pdgr}
+\def\affectedbgcolor{gray}
+\def\affectedfgcolor{white}
+\def\affectedstyle{fillstyle=solid, fillcolor=\affectedbgcolor}
+\def\pst@pdgr@instxtcolor{\relax}
+\def\pst@pdgr@sex{0}
+\define@choicekey[psset]{pst-pdgr}{sex}[\pst@pdgr@temp \pst@pdgr@sex]{%
+ unknown,male,female}[unknown]{}
+\def\pst@pdgr@condition{0}
+\define@choicekey[psset]{pst-pdgr}{%
+ condition}[\pst@pdgr@temp \pst@pdgr@condition]{%
+ normal,obligatory,asymptomatic,affected}[normal]{}
+\define@key[psset]{pst-pdgr}{unknown}[]{\psset{sex=unknown}}
+\define@key[psset]{pst-pdgr}{male}[]{\psset{sex=male}}
+\define@key[psset]{pst-pdgr}{female}[]{\psset{sex=female}}
+\define@key[psset]{pst-pdgr}{normal}[]{\psset{condition=normal}}
+\define@key[psset]{pst-pdgr}{obligatory}[]{\psset{condition=obligatory}}
+\define@key[psset]{pst-pdgr}{asymptomatic}[]{\psset{condition=asymptomatic}}
+\define@key[psset]{pst-pdgr}{affected}[]{\psset{condition=affected}}
+\def\pst@pdgr@defineboolkey#1{%
+\expandafter\newif\csname ifpst@pdgr@#1\endcsname%
+\csname pst@pdgr@#1false\endcsname%
+\define@key[psset]{pst-pdgr}{#1}[true]{%
+ \@nameuse{pst@pdgr@#1##1}}}
+\pst@pdgr@defineboolkey{deceased}
+\pst@pdgr@defineboolkey{proband}
+\pst@pdgr@defineboolkey{adopted}
+\pst@pdgr@defineboolkey{evaluated}
+\pst@pdgr@defineboolkey{sab}
+\pst@pdgr@defineboolkey{infertile}
+\pst@pdgr@defineboolkey{broken}
+\pst@pdgr@defineboolkey{consanguinic}
+\pst@pdgr@defineboolkey{monozygotic}
+\pst@pdgr@defineboolkey{qzygotic}
+\def\pst@pdgr@insidetext{}%
+\define@key[psset]{pst-pdgr}{insidetext}{%
+ \def\pst@pdgr@insidetext{#1}}%
+\def\pst@pdgr@belowtext{}%
+\define@key[psset]{pst-pdgr}{belowtext}{%
+ \def\pst@pdgr@belowtext{#1}}%
+\def\pst@pdgr@abovetext{}%
+\define@key[psset]{pst-pdgr}{abovetext}{%
+ \def\pst@pdgr@abovetext{#1}}%
+\def\pst@pdgr@lefttext{}%
+\define@key[psset]{pst-pdgr}{lefttext}{%
+ \def\pst@pdgr@lefttext{#1}}%
+\def\pst@pdgr@righttext{}%
+\define@key[psset]{pst-pdgr}{righttext}{%
+ \def\pst@pdgr@righttext{#1}}%
+\def\pst@pdgr@descentnode{}%
+\define@key[psset]{pst-pdgr}{descentnode}{%
+ \def\pst@pdgr@descentnode{#1}}%
+\def\pst@pdgr@rellinecmd{\ncline}%
+\define@key[psset]{pst-pdgr}{rellinecmd}{%
+ \def\pst@pdgr@rellinecmd{\@nameuse{#1}}}%
+\def\pst@pdgr@abovetextrp{lB}%
+\define@key[psset]{pst-pdgr}{abovetextrp}{%
+ \def\pst@pdgr@abovetextrp{#1}}%
+\def\pst@pdgr@belowtextrp{lt}%
+\define@key[psset]{pst-pdgr}{belowtextrp}{%
+ \def\pst@pdgr@belowtextrp{#1}}%
+\def\pst@pdgr@lefttextrp{r}%
+\define@key[psset]{pst-pdgr}{lefttextrp}{%
+ \def\pst@pdgr@lefttextrp{#1}}%
+\def\pst@pdgr@righttextrp{l}%
+\define@key[psset]{pst-pdgr}{righttextrp}{%
+ \def\pst@pdgr@righttextrp{#1}}%
+\define@key[psset]{pst-pdgr}{addtwin}{\ncline{\pst@pdgr@tempnode}{#1}}%
+\define@key[psset]{pst-pdgr}{descentnode}{%
+ \def\pst@pdgr@descentnode{#1}}%
+\def\pst@pdgr@descentnodepos{0.5}
+\define@key[psset]{pst-pdgr}{descentnodepos}{%
+ \pst@checknum{#1}\pst@pdgr@descentnodepos%
+ \ifdim\pst@pdgr@descentnodepos \p@<\z@
+ \def\pst@pdgr@descentnodepos{0.5}%
+ \@pstrickserr{Bad `descentnodepos' value: `#1'. Must be >0}\@ehpa%
+ \fi}%
+\def\pst@pdgr@brokenpos{0.3}
+\define@key[psset]{pst-pdgr}{brokenpos}{%
+ \pst@checknum{#1}\pst@pdgr@brokenpos%
+ \ifdim\pst@pdgr@brokenpos \p@<\z@
+ \def\pst@pdgr@brokenpos{0.3}%
+ \@pstrickserr{Bad `brokenpos' value: `#1'. Must be >0}\@ehpa%
+ \fi}%
+\def\pst@pdgr@mzlinepos{0.5}
+\define@key[psset]{pst-pdgr}{mzlinepos}{%
+ \pst@checknum{#1}\pst@pdgr@mzlinepos%
+ \ifdim\pst@pdgr@mzlinepos \p@<\z@%
+ \def\pst@pdgr@mzlinepos{0.5}%
+ \@pstrickserr{Bad `mzlinepos' value: `#1'. Must be >0}\@ehpa%
+ \fi%
+ \ifdim\pst@pdgr@mzlinepos \p@>\p@\relax%
+ \def\pst@pdgr@mzlinepos{0.5}%
+ \@pstrickserr{Bad `mzlinepos' value: `#1'. Must be <1}\@ehpa%
+ \fi}%
+\def\pstPerson{\@ifnextchar[{\pstPerson@i}{\pstPerson@i[]}}
+\def\pstPerson@i[#1]#2{%
+ \rnode{#2}{%
+ \psset{arrows=-, linestyle=solid}%
+ \psset{#1}%
+ \pspicture[shift=-0.25](-0.25,-0.25)(0.25,0.25)%
+ \ifcase\pst@pdgr@condition\relax % Nothing to do if normal
+ \or % obligatory
+ \psdot(0,0)%
+ \or % asymptomatic
+ \qline(0,0.25)(0,-0.25)%
+ \or % affected
+ \expandafter\psset\expandafter{\affectedstyle}%
+ \def\pst@pdgr@instxtcolor{\csname\affectedfgcolor\endcsname}%
+ \fi%
+ \ifcase\pst@pdgr@sex\relax % First, unknown sex. A diamond
+ \pspolygon(0,0.25)(0.25,0)(0,-0.25)(-0.25,0)%
+ \or % Male. A square with side 0.5
+ \pspolygon(-0.25,-0.25)(-0.25,0.25)(0.25,0.25)(0.25,-0.25)%
+ \or % Female. A circle with radius 0.25
+ \pscircle{0.25}%
+ \fi%
+ \psset{fillstyle=none}%
+ \ifpst@pdgr@deceased%
+ \qline(-0.33,-0.33)(0.33,0.33)%
+ \fi%
+ \ifpst@pdgr@proband%
+ \psline[arrows=->](-0.55,-0.55)(-0.29,-0.29)%
+ \fi%
+ \ifpst@pdgr@adopted%
+ \psline(-0.25,-0.35)(-0.35,-0.35)(-0.35,0.35)(-0.25,0.35)%
+ \psline(0.25,-0.35)(0.35,-0.35)(0.35,0.35)(0.25,0.35)%
+ \fi%
+ \ifpst@pdgr@evaluated%
+ \rput(0.4,-0.4){$\ast$}%
+ \fi%
+ \ifx\pst@pdgr@abovetext\@empty\relax\else%
+ \rput[\pst@pdgr@abovetextrp](0,0.4){%
+ \kern2\pslinewidth\pst@pdgr@abovetext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@belowtext\@empty\relax\else%
+ \rput[\pst@pdgr@belowtextrp](0,-0.4){%
+ \kern2\pslinewidth\pst@pdgr@belowtext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@righttext\@empty\relax\else%
+ \rput[\pst@pdgr@righttextrp](0.4,0){\pst@pdgr@righttext}%
+ \fi%
+ \ifx\pst@pdgr@lefttext\@empty\relax\else%
+ \rput[\pst@pdgr@lefttextrp](-0.4,0){\pst@pdgr@lefttext}%
+ \fi%
+ \ifx\pst@pdgr@insidetext\@empty\relax\else%
+ \rput(0,0){\pst@pdgr@instxtcolor\pst@pdgr@insidetext}%
+ \fi%
+ \endpspicture%
+}}%
+\def\pstAbortion{\@ifnextchar[{\pstAbortion@i}{\pstAbortion@i[]}}%
+\def\pstAbortion@i[#1]#2{%
+ \rnode{#2}{%
+ \psset{arrows=-, linestyle=solid}%
+ \psset{#1}%
+ \pspicture[shift=-0.25](-0.25,-0.25)(0.25,0.5)%
+ \ifcase\pst@pdgr@condition\relax % Nothing to do if normal
+ \or \relax % Nothing to do if obligatory
+ \or \relax % Nothing to do if asymptomatic
+ \or % affected
+ \expandafter\psset\expandafter{\affectedstyle}%
+ \fi%
+ \ifpst@pdgr@sab\relax\else%
+ \qline(-0.25,0.1)(0.25,0.6)%
+ \fi%
+ \pspolygon(-0.25,0.25)(0,0.5)(0.25,0.25)
+ \ifx\pst@pdgr@abovetext\@empty\relax\else%
+ \rput[\pst@pdgr@abovetextrp](0,0.65){%
+ \kern2\pslinewidth\pst@pdgr@abovetext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@belowtext\@empty\relax\else%
+ \rput[\pst@pdgr@belowtextrp](0,0.1){%
+ \kern2\pslinewidth\pst@pdgr@belowtext\kern2\pslinewidth}%
+ \fi%
+ \ifx\pst@pdgr@righttext\@empty\relax\else%
+ \rput[\pst@pdgr@righttextrp](0.4,0.35){\pst@pdgr@righttext}%
+ \fi%
+ \ifx\pst@pdgr@lefttext\@empty\relax\else%
+ \rput[\pst@pdgr@lefttextrp](-0.4,0.35){\pst@pdgr@lefttext}%
+ \fi%
+ \endpspicture%
+}}%
+\def\pstChildless{\@ifnextchar[{\pstChildless@i}{\pstChildless@i[]}}%
+\def\pstChildless@i[#1]#2{%
+ \rnode{#2}{%
+ \psset{arrows=-, linestyle=solid}%
+ \psset{#1}%
+ \ifpst@pdgr@infertile % double line
+ \pspicture[shift=-0.05](-0.2,-0.05)(0.2,0.05)%
+ \qline(-0.2,-0.05)(0.2,-0.05)%
+ \qline(-0.2,0.05)(0.2,0.05)%
+ \endpspicture%
+ \else % single line
+ \qline(-0.2,0)(0.2,0)%
+ \fi%
+ \ifx\pst@pdgr@belowtext\@empty\relax\else%
+ \rput[t](0,-0.2){\pst@pdgr@belowtext}%
+ \fi%
+}}%
+\def\pstRelationship{\@ifnextchar[{%
+ \pstRelationship@i}{\pstRelationship@i[]}}%
+\def\pstRelationship@i[#1]#2#3{%
+ \begingroup%
+ \psset{arrows=-, linestyle=solid, nodesep=0.7\pslinewidth}%
+ \psset{#1}%
+ \ifpst@pdgr@consanguinic%
+ \psset{doubleline=true}%
+ \else%
+ \psset{doubleline=false}%
+ \fi%
+ \pst@pdgr@rellinecmd{#2}{#3}%
+ \ifpst@pdgr@broken%
+ \lput(\pst@pdgr@brokenpos){/\kern-0.7ex/}%
+ \fi%
+ \ifx\pst@pdgr@descentnode\@empty\relax%
+ \else%
+ \lput(\pst@pdgr@descentnodepos){\pnode{\pst@pdgr@descentnode}}%
+ \fi%
+ \endgroup%
+}%
+\def\pstDescent{\@ifnextchar[{\pstDescent@i}{\pstDescent@i[]}}%
+\def\pstDescent@i[#1]#2#3{%
+ \begingroup%
+ \psset{arrows=-, linestyle=solid, angleA=90, %
+ angleB=-90}%
+ \psset{#1}%
+ \ncangle{#3}{#2}%
+ \endgroup}%
+\def\pstTwins{\@ifnextchar[{\pstTwins@i}{\pstTwins@i[]}}%
+\def\pstTwins@i[#1]#2#3#4#5{%
+ \begingroup%
+ \def\pst@pdgr@tempnode{#3}
+ \psset{arrows=-, linestyle=solid, angleA=90, %
+ angleB=-90}%
+ \psset{#1}%
+ \pstDescent{#2}{#3}%
+ \ncline{#3}{#4}%
+ \lput(\pst@pdgr@mzlinepos){\pnode{pst@pdgr@tempnodeA}}%
+ \ncline{#3}{#5}%
+ \lput(\pst@pdgr@mzlinepos){\pnode{pst@pdgr@tempnodeB}}%
+ \ifpst@pdgr@monozygotic%
+ \ncline{pst@pdgr@tempnodeA}{pst@pdgr@tempnodeB}%
+ \else%
+ \ifpst@pdgr@qzygotic%
+ \ncline[linestyle=none]{pst@pdgr@tempnodeA}{pst@pdgr@tempnodeB}%
+ \lput(0.5){?}%
+ \fi%
+ \fi%
+ \endgroup}%
+\def\pst@pdgr@makeTcommand#1{%
+ \@namedef{T#1}{%
+ \@ifnextchar[{\@nameuse{T#1@i}}{\@nameuse{T#1@i}[]}}%
+ \@namedef{T#1@i}[##1]##2{%
+ \Tr{\@nameuse{#1@i}[##1]{##2}}}}%
+\pst@pdgr@makeTcommand{pstPerson}%
+\pst@pdgr@makeTcommand{pstAbortion}%
+\pst@pdgr@makeTcommand{pstChildless}%
+\endinput
+%%
+%% End of file `pst-pdgr.tex'.
diff --git a/Master/texmf-dist/tex/latex/pst-pdgr/pst-pdgr.cfg b/Master/texmf-dist/tex/latex/pst-pdgr/pst-pdgr.cfg
new file mode 100644
index 00000000000..e17d3e21e8b
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pst-pdgr/pst-pdgr.cfg
@@ -0,0 +1,17 @@
+%%
+%% This is file `pst-pdgr.cfg',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pst-pdgr.dtx (with options: `cfg')
+%%
+%% You are allowed and encouraged to modify THIS file.
+%%
+%% Good luck
+%%
+\ProvidesFile{pst-pdgr.cfg}
+[2006/04/18 v0.2a Medical Pedigree with PSTricks]
+\endinput
+%%
+%% End of file `pst-pdgr.cfg'.
diff --git a/Master/texmf-dist/tex/latex/pst-pdgr/pst-pdgr.sty b/Master/texmf-dist/tex/latex/pst-pdgr/pst-pdgr.sty
new file mode 100644
index 00000000000..6caa76153cb
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pst-pdgr/pst-pdgr.sty
@@ -0,0 +1,32 @@
+%%
+%% This is file `pst-pdgr.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pst-pdgr.dtx (with options: `latex')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from pst-pdgr.sty.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file pst-pdgr.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pst-pdgr}
+[2006/04/18 v0.2a Medical Pedigree with PSTricks]
+\InputIfFileExists{pst-pdgr.cfg}{%
+ \typeout{Loading configuration file pst-pdgr.cfg}}{%
+ \typeout{Configuration file pst-pdgr.cfg is not found}}
+\input{pst-pdgr.tex}
+\endinput
+%%
+%% End of file `pst-pdgr.sty'.
diff --git a/Master/texmf-dist/tpm/pst-pdgr.tpm b/Master/texmf-dist/tpm/pst-pdgr.tpm
new file mode 100644
index 00000000000..21fd380b34a
--- /dev/null
+++ b/Master/texmf-dist/tpm/pst-pdgr.tpm
@@ -0,0 +1,33 @@
+<!DOCTYPE rdf:RDF SYSTEM "../../support/tpm.dtd">
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:TPM="http://texlive.dante.de/">
+ <rdf:Description about="http://texlive.dante.de/texlive/Package/pst-pdgr.zip">
+ <TPM:Name>pst-pdgr</TPM:Name>
+ <TPM:Type>Package</TPM:Type>
+ <TPM:Date>2006/05/18 21:55:00</TPM:Date>
+ <TPM:Version></TPM:Version>
+ <TPM:Creator>karl</TPM:Creator>
+ <TPM:Title>The pst-pdgr package.</TPM:Title>
+ <TPM:Description></TPM:Description>
+ <TPM:Author></TPM:Author>
+ <TPM:Size>276886</TPM:Size>
+ <TPM:Build/>
+ <TPM:RunFiles size="12877">
+texmf-dist/tex/generic/pst-pdgr/pst-pdgr.tex
+texmf-dist/tex/latex/pst-pdgr/pst-pdgr.cfg
+texmf-dist/tex/latex/pst-pdgr/pst-pdgr.sty
+texmf-dist/tpm/pst-pdgr.tpm
+ </TPM:RunFiles>
+ <TPM:DocFiles size="182773">
+texmf-dist/doc/generic/pst-pdgr/README
+texmf-dist/doc/generic/pst-pdgr/pst-pdgr.bib
+texmf-dist/doc/generic/pst-pdgr/pst-pdgr.pdf
+ </TPM:DocFiles>
+ <TPM:SourceFiles size="82461">
+texmf-dist/source/generic/pst-pdgr/Makefile
+texmf-dist/source/generic/pst-pdgr/pst-pdgr.dtx
+texmf-dist/source/generic/pst-pdgr/pst-pdgr.ins
+ </TPM:SourceFiles>
+ <TPM:Provides>Package/pst-pdgr</TPM:Provides>
+ </rdf:Description>
+</rdf:RDF>
+
diff --git a/Master/texmf/lists/pst-pdgr b/Master/texmf/lists/pst-pdgr
new file mode 100644
index 00000000000..915ad2f9ba4
--- /dev/null
+++ b/Master/texmf/lists/pst-pdgr
@@ -0,0 +1,12 @@
+texmf-dist/doc/generic/pst-pdgr/README
+texmf-dist/doc/generic/pst-pdgr/pst-pdgr.bib
+texmf-dist/doc/generic/pst-pdgr/pst-pdgr.pdf
+texmf-dist/source/generic/pst-pdgr/Makefile
+texmf-dist/source/generic/pst-pdgr/pst-pdgr.dtx
+texmf-dist/source/generic/pst-pdgr/pst-pdgr.ins
+texmf-dist/tex/generic/pst-pdgr/pst-pdgr.tex
+texmf-dist/tex/latex/pst-pdgr/pst-pdgr.cfg
+texmf-dist/tex/latex/pst-pdgr/pst-pdgr.sty
+texmf-dist/tpm/pst-pdgr.tpm
+
+texmf/lists/pst-pdgr
diff --git a/Master/texmf/tpm/collection-pstricks.tpm b/Master/texmf/tpm/collection-pstricks.tpm
index 6cdb77074c0..37cc5961849 100644
--- a/Master/texmf/tpm/collection-pstricks.tpm
+++ b/Master/texmf/tpm/collection-pstricks.tpm
@@ -7,8 +7,8 @@
<TPM:Version></TPM:Version>
<TPM:Creator>rahtz</TPM:Creator>
<TPM:Title>PSTricks packages</TPM:Title>
- <TPM:Description>PSTricks packages</TPM:Description>
- <TPM:Author>Herbert Voss</TPM:Author>
+ <TPM:Description>Additional PSTricks packages</TPM:Description>
+ <TPM:Author></TPM:Author>
<TPM:Size>1987</TPM:Size>
<TPM:Build>
<TPM:RunPatterns>texmf/tpm/collection-pstricks.tpm</TPM:RunPatterns>
@@ -36,6 +36,7 @@
<TPM:Package name="pst-math"/>
<TPM:Package name="pst-optic"/>
<TPM:Package name="pst-osci"/>
+ <TPM:Package name="pst-pdgr"/>
<TPM:Package name="pst-poly"/>
<TPM:Package name="pst-slpe"/>
<TPM:Package name="pst-uml"/>