% --------------------------------------------------------------------------
% the CNLTX bundle
%
%   LaTeX source code and output
%
% --------------------------------------------------------------------------
% Clemens Niederberger
% Web:    https://github.com/cgnieder/cnltx/
% E-Mail: contact@mychemistry.eu
% --------------------------------------------------------------------------
% Copyright 2013--2019 Clemens Niederberger
%
% 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 `maintained'.
%
% The Current Maintainer of this work is Clemens Niederberger.
% --------------------------------------------------------------------------
% If you have any ideas, questions, suggestions or bugs to report, please
% feel free to contact me.
% --------------------------------------------------------------------------
\RequirePackage{cnltx-base}
\ProvidesClass{cnltx-doc}[\cnltx@@date\space \cnltx@@version\space
 \cnltx@@info]

\cnltx@create@bundle@message*{doc}{Error}
\cnltx@create@bundle@message*{doc}{Warning}
\cnltx@create@bundle@message*{doc}{WarningNoLine}
\cnltx@create@bundle@message*{doc}{Info}

\newbool{cnltx@load@preamble}
\newbool{cnltx@add@index}
\newbool{cnltx@add@bib}
\newbool{cnltx@load@fonts}
\newbool{cnltx@microtype}
\newbool{cnltx@layout}

\booltrue{cnltx@layout}

\newcommand*\cnltx@scrartcl@options{}
\newcommand*\cnltx@babel@options{english}


\pgfkeys{
  cnltx-doc/.cd,
    scrartcl/.code         = \PassOptionsToClass{#1}{scrartcl} ,
    load-preamble--/.is if = cnltx@load@preamble ,
    load-fonts/.is if      = cnltx@load@fonts ,
    load-microtype/.is if  = cnltx@microtype ,
    load-preamble-/.code   =
      \booltrue{cnltx@load@preamble}
      \booltrue{cnltx@microtype} ,
    load-preamble/.code    =
      \booltrue{cnltx@load@preamble}
      \booltrue{cnltx@load@fonts}
      \booltrue{cnltx@microtype} ,
    add-index/.is if       = cnltx@add@index ,
    add-bib/.is if         = cnltx@add@bib ,
    load-preamble+/.code   =
      \booltrue{cnltx@load@preamble}
      \booltrue{cnltx@load@fonts}
      \booltrue{cnltx@microtype}
      \booltrue{cnltx@add@index}
      \booltrue{cnltx@add@bib} ,
    babel-options/.code    = \def\cnltx@babel@options{#1} ,
    adapt-layout/.is if    = cnltx@layout ,
    unknown/.code          =
      \edef\cnltx@scrartcl@options{\cnltx@scrartcl@options,\pgfkeyscurrentname}
}

\ProcessPgfOptions{/cnltx-doc}

\LoadClass[\cnltx@scrartcl@options]{scrartcl}


\newcommand*\cnltx@index@prologue{}
\newbool{cnltx@index@prologue}
\newlength\cnltx@index@space

\newcommand*\cnltx@index@setup{othercode=\footnotesize,level=\addsec}
\newcommand*\cnltx@makeindex@setup{columns=2,columnsep=1em}
\newcommand*\cnltx@index@style{cnltx.ist}

\pgfkeys{
  cnltx/.cd,
    index-prologue/.code  =
      \def\cnltx@index@prologue{#1}
      \booltrue{cnltx@index@prologue} ,
    index-space/.code     = \setlength\cnltx@index@space{#1} ,
    index-setup/.code     = \def\cnltx@index@setup{#1} ,
    makeindex-setup/.code = \def\cnltx@makeindex@setup{#1} ,
    index-style/.code     = \def\cnltx@index@style{#1}
}


\cnltx@load@modules{tools,names,example,listings,translations}

\newcommand*\cnltx@caption@font{\normalfont\small\sffamily}
\newcommand*\cnltx@captionlabel@font{\cnltx@caption@font\scshape}

\pgfkeys{
  cnltx/.cd,
    caption-font/.code = \def\cnltx@caption@font{#1} ,
    caption-label-font/.code = \def\cnltx@captionlabel@font{\cnltx@caption@font#1}
}

\ifbool{cnltx@load@preamble}{
  \RequirePackage{ifxetex,ifluatex}
  \ifbool{cnltx@load@fonts}
    {
      \ifboolexpr{not bool{xetex} and not bool{luatex}}
        {\RequirePackage[T1]{fontenc}}
        {\RequirePackage{fontspec}}
      \RequirePackage[oldstyle]{libertine}
      \RequirePackage{libertinehologopatch}
      % \RequirePackage{superiors}
      % \setkeys{superiors}{supstfm=libertinesups}
      % libertine does not have superior letters:
      \def\@makefnmark{%
        \hbox{%
          \cnltx@ifisnum{\@thefnmark}
            {\textsu{\hspace*{.04em}\@thefnmark}}
            {\@textsuperscript{\normalfont\@thefnmark}}%
        }%
      }
    }
    {}
  \ifbool{cnltx@microtype}
    {\RequirePackage{microtype}}
    {}
  \ifboolexpr
    {
      bool {cnltx@microtype} and
      not test {\ifcsdef{MT@pr@set@@romansans}} and
      not test {\ifcsdef{MT@ex@set@@romansans}} and
      bool {cnltx@load@fonts}
    }
    {
      \DeclareMicrotypeSet{romansans}{
        encoding = {*},
        family   = {rm*,sf*}
      }
    }
    {}
  \ifboolexpr
    {
      bool {cnltx@microtype} and
      not test {\ifcsdef{MT@tr@set@@scshape}} and
      bool {cnltx@load@fonts}
    }
    {
      \DeclareMicrotypeSet[tracking]{scshape}{
        encoding = {*} ,
        shape    = {sc,scit,si}
      }
    }
    {}
  \ifboolexpr
    {
      not bool {xetex} and
      bool {cnltx@load@fonts} and
      bool {cnltx@microtype}
    }
    {
      \microtypesetup{
        tracking   = scshape ,
        protrusion = romansans ,
        expansion  = romansans
      }
      \DisableLigatures{ family = tt* }
    }
    {}
  \ifbool{cnltx@load@fonts}
    {
      \ifboolexpr{not bool{xetex} and not bool{luatex}}
        {\RequirePackage[scaled=.81]{beramono}}
        {
          \setmonofont[
            Scale = MatchLowercase ,
            Ligatures = {NoCommon,NoRequired,NoContextual}
          ]{DejaVu Sans Mono}
        }
      \KOMAoptions{DIV=last}
      \recalctypearea
    }
    {}
  \RequirePackage{fnpct}
  \expandafter\RequirePackage\expandafter[\cnltx@babel@options]{babel}
}{}

\ifbool{cnltx@layout}{
  \renewcommand*\sectionformat{%
    \textcolor{cnltx}{\thesection\autodot}\enskip
  }
  \renewcommand*\subsectionformat{%
    \textcolor{cnltx}{\thesubsection\autodot}\enskip
  }
  \renewcommand*\subsubsectionformat{%
    \textcolor{cnltx}{\thesubsubsection\autodot}\enskip
  }
  \setkomafont{subsubsection}{\normalfont\normalsize\itshape}
  \renewcommand*\partformat{%
    \textcolor{cnltx}{\partname~\thepart\autodot}%
  }
  \renewcommand*\partformat{%
    \textcolor{cnltx}{\partname~\thepart\autodot}}
  \deffootnote{2em}{1em}{\llap{\thefootnotemark. }}%
  \RequirePackage{scrlayer-scrpage}
  \chead{\rightmark}
  \KOMAoptions{automark}
  \pagestyle{scrheadings}
  \setcapindent{1.5em}
  \setkomafont{caption}{\cnltx@caption@font}
  \setkomafont{captionlabel}{\cnltx@captionlabel@font}
}{}

\ifbool{cnltx@add@bib}{
  \RequirePackage[
    backend=biber,
    style=cnltx,
    sortlocale=en_US,
    indexing=cite]{biblatex}
  \addbibresource{cnltx.bib}
  \AtEndDocument{\printbibliography}
}{}

\ifbool{cnltx@add@index}{
  \AtEndPreamble{%
    \RequirePackage{imakeidx}
    \expandafter\indexsetup\expandafter{\cnltx@index@setup}
    \expandafter\makeindex\expandafter
      [\cnltx@makeindex@setup,options={-s \cnltx@index@style}]
    \AtEndDocument{%
      \ifbool{cnltx@index@prologue}{%
        \indexprologue
          [\vspace{\cnltx@index@space}]
          {\noindent\cnltx@index@prologue}
      }{}%
      \printindex
    }%
  }
}{}

\AtBeginDocument{%
  \immediate\write\@auxout{%
    \unexpanded{%
      \ifx\texorpdfstring\@undefined^^J
        \providecommand\texorpdfstring[2]{#1}^^J
        \providecommand\pdfstringdefDisableCommands[1]{}^^J
        \providecommand\nohyperpage[1]{#1}^^J
      \fi
    }%
  }%
}

% --------------------------------------------------------------------------
% license information:
% define those differently:
\newcommand*\lppl{\cnltx@acronym{LPPL}{lppl}}
\newcommand*\LPPL{%
  \LaTeX{} Project Public License%
  \index{LPPL@{\cnltx@acronym@format lppl}}%
}

\newrobustcmd*\license{\@ifstar{\cnltx@license}{\cnltx@license\cnltx@par}}
\newcommand\cnltx@license[1][maintained]{%
  \GetTranslation{cnltx-license} ``#1.''%
}

% CTAN:
\newcommand*\ctan{\cnltx@acronym{CTAN}{ctan}}
\newcommand*\CTAN{%
  Comprehensive \TeX\ Archive Network%
  \index{CTAN@{\cnltx@acronym@format ctan}}%
}

% --------------------------------------------------------------------------
% package information:
\newrobustcmd*\cnltx@getfileinfo[2]{%
  \def\cnltx@tmpa##1 ##2 ##3\relax##4\relax{%
    \gdef\cnltx@package@date{##1}%
    \gdef\cnltx@package@version{##2}%
    \gdef\cnltx@package@info{##3}}%
  \edef\cnltx@tmpb{\csname ver@#1.#2\endcsname}%
  \expandafter\cnltx@tmpa\cnltx@tmpb\relax? ? \relax\relax}

\newcommand*\cnltx@package@name{??}
\newbool{cnltx@package@name}
\newcommand*\cnltx@package@date{??}
\newcommand*\cnltx@package@version{??}
\newcommand*\cnltx@package@info{??}
\newcommand*\cnltx@package@title{??}
\newcommand*\cnltx@title@format{\bfseries\scshape}
\newbool{cnltx@package@title}
\newbool{cnltx@build@title}
\newcommand*\cnltx@package@subtitle{??}
\newbool{cnltx@package@subtitle}
\newcommand*\cnltx@package@url{??}
\newbool{cnltx@package@url}
\newcommand*\cnltx@package@email{??}
\newbool{cnltx@package@email}
\newcommand*\cnltx@package@abstract{??}
\newbool{cnltx@package@abstract}
\newcommand*\cnltx@package@abstract@width{.75\linewidth}
\newcommand*\cnltx@package@abstract@format{\setlength\parskip{.333\baselineskip}}

\newrobustcmd*\cnltxpackagenameformat[1]{\textcolor{cnltx}{\textsc{#1}}}

\newrobustcmd*\cnltx@newpackagename[2]{%
  \newcommand*#1{\texorpdfstring{\cnltxpackagenameformat{#2}}{#2}}%
}
\newrobustcmd*\newpackagename{\cnltx@newpackagename}

% --------------------------------------------------------------------------
% authors:
\newcommand*\cnltx@package@author@list{}
\newcommand*\cnltx@package@author@pdflist{}
\newrobustcmd*\cnltx@new@author[1]{%
  \listadd\cnltx@package@author@list
    {\cnltx@read@name{#1}}%
  \listadd\cnltx@package@author@pdflist
    {\cnltx@extract@name{#1}}%
}

% writing the names and email addresses:
\newcommand*\cnltx@read@name[1]{%
  \cnltx@read@name@aux#1[]\q@stop
}
\protected\def\cnltx@read@name@aux#1[#2]\q@stop{%
  \cnltx@get@first@and@second@name#1 \q@stop
  \ifblank{#2}{}
    {\cnltx@write@author@email#2\q@stop}%
}
\def\cnltx@write@author@email#1][\q@stop{%
  \ifblank{#1}{}
    {\footnote{\email{#1}}}%
}
\protected\def\cnltx@get@first@and@second@name#1 #2\q@stop{%
  \ifblank{#2}
    {%
      \name*{#1}%
      \listgadd\cnltx@package@author@pdflist{#1}%
    }
    {%
      \name*{#1 #2}%
      \listgadd\cnltx@package@author@pdflist{#1 \trim@spaces{#2}}%
    }%
}

% getting the names for the pdf properties:
\newcommand*\cnltx@extract@name[1]{%
  \cnltx@extract@name@aux#1[]\q@stop
}
\def\cnltx@extract@name@aux#1[#2]\q@stop{%
  #1\ifblank{#2}{}{\cnltx@extract@name@aux@i#2\q@stop}, %
}
\def\cnltx@extract@name@aux@i#1][\q@stop{}

\newrobustcmd*\cnltx@package@authors{%
  \gdef\cnltx@author@sep{\gdef\cnltx@author@sep{\qquad}}%
  \forlistloop{\cnltx@author@sep}\cnltx@package@author@list
}


% --------------------------------------------------------------------------
% options:
\pgfkeys{
  cnltx/.cd,
    package/.code =
      \ifcsdef{#1}{}{\expandafter\newpackagename\csname#1\endcsname{#1}}
      \gdef\cnltx@package@name{#1}
      \@ifpackageloaded{#1}
        {\cnltx@getfileinfo{#1}{sty}}
        {\cnltx@doc@warning{Package `#1' is not loaded, yet!}}
      \booltrue{cnltx@package@name}
      \booltrue{cnltx@build@title} ,
    class/.code =
      \ifcsdef{#1}{}{\expandafter\newpackagename\csname#1\endcsname{#1}}
      \gdef\cnltx@package@name{#1}
      \@ifclassloaded{#1}
        {\cnltx@getfileinfo{#1}{cls}}
        {\cnltx@doc@warning{Class `#1' is not loaded, yet!}}
      \booltrue{cnltx@package@name}
      \booltrue{cnltx@build@title} ,
    name/.code =
      \ifcsdef{#1}{}{\expandafter\newpackagename\csname#1\endcsname{#1}}
      \gdef\cnltx@package@name{#1}
      \booltrue{cnltx@package@name}
      \booltrue{cnltx@build@title} ,
    title/.code =
      \gdef\cnltx@package@title{#1}
      \booltrue{cnltx@package@title} ,
    title-format/.code =
      \def\cnltx@title@format{#1} ,
    build-title/.is if = cnltx@build@title ,
    subtitle/.code =
      \gdef\cnltx@package@subtitle{#1}
      \booltrue{cnltx@package@subtitle} ,
    authors/.code =
      \gdef\cnltx@package@author@list{}
      \forcsvlist{\cnltx@new@author}{#1} ,
    date/.code = \gdef\cnltx@package@date{#1} ,
    version/.code = \gdef\cnltx@package@version{#1} ,
    info/.code = \gdef\cnltx@package@info{#1} ,
    url/.code =
      \gdef\cnltx@package@url{#1}
      \booltrue{cnltx@package@url} ,
    email/.code =
      \gdef\cnltx@package@email{#1}
      \booltrue{cnltx@package@email} ,
    abstract/.code =
      \gdef\cnltx@package@abstract{%
        \parbox{\cnltx@package@abstract@width}{%
          \cnltx@package@abstract@format
          #1%
        }%
      }
      \booltrue{cnltx@package@abstract} ,
    abstract-width/.code =
      \setlength\cnltx@package@abstract@width{#1} ,
    abstract-format/.code =
      \def\cnltx@package@abstract@format{#1}
}
% --------------------------------------------------------------------------
% command descriptions:
% #1: command in the list which places the item
% #2: formatting command taking one mandatory argument and a star form
\newrobustcmd*\cnltx@deflistitem[2]{%
  \protected\csdef{\cnltx@stripbs#1}{%
    \@ifstar
      {\csuse{\cnltx@stripbs#1@star}}
      {\csuse{\cnltx@stripbs#1@nostar}}%
  }%
  \protected\csdef{\cnltx@stripbs#1@star}##1{%
    \@ifnextchar[%]
      {\csuse{\cnltx@stripbs#1@star@opt}{##1}}
      {\csuse{\cnltx@stripbs#1@star@opt}{##1}[]}%
  }%
  \protected\csdef{\cnltx@stripbs#1@nostar}##1{%
    \@ifnextchar[%]
      {\csuse{\cnltx@stripbs#1@nostar@opt}{##1}}
      {\csuse{\cnltx@stripbs#1@nostar@opt}{##1}[]}%
  }%
  \protected\csdef{\cnltx@stripbs#1@star@opt}##1[##2]{%
    \ifblank{##2}
      {\item#2*{##1}}
      {\item#2*{##1}##2}%
    \cnltx@checkdefault{\hfill\newline}%
  }%
  \protected\csdef{\cnltx@stripbs#1@nostar@opt}##1[##2]{%
    \ifblank{##2}
      {\item#2{##1}}
      {\item#2{##1}##2}%
    \cnltx@checkdefault{\hfill\newline}%
  }%
}

\newcommand\cnltx@checkdefault[1]{%
  \@ifnextchar\Module
    {}
    {%
      \@ifnextchar\Default
        {}
        {%
          \@ifnextchar\default
            {}
            {#1}%
        }%
    }%
}

\newcommand*\cmltx@list@setup{%
  \leftmargin=0pt
  \labelwidth=2em
  \labelsep=0pt
  \itemindent=-1em
}

\pgfkeys{
  cnltx/.cd,
    list-setup/.code = \def\cmltx@list@setup{#1}
}

\newenvironment{cnltxlist}
  {\list{}{\cmltx@list@setup}}
  {\endlist}

\cnltx@deflistitem{\cnltx@command}{\cs}
  
\newenvironment{commands}
  {%
    \let\command\cnltx@command
    \cnltxlist
  }
  {\endcnltxlist}

% --------------------------------------------------------------------------
% option descriptions:
\newcommand*\@cnltx@option@item[1]{%
  \@ifstar
    {\@cnltx@option@item@aux@star{#1}}
    {\@cnltx@option@item@aux@nostar{#1}}%
}

\newcommand*\@cnltx@option@item@aux@star[1]{%
  \cnltx@ifdash
    {\@cnltx@option@item@aux{#1}*-}
    {\@cnltx@option@item@aux{#1}*{}}%
}
\newcommand*\@cnltx@option@item@aux@nostar[1]{%
  \cnltx@ifdash
    {\@cnltx@option@item@aux{#1}{}-}
    {\@cnltx@option@item@aux{#1}{}{}}%
}

\newrobustcmd*\@cnltx@option@item@aux[4]{%
  \@ifnextchar\bgroup
    {\@cnltx@option@two{#1#2#3}{#4}}
    {\@cnltx@option@one{#1#2#3}{#4}}%
}

\newcommand*\@cnltx@option@one[2]{%
  \item#1{#2}%
  \cnltx@checkdefault{\hfill\newline}%
}

\newcommand*\@cnltx@option@two[3]{%
  \item#1{#2}{#3}%
  \cnltx@checkdefault{\hfill\newline}%
}

\newenvironment{options}
  {%
    \def\opt{\@cnltx@option@item\option}%
    \def\keyval{\@cnltx@option@item\key}%
    \def\keylit{\@cnltx@option@item\keyis}%
    \def\keychoice{\@cnltx@option@item\choicekey}%
    \def\keybool{\@cnltx@option@item\boolkey}%
    \cnltxlist
  }
  {\endcnltxlist}

% --------------------------------------------------------------------------
% environment descriptions:
\newcommand*\cnltx@environment{%
  \@ifstar
    {\cnltx@environment@star}
    {\cnltx@environment@nostar}%
}

\newcommand*\cnltx@environment@star[1]{%
  \@ifnextchar[
    {\cnltx@environment@star@opt{#1}}
    {\cnltx@environment@star@opt{#1}[]}%
}

\newcommand*\cnltx@environment@nostar[1]{%
  \@ifnextchar[
    {\cnltx@environment@nostar@opt{#1}}
    {\cnltx@environment@nostar@opt{#1}[]}%
}

\def\cnltx@environment@star@opt#1[#2]{%
  \ifblank{#2}
    {\item\beginenv*\code{\{}\env*{#1}\code{\}}}
    {\item\beginenv*\code{\{}\env*{#1}\code{\}}#2}%
  \cnltx@checkdefault{\hfill\newline}%
}
\def\cnltx@environment@nostar@opt#1[#2]{%
  \ifblank{#2}
    {\item\beginenv*\code{\{}\env{#1}\code{\}}}
    {\item\beginenv*\code{\{}\env{#1}\code{\}}#2}%
  \cnltx@checkdefault{\hfill\newline}%
}

\newenvironment{environments}
  {%
    \let\environment\cnltx@environment
    \cnltxlist
  }
  {\endcnltxlist}

% --------------------------------------------------------------------------
% default values:
\newrobustcmd*\cnltx@Default[1]{%
  \null\hfill
  \@ifnextchar\bgroup
    {\cnltx@Default@initial{#1}}
    {%
      \cnltx@ifbang
        {\cnltx@Default@required{#1}}
        {\cnltx@Default@empty{#1}}%
    }%
}

\newcommand*\cnltx@Default@initial[2]{%
  \llap{\GetTranslation{cnltx-default}: \code{#2}}%
  \ifblank{#1}{\newline}{}%
}

\newcommand*\cnltx@Default@required[1]{%
  \llap{(\GetTranslation{cnltx-required})}%
  \ifblank{#1}{\newline}{}%
}

\newcommand*\cnltx@Default@empty[1]{%
  \llap{(\GetTranslation{cnltx-empty})}%
  \ifblank{#1}{\newline}{}%
}

\newrobustcmd*\Default{%
  \@ifstar
    {\cnltx@Default{*}}
    {\cnltx@Default{}}%
}

\newrobustcmd*\expandable{\cnltx@expandable@ornot\cnltx@expandable}
\newrobustcmd*\unexpandable{\cnltx@expandable@ornot\cnltx@unexpandable}
\newrobustcmd*\expandablesymbol{\textcolor{expandable}{\expandablesign}}
\newrobustcmd*\unexpandablesymbol{\textcolor{unexpandable}{\expandablesign}}

\newrobustcmd*\cnltx@expandable@ornot[1]{%
  \let\cnltx@item\item
  \def\item{\cnltx@item#1\let\item\cnltx@item}%
}
\newrobustcmd\cnltx@expandable@note[1]{%
  \begingroup
    \reversemarginpar
    \marginnote{\hfill#1\space}%
  \endgroup
}
\newcommand*\cnltx@expandable{%
  \cnltx@expandable@note{\expandablesymbol}%
}
\newcommand*\cnltx@unexpandable{%
  \cnltx@expandable@note{\unexpandablesymbol}%
}

\newcommand*\expandablesign{\textasteriskcentered}

\pgfkeys{
  cnltx/.cd,
    expandable-sign/.code = \def\expandablesign{#1}
}

\newrobustcmd*\visualizespaces{%
  \begingroup
    \obeyspaces
    \begingroup\lccode`~=`\ %
    \lowercase{\endgroup\let~}\visiblespace
    \cnltx@visualizespaces@aux}
\newrobustcmd\cnltx@visualizespaces@aux[1]{%
    \edef\cnltx@x{#1}\scantokens\expandafter{\cnltx@x\noexpand}%
  \endgroup
}
\newcommand*\visiblespace{\allowbreak\textvisiblespace\allowbreak}


% --------------------------------------------------------------------------
% modules:
\newcommand*\cnltx@module@sep{\,>>\,}

\pgfkeys{
  cnltx/.cd,
    module-sep/.code = \def\cnltx@module@sep{#1}
}

\newrobustcmd*\cnltx@module[1]{%
  \cnltx@ifbang
    {\cnltx@write@module{#1}{}}
    {\cnltx@write@module{#1}{*}}%
}
\newcommand*\cnltx@write@module[3]{
  \cnltx@module@text{#2}{#3}%
  \ifblank{#1}{\cnltx@checkdefault{\hfill\newline}}{}%
}
\newcommand*\cnltx@module@text[2]{%
  \begingroup
    \reversemarginpar
    \marginnote{\hfill\llap{\module#1{#2}}\cnltx@module@sep}%
  \endgroup
}
  
\newrobustcmd*\Module{%
  \@ifstar
    {\cnltx@module{*}}
    {\cnltx@module{}}%
}

% --------------------------------------------------------------------------
% a environment for block quotes
\newcommand*\cnltx@quote@author@format{\itshape}
\newcommand*\cnltx@quote@format{\small\sffamily}

\pgfkeys{
  cnltx/.cd ,
    quote-format/.code        = \def\cnltx@quote@format{#1} ,
    quote-author-format/.code = \def\cnltx@quote@author@format{#1}
}

\newenvironment{cnltxquote}[1][]
  {%
    \def\cnltx@quote@option{#1}%
    \quote
    \cnltx@quote@format
  }
  {%
    \ifdefempty\cnltx@quote@option
      {}
      {%
        \unskip\nobreak\hfil\penalty50
        \hskip2em\hbox{}\nobreak\hfil
        {\normalfont\cnltx@quote@author@format\cnltx@quote@option}%
        \parfillskip0pt \finalhyphendemerits=0
        \par
      }%
    \endquote
  }

% --------------------------------------------------------------------------
% document title:
\AfterPackage!{hyperref}{%
  \newrobustcmd*\cnltx@tableofcontents{%
    \begingroup
      \let\tocbasic@listhead\@gobble
      \RaggedRight
      \tableofcontents
    \endgroup
  }%
  \RequirePackage{multicol,ragged2e}
  \AfterEndPreamble{%
    \ifbool{cnltx@build@title}{%
      \ifbool{cnltx@package@name}
        {\cnltx@title@information}
        {%
          \cnltx@doc@warning{%
            No package/class name given. Hence I won't create an
            automatic title%
          }%
        }%
    }{}%
  }%
}

\newrobustcmd*\cnltx@title@information{%
  \thispagestyle{plain}
  \begin{center}
    \ifbool{cnltx@load@preamble}{}
      {\renewcommand\thefootnote{\@fnsymbol\c@footnote}}%
    \Huge
    \scalebox{1.5}{%
      \begin{minipage}{.6\linewidth}
        \centering
        \color{cnltx}%
        \cnltx@title@format
        \ifbool{cnltx@package@title}
          {\cnltx@package@title}
          {\cnltx@package@name}%
      \end{minipage}
    }%
    \par\vskip.5cm\relax
    \large
    \ifbool{cnltx@package@subtitle}
      {\cnltx@package@subtitle\par\vskip.5cm\relax}
      {}%
    \Large \cnltx@package@version \qquad \cnltx@package@date
    \par\vskip.5cm\relax
    \large
    \cnltx@package@info
    \par\vskip.5cm\relax
    \large
    \cnltx@package@authors
    \normalsize
    \ifbool{cnltx@package@url}
      {%
        \par\vskip.5cm\relax
        \url{\cnltx@package@url}%
      }{}%
    \ifbool{cnltx@package@email}
      {%
        \par\vskip.5cm\relax
        \email{\cnltx@package@email}%  
      }{}%
    \ifbool{cnltx@package@abstract}
      {%
        \par\vskip.5cm\relax
        \cnltx@package@abstract
      }{}%
  \end{center}
  \begin{multicols}{2}[{%
    \pdfbookmark[1]{\GetTranslation{cnltx-toc}}{toc}%
    \section*{\GetTranslation{cnltx-toc}}
    }]\cnltx@tableofcontents
  \end{multicols}%
}

% --------------------------------------------------------------------------
% versioning:
\RequirePackage{marginnote,ragged2e}
\newcommand*\versionnoteformat{\footnotesize\sffamily\RaggedRight}

\pgfkeys{
  cnltx/.cd,
    version-note-format/.code = \renewcommand*\versionnoteformat{#1} ,
}

\newcommand\cnltx@version@note[1]{%
  \@bsphack
  \begingroup
    \reversemarginpar
    \marginnote
      {%
        \versionnoteformat
        \textcolor{versionnote}{#1}%
      }%
    \endgroup
  \@esphack
}

\newcommand*\cnltx@newnote{%
  \@ifstar
    {\cnltx@newnote@aux{*}}
    {\cnltx@newnote@aux{}}%
}
\newrobustcmd\cnltx@newnote@aux[2]{%
  \@ifnextchar[%]
    {\cnltx@newnote@aux@i{#1}{#2}}
    {\cnltx@newnote@aux@i{#1}{#2}[0]}%
}
\protected\def\cnltx@newnote@aux@i#1#2[#3]{%
  \@ifnextchar[%]
    {\cnltx@newnote@aux@ii{#1}{#2}{#3}}
    {\cnltx@newnote@aux@iii{#1}{#2}{#3}}%
}
\protected\long\def\cnltx@newnote@aux@ii#1#2#3[#4]#5{%
  \ifblank{#1}
    {\newrobustcmd#2[#3][#4]{\cnltx@version@note{#5}}}
    {\newrobustcmd*#2[#3][#4]{\cnltx@version@note{#5}}}%
}
\protected\long\def\cnltx@newnote@aux@iii#1#2#3#4{%
  \ifblank{#1}
    {\newrobustcmd#2[#3]{\cnltx@version@note{#4}}}
    {\newrobustcmd*#2[#3]{\cnltx@version@note{#4}}}%
}

\newrobustcmd\newnote{\cnltx@newnote}

\newnote*\sinceversion[1]{\GetTranslation{cnltx-introduced}~#1}
\newnote*\changedversion[1]{\GetTranslation{cnltx-changed}~#1}

% --------------------------------------------------------------------------
% hyperlinks:
\newrobustcmd*\CTANurl[2][macros/latex/contrib]{%
  on \ctan\ as \cnltx@weblink@font{#2}: \url{http://mirrors.ctan.org/#1/#2/}%
}

\newcommand*\cnltx@weblink@font[1]{\texttt{#1}}

\newrobustcmd*\email[1]{\cnltx@weblink@font{\href{mailto:#1}{#1}}}
\newrobustcmd*\website[1]{\cnltx@weblink@font{\href{http://#1/}{#1}}}
\newrobustcmd*\securewebsite[1]{\cnltx@weblink@font{\href{https://#1/}{#1}}}

\newrobustcmd*\needpackage[2][macros/latex/contrib]{%
  \pkg{#2}\footnote{\CTANurl[#1]{#2}}%
}

\newrobustcmd*\needclass[2][macros/latex/contrib]{%
  \cls{#2}\footnote{\CTANurl[#1]{#2}}%
}

\ifbool{cnltx@load@preamble}{%
  \AtEndPreamble{%
    \RequirePackage{hyperref}%
    \pdfstringdefDisableCommands{%
      \def\cnltx@name[#1]#2{#1 #2, }%
      \def\cnltxpackagenameformat#1{#1}%
    }%
    \hypersetup
      {
        colorlinks         = true,
        allcolors          = link ,
        plainpages         = false,
        bookmarksopen      = true,
        bookmarksopenlevel = 1,
        bookmarksnumbered  = true,
        pdfauthor          = {\forlistloop{}\cnltx@package@author@pdflist},
        pdftitle           =
          {\cnltx@package@name\space\cnltx@package@version\space Manual},
        pdfsubject         = {\cnltx@package@info},
        pdfstartview       = FitH
      }%
  }%
}{}%

\endinput

% --------------------------------------------------------------------------
HISTORY:

2013/09/08 v0.1   - first working version
2013/09/10 v0.2   - added optional argument to \license
                  - \newname got moved to `cnltx-tools'
                  - added possibility for internationalization
                  - new macros \needpackage and \needclass
                  - option for formatting the document title
2013/09/12 v0.3   - new class options `add-index', `load-preamble+' and
                    `scrartcl'
                  - new options `index-prologue' and `index-space'
                  - new file `cnltx.ist'
                  - added \Module
                  - added optional ! to the \Default command
                  - add safety net: provide necessary commands in the aux-file
                    if they're not defined at begin document
2013/09/12 v0.3a  - automatic preamble detects xelatex and lualatex and selects
                    the fonts accordingly
2013/09/15 v0.4   - possiblity to add an email address for each author, written
                    as footnote; they get symbols if the `load-preamble'
                    options is not used
                  - fixed bug in index setup mechanism
                  - added biblatex entry type `package' and biblatex style
                    `cnltx'
2013/09/20 v0.5   - new commands \expandable and \unexpandable
                  - new environment `cnltxquote', formatting via options
                    `quote-format' and `quote-author-format'
                  - changed scaling of `beramono' from `.83' to `.81' -- seems
                    a better fit in relation to Linux Libertine
2013/09/24 v0.6   - workaround for footnotes in minipages => libertine does not
                    have superior letters
                  - new options `abstract-format' and `abstract-width'
2013/09/30 v0.7   - added better microtype settings to the predefined preamble
                  - replaced \def's with \newcommand or \newrobustcmd
2013/10/04 v0.7a  - renamed \cnltx@package@name@format into
                    \cnltxpackagenameformat
                  - added \cnltxpackagenameformat to the disabled pdfstring
                    commands
                  - added possibility to define a opitonal argument with
                    \newnote
2013/10/21 v0.8   - disable ligatures for teletype font
                  - extended preamble loading
                    * choice if fonts are loaded
                    * choice if microtype is loaded
                  - \visualizespaces and \visiblespace
2014/01/23 v0.10  - adapt to KOMA-Script v3.12
2014/03/11 v0.11  - change biblatex locale from en_EN to en_US
                  - fix bug: wrong boolean used for option `add-bib'
                  - some translations are now provided by the `tools' module
                    and by the `cnltx' bibliography style
                  - use \cnltx@load@modules
                  - new commands \email, \website, \securewebsite
                  - \expandablesymbol, \unexpandablesymbol
2015/08/17 v0.13  - resolve long overdue issues with cnltx-doc
2015/03/11 v0.13a - wrap title in minipage in order to enable linebreaks
2016/03/17 v0.13b - ragged right toc
2017/02/04 v0.14  - load `hyperref' only with `load-preample = true'

% --------------------------------------------------------------------------
TODO: