summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/alnumsec
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/alnumsec
Initial commit
Diffstat (limited to 'macros/latex/contrib/alnumsec')
-rw-r--r--macros/latex/contrib/alnumsec/README32
-rw-r--r--macros/latex/contrib/alnumsec/alnumsec.dtx574
-rw-r--r--macros/latex/contrib/alnumsec/alnumsec.ins102
-rw-r--r--macros/latex/contrib/alnumsec/alnumsec.pdfbin0 -> 146651 bytes
4 files changed, 708 insertions, 0 deletions
diff --git a/macros/latex/contrib/alnumsec/README b/macros/latex/contrib/alnumsec/README
new file mode 100644
index 0000000000..0b508035a3
--- /dev/null
+++ b/macros/latex/contrib/alnumsec/README
@@ -0,0 +1,32 @@
+Abstract
+
+ alphanumeric sectioning numbering with standard sectioning commands
+
+ This package allows you to use alphanumeric section numbering, e.g.:
+ A. Introduction; III. International Law. It s output is similar to
+ alphanum.sty, but you can use the standard LaTeX sectioning commands.
+ Thus it is possible to switch numbering schemes easily. Greek letters,
+ double letters (bb) and different delimiters around them are supported.
+
+ Since version v0.02, full references are always printed, even if the
+ section numbers do not include higher level numbers.
+
+
+To produce the package
+
+ latex alnumsec.ins
+
+
+To produce the documentation
+
+ latex alnumsec.dtx
+
+ To produce an index for the documentation:
+
+ makeindex -s gind.ist alnumsec
+
+ To produce a change history for the documentation:
+
+ makeindex -s gglo.ist -o alnumsec.gls alnumsec.glo
+
+
diff --git a/macros/latex/contrib/alnumsec/alnumsec.dtx b/macros/latex/contrib/alnumsec/alnumsec.dtx
new file mode 100644
index 0000000000..6770b0d06e
--- /dev/null
+++ b/macros/latex/contrib/alnumsec/alnumsec.dtx
@@ -0,0 +1,574 @@
+% \CheckSum{489}
+% \iffalse meta-comment
+%
+% This is file `alnumsec.dtx'.
+%
+% Copyright (C) 2003-2007 Frank Küster (frank@kuesterei.ch)
+%
+% --------------------------------------------------------------------------
+%
+% 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 this 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/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Frank Küster.
+%
+% This work consists of the files README, alnumsec.ins, alnumsec.dtx,
+% and the derived file alnumsec.sty.
+%
+% \fi
+%
+% \iffalse
+% \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 \~}
+% \fi
+%
+% \iffalse
+%<*dtx>
+ \ProvidesFile{alnumsec.dtx}
+%</dtx>
+%\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+%<driver>\ProvidesFile{alnumsec.drv}
+%<alnumsec>\ProvidesPackage{alnumsec}
+ [2007/07/27 v0.03 alphanumeric section numbers with
+ ordinary sectioning commands]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{hypdoc}
+\hypersetup{pdfkeywords={LaTeX,package,alnumsec},pdfstartview={}}
+\EnableCrossrefs
+\DoNotIndex{\@addtoreset,\@arabic,\@gobble,\@Alph,\@alph}
+\DoNotIndex{\@ctrerr,\@ifnextchar,\@ifstar,\@ifundefined}
+\DoNotIndex{\@minus,\@namedef,\@nameuse,\@nil}
+\DoNotIndex{\@onelevel@sanitize,\@plus,\@sptoken}
+\DoNotIndex{\@startsection}
+\DoNotIndex{\\,\ ,\|,\@tmpA,\@tmpB,\@tmpC}
+\DoNotIndex{\addtocounter,\alpha}
+\DoNotIndex{\AfterPackage,\arabic,\AtEndDocument,\AtBeginDocument,\author,\addchap}
+\DoNotIndex{\beta,\begin,\caption,\ClassError,\ClassWarning,\csname,\CurrentOption}
+\DoNotIndex{\c@experiment,\cfigure,\c@fk@argnumber,\c@paragraph,\c@subexperiment,\c@subparagraph,\c@subsection}
+\DoNotIndex{\centering,\chapter,\chi}
+\DoNotIndex{\DeclareOption,\def,\documentclass,\dots,\date,\delta}
+\DoNotIndex{\edef,\emph,\endinput,\epsilon,\eta}
+\DoNotIndex{\if,\else,\fi,\empty,\end,\endcsname,\expandafter}
+\DoNotIndex{\fbox,\FK@@sp@b,\FK@@sp@c,\FK@@sp@d,\FK@tempa,\FK@toks@,\FK@@sp@def,\frontmatter,\futurelet}
+\DoNotIndex{\fk@old@addcontentsline,\fk@old@appendix,\fk@old@backmatter}
+\DoNotIndex{\if@mainmatter,\fi,\ifnum,\fi}
+\DoNotIndex{\ifx,\fi,\input,\ifcase,\or,\fi,\iota}
+\DoNotIndex{\gamma,\kappa,\lambda}
+\DoNotIndex{\l@chapter,\l@section,\l@subsection,\l@experiment,\l@labday,\l@subexperiment,\label,\let,\LoadClass}
+\DoNotIndex{\maketitle,\MessageBreak,\mu}
+\DoNotIndex{\newcommand,\newcounter,\newif,\newtoks,\nobreak,\normalfont,\nu}
+\DoNotIndex{\othertext,\omega}
+\DoNotIndex{\par,\PassOptionsToClass,\printindex,\ProcessOptions,\PackageError,\pi,\psi}
+\DoNotIndex{\protect,\protected@edef,\protected@xdef,\providecommand}
+\DoNotIndex{\raggedsection,\refstepcounter,\relax,\renewcommand,\RequirePackage,\rule,\rho}
+\DoNotIndex{\@roman,\@Roman}
+\DoNotIndex{\sectfont,\setcounter,\size@section,\space,\stepcounter,\sigma}
+\DoNotIndex{\tableofcontents,\tau}
+\DoNotIndex{\title,\upsilon,\value,\varepsilon,\varphi,\vartheta}
+\DoNotIndex{\usepackage,\Xothertext,\Xsometext,\z@,\xi,\zeta}
+\CodelineIndex
+%
+\begin{document}
+ \DocInput{alnumsec.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{alnumsec.dtx}
+% \RecordChanges
+%
+% \MacroIndent=2em
+% \setcounter{IndexColumns}{2}
+%
+% \MakeShortVerb{\|}
+% \MakeShortVerb{\§}
+%
+% \title{alnumsec.sty: Using alphanumeric section numbering with
+% standard sectioning commands\texorpdfstring{\thanks{%^^A
+% This package has version number \fileversion, last revised \filedate.}}{}}
+% \author{Frank K\"uster\\
+% \href{mailto:frank@kuesterei.ch}{\texttt{frank@kuesterei.ch}}}
+% \date{\filedate}
+% \maketitle{}
+%
+% \begin{abstract}
+% \noindent This package allows you to use alphanumeric section
+% numbering, e.g. A. Introduction; III. International Law. It's
+% output is similar to alphanum.sty, but you can use the standard
+% \LaTeX\ sectioning commands. Thus it is possible to switch numbering
+% schemes easily. Greek letters, double letters (bb) and different
+% delimiters around them are supported.
+% \end{abstract}
+%
+% \tableofcontents{}
+% \def\partname{Part}
+%
+% \clearpage
+% \part{User documentation}
+% \label{part:user-documentation}
+%
+% \section{Options}
+% \label{sec:options}
+%
+% There is only one option: If you specify |usehighlevels|, then the
+% numbers for every heading will start with the numbers of the superior
+% levels, as without the package (e.g. A.II.3.(a) Important Section).
+% Without the option, only the number of the current section level is
+% used, e.g. (a) Important Section. This seems to be common with
+% alphanumeric numbering.
+%
+% \section{Specifying the numbering scheme}
+% \label{sec:spec-numb-scheme}
+%
+% You specify the numbering scheme for the headings with the macro
+% \begin{verbatim}
+% \alnumsecstyle{<list of one-letter-specifiers>}
+% \end{verbatim}
+% with the following specifiers:
+% \begin{center}
+% \begin{minipage}{0.8\textwidth}\renewcommand*{\thempfootnote}{\arabic{mpfootnote}}
+% \begin{description}
+% \item[a or n] stands for \textbf{arabic} number: 6
+% \item[R] stands for an uppercase \textbf{Roman} number: VI
+% \item[r] stands for a lowercase \textbf{roman} number: vi
+% \item[L] stands for an uppercase \textbf{Letter}: A
+% \item[l] stands for a lowercase \textbf{letter}: a
+% \item[g] is for \textbf{greek} letter: $\alpha$
+% \item[d] is for two lowercase letters (\textbf{doubleletter}): aa, bb
+% \item[b] for two greek letters (\textbf{doublegreek})\footnotemark: $\alpha\alpha$
+% \end{description}
+% \end{minipage}
+% \end{center}
+% \footnotetext{The b is from \emph{bis}, latin for "twice", since the
+% greek word would also yield a \textbf{d}.}
+%
+% The numbers and letters are all followed by a period per default, if
+% you want to change this, use the macro
+% \begin{verbatim}
+% \surround<name>{<before>}{<after>}
+% \end{verbatim}
+% Instead of |<name>|, put the word given in boldface in the list above
+% (case matters!), |<before>| and |<after>| will be typeset around the
+% number of type name.
+%
+% If you use some number types twice, e.g. arabic numbers for the second
+% and fifth level: |\alnumsecstyle{LaRla}|, you might want to
+% distinguish between the two numbers by their separators. To achieve
+% this, you give the separators for lower levels in the optional
+% argument(s) to |\surround<name>|. In the example, you might use
+% |\surroundarabic[(]{}{)}| to achieve A. 2) III. d. (4) or
+% |\surroundarabic[(][)]{}{.}| for A. 2. III. d. (4). Note, however,
+% that alnumsec does \emph{not} recognize that a number type has yet
+% been used and that it now should use the alternative separators.
+% Instead, you have to specify the first level for which alternative
+% separators should be used with the command
+% |\otherseparators{<level>}|. In \LaTeX, chapter, if defined, has
+% level 0, section has 1 and so on down to subparagraph with level
+% 5. Therefore, in the above example, |\otherseparators{5}| would
+% work, but |\otherseparators{3}| as well.
+%
+% Please note that |\alnumsecstyle| does not change the numbering
+% scheme of figures or tables (yet).
+% So if a |report| or |book| like document class will be used,
+% one can get double periods there.
+% But this can be corrected easily, for example the |figure| counter
+% representation is usually defined as something like
+% \begin{quote}
+% |\newcommand\thefigure{%|\\
+% | \ifnum\value{chapter}>0 \thechapter.\fi \arabic{figure}}|
+% \end{quote}
+% So to remove the extra period here one can insert
+% \begin{quote}
+% |\renewcommand\thefigure{%|\\
+% | \ifnum\value{chapter}>0 \thechapter\fi \arabic{figure}}|
+% \end{quote}
+% right after the use of |\alnumsecstyle|. (same for tables)
+%
+%
+% \section{Sectioning levels to use}
+% \label{sec:sect-levels-use}
+%
+% Many people that use alphanumeric sectioning numbers also seem to use
+% many, many levels of sectioning commands - alnumsec.sty can handle
+% this. If you only use the levels that are defined in the standard
+% classes (i.e. from |\chapter| or |\section| to |\subparagraph|), you
+% don't have to do anything. |\part| is not treated at all by
+% alnumsec.sty.
+%
+%\newcommand*{\labday}{\textbackslash\texttt{labday}}\newcommand*{\experiment}{\textbackslash\texttt{experiment}}
+%\newcommand*{\typesection}{\textbackslash\texttt{section}}\newcommand*{\typechapter}{\textbackslash\texttt{chapter}}
+% If you have more (or simply other\footnote{With other, I mean other
+% names for the same concept -- e.g. my labbook.cls uses \labday\
+% instead of \typechapter\ and \experiment\ instead of \typesection.
+% Different concepts, as e.g. in alphanum.sty, won't work. But anyway,
+% you'll only want to use one of both.}) sectioning macros, you have
+% to tell alnumsec about their names and whether the first is on
+% \LaTeX{}s level 0 (like chapter) or 1 (like section). This is done
+% with the macro |\alnumsectionlevels| - here is what the package uses
+% for the article class:
+% \begin{verbatim}
+% \alnumsectionlevels{1}{section,subsection,subsubsection,paragraph,subparagraph}
+% \end{verbatim}
+%
+% If you use this macro, you have to do it \emph{before}
+% |\alnumsecstyle|!\smallskip
+%
+% alnumsec.sty assumes that the number is typeset using |\the<name>| for
+% section level |<name>|. This will always be the case if the macro has
+% been defined using the \LaTeX\ macro designed for this,
+% |\@startsection|.
+%
+%
+% \section{Bugs and Limitations}
+% \label{sec:bugs-limitations}
+%
+% Currently I am not aware of any real bugs, but one could imagine a lot
+% of more features. However, since I wrote this package for somebody
+% else's needs and don't use it myself, I need input from users to be
+% able to improve it.
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \clearpage
+% \part{Implementation}
+%
+%
+%
+% \begin{macrocode}
+%<*alnumsec>
+\newif\ifusepreviouslevels\usepreviouslevelsfalse%
+\DeclareOption{usehighlevels}{\usepreviouslevelstrue}%
+\ProcessOptions%
+\RequirePackage{ifthen}%
+% \end{macrocode}
+%
+% Macros for greek "numbers" and double letters:
+% \changes{v0.03}{2007/07/27}{Define \cs{@greek} et al with \cs{providecommand}}
+%
+% \begin{macrocode}
+\providecommand*{\@greek}[1]{\ifcase#1\relax\or$\alpha$\or$\beta$\or
+ $\gamma$\or$\delta$\or$\varepsilon$\or$\zeta$\or$\eta$\or$\vartheta$\or
+ $\iota$\or$\kappa$\or$\lambda$\or$\mu$\or$\nu$\or$\xi$\or$o$\or$\pi$\or
+ $\rho$\or$\sigma$\or$\tau$\or$\upsilon$\or$\varphi$\or$\chi$\or$\psi$\or
+ $\omega$\else\@ctrerr\fi}%
+\providecommand*{\@doublegreek}[1]{\@greek{#1}{\@greek{#1}}}
+\providecommand*{\@doublealph}[1]{\@alph{#1}{\@alph{#1}}}
+\newcounter{alnumsec@level}%
+\newcounter{fk@secdepth}%
+\newcounter{fk@secstart}%
+\newcounter{fk@changelevel}\setcounter{fk@changelevel}{20}%
+% \end{macrocode}
+%
+% |alnumsec@level| is the dynamic counter used while browsing through
+% the levels. |fk@secdepth| is the number of sectioning levels for
+% which names are known and thus numbers can be assigned. |fk@secstart|
+% will be the starting value for every use of |alnumsec@level|, i.e. it
+% will be 0 if |\chapter|\footnote{or some other macro on the level 0}
+% is defined and 1 otherwise. |fk@changelevel| is the level from which
+% the alternative separators for lower levels will be used. It is
+% initially set very high so that lower level separators won't be used
+% unless this counter is changed, using the following command:
+%
+% \begin{macrocode}
+\def\otherseparators#1{%
+ \setcounter{fk@changelevel}{#1}
+}
+% \end{macrocode}
+%
+% |\alnumsectionlevels| is the command for users that have more or
+% different than the usual section names. The main work is done by
+% |\fk@countlevels|, after that |fk@secdepth| is set to the number of
+% known levels.
+%
+% \begin{macrocode}
+\def\alnumsectionlevels#1#2{%
+ \setcounter{fk@secstart}{#1}
+ \setcounter{alnumsec@level}{#1}%
+ \fk@countlevels#2,\relax,%
+ \setcounter{fk@secdepth}{\value{alnumsec@level}}%
+ \addtocounter{fk@secdepth}{-1}
+}
+% \end{macrocode}
+%
+% |\fk@countlevels| goes through the comma separated list of level names
+% until it encounters the relax that has been put at the end by
+% |\alnumsectionlevels|. For each level, it puts this name into a
+% "numbered" name, e.g. |\fk@levelname1|, and increases the counter.
+%
+% \begin{macrocode}
+\def\fk@countlevels#1,{%
+ \ifx\relax#1%
+ \empty%
+ \else%
+ \expandafter\def\csname fk@levelname\thealnumsec@level\endcsname{#1}%
+ \stepcounter{alnumsec@level}%
+ \expandafter\fk@countlevels%
+ \fi%
+}
+% \end{macrocode}
+%
+% |\alnumsecstyle| is the macro with which the user specifies the
+% numbering scheme and, implicitly, the level of the last numbered
+% section. It feeds its argument to |\fk@scanstyle| and later sets
+% |secnumdepth|. This counter has to be lowered by one because
+% |\fk@scanstyle| increments |alnumsec@level| \emph{after} it has parsed
+% each letter, so after the last letter it is incremented once more.
+% Then |\fk@assignstyle| is called which actually defines |\thesection|
+% and friends.
+%
+% \begin{macrocode}
+\def\alnumsecstyle#1{%
+ \setcounter{alnumsec@level}{\value{fk@secstart}}%
+ \fk@scanstyle#1\relax%
+ \setcounter{secnumdepth}{\value{alnumsec@level}}%
+ \addtocounter{secnumdepth}{-1}%
+ \setcounter{alnumsec@level}{\value{fk@secstart}}%
+ \fk@assignstyle%
+}%
+\def\fk@scanstyle#1{%
+ \ifx\relax#1%
+ \relax%
+ \else%
+ \ifnum\c@alnumsec@level>\c@fk@secdepth%
+ \PackageError{alnumsec}{%
+ more numbering levels than sectioning levels}{%
+ You have specified \thealnumsec@level\space different
+ numbering styles.\MessageBreak However, only
+ \thefk@secdepth\space sectioning commands have been defined,
+ down to \csname fk@levelname\thefk@secdepth\endcsname.
+ }%
+ \else%
+ \fk@whichstyle{#1}%
+ \stepcounter{alnumsec@level}%
+ \fi%
+ \expandafter\fk@scanstyle%
+ \fi%
+}
+\newif\iffk@letterknown\fk@letterknownfalse
+\def\fk@whichstyle#1{%
+ \if R#1%
+ \fk@defsecstyle{\thealnumsec@level}{\@Roman}{Roman}%
+ \fk@letterknowntrue
+ \fi%
+ \if r#1%
+ \fk@defsecstyle{\thealnumsec@level}{\@roman}{roman}%
+ \fk@letterknowntrue
+ \fi%
+ \if n#1%
+ \fk@defsecstyle{\thealnumsec@level}{\@arabic}{arabic}%
+ \fk@letterknowntrue
+ \fi%
+ \if a#1%
+ \fk@defsecstyle{\thealnumsec@level}{\@arabic}{arabic}%
+ \fk@letterknowntrue
+ \fi%
+ \if L#1%
+ \fk@defsecstyle{\thealnumsec@level}{\@Alph}{Letter}%
+ \fk@letterknowntrue
+ \fi%
+ \if l#1%
+ \fk@defsecstyle{\thealnumsec@level}{\@alph}{letter}%
+ \fk@letterknowntrue
+ \fi%
+ \if g#1%
+ \fk@defsecstyle{\thealnumsec@level}{\@greek}{greek}%
+ \fk@letterknowntrue
+ \fi%
+ \if d#1%
+ \fk@defsecstyle{\thealnumsec@level}{\@doublealph}{doubleletter}%
+ \fk@letterknowntrue
+ \fi%
+ \if b#1%
+ \fk@defsecstyle{\thealnumsec@level}{\@doublegreek}{doublegreek}%
+ \fk@letterknowntrue
+ \fi%
+ \iffk@letterknown\else%
+ \PackageError{alnumsec}{unknown specifier: #1}{%
+ You have given #1 as specifier for the numbering
+ scheme.\MessageBreak
+ Only the following are known:\MessageBreak
+ nrRLldgb
+ }
+ \fi
+}
+\def\fk@defsecstyle#1#2#3{%
+ \edef\fk@seclevel{\csname fk@levelname#1\endcsname}%
+ \expandafter\def\csname fk@\thealnumsec@level num\endcsname{#2}%
+ \ifnum\c@alnumsec@level<\c@fk@changelevel%
+ \expandafter\def%
+ \csname fk@pre@\thealnumsec@level\expandafter\endcsname\expandafter{%
+ \csname fk@pre@#3\endcsname}%
+ \expandafter\def%
+ \csname fk@post@\thealnumsec@level\expandafter\endcsname\expandafter{%
+ \csname fk@post@#3\endcsname}%
+ \else%
+ \expandafter\def%
+ \csname fk@lower@pre@\thealnumsec@level\expandafter\endcsname\expandafter{%
+ \csname fk@lower@pre@#3\endcsname}%
+ \expandafter\def%
+ \csname fk@lower@post@\thealnumsec@level\expandafter\endcsname\expandafter{%
+ \csname fk@lower@post@#3\endcsname}%
+ \fi%
+}%
+% \end{macrocode}
+%
+% In |\fk@assignstyle|, the first level has to be treated differently to
+% allow the use of the previous levels for the lower levels.
+%
+% \begin{macrocode}
+\def\fk@assignstyle{%
+ \edef\fk@secname{\csname fk@levelname\thefk@secstart\endcsname}%
+ \expandafter\@namedef{the\fk@secname\expandafter}\expandafter{%
+ \csname fk@pre@\thealnumsec@level\expandafter\endcsname%
+ \csname fk@\thefk@secstart num\expandafter\endcsname%
+ \csname c@\fk@secname\expandafter\endcsname%
+ \csname fk@post@\thealnumsec@level\expandafter\endcsname%
+ }%
+ \whiledo{%
+ \c@alnumsec@level<\c@secnumdepth%
+ }{%
+ \stepcounter{alnumsec@level}%
+ \let\fk@previoussecname\fk@secname%
+ \edef\fk@secname{%
+ \csname fk@levelname\thealnumsec@level\endcsname}%
+ \ifusepreviouslevels%
+ \ifnum\c@alnumsec@level<\c@fk@changelevel%
+ \expandafter\@namedef{the\fk@secname\expandafter}\expandafter{%
+ \csname the\fk@previoussecname\expandafter\endcsname
+ \csname fk@pre@\thealnumsec@level\expandafter\endcsname%
+ \csname fk@\thealnumsec@level num\expandafter\endcsname%
+ \csname c@\fk@secname\expandafter\endcsname%
+ \csname fk@post@\thealnumsec@level\endcsname}%
+ \else%
+ \expandafter\@namedef{the\fk@secname\expandafter}\expandafter{%
+ \csname the\fk@previoussecname\expandafter\endcsname
+ \csname fk@lower@pre@\thealnumsec@level\expandafter\endcsname%
+ \csname fk@\thealnumsec@level num\expandafter\endcsname%
+ \csname c@\fk@secname\expandafter\endcsname%
+ \csname fk@lower@post@\thealnumsec@level\endcsname}%
+ \fi%
+ \else%
+% \end{macrocode}
+%
+% The following three lines are added to have references with parents,
+% thanks to Markus Kohm. \changes{v0.02}{2005/02/16}{Added code to
+% make references complete, thanks to Markus Kohm.}
+%
+% \begin{macrocode}
+ \expandafter\@namedef{p@\fk@secname\expandafter}\expandafter{%
+ \csname p@\fk@previoussecname\expandafter\endcsname
+ \csname the\fk@previoussecname\endcsname}%
+ \ifnum\c@alnumsec@level<\c@fk@changelevel%
+ \expandafter\@namedef{the\fk@secname\expandafter}\expandafter{%
+ \csname fk@pre@\thealnumsec@level\expandafter\endcsname%
+ \csname fk@\thealnumsec@level num\expandafter\endcsname%
+ \csname c@\fk@secname\expandafter\endcsname%
+ \csname fk@post@\thealnumsec@level\endcsname}%
+ \else%
+ \expandafter\@namedef{the\fk@secname\expandafter}\expandafter{%
+ \csname fk@lower@pre@\thealnumsec@level\expandafter\endcsname%
+ \csname fk@\thealnumsec@level num\expandafter\endcsname%
+ \csname c@\fk@secname\expandafter\endcsname%
+ \csname fk@lower@post@\thealnumsec@level\endcsname}%
+ \fi%
+ \fi%
+ }%
+}
+\def\define@surroundstyle#1{%
+ \@namedef{surround#1}{%
+ \@ifnextchar [{%]
+ \csname opt@surround#1\endcsname}{%
+ \csname nopt@surround#1\endcsname}%
+ }%
+ \@namedef{opt@surround#1}[##1]{%
+ \@ifnextchar [{%]
+ \csname dopt@surround#1\endcsname[##1]}{%
+ \csname @opt@surround#1\endcsname[##1]}
+ }
+ \@namedef{dopt@surround#1}[##1][##2]##3##4{%
+ \@namedef{fk@lower@pre@#1}{##1}%
+ \@namedef{fk@lower@post@#1}{##2}%
+ \@namedef{fk@pre@#1}{##3}%
+ \@namedef{fk@post@#1}{##4}%
+ }
+ \@namedef{@opt@surround#1}[##1]##2##3{%
+ \relax
+ \@namedef{fk@lower@pre@#1}{##1}%
+ \@namedef{fk@pre@#1}{##2}%
+ \@namedef{fk@post@#1}{##3}%
+ \expandafter\let%
+ \csname fk@lower@post@#1\expandafter\endcsname%
+ \csname fk@post@#1\endcsname%
+ }
+ \@namedef{nopt@surround#1}##1##2{%
+ \@namedef{fk@pre@#1}{##1}%
+ \@namedef{fk@post@#1}{##2}%
+ \expandafter\let%
+ \csname fk@lower@pre@#1\expandafter\endcsname%
+ \csname fk@pre@#1\endcsname%
+ \expandafter\let%
+ \csname fk@lower@post@#1\expandafter\endcsname%
+ \csname fk@post@#1\endcsname%
+ }
+}
+\define@surroundstyle{Roman}
+\define@surroundstyle{roman}
+\define@surroundstyle{Letter}
+\define@surroundstyle{letter}
+\define@surroundstyle{arabic}
+\define@surroundstyle{doubleletter}
+\define@surroundstyle{greek}
+\define@surroundstyle{doublegreek}
+\newif\iffk@chapterdefined%
+\@ifundefined{chapter}{%
+ \fk@chapterdefinedfalse%
+ \setcounter{fk@secstart}{1}%
+ \setcounter{fk@secdepth}{5}%
+ \alnumsectionlevels{1}{section,subsection,subsubsection,paragraph,subparagraph}%
+}{%
+ \fk@chapterdefinedtrue%
+ \setcounter{fk@secstart}{0}%
+ \setcounter{fk@secdepth}{5}%
+ \alnumsectionlevels{0}{chapter,section,subsection,subsubsection,paragraph,subparagraph}%
+}
+\iffk@chapterdefined%
+ \def\fk@pre@chapter{}%
+ \def\fk@post@chapter{.}%
+\fi
+\surroundRoman{}{.}
+\surroundroman{}{.}
+\surroundarabic{}{.}
+\surroundLetter{}{.}
+\surroundletter[(]{}{)}
+\surroundgreek[(]{}{)}
+\surrounddoubleletter[(]{}{)}
+\surrounddoublegreek[(]{}{)}
+%</alnumsec>
+% \end{macrocode}
+%
+% \clearpage
+% \Finale
+%
+\endinput
+
diff --git a/macros/latex/contrib/alnumsec/alnumsec.ins b/macros/latex/contrib/alnumsec/alnumsec.ins
new file mode 100644
index 0000000000..2f8ef4374e
--- /dev/null
+++ b/macros/latex/contrib/alnumsec/alnumsec.ins
@@ -0,0 +1,102 @@
+\let\ifbeta\iffalse
+%%
+%% This file will generate fast loadable files from the dtx files in this
+%% bundle when run through LaTeX or TeX.
+%%
+%% ---------------------------------------------------
+%%
+%% This system is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Copyright 2003 Frank Küster
+%% All rights reserved. This package is licensed under the
+%% LaTeX Project Public License. For further information, see
+%% http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt
+%%
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\batchfile{alnumsec.ins}
+\input docstrip.tex
+
+\keepsilent
+\askforoverwritetrue
+%\askforoverwritefalse
+
+\preamble
+\endpreamble
+
+\ifToplevel{\ifx\generate\undefined
+\Msg{**********************************************}
+\Msg{*}
+\Msg{* This installation requires docstrip}
+\Msg{* version 2.3c or later.}
+\Msg{*}
+\Msg{* An older version of docstrip has been input}
+\Msg{*}
+\Msg{**********************************************}
+\errhelp{Move or rename old docstrip.tex.}
+\errmessage{Old docstrip in input path}
+\batchmode
+\csname @@end\endcsname
+\fi
+}
+
+\declarepreamble\mainpreamble
+
+Copyright (C) 2003-2007 Frank Küster (frank@kuesterei.ch)
+
+--------------------------------------------------------------------------
+
+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 this 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/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+This Current Maintainer of this work is Frank Küster.
+
+This work consists of the files README, alnumsec.ins, alnumsec.dtx,
+and the derived file alnumsec.sty.
+
+\endpreamble
+\declarepostamble\nullpostamble
+\endpostamble
+
+%% File generation:
+
+\generate{%
+ \usepreamble\mainpreamble
+ \file{alnumsec.sty}{\from{alnumsec.dtx}{alnumsec}}
+}
+
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\ifbeta
+\Msg{* THIS IS A BETA VERSION. YOU SHOULD NOT INSTALL OR USE IT!}
+\Msg{* THERE MAY BE A LOT OF BUGS AT THIS VERSION!}
+\Msg{* PLEASE INSTALL THE RELEASE YOU CAN FIND AT CTAN!}
+\Msg{*}
+\else
+\Msg{* To finish the installation you have to move}
+\Msg{* alnumsec.sty into a directory searched by TeX.}
+\Msg{*}
+\Msg{* For the documentation see the README file.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\fi
+\Msg{***********************************************************}
+}
+
+\endinput
+%%
+%% end of file `labbook.ins'
+
diff --git a/macros/latex/contrib/alnumsec/alnumsec.pdf b/macros/latex/contrib/alnumsec/alnumsec.pdf
new file mode 100644
index 0000000000..7e39b59071
--- /dev/null
+++ b/macros/latex/contrib/alnumsec/alnumsec.pdf
Binary files differ