diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-12 23:54:11 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-12 23:54:11 +0000 |
commit | 84e3bbf8e8ebbd02708e2a22320ec11c520a441b (patch) | |
tree | 696c88f2766697b175fb733fbfd66626a8790eeb | |
parent | fa6f976f4c70a9e26eaecc0d2f932c440f961646 (diff) |
dichokey
git-svn-id: svn://tug.org/texlive/trunk@824 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/tex/latex/dichokey/dichokey.sty | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/dichokey/dichokey.sty b/Master/texmf-dist/tex/latex/dichokey/dichokey.sty new file mode 100644 index 00000000000..dcf9ff56b61 --- /dev/null +++ b/Master/texmf-dist/tex/latex/dichokey/dichokey.sty @@ -0,0 +1,111 @@ +% Dichokey.sty, first version of 2 january 1998 by Nico Dam. +% This version of 17 dec 1999. +% +% This LaTeX2e style file defines the environment Key in which +% dichotomous identification keys can be constructed. +% Numbering of alternatives and indentation are taken of care of +% automatically. +% The key should be STRICTLY dichotomous. +% +% Directions for use: +% The key should be constructed within the environment Key . The +% environment has one parameter, that is used as first part of the name +% when a species is keyed out (usually an abbreviation of the genus +% name). +% Within the key, every alternative should begin with the command \alter +% If a species is keyed out, use the command \name[option]{name} +% (otherwise just continue with the next alternative). +% The optional argument will be used instead of the parameter provided +% on entering the environment Key . +% +% To do: provide example file (e.g. rhodocyb.tex) +% +\usepackage{calc} +\usepackage{ifthen} +\def\hang{\hangindent\parindent} +\newcounter{couplet}% counts current couplet +\newcounter{lastcouplet}% counts highest couplet number +\newcounter{bincouplet}% binary counter of couplet availability +\newcounter{binarycounter}% binary counter of indentation level +\newcounter{indentcounter}% decimal counter of indentation level +\newcounter{backsteps}% number of steps to be retreated after a species is keyed out +\newboolean{named}% true if alternative results in a name +\newsavebox{\gprefix}% Abbreviation of genus name, parameter for Key +\newlength{\altindent}% additional indentation of each key level +\setlength{\altindent}{4mm} +\newlength{\keylabelwidth}% width of label of each key step +\setlength{\keylabelwidth}{2em}% +\newlength{\oldparindent} +\newenvironment{Key}[1]% + {\setcounter{couplet}{0}% + \setcounter{lastcouplet}{0}% + \setcounter{binarycounter}{0}% + \setcounter{bincouplet}{1}% + \setcounter{indentcounter}{0}% + \setboolean{named}{false}% + \sbox{\gprefix}{\textbf{#1}}% + \setlength{\oldparindent}{\parindent}% + \setlength{\hangindent}{0pt}% + \setlength{\parindent}{0pt}% + } + {\par\setlength{\parindent}{\oldparindent}} +% +% The following definition of name suppresses dotfill if the species +% name doesn't fit on the current line, but has to occur on its own at +% the line below (made by Sander Stoks). +% Added optional argument to be used instead of \gprefix (Nico Dam). +% +\newcommand{\name}[2][\usebox{\gprefix}]% + {\setboolean{named}{true} + \leavevmode + \unskip\nobreak\hfil + \penalty 150 + \leaders\hbox{\thinspace.\thinspace}\hskip 12pt plus 1fill + \vadjust{}\hfil + \hbox{\textbf{#1}\textbf{\mbox{#2}}}% + {\parfillskip=0pt\par}} +% +\newcounter{temp}% temporary storage of counter +\newcounter{delta}% temporary storage of decrease of counter +\newcommand{\alter}% + {\par% + \ifthenelse{\boolean{named}}% +% NAMED = TRUE + {\setcounter{backsteps}{0}% + \setcounter{delta}{1}% + \setcounter{temp}{\value{binarycounter}+1}% +% calculate new couplet number + \whiledo{\isodd{\value{temp}}}% + {\addtocounter{backsteps}{1}% + \setcounter{delta}{\value{delta}*2}% + \addtocounter{temp}{-1}% + \setcounter{temp}{\value{temp}/2}% + \addtocounter{temp}{1}% + }% + \addtocounter{binarycounter}{-\value{delta}}% + \setcounter{couplet}{\value{lastcouplet}-\value{backsteps}}% +% calculate new level of indentation + \setcounter{backsteps}{0}% + \setcounter{temp}{\value{indentcounter}+1} + \whiledo{\isodd{\value{temp}}}% + {\addtocounter{backsteps}{1}% + \setcounter{indentcounter}{\value{indentcounter}/2}% + \setcounter{temp}{\value{indentcounter}+1} + }% + \addtocounter{indentcounter}{-1}% + \addtolength{\parindent}{-\altindent*\value{backsteps}}\hang% + }% +% NAMED = FALSE + {\setcounter{binarycounter}{\value{binarycounter}*2+1}% + \addtocounter{lastcouplet}{1}% + \setcounter{couplet}{\value{lastcouplet}}% + \setcounter{indentcounter}{\value{indentcounter}*2+1}% + \addtolength{\parindent}{\altindent}\hang% + }% + \setboolean{named}{false}% + \hspace*{-\keylabelwidth}\hspace*{-2mm}% + \parbox[t]{\keylabelwidth}{\hfill{\thecouplet}.}% + \hspace*{2mm}% + } +% +\newcommand{\panic}[1]{\addtolength{\parindent}{\altindent*{#1}}} |