diff options
author | Karl Berry <karl@freefriends.org> | 2006-05-30 00:14:18 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-05-30 00:14:18 +0000 |
commit | c784f93856c0d51f9796295d01a735d10b9faebd (patch) | |
tree | 27a0c661023b27daf4b28dedbff40ce89889c99a | |
parent | bbe4b4aa208edad91c551fcac1c8af2a6a7d61c1 (diff) |
new pstricks package pst-pdgr
git-svn-id: svn://tug.org/texlive/trunk@1618 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-x | Build/cdbuild/ctan2tds.pl | 77 | ||||
-rwxr-xr-x | Build/tools/tpm-ctan-check | 8 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-pdgr/README | 26 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.bib | 50 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.pdf | bin | 0 -> 180016 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/generic/pst-pdgr/Makefile | 54 | ||||
-rw-r--r-- | Master/texmf-dist/source/generic/pst-pdgr/pst-pdgr.dtx | 2158 | ||||
-rw-r--r-- | Master/texmf-dist/source/generic/pst-pdgr/pst-pdgr.ins | 48 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-pdgr/pst-pdgr.tex | 292 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/pst-pdgr/pst-pdgr.cfg | 17 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/pst-pdgr/pst-pdgr.sty | 32 | ||||
-rw-r--r-- | Master/texmf-dist/tpm/pst-pdgr.tpm | 33 | ||||
-rw-r--r-- | Master/texmf/lists/pst-pdgr | 12 | ||||
-rw-r--r-- | Master/texmf/tpm/collection-pstricks.tpm | 5 |
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 Binary files differnew file mode 100644 index 00000000000..4f3d673d861 --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-pdgr/pst-pdgr.pdf 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"/> |