summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/shipunov/tex/biokey.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/shipunov/tex/biokey.sty')
-rw-r--r--macros/latex/contrib/shipunov/tex/biokey.sty169
1 files changed, 169 insertions, 0 deletions
diff --git a/macros/latex/contrib/shipunov/tex/biokey.sty b/macros/latex/contrib/shipunov/tex/biokey.sty
new file mode 100644
index 0000000000..f34f79bb15
--- /dev/null
+++ b/macros/latex/contrib/shipunov/tex/biokey.sty
@@ -0,0 +1,169 @@
+% Author: Alexey Shipunov, dactylorhiza@gmail.com
+
+\ProvidesPackage{biokey}%
+ [2019/10/02 v.3.11 Typesetting biological identification keys]
+
+% 20191002 \ZZZ updated, \DD added
+% 20150911 \Ver@T added to make keys more readable
+% 20150912 Alien stuff removed, \FK supplied with the short vertical space
+% 20150913 Antitheses aligned better now, comments' breaks adjusted
+% 20150916 Better aligment for backtrack links
+% 20150920 'biokey' environment resets theses counter (if hyperref is used, specify 'hypertexnames=false')
+
+\newlength\TML@a
+\newlength\TML@b
+\newlength\TML@c
+\newbox\dot@box
+\newcounter{TMC@Ba}
+
+\newif\if@MARG
+\DeclareOption{nomargin}{\@MARGfalse}
+\DeclareOption{margin}{\@MARGtrue}
+
+\ExecuteOptions{nomargin}
+\ProcessOptions
+
+% REFERENCES
+% Main reference
+\def\SameDecl{\samepage}
+\AtBeginDocument{\setbox\dot@box=\hbox to .5em{\hss.\hss}}
+\def\dbox@fill{\leaders\copy%
+ \dot@box\hskip 4.3\wd\dot@box plus1fill minus .3\wd\dot@box}
+\def\dbox@fil{\leaders\copy\dot@box\hfil}
+% Against vertical breaks
+\def\dot@leaders{\doublehyphendemerits0\finalhyphendemerits0%
+ \parfillskip0pt\SameDecl%
+ \penalty800\dbox@fill\penalty400%
+ \vadjust{}\penalty10000\dbox@fil}
+\def\T#1\par{{\dot@leaders\SHRIFTN{#1}\par}\par}
+\def\TT#1\par{{\dot@leaders\SHRIFTN{#1}\par}\par}
+% `Automatic' paragraph aligment
+\def\TTTT#1\par{{\tolerance 9999 \dot@leaders\SHRIFTN{#1}\par}\par}
+
+% Old style reference
+\def\old@f{\hbox to .5em{\hss.\hss}}
+\def\old@filt{\xleaders\old@f\hfill}
+\def\old@dot@leaders{\doublehyphendemerits0\finalhyphendemerits0%
+ \parfillskip0pt\SameDecl%
+ \unskip\nobreak\old@filt\penalty50%
+ \xleaders\old@f\hskip2em%
+ \vadjust{}\nobreak\old@filt}
+\def\TTT#1\par{{\old@dot@leaders\SHRIFTN{#1}\par}\par}
+
+% OBJECTS
+% With indent
+\def\N#1\par{{\penalty50\SameDecl%
+ \hskip 1em plus 1.2em minus .2em
+\penalty200\hskip0pt\SHRIFTN{#1}\par}\par}
+
+% With glue, but without leaders
+\def\NN#1\par{{\parfillskip0pt\SameDecl%
+ \doublehyphendemerits0\finalhyphendemerits0%
+ \penalty10000\hskip 2em plus 1fil\penalty400%
+ \vadjust{}\penalty10000\hfil\SHRIFTN{#1}\par}\par}
+
+% Object as new paragraph
+\def\NNN#1\par{{\nopagebreak\par%
+ \Indent@C\SHRIFTN{#1}\par}\par}
+
+% Hanging punct
+\def\VT{\@ifstar{\H@P}{\H@@P}}
+% Leaders stopped on right margin of text
+\def\H@@P#1\par{{\dot@leaders
+ \makebox[0pt][l]{\hspace{.5em}#1}\par}\par}
+% Leaders stopped before punct
+\def\H@P#1\par{{\dot@leaders
+ \makebox[-.5em][l]{#1}\par}\par}
+
+% THESES AND ANTITHESES
+% Hooks...
+\def\SHRIFTZ{\relax}
+\def\SHRIFTN{\relax}
+
+% Lengths (hang = 2em)
+\settowidth{\TML@b}{\SHRIFTZ{.}}
+\TML@a=1.6em % found visually
+\addtolength{\TML@a}{-\TML@b}
+\addtolength{\TML@b}{0.6em} % found visually
+\def\Ver@T{\vspace{.5\baselineskip}}
+\def\Indent@T{\hangindent2em\noindent}
+\def\OTSTUP{2em}
+\def\Indent@C{\parindent\OTSTUP\hangindent\parindent}
+
+% Common thesa
+\def\Z#1. {\Ver@T\Indent@T\makebox[1.5em][r]%
+ {\SHRIFTZ{#1.}}\hspace{0.5em}}
+% Thesa with back reference
+\def\ZZ#1(#2).{\Ver@T\Indent@T\makebox[\TML@a][r]%
+ {\SHRIFTZ{#1}}\hspace{0.45em}\SHRIFTZ{(#2).}}
+% Antitheses
+\def\ZZZ#1{\Indent@T\makebox[1.5em][r]{#1}% older variant: \makebox[\TML@a][r]
+ \hspace{0.5em}} % to make exactly 2em box like in \TE and \SE
+
+% First
+\def\AN{\ZZZ{$-$}}
+% You can replace it to $+$
+\def\Ap{\ZZZ{$+$}}
+% Second (with trichotomy)
+\def\AAN{\ZZZ{$=$}}
+% Third (with tetrachotomy)
+\def\AAAN{\ZZZ{$\equiv$}}
+
+% COMMENTS
+\def\FK#1\par{{\nopagebreak\vspace{.1\baselineskip}\nopagebreak%
+ \Indent@C%
+ \footnotesize#1\par\smallskip}}
+% You can use it as `numberless thesa'
+\def\KOM#1\par{{\nopagebreak\Ver@T%
+ \Indent@C#1\par\smallskip}}
+% Comment for the object
+\def\VPRAVO#1 \par{{\nopagebreak\vskip-\parskip\nopagebreak%
+ \hbox to \linewidth {\hfil #1}\par}}
+
+% AUTOMATIC KEYS
+\def\TEZA#1{\Ver@T\refstepcounter{TMC@Ba}\label{#1}%
+ \Indent@T\makebox[1.5em][r]%
+ {\SHRIFTZ{\arabic{TMC@Ba}.}}\hspace{0.5em}\ignorespaces}
+\def\STEZA#1#2{\Ver@T\refstepcounter{TMC@Ba}\label{#1}%
+ \Indent@T\makebox[\TML@a][r]%
+ {\SHRIFTZ{\arabic{TMC@Ba}}}\hspace{0.45em}\SHRIFTZ{(\ref{#2}).}}
+\def\SSYLKA#1{\T\ref{#1}.}
+% Shorthands
+\let\TE\TEZA
+\let\SE\STEZA
+\let\SS\SSYLKA
+\def\DD#1{\T\ref{#1}.} % this is fo the case when \SS does not work
+
+% IDENTED KEYS
+\newenvironment{SDVIG}[1][1]
+ {\TML@c=#1em \let\TML@@c\TML@c
+ \def\Indent@T{\hangindent=2em\parindent=0em
+ \advance\hangindent by 2\TML@@c
+ \advance\parindent by 2\TML@@c}
+ \def\Indent@C{\hangindent=2em\parindent=2em
+ \advance\hangindent by 2\TML@@c
+ \advance\parindent by 2\TML@@c}}{}
+% Shorthands
+\let\LE\SDVIG
+\let\endLE\endSDVIG
+
+% KEYS WITH MARKERS ON THE LEFT PAGE MARGIN
+\if@MARG
+\def\Indent@C{\relax}%
+\def\Z#1. {\noindent\makebox[0em][r]%
+ {\SHRIFTZ{#1.}\hspace{0.5em}}}%
+\def\ZZ#1(#2).{\settowidth{\TML@c}{(#2)}%
+ \noindent\makebox[\TML@c][r]%
+ {\SHRIFTZ{#1}\hspace{0.5em}\SHRIFTZ{(#2).}}}%
+\def\ZZZ#1{\noindent\makebox[0em][r]%
+ {#1\hspace{\TML@b}}}%
+\else\relax
+\fi
+
+% ENVIRONMENT WHICH RESETS THESES COUNTER
+% If hyperref used, requires option "hypertexnames=false"
+\newenvironment{biokey}{%
+ \setcounter{TMC@Ba}{0}%
+ \relax}
+
+\endinput