%%
%% This is file `screxperimental.sty'
%%
%% Copyright (c) 2010-2012
%% Markus Kohm and any individual authors listed elsewhere in this file.
%%
%% This file may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License, version 1.3c of the license.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later and of this work.
%%
%% This work has the LPPL maintenance status "author-maintained".
%%
%% The Current Maintainer and author of this work is Markus Kohm.
%%
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
\ProvidesPackage{screxperimental}[2012/08/02 v0.1.2-alpha experimental
  features for KOMA-Script]

\PackageWarning{screxperimental}{%
  This is an EXPERIMENTAL package, that adds\MessageBreak
  experimental features to KOMA-Script.\MessageBreak
  You should know, that every one of this\MessageBreak
  features may be CHANGED INCOMPATIBLE or REMOVED\MessageBreak
  in any version of screxperimental.\MessageBreak
  You should know, that using this package may\MessageBreak
  be INCOMPATIBLE WITH ANY CLASS or any other\MessageBreak
  PACKAGE even KOMA-Script classes or packages.\MessageBreak
  You should know, that there's ABSOLUTLY NO\MessageBreak
  SUPPORT for using this package!\@gobble}

%% Loading the KOMA-Script base package
\RequirePackage{scrkbase}

%%% KOMA-Script options

% ---------------- Experiment: Gliederungsbefehle ---------------------------
% Following code has been used until 2012/08/02:
% \begin{verbatim}
% \newcommand*{\@se@osectarg}{0}
% \KOMA@ncmdkey{OptionalSectionArgument}[TOCandHead]{@se@osectarg}{%
%   {TOCandHead}{0},{tocandhead}{0},%
%   {TOC}{1},{toTOC}{1},{totoc}{1},{toc}{1},%
%   {Head}{2},{toHead}{2},{tohead}{2},{head}{2}%
% }%
% \end{verbatim}
% Now this has been changed into a simple option wrapper:
\@ifclassloaded{scrlttr2}{}{%
\newcommand*{\@se@osectarg}{0}
\KOMA@key{OptionalSectionArgument}[TOCandHead]{%
  \PackageWarning{screxperimental}{%
    usage of deprecated option `OptionalSectionArgument'.\MessageBreak
    Since KOMA-Script 3.10 this feature is provided by\NessageBreak
    the KOMA-Script classes with option `headings'.\MessageBreak
    See the KOMA-Script manual for information how to\MessageBreak
    use option `headings'%
  }%
  \KOMA@set@ncmdkey{OptionalSectionArgument}{@se@osectarg}{%
    {TOCandHead}{0},{tocandhead}{0},%
    {TOC}{1},{toTOC}{1},{totoc}{1},{toc}{1},%
    {Head}{2},{toHead}{2},{tohead}{2},{head}{2}%
  }{#1}%
  \ifcase\number\@se@osectarg\relax
    \KOMAoption{headings}{optiontoheadandtoc}%
  \or
    \KOMAoption{headings}{optiontotoc}%
  \or
    \KOMAoption{headings}{optiontohead}%
  \fi
}
% -------------------------------------------

\KOMAProcessOptions\relax
}

% ---------------- Experiment: Gliederungsbefehle ---------------------------
% Following code has been used until 2012/08/02:
% \begin{verbatim}
% %% Use my own temporary switch
% \newif\if@se@tempswa
%
% %% Experimental command interface for document structure
% %% - \part[<tocandheadentry>]{Title}, 
% %%   \part[tocentry={<tocentry>},head={<running head>}]{Title}
% \def\@tempa[#1]#2{%
%   \ifnum \c@secnumdepth >\m@ne
%     \refstepcounter{part}%
%     \@maybeautodot\thepart%
%     \addcontentsline{toc}{part}{\protect\numberline{\thepart}#1}%
%   \else
%     \addcontentsline{toc}{part}{#1}%
%   \fi
%   \begingroup
%     \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
%     \raggedpart
%     \interlinepenalty \@M
%     \normalfont\sectfont\nobreak
%     \ifnum \c@secnumdepth >\m@ne
%       \size@partnumber{\partformat}%
%       \partheadmidvskip
%     \fi
%     \size@part{#2}\strut%
%     \partmark{#1}\par
%   \endgroup
%   \nobreak
%   \partheadendvskip
%   \@afterheading
% }
% \ifx\@tempa\@part
%   % Using \@part-definition of scrartcl:
%   \def\@part[#1]{#2}{%
%     \se@istest#1=\@nil
%     \if@se@tempswa
%       \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#2},#1}%
%     \else
%       \ifcase \@se@osectarg\relax
%         \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#1}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#2}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#1}}%
%       \fi
%     \fi
%     \ifnum \c@secnumdepth >\m@ne
%       \refstepcounter{part}%
%       \@maybeautodot\thepart
%       \ifx\se@ds@tocentry\@empty\else
%         \addcontentsline{toc}{part}{%
%           \protect\numberline{\thepart}\se@ds@tocentry}%
%       \fi
%     \else
%       \ifx\se@ds@tocentry\@empty\else
%         \addcontentsline{toc}{part}{\se@ds@tocentry}%
%       \fi
%     \fi
%     \begingroup
%       \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
%       \raggedpart
%       \interlinepenalty \@M
%       \normalfont\sectfont\nobreak
%       \ifnum \c@secnumdepth >\m@ne
%         \size@partnumber{\partformat}%
%         \partheadmidvskip
%       \fi
%       \size@part{#2}\strut%
%       \expandafter\partmark\expandafter{\se@ds@head}\par
%     \endgroup
%     \nobreak
%     \partheadendvskip
%     \@afterheading
%   }
% \else
%   \def\@tempa[#1]#2{%
%     \ifnum \c@secnumdepth >-2\relax
%       \refstepcounter{part}%
%       \@maybeautodot\thepart%
%       \addcontentsline{toc}{part}{\protect\numberline{\thepart}#1}%
%     \else
%       \addcontentsline{toc}{part}{#1}%
%     \fi
%     \begingroup
%       \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
%       \raggedpart
%       \interlinepenalty \@M
%       \normalfont\sectfont\nobreak
%       \ifnum \c@secnumdepth >-2\relax
%         \size@partnumber{\partformat}%
%         \partheadmidvskip
%       \fi
%       \size@part{#2}\strut%
%       \partmark{#1}\par
%     \endgroup
%     \@endpart
%   }
%   \ifx\@tempa\@part
%     % Using \@part definition of scrreprt.cls or scrbook.cls
%     \def\@part[#1]#2{%
%       \se@istest#1=\@nil
%       \if@se@tempswa
%         \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#2},#1}%
%       \else
%         \ifcase \@se@osectarg\relax
%           \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#1}}%
%         \or
%           \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#2}}%
%         \or
%           \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#1}}%
%         \fi
%       \fi
%       \ifnum \c@secnumdepth >-2\relax
%         \refstepcounter{part}%
%         \@maybeautodot\thepart
%         \ifx\se@ds@tocentry\@empty\else
%           \addcontentsline{toc}{part}{%
%             \protect\numberline{\thepart}\se@ds@tocentry}%
%         \fi
%       \else
%         \ifx\se@ds@tocentry\@empty\else
%           \addcontentsline{toc}{part}{\se@ds@tocentry}%
%         \fi
%       \fi
%       \begingroup
%         \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
%         \raggedpart
%         \interlinepenalty \@M
%         \normalfont\sectfont\nobreak
%         \ifnum \c@secnumdepth >\m@ne
%           \size@partnumber{\partformat}%
%           \partheadmidvskip
%         \fi
%         \size@part{#2}\strut%
%         \expandafter\partmark\expandafter{\se@ds@head}\par
%       \endgroup
%       \@endpart
%     }
%   \else
%     \PackageWarning{screxperimental}{%
%       Unexpected definition of \string\@part.\MessageBreak
%       Extended \string\part\space handling deactivated%
%     }%
%   \fi
% \fi
%
% %% - \addpart[<tocandheadentry>]{Title}, 
% %%   \addpart[tocentry={<tocentry>},head={<running head>}]{Title}
% \def\@tempa[#1]#2{%
%   \csname phantomsection\endcsname
%   \addcontentsline{toc}{part}{#1}\@spart{#2}%
%   \ifx\partmark\@gobble\else\@mkboth{#1}{}\fi
% }
% \ifx\@tempa\@addpart
%   \def\@addpart[#1]#2{%
%     \se@istest#1=\@nil
%     \if@se@tempswa
%       \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#2},#1}%
%     \else
%       \ifcase \@se@osectarg\relax
%         \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#1}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#2}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#1}}%
%       \fi
%     \fi
%     \csname phantomsection\endcsname
%     \ifx\se@ds@tocentry\@empty\else
%       \addcontentsline{toc}{part}{\se@ds@tocentry}
%     \fi
%     \@spart{#2}%
%     \ifx\partmark\@gobble\else
%       \expandafter\@mkboth\expandafter{\se@ds@head}{}%
%     \fi
%   }
% \else
%   \PackageWarning{screxperimental}{%
%     Unexpected definition of \string\@addpart.\MessageBreak
%     Extended \string\addpart\space handling deactivated%
%   }%
% \fi
%
%
% %% - \chapter[<tocandheadentry>]{Title}, 
% %%   \chapter[tocentry={<tocentry>},head={<running head>}]{Title}
% \def\@tempa[#1]#2{%
%   \ifnum \c@secnumdepth >\m@ne
%     \refstepcounter{chapter}%
%     \@maybeautodot\thechapter
%     \typeout{\@chapapp\space\thechapter.}%
%     \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}%
%     \if@chaptertolists
%       \doforeachtocfile{%
%         \iftocfeature{\@currext}{chapteratlist}{%
%           \addcontentsline{\@currext}{chapteratlist}{%
%             \protect\numberline{\thechapter}#1}%
%         }{}%
%       }%
%       \@ifundefined{float@addtolists}{}{%
%         \scr@float@addtolists@warning
%         \scr@ifundefinedorrelax{@currentHref}{%
%           \float@addtolists{%
%             \protect\contentsline{chapteratlist}{%
%               \protect\numberline{\thechapter}#1}{\thepage}%
%           }%
%         }{%
%           \float@addtolists{%
%             \protect\contentsline{chapteratlist}{%
%               \protect\numberline{\thechapter}#1}{\thepage}{\@currentHref}%
%           }%
%         }%
%       }%
%     \fi
%   \else
%     \addcontentsline{toc}{chapter}{#1}%
%     \if@chaptertolists
%       \doforeachtocfile{%
%         \iftocfeature{\@currext}{chapteratlist}{%
%           \addcontentsline{\@currext}{chapteratlist}{#1}%
%         }{}%
%       }%
%       \@ifundefined{float@addtolists}{}{%
%         \scr@float@addtolists@warning
%         \scr@ifundefinedorrelax{@currentHref}{%
%           \float@addtolists{%
%             \protect\contentsline{chapteratlist}{#1}{\thepage}%
%           }%
%         }{%
%           \float@addtolists{%
%             \protect\contentsline{chapteratlist}{#1}{\thepage}{\@currentHref}%
%           }%
%         }%
%       }%
%     \fi
%   \fi
%   \chaptermark{#1}%
%   \ifdim \@chapterlistsgap>\z@
%     \doforeachtocfile{%
%       \iftocfeature{\@currext}{chapteratlist}{%
%         \addtocontents{\@currext}{\protect\addvspace{\@chapterlistsgap}}%
%       }{}%
%     }%
%     \@ifundefined{float@addtolists}{}{%
%       \scr@float@addtolists@warning
%       \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
%     }%
%   \fi
%   \if@twocolumn
%     \if@at@twocolumn
%       \@makechapterhead{#2}%
%     \else
%       \@topnewpage[\@makechapterhead{#2}]%
%     \fi
%   \else
%     \@makechapterhead{#2}%
%     \@afterheading
%   \fi
% }
% \ifx\@chapter\@tempa
%   % Using \@chapter definition of scrreprt.cls
%   \def\@chapter[#1]#2{%
%     \se@istest#1=\@nil
%     \if@se@tempswa
%       \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#2},#1}%
%     \else
%       \ifcase \@se@osectarg\relax
%         \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#1}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#2}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#1}}%
%       \fi
%     \fi
%     \ifnum \c@secnumdepth >\m@ne
%       \refstepcounter{chapter}%
%       \@maybeautodot\thechapter
%       \typeout{\@chapapp\space\thechapter.}%
%       \ifx\se@ds@tocentry\@empty\else
%         \addcontentsline{toc}{chapter}{%
%           \protect\numberline{\thechapter}\se@ds@tocentry}%
%         \if@chaptertolists
%           \doforeachtocfile{%
%             \iftocfeature{\@currext}{chapteratlist}{%
%               \addcontentsline{\@currext}{chapteratlist}{%
%                 \protect\numberline{\thechapter}\se@ds@tocentry}%
%             }{}%
%           }%
%           \@ifundefined{float@addtolists}{}{%
%             \scr@float@addtolists@warning
%             \scr@ifundefinedorrelax{@currentHref}{%
%               \float@addtolists{%
%                 \protect\contentsline{chapteratlist}{%
%                   \protect\numberline{\thechapter}\se@ds@tocentry}{\thepage}%
%               }%
%             }{%
%               \float@addtolists{%
%                 \protect\contentsline{chapteratlist}{%
%                   \protect\numberline{\thechapter}\se@ds@tocentry}{\thepage}{%
%                   \@currentHref}%
%               }%
%             }%
%           }%
%         \fi
%       \fi
%     \else
%       \ifx\se@ds@tocentry\@empty\else
%         \addcontentsline{toc}{chapter}{\se@ds@tocentry}%
%         \if@chaptertolists
%           \doforeachtocfile{%
%             \iftocfeature{\@currext}{chapteratlist}{%
%               \addcontentsline{\@currext}{chapteratlist}{\se@ds@tocentry}%
%             }{}%
%           }%
%           \@ifundefined{float@addtolists}{}{%
%             \scr@float@addtolists@warning
%             \scr@ifundefinedorrelax{@currentHref}{%
%               \float@addtolists{%
%                 \protect\contentsline{chapteratlist}{\se@ds@tocentry}{\thepage}%
%               }%
%             }{%
%               \float@addtolists{%
%                 \protect\contentsline{chapteratlist}{\se@ds@tocentry}{\thepage}
%                 {\@currentHref}%
%               }%
%             }%
%           }%
%         \fi
%       \fi
%     \fi
%     \expandafter\chaptermark\expandafter{\se@ds@head}%
%     \ifdim \@chapterlistsgap>\z@
%       \doforeachtocfile{%
%         \iftocfeature{\@currext}{chapteratlist}{%
%           \addtocontents{\@currext}{\protect\addvspace{\@chapterlistsgap}}%
%         }{}%
%       }%
%       \@ifundefined{float@addtolists}{}{%
%         \scr@float@addtolists@warning
%         \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
%       }%
%     \fi
%     \if@twocolumn
%       \if@at@twocolumn
%         \@makechapterhead{#2}%
%       \else
%         \@topnewpage[\@makechapterhead{#2}]%
%       \fi
%     \else
%       \@makechapterhead{#2}%
%       \@afterheading
%     \fi
%   }
% \else
%   \def\@tempa[#1]#2{%
%     \ifnum \c@secnumdepth >\m@ne
%       \if@mainmatter
%         \refstepcounter{chapter}%
%         \@maybeautodot\thechapter
%         \typeout{\@chapapp\space\thechapter.}%
%         \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}%
%         \if@chaptertolists
%           \doforeachtocfile{%
%             \iftocfeature{\@currext}{chapteratlist}{%
%               \addcontentsline{\@currext}{chapteratlist}{%
%                 \protect\numberline{\thechapter}#1}%
%             }{}%
%           }%
%           \@ifundefined{float@addtolists}{}{%
%             \scr@float@addtolists@warning
%             \scr@ifundefinedorrelax{@currentHref}{%
%               \float@addtolists{%
%                 \protect\contentsline{chapteratlist}{%
%                   \protect\numberline{\thechapter}#1}{\thepage}%
%               }%
%             }{%
%               \float@addtolists{%
%                 \protect\contentsline{chapteratlist}{%
%                   \protect\numberline{\thechapter}#1}{\thepage}{\@currentHref}%
%               }%
%             }%
%           }%
%         \fi
%       \else
%         \addcontentsline{toc}{chapter}{#1}%
%         \if@chaptertolists
%           \doforeachtocfile{%
%             \iftocfeature{\@currext}{chapteratlist}{%
%               \addcontentsline{\@currext}{chapteratlist}{#1}%
%             }{}%
%           }%
%           \@ifundefined{float@addtolists}{}{%
%             \scr@float@addtolists@warning
%             \scr@ifundefinedorrelax{@currentHref}{%
%               \float@addtolists{%
%                 \protect\contentsline{chapteratlist}{#1}{\thepage}%
%               }%
%             }{%
%               \float@addtolists{%
%                 \protect\contentsline{chapteratlist}{#1}{\thepage}{\@currentHref}%
%               }%
%             }%
%           }%
%         \fi
%       \fi
%     \else
%       \addcontentsline{toc}{chapter}{#1}%
%       \if@chaptertolists
%         \doforeachtocfile{%
%           \iftocfeature{\@currext}{chapteratlist}{%
%             \addcontentsline{\@currext}{chapteratlist}{#1}%
%           }{}%
%         }%
%         \@ifundefined{float@addtolists}{}{%
%           \scr@float@addtolists@warning
%           \scr@ifundefinedorrelax{@currentHref}{%
%             \float@addtolists{%
%               \protect\contentsline{chapteratlist}{#1}{\thepage}%
%             }%
%           }{%
%             \float@addtolists{%
%               \protect\contentsline{chapteratlist}{#1}{\thepage}{\@currentHref}%
%             }%
%           }%
%         }%
%       \fi
%     \fi
%     \chaptermark{#1}%
%     \ifdim \@chapterlistsgap>\z@
%       \doforeachtocfile{%
%         \iftocfeature{\@currext}{chapteratlist}{%
%           \addtocontents{\@currext}{\protect\addvspace{\@chapterlistsgap}}%
%         }{}%
%       }%
%       \@ifundefined{float@addtolists}{}{%
%         \scr@float@addtolists@warning
%         \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
%       }%
%     \fi
%     \if@twocolumn
%       \if@at@twocolumn
%         \@makechapterhead{#2}%
%       \else
%         \@topnewpage[\@makechapterhead{#2}]%
%       \fi
%     \else
%       \@makechapterhead{#2}%
%       \@afterheading
%     \fi
%   }
%   \ifx\@tempa\@chapter
%     % Using \@chapter definition of scrbook.cls
%     \def\@chapter[#1]#2{%
%       \se@istest#1=\@nil
%       \if@se@tempswa
%         \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#2},#1}%
%       \else
%         \ifcase \@se@osectarg\relax
%           \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#1}}%
%         \or
%           \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#2}}%
%         \or
%           \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#1}}%
%         \fi
%       \fi
%       \ifnum \c@secnumdepth >\m@ne
%         \if@mainmatter
%           \refstepcounter{chapter}%
%           \@maybeautodot\thechapter
%           \typeout{\@chapapp\space\thechapter.}%
%           \ifx\se@ds@tocentry\@empty\else
%             \addcontentsline{toc}{chapter}{%
%               \protect\numberline{\thechapter}\se@ds@tocentry}%
%             \if@chaptertolists
%               \doforeachtocfile{%
%                 \iftocfeature{\@currext}{chapteratlist}{%
%                   \addcontentsline{\@currext}{chapteratlist}{%
%                     \protect\numberline{\thechapter}\se@ds@tocentry}%
%                 }{}%
%               }%
%               \@ifundefined{float@addtolists}{}{%
%                 \scr@float@addtolists@warning
%                 \scr@ifundefinedorrelax{@currentHref}{%
%                   \float@addtolists{%
%                     \protect\contentsline{chapteratlist}{%
%                       \protect\numberline{\thechapter}\se@ds@tocentry}
%                     {\thepage}%
%                   }%
%                 }{%
%                   \float@addtolists{%
%                     \protect\contentsline{chapteratlist}{%
%                       \protect\numberline{\thechapter}\se@ds@tocentry}
%                     {\thepage}{\@currentHref}%
%                   }%
%                 }%
%               }%
%             \fi
%           \fi
%         \else
%           \ifx\se@ds@tocentry\@empty\else
%             \addcontentsline{toc}{chapter}{\se@ds@tocentry}%
%             \if@chaptertolists
%               \doforeachtocfile{%
%                 \iftocfeature{\@currext}{chapteratlist}{%
%                   \addcontentsline{\@currext}{chapteratlist}{\se@ds@tocentry}%
%                 }{}%
%               }%
%               \@ifundefined{float@addtolists}{}{%
%                 \scr@float@addtolists@warning
%                 \scr@ifundefinedorrelax{@currentHref}{%
%                   \float@addtolists{%
%                     \protect\contentsline{chapteratlist}{\se@ds@tocentry}
%                     {\thepage}%
%                   }%
%                 }{%
%                   \float@addtolists{%
%                     \protect\contentsline{chapteratlist}{\se@ds@tocentry}
%                     {\thepage}{\@currentHref}%
%                   }%
%                 }%
%               }%
%             \fi
%           \fi
%         \fi
%       \else
%         \ifx\se@ds@tocentry\@empty\else
%           \addcontentsline{toc}{chapter}{\se@ds@tocentry}%
%           \if@chaptertolists
%             \doforeachtocfile{%
%               \iftocfeature{\@currext}{chapteratlist}{%
%                 \addcontentsline{\@currext}{chapteratlist}{\se@ds@tocentry}%
%               }{}%
%             }%
%             \@ifundefined{float@addtolists}{}{%
%               \scr@float@addtolists@warning
%               \scr@ifundefinedorrelax{@currentHref}{%
%                 \float@addtolists{%
%                   \protect\contentsline{chapteratlist}{\se@ds@tocentry}
%                   {\thepage}%
%                 }%
%               }{%
%                 \float@addtolists{%
%                   \protect\contentsline{chapteratlist}{\se@ds@tocentry}
%                   {\thepage}{\@currentHref}%
%                 }%
%               }%
%             }%
%           \fi
%         \fi
%       \fi
%       \expandafter\chaptermark\expandafter{\se@ds@head}%
%       \ifdim \@chapterlistsgap>\z@
%         \doforeachtocfile{%
%           \iftocfeature{\@currext}{chapteratlist}{%
%             \addtocontents{\@currext}{\protect\addvspace{\@chapterlistsgap}}%
%           }{}%
%         }%
%         \@ifundefined{float@addtolists}{}{%
%           \scr@float@addtolists@warning
%           \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
%         }%
%       \fi
%       \if@twocolumn
%         \if@at@twocolumn
%           \@makechapterhead{#2}%
%         \else
%           \@topnewpage[\@makechapterhead{#2}]%
%         \fi
%       \else
%         \@makechapterhead{#2}%
%         \@afterheading
%       \fi
%     }
%   \else
%     \PackageWarning{screxperimental}{%
%       Unexpected definition of \string\@chapter.\MessageBreak
%       Extended \string\chapter\space handling deactivated%
%     }%
%   \fi
% \fi
% %% - \addchap[<tocandheadentry>]{Title}, 
% %%   \addchap[tocentry={<tocentry>},head={<running head>}]{Title}
% \def\@tempa[#1]#2{\@schapter{#2}%
%   \addcontentsline{toc}{chapter}{#1}%
%   \if@chaptertolists
%     \doforeachtocfile{%
%       \iftocfeature{\@currext}{chapteratlist}{%
%         \addcontentsline{\@currext}{chapteratlist}{#1}%
%       }{}%
%     }%
%     \@ifundefined{float@addtolists}{}{%
%       \scr@float@addtolists@warning
%       \scr@ifundefinedorrelax{@currentHref}{%
%         \float@addtolists{%
%           \protect\contentsline{chapteratlist}{#1}{\thepage}%
%         }%
%       }{%
%         \float@addtolists{%
%           \protect\contentsline{chapteratlist}{#1}{\thepage}{\@currentHref}%
%         }%
%       }%
%     }%
%   \fi
%   \ifnum \@nameuse{scr@v@2.96}<\scr@compatibility\relax
%     \ifdim \@chapterlistsgap>\z@
%       \doforeachtocfile{%
%         \iftocfeature{\@currext}{chapteratlist}{%
%           \addtocontents{\@currext}{\protect\addvspace{\@chapterlistsgap}}%
%         }{}%
%       }%
%       \@ifundefined{float@addtolists}{}{%
%         \scr@float@addtolists@warning
%         \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
%       }%
%     \fi
%   \fi
%   \if@twoside\@mkboth{#1}{}\else\@mkboth{}{#1}\fi
% }%
% \ifx\@tempa\@addchap
%   \def\@addchap[#1]#2{\@schapter{#2}%
%     \se@istest#1=\@nil
%     \if@se@tempswa
%       \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#2},#1}%
%     \else
%       \ifcase \@se@osectarg\relax
%         \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#1}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#2}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#1}}%
%       \fi
%     \fi
%     \ifx\se@ds@tocentry\@empty\else
%       \addcontentsline{toc}{chapter}{\se@ds@tocentry}%
%       \if@chaptertolists
%         \doforeachtocfile{%
%           \iftocfeature{\@currext}{chapteratlist}{%
%             \addcontentsline{\@currext}{chapteratlist}{\se@ds@tocentry}%
%           }{}%
%         }%
%         \@ifundefined{float@addtolists}{}{%
%           \scr@float@addtolists@warning
%           \scr@ifundefinedorrelax{@currentHref}{%
%             \float@addtolists{%
%               \protect\contentsline{chapteratlist}{\se@ds@tocentry}{\thepage}%
%             }%
%           }{%
%             \float@addtolists{%
%               \protect\contentsline{chapteratlist}{\se@ds@tocentry}{\thepage}
%               {\@currentHref}%
%             }%
%           }%
%         }%
%       \fi
%     \fi
%     \ifnum \@nameuse{scr@v@2.96}<\scr@compatibility\relax
%       \ifdim \@chapterlistsgap>\z@
%         \doforeachtocfile{%
%           \iftocfeature{\@currext}{chapteratlist}{%
%             \addtocontents{\@currext}{\protect\addvspace{\@chapterlistsgap}}%
%           }{}%
%         }%
%         \@ifundefined{float@addtolists}{}{%
%           \scr@float@addtolists@warning
%           \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
%         }%
%       \fi
%     \fi
%     \if@twoside
%       \expandafter\@mkboth\expandafter{\se@ds@head}{}%
%     \else
%       \expandafter\@mkboth\expandafter{\expandafter}\expandafter{\se@ds@head}%
%     \fi
%   }%
% \else
%   \PackageWarning{screxperimental}{%
%     Unexpected definition of \string\@addchap.\MessageBreak
%     Extended \string\addchap\space handling deactivated%
%   }%
% \fi
%
% %% - \section[<tocandheadentry>]{Title}, 
% %%   \section[tocentry={<tocentry>},head={<running head>}]{Title}
% %%   ...
% \def\@tempa#1#2#3#4#5#6[#7]#8{%
%   \ifnum #2>\c@secnumdepth
%     \let\@svsec\@empty
%   \else
%     \refstepcounter{#1}%
%     \protected@edef\@svsec{\@seccntformat{#1}\relax}%
%   \fi
%   \@tempskipa #5\relax
%   \ifdim \@tempskipa>\z@
%     \begingroup
%       #6{%
%         \@hangfrom{\hskip #3\relax\@svsec}%
%           \interlinepenalty \@M #8\@@par}%
%     \endgroup
%     \csname #1mark\endcsname{#7}%
%     \addcontentsline{toc}{#1}{%
%       \ifnum #2>\c@secnumdepth \else
%         \protect\numberline{\csname the#1\endcsname}%
%       \fi
%       #7}%
%   \else
%     \def\@svsechd{%
%       #6{\hskip #3\relax
%       \@svsec #8}%
%       \csname #1mark\endcsname{#7}%
%       \addcontentsline{toc}{#1}{%
%         \ifnum #2>\c@secnumdepth \else
%           \protect\numberline{\csname the#1\endcsname}%
%         \fi
%         #7}}%
%   \fi
%   \@xsect{#5}}
% \ifx\scr@sect\@tempa
%   \def\scr@sect#1#2#3#4#5#6[#7]#8{%
%     \typeout{Using extended \string\scr@sect}%
%     \se@istest#7=\@nil
%     \if@se@tempswa
%       \setkeys{screxperimentaldocstruct}{tocentry={#8},head={#8},#7}%
%     \else
%       \ifcase \@se@osectarg\relax
%         \setkeys{screxperimentaldocstruct}{tocentry={#8},head={#8}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#7},head={#8}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#8},head={#7}}%
%       \fi
%     \fi
%     \ifnum #2>\c@secnumdepth
%       \let\@svsec\@empty
%     \else
%       \refstepcounter{#1}%
%       \protected@edef\@svsec{\@seccntformat{#1}\relax}%
%     \fi
%     \@tempskipa #5\relax
%     \ifdim \@tempskipa>\z@
%       \begingroup
%         #6{%
%           \@hangfrom{\hskip #3\relax\@svsec}%
%           \interlinepenalty \@M #8\@@par}%
%       \endgroup
%       \typeout{head=`\se@ds@head'}%
%       \expandafter\csname #1mark\expandafter\endcsname\expandafter{\se@ds@head}%
%       \typeout{tocentry=`\se@ds@tocentry'}%
%       \ifx\se@ds@tocentry\@empty\else
%         \addcontentsline{toc}{#1}{%
%           \ifnum #2>\c@secnumdepth \else
%             \protect\numberline{\csname the#1\endcsname}%
%           \fi
%           \se@ds@tocentry}%
%       \fi
%     \else
%       \def\@svsechd{%
%         #6{\hskip #3\relax
%           \@svsec #8}%
%         \typeout{head=`\se@ds@head'}%
%         \expandafter\csname #1mark\expandafter\endcsname\expandafter{\se@ds@head}%
%         \typeout{tocentry=`\se@ds@tocentry'}%
%         \ifx\se@ds@tocentry\@empty\else
%           \addcontentsline{toc}{#1}{%
%             \ifnum #2>\c@secnumdepth \else
%               \protect\numberline{\csname the#1\endcsname}%
%             \fi
%             \se@ds@tocentry}%
%         \fi
%       }%
%     \fi
%     \@xsect{#5}%
%   }
% \else
%   \PackageWarning{screxperimental}{%
%     Unexpected definition of \string\scr@sect.\MessageBreak
%     Extended \string\section, \string\subsection\space
%     ... handling\MessageBreak
%     deactivated%
%   }%
% \fi
%
% %% - \addsec[<tocandheadentry>]{Title}, 
% %%   \addsec[tocentry={<tocentry>},head={<running head>}]{Title}
% \def\@tempa[#1]#2{\section*{#2}\addcontentsline{toc}{section}{#1}
%   \if@twoside\ifx\@mkboth\markboth\markright{#1}\fi\fi
% }
% \ifx\@tempa\@addsec
%   % Using \@addsec definition of scrbook or scrreprt
%   \def\@addsec[#1]#2{%
%     \section*{#2}%
%     \se@istest#1=\@nil
%     \if@se@tempswa
%       \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#2},#1}%
%     \else
%       \ifcase \@se@osectarg\relax
%         \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#1}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#2}}%
%       \or
%         \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#1}}%
%       \fi
%     \fi
%     \ifx\se@ds@tocentry\@empty\else
%       \addcontentsline{toc}{section}{\se@ds@tocentry}%
%     \fi
%     \if@twoside\ifx\@mkboth\markboth
%         \expandafter\markright\expandafter{\se@ds@head}%
%     \fi\fi
%   }
% \else
%   \def\@tempa[#1]#2{\section*{#2}\addcontentsline{toc}{section}{#1}
%     \if@twoside \@mkboth{#1}{}\else \@mkboth{#1}{#1}\fi
%   }
%   \ifx\@tempa\@addsec
%     % Using \@addsec definition of scrartcl
%     \def\@addsec[#1]#2{\section*{#2}%
%       \se@istest#1=\@nil
%       \if@se@tempswa
%         \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#2},#1}%
%       \else
%         \ifcase \@se@osectarg\relax
%           \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#1}}%
%         \or
%           \setkeys{screxperimentaldocstruct}{tocentry={#1},head={#2}}%
%         \or
%           \setkeys{screxperimentaldocstruct}{tocentry={#2},head={#1}}%
%         \fi
%       \fi
%       \ifx\se@ds@tocentry\@empty\else
%         \addcontentsline{toc}{section}{\se@ds@tocentry}%
%       \fi
%       \if@twoside 
%         \expandafter\@mkboth\expandafter{#1}{}%
%       \else 
%         \expandafter\expandafter\expandafter\@mkboth
%         \expandafter\expandafter\expandafter{\expandafter#1\expandafter}%
%         \expandafter{#1}%
%       \fi
%     }
%   \else
%     \PackageWarning{screxperimental}{%
%       Unexpected definition of \string\@addsec.\MessageBreak
%       Extended \string\addsec\space handling deactivated%
%     }%
%   \fi
% \fi
% 
% %% - some keys and helpers, that were used above
% \DefineFamily{screxperimental}
% \DefineFamilyMember[docstruct]{screxperimental}
% \DefineFamilyKey[docstruct]{screxperimental}{tocentry}{%
%   \def\se@ds@tocentry{#1}}
% \DefineFamilyKey[docstruct]{screxperimental}{head}{%
%   \def\se@ds@head{#1}}
% \def\se@istest#1=#2\@nil{%
%   \ifx\relax#2\relax\@se@tempswafalse\else\@se@tempswatrue\fi
% }
% \end{verbatim}
% -------------------------------------------

% ---------------- Experiment: Variablen-Blöcke ---------------------------
\@ifclassloaded{scrlttr2}{%
% \begin{macro}{\ifkomavarwidth}
%   \changes{v3.12}{2011/06/16}{neu}
% \begin{macro}{\ifkomavarheight}
%   \changes{v3.12}{2011/06/16}{neu}
% \begin{macro}{\ifkomavardepth}
%   \changes{v3.12}{2011/06/16}{neu}
% \begin{macro}{\ifkomavartotalheight}
%   \changes{v3.12}{2011/06/16}{neu}
% \begin{macro}{\ifkomavar@whd}
%   \changes{v3.12}{2011/06/16}{neu (intern)}
%   Makros, um die Breite, Höhe, Tiefe oder vertikale Gesamtausdehung einer
%   \KOMAScript-Variablen mit einem Wert zu vergleichen. Das erste Argument is
%   die \KOMAScript-Variable, das zweite Argument der Vergleich (=, > oder <)
%   und der Vergleichswert, das dritte ist der true-Teil, das vierte der
%   false-Teil. Die Variable muss definiert sein!
%    \begin{macrocode}
\newcommand*{\ifkomavarwidth}{\if@komavar@whd{width}}
\newcommand*{\ifkomavarheight}{\if@komavar@whd{height}}
\newcommand*{\ifkomavardepth}{\if@komavar@whd{depth}}
\newcommand*{\ifkomavar@whd}[3]{%
  \begingroup
    \csname setto#1\endcsname{\@tempdima}{\usekomavar{#2}}%
    \ifdim \@tempdima #3
      \aftergroup\@firstoftwo
    \else
      \aftergroup\@secondoftwo
    \fi
  \endgroup
}
\newcommand*{\ifkomavartotalheight}[3]{%
  \begingroup
    \setbox\@tempboxa\hbox{{\usekomavar{#2}}}%
    \setlength{\@tempdima}{\dimexpr \ht\@tempboxa+\dp\@tempboxa\relax}%
    \setbox\@tempboxa\box\voidb@x
    \ifdim \@tempdima #3
      \aftergroup\@firstoftwo
    \else
      \aftergroup\@secondoftwo
    \fi
  \endgroup
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\declarekomavarblock}
%   \changes{v3.12}{2011/06/16}{neu}
%   Hier werden neue Blöcke aus \KOMAScript-Variablen gebildet. Ein Beispiel
%   für einen solchen Block ist die Geschäftszeile. Das (erste) Argument ist
%   der Name des neuen Blocks. Dieser muss eindeutig sein! 
% \begin{macro}{\komavar@block@\meta{Name}}
%   \changes{v3.12}{2011/06/16}{neu (intern)}
%   Intern wird für jeden Block eine durch Komma separierte Liste mit den
%   Variablen, die er enthält, geführt.
%    \begin{macrocode}
\newcommand*{\declarekomavarblock}[1]{%
  \@ifundefined{komavar@block@#1}{%
    \@namedef{komavar@block@#1}{}%
  }{%
    \ClassError{scrlttr2}{KOMA variables block `#1' already declared}{%
      You've tried to declare the KOMA variables block `#1' using\MessageBreak
      \space\space\string\declarekomavarblock{#1},\MessageBreak
      but a KOMA variables block with this name was already
      defined.\MessageBreak
      Each KOMA variables block may defined only once, so you have to use
      another\MessageBreak
      name, but if you'll continue, the new declaration will be ignored.}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\resetkomavarblock}
%   \changes{v3.12}{2011/06/16}{neu}
%   Ein Block kann jedoch auch wieder gelöscht werden. Dabei wird lediglich
%   die Liste der Variablen geleert.
%    \begin{macrocode}
\newcommand*{\resetkomavarblock}[1]{%
  \@ifundefined{komavar@block@#1}{%
    \ClassError{scrlttr2}{KOMA variables block `#1' unknown}{%
      You've tried to reset the KOMA variables block `#1' using\MessageBreak
      \space\space\string\resetkomavarblock{#1},\MessageBreak
      but a KOMA variables block with this name is unknown.\MessageBreak
      You have to declare the  KOMA variables block using\MessageBreak
      \space\space\string\declarekomavarblock{#1}\MessageBreak
      before you can reset it.\MessageBreak
      If you'll continue, the reset command will be ignored.}%
  }{%
    \@namedef{komavar@block@#1}{}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\addtokomavarblock}
%   \changes{v3.12}{2011/06/16}{neu}
%   Einem Block wird eine oder mehrere Variablen hinzugefügt. Die Liste der
%   Variablen wird als zweites Argument angegeben.
%    \begin{macrocode}
\newcommand*{\addtokomavarblock}[2]{%
  \@ifundefined{komavar@block@#1}{%
    \ClassError{scrlttr2}{KOMA variables block `#1' unknown}{%
      You've tried to add new KOMA variables to the block `#1'
      using\MessageBreak
      \space\space\string\addtokomavarblock{#1}{...},\MessageBreak
      but a KOMA variables block with this name is unknown.\MessageBreak
      You have to declare the  KOMA variables block using\MessageBreak
      \space\space\string\declarekomavarblock{#1}\MessageBreak
      before you can add variables to it.\MessageBreak
      If you'll continue, the reset command will be ignored.}%
  }{%
    \@for \reserved@a:=#2\do {%
      \ifx\reserved@a\@empty\else
        \expandafter\protected@edef\csname komavar@block@#1\endcsname
        {\csname komavar@block@#1\endcsname,\reserved@a}%
      \fi
    }%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\printkomavarblock}
%   \changes{v3.12}{2011/06/16}{neu}
%   Ein Block wird ausgegeben. Dabei ist das erste Argument eine Liste
%   möglicher Optionen für die Ausgabe. Derzeit werden folgende Optionen
%   verstanden:
%   \begin{description}
%   \item[\texttt{ignoreunkown} (Schalter):] Unbekannte Variablen im Block
%     ignorrieren. Anderenfalls wird für unbekannte Variablen ein Fehler
%     gemeldet.
%   \item[\texttt{ignoreempty} (Schalter):] Leere Variablem im Block
%     ignorrieren. Anderenfalls werden leere Variablen ebenfalls ausgegeben.
%   \item[\texttt{prefirst} (Anweisungen):] Die Anweisungen werden unmittelbar
%     bevor die erste Variable ausgegeben wird, ausgeführt.
%   \item[\texttt{between} (Anweisungen):] Die Anweisungen werden zwischen den
%     einzelnen Variablen ausgeführt (tatsächlich vor allen Variablen bis auf
%     die erste).
%   \item[\texttt{postlast} (Anweisungen):] Die Anweisungen werden unmittelbar
%     nachdem die letzte Variable ausgegeben wurde, ausgeführt.
%   \item[\texttt{ifnothing} (Anweisungen):] Die Anweisungen werden genau dann
%     ausgeführt, wenn keine Variablen ausgegeben wurden.
%   \item[\texttt{printvar} {Befehl}:} Ein Befehl, der genau ein Argument,
%     nämlich den Variablenname, erwarted und die Variable in der gewünschten
%     Formatierung ausgibt. Ist diese Option nicht angegeben, so wird der
%     Variablenname selbst ohne weitere Formatierung ausgegeben!
%   \end{description}
% \begin{macro}{\print@koma@var}
%   \changes{v3.12}{2011/06/16}{neu (intern)}
% \begin{macro}{\print@koma@var@\meta{Blockname}}
%   \changes{v3.12}{2011/06/16}{neu (intern)}
%   Die Ausgabe der einzelnen Variablen erfolgt innerhalb einer Gruppe mit
%   Hilfe von \cs{print@koma@var}. Dabei ist das erste Argument der Blockname
%   und das zweite Argument der Variablenname. Intern wird dann für jede
%   Variable \cs{print@koma@var@\meta{Blockname}} aufgerufen. Dabei ist das
%   einzige Argument der Variablenname.
% \begin{macro}{\ifkomavarblockprinted}
%   \changes{v3.12}{2011/06/16}{neu}
%   Der Schalter gibt sowohl während der Ausgabe, als auch nach der Ausgabe
%   an, ob etwas ausgegeben wurde. 
% \begin{Counter}{komavaratblock}
%   Gleichzeitig wird mit dem globalen Zähler \texttt{komavaratblock} die
%   Nummer der Variablen bestimmt, die gerade ausgegeben wird.
%    \begin{macrocode}
\newif\ifkomavarblockprinted
\newcommand*{\printkomavarblock}[2][]{%
  \begingroup
    \DefineFamily{komavarblock}%
    \DefineFamilyMember[.local]{komavarblock}%
    \FamilyBoolKey[.local]{komavarblock}{ignoreunknown}{@kvb@ignoreundefined}%
    \FamilyBoolKey[.local]{komavarblock}{ignoreempty}{@kvb@ignoreempty}%
    \edef\reserved@a{%
      \noexpand\FamilyStringKey[.local]{komavarblock}{prefirst}{%
        \expandafter\noexpand\csname komavar@prefirst@block@#2\endcsname}%
    }\reserved@a
    \edef\reserved@a{%
      \noexpand\FamilyStringKey[.local]{komavarblock}{between}{%
        \expandafter\noexpand\csname komavar@between@block@#2\endcsname}%
    }\reserved@a
    \edef\reserved@a{%
      \noexpand\FamilyStringKey[.local]{komavarblock}{postlast}{%
        \expandafter\noexpand\csname komavar@postlast@block@#2\endcsname}%
    }\reserved@a
    \edef\reserved@a{%
      \noexpand\FamilyStringKey[.local]{komavarblock}{ifnothing}{%
        \expandafter\noexpand\csname komavar@ifnothing@block@#2\endcsname}%
    }\reserved@a
    \edef\reserved@a{%
      \noexpand\FamilyStringKey[.local]{komavarblock}{printvar}{%
        \expandafter\noexpand\csname print@koma@var@#2\endcsname}%
    }\reserved@a
    \expandafter\let\expandafter\reserved@a\csname @kvb@default@#2\endcsname
    \ifx\reserved@a\relax\let\reserved@a\@empty\fi
    \FamilyOptions{komavarblock}{\reserved@a,#1}%
    \komavarblockprintedfalse
    \expandafter\@for \expandafter\reserved@a
    \expandafter:\expandafter=\csname komavar@block@#2\endcsname\do {%
      \ifx\reserved@a\@empty\else
        \expandafter\ifkomavar\expandafter{\reserved@a}{%
          \if@kvb@ignoreempty
            \expandafter\ifkomavarempty\expandafter{\reserved@a}{%
              \ClassInfo{scrlttr2}{Ignoring empty KOMA variable
                `\reserved@a'\MessageBreak
                while printing KOMA variables block `#2'}%
            }{%
              \edef\@tempa{\noexpand\print@koma@var{#2}{\reserved@a}}%
              \@tempa
            }%
          \else
            \edef\@tempa{\noexpand\print@koma@var{#2}{\reserved@a}}%
            \@tempa
          \fi
        }{%
          \if@kvb@ignoreundefined
            \ClassInfo{scrlttr2}{Ignoring undefined KOMA variable
              `\reserved@a'\MessageBreak
              while printing KOMA variables block `#2'}%
          \else
            \ClassError{scrlttr2}{undefined KOMA variable `\reserved@a'}{%
              The KOMA variable `\reserved@a' has been added to KOMA variables
              block\MessageBreak
              `#2', but has not been defined until you wanted to\MessageBreak
              print this block. \space You either should not add this
              variable to the block\MessageBreak
              or you should define (and set) the variable before trying
              to print the block.}%
          \fi
        }%
      \fi
    }%
    \ifkomavarblockprinted   
      \aftergroup\komavarblockprintedtrue
      \csname komavar@postlast@block@#2\endcsname
    \else
      \aftergroup\komavarblockprintedfalse
      \csname komavar@ifnothing@block@#2\endcsname
    \fi
  \endgroup
}
\newcounter{komavaratblock}
\newcommand*{\print@koma@var}[2]{%
  \ifkomavarblockprinted
  \else
    \komavarblockprintedtrue
    \setcounter{komavaratblock}{0}%
    \csname komavar@prefirst@block@#1\endcsname
  \fi
  \ifnum \value{komavaratblock}>\z@
    \csname komavar@between@block@#1\endcsname
  \fi
  \stepcounter{komavaratblock}%
  \csname print@koma@var@#1\endcsname{#2}%
}
%    \end{macrocode}
% \end{Counter}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% Hier ein Beispiel Code, um die Geschäftszeile auf das neue System
% umzustellen.
% TODO: Wenn das ganze System in scrlttr2 eingebaut wird, sind die
%       \cs{renewcommand} natürlich durch \cs{newcommand} zu ersetzen
%       (bzw. die entsprechenden \cs{newcommand} aus scrlttr2 durch die hier
%       zu ersetzen). Einige Dinge sind auch noch zu ändern, die nachfolgend
%       auch erwähnt werden.
% \begin{macro}{\addtoreffields}
%   \changes{v3.12}{2012/08/02}{command redefined to use the new variable
%     block system with \cs{addtokomavarblock}}
%    \begin{macrocode}
\renewcommand*{\addtoreffields}{\addtokomavarblock{refline}}
%    \end{macrocode}
% \begin{macro}{\removereffields}
%   \changes{v3.12}{2012/08/02}{command redefined to use the new variable
%     block system with \cs{resetkomavarblock}}
%    \begin{macrocode}
\renewcommand*{\removereffields}{\resetkomavarblock{refline}}
%    \end{macrocode}
% \begin{macro}{\@set@reffields}
%   \changes{v3.12}{2012/08/02}{command redefined to use the new variable
%     block system with \cs{resetkomavarblock}}
%    \begin{macrocode}
\renewcommand*{\@set@reffields}{%
%    \end{macrocode}
% TODO: Die beiden folgenden Zeilen werden nur benötigt, um \cs{@datefield} zu
%       patchen. Sobald das neue System in scrlttr2 eingebaut wird, sollte das
%       entfallen und stattdessen \cs{@datefield} direkt angepasst werden.
% TODO: Der hier verwendete \texttt{prefirst-} und \texttt{postlast-}Code zum
%       Setzen des Datums sollte mit einer Benutzeranweisung angeboten werden,
%       damit Anwender das in ihren selbst definierten Blöcken ebenfalls
%       einfach und ohne interne Anweisungen machen können, etwas in der Art
%       \cs{printoptionaldate} (ggf. mit Argument \texttt{pre} oder
%       \texttt{post}). Das sollte auch noch für das Datum im
%       \texttt{ifnothing-}Code verwendbar sein.
%    \begin{macrocode}
  \ifx\do@set@reffield\@test@reffield \@tempswatrue
  \else
    \printkomavarblock[%
      ignoreempty,
      prefirst={\ifnum\@datepos=2 \print@koma@var{refline}{date}\fi},
      between={\enskip\hfill},
      postlast={\ifnum\@datepos=1 \print@koma@var{refline}{date}\fi
%    \end{macrocode}
% TODO: Die folgende Zeile wird nur benötigt, um \cs{@datefield} zu
%       patchen. Sobald das neue System in scrlttr2 eingebaut wird, sollte das
%       entfallen und stattdessen \cs{@datefield} direkt angepasst werden.
%    \begin{macrocode}
        \aftergroup\let\aftergroup\@datepos\aftergroup\z@
      },
      ifnothing={\ifnum\@datepos=\@ne \hfill\fi
        \ifnum\@datepos=\z@ \else
          \ifkomavarempty{date}{}{%
            \ifkomavarempty{place}{}{%
              \usekomavar{place}\usekomavar{placeseparator}}%
            \usekomavar{date}%
          }%
%    \end{macrocode}
% TODO: Die folgende Zeile wird nur benötigt, um \cs{@datefield} zu
%       patchen. Sobald das neue System in scrlttr2 eingebaut wird, sollte das
%       entfallen und stattdessen \cs{@datefield} direkt angepasst werden.
%    \begin{macrocode}
          \aftergroup\let\aftergroup\@datepos\aftergroup\z@
        \fi},
      printvar=\printkomavaratrefline,
    ]{refline}%
%    \end{macrocode}
% TODO: Die folgende Zeile wird nur benötigt, um \cs{@datefield} zu
%       patchen. Sobald das neue System in scrlttr2 eingebaut wird, sollte das
%       entfallen und stattdessen \cs{@datefield} direkt angepasst werden.
%    \begin{macrocode}
  \fi
}
%    \end{macrocode}
% \begin{macro}{\printkomavaratrefline}
%   \changes{v3.12}{2012/08/02}{neu}
%   Diese Anweisung gibt eine einzelne Variable aus. Sie ist für die
%   Verwendung bei Ausgabe einer Geschäftszeile gedacht, bei der die
%   Variablennamen über die Variableninhalte gesetzt werden. Durch Änderung
%   der Schrift kann das Aussehen allerdings erheblich verändert werden.
%    \begin{macrocode}
\newcommand*{\printkomavaratrefline}[1]{%
  \settowidth{\@tempdima}{\strut\usekomafont{refvalue}\usekomavar{#1}}%
  \setbox0\hbox{\strut\usekomafont{refname}\usekomavar*{#1}}%
  \ifdim \@tempdima<\wd \z@ \setlength{\@tempdima}{\wd \z@}\fi
  \parbox[t]{\@tempdima}{\noindent\raggedright
    \strut \box \z@\\
    \usekomafont{refvalue}\strut \usekomavar{#1}}%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% TODO: Die folgende Zeile wird nur benötigt, um \cs{@datefield} zu
%       patchen. Sobald das neue System in scrlttr2 eingebaut wird, sollte das
%       entfallen und stattdessen \cs{@datefield} direkt angepasst werden.
%    \begin{macrocode}
\renewcommand*{\@set@reffield}[1]{}
%    \end{macrocode}
% Jetzt wird für die Geschäftszeile noch ein neuer Block definiert und dieser
% mit den Standardfeldern befüllt:
%    \begin{macrocode}
\declarekomavarblock{refline}
\defaultreffields
%    \end{macrocode}
%
% TODO: Beispiel für Variablen, die nicht neben, sondern untereinander gesetzt
%       werden. Dafür ist dann eine eigene \cs{print-}Anweisung notwendig.
%
% TODO: Befehl \cs{declareautoblock} für den neben dem Block selbst auch
%       Positionen (Pseudo-Längen) bestimmt werden über die der Block
%       innerhalb von \cs{opening} automatisch gesetzt wird. Danach wäre
%       natürlich auch die Geschäftszeile als ein solcher automatischer Block
%       zu definieren.
%
}{}
%
% Ein Minimalbeispiel für die Verwendung könnte beispielsweise sein:
% \begin{verbatim}
% \documentclass[fromalign=right]{scrlttr2}
% \usepackage{screxperimental}
% \usepackage[ngerman]{babel}
% \LoadLetterOption{visualize}
%  
% \KOMAoptions{parskip=full}
% \showfields{address,refline}
% 
% \setkomavar{place}{Hier}
% \setkomavar{fromname}{Ich}
% \setkomavar{fromaddress}{Hier}
% \setkomavar{myref}{Ich}
% 
% \pagestyle{headings}
% 
% \begin{document}
% \begin{letter}{toname}
% \opening{To whom it may concern,}
% bla bla bla...
% 
% % Da im Folgenden keine printvar-Anweisung festgelegt wird, werden nur die
% % Namen der Felder ausgegeben.
% Benutze Felder: \printkomavarblock[ignoreunknown,ignoreempty]{refline}
% 
% \closing{With best regards,}
% \end{letter}
% \end{document}
% \end{verbatim}
% -------------------------------------------

\endinput
%% end of file `screxperimental.sty'
