% \CheckSum{0}
% \iffalse
%
% skb.dtx
%% Copyright (c) 2011 Sven van der Meer <sven@vandermeer.de>
%%
%% 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
%% 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `author-maintained'.
%% 
%% The Current Maintainer of this work is
%%    Sven van der Meer <sven@vandermeer.de>
%%
%% This software is  provided 'as is',  without warranty of  any kind, either
%% expressed  or  implied,  including,  but  not  limited  to,  the   implied
%% warranties of merchantability and fitness for a particular purpose.
%%
%% This work consists of all files listed in MANIFEST.TXT.
%%
%<*driver>
\documentclass{ltxdoc}
\usepackage{skb}
\usepackage{dirtree}
\usepackage{etoolbox}
\usepackage{textcomp}
\usepackage{gensymb}
\usepackage{wasysym}
\usepackage{units}
\usepackage{float}
\usepackage{comment}
\usepackage{booktabs}
\usepackage{graphicx}
\usepackage{longtable}
\usepackage{colortbl}
\usepackage{biblatex}
\usepackage[x11names]{xcolor}
\usepackage[colorlinks,linkcolor=Brown4,citecolor=SeaGreen4,urlcolor=RoyalBlue3]{hyperref}
\usepackage[printonlyused]{acronym}

\RecordChanges
\makeindex
\GetFileInfo{skb.sty}

\IfFileExists{user-guide/user-guide.tex}{\skbconfig[root=user-guide/]{skb.dtx}}
  {\IfFileExists{../doc/user-guide/user-guide.tex}{\skbconfig[root=../doc/user-guide/]{skb.dtx}}
    {\IfFileExists{../doc/latex/skb/user-guide/user-guide.tex}{\skbconfig[root=../doc/latex/skb/user-guide/]{skb.dtx}}{}
  }
}
\skbconfig[pub=,acr=database,bib=database]{skb.dtx}
\skbbibtex

\begin{document}
  \IfFileExists{skb.dtx}{\DocInput{skb.dtx}}
    {\IfFileExists{../source/skb.dtx}{\DocInput{../source/skb.dtx}}
       {\IfFileExists{../../source/latex/skb/skb.dtx}{\DocInput{../../source/latex/skb/skb.dtx}}{}
    }
  }
\end{document}
%</driver>
% \fi
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%^^A For Changes please see PDF (heading History) or HISTORY.TXT
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%\title{The SKB package - Create and maintain%
%       a repository for long-living documents}
%
%\author{Sven van der Meer}
%
%\date{2011-05-12 v0.51}
%
%\maketitle
%
%\begin{abstract}
%  This package provides  macros that help  to build a  repository for
%  long living  documents. It  focuses on  structure and  re-use of text, code,
%  figures etc. The basic concept  is to first separate structure  from content
%  (i.e. text about  a topic from  the structure it  is presented by)  and then
%  separating the  content from  the actual  published document,  thus enabling
%  easy re-use  of text  blocks in  different publications  (i.e. text  about a
%  protocol in a short article about this  protocol as well as in a book  about
%  many protocols); all without constantly copying or changing text. As a  side
%  effect, using the document  classes provided, it hides  a lot of \LaTeX~from
%  someone who just wants to write articles and books. 
%\end{abstract}
%
%\tableofcontents
%
%\skbtitle{The SKB package - Create and maintain%
%          a repository for long-living documents}
%\skbauthor{Sven van der Meer, sven@vandermeer.de}
%\skbsubject{LaTeX SKB}
%\skbkeywords{SKB;LaTeX;Package}
%
%
%\IfFileExists{user-guide/user-guide.tex}{\skbinput[from=pub]{user-guide-load}}
%  {\IfFileExists{../doc/user-guide/user-guide.tex}{\skbinput[from=pub]{user-guide-load}}
%    {\IfFileExists{../doc/latex/skb/user-guide/user-guide.tex}{\skbinput[from=pub]{user-guide-load}}{
%      \section*{About this Document}
%      \textbf{Note:} This PDF file was generated without the user guide.
%    }
%  }
%}
%
%
% \StopEventually{}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \setlength{\parindent}{0cm}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \section{Implementation: Kernel}
%
%    First we do announce the package.
%    \begin{macrocode}
%<*skbpackage>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{skb}[2011/05/12 Sven's Knowledge Base - SKB for LaTeX v0.51]
%    \end{macrocode}
%
%    Next we process the package's options. To do that, we define a new if 
%    that indicates if we process slides with or without animation,
%    and then we set that new if accordingly.
%    \begin{macrocode}
\newif\if@skbBeamerAnim
\@skbBeamerAnimfalse
\DeclareOption{beameranim}{\@skbBeamerAnimtrue}
\DeclareOption{beamernoanim}{\@skbBeamerAnimfalse}
\ProcessOptions\relax
%    \end{macrocode}
%
% \subsection{Required Packages}
%    Now we load a few packages that we need within the \skbacft{A3DS:SKB}. We use keyval
%    to allow for options in macros, the listings package for all listings,
%    dirtree to show tree structures similar to a directory tree, ifpdf 
%    to establish whether we use \skbacft{ISO:PDF} or not, datetime to get the current date 
%    and the versions package to allow for optional text. Note: some packages, 
%    such as the package optional, are loaded at a later stage.
%    \begin{macrocode}
\RequirePackage{keyval}
\RequirePackage{listings}
\RequirePackage{dirtree}
\RequirePackage{ifpdf}
\RequirePackage{datetime}
\RequirePackage{versions}
%    \end{macrocode}
%
% \subsection{Conditiona/Optional Text Support}
%    Now we set everything that we need to provide optional text. Basically, we
%    want to distinguish between the following modes: text (normal text), slide
%    (for slides), note (for slite annotations), anim (for animated slides,
%    noanim (for non-animated slides) and memoir (if we use the memoir package).
%
%    We start with the memoir package. First we define a configuration value
%    (used when loading the package optional) and a new if (telling us later 
%    if memoir is loaded or not).
%    \begin{macrocode}
\def\skb@cfg@memoir{}
\newif\ifSkbMemoirLoaded
%    \end{macrocode}
%
%    Now we test for the memoir package. Note, if this package is loaded after the 
%    \skbacft{A3DS:SKB}, this test and all following actions will fail. If the package is loaded,
%    then we set the if to true, activate (include) the environment skbmodememoir 
%    and set our configuration value to the string ", memoir". If the memoir 
%    package is not loaded, then we set the if to false, deactivate (exclude) the 
%    environment skbmodememoir and load the package booktabs (to provide the commands
%    \cmd{\toprule} and \cmd{\bottomrule}.
%    \begin{macrocode}
\@ifclassloaded{memoir}
  {\SkbMemoirLoadedtrue
   \includeversion{skbmodememoir}
   \def\skb@cfg@memoir{,memoir}}
  {\SkbMemoirLoadedfalse
   \excludeversion{skbmodememoir}
   \RequirePackage{booktabs}}
%    \end{macrocode}
%
%    Now we check for the style beamerarticle. We define an if, set its default value 
%    to false and test for of the package is loaded (if so, we change the if to true).
%    \begin{macrocode}
\newif\ifSkbBeamerArticleLoaded
\SkbBeamerArticleLoadedfalse
\@ifpackageloaded{beamerarticle}{\SkbBeamerArticleLoadedtrue}{}
%    \end{macrocode}
%
%    Now we check for the beamer package. e define an if, set its default value 
%    to false and test for of the package is loaded (if so, we change the if to true).
%    \begin{macrocode}
\newif\ifSkbBeamerLoaded
\SkbBeamerLoadedfalse
\@ifclassloaded{beamer}{\SkbBeamerLoadedtrue}{}
%    \end{macrocode}
%
%    Now we process the first optional text support. First, we define a configuration value 
%    for beamer animations. If animations are requested (skb package option, see above),
%    we set that value to the string ",anim" and activate (include) the environment skbmodeanim 
%    and deactivate (exclude) the environment skbmodenoanim. If no-animation is requested 
%    (skb package option, see above) or as default we set the value to the string ",noanim" and 
%    deactivate (exclude) the environment skbmodeanim and activate (include) the environment 
%    skbmodenoanim.
%    \begin{macrocode}
\def\skb@cfg@beameranim{}
\if@skbBeamerAnim
  \def\skb@cfg@beameranim{,anim}
  \excludeversion{skbmodenoanim}
  \includeversion{skbmodeanim}
\else
  \def\skb@cfg@beameranim{,noanim}
  \excludeversion{skbmodeanim}
  \includeversion{skbmodenoanim}
\fi
%    \end{macrocode}
%
%    Now we are ready to provide for all other optional text support. The code configures the environments 
%    skbmodetext, skbmodenote and skbmodeslide and loads the optional package depending if we have the 
%    beamer package loaded or have the package beamerarticle loaded or have none of the two packages loaded.
%    The environments (package versions) are excluded or included accordingly. The package optional is loaded 
%    with the respective option activated (text, note or slide) and using the two configuration values we have 
%    defined above (these values are either empty having no effect or contain the option to be included).
%    \begin{macrocode}
\ifSkbBeamerLoaded
  \excludeversion{skbmodetext}
  \excludeversion{skbmodenote}
  \includeversion{skbmodeslide}
  \RequirePackage[slide\skb@cfg@memoir\skb@cfg@beameranim]{optional}
\else\ifSkbBeamerArticleLoaded
  \excludeversion{skbmodetext}
  \includeversion{skbmodenote}
  \excludeversion{skbmodeslide}
  \RequirePackage[note\skb@cfg@memoir\skb@cfg@beameranim]{optional}
\else
  \includeversion{skbmodetext}
  \excludeversion{skbmodenote}
  \excludeversion{skbmodeslide}
  \RequirePackage[text\skb@cfg@memoir\skb@cfg@beameranim]{optional}
\fi\fi
%    \end{macrocode}
%
%
% \subsection{Provide Command}
%    \DescribeMacro{\BibTeX}
%    \DescribeMacro{\DescribeMacro}
%    \DescribeMacro{\cmdprint}
%    \DescribeMacro{\cmd}
%    The \skbacft{A3DS:SKB} provides for a few commands that the documentation (and maybe your documents as well)
%    expect to be available. The first two are for typesetting SKB and BibTeX, the rest are simply
%    usefull.
%    \begin{macrocode}
\providecommand{\BibTeX}{{\scshape Bib}\TeX}
\providecommand{\DescribeMacro}[1]{\relax}
\providecommand{\cmdprint}[1]{\texttt{\string#1}}
\providecommand{\cmd}[1]{\cmdprint{#1}}%
%    \end{macrocode}
%
%
% \subsection{Macro Redefinitions}
%    The \skbacft{A3DS:SKB} documentation uses the package dirtree and we want to have some of its default settings
%    changed. For the comments, the default configuration we want is an small, italic serif font in blue; and
%    for the style part we want a type writer font in black.
%    \begin{macrocode}
\renewcommand*\DTstylecomment{\itshape\sffamily\color{blue}\small}
\renewcommand*\DTstyle{\ttfamily\textcolor{black}}
%    \end{macrocode}
%
%
% \subsection{At End of Document}
%
%    Last not least, we define what should happen at the end of the processing of the input 
%    document. At them moment, we call \cmd{\skbpdfinfo} to set \skbacft{ISO:PDF} meta information and 
%    \cmd{\skboptionsused} to print out the change log and current set of \skbacft{A3DS:SKB} configuration 
%    options.
%    \begin{macrocode}
\AtEndDocument{
  \skbpdfinfo
  \skboptionsused
}
%    \end{macrocode}
%
%
% \subsection{Package Configuration}
%    The basic idea of the \skbacft{A3DS:SKB} is that different parts of a document (figures, slides,
%    repository, published documents) reside in different folders. So the main configuration 
%    of the \skbacft{A3DS:SKB} is to provide macros to set and get these folders and to load files from them.
%
%    To simplify coding, we introduce some macros that handle configuration information.
%    These macros will be used by the \skbacft{A3DS:SKB} package to define, set and get configuration 
%    information. The macros also store the origin of changes to the configuration information.
%
%    \DescribeMacro{\skb@tmp}
%    This variable is used to temporarily store macros and strings. The value can change anytime
%    a new \skbacft{A3DS:SKB} macro is called.
%    \begin{macrocode}
\newcommand{\skb@tmp}{}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@cfg@origlast}
%    Is used to store the last location (second argument of \cmd{\skbconfig}) were any configuration
%    information has been changed. The currently possible locations are \skbem[code]{skb.sty}
%    for default values, \skbem[code]{skb.cfg} for the general configuration file,
%    \skbem[code]{skblocal.cfg} for the local configuration file and \skbem[code]{skbconfig}
%    when the macro \cmd{\skbconfig} was called.
%    \begin{macrocode}
\newcommand{\skb@cfg@origlast}{skb.sty}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@defCfgVars}
%    This macro is used to define new configuration information. It defines two new macros, one for the 
%    name of the configuration information and one for storing a change log. The first argument is the 
%    name to be used and the second argument the default initialisation. For instance, to add the 
%    configuration information for the root path with the default value `/doc' call
%    \begin{lstlisting}[style=generic,language=TeX,gobble=2]
% \skb@defCfgVars{root}{/doc}
%    \end{lstlisting}
%    \begin{macrocode}
\newcommand{\skb@defCfgVars}[2]{
  \@namedef{skb@cfg@var@#1}{#2}
  \@namedef{skb@cfg@orig@#1}{skb.sty}
}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@setCfgVars}
%    Alter configuration information and append the location from where its called (second argument of \cmd{\skbconfig}
%    taken from \cmd{skb@cfg@origlast}) to the change log.
%    \begin{macrocode}
\newcommand{\skb@setCfgVars}[2]{
  \@namedef{skb@cfg@var@#1}{#2}
  \expandafter\protected@edef\csname skb@cfg@orig@#1\endcsname%
    {\csname skb@cfg@orig@#1\endcsname,\space \skb@cfg@origlast}%
}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@getCfgVars}
%    This macro provides access to configuration values. It is used everywhere in the \skbacft{A3DS:SKB} to retrieve 
%    configuration values.
%    \begin{macrocode}
\newcommand{\skb@getCfgVars}[1]{%
  \csname skb@cfg@var@#1\endcsname%
}%
%    \end{macrocode}
%
%    Now we use \cmd{\skb@defCfgVars} to initialise all configuration values the \skbacft{A3DS:SKB} uses.
%
%    \DescribeMacro{\skb@cfg@var@root}
%    The first one is the root directory. Everything that the \skbacft{A3DS:SKB} processes should be located
%    below the root. The \skbacft{A3DS:SKB} can currently not handle inputs from directories outside the root
%    hierarchy (Note: one can call \cmd{\skbconfig} anytime to change the root directory, but be carefull
%    with potential side effects!). The default value for the root directory is \skbem[code]{/doc}.
%    \begin{macrocode}
\skb@defCfgVars{root}{/doc}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@cfg@var@acr}
%    \DescribeMacro{\skb@cfg@var@acrfile}
%    These two values define the directory and the file name for the acronym database.
%    The \skbacft{A3DS:SKB} uses the \skbem[code]{acronym} package and the two macros detail the directory
%    (\skbem[code]{acr}) and the file (\skbem[code]{acrfile}) where the acronyms can be found.
%    The default for the directory is \skbem[code]{database/latex} and the default
%    for the file is \skbem[code]{acronym}.
%    \begin{macrocode}
\skb@defCfgVars{acr}{database/latex}
\skb@defCfgVars{acrfile}{acronyms}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@cfg@var@bib}
%    \DescribeMacro{\skb@cfg@var@bibfile}
%    These two values define the directory and the file name for the \BibTeX~database.
%    The two macros detail the directory (\skbem[code]{bib}) and the main file (\skbem[code]{bibfile})
%    where bibliographic information can be found.
%    The default for the directory is \skbem[code]{database/bibtex} and the default for the 
%    file is \skbem[code]{bibliography.tex}.
%    \begin{macrocode}
\skb@defCfgVars{bib}{database/bibtex}
\skb@defCfgVars{bibfile}{bibliography.tex}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@cfg@var@rep}
%    This value points to the \skbem[code]{repository} directory. The default value is \skbem[code]{repository}.
%    \begin{macrocode}
\skb@defCfgVars{rep}{repository}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@cfg@var@pub}
%    This value points to the folder with the published documents. The default value is \skbem[code]{publish}.
%    \begin{macrocode}
\skb@defCfgVars{pub}{publish}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@cfg@var@fig}
%    This value points to the directory for figures. The default value is \skbem[code]{figures}.
%    \begin{macrocode}
\skb@defCfgVars{fig}{figures}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@cfg@var@sli}
%    This value points to the directory for slides. The default value is \skbem[code]{transparencies}.
%    \begin{macrocode}
\skb@defCfgVars{sli}{transparencies}
%    \end{macrocode}
%
%
% \subsection{Generic Input Macro}
%    \DescribeMacro{\skb@input@doife}
%    \cmd{\skb@input@doife} is the generic input macro. It expects four arguments.
%    The first argument is the \skbacft{A3DS:SKB} macro that should be used to input a file.
%    The second argument is the actual file to be loaded, without file extension.
%    The third argument is the file extension to be used.
%    The fours argument is plain text that should be added to the help message in 
%    case an arror occured while loading the file.
%    If the second and third argument are empty, we assume that the first argument
%    already contains directory and file and file extension information.
%    \begin{macrocode}
\newcommand{\skb@input@doife}[4]{%
  \def\filearg{#2}
  \ifx\filearg\empty%
    \edef\intfile{\csname #1\endcsname}%
  \else%
    \edef\intfile{\csname #1\endcsname{#2}#3}%
  \fi%
  \InputIfFileExists{\intfile}{}%
    {\PackageError{skb}%
      {file not found: \intfile}%
      {I did not find the requested file #4,%
       \MessageBreak please check: \intfile%
       \MessageBreak <return> to continue, no file loaded}%
    }%
}
%    \end{macrocode}
%
%
% \subsection{Kernel support for skbinput}
%    This is the actual core functionality of the \skbacft{A3DS:SKB} package: flexibly load files from 
%    various pre-defined locations (folders). We start with a few macros that we can use 
%    later to test options using the package keyval.
%
%    \DescribeMacro{\skb@input@var@rep}
%    This macro represents the string "rep", which will be later used to test for macro options, for instance in \cmd{\skbinput}.
%    \begin{macrocode}
\def\skb@input@var@rep{rep}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@input@var@pub}
%    This macro represents the string "pub", which will be later used to test for macro options, for instance in \cmd{\skbinput}.
%    \begin{macrocode}
\def\skb@input@var@pub{pub}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@input@var@fig}
%    This macro represents the string "fig", which will be later used to test for macro options, for instance in \cmd{\skbinput}.
%    \begin{macrocode}
\def\skb@input@var@fig{fig}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@input@var@sli}
%    This macro represents the string "sli", which will be later used to test for macro options, for instance in \cmd{\skbinput}.
%    \begin{macrocode}
\def\skb@input@var@sli{sli}
%    \end{macrocode}
%
%    The next set of macros will load files from various supported folders. All of them behave identical:
%    they expect argument 1 being the reuqest file and use \cmd{\InputIfFileExists} to check whether this
%    file exists. If so, they simply input the file using \cmd{\input}. If not, they use \cmd{\PackageError} to 
%    throw an error with a help message, showing the requested directory and file.
%    The extention .tex is automatically added to the argument, which in turn should only contain the path and the 
%    basename of the file.
%
%    \DescribeMacro{\skb@input@doroot}
%    Load a given .tex file from the root directory.
%    \begin{macrocode}
\newcommand{\skb@input@doroot}[1]{%
  \def\intarg{#1}
  \skb@input@doife{skbfileroot}{\intarg}{.tex}{in given location}
}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@input@dorep}
%    Load a given .tex file from the repository.
%    \begin{macrocode}
\newcommand{\skb@input@dorep}[1]{%
  \def\intarg{#1}
  \skb@input@doife{skbfilerep}{\intarg}{.tex}{in the repository}
}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@input@dopub}
%    Load a given .tex file from the directory with the published documents.
%    \begin{macrocode}
\newcommand{\skb@input@dopub}[1]{%
  \def\intarg{#1}
  \skb@input@doife{skbfilepub}{\intarg}{.tex}{in the published document folder}
}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@input@dofig}
%    Load a given .tex file from the figure directory.
%    \begin{macrocode}
\newcommand{\skb@input@dofig}[1]{%
  \def\intarg{#1}
  \skb@input@doife{skbfilefig}{\intarg}{.tex}{in the figure folder}
}
%    \end{macrocode}
%
%    \DescribeMacro{\skb@input@dosli}
%    Load a given .tex file from the slide directory.
%    \begin{macrocode}
\newcommand{\skb@input@dosli}[1]{%
  \def\intarg{#1}
  \skb@input@doife{skbfilesli}{\intarg}{.tex}{in the slide folder}
}
%    \end{macrocode}
%
%
%    \DescribeMacro{\skb@input@call}
%    \DescribeMacro{\skb@input@set}
%    These two macros are used to load files. \cmd{\skb@input@call} will point to the currently requested 
%    load macro (see above).
%    \cmd{\skb@input@set} sets the default load option in \cmd{\skb@input@call} to \cmd{\skb@input@doroot}. That 
%    means if no option is given for an input directory, then the \skbacft{A3DS:SKB} root directory will be used.
%    \begin{macrocode}
\def\skb@input@call{}
\newcommand\skb@input@set{%
  \gdef\skb@input@call{\skb@input@doroot}
}
%    \end{macrocode}
%
%
%  \section{Implementation: Configuring the \skbacft{A3DS:SKB}}
%    \subsection{Changing Configuration: skbconfig}
%      \subsubsection{The Macro Options}
%        The macro provides one option per \skbacft{A3DS:SKB} configuration value. Each option expects
%        one paramter; the new value. The options are 
%        \skbem[code]{root} (for the root directory),
%        \skbem[code]{acr} (for the acronym directory),
%        \skbem[code]{acrfile} (for the acronym file),
%        \skbem[code]{bib} (for the bibtex directory),
%        \skbem[code]{bibfile} (for the bibtex file),
%        \skbem[code]{rep} (for the repository directory),
%        \skbem[code]{pub} (for the directory with the published documents) and
%        \skbem[code]{sli} (for the directory with slides).
%    \begin{macrocode}
\define@key{skbconfig}{root}[]{\skb@setCfgVars{root}{#1}}
\define@key{skbconfig}{acr}[]{\skb@setCfgVars{acr}{#1}}
\define@key{skbconfig}{acrfile}[]{\skb@setCfgVars{acrfile}{#1}}
\define@key{skbconfig}{bib}[]{\skb@setCfgVars{bib}{#1}}
\define@key{skbconfig}{bibfile}[]{\skb@setCfgVars{bibfile}{#1}}
\define@key{skbconfig}{rep}[]{\skb@setCfgVars{rep}{#1}}
\define@key{skbconfig}{pub}[]{\skb@setCfgVars{pub}{#1}}
\define@key{skbconfig}{fig}[]{\skb@setCfgVars{fig}{#1}}
\define@key{skbconfig}{sli}[]{\skb@setCfgVars{sli}{#1}}
%    \end{macrocode}
%
%      \subsubsection{The Macro}
%        \DescribeMacro{\skbconfig}
%        This macro allows to change the main directory and path information for the \skbacft{A3DS:SKB}.
%        It reads the provided options and changes the requested values in the \skbacft{A3DS:SKB}.
%        The macro takes one argument which will set the origin of the configuration change. If this 
%        argument is empty, the origin will be set to \skbem[code]{skbconfig}.
%    \begin{macrocode}
\newcommand{\skbconfig}[2][]{
  \def\intarg{#2}
%    \end{macrocode}
%        If no second argument is given, then set \cmd{\skb@cfg@origlast} to the string 
%        "skbconfig" (this macro's name) otherwise use the second argument to set 
%        \cmd{\skb@cfg@origlast}. In both cases, print out a general warning about the change of 
%        configuration values for later trace or debugging.
%    \begin{macrocode}
  \ifx\intarg\empty
    \renewcommand{\skb@cfg@origlast}{skbconfig}
    \PackageWarning{skb}{load options overwritten by skbconfig}
  \else
    \renewcommand{\skb@cfg@origlast}{#2}
    \PackageWarning{skb}{load options overwritten by #2}
  \fi
%    \end{macrocode}
%        Now use the keyval package to process the options. They will set the respective 
%        configuration values, so there is nothing else to do here.
%    \begin{macrocode}
  \setkeys{skbconfig}{#1}
}
%    \end{macrocode}
%
%
%    \subsection{Changing Configuration: skb.cfg and skblocal.cfg}
%      The \skbacft{A3DS:SKB} can also be configured using external configuration files. Two files will be loaded if they exist:
%      \begin{skbnotelist}
%        \item \skbem[code]{skb.cfg} -- Should be used with the installed package in your 
%              \TeX/\LaTeX~distribution. If it exists, it will overwrite the default options
%              for directories and paths.
%        \item \skbem[code]{skblocal.cfg} -- Should be used in your local styles/template
%              directory. If it exsits, it will overwrite the default options as well as the 
%              options loaded with \skbem[code]{skb.cfg}.
%      \end{skbnotelist}
%      We use \cmd{\InputIfFileExists} to test if the configuration file exist. If true, we load the 
%      configuration file and print out a general warning for later trace or debugging. If not, we 
%      simply do nothing.
%    \begin{macrocode}
\InputIfFileExists{skb.cfg}{%
  \PackageWarning{skb}{load options from skb.cfg}
}{}
\InputIfFileExists{skblocal.cfg}{%
  \PackageWarning{skb}{load options from skblocal.cfg}
}{}
%    \end{macrocode}
%
%
%    \subsection{Viewing Configuration: skboptionsused}
%      \DescribeMacro{\skboptionsused}
%      This macro can be used to print out a message (as package warning), which contains 
%      the change log and the currently used value for all \skbacft{A3DS:SKB} configuration values.
%    \begin{macrocode}
\newcommand{\skboptionsused}{
  \PackageWarningNoLine{skb}{%
    Options last changed by: \skb@cfg@origlast \MessageBreak
    Change log: \MessageBreak
    - root = \skb@cfg@orig@root \MessageBreak
    - acr = \skb@cfg@orig@acr \MessageBreak
    - acrfile = \skb@cfg@orig@acrfile \MessageBreak
    - bib = \skb@cfg@orig@bib \MessageBreak
    - bibfile = \skb@cfg@orig@bibfile \MessageBreak
    - rep = \skb@cfg@orig@rep \MessageBreak
    - pub = \skb@cfg@orig@pub \MessageBreak
    - fig = \skb@cfg@orig@fig \MessageBreak
    - sli = \skb@cfg@orig@sli \MessageBreak
    Last set Path/File Options: \MessageBreak
    - file root = \skbfileroot{} \MessageBreak
    - path root = \skbpathroot \MessageBreak
    - file acr = \skbfileacr \MessageBreak
    - file bib = \skbfilebib \MessageBreak
    - path bib = \skbpathbib \MessageBreak
    - path rep = \skbfilerep{} \MessageBreak
    - path pub = \skbfilepub{} \MessageBreak
    - path fig = \skbfilefig{} \MessageBreak
    - path sli = \skbfilesli{}
  }
}
%    \end{macrocode}
%
%
%  \section{Implementation: Files, Figures and Slides}
%
%    \subsection{Declaring Headings: skbheading}
%      \DescribeMacro{\skbheading}
%      This macro can be used everywhere to declare a new heading and let the \skbacft{A3DS:SKB} decide which
%      document level to use. The actual document level must be declared in the loading file using
%      \cmd{\skbinput} with the option \skbem[code]{level}, otherwise this command will have no effect.
%    \begin{macrocode}
\newcommand{\skbheading}[1]{
  \ifx\empty\skb@inputLevel
    #1
  \else%
    \skb@inputLevel{#1}%  
  \fi
}
%    \end{macrocode}
%
%    \subsection{Loading \TeX~files: skbinput}
%      \subsubsection{Macro Options}
%      \DescribeMacro{skbinput: opt from}
%        The option \skbem[code]{from} is used to point to one of the following \skbacft{A3DS:SKB} directories:
%        the repository (\skbem[code]{from=rep}),
%        the folder with the published documents (\skbem[code]{from=pub}),
%        the figure folder (\skbem[code]{from=fig}) or
%        the slide folder (\skbem[code]{from=sli}).
%        The option is optional, but when used must give one of the those values.
%        The \skbacft{A3DS:SKB} will throw an error otherwise. The implementation works as follows: if the 
%        option is used, its paramter is evaluated. Depending on which \skbacft{A3DS:SKB} directories is 
%        requested, the value \cmd{\skb@input@call} is set to point to the respective load 
%        load macro. For instance, if the requested directory is the repository (\skbem[code]{from=rep})
%        then \cmd{\skb@input@call} will be pointed to \cmd{\skb@input@dorep}.
%    \begin{macrocode}
\define@key{skbinput}{from}[]{%
  \def\intarg{#1}
  \ifx\skb@input@var@rep\intarg
    \gdef\skb@input@call{\skb@input@dorep}
  \else\ifx\skb@input@var@pub\intarg
    \gdef\skb@input@call{\skb@input@dopub}
  \else\ifx\skb@input@var@fig\intarg
    \gdef\skb@input@call{\skb@input@dofig}
  \else\ifx\skb@input@var@sli\intarg
    \gdef\skb@input@call{\skb@input@dosli}
  \else
    \PackageError{skb}%
      {Value for option \@tempa\space not supported: \intarg}%
      {I do not know the value \intarg\space for the option \@tempa.%
       \MessageBreak Please use either "rep", "pub", "fig" or "sli".%
       \MessageBreak <return> to continue, no file will be loaded}
  \fi\fi\fi\fi
}
%    \end{macrocode}
%
%      \DescribeMacro{skbinput: opt level}
%      The option \skbem[code]{level} is used to define the document level to 
%      be used for the next occurance of \cmd{\skbheading}. Supported are all 
%      document levels known to \LaTeX~and no check is done whether the currently 
%      used document class supports them or not (for instance, the article class 
%      does not support the document level chapter, however, memoir supports it even
%      in article mode). The supported paramters for this option are: 
%      \skbem[code]{book} (memoir pacakge),
%      \skbem[code]{part} (memoir pacakge),
%      \skbem[code]{title} (base \LaTeX~classes),
%      \skbem[code]{chapter} (\LaTeX~book class),
%      \skbem[code]{section} (base \LaTeX~classes),
%      \skbem[code]{subsection} (base \LaTeX~classes) and
%      \skbem[code]{subsubsection} (base \LaTeX~classes).
%
%      The option is optional, but when used must give one of the above described values.
%      The package will throw an error otherwise.
%
%      We start be defining the macros we use later for testing the option.
%      This might be a slightly awkward way to do it, I am still looking into
%      optimising this code. Anyway, we define everything we need for book, part, title,
%      chapter, section, subsection and subsubsection.
%    \begin{macrocode}
\def\skb@inputLevelBook{book}
\def\skb@inputLevelPart{part}
\def\skb@inputLevelTitle{title}
\def\skb@inputLevelChapter{chapter}
\def\skb@inputLevelSection{section}
\def\skb@inputLevelSubSection{subsection}
\def\skb@inputLevelSubSubSection{subsubsection}
%    \end{macrocode}
%
%      Now we define a macro that will be used to point to the selected input level (\cmd{\skb@inputLevel})
%      and a macro that will be used to set the default input level to be empty (i.e. do nothing, \cmd{\skb@SetInputLevel}).
%      \begin{macrocode}
\def\skb@inputLevel{}
\newcommand\skb@SetInputLevel{\gdef\skb@inputLevel{}}
%    \end{macrocode}
%
%      And here is the actual definition of the option \skbem[code]{level}. For each supported parameter (introduced and defined 
%      above) we test if it was provided calling the option (put into \cmd{\\intarg} on start) and if so we point \cmd{\skb@inputLevel}
%      to the \LaTeX~macro realising that document level. For instance, if the requested level is subsection we point \cmd{\skb@inputLevel}
%      to the \LaTeX~macro \cmd{\subsection}. That means we can later simply call \cmd{\skb@inputLevel} to instruct \LaTeX~to realise the 
%      requested document level. In case the parameter is not supported, the option will throw an error along with a help message.
%    \begin{macrocode}
\define@key{skbinput}{level}[]{%
  \def\intarg{#1}
  \ifx\skb@inputLevelBook\intarg
    \let\skb@inputLevel=\book
  \else\ifx\skb@inputLevelPart\intarg
    \let\skb@inputLevel=\part
  \else\ifx\skb@inputLevelTitle\intarg
    \let\skb@inputLevel=\title
  \else\ifx\skb@inputLevelChapter\intarg
    \let\skb@inputLevel=\chapter
  \else\ifx\skb@inputLevelSection\intarg
    \let\skb@inputLevel=\section
  \else\ifx\skb@inputLevelSubSection\intarg
    \let\skb@inputLevel=\subsection
  \else\ifx\skb@inputLevelSubSubSection\intarg
    \let\skb@inputLevel=\subsubsection
  \else
    \PackageError{skb}%
      {Value for option \@tempa\space not supported: \intarg}%
      {I do not know the value \intarg\space for the option \@tempa.%
       \MessageBreak Please use only: book, part, title, chapter,%
       \MessageBreak section, subsection or subsubsection.%
       \MessageBreak <return> to continue, no level will be set and heading is ignored}
   \fi\fi\fi\fi\fi\fi\fi
}
%    \end{macrocode}
%
%      \subsubsection{The Macro}
%      \DescribeMacro{\skbinput}
%       This macro will load a .tex file from the root directory or from an \skbacft{A3DS:SKB} known directory (if option \skbem[code]{from} is applied).
%       It will also configure the document level macro for the next use of \cmd{\skbjeading}, if the option \skbem[code]{level} is applied.
%       If \skbem[code]{level} is not used, then \cmd{\skbheading} will have no effect. The macro first sets the input level to be empty (\cmd{\skb@input@set})
%       and the input macro to the default value (\cmd{\skb@input@set}). The it processes the options (using the keyval pacakge) and finally calls
%       \cmd{\skb@input@call} to realise the load of the requested file.
%    \begin{macrocode}
\newcommand\skbinput[2][]{%
  \skb@input@set
  \skb@SetInputLevel
  \setkeys{skbinput}{#1}
  \skb@input@call{#2}
}
%    \end{macrocode}
%
%
%    \subsection{Loading Figures: skbfigure}
%      \subsubsection{Macro Options}
%      This macro supportes a number of options. To be able to test for the applied options, we first define a few macros 
%      that will be used by \cmd{\skbfigure} to realise the requested figure input. We define one macro per option supported.
%    \begin{macrocode}
\def\skb@FigureOptWidth{}
\def\skb@FigureOptHeight{}
\def\skb@FigureOptCenter{}
\def\skb@FigureOptFigure{}
\def\skb@FigureOptPosition{}
\def\skb@FigureOptCaption{}
\def\skb@FigureOptLabel{}
\def\skb@FigureOptMultiinclide{}
%    \end{macrocode}
%
%      To be able to reset all of these macros before processing a figure, we define a reset macro.
%    \begin{macrocode}
\newcommand{\skb@figureOptReset}{
  \gdef\skb@FigureOptWidth{}
  \gdef\skb@FigureOptHeight{}
  \gdef\skb@FigureOptCenter{}
  \gdef\skb@FigureOptFigure{}
  \gdef\skb@FigureOptPosition{}
  \gdef\skb@FigureOptCaption{}
  \gdef\skb@FigureOptLabel{}
  \gdef\skb@FigureOptMultiinclide{}
}
%    \end{macrocode}
%
%      Now we define all options for \cmd{\skbfigure}. All options work the same way: they either take the parameter given and put it into 
%      the corresponding macro we defined above or simply set the corresponding macro to true. This way we can test these corresponding macros
%      for being empty (default) or not and then decide how to process the figure input.
%
%      \DescribeMacro{skbfigure opt width}
%      The first one is called \skbem[code]{width} used  for the width of \cmd{\resizebox} and \cmd{includegraphics}.
%    \begin{macrocode}
\define@key{skbfigures}{width}[]{%
  \gdef\skb@FigureOptWidth{#1}
}
%    \end{macrocode}
%
%      \DescribeMacro{skbfigure opt height}
%      The option height is used  for the height of \cmd{\resizebox} and \cmd{includegraphics}.
%    \begin{macrocode}
\define@key{skbfigures}{height}[]{%
  \gdef\skb@FigureOptHeight{#1}
}
%    \end{macrocode}
%
%      \DescribeMacro{skbfigure opt center}
%      The option center is used to trigger the center environment (so it only needs to set true).
%    \begin{macrocode}
\define@key{skbfigures}{center}[true]{%
  \gdef\skb@FigureOptCenter{true}
}
%    \end{macrocode}
%
%      \DescribeMacro{skbfigure opt figure}
%      The option figure is used to trigger the figure environment (so it only needs to set true).
%    \begin{macrocode}
\define@key{skbfigures}{figure}[true]{%
  \gdef\skb@FigureOptFigure{true}
}
%    \end{macrocode}
%
%      \DescribeMacro{skbfigure opt position}
%      The option position is used to fix the position when figure environment is used
%    \begin{macrocode}
\define@key{skbfigures}{position}[]{%
  \gdef\skb@FigureOptPosition{\begin{figure}[#1]}
}
%    \end{macrocode}
%
%      \DescribeMacro{skbfigure opt caption}
%      The option caption is used to define the caption of the figure used as \cmd{\caption}
%    \begin{macrocode}
\define@key{skbfigures}{caption}[]{%
  \gdef\skb@FigureOptCaption{\caption{#1}}
}
%    \end{macrocode}
%
%      \DescribeMacro{skbfigure opt label}
%      The option label is used to define the label of the figure used as \cmd{\label}
%    \begin{macrocode}
\define@key{skbfigures}{label}[]{%
  \gdef\skb@FigureOptLabel{\label{fig:#1}}
}
%    \end{macrocode}
%
%      \DescribeMacro{skbfigure opt multiinclude}
%      The option multiinclude is a special option to use \cmd{\multiinclude}, automatically deactivates all other options
%    \begin{macrocode}
\define@key{skbfigures}{multiinclude}[]{%
  \gdef\skb@FigureOptMultiinclide{#1}
}
%    \end{macrocode}
%
%
%      \subsubsection{The Macro}
%        \DescribeMacro{\skbfigure}
%        \cmd{\skbfigure} itself expects options (processed using keyval) and the actual file to be included.
%        The file name should start at the figure root directory.
%    \begin{macrocode}
\newcommand{\skbfigure}[2][]{
%    \end{macrocode}
%    First, we call our reset function and then use keyval to process the options.
%    \begin{macrocode}
  \skb@figureOptReset
  \setkeys{skbfigures}{#1}%

%    \end{macrocode}
%        Now we process the options figure and position to decide if and how to use the figure environment. If the figure option has been used, we
%        test if the position option has been used as well. If figure and position have been used, we
%        call \cmd{\skb@FigureOptPosition}, which expands to \cmd{\begin{figure}[option]}. If only the figure
%        option was used, we directly invoke \cmd{\begin{figure}}. 
%    \begin{macrocode}
  \ifx\skb@FigureOptFigure\empty\else
    \ifx\skb@FigureOptPosition\empty
      \begin{figure}
    \else
      \skb@FigureOptPosition
    \fi
  \fi
%    \end{macrocode}
%        Next is the center option. If it was used, we call \cmd{\begin{center}}.
%    \begin{macrocode}
  \ifx\skb@FigureOptCenter\empty\else\begin{center}\fi

%    \end{macrocode}
%        The core of the macro. If the option multiinclude was not used, we proceed load the figure 
%        as we would usually do with \LaTeX. If multiinclude was used, then we simply call \cmd{\multiinclude}
%        with the given overlay information, starting at number 0, using \skbacft{ISO:PDF} format and scaling everything to \cmd{\textwidth}.
%    \begin{macrocode}
  \ifx\skb@FigureOptMultiinclide\empty
    \ifx\skb@FigureOptWidth\empty
      \ifx\skb@FigureOptHeight\empty
        \resizebox{!}{!}%
        {\includegraphics[]%
        {\skbfilefig{#2}}}
      \else
        \resizebox{!}{\skb@FigureOptHeight}%
        {\includegraphics[height=\skb@FigureOptHeight]%
        {\skbfilefig{#2}}}
      \fi
    \else
      \ifx\skb@FigureOptHeight\empty
        \resizebox{\skb@FigureOptWidth}{!}%
        {\includegraphics[width=\skb@FigureOptWidth]%
        {\skbfilefig{#2}}}
      \else
        \resizebox{\skb@FigureOptWidth}%
                  {\skb@FigureOptHeight}%
        {\includegraphics[%
            width=\skb@FigureOptWidth,%
            height=\skb@FigureOptHeight%]%
        {\skbfilefig{#2}}}
      \fi
    \fi
  \else
    \resizebox{\textwidth}{!}%
    {\multiinclude[<\skb@FigureOptMultiinclide>]%
    [start=0,format=pdf,graphics={width=\textwidth}]%
    {\skbfilefig{#2}}}
  \fi

%    \end{macrocode}
%        If we did use the figure environment, then we check for given caption and label.
%    \begin{macrocode}
  \ifx\skb@FigureOptFigure\empty\else%
    \skb@FigureOptCaption
    \skb@FigureOptLabel
  \fi%

%    \end{macrocode}
%        And finally we close the figure and center environments if we did open them earlier.
%    \begin{macrocode}
  \ifx\skb@FigureOptCenter\empty\else\end{center}\fi
  \ifx\skb@FigureOptFigure\empty\else\end{figure}\fi
}
%    \end{macrocode}
%
%
%    \subsection{Loading Slides: skbslide}
%      This macro allows to load a (configurable) combination of \skbacft{ISO:PDF} slide and \LaTeX~
%      annotation to be loaded in a single call.
%
%      \subsubsection{Some Extentions}
%        \DescribeMacro{\skb@slides@callpath}
%        The first is a macro that will maintain the current path and file for loading slides.
%    \begin{macrocode}
\def\skb@slides@callpath{}
%    \end{macrocode}
%        \DescribeMacro{\skb@slides@doslinote}
%        The second is a macro to load annotations from the slide folder.
%    \begin{macrocode}
\newcommand{\skb@slides@doslinote}[1]{%
  \def\intarg{#1}
  \skb@input@doife{skbfilesli}{\intarg}{.tex}{in the slides folder}
}
%    \end{macrocode}
%
%      \subsubsection{Macro Options}
%        \DescribeMacro{\skbslide opt slidefrom}
%        The option \skbem[code]{slidefrom} is used to point to one of the following \skbacft{A3DS:SKB} directories:
%        \skbem[code]{sli} (the folder for slides) or
%        \skbem[code]{pub} (the folder for published documents) or
%        \skbem[code]{rep} (the repository directory).
%        The option is optional, but when used must give one of the above described values.
%        The \skbacft{A3DS:SKB} will throw an error otherwise.
%    \begin{macrocode}
\define@key{skbslide}{slidefrom}[]{%
  \def\intarg{#1}
  \ifx\skb@input@var@sli\intarg
    \let\skb@slides@callpath=\skbfilesli
  \else\ifx\skb@input@var@pub\intarg
    \let\skb@slides@callpath=\skbfilepub
  \else\ifx\skb@input@var@rep\intarg
    \let\skb@slides@callpath=\skbfilerep
  \else
    \PackageError{skb}%
      {Value for option \@tempa\space not supported: \intarg}%
      {I do not know the value \intarg\space for the option \@tempa.%
       \MessageBreak Please use either "pub", "rep" or "sli".%
       \MessageBreak <return> to continue, no file will be loaded}
  \fi\fi\fi
}
%    \end{macrocode}
%
%        \DescribeMacro{\skbslide opt notefrom}
%        The option \skbem[code]{notefrom} is used to point to one of the following \skbacft{A3DS:SKB} directories:
%        \skbem[code]{sli} (the folder for slides) or
%        \skbem[code]{pub} (the folder for published documents) or
%        \skbem[code]{rep} (the repository directory).
%        The option is optional, but when used must give one of the above described values.
%        The \skbacft{A3DS:SKB} will throw an error otherwise.
%    \begin{macrocode}
\define@key{skbslide}{notefrom}[]{%
  \def\intarg{#1}
  \ifx\skb@input@var@sli\intarg
    \gdef\skb@input@call{\skb@slides@doslinote}
  \else\ifx\skb@input@var@pub\intarg
    \gdef\skb@input@call{\skb@input@dopub}
  \else\ifx\skb@input@var@rep\intarg
    \gdef\skb@input@call{\skb@input@dorep}
  \else
    \PackageError{skb}%
      {Value for option \@tempa\space not supported: \intarg}%
      {I do not know the value \intarg\space for the option \@tempa.%
       \MessageBreak Please use either "pub", "rep" or "sli".%
       \MessageBreak <return> to continue, no file will be loaded}
  \fi\fi\fi
}
%    \end{macrocode}
%
%        \DescribeMacro{\skbslide opt annotate}
%        The option \skbem[code]{annotate} requests to load annotations for the slide. If not given, no 
%        annotations will be loaded.
%    \begin{macrocode}
\def\skb@slides@loadnote{}
\define@key{skbslide}{annotate}[true]{%
  \gdef\skb@slides@loadnote{true}
}
%    \end{macrocode}
%
%
%      \subsubsection{The Macro}
%        \DescribeMacro{\skbslide}
%        This macro will load the slide and annotation, depending on the options provided.
%    \begin{macrocode}
\newcommand\skbslide[3][]{%
  \gdef\skb@slides@loadnote{}
  \gdef\skb@input@call{\skb@slides@doslinote}
  \let\skb@slides@callpath=\skbfilesli
  \setkeys{skbslide}{#1}

  \def\sl{#2}
  \def\an{#3}

  \ifx\sl\empty\else
    \begin{figure}[!bh]
      \resizebox{\textwidth}{!}{\includegraphics[width=\textwidth]{\skb@slides@callpath{#2}}}
    \end{figure}
  \fi

  \ifx\skb@slides@loadnote\empty\else
    \ifx\an\empty
      \skb@input@call{#2}
      \clearpage
    \else
      \skb@input@call{#3}
      \clearpage
    \fi
  \fi
}
%    \end{macrocode}
%
%        \DescribeMacro{\skbslide}
%        This simple macro can help to provide standardised citations on annotation pages.
%    \begin{macrocode}
\newcommand{\skbslidecite}[2]{\small Source \textit{#2}: \textit{#1} \normalsize}
%    \end{macrocode}
%
%
%  \section{Implementation: Filenames, Acronyms and References}
%    \subsection{Path and File Names}
%      These macros are used within the \skbacft{A3DS:SKB} to generate path and filenames for all known 
%      directories and files. They basically provide user-level access to kernel-level processed
%      configuration date.
%      All path names, except root, are fully qualified from root.
%      All filenames are fully qualified from root. Macros that expect an argument use that
%      very argument as the reuqested filename to provide path and filename. 
%
%      \DescribeMacro{\skbpathroot}
%      This macro returns the currently set root path.
%    \begin{macrocode}
\newcommand{\skbpathroot}{\skb@getCfgVars{root}}
%    \end{macrocode}
%      \DescribeMacro{\skbfileroot}
%      This macro takes the given argument and prefixes the root path to it.
%    \begin{macrocode}
\newcommand{\skbfileroot}[1]{\skb@getCfgVars{root}/#1}
%    \end{macrocode}
%      \DescribeMacro{\skbfileacr}
%      This macro returns the file of the acronym database.
%    \begin{macrocode}
\newcommand{\skbfileacr}{\skb@getCfgVars{root}/\skb@getCfgVars{acr}/\skb@getCfgVars{acrfile}}
%    \end{macrocode}
%      \DescribeMacro{\skbpathbib}
%      This macro returns the path to the reference library.
%    \begin{macrocode}
\newcommand{\skbpathbib}{\skb@getCfgVars{root}/\skb@getCfgVars{bib}}
%    \end{macrocode}
%      \DescribeMacro{\skbfilebib}
%      This macro returns the file that is used to load the reference library.
%    \begin{macrocode}
\newcommand{\skbfilebib}{\skb@getCfgVars{root}/\skb@getCfgVars{bib}/\skb@getCfgVars{bibfile}}
%    \end{macrocode}
%      \DescribeMacro{\skbfilerep}
%      This macro takes the provided argument and prefixes the path to the repository to it.
%    \begin{macrocode}
\newcommand{\skbfilerep}[1]{\skb@getCfgVars{root}/\skb@getCfgVars{rep}/#1}
%    \end{macrocode}
%      \DescribeMacro{\skbfilepub}
%      This macro takes the provided argument and prefixes the path to the published documents to it.
%    \begin{macrocode}
\newcommand{\skbfilepub}[1]{\skb@getCfgVars{root}/\skb@getCfgVars{pub}/#1}
%    \end{macrocode}
%      \DescribeMacro{\skbfilefig}
%      This macro takes the provided argument and prefixes the path to the figures to it.
%    \begin{macrocode}
\newcommand{\skbfilefig}[1]{\skb@getCfgVars{root}/\skb@getCfgVars{fig}/#1}
%    \end{macrocode}
%      \DescribeMacro{\skbfilesli}
%      This macro takes the provided argument and prefixes the path to the slides to it.
%    \begin{macrocode}
\newcommand{\skbfilesli}[1]{\skb@getCfgVars{root}/\skb@getCfgVars{sli}/#1}
%    \end{macrocode}
%
%
%    \subsection{Loading Acronyms}
%      \DescribeMacro{\skbacronyms}
%      This macro will load the acronym database. It should be used at the place in your document were you want 
%      the list of acronyms to appear. If the file is not found, an error is thrown.
%    \begin{macrocode}
\newcommand{\skbacronyms}{%
  \skb@input@doife{skbfileacr}{}{}{for acronym database}
}
%    \end{macrocode}
%
%    \subsection{Loading Reference Database}
%      \DescribeMacro{\skbbibtex}
%      This macro will load the reference database. It should be used before you start the actual document.
%      If the file is not found, an error is thrown.
%    \begin{macrocode}
\newcommand{\skbbibtex}{%
  \skb@input@doife{skbfilebib}{}{}{for bibtex database}
}
%    \end{macrocode}
%
%
%
%  \section{Implementation: Other useful Macros}
%
%    \subsection{Emphasising Text: skbem}
%      \subsubsection{Macro Options}
%        \DescribeMacro{skbem opt italic}
%        This option will typset the given text for \cmd{\skbem} using italic font.
%    \begin{macrocode}
\def\skb@emCmd{}
\define@key{skbem}{italic}[true]{%
  \gdef\skb@emCmd{\textit}%
}%
%    \end{macrocode}
%        \DescribeMacro{skbem opt bold}
%        This option will typset the given text for \cmd{\skbem} using bold font.
%    \begin{macrocode}
\define@key{skbem}{bold}[true]{%
  \gdef\skb@emCmd{\textbf}%
}%
%    \end{macrocode}
%        \DescribeMacro{skbem opt code}
%        This option will typset the given text for \cmd{\skbem} using the command \cmd{\skbcode} (see below).
%    \begin{macrocode}
\define@key{skbem}{code}[true]{%
  \gdef\skb@emCmd{\skbcode}%
}%
%    \end{macrocode}
%
%      \subsubsection{The Macro}
%        \DescribeMacro{\skbem}
%        This macro helps to emphasise text in an explicit way (as compared to use font commands within
%        the actual text). Simply call with the one of the option to emphasise text.
%    \begin{macrocode}
\newcommand{\skbem}[2][]{%
  \gdef\skb@emCmd{}%
  \setkeys{skbem}{#1}%
  \skb@emCmd{#2}%
}%
%    \end{macrocode}
%
%    \subsection{Emphasising Text: skbcode}
%      \DescribeMacro{\skbcode}
%      This macro is a facade for calling \cmd{\lstinline} with basicstyle set to type writer font.
%      It is used by \skbem[code]{skbem} with the option \skbem[code]{code} to call
%      \cmd{\lstinline} but can also be called directly.
%    \begin{macrocode}
\newcommand{\skbcode}[1]{%
  \lstinline[basicstyle=\ttfamily]{#1}%
}%
%    \end{macrocode}
%
%    \subsection{List Environments: skbnotelist and skbnoteenum}
%      These environments simulate \cmd{\tightlist} from the memoir package.
%      They work identical: call the environment itemize (for skbnotelist) or enumerate
%      (for skbnoteenum) and set the two values to 0 (thus minimising the margin between items).
%
%      \DescribeMacro{\skbnotelist}
%      New Environment skbnotelist to minimise the margin between list items.
%    \begin{macrocode}
\newenvironment{skbnotelist}
  {\begin{itemize}
   \ifSkbMemoirLoaded\else
     \setlength{\parskip}{0cm}\setlength{\itemsep}{0cm}
   \fi
  }
  {\end{itemize}}
%    \end{macrocode}
%
%      \DescribeMacro{\skbnoteenum}
%      New Environment skbnotelist to minimise the margin between list items.
%    \begin{macrocode}
\newenvironment{skbnoteenum}%
  {\begin{enumerate}
   \ifSkbMemoirLoaded\else
     \setlength{\parskip}{0cm}\setlength{\itemsep}{0cm}
   \fi
  }
  {\end{enumerate}}
%    \end{macrocode}
%
%
%    \subsection{Acronyms in Footnotes: skbacft}
%      \DescribeMacro{\skbacft}
%      This macro provides some functionality that the \skbem[code]{acronym} package does not offer: 
%      introducing acronyms in a footnote (if they are used the first time) or simply use the short
%      form. I found this is useful when writing books, where sometimes introducing acronym in the 
%      normal text flow somehow disturbs that very flow.
%    \begin{macrocode}
\newcommand{\skbacft}[1]{%
  \ifAC@dua
     \ifAC@starred\acl*{#1}\else\acl{#1}\fi%
  \else
  \expandafter\ifx\csname ac@#1\endcsname\AC@used%
    \acs{#1}%
  \else
    \acs{#1}\footnote{\acf{#1}}%
    \fi
  \fi}
%    \end{macrocode}
%
%
%    \subsection{PDF Meta Information: skbpdfinfo and more}
%
%      \DescribeMacro{\skbtitle}
%      This macro allows to set text for the title of the generated \skbacft{ISO:PDF}.
%    \begin{macrocode}
\def\skb@TitleText{}
\newcommand{\skbtitle}[1]{\gdef\skb@TitleText{#1}}
%    \end{macrocode}
%      \DescribeMacro{\skbauthor}
%      This macro allows to set text for the author of the generated \skbacft{ISO:PDF}.
%    \begin{macrocode}
\def\skb@AuthorText{}
\newcommand{\skbauthor}[1]{\gdef\skb@AuthorText{#1}}
%    \end{macrocode}
%      \DescribeMacro{\skbsubject}
%      This macro allows to set text for the subject of the generated \skbacft{ISO:PDF}.
%    \begin{macrocode}
\def\skb@SubjectText{}
\newcommand{\skbsubject}[1]{\gdef\skb@SubjectText{#1}}
%    \end{macrocode}
%      \DescribeMacro{\skbkeywords}
%      This macro allows to set text for the keywords of the generated \skbacft{ISO:PDF}.
%    \begin{macrocode}
\def\skb@KeywordsText{}
\newcommand{\skbkeywords}[1]{\gdef\skb@KeywordsText{#1}}
%    \end{macrocode}
%      \DescribeMacro{\skbpdfinfo}
%      This macro will set the \skbacft{ISO:PDF} information in the generated \skbacft{ISO:PDF}. It first checks if 
%      we are in \skbacft{ISO:PDF} mode, and then uses the information from \cmd{\skb@AuthorText},
%      \cmd{\skb@TitleText} plus subject and keywords from above.
%    \begin{macrocode}
\newcommand{\skbpdfinfo}{%
  \ifpdf
    \pdfinfo{
       /Author (\skb@AuthorText)
       /Title  (\skb@TitleText)
       /ModDate (D:\pdfdate)
       /Subject (\skb@SubjectText)
       /Keywords (\skb@KeywordsText)
    }
  \fi
}
%    \end{macrocode}
%
%
%    \subsection{Listing Styles and Support}
%      The \skbacft{A3DS:SKB} comes with a few pre-defined styles for the \skbem[code]{listing} package.
%      Most of these predefined styles use type writer font in scriptsize, arrange a grey
%      box around the listing and set the keywords to Blue4.
%
%      The first style is the for any generic listing without specifying a language and no
%      line numbers.
%    \begin{macrocode}
\lstdefinestyle{generic}
     {basicstyle=\scriptsize\ttfamily, backgroundcolor=\color[gray]{.9},
      frame=single, framerule=.5pt, numbers=none,
      linewidth=0.99\textwidth, xleftmargin=3pt,
      keywordstyle=\bfseries\color{Blue4},
      identifierstyle=\bfseries}
%    \end{macrocode}
%
%      This style is designed for listings within tables. It is similar to the generic one above,
%      except that the definitions for frame and numbers are not used, which seem to collide 
%      with some table environments.
%    \begin{macrocode}
\lstdefinestyle{gentab}
     {basicstyle=\scriptsize\ttfamily, backgroundcolor=\color[gray]{.9},
      framerule=0pt,
      linewidth=.86\textwidth, xleftmargin=3pt,
      keywordstyle=\bfseries\color{Blue4},
      identifierstyle=\bfseries}
%    \end{macrocode}
%
%      This style is the same as the generic one above, except that it switches on line numbers
%      and allows extra space for them within the grey box.
%    \begin{macrocode}
\lstdefinestyle{genericLN}
     {basicstyle=\scriptsize\ttfamily, backgroundcolor=\color[gray]{.9},
      frame=single, framerule=.5pt, numbers=left,
      linewidth=0.99\textwidth, xleftmargin=20pt,
      keywordstyle=\bfseries\color{Blue4},
      identifierstyle=\bfseries}
%    \end{macrocode}
%
%      This style is based on the style \skbem[code]{genricLN}, basically using a slightly brighter
%      grey for the box.
%    \begin{macrocode}
\lstdefinestyle{genericLNspecial}
     {basicstyle=\small\ttfamily, backgroundcolor=\color[gray]{.97},
      frame=single, framerule=.5pt, numbers=left,
      linewidth=0.99\textwidth, xleftmargin=20pt,
      keywordstyle=\bfseries\color{Blue4},
      identifierstyle=\bfseries}
%    \end{macrocode}
%
%      This style is designed for examples within slides (frames) using the \skbem[code]{beamer}
%      package.
%    \begin{macrocode}
\lstdefinestyle{beamer-example}
     {basicstyle=\scriptsize\ttfamily,
      frame=single, framerule=0pt, numbers=none,
      linewidth=0.99\textwidth, xleftmargin=3pt,
      keywordstyle=\bfseries\color{Blue4},
      identifierstyle=\bfseries}
%    \end{macrocode}
%
%      This style is designed for examples within slides (frames) using the \skbem[code]{beamer}
%      with added line numbers.
%    \begin{macrocode}
\lstdefinestyle{beamer-exampleLN}
     {basicstyle=\scriptsize\ttfamily,
      frame=single, framerule=0pt, numbers=left,
      linewidth=0.99\textwidth, xleftmargin=20pt,
      keywordstyle=\bfseries\color{Blue4},
      identifierstyle=\bfseries}
%    \end{macrocode}
%
%      This style uses the definitions from the generic style above and set the language to Java.
%    \begin{macrocode}
\lstdefinestyle{javaCode}
     {basicstyle=\scriptsize\ttfamily, backgroundcolor=\color[gray]{.9},
      frame=single, framerule=0pt, language=JAVA,
      numbers=none,
      keywordstyle=\bfseries\color{Blue4},
      identifierstyle=,
      linewidth=0.99\columnwidth}
%    \end{macrocode}
%
%      This style can be used to set `normal' style after changing it.
%    \begin{macrocode}
\lstdefinestyle{inText}
     {basicstyle=\ttfamily}
%    \end{macrocode}
%
%
%  \section{Experimental Macros}
%    This part of the \skbacft{A3DS:SKB} is experimental. Please do not use it for production code or important
%    documents. The macros in this section will be moved as soon as they are stable, or simply 
%    removed. They can, as long as they stay in this section, be changed at any time in future 
%    releases.
%
%    \subsection{Defining new relative Headings: skbheadingudc}
%      When we set the document level with \cmd{\skbheading}, it might be usefull to actually 
%      have a macro that allows to relatively change headings. This is usefull if we have more than
%      one heading in a repository file, where the first one defines the heading and will get 
%      an associative document level from the calling document while any subsequent heading might 
%      need to go one level up or down. The macro here works as long as we don't need to 
%      recursively store document levels. So it is not stable right now and makes only sense if 
%      used for single headings.
%
%      First, a macro that we use to point to the new heading (rather than the one used by \cmd{\skbinput}.
%    \begin{macrocode}
\def\skb@newHeading{}
%    \end{macrocode}
%
%      \subsubsection{Macro Options}
%        Now the option down, which indicates that this heading should be one level down from the previous one.
%    \begin{macrocode}
\define@key{skbheadings}{down}[true]{%
  \ifx\skb@inputLevel\part
    \let\skb@newHeading=\chapter
    \let\skb@inputLevel=\chapter
  \else\ifx\skb@inputLevel\chapter
    \let\skb@newHeading=\section
    \let\skb@inputLevel=\section
  \else\ifx\skb@inputLevel\section
    \let\skb@newHeading=\subsection
    \let\skb@inputLevel=\subsection
  \else\ifx\skb@inputLevel\subsection
    \let\skb@newHeading=\subsubsection
    \let\skb@inputLevel=\subsubsection
  \else
    \KV@err{Invalid current level for SkbNewHeading(down),
            please use: part, chapter, section or subsection}
   \fi\fi\fi\fi
}
%    \end{macrocode}
%
%        Now the option up, which indicates that this heading should be one level up from the previous one.
%    \begin{macrocode}
\define@key{skbheadings}{up}[true]{%
  \ifx\skb@inputLevel\chapter
    \let\skb@newHeading=\part
    \let\skb@inputLevel=\part
  \else\ifx\skb@inputLevel\section
    \let\skb@newHeading=\chapter
    \let\skb@inputLevel=\chapter
  \else\ifx\skb@inputLevel\subsection
    \let\skb@newHeading=\section
    \let\skb@inputLevel=\section
  \else\ifx\skb@inputLevel\subsubsection
    \let\skb@newHeading=\subsection
    \let\skb@inputLevel=\subsection
  \else
    \KV@err{Invalid current level for SkbNewHeading(up),
            please use: chapter, section, subsection or subsubsection}
   \fi\fi\fi\fi
}
%    \end{macrocode}
%
%        Now the option last, which indicates that this heading should be on the same level as the previous one.
%    \begin{macrocode}
\define@key{skbheadings}{last}[true]{%
  \let\skb@newHeading=\skb@inputLevel%
}
%    \end{macrocode}
%
%      \subsubsection{The Macro}
%
%        \DescribeMacro{\skbheadingudc}
%    \begin{macrocode}
\newcommand{\skbheadingudc}[2][]{%
  \gdef\skb@newHeading{}
  \setkeys{skbheadings}{#1}%
  \ifx\empty\skb@newHeading\else%
    \skb@newHeading{#2}%
  \fi
}
%    \end{macrocode}
%
%
%
%
%    \begin{macrocode}
%</skbpackage>
%    \end{macrocode}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \section{The Configuration File skb.cfg}
%
%    This file is used to overwrite the default values for the \skbacft{A3DS:SKB} configuration 
%    options. It calles the macro \cmd{\skbconfig} using all possible options 
%    of that very macro and providing usefull text as origin of the configuration change 
%    \skbem[code]{skb.cfg}. Use this as template for the local configuration file 
%    \skbem[code]{skblocal.cfg} if you need one.
%    \begin{macrocode}
%<*skbcfg>
\skbconfig[root=/doc,
           acr=database/latex,
           acrfile=acronyms,
           bib=database/bibtex,
           bibfile=bibliography.tex,
           rep=repository,
           pub=publish,
           fig=figures,
           sli=slides
          ]{skb.cfg}
%</skbcfg>
%    \end{macrocode}
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \section{The \skbacft{A3DS:SKB} Classes}
%
%
% \subsection{The Class skbarticle}
%
%    This class is an example on how to use the \skbacft{A3DS:SKB} with memoir. I use skbarticle
%    for my articles. Using this class as a template, one can easily write other
%    classes or change/overwrite the settings done here.
%
%    First, we announce the package and the font definition file.
%    \begin{macrocode}
%<*skbarticle>
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{skbarticle}[2011/05/12 The SKB Article class v0.51]
%    \end{macrocode}
%
%    Now we load the memoir class with the following options:
%    \begin{skbnotelist}
%      \item 10pt - for 10 point font size
%      \item a4paper - I am European, so A4 paper makes sense here
%      \item extrafontsizes - tbd
%      \item twoside - I want my articles to be set with different even/odd pages
%      \item onecolumn - I don't necessarily like 2-columns for my articles
%      \item openright - tbd
%      \item article - use memoir as if it is an article
%    \end{skbnotelist}
%    \begin{macrocode}
\LoadClass[10pt,a4paper,extrafontsizes,twoside,onecolumn,openright,article]{memoir}
%    \end{macrocode}
%
%    Load the \skbacft{A3DS:SKB}.
%    \begin{macrocode}
\RequirePackage{skb}
%    \end{macrocode}
%
%
% \subsubsection{Loaded Packages}
%
%    I prefer BibLaTeX over plain \BibTeX, and other parts of the \skbacft{A3DS:SKB} (such as the \skbacft{LAMP}
%    server) produce BibLaTeX. The options are:
%    \begin{skbnotelist}
%      \item style - is set to alphanumeric, much better to find/remember references.
%            If writing for IEEE or LNCS, numeric would be the prefered option.
%      \item sorting - is set to none, not needed here.
%      \item hyperref - I want to have hyperef with my citations
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage[style=alphabetic,sorting=none,hyperref]{biblatex}
%    \end{macrocode}
%
%    Load the acronym package and print only the acronyms actually used in the document.
%    This might move into the \skbacft{A3DS:SKB} package later.
%    \begin{macrocode}
\RequirePackage[printonlyused]{acronym}
%    \end{macrocode}
%
%    Load a view packages that I tend to use quite often:
%    \begin{skbnotelist}
%      \item etoolbox - etoolbox
%      \item comment - Add comments to your \LaTeX~files
%      \item graphicx - Enhanced graphic support, with key/value interface for include graphics
%      \item longtable - Helps with tables that span multiple pages
%      \item colortbl - Allows coloured cells in tables
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage{etoolbox,comment,graphicx,longtable,colortbl}
%    \end{macrocode}
%
%    And some more packages needed quite often:
%    \begin{skbnotelist}
%      \item textcomp - Special characters, such as \textregistered~and \textcopyright
%      \item gensymb - Generic characters (math and text mode), such as  \degree, \celsius, \perthousand, \micro~and \ohm
%      \item wasysym - Adds characters from \textit{wasy} font, such as \smiley, \XBox~and \rightturn
%      \item units - Typeset units correctly (and produce 'nice' fractions), such as \unitfrac[10]{m}{s} and \nicefrac[\texttt]{1}{2}
%      \item float - Improves interface for floating environments (such as figures, tables)
%      \item xmpmulti - tbd
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage{textcomp,gensymb,wasysym,units,xmpmulti,float}
%    \end{macrocode}
%
%    The xcolor package provides driver independent access to all sorts of colour tins,
%    shades, tones and mixes. I like x11names, as you can tell.
%    \begin{macrocode}
\RequirePackage[x11names]{xcolor}
%    \end{macrocode}
%
%    The hyperref package provides layout for hyper references, such as URLs and references within a document,
%    such as acronyms, citations and the table of contents. We use the option colorlings and then provide
%    the colors we prefer for links (linkcolor), citations (citecolor) and URLs (urlcolor).
%    \begin{macrocode}
\RequirePackage[colorlinks,%
                linkcolor=Brown4,%
                citecolor=SeaGreen4,%
                urlcolor=RoyalBlue3%
               ]{hyperref}
%\RequirePackage[colorlinks,linkcolor=blue]{hyperref}
%    \end{macrocode}
%
%
% \subsubsection{Memoir Options}
%
%    Not sure, but I don't think semi-iso-pages are good. So not used right now.
%    \begin{macrocode}
%\semiisopage
%    \end{macrocode}
%
%    Change the margins for even and odd pages. Odd to 1cm and even to 1cm.
%    \begin{macrocode}
\setlength{\oddsidemargin}{1cm}
\setlength{\evensidemargin}{0cm}
%    \end{macrocode}
%
%    Set width and height for the text. At the moment only the width, to 15cm
%    \begin{macrocode}
\setlength{\textwidth}{15cm}
%\setlength{\textheight}{24cm}
%    \end{macrocode}
%
%    Don't use chapter numbers in sections, thus making them looking like sections
%    in a classic article (1 instead of the default 0.1)
%    \begin{macrocode}
\def\thesection{\arabic{section}}
%    \end{macrocode}
%
%    Allow table of contents to go up to sub-sections
%    \begin{macrocode}
\settocdepth{subsection}
%    \end{macrocode}
%
%    And numbering up to subsubsections
%    \begin{macrocode}
\setsecnumdepth{subsubsection}
%    \end{macrocode}
%
%    For lists, memoir provides different layouts. We use tightlists here, but can
%    switch that to firmlists if needed
%    \begin{macrocode}
\tightlists
%\firmlists
%    \end{macrocode}
%
%     What are these for? I forgot...
%    \begin{macrocode}
\midsloppy
\raggedbottom
%    \end{macrocode}
%
%
% \subsubsection{Misc Settings}
%
%    Finally, we do set the sort option for the bibliography to anyt (biblatex)
%    \begin{macrocode}
\ExecuteBibliographyOptions{sorting=anyt}
%    \end{macrocode}
%
%    There is no code for \cmd{\AtBeginDocument} and \cmd{\AtEndDocument}, so we are done now.
%    \begin{macrocode}
%</skbarticle>
%    \end{macrocode}
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \subsection{The Class skbbook}
%
%    This class is an example on how to use the \skbacft{A3DS:SKB} with memoir. I use skbbook
%    for my books. Using this class as a template, one can easily write other
%    classes or change/overwrite the settings done here.
%
%    First, we announce the package and the font definition file.
%    \begin{macrocode}
%<*skbbook>
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{skbbook}[2011/05/12 The SKB Book class v0.51]
%    \end{macrocode}
%
%    Now we load the memoir class with the following options:
%    \begin{skbnotelist}
%      \item 11pt - for 11 point font size
%      \item a4paper - I am European, so A4 paper makes sense here
%      \item extrafontsizes - tbd
%      \item twoside - I want my articles to be set with different even/odd pages
%      \item onecolumn - I don't necessarily like 2-columns for my articles
%      \item openright - tbd
%    \end{skbnotelist}
%    \begin{macrocode}
\LoadClass[11pt,a4paper,extrafontsizes,twoside,onecolumn,openright]{memoir}
%    \end{macrocode}
%
%    Load the \skbacft{A3DS:SKB}.
%    \begin{macrocode}
\RequirePackage{skb}
%    \end{macrocode}
%
%
% \subsubsection{Loaded Packages}
%
%    I prefer BibLaTeX over plain \BibTeX, and other parts of the \skbacft{A3DS:SKB} (such as the \skbacft{LAMP}
%    server) produce BibLaTeX. The options are:
%    \begin{skbnotelist}
%      \item style - is set to alphanumeric, much better to find/remember references.
%            If writing for IEEE or LNCS, numeric would be the prefered option.
%      \item sorting - is set to none, not needed here.
%      \item hyperref - I want to have hyperef with my citations
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage[style=alphabetic,sorting=none,hyperref]{biblatex}
%    \end{macrocode}
%
%    Load the acronym package and print only the acronyms actually used in the document.
%    This might move into the \skbacft{A3DS:SKB} package later
%    \begin{macrocode}
\RequirePackage[printonlyused]{acronym}
%    \end{macrocode}
%
%    Load a view packages that I tend to use quite often:
%    \begin{skbnotelist}
%      \item etoolbox - etoolbox
%      \item comment - Add comments to your \LaTeX~files
%      \item graphicx - Enhanced graphic support, with key/value interface for include graphics
%      \item longtable - Helps with tables that span multiple pages
%      \item colortbl - Allows coloured cells in tables
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage{etoolbox,comment,graphicx,longtable,colortbl}
%    \end{macrocode}
%
%    And some more packages needed quite often:
%    \begin{skbnotelist}
%      \item textcomp - Special characters, such as \textregistered~and \textcopyright
%      \item gensymb - Generic characters (math and text mode), such as  \degree, \celsius, \perthousand, \micro~and \ohm
%      \item wasysym - Adds characters from \textit{wasy} font, such as \smiley, \XBox~and \rightturn
%      \item units - Typeset units correctly (and produce 'nice' fractions), such as \unitfrac[10]{m}{s} and \nicefrac[\texttt]{1}{2}
%      \item float - Improves interface for floating environments (such as figures, tables)
%      \item xmpmulti - tbd
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage{textcomp,gensymb,wasysym,units,xmpmulti,float}
%    \end{macrocode}
%
%    The xcolor package provides driver independent access to all sorts of colour tins,
%    shades, tones and mixes. I like x11names, as you can tell.
%    \begin{macrocode}
\RequirePackage[x11names]{xcolor}
%    \end{macrocode}
%
%    The hyperref package provides layout for hyper references, such as URLs and references within a document,
%    such as acronyms, citations and the table of contents. We use the option colorlings and then provide
%    the colors we prefer for links (linkcolor), citations (citecolor) and URLs (urlcolor).
%    \begin{macrocode}
\RequirePackage[colorlinks,%
                linkcolor=Brown4,%
                citecolor=SeaGreen4,%
                urlcolor=RoyalBlue3%
               ]{hyperref}
%\RequirePackage[colorlinks,linkcolor=blue]{hyperref}
%    \end{macrocode}
%
%
% \subsubsection{Memoir Options}
%
%    Not sure, but I don't think semi-iso-pages are good. So not used right now.
%    \begin{macrocode}
%\semiisopage
%    \end{macrocode}
%
%    Set the head styles to komalike (the other nice style is memman).
%    \begin{macrocode}
\headstyles{komalike}
%    \end{macrocode}
%
%    Change the margins for even and odd pages. Odd to .5cm and even to 0cm.
%    \begin{macrocode}
\setlength{\oddsidemargin}{.5cm}
\setlength{\evensidemargin}{0cm}
%    \end{macrocode}
%
%    Set width and height for the text. Width to 15cm and length t0 22cm.
%    \begin{macrocode}
\setlength{\textwidth}{15cm}
\setlength{\textheight}{22cm}
%    \end{macrocode}
%
%    Get half a centimeter back from the topmargin.
%    \begin{macrocode}
\setlength{\topmargin}{-.5cm}
%    \end{macrocode}
%
%    Allow table of contents to go up to subsub-sections
%    \begin{macrocode}
\settocdepth{subsubsection}
%    \end{macrocode}
%
%    And numbering up to subsubsections
%    \begin{macrocode}
\setsecnumdepth{subsubsection}
%    \end{macrocode}
%
%    For lists, memoir provides different layouts. We use tightlists here, but can
%    switch that to firmlists if needed
%    \begin{macrocode}
\tightlists
%\firmlists
%    \end{macrocode}
%
%    What are these for? I forgot...
%    \begin{macrocode}
\midsloppy
\raggedbottom
%    \end{macrocode}
%
%    Chapters shoud look like the memoir veelo style.
%    \begin{macrocode}
\chapterstyle{veelo}
%    \end{macrocode}
%
%
% \subsubsection{Misc Settings}
%
%    Finally, we do set the sort option for the bibliography to anyt (biblatex)
%    \begin{macrocode}
\ExecuteBibliographyOptions{sorting=anyt}
%    \end{macrocode}
%
%    There is no code for \cmd{\AtBeginDocument} and \cmd{\AtEndDocument}, so we are done now.
%    \begin{macrocode}
%</skbbook>
%    \end{macrocode}
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \subsection{The Class skbbeamer}
%
%    This class is an example on how to use the \skbacft{A3DS:SKB} with memoir. I use skbbeamer
%    for my beamer presentations. Using this class as a template, one can easily write other
%    classes or change/overwrite the settings done here.
%
%    First, we announce the package and the font definition file and process the options.
%    \begin{macrocode}
%<*skbbeamer>
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{skbbeamer}[2011/05/12 The SKB Beamer class v0.51]
\DeclareOption{beameranim}{\PassOptionsToPackage{\CurrentOption}{skb}}
\DeclareOption{beamernoanim}{\PassOptionsToPackage{\CurrentOption}{skb}}
\ProcessOptions\relax
%    \end{macrocode}
%
%    Now we load the xcolor package and then the beamer class. That should load the x11names some 
%    of the \skbacft{A3DS:SKB} listing styles use while not creating any clash between the packages beamer and xcolor.
%    \begin{macrocode}
\RequirePackage[x11names]{xcolor}
\LoadClass[x11names]{beamer}
%    \end{macrocode}
%
%    Load the \skbacft{A3DS:SKB}.
%    \begin{macrocode}
\RequirePackage{skb}
%    \end{macrocode}
%
%
% \subsubsection{Loaded Packages}
%
%    I prefer BibLaTeX over plain \BibTeX, and other parts of the \skbacft{A3DS:SKB} (such as the \skbacft{LAMP}
%    server) produce BibLaTeX. The options are:
%    \begin{skbnotelist}
%      \item style - is set to alphanumeric, much better to find/remember references.
%            If writing for IEEE or LNCS, numeric would be the prefered option.
%      \item sorting - is set to none, not needed here.
%      \item hyperref - I want to have hyperef with my citations
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage[style=alphabetic,sorting=none,hyperref]{biblatex}
%    \end{macrocode}
%
%    Load the acronym package and print only the acronyms actually used in the document.
%    This might move into the \skbacft{A3DS:SKB} package later
%    \begin{macrocode}
\RequirePackage[printonlyused]{acronym}
%    \end{macrocode}
%
%    Load a view packages that I tend to use quite often:
%    \begin{skbnotelist}
%      \item etoolbox - etoolbox
%      \item comment - Add comments to your \LaTeX~files
%      \item graphicx - Enhanced graphic support, with key/value interface for include graphics
%      \item longtable - Helps with tables that span multiple pages
%      \item colortbl - Allows coloured cells in tables
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage{etoolbox,comment,graphicx,longtable,colortbl}
%    \end{macrocode}
%
%    And some more packages needed quite often:
%    \begin{skbnotelist}
%      \item textcomp - Special characters, such as \textregistered~and \textcopyright
%      \item gensymb - Generic characters (math and text mode), such as  \degree, \celsius, \perthousand, \micro~and \ohm
%      \item wasysym - Adds characters from \textit{wasy} font, such as \smiley, \XBox~and \rightturn
%      \item units - Typeset units correctly (and produce 'nice' fractions), such as \unitfrac[10]{m}{s} and \nicefrac[\texttt]{1}{2}
%      \item float - Improves interface for floating environments (such as figures, tables)
%      \item xmpmulti - tbd
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage{textcomp,gensymb,wasysym,units,xmpmulti,float}
%    \end{macrocode}
%
%
% \subsubsection{Misc Settings}
%
%    And some default settings for the dirtree package.
%    \begin{macrocode}
\renewcommand*\DTstylecomment{\itshape\sffamily\color{blue}\scriptsize}
\setlength{\DTbaselineskip}{10pt}
\DTsetlength{0.2em}{1em}{0.2em}{0.4pt}{1.6pt}
\renewcommand*\DTstyle{\scriptsize\ttfamily\textcolor{black}}
%    \end{macrocode}
%
%    There is no code for \cmd{\AtBeginDocument} and \cmd{\AtEndDocument}, so we are done now.
%    \begin{macrocode}
%</skbbeamer>
%    \end{macrocode}
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \subsection{The Class skblncsbeamer}
%
%    This class is an example on how to use the \skbacft{A3DS:SKB} with memoir. I use skblncsbeamer
%    for my beamer based handouts. Using this class as a template, one can easily write other
%    classes or change/overwrite the settings done here.
%
%    First, we announce the package and the font definition file.
%    \begin{macrocode}
%<*skblncsbeamer>
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{skblncsbeamer}[2011/05/12 The SKB LNCS Beamer class v0.51]
%    \end{macrocode}
%
%    Just in case there is no \cmd{\titlepage} declared, the beamerarticle wants that.
%    \begin{macrocode}
\providecommand{\titlepage}{}
%    \end{macrocode}
%
%    Now we load the memoir class with the following options:
%    \begin{skbnotelist}
%      \item 9pt - for 9 point font size
%      \item a4paper - I am European, so A4 paper makes sense here
%      \item extrafontsizes - tbd
%      \item twoside - I want my articles to be set with different even/odd pages
%      \item onecolumn - I don't necessarily like 2-columns for my articles
%      \item openright - tbd
%      \item article - use memoir as if it is an article
%      \item x11names - this option will be forwarded to the xcolor/graphics packages
%    \end{skbnotelist}
%    \begin{macrocode}
\LoadClass[9pt,a4paper,extrafontsizes,twoside,onecolumn,openright,article,x11names]{memoir}
%    \end{macrocode}
%
%    For Beamer handouts, we need the beamerarticle package to load the frame thumbnails.
%    \begin{macrocode}
\RequirePackage{beamerarticle,pgf}
%    \end{macrocode}
%
%    Load the \skbacft{A3DS:SKB}.
%    \begin{macrocode}
\RequirePackage{skb}
%    \end{macrocode}
%
%
% \subsubsection{Loaded Packages}
%
%    I prefer BibLaTeX over plain \BibTeX, and other parts of the \skbacft{A3DS:SKB} (such as the \skbacft{LAMP}
%    server) produce BibLaTeX. The options are:
%    \begin{skbnotelist}
%      \item style - is set to alphanumeric, much better to find/remember references.
%            If writing for IEEE or LNCS, numeric would be the prefered option.
%      \item sorting - is set to none, not needed here.
%      \item hyperref - I want to have hyperef with my citations
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage[style=alphabetic,sorting=none,hyperref]{biblatex}
%    \end{macrocode}
%
%    Load the acronym package and print only the acronyms actually used in the document.
%    This might move into the \skbacft{A3DS:SKB} package later.
%    \begin{macrocode}
\RequirePackage[printonlyused]{acronym}
%    \end{macrocode}
%
%    Load a view packages that I tend to use quite often:
%    \begin{skbnotelist}
%      \item etoolbox - etoolbox
%      \item comment - Add comments to your \LaTeX~files
%      \item graphicx - Enhanced graphic support, with key/value interface for include graphics
%      \item longtable - Helps with tables that span multiple pages
%      \item colortbl - Allows coloured cells in tables
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage{etoolbox,comment,graphicx,longtable,colortbl}
%    \end{macrocode}
%
%    And some more packages needed quite often:
%    \begin{skbnotelist}
%      \item textcomp - Special characters, such as \textregistered~and \textcopyright
%      \item gensymb - Generic characters (math and text mode), such as  \degree, \celsius, \perthousand, \micro~and \ohm
%      \item wasysym - Adds characters from \textit{wasy} font, such as \smiley, \XBox~and \rightturn
%      \item units - Typeset units correctly (and produce 'nice' fractions), such as \unitfrac[10]{m}{s} and \nicefrac[\texttt]{1}{2}
%      \item float - Improves interface for floating environments (such as figures, tables)
%      \item xmpmulti - tbd
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage{textcomp,gensymb,wasysym,units,xmpmulti}
%    \end{macrocode}
%
%
% \subsubsection{Memoir Options}
%
%    Not sure, but I don't think semi-iso-pages are good. So not used right now.
%    \begin{macrocode}
%\semiisopage
%    \end{macrocode}
%
%    We do want to list files.
%    \begin{macrocode}
\listfiles
%    \end{macrocode}
%
%    Change the margins for even and odd pages. Odd to 0cm and even to 1cm.
%    \begin{macrocode}
\setlength{\oddsidemargin}{0cm}
\setlength{\evensidemargin}{0cm}
%    \end{macrocode}
%
%    Set width and height for the text. Width to 15cm and height to 24.5cm.
%    \begin{macrocode}
\setlength{\textwidth}{15cm}
\setlength{\textheight}{24.5cm}
%    \end{macrocode}
%
%    Get half a centimeter back from the topmargin.
%    \begin{macrocode}
\setlength{\topmargin}{-1.5cm}
%    \end{macrocode}
%
%    Don't use chapter numbers in sections, thus making them looking like sections
%    in a classic article (1 instead of the default 0.1)
%    \begin{macrocode}
\def\thesection{\arabic{section}}
%    \end{macrocode}
%
%    Allow table of contents to go up to sub-sections
%    \begin{macrocode}
\settocdepth{subsection}
%    \end{macrocode}
%
%    And numbering up to subsubsections
%    \begin{macrocode}
\setsecnumdepth{subsubsection}
%    \end{macrocode}
%
%    Set the head styles to komalike (the other nice style is memman).
%    \begin{macrocode}
\headstyles{komalike}
%    \end{macrocode}
%
%    For lists, memoir provides different layouts. We use tightlists here, but can
%    switch that to firmlists if needed
%    \begin{macrocode}
\tightlists
%\firmlists
%    \end{macrocode}
%
%     What are these for? I forgot...
%    \begin{macrocode}
\midsloppy
\raggedbottom
%    \end{macrocode}
%
%    Set parindent to 0pt and parskip to 0.2pt.
%    \begin{macrocode}
\parindent0pt
\setlength{\parskip}{0.2cm}
%    \end{macrocode}
%
% \subsubsection{Misc Settings}
%
%    Do an index.
%    \begin{macrocode}
\makeindex
%    \end{macrocode}
%
%    Before we start with the actual document, we want the title slide and
%    the table of contents on the first page.
%    \begin{macrocode}
\AtBeginDocument{
  \resizebox{\textwidth}{!}{\includeslide{title}}
  \bigskip
  \tableofcontents*
  \bigskip
  \newpage
}
%    \end{macrocode}
%
%    There is no code for \cmd{\AtEndDocument}, so we are done now.
%    \begin{macrocode}
%</skblncsbeamer>
%    \end{macrocode}
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \subsection{The Class skblncsppt}
%
%    This class is an example on how to use the \skbacft{A3DS:SKB} with memoir. I use skblncsppt
%    for handouts (anotated slides) based on Microsoft's PPT. Reason for that is
%    that the \skbacft{ISO:PDF} export and print routines in Microsoft Office 2010 no longer
%    support vector images for the slide thumbnails, which renders handouts almost
%    useless. So I do print the PPT slides into \skbacft{ISO:PDF} (screen resolution, that way one
%    avoids frames around the slides), and then \LaTeX~to generate handouts.
%    Using this class as
%    a template, one can easily write other
%    classes or change/overwrite the settings done here.
%
%    First, we announce the package and the font definition file.
%    \begin{macrocode}
%<*skblncsppt>
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{skblncsppt}[2011/05/12 The SKB LNCS PPT class v0.51]
%    \end{macrocode}
%
%    Now we load the memoir class with the following options:
%    \begin{skbnotelist}
%      \item 9pt - for 9 point font size
%      \item a4paper - I am European, so A4 paper makes sense here
%      \item extrafontsizes - tbd
%      \item twoside - I want my articles to be set with different even/odd pages
%      \item onecolumn - I don't necessarily like 2-columns for my articles
%      \item openright - tbd
%      \item article - use memoir as if it is an article
%    \end{skbnotelist}
%    \begin{macrocode}
\LoadClass[9pt,a4paper,extrafontsizes,twoside,onecolumn,openright,article]{memoir}
%    \end{macrocode}
%
%    Load the \skbacft{A3DS:SKB}.
%    \begin{macrocode}
\RequirePackage{skb}
%    \end{macrocode}
%
%
% \subsubsection{Loaded Packages}
%
%    I prefer BibLaTeX over plain \BibTeX, and other parts of the \skbacft{A3DS:SKB} (such as the \skbacft{LAMP}
%    server) produce BibLaTeX. The options are:
%    \begin{skbnotelist}
%      \item style - is set to alphanumeric, much better to find/remember references.
%            If writing for IEEE or LNCS, numeric would be the prefered option.
%      \item sorting - is set to none, not needed here.
%      \item hyperref - I want to have hyperef with my citations
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage[style=alphabetic,sorting=none,hyperref]{biblatex}
%    \end{macrocode}
%
%    Load the acronym package and print only the acronyms actually used in the document.
%    This might move into the \skbacft{A3DS:SKB} package later.
%    \begin{macrocode}
\RequirePackage[printonlyused]{acronym}
%    \end{macrocode}
%
%    Load a view packages that I tend to use quite often:
%    \begin{skbnotelist}
%      \item etoolbox - etoolbox
%      \item comment - Add comments to your \LaTeX~files
%      \item graphicx - Enhanced graphic support, with key/value interface for include graphics
%      \item longtable - Helps with tables that span multiple pages
%      \item colortbl - Allows coloured cells in tables
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage{etoolbox,comment,graphicx,longtable,colortbl}
%    \end{macrocode}
%
%    And some more packages needed quite often:
%    \begin{skbnotelist}
%      \item textcomp - Special characters, such as \textregistered~and \textcopyright
%      \item gensymb - Generic characters (math and text mode), such as  \degree, \celsius, \perthousand, \micro~and \ohm
%      \item wasysym - Adds characters from \textit{wasy} font, such as \smiley, \XBox~and \rightturn
%      \item units - Typeset units correctly (and produce 'nice' fractions), such as \unitfrac[10]{m}{s} and \nicefrac[\texttt]{1}{2}
%      \item float - Improves interface for floating environments (such as figures, tables)
%      \item xmpmulti - tbd
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage{textcomp,gensymb,wasysym,units,xmpmulti,float}
%    \end{macrocode}
%
%    The xcolor package provides driver independent access to all sorts of colour tins,
%    shades, tones and mixes. I like x11names, as you can tell.
%    \begin{macrocode}
\RequirePackage[x11names]{xcolor}
%    \end{macrocode}
%
%    The hyperref package provides layout for hyper references, such as URLs and references within a document,
%    such as acronyms, citations and the table of contents. We use the option colorlings and then provide
%    the colors we prefer for links (linkcolor), citations (citecolor) and URLs (urlcolor).
%    \begin{macrocode}
\RequirePackage[colorlinks,%
                linkcolor=Brown4,%
                citecolor=SeaGreen4,%
                urlcolor=RoyalBlue3%
               ]{hyperref}
%\RequirePackage[colorlinks,linkcolor=blue]{hyperref}
%    \end{macrocode}
%
%
% \subsubsection{Memoir Options}
%
%    Not sure, but I don't think semi-iso-pages are good. So not used right now.
%    \begin{macrocode}
%\semiisopage
%    \end{macrocode}
%
%    We do want to list files.
%    \begin{macrocode}
\listfiles
%    \end{macrocode}
%
%    Change the margins for even and odd pages. Odd to 0cm and even to 1cm.
%    \begin{macrocode}
\setlength{\oddsidemargin}{0cm}
\setlength{\evensidemargin}{0cm}
%    \end{macrocode}
%
%    Set width and height for the text. Width to 15cm and height to 24.5cm.
%    \begin{macrocode}
\setlength{\textwidth}{15cm}
\setlength{\textheight}{24.5cm}
%    \end{macrocode}
%
%    Get half a centimeter back from the topmargin.
%    \begin{macrocode}
\setlength{\topmargin}{-1.5cm}
%    \end{macrocode}
%
%    Don't use chapter numbers in sections, thus making them looking like sections
%    in a classic article (1 instead of the default 0.1)
%    \begin{macrocode}
\def\thesection{\arabic{section}}
%    \end{macrocode}
%
%    Allow table of contents to go up to sub-sections
%    \begin{macrocode}
\settocdepth{subsection}
%    \end{macrocode}
%
%    And numbering up to subsubsections
%    \begin{macrocode}
\setsecnumdepth{subsubsection}
%    \end{macrocode}
%
%    Set the head styles to komalike (the other nice style is memman).
%    \begin{macrocode}
\headstyles{komalike}
%    \end{macrocode}
%
%    For lists, memoir provides different layouts. We use tightlists here, but can
%    switch that to firmlists if needed
%    \begin{macrocode}
\tightlists
%\firmlists
%    \end{macrocode}
%
%     What are these for? I forgot...
%    \begin{macrocode}
\midsloppy
\raggedbottom
%    \end{macrocode}
%
%     We want ruled pages and arabic page numbering.
%    \begin{macrocode}
\pagestyle{ruled}
\pagenumbering{arabic}
%    \end{macrocode}
%
%
% \subsubsection{Misc Settings}
%
%    Do an index.
%    \begin{macrocode}
\makeindex
%    \end{macrocode}
%
%    There is no code for \cmd{\AtBeginDocument} and \cmd{\AtEndDocument}, so we are done now.
%    \begin{macrocode}
%</skblncsppt>
%    \end{macrocode}
%
%
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \subsection{The Class skbmoderncv}
%
%    This class integrates the moderncv package into the \skbacft{A3DS:SKB}. I use moderncv
%    for my own CV and with the \skbacft{A3DS:SKB} I am able to maintain all information while
%    producing different documents (i.e. one for a research proposal, for my website, for journals, etc.).
%    This class provides some macros using biblatex to create several lists of publications, i.e. a different
%    list for articles, proceedings, conference papers per year, etc.
%
%    First, we announce the package and the font definition file and process the options.
%    \begin{macrocode}
%<*skbmoderncv>
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{skbmoderncv}[2011/05/12 The SKB Modern CV class v0.51]
%    \end{macrocode}
%
%    Now we load the moderncv package. By default we use an 11 point font and A4 paper. Once can change these
%    settings later in a CV document.
%    \begin{macrocode}
\LoadClass[11pt,a4paper]{moderncv}
%    \end{macrocode}
%
%    Load the \skbacft{A3DS:SKB}.
%    \begin{macrocode}
\RequirePackage{skb}
%    \end{macrocode}
%
%
% \subsubsection{Loaded Packages}
%
%    I prefer BibLaTeX over plain \BibTeX, and other parts of the \skbacft{A3DS:SKB} (such as the \skbacft{LAMP}
%    server) produce BibLaTeX. The options are:
%    \begin{skbnotelist}
%      \item style - is set to alphabetic, much better to find/remember references.
%                    If writing for IEEE or LNCS, numeric would be the prefered option.
%      \item sorting - is set to ynt, year first, then author name then title.
%      \item bibstyle - is set to standard, which means there are no labels (we set labels as enumerate list later).
%      \item hyperref - I want to have hyperef with my citations
%    \end{skbnotelist}
%    \begin{macrocode}
\RequirePackage[style=alphabetic,sorting=ynt,bibstyle=standard,hyperref]{biblatex}
%    \end{macrocode}
%
%    Load the eurofont package for the Euro sign.
%    \begin{macrocode}
\RequirePackage{eurofont}
%    \end{macrocode}
%
%    Load the enumitem package, which is used later to change indents on the enumerate list for publication references.
%    \begin{macrocode}
\RequirePackage{enumitem}
%    \end{macrocode}
%
%    Load the xcolor and hyperref packages to allow painting URLs in publication references.
%    \begin{macrocode}
\RequirePackage[x11names]{xcolor}
\RequirePackage[colorlinks,%
                linkcolor=Brown4,%
                citecolor=SeaGreen4,%
                urlcolor=RoyalBlue3,%
                pdftex
               ]{hyperref}
%    \end{macrocode}
%
%
% \subsubsection{Misc Settings}
%
%    Configure moderncv to use the classic layout.
%    \begin{macrocode}
\moderncvtheme{classic}
%    \end{macrocode}
%
%    Some definitions for list symbols.
%    \begin{macrocode}
\newcommand{\up}[1]{\ensuremath{^\textrm{\scriptsize#1}}}
\renewcommand{\listitemsymbol}{\textendash}
%    \end{macrocode}
%
%    Define a new heading for BibLaTeX doing nothing, we want to set headings manually in the CV.
%    \begin{macrocode}
\defbibheading{None}{}
%    \end{macrocode}
%
% \subsection{Macros}
%
%    \DescribeMacro{\skbcvrefplain}
%    This macro prints a list of references without any labels. It expects a list of citation references, and empty list is valid and 
%    and will result in an empty reference list. The macro defines a new environment for the BibTeX list adding an indent to the list
%    using moderncv counters. \cmd{\hintscolumnwidth} is the left column of an entry and \cmd{\separatorcolumnwidth} is the middle column
%    providing a spacer between left and right.
%
%    With the new environment defined, the macro then opens a new refsgment (BibLaTeX) to group all references without impacting the overall
%    reference list. It uses \cmd{\nocite} to mark all references as being used without printing them, and then \cmd{\printbibliography} for
%    printing the list. The options here are:
%    \begin{skbnotelist}
%      \item heading - refers to the new heading we have defined earlier, called None.
%      \item segment - points to the current refsegment, so only references used here will be part of the list.
%      \item maxnames - the maximum names shown per entry, we want to see as many as possible.
%      \item minnames - the minimum names shown per entry, we want to see as many as possible.
%    \end{skbnotelist}
%    \begin{macrocode}
\newcommand{\skbcvrefplain}[1]{%
  \defbibenvironment{bibliography}
    {\list{}{%
       \setlength{\parindent}{\hintscolumnwidth}
       \addtolength{\parindent}{\separatorcolumnwidth}
       \leftmargin\parindent
       \setlength{\parindent}{0pt}
       \itemindent\parindent
       \itemsep\bibitemsep
       \parsep\bibparsep
    }}
    {\endlist}
    {\item}

  \begin{refsegment}
    \nocite{#1}
    \printbibliography[heading=None,segment=\therefsegment,maxnames=20,minnames=20]
  \end{refsegment}
}
%    \end{macrocode}
%
%    \DescribeMacro{\skbcvrefenum}
%    This macro prints a list of references as an enumerated list, which helps to see how many entries a list has and also makes it
%    easier to read the list in the final CV. It expects a list of citation references, and empty list is valid and 
%    and will result in an empty reference list. The macro defines a new environment for the BibTeX list using an enumerate environment, which 
%    was of course alreadt changed loading the enumitem package. First, we calculate the length for \cmd{\parindent} by setting it to \cmd{hintscolumnwidth},
%    addint \cmd{separatorcolumnwidth} and finally adding another 1pt to it. This will make the items of the enumeration list appear within the left column of 
%    the CV. We then apply a few options to the enumerate environment:
%    \begin{skbnotelist}
%      \item leftmargin - set to the newly calculate \cmd{\parindent}.
%      \item labelsep - set to the spacer defined in moderncv \cmd{\separatorcolumnwidth}.
%      \item label - set to use arabic numbers without any trailing full stop.
%      \item noitemsep - no vertical separation between items, we want a small list.
%      \item topsep - finally add a top separator for the items of 1pt.
%    \end{skbnotelist}
%    To reset \cmd{\parindent}, we set it back to 0pt once the enumerate environment is closed.
%
%    With the new environment defined, the macro then opens a new refsgment (BibLaTeX) to group all references without impacting the overall
%    reference list. It uses \cmd{\nocite} to mark all references as being used without printing them, and then \cmd{\printbibliography} for
%    printing the list. The options here are:
%    \begin{skbnotelist}
%      \item heading - refers to the new heading we have defined earlier, called None.
%      \item segment - points to the current refsegment, so only references used here will be part of the list.
%      \item maxnames - the maximum names shown per entry, we want to see as many as possible.
%      \item minnames - the minimum names shown per entry, we want to see as many as possible.
%    \end{skbnotelist}
%    \begin{macrocode}
\newcommand{\skbcvrefenum}[1]{%
  \defbibenvironment{bibliography}
    {\setlength{\parindent}{\hintscolumnwidth}
     \addtolength{\parindent}{\separatorcolumnwidth}
     \addtolength{\parindent}{1pt}
     \begin{enumerate}[leftmargin=\parindent,labelsep=\separatorcolumnwidth,label*=\arabic*,noitemsep,topsep=1pt]{%
    }}
    {\end{enumerate}%
     \setlength{\parindent}{0pt}
    }
    {\item}

  \begin{refsegment}
    \nocite{#1}
    \printbibliography[heading=None,segment=\therefsegment,maxnames=20,minnames=20]
  \end{refsegment}
}
%    \end{macrocode}
%
%
%    There is no code for \cmd{\AtBeginDocument} and \cmd{\AtEndDocument}, so we are done now.
%    \begin{macrocode}
%</skbmoderncv>
%    \end{macrocode}
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%^^A \skbinput[from=rep,level=section]{history}
%
%\section{History and Change Log}
%
%\subsection{v0.10 from 06-Jul-2010}
%
%\begin{skbnotelist}
%  \item first source forge release of the skb
%  \item at this stage a collection of .sty and .tex files
%  \item documentation in a separate pdf file
%  \item included acronym list
%\end{skbnotelist}
%
%
%\subsection{v0.20 from 08-Jul-2010}
%
%\begin{skbnotelist}
%  \item first \LaTeX~package version of the skb
%  \item no changes in the documentation and no change in commands
%  \item removed acronym list
%\end{skbnotelist}
%
%
%\subsection{v0.30 from 14-Jul-2010}
%
%\begin{skbnotelist}
%  \item First dtx release of the skb, including the package and all classes introduced in v0.2
%  \item Integrated parts of the v0.1 pdf as documentation and added documentation for many commands (not finished though)
%  \item Re-write of all load commands (publish, repository, figures, acronyms, bib) and rename of all old load commands, new command names use only lowercases in their names
%  \item In rewrite, many commands could be removed w/o losing their functionality
%  \item New Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\skbfigure} -- load figures with some options
%      \item \lstinline[basicstyle=\ttfamily]{\skbinput} -- load files with some options
%      \item \lstinline[basicstyle=\ttfamily]{\skbheading} -- set heading text in a file loaded
%      \item \lstinline[basicstyle=\ttfamily]{\skbheadingudc} -- set heading relatively to the last heading level (up, down, current) (experimental)
%      \item \lstinline[basicstyle=\ttfamily]{\skbem} -- emphasise code using options
%      \item \lstinline[basicstyle=\ttfamily]{\skbacft} -- rename of \lstinline[basicstyle=\ttfamily]{\SkbAcFT}
%      \item \lstinline[basicstyle=\ttfamily]{\skbacronyms} -- rename of \lstinline[basicstyle=\ttfamily]{\SkbLoadAcronyms}
%      \item \lstinline[basicstyle=\ttfamily]{\skbbibtex} -- rename of \lstinline[basicstyle=\ttfamily]{\SkbLoadBibtex}
%      \item environment \lstinline[basicstyle=\ttfamily]{skbnotelist} -- itemize list with \lstinline[basicstyle=\ttfamily]{\parskip 0} and \lstinline[basicstyle=\ttfamily]{\itemskip 0}
%      \item environment \lstinline[basicstyle=\ttfamily]{skbnoteenum} -- enumerate list with \lstinline[basicstyle=\ttfamily]{\parskip 0} and \lstinline[basicstyle=\ttfamily]{\itemskip 0}
%    \end{skbnotelist}
%  \item Replaced Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbSetTitle} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbheading}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbFigure} $\mapsto$ removed, closest is \lstinline[basicstyle=\ttfamily]{\skbfigure} (but changed behaviour!)
%      \item \lstinline[basicstyle=\ttfamily]{\listingInline} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbem[code]}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbEmIT} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbem[italic]}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbEmBF} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbem[bold]}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbAcFT} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbacft}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbLoadAcronyms} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbacronyms}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbLoadBibtex} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbbibtex}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbLoadRepository} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbinput[from=rep]}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbLoadPublish} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbinput[from=pub]}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbItemizeBegin} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbItemizeEnd} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\end{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbEnumerateBegin} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\begin{skbnoteenum}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbEnumerateEnd} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\end{skbnoteenum}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbFigureBeamerTextWidth} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbfigure[width=##]}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbFigureBeamerTextHeight} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbfigure[height=##]}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbFigureBeamerNoResize} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbfigure[]}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbFigureBeamerTextWidthPDFMulti} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbfigure[multiinclude=##]}
%    \end{skbnotelist}
%\end{skbnotelist}
%
%
%\subsection{v0.31 from 20-Jul-2010}
%
%\begin{skbnotelist}
%  \item fixed space problem in \cmd{\skbem}
%  \item added error handling to the options skbconfig and skbheading
%  \item added error handling for skbinput related macros
%  \item separated documentation, skb.dtx is now using itself to create the documentation
%  \item removed old code: DeclareOptions (none declared)
%  \item changed a lot in the documentation
%  \item prepare for CTAN submission, i.e. adding README and other things
%
%  \item New Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\skbconfig} -- change the path/file options
%      \item \lstinline[basicstyle=\ttfamily]{\skbsubject} -- add subject information for PDF
%      \item \lstinline[basicstyle=\ttfamily]{\subkeywords} -- add keyword information for PDF
%      \item \lstinline[basicstyle=\ttfamily]{\skbpdfinfo} -- generate PDF information
%    \end{skbnotelist}
%
%  \item Changed Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\skbfigure} -- added option for position, moved caption/label from argument to option
%      \item \lstinline[basicstyle=\ttfamily]{\title} -- re-newed to store PDF info information (experimental)
%      \item \lstinline[basicstyle=\ttfamily]{\author} -- re-newed to store PDF info information (experimental)
%    \end{skbnotelist}
%
%  \item Replaced Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbCodeInline} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbcode}
%    \end{skbnotelist}
%
%\end{skbnotelist}
%
%
%\subsection{v0.32 from 20-Jul-2010}
%
%\begin{skbnotelist}
%  \item fastest re-release, I had built-in some problems and excluded important code in v0.31, fixed now
%\end{skbnotelist}
%
%
%\subsection{v0.4 from 21-Jul-2010}
%
%\begin{skbnotelist}
%  \item major re-write of the kernel subsequently the documentation. Most internal macros will have been
%        changed or removed, some are added. Also re-arranged the macros in the dtx file to (hopefully)
%        optimise the documentation
%  \item added input for skb.cfg and skblocal.cfg to overwrite package options with configuration files
%  \item added skb.cfg to the distribution
%
%  \item New Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\skbpathroot} -- returns current root path
%      \item \lstinline[basicstyle=\ttfamily]{\skbfileroot} -- returns root/\#1
%      \item \lstinline[basicstyle=\ttfamily]{\skbfileacr} -- returns current acronym path and file
%      \item \lstinline[basicstyle=\ttfamily]{\skbfilebib} -- returns current bibtex path and file
%      \item \lstinline[basicstyle=\ttfamily]{\skbpathbib} -- returns current bibtex path
%      \item \lstinline[basicstyle=\ttfamily]{\skbfilerep} -- returns rep/\#1
%      \item \lstinline[basicstyle=\ttfamily]{\skbfilepub} -- returns pub/\#1
%      \item \lstinline[basicstyle=\ttfamily]{\skbfilefig} -- returns fig/\#1
%      \item \lstinline[basicstyle=\ttfamily]{\skbfilesli} -- returns sli/\#1
%      \item \lstinline[basicstyle=\ttfamily]{\skboptionsused} -- prints a warning with change log of otptions and current values
%    \end{skbnotelist}
%
%  \item Changed Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\skbconfig} -- added parameter to identify origin of the configuration change
%    \end{skbnotelist}
%
%  \item Replaced Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbPathBib} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbpathbib}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbPathFig} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbfilefig}
%    \end{skbnotelist}
%
%\end{skbnotelist}
%
%
%\subsection{v0.5 from 04-Aug-2010}
%
%\begin{skbnotelist}
%  \item this is the first version on CTAN: http://www.ctan.org/tex-archive/macros/latex/contrib/skb/
%  \item added example describing how the SKB uses itself to create parts of its documentation
%  \item removed the redefinition of \cmd{\title} and \cmd{\author}, since they intererred with the beamer package definitions of these macros.
%        added \cmd{\skbtitle} and \cmd{\skbauthor} instead.
%  \item added RequiredPackage in the class skbbeamer before loading beamer to load xcolors with x11names
%  \item added test for nemoir class: if loaded, then skbnotelist and skbnoteenum will have no effect; if not loaded, then the package
%        booktabs will be loaded (for top/mid/bottomrule
%  \item added test for beamer package: depending if beamer or beamerarticle are loaded, the SKB will initialise a few newe ifs
%  \item added required package dirtree, and redefinition of some dirtree styles
%  \item added two options to the SKB package: beameranim and beamernoanim
%  \item added the package versions with the environments: skbmodetext, skbmodenote and skbmodeslide
%  \item added the package optional with the options: text, note, slide, anim and noanim
%  \item internally, the package optional also provides memoir
%  \item changed the documentation, moved manual description to user guide in folder /doc, moved history.tex into the dtx file and
%        changed most of the actual documentation (still not finished though)
%  \item skbbeamer: corrected load of beamer package
%  \item skblncsbeamer: moved load of skb after beamerarticle to allow skb to create proper options
%  \item added \cmd{\providecommand} for \cmd{DescribeMacro} and \cmd{\cmd}, so that we can use the user-guide in the dtx and stand-alone
%  \item added conditional load of skb.dtx in the driver
%  \item changed the sequence of definitions in the dtx file, again, hopefully the last time
%
%  \item Bug Fixes (SF=sourceforge):
%    \begin{skbnotelist}
%      \item SF\#3032749 (skboptionsused doesn't work) -- fixed, changed \lstinline[basicstyle=\ttfamily]{\skb@setCfgVars}
%      \item SF\#3032752 (history section for v0.4 has wrong date) -- fixed, changed the heading
%      \item SF\#3032754 (skb.cfg missing/empty) -- fixed, changed the installer (skb.ins) to generate it and my local scripts to put it into /run
%      \item SF\#3033124 (renewcommand title/author doesn't work) -- fixed, no renewcommand anymore, two new commands to set author/title for pdfinfo
%      \item SF\#3038935 (skbinput not working w/o from) -- fixed, can load from root directory now
%    \end{skbnotelist}
%
%  \item New Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\skbtitle} -- title for PDF info
%      \item \lstinline[basicstyle=\ttfamily]{\skbauthor} -- author for PDF info
%      \item \lstinline[basicstyle=\ttfamily]{\skbslide} -- load slides and annotations
%      \item \lstinline[basicstyle=\ttfamily]{\skbslidecite} -- for citations on slide annotation pages
%    \end{skbnotelist}
%
%  \item Changed Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\skbinput} -- added option to load tex files from figures directory (option fig)
%    \end{skbnotelist}
%
%  \item Replaced Commands:
%    \begin{skbnotelist}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbLoadSlideNotes} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbslide} with option annotate and first argument only
%      \item \lstinline[basicstyle=\ttfamily]{\SkbLoadSlideNotesDifferent} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbslide} with option annotate and both arguments
%      \item \lstinline[basicstyle=\ttfamily]{\SkbLoadSlideNotesExtern} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbslide} with option annotate and both arguments and option notefrom set
%      \item \lstinline[basicstyle=\ttfamily]{\SkbLoadSlideNotes} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbslide} without annotate and first argument only
%      \item \lstinline[basicstyle=\ttfamily]{\SkbLoadSlideOnlyNotes} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbslide} with option annotate and second argument only
%      \item \lstinline[basicstyle=\ttfamily]{\SkbSlideSource} $\mapsto$ replaced by \lstinline[basicstyle=\ttfamily]{\skbslidecite}
%      \item \lstinline[basicstyle=\ttfamily]{\SkbBeamerAnimtrue} $\mapsto$ replaced by options beameranim and beamernoanim for skbbeamer
%      \item \lstinline[basicstyle=\ttfamily]{\SkbBeamerAnimtrue} $\mapsto$ usage of this if replaced by \cmd{\opt} with anim and noanim
%    \end{skbnotelist}
%
%\end{skbnotelist}
%
%
%\subsection{v0.51 from 12-May-2011}
%
%\begin{skbnotelist}
%  \item worked on the documentation, lots of changes
%  \item fixed a typo in skb.cfg, which made the bibliography file unloadable
%  \item changed linkcolor from AntiqueWhite4 to Brown4
%  \item added acronym database (short version of the automatically generated) and acronym handling in the documentation
%  \item removed \cmd{\SKB}, appropriately it's now an acronym rather than a special type setting
%  \item added bibtex load to the documentation
%  \item removed call to \cmd{\skbbibtex} from class files, users need to call that now manually. reason is that otherwise
%        configuration changes for bib/bibfile have no effect
%  \item changed load mechanism for the user guide, due to bibtex load problems
%  \item changed the two skbnote environments (list/enum), removed unnecessary temp storage
%  \item changed default acronym file name to acronyms, note the added 's'
%  \item added skbmoderncv class using the moderncv package and adding some macros for reference lists using biblatex
%\end{skbnotelist}
%
%
%
%
%\section*{Acronyms}
%  \skbacronyms
%
%\printbibliography
%
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
% \Finale
\endinput
%
%% \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         \~}
 