% \CheckSum{10941}
% \iffalse
% ======================================================================
% scrclass.dtx 
% Copyright (C) 1995-2002 Markus Kohm
%
% This file is part of the LaTeX2e KOMA-Script-Bundle
%
% This file can be redistributed and/or modified under the terms
% of the LaTeX Project Public License Version 1.0 distributed 
% together with this file. See LEGAL.TXT or LEGALDE.TXT.
%
% This bundle is written specialy for use at german-language. So the
% main documentation is german. There is also a english documentation,
% but this is NOT up-to-date.
% ----------------------------------------------------------------------
% scrclass.dtx
% Copyright (C) 1995-2002 Markus Kohm
%
% Diese Datei ist Teil des LaTeX2e KOMA-Script-Pakets.
%
% Diese Datei kann nach den Regeln der LaTeX Project Public
% Licence Version 1.0, wie sie zusammen mit dieser Datei verteilt
% wird, weiterverbreitet und/oder modifiziert werden. Siehe dazu
% auch LEGAL.TXT oder LEGALDE.TXT.
%
% Dieses Paket ist fuer den deutschen Sprachraum konzipiert. Daher ist
% auch diese Anleitung komplett in Deutsch. Zwar existiert auch eine
% englische Version der Anleitung, diese hinkt der deutschen Anleitung
% jedoch fast immer hinterher.
% ======================================================================
%
% \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         \~}
%
%<*dtx>
            \ProvidesFile{scrclass.dtx}
%</dtx>
%<class|package>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
%<driver>\ProvidesFile{scrclass.drv}
%<class>\ProvidesClass{%
%<scrartcl>  scrartcl%
%<scrreprt>  scrreprt%
%<scrbook>  scrbook%
%<scrlettr>  scrlttr2%
%<class>  }
%<package>\ProvidesPackage{%
%<typearea>  typearea%
%<scrlfile>  scrlfile%
%<package>  }
%<lco>\ProvidesFile{%
%<DIN>  DIN%
%<DINmoretext>  DINmtext%
%<SN>  SN%
%<SNold>  SNold%
%<SwissLeft>  SNleft%
%<KOMAold>  KOMAold%
%<lco>  .lco}
  [2002/09/18 v2.9j LaTeX2e KOMA
%<beta>    BETA-VERSION
%<class>    document class]
%<package>    package]
%<lco>    letter-class-option]
%
%<*driver>
              Script bundle]
\documentclass{ltxdoc}
\usepackage[a4paper,BCOR15mm,DIV12]{typearea}
\usepackage{german}
%
% Fuer den Fall von |\EnableCrossrefs|
%
\DoNotIndex{\.,\@M,\@abstrtfalse,\@abstrttrue,\@addtoreset,\@afterheading}
\DoNotIndex{\@afterindentfalse,\@arabic,\@badmath,\@beginparpenalty}
\DoNotIndex{\@car,\@cdr,\@centercr,\@cite,\@dblfloat,\@dotsep}
\DoNotIndex{\@dottedtocline,\@empty,\@endparpenalty,\@endpart}
\DoNotIndex{\@finclfalse,\@fincltrue,\@float,\@fontswitch,\@fslfalse}
\DoNotIndex{\@fsltrue,\@gobbletwo}
\DoNotIndex{\@hangfrom,\@highpenalty,\@hinclfalse,\@hincltrue,\@hslfalse}
\DoNotIndex{\@hsltrue,\@idxitem,\@ifnextchar,\@ifundefined,\@itempenalty}
\DoNotIndex{\@latex@warning,\@m,\@mainmatterfalse,\@mainmattertrue}
\DoNotIndex{\@medpenalty,\@minus,\@mkboth,\@mparswitchfalse}
\DoNotIndex{\@mparswitchtrue}
\DoNotIndex{\@ne,\@nil,\@nobreakfalse,\@nobreaktrue,\@noitemerr,\@nomath}
\DoNotIndex{\@openrightfalse,\@openrighttrue}
\DoNotIndex{\@plus,\@restonecolfalse,\@restonecoltrue}
\DoNotIndex{\@tempa,\@tempboxa,\@tempdima,\@tempswafalse,\@tempswatrue}
\DoNotIndex{\@titlepagefalse,\@titlepagetrue,\@tocrmarg,\@topnewpage}
\DoNotIndex{\@topnum,\@twocolumnfalse,\@twocolumntrue,\@twosidefalse}
\DoNotIndex{\@twosidetrue}
\DoNotIndex{\@whiledim,\@whilenum,\\,\ }
\DoNotIndex{\addcontentsline,\addpenalty,\addtocontents,\addtolength}
\DoNotIndex{\addvspace,\advance,\@Alph,\@alph,\@arabic}
\DoNotIndex{\begin,\begingroup,\bfseries,\box,\bullet}
\DoNotIndex{\c@figure,\c@page,\c@secnumdepth,\c@table,\c@tocdepth}
\DoNotIndex{\cdot,\centering,\changes,\cleardoublepage,\clearpage}
\DoNotIndex{\cmd,\col@number,\CurrentOption,\CodelineIndex}
\DoNotIndex{\day,\dblfloatpagefraction,\dbltopfraction}
\DoNotIndex{\DeclareOldFontCommand,\DeclareOption,\def,\DisableCrossrefs}
\DoNotIndex{\divide,\DoNotIndex}
\DoNotIndex{\ifdim,\else,\fi,\empty,\em,\EnableCrossrefs,\end}
\DoNotIndex{\end@dblfloat}
\DoNotIndex{\end@float,\endgroup,\endlist,\endquotation,\endtitlepage}
\DoNotIndex{\everypar,\ExecuteOptions,\expandafter}
\DoNotIndex{\fboxrule,\fboxsep}
\DoNotIndex{\gdef,\global}
\DoNotIndex{\hangindent,\hbox,\hfil,\hrule,\hsize,\hskip,\hspace,\hss}
\DoNotIndex{\if@tempswa,\ifcase,\or,\fi,\fi}
\DoNotIndex{\ifnum,\ifodd,\ifx,\fi,\fi,\fi}
\DoNotIndex{\input,\InputIfFileExists,\item,\itshape}
\DoNotIndex{\kern,\leavevmode,\leftmark,\leftskip,\let,\lineskip}
\DoNotIndex{\list,\long}
\DoNotIndex{\m@ne,\m@th,\marginpar,\markboth,\markright,\mathbf,\mathcal}
\DoNotIndex{\mathit,\mathnormal,\mathrm,\mathsf,\mathtt,\MessageBreak}
\DoNotIndex{\month}
\DoNotIndex{\newblock,\newcommand,\newcount,\newcounter,\newdimen}
\DoNotIndex{\newenvironment,\newlength,\newpage,\nobreak,\noindent}
\DoNotIndex{\normalfont,\normallineskip,\normalsize,\null,\number}
\DoNotIndex{\numberline}
\DoNotIndex{\OldMakeindex,\OnlyDescription,\overfullrule}
\DoNotIndex{\p@,\PackageError,\PackageInfo,\PackageWarningNoLine}
\DoNotIndex{\pagenumbering,\pagestyle,\par,\paragraph,\parbox}
\DoNotIndex{\PassOptionsToPackage,\pcal,\penalty,\pmit,\PrintChanges}
\DoNotIndex{\PrintIndex,\ProcessOptions,\protect,\providecommand}
\DoNotIndex{\ProvidesClass}
\DoNotIndex{\raggedbottom,\raggedleft,\raggedright,\refstepcounter,\relax}
\DoNotIndex{\renewcommand,\RequirePackage,\reset@font}
\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rmfamily,\@Roman,\@roman}
\DoNotIndex{\scshape,\secdef,\setbox,\setcounter,\setlength}
\DoNotIndex{\settowidth,\sfcode,\sffamily,\skip,\sloppy,\slshape,\space}
\DoNotIndex{\string}
\DoNotIndex{\ta@temp,\the,\thispagestyle,\triangleright,\ttfamily}
\DoNotIndex{\twocolumn,\typeout}
\DoNotIndex{\undefined,\usecounter}
\DoNotIndex{\vfil,\vfill,\vspace}
\DoNotIndex{\wd,\xdef,\year,\z@}
\CodelineIndex
%
\begin{document}
 \DocInput{scrclass.dtx}
\end{document}
%</driver>
% \fi
%
% \GetFileInfo{scrclass.dtx}
% \RecordChanges
%
% \makeatletter
% \def\macro{\begingroup
%    \catcode`\\12
%    \MakePrivateLetters \m@cro@ 0}
% \def\environment{\begingroup
%    \catcode`\\12
%    \MakePrivateLetters \m@cro@ 1}
% \def\option{\begingroup
%    \catcode`\\12
%    \MakePrivateLetters \m@cro@ 2}
% \def\Length{\begingroup
%    \catcode`\\12
%    \MakePrivateLetters \m@cro@ 3}
% \def\Counter{\begingroup
%    \catcode`\\12
%    \MakePrivateLetters \m@cro@ 4}
% \def\KOMAvar{\begingroup
%    \catcode`\\12
%    \MakePrivateLetters \m@cro@ 5}
% \long\def\m@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
%   \edef\saved@macroname{\string#2}%
%   \ifcase #1%
%     \edef\saved@@macroname{\expandafter\@gobble\saved@macroname}
%   \or
%     \edef\saved@@macroname{\expandafter\@gobble\saved@macroname}
%   \else
%     \let\saved@@macroname\saved@macroname
%   \fi
%   \def\makelabel##1{\llap{##1}}%
%   \if@inlabel
%     \let\@tempa\@empty \count@\macro@cnt
%     \loop \ifnum\count@>\z@
%       \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
%     \edef\makelabel##1{\llap{\vtop to\baselineskip
%                                {\@tempa\hbox{##1}\vss}}}%
%     \advance \macro@cnt \@ne
%   \else  \macro@cnt\@ne  \fi
%   \edef\@tempa{\noexpand\item[%
%      \ifcase #1%
%        \noexpand\PrintMacroName
%      \or
%        \noexpand\PrintEnvName
%      \or
%        \noexpand\PrintOptionName
%      \or
%        \noexpand\PrintLengthName
%      \or
%        \noexpand\PrintCounterName
%      \or
%        \noexpand\PrintKOMAvarName
%      \fi
%      {\string#2}]}%
%   \@tempa
%   {\advance\c@CodelineNo\@ne
%    \ifcase #1%
%       \SpecialMainIndex{#2}\nobreak
%       \DoNotIndex{#2}%
%    \or
%       \SpecialMainEnvIndex{#2}\nobreak
%    \or
%       \SpecialMainOptionIndex{#2}\nobreak
%    \or
%       \SpecialMainLengthIndex{#2}\nobreak
%    \or
%       \SpecialMainCounterIndex{#2}\nobreak
%    \or
%       \SpecialMainKOMAvarIndex{#2}\nobreak
%    \fi
%    }%
%   \ignorespaces}
% \let\endoption\endtrivlist
% \providecommand*{\PrintOptionName}[1]{\strut \MacroFont #1\ }
% \providecommand*{\PrintLengthName}[1]{\strut \MacroFont \char`\\#1\ }
% \providecommand*{\PrintCounterName}[1]{\strut \MacroFont #1\ }
% \providecommand*{\PrintKOMAvarName}[1]{\strut \MacroFont #1\ }
% \newcommand*{\ttbksp}{\texttt{\char`\\}}
% \newcommand*{\SpecialMainOptionIndex}[1]{\@bsphack
%   \special@index{#1\actualchar{\string\ttfamily\space#1}
%     (Option)\encapchar main}%
%   \special@index{Optionen:\levelchar{\string\ttfamily\space#1}\encapchar
%     main}\@esphack}
% \newcommand*{\SpecialMainLengthIndex}[1]{\@bsphack
%   \special@index{#1\actualchar{\string\ttfamily\string\ttbksp\space#1}
%     (L"ange)\encapchar main}%
%   \special@index{L"angen:\levelchar{\string\ttfamily\string\ttbksp\space
%       #1}\encapchar
%     main}\@esphack}
% \newcommand*{\SpecialMainCounterIndex}[1]{\@bsphack
%   \special@index{#1\actualchar{\string\ttfamily\space#1}
%     (Z"ahler)\encapchar main}%
%   \special@index{Z"ahler:\levelchar{\string\ttfamily\space#1}\encapchar
%     main}\@esphack}
% \newcommand*{\SpecialMainKOMAvarIndex}[1]{\@bsphack
%  \special@index{#1\actualchar{\string\ttfamily\space#1}
%    (Variable)\encapchar main}%
%  \special@index{KOMA-Script
%    Variablen:\levelchar{\string\ttfamily\space
%      #1}\encapchar
%    main}\@esphack}
% \renewcommand*{\changes@}[3]{%
%   \protected@edef\@tempa{\noexpand\glossary{#1\levelchar
%                          \ifx\saved@macroname\@empty
%                            \space
%                            \actualchar
%                            \generalname
%                          \else
%                            \saved@@macroname
%                            \actualchar
%                            \string\verb\quotechar*\verbatimchar%
%                            \saved@macroname
%                            \verbatimchar
%                          \fi
%                          :\levelchar #3}}%
%   \@tempa\endgroup\@esphack}
% \makeatother
% \MacroIndent=2em
%
% \title{Die Haupt-classes und -packages des \textsf{KOMA-Script}
%        Pakets\thanks{Diese Datei hat die Versionsnummer \fileversion,
%        letzte "Anderung \filedate.}}
% \author{Frank Neukam\and Markus Kohm}
% \date{\filedate}
% \maketitle
%
% \tableofcontents
%
% \changes{v2.0e}{1994/10/28}{Erste Version, die \texttt{docstrip} 
%                             verwendet}
% \changes{v2.3}{1995/06/25}{Change-Glossary aufger"aumt}
% \changes{v2.3a}{1995/07/08}{\texttt{0pt} jeweils durch \cs{z@} ersetzt}
% \changes{v2.3a}{1995/07/08}{Verwendung von \cs{cs} statt \cs{cmd} im
%                             Change Glossary}
% \changes{v2.3a}{1995/07/08}{Die Mehrzahl der \cs{newcommand} mit
%                             Parameter durch \cs{newcommand*} ersetzt}
% \changes{v2.3a}{1995/07/08}{\cs{hbox to} durch \cs{hb@xt@} ersetzt}
% \changes{v2.3a}{1995/07/08}{\cs{reset@font} durch \cs{normalfont}
%                             ersetzt} 
% \changes{v2.3g}{1996/01/14}{Diverse weitere \cs{newcommand} mit und
%                             ohne Parameter durch \cs{newcommand*}
%                             ersetzt}
% \changes{v2.3g}{1996/01/14}{Diverse \cs{renewcommand} mit und ohne
%                             Parameter durch \cs{renewcommand*}
%                             ersetzt}
% \changes{v2.7b}{2001/01/05}{Implementierungsdokumentation verbessert
%                             und bessert geordnet
%                             (Gliederungsbefehle)}
% \changes{v2.8q}{2001/11/13}{diverse \texttt{pt} durch \cs{p@} und
%                             \texttt{0pt} durch \cs{z@} ersetzt}
%
% \part{Anleitung}
%
% \section{Generelles}
%
% \subsection{Rechtliches}
% Es wird keinerlei Haftung "ubernommen f"ur irgendwelche Sch"aden,
% die aus der Benutzung der Programme und Dateien des hier
% beschriebenen Paketes folgen.
%
% \subsection{Das \textsf{KOMA-Script} Paket}
%
% Das gesamte \textsf{KOMA-Script} Paket besteht aus mehreren Teilen.
% Dieser Teil (|scrclass.dtx|) beinhaltet die Haupt-classes
% |scrartcl.cls|, |scrreprt.cls| und |scrbook.cls| sowie das von
% diesen ben"otigte package |typearea.sty|.
%
% Die urspr"unglich ebenfalls in |komascr.dtx| enthaltene Anleitung
% wurde von Harald Sommerfeldt "uberarbeitet und ist nun als getrennte
% Datei |scrguide.tex| zu finden. |scrguide.tex| sollte am gleichen
% Ort verf"ugbar sein, an dem Sie auch |scrclass.dtx| gefunden haben.
%
% Urspr"unglich war in |komascr.dtx| eine Brief-Klasse
% enthalten. Die Klasse |scrlettr.cls| wurde dann jedoch als
% |scrlettr.dtx| abgetrennt. Inzwischen ist die neue Brief-Klasse
% |scrlttr2.cls| wieder enthalten.
%
% Zum Gesamtpaket geh"oren weitere Dateien.
% Eine Aufz"ahlung finden Sie in der Installationsanleitung
% |liesmich.txt|. Dort ist auch angegeben, wie die classes, packages
% und andere Dateien aus den |*.dtx|-Dateien extrahiert werden.
%
% Das \textsf{KOMA-Script} Paket entspricht dem Stand nach den
% Standard \LaTeX Document Classes Version 1.3q [1995/12/20].
%
% \StopEventually{\PrintIndex\PrintChanges}
%
% \part{Implementierung}
% \changes{v2.9}{2002/06/21}{Release}
%
% \section{Generell}
%\iffalse
%    \begin{macrocode}
%<*beta>
%<*package>
\PackageWarningNoLine{%
%<typearea>  typearea%
%<scrlfile>  scrlfile%
  }
%</package>
%<*class>
\ClassWarningNoLine{%
%<scrbook>  scrbook%
%<scrreprt>  scrreprt%
%<scrartcl>  scrartcl%
%<scrlettr>  scrlttr2%
  }
%</class>
%<*lco>
\GenericWarning{(%
%<DIN>  DIN%
%<DINmoretext> DINmtext%
%<SN>  SN%
%<SNold>  SNold%
%<SwissLeft>  SNleft%
%<KOMAold>  KOMAold%
  .lco)\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces}{%
  Letter-class-option
%<DIN>  DIN
%<DINmoretext> DINmtext
%<SN>  SN
%<SNold>  SNold
%<SwissLeft>  SNleft
%<KOMAold>  KOMAold
  Warning:\space
%</lco>
%<class|package>  {%
%<*class|package|lco>
  THIS IS A BETA VERSION!\MessageBreak
  YOU SHOULD NOT USE THIS VERSION!\MessageBreak
  YOU SHOULD INSTALL THE RELEASE FROM CTAN\MessageBreak
  AND USE THAT INSTEAD OF THIS BETA VERSION%
%<lco>  \@gobble%
}
%</class|package|lco>
%</beta>
%    \end{macrocode}
%\fi
%
%
% \section{"`scrlfile"'-package}
%
% Dieser Abschnitt ist englisch dokumentiert. Ich bitte daf"ur um
% Verst"andnis.
%
% \subsection{Let's start}
%
%    \begin{macrocode}
%<*scrlfile>
\typeout{Package scrlfile, \csname ver@scrlfile.sty\endcsname%
  ^^J\@spaces\@spaces\@spaces\@spaces\space\space 
  Copyright (C) Markus Kohm^^J}
%
%
% \subsection{Options}
%
% Currently there are no options.
%    \begin{macrocode}
\ExecuteOptions{}
\ProcessOptions\relax
%    \end{macrocode}
%
%
% \subsection{The macros}
%
%  \begin{macro}{\InputIfFileExists}
% \LaTeX{} uses this macro for loading files with
% \cs{input}\marg{filename}, \cs{include}, \cs{LoadClass},
% \cs{LoadClassWithOptions}, \cs{documentclass}, \cs{documentstyle},
% \cs{RequirePackage}, \cs{usepackage}. Only
% \cs{input}~\meta{filename} loads \meta{filename} without using
% \cs{InputIfFileExists}.
%
% Because of this, it's very easy to add stuff before and after
% loading a file. We simply change this macro and add to
% macros\,---\,one before loading the file and one after loading the
% file. But before we redefine the macro, we test, if the macro was
% defined like we expected. \LaTeX{} will warn, if not.
%    \begin{macrocode}
\CheckCommand{\InputIfFileExists}[2]{%
  \IfFileExists{#1}%
    {#2\@addtofilelist{#1}\@@input \@filef@und}}
%    \end{macrocode}
% Now we can redefine the macro like described above:
%    \begin{macrocode}
\renewcommand{\InputIfFileExists}[2]{%
  \IfFileExists{#1}{%
    \scr@load@hook{before}{#1}%
    #2\@addtofilelist{#1}\@@input \@filef@und
    \scr@load@hook{after}{#1}}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\scr@load@hook}
% This macro simply calls a load-file-hook, either the \emph{before}
% or the \emph{after} one, if the hook exists. After calling the hook
% it will be deleted. First argument is the type of hook
% (\meta{before} or \meta{after}), second argument is a filename. 
%    \begin{macrocode}
\newcommand*{\scr@load@hook}[2]{%
  \@ifundefined{#2-@#1}{}{%
    \@nameuse{#2-@#1}%
    \expandafter\let\csname #2-@#1\endcsname=\relax}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\scr@set@load@hook}
% This command adds stuff to a load-file-hook, either the
% \emph{before} or the \emph{after} one. First argument is the type of
% hook (\meta{before} or \meta{after}), second is a filename. There's
% a third argument not parsed by the macro itself but
% \cs{g@addto@macro}. This third argument is the stuff, which will be
% added to the hook. Because of using \cs{g@addto@macro} the hook must
% be defined. So we define it, if it isn't.
%    \begin{macrocode}
\newcommand*{\scr@set@load@hook}[2]{%
  \@ifundefined{#2-@#1}{\@namedef{#2-@#1}{}}{}%
  \expandafter\g@addto@macro\csname #2-@#1\endcsname}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\BeforeFile}
%  \begin{macro}{\AfterFile}
%  \begin{macro}{\BeforeClass}
%  \begin{macro}{\AfterClass}
%    \changes{v2.9f}{2002/08/29}{Sternvariante funktioniert jetzt}
%  \begin{macro}{\@AfterClass}
%  \begin{macro}{\@sAfterClass}
%  \begin{macro}{\BeforePackage}
%  \begin{macro}{\AfterPackage}
%    \changes{v2.9f}{2002/08/29}{Sternvariante funktioniert jetzt}
%  \begin{macro}{\@AfterPAckage}
%  \begin{macro}{\@sAfterPackage}
% These macros add stuff to a load-file-hook of a file, class or
% package. First argument is the name of the file (with extension),
% class (without extension) or package (without extension). There's a
% second argument parsed by wether the macros themself nor
% \cs{scr@set@load@hook} but \cs{g@addto@macro}. See
% \cs{scr@set@load@hook} for more information. The star-forms
% \cs{AfterClass*} and \cs{AfterPackage*} does the action immediate,
% if the class or package was already loaded.
%    \begin{macrocode}
\newcommand*{\BeforeFile}{\scr@set@load@hook{before}}
\newcommand*{\AfterFile}{\scr@set@load@hook{after}}
\newcommand*{\BeforeClass}[1]{%
  \scr@set@load@hook{before}{#1.\@clsextension}}
\newcommand*{\AfterClass}{%
  \@ifstar {\@sAfterClass}{\@AfterClass}}
\newcommand*{\@AfterClass}[1]{%
  \scr@set@load@hook{after}{#1.\@clsextension}}
\newcommand*{\@sAfterClass}[1]{%
  \begingroup
    \@ifclassloaded{#1}{%
      \aftergroup\@secondoftwo
    }{%
      \aftergroup\@AfterClass
    }%
  \endgroup
  {#1}%
}
\newcommand*{\BeforePackage}[1]{%
  \scr@set@load@hook{before}{#1.\@pkgextension}}
\newcommand*{\AfterPackage}{%
  \@ifstar {\@sAfterPackage}{\@AfterPackage}}
\newcommand*{\@AfterPackage}[1]{%
  \scr@set@load@hook{after}{#1.\@pkgextension}}
\newcommand*{\@sAfterPackage}[1]{%
  \begingroup
    \@ifpackageloaded{#1}{%
      \aftergroup\@secondoftwo
    }{%
      \aftergroup\@AfterPackage
    }%
  \endgroup
  {#1}%
}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% That's all
%    \begin{macrocode}
%</scrlfile>
%    \end{macrocode}
%
%
% \section{"`typearea"'-package}
%
%    \begin{macrocode}
%<*typearea>
%    \end{macrocode}
% \changes{v2.0e}{1994/07/07}{Auf \LaTeXe umgestellt}
% \changes{v2.0e}{1994/09/02}{\cs{ProvideClass} durch
%                             \cs{ProvidePackage} ersetzt}
% \changes{v2.0e}{1994/09/02}{\cs{endinput} angeh"angt}
% \changes{v2.1a}{1994/10/29}{Auf doc/docstrip umgestellt}
% \changes{v2.1b}{1994/12/31}{Letzte Version f"ur 1994 fertiggestellt}
% Zuerst einmal zeigen, was es ist:
%    \begin{macrocode}
\typeout{Package typearea, \csname ver@typearea.sty\endcsname%
  ^^J\@spaces\@spaces\@spaces\@spaces\space\space 
  Copyright (C) Frank Neukam, 1992-1994%
  ^^J\@spaces\@spaces\@spaces\@spaces\space\space
  Copyright (C) Markus Kohm, 1994-2002^^J}
%    \end{macrocode}
%
% \subsection{Befehle vor den Optionen}
%
%  \begin{macro}{\SetDIVList}
%  \changes{v2.1a}{1994/10/28}{neu eingef"uhrt.}
%  \changes{v2.6}{2000/01/04}{\cs{ta@divlist} enth"alt Werte f"ur
%                             Schriftgr"o"sen ab 1pt.}
% Der Befehl |\SetDIVList| tut nichts weiter als die innere Variable
% f"ur die schriftgr"o"senabh"angige \emph{DIV}-Liste |\ta@divlist| neu
% zu definieren. Dabei k"onnen \emph{DIV}-Werte f"ur Gr"o"sen ab 10\,pt
% gesetzt werden. 
%    \begin{macrocode}
\newcommand*\SetDIVList[1]{\def\ta@divlist{{}{}{}{}{}{}{}{}{}#1}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\SetXDIVList}
%  \changes{v2.6}{2000/01/04}{neu eingef"uhrt.}
% Da mit \cs{SetDIVList} aus Kompatibilit"atsgr"unden nur Werte f"ur
% Gr"o"sen ab 10\,pt gesetzt werden k"onnen, wird f"ur Werte ab 1\,pt
% ein neuer Befehl ben"otigt.
%    \begin{macrocode}
\newcommand*\SetXDIVList[1]{\def\ta@divlist{#1}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\ta@bcor}
%  \changes{v2.2a}{1995/01/25}{Definition der Dimension wegen der
%                              Option \texttt{BCOR} vorgezogen}
%  \changes{v2.7g}{2001/04/17}{\cs{newlength} and Stelle von
%                              \cs{newdimen} f"ur die Definition
%                              verwendet}
% Dimension f"ur die Bindekorrektur reservieren. Diese wird implizit
% zu 0pt initialisiert.
%    \begin{macrocode}
\newlength{\ta@bcor}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\ifnumber}
% Dieses Makro testet, ob ein "ubergebener Parameter eine positive,
% ganze Zahl ist. Ist dies der Fall, wird der zweite Parameter
% ausgef"uhrt, sonst der dritte.
%    \begin{macrocode}
\providecommand\ifnumber[3]{
 \begingroup\@tempswafalse\let\scr@next\test@number
 \expandafter\scr@next#1\scr@next
 \if@tempswa\endgroup#2\else\endgroup#3\fi
}
%    \end{macrocode}
% F"ur den eigentlichen Test wird der erste Parameter Token f"ur Token
% gescannt und beurteilt.
%  \begin{macro}{\test@number}
%    \begin{macrocode}
\newcommand*{\test@number}[1]{
 \ifx \scr@next#1
  \let\scr@next\relax
 \else
%    \end{macrocode}
% Dabei wird f"ur einen schnelleren Vergleich die Tatsache genutzt, da"s
% Ziffernzeichen immer im selben durchg"angigen Bereich liegen
%    \begin{macrocode}
  \@tempcnta=\expandafter\expandafter\expandafter\number
  \expandafter`#1\relax
  \ifnum \@tempcnta>47\relax
   \ifnum \@tempcnta<58\relax
    \@tempswatrue
   \else\@tempswafalse\fi
  \else\@tempswafalse\fi
%    \end{macrocode}
% Das zeichenweise scannen und parsen kann nat"urlich nicht einfach
% abgebrochen werden. Stattdessen ist der Parameterrest noch zu
%  entfernen.
%    \begin{macrocode}
  \if@tempswa\else\let\scr@next\gobble@till@next\fi\fi
 \scr@next}
%    \end{macrocode}
%  \begin{macro}{\gobble@till@next}
% Das geschieht mit einem einzigen "`Leermacro"'.
%    \begin{macrocode}
\newcommand*{\gobble@till@next}{}
\def\gobble@till@next#1\scr@next{}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\ifdimen}
% Dieses Makro testet, ob ein "ubergebener Parameter eine Dimension
% ist und f"uhrt in Abh"angigkeit davon den zweiten oder dritten
% Parameter aus.
%    \begin{macrocode}
\newcommand{\ifdimen}[3]{
 \begingroup\@tempswatrue\let\scr@next\test@posdimen
 \expandafter\test@dimen#1\scr@next
 \if@tempswa\endgroup#2\else\endgroup#3\fi
}
%    \end{macrocode}
%  \begin{macro}{\test@dimen}
% Als erste mu"s ein Vorzeichen entfernt werden.
%    \begin{macrocode}
\newcommand*{\test@dimen}[1]{\ifx -#1\else\ifx +#1\else
   \def\scr@next{\let\scr@next\test@posdimen\scr@next#1}\fi\fi\scr@next}
%    \end{macrocode}
%  \begin{macro}{\test@posdimen}
% Dann mu"s getestet werden, ob es sich beim Rest um eine Dimension
% handelt. Dabei werden der einfachheit halber mehrere Dezimalkomma
% und -punkte erlaubt. Nat"urlich k"onnte man es auch wirklich richtig
% machen, aber das w"are nochmal etwas aufwendiger. Ist das wirklich
% notwendig? 
%    \begin{macrocode}
\newcommand*{\test@posdimen}[1]{
 \ifx \scr@next#1
  \@tempswafalse\let\scr@next\relax
 \else
  \if .#1\else\if ,#1\else
    \@tempcnta=%
     \expandafter\expandafter\expandafter\number\expandafter`#1\relax
    \ifnum \@tempcnta>47\relax
     \ifnum \@tempcnta<58\relax
     \else\def\scr@next{\test@dimunt#1}\fi
    \else\def\scr@next{\test@dimunt#1}\fi\fi\fi\fi
 \scr@next}
%    \end{macrocode}
%  \begin{macro}{\testdimunt}
%  \begin{macro}{\test@trueunt}
% Au"ser einer Gleitkomma- bzw. Gleitpunktzahl mu"s auch noch die Einheit
% behandelt werden. Dabei sind sowohl die neun Standardeinheiten als auch
% deren "`true"'-Variante zu ber"ucksichtigen. Deshalb wird zuerst ein
% eventuelles "`\texttt{true}"' weggeworfen.
%    \begin{macrocode}
\newcommand*{\test@dimunt}{}
\def\test@dimunt#1\scr@next{%
  \expandafter\test@trueunt#1truetrue\test@trueunt}
\newcommand*{\test@trueunt}{}
\def\test@trueunt#1true#2true#3\test@trueunt{
 \edef\@tempa{#1}
 \ifx\@tempa\@empty\test@@ifdimunt{#2}\else\test@@ifdimunt{#1}\fi}
%    \end{macrocode}
%  \begin{macro}{\test@@ifdimunt}
% Anschlie"send wird dann getestet, ob es sich um eine der neun "ublichen
% Einheiten handelt.
%    \begin{macrocode}
\newcommand*\test@@ifdimunt[1]{
 \@tempswafalse
 \ifstr{#1}{pt}{\@tempswatrue}{}
 \ifstr{#1}{pc}{\@tempswatrue}{}
 \ifstr{#1}{in}{\@tempswatrue}{}
 \ifstr{#1}{bp}{\@tempswatrue}{}
 \ifstr{#1}{cm}{\@tempswatrue}{}
 \ifstr{#1}{mm}{\@tempswatrue}{}
 \ifstr{#1}{dd}{\@tempswatrue}{}
 \ifstr{#1}{cc}{\@tempswatrue}{}
 \ifstr{#1}{sp}{\@tempswatrue}{}}
%    \end{macrocode}
%  \begin{macro}{\ifstr}
% Dieses Macro wird oben ben"otigt und vergleicht zwei
% Tokenfolgen.
%    \begin{macrocode}
\newcommand\ifstr[4]{
 \begingroup\edef\@tempa{#1}\edef\@tempb{#2}
 \ifx\@tempa\@tempb\endgroup#3\else\endgroup#4\fi}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\@BCOR}
%  \begin{macro}{\@@BCOR}
% \changes{v2.5}{1997/06/17}{Einzelzeichenscanner durch Mustererkennung
%                            ersetzt.}
% Das Makro |\@BCOR| wird sp"ater ben"otigt, um die Option
% |BCOR|\emph{BCOR} zu erkennen. Die Option wird "uber ihr Muster
% erkannt. 
%    \begin{macrocode}
\newcommand*{\@BCOR}{\expandafter\@@BCOR\CurrentOption BCORBCOR\@@BCOR}
\newcommand*{\@@BCOR}{}
\def\@@BCOR #1BCOR#2BCOR#3\@@BCOR{
%    \end{macrocode}
% Handelt es sich um die Option |BCOR|, so ist der erste Parameter leer.
%    \begin{macrocode}
 \edef\@tempa{#1}\ifx\@tempa\@empty
%    \end{macrocode}
% Au"serdem ist der dritte Parameter dann |BCOR|.
%    \begin{macrocode}
  \edef\@tempa{#3}\def\@tempb{BCOR}\ifx\@tempa\@tempb
%    \end{macrocode}
% Der zweite Parameter sollte dann die Gr"o"se enthalten. Ist dies
% nicht der Fall, wird ein Fehler gemeldet (Fehlerzeile ist dann
% |\ProcessOptions|).
%    \begin{macrocode}
   \ifdimen{#2}{\setlength{\ta@bcor}{#2}}{\ta@opt@err}
%    \end{macrocode}
% In allen anderen F"allen ist es nicht diese Option, dann wird ein Fehler
% ausgegeben. Stattdessen k"onnte hier auch auf weitere Optionen getestet
% werden.
%    \begin{macrocode}
  \else\ta@opt@err\fi
 \else\ta@opt@err\fi}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\ta@div}
%  \changes{v2.2a}{1995/01/25}{Definition wegen der Option \texttt{DIV}
%                              vorgezogen}
% Z"ahler f"ur \emph{DIV} reservieren. Dieser wird implizit zu
% 0 initialisiert.
%    \begin{macrocode}
\newcount\ta@div
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@DIV}
%  \begin{macro}{\@@DIV}
% \changes{v2.5}{1997/06/17}{Einzelzeichenscanner durch Mustererkennung
%                            ersetzt.}
% Die grunds"atzliche Funktion ist die gleiche wie bei |\@BCOR|, |\@@BCOR|.
%    \begin{macrocode}
\newcommand*{\@DIV}{\expandafter\@@DIV\CurrentOption DIVDIV\@@DIV}
\newcommand*{\@@DIV}{}
\def\@@DIV #1DIV#2DIV#3\@@DIV{
 \edef\@tempa{#1}\ifx\@tempa\@empty
  \edef\@tempa{#3}\def\@tempb{DIV}\ifx\@tempa\@tempb
   \ifnumber{#2}{\ta@div=#2\relax}{\ta@opt@err}
  \else\ta@opt@err\fi
%    \end{macrocode}
% Der Unterschied liegt darin, da"s bei einem Fehlschlag der
% Mustererkennung kein Fehler vorliegt, sondern u.\,U. noch auf |BCOR|
% getestet werden mu"s.
%    \begin{macrocode}
 \else\@BCOR\fi}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\@headlines}
%  \begin{macro}{\@@headlines}
% \changes{v2.7g}{2001/04/17}{Neue Mustererkennung f"ur die Anzahl der
%                             Kopfzeilen}
% Das Macro \cs{@headlines} wird ben"otigt, um die Option
% \texttt{headlines} zu erkennen.
%    \begin{macrocode}
\newcommand{\@headlines}{%
  \expandafter\@@headlines\CurrentOption headlines\@@headlines}
\newcommand*{\@@headlines}{}
\def\@@headlines #1headlines#2\@@headlines{
  \edef\@tempa{#2}\edef\@tempb{headlines}\ifx\@tempa\@tempb
    \setlength{\@tempdima}{#1\baselineskip}
    \def\ta@hh{#1\baselineskip}
  \else\@DIV\fi}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%
%  \begin{macro}{\x@paper}
%  \begin{macro}{\x@@paper}
% \changes{v2.5}{1997/06/17}{Neue Mustererkennung f"ur die Papiergr"o"se.}
% Diese Makros werden ebenfalls sp"ater ben"otigt, wenn die Papiergr"o"se
% festgelegt wird.
%
%  \begin{macro}{\isopaper}
% \changes{v2.5}{1997/06/17}{Neuer Befehl zur Berechnung unterschiedlicher
%                            ISO/DIN-Papierformate.}
% Da das Makro |\isopaper| in der Mustererkennung f"ur die Papiergr"o"se
% ben"otigt wird, wurde dieses Makro ebenfalls vorgezogen.
%    \begin{macrocode}
\newcommand\isopaper[2][a]{%
%    \end{macrocode}
% Das Makro kennt zwei Parameter, von denen der erste und optionale die
% Grundgr"o"se angibt. Die Angabe erfolgt "uber einen Kleinbuchstaben.
% M"oglich ist
% \begin{description}
% \item[a] ISO/DIN-A-Format
% \item[b] ISO/DIN-B-Format
% \item[c] ISO/DIN-C-Format
% \end{description}
% Der zweite Paremeter gibt dann die Skalierung an.
%
% Als Grundgr"o"se wird jeweils die 0-Gr"o"se eingesetzt.
%    \begin{macrocode}
 \ifx a#1
  \setlength{\paperwidth}{841sp}\setlength{\paperheight}{1189sp}
 \else\ifx b#1
  \setlength{\paperwidth}{1000sp}\setlength{\paperheight}{1414sp}
 \else\ifx c#1
  \setlength{\paperwidth}{917sp}\setlength{\paperheight}{1297sp}
 \else\ifx d#1
  \setlength{\paperwidth}{771sp}\setlength{\paperheight}{1090sp}
%    \end{macrocode}
% Wurde ein anderer Buchstabe angegeben, ist ein Fehler auszugeben.
% \changes{v2.5a}{1997/06/22}{Ausgabe der gew"ahlten Papiergr"o"se
%                             entfernt} 
%    \begin{macrocode}
 \else
  \PackageError{typearea}
   {Unknown ISO/DIN-papersize-letter #1}
   {There are only four defined paperscalings:\MessageBreak
    a = ISO/DIN-A, b = ISO/DIN-B, c = ISO/DIN-C, d = ISO/DIN-D\MessageBreak
    Read KOMA-Script-documentation for further information.}
  \setlength{\paperwidth}{841sp}\setlength{\paperheight}{1189sp}
 \fi\fi\fi\fi
%    \end{macrocode}
% Es d"urfte aufgefallen sein, da"s bei der Gr"o"senfestlegung statt
% der Einheit "`mm"' die Einheit "`sp"' geschrieben wurde. Die Ma"se
% sind also um ein Vielfaches zu klein und m"ussen sp"ater noch mit
% 186468 multiplitziert werden, um auf Millimeter zu kommen. Dieser
% Trick ist jedoch notwendig, weil die Norm vorschreibt, da"s bei der
% nun folgenden $n$-fachen Halbierung der Seiten ($n =
% \texttt{Skalierung} + 1$) jeweils auf ganze Millimeter abgerundet
% werden mu"s. 
%    \begin{macrocode}
 \@tempcnta=#2\relax
 \@whilenum\@tempcnta>0
  \do{\setlength{\@tempdima}{\paperwidth}
      \setlength{\paperwidth}{.5\paperheight}
      \setlength{\paperheight}{\@tempdima}
      \advance\@tempcnta by\m@ne}
%    \end{macrocode}
% Zum Schlu"s mu"s nun die genannte Multiplitkation erfolgen. Da
% "`mm"' kein ganzzahliges Vielfaches von "`sp"' ist, beinhaltet diese
% Multiplikation eigentlich einen Fehler und eine Abweichung von der
% Norm. Da jedoch "`sp"' die Rechengenauigkeit von {\TeX} darstellt,
% stellt auch die Angabe eines ganzzahligen Millimeterwertes bereits
% einen solchen Fehler dar. 
%    \begin{macrocode}
 \multiply\paperwidth by186468\relax
 \multiply\paperheight by186468\relax}
%    \end{macrocode}
%  \end{macro}
%
% Zur"uck zur Mustererkennung. Diese ist tats"achlich etwas einfacher als
% die in den beiden F"allen zuvor.
%    \begin{macrocode}
\newcommand*{\x@paper}{\expandafter\x@@paper\CurrentOption paper\x@@paper}
\newcommand*{\x@@paper}{}
\def\x@@paper #1#2paper#3\x@@paper{
 \edef\@tempa{paper}\edef\@tempb{#3}\ifx\@tempa\@tempb
  \ifnumber{#2}{
   \ifx a#1\isopaper[a]{#2}
   \else\ifx b#1\isopaper[b]{#2}
   \else\ifx c#1\isopaper[c]{#2}
   \else\ifx d#1\isopaper[d]{#2}
   \else\ta@opt@err\fi\fi\fi\fi
  }{\ta@opt@err}
 \else\@headlines\fi}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\ta@opt@err}
% Falls die zu"atzliche Option nicht \texttt{BCOR}, \texttt{DIV} oder eine
% bekannte Papiergr"o"se ist, ist eine Fehlermeldung f"allig.
%    \begin{macrocode}
\newcommand*{\ta@opt@err}{
 \PackageError{typearea}
              {Unknown option \CurrentOption}
              {You've used an unknown option.\MessageBreak
              Read the KOMA-Script-documentation for further
              information.}}
%    \end{macrocode}
%  \end{macro}
%
%
% \subsection{Optionen}
%
% \subsubsection{Kopf-, Fu"s-, Rand- und Textbereich}
%
%  \begin{option}{headinclude}
%  \begin{option}{headexclude}
% Diese Optionen bestimmen, ob der Seitenkopf bereits zum Textbereich
% geh"ort. Der Zustand selbst wird in einem Schalter gespeichert.
%  \begin{macro}{\if@hincl}
%  \begin{macro}{\@hincltrue}
%  \begin{macro}{\@hinclfalse}
%    \begin{macrocode}
\newif\if@hincl
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\DeclareOption{headinclude}{\@hincltrue}
\DeclareOption{headexclude}{\@hinclfalse}
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
%  \begin{option}{footinclude}
%  \begin{option}{footexclude}
% Diese Optionen bestimmen, ob die Fu"szeilen noch zum Textbereich
% geh"oren. Der Zustand selbst wird in einem Schalter gespeichert.
%  \begin{macro}{\if@hincl}
%  \begin{macro}{\@hincltrue}
%  \begin{macro}{\@hinclfalse}
%    \begin{macrocode}
\newif\if@fincl
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\DeclareOption{footinclude}{\@fincltrue}
\DeclareOption{footexclude}{\@finclfalse}
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
%  \begin{option}{mpinclude}
%    \changes{v2.8q}{2002/03/28}{Neue Option}
%  \begin{option}{mpexclude}
%    \changes{v2.8q}{2002/03/28}{Neue Option}
% Es gibt Dokumente mit sehr ausf"uhrlichen Randnotizen, bei denen die
% Randnotizen bei der Satzspiegelberechnung in den Satzspiegel
% eingerechnet werden sollten. Diese Optionen bestimmen, ob dies der
% Fall ist.
%  \begin{macro}{\if@mincl}
%  \begin{macro}{\@mincltrue}
%  \begin{macro}{\@minclfalse}
% Der Zustand wird in einem Schlater gespeichert. \textbf{Achtung:}
% Bei Verwendung dieser Option m"ussen gr"ossere DIV-Werte verwendet
% werden. Siehe dazu weiter unten.
%    \begin{macrocode}
\@ifundefined{mincltrue}{\newif\if@mincl}{}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\DeclareOption{mpinclude}{\@mincltrue}
\DeclareOption{mpexclude}{\@minclfalse}
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
% \subsubsection{Papiergr"o"sen-Optionen}
%
%  \begin{option}{dvips}
%  \changes{v2.7g}{2001/04/17}{Neu}
%  \changes{v2.8m}{2001/09/04}{\cs{AtBeginDocument} eingef"ugt}
% Diese Option sorgt daf"ur, dass die Seitengr"o"se als \cs{special}
% f"ur \texttt{dvips} in die DVI-Datei geschrieben wird. Da
% \verb|\AtBeginDvi| im Gegensatz zu \verb|\AtBeginDocument| das
% Argument sofort expandiert, das special aber erst nach dem Laden von
% \texttt{typearea} ausgef"uhert werden darf, wird \verb|\AtBeginDvi|
% einfach innerhalb von \verb|\AtBeginDocument| aufgerufen.
%    \begin{macrocode}
\DeclareOption{dvips}{\AtBeginDocument{\AtBeginDvi{%
      \special{papersize=\the\paperwidth,\the\paperheight}}}}
%    \end{macrocode}
%  \end{option}
%
%  \begin{option}{pdftex}
%  \changes{v2.7g}{2001/04/17}{Neu}
% Diese Option sorgt daf"ur, dass die Seitengr"o"se mit {pdf\TeX}
% ebenfalls in der PDF-Datei landet.
%    \begin{macrocode}
\DeclareOption{pdftex}{\AtBeginDocument{%
    \pdfpagewidth=\paperwidth \pdfpageheight=\paperheight}}
%    \end{macrocode}
%  \end{option}
%
%  \begin{macro}{\ifpdfoutput}
% \changes{v2.7g}{2001/04/17}{Neu}
% \changes{v2.8q}{2001/10/19}{\cs{pdfoutput} wird nicht mehr zu
%                             \cs{relax}, wenn zuvor undefiniert}
% \changes{v2.8q}{2001/10/19}{darf bereits definiert sein}
% \changes{v2.8q}{2001/10/19}{Verwendung von \cs{scr@ifpdfoutput}}
%  \begin{macro}{\scr@ifpdfoutput}
% \changes{v2.8q}{2001/10/19}{Neu zur internen Verwendung}
% \changes{v2.8q}{2001/11/13}{funktioniert}
% ifthenelse-Konstrukt, um abh"angig davon, ob als pdf ausgegeben wird
% oder nicht, Befehle auszuf"uhren. Dieses Macro wird f"ur die
% Deklaration der Option \texttt{pagesize} ben"otigt.
%    \begin{macrocode}
\newcommand{\scr@ifpdfoutput}[2]{%
  \begingroup\@ifundefined{pdfoutput}{\endgroup #2}{\endgroup%
    \ifnum\pdfoutput>0\relax #1\else #2\fi}}%
\@ifundefined{ifpdfoutput}{%
  \let\ifpdfoutput\scr@ifpdfoutput%
  }{%
  \PackageInfo{typearea}{%
    \string\ifpdfoutput\space already defined.\MessageBreak
    If \string\ifpdfoutput\space does not behave like\MessageBreak
    is is described at the KOMA-Script manual, try to\MessageBeak
    load `typearea.sty' earlier or find out at which\MessageBreak
    package or class \string\ifpdfoutput\space was defined.}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{option}{pagesize}
%  \changes{v2.7g}{2001/04/17}{Neu}
%  \changes{v2.8q}{2001/10/19}{\cs{scr@ifpdfoutput} statt
%                              \cs{ifpdfoutput}} 
% Diese Option wiederum arbeitet je nachdem, ob eine PDF- oder eine
% DVI-Ausgabe erfolgt, wie \texttt{dvips} oder \texttt{pdftex}.
%    \begin{macrocode}
\DeclareOption{pagesize}{\AtBeginDocument{%
    \scr@ifpdfoutput
    {\pdfpagewidth=\paperwidth\pdfpageheight=\paperheight}
    {\AtBeginDvi{\special{papersize=\the\paperwidth,\the\paperheight}}}}}
%    \end{macrocode}
%  \end{option}
%
%
% Diese Optionen bestimmen die Papiergr"o"se. Aus der Papiergr"o"se wird
% sp"ater mit |\typearea| der Seitenspiegel berechnet. Dar"uber hinaus
% w"are das eine passende Gelegenheit |\SetDIVList| anzuwenden, darauf
% wird aber verzichtet (da die Verwendung der Liste ohnehin als
% veraltete Methode betrachtet werden kann.
%
%  \begin{option}{a4paper}
% \changes{v2.5}{1997/06/17}{explizite Default-Option als Sonderfall.}
%    \begin{macrocode}
\DeclareOption{a4paper}{\isopaper{4}}
%    \end{macrocode}
%  \begin{option}{a5paper}
% \changes{v2.5}{1997/06/17}{zur Verwendung als globale Option mit den
%                            Standard-Classes als Sonderfall.}
%    \begin{macrocode}
\DeclareOption{a5paper}{\isopaper{5}}
%    \end{macrocode}
%  \begin{option}{b5paper}
% \changes{v2.5}{1997/06/17}{keine explizite Option mehr.}
% ISO/DIN-A-, -B-, -C- und D-Formate werden per Mustererkennung
% ermittelt. Dies erfolgt bei den Satzspiegeloptionen. Die Berechnung
% selbst ist weiter oben zu finden. Die Optionen |a4paper| und
% |a5paper| wurden lediglich als Sonderfall explizit definiert. Dies
% ist notwendig, damit die |typearea| mit den Standard-Classes besser
% zusammenarbeitet. W"aren die beiden Optionen nicht definiert,
% w"urden die "ublichen Papierformatoptionen nicht in gewohnter Weise
% als gobale Optionen funktionieren. Bei den un"ublichen "ubrigen
% Formaten kann verlangt werden, da"s sie beim Package explizit
% angegeben werden.
%  \end{option}
%  \end{option}
%  \end{option}
%  \begin{option}{letterpaper}
% ISO letter:
%    \begin{macrocode}
\DeclareOption{letterpaper}
   {\setlength\paperheight {11in}%
    \setlength\paperwidth  {8.5in}}
%    \end{macrocode}
%  \end{option}
%  \begin{option}{legalpaper}
% ISO legal:
%    \begin{macrocode}
\DeclareOption{legalpaper}
   {\setlength\paperheight {14in}%
    \setlength\paperwidth  {8.5in}}
%    \end{macrocode}
%  \end{option}
%  \begin{option}{executivepaper}
% executive:
%    \begin{macrocode}
\DeclareOption{executivepaper}
   {\setlength\paperheight {10.5in}%
    \setlength\paperwidth  {7.25in}}
%    \end{macrocode}
%  \end{option}
%
% \subsubsection{landscape}
%
%  \begin{option}{landscape}
% \changes{v2.5}{1997/06/17}{Vertauschung verz"ogert}
% Mit der Option |landscape| werden |\paperheight| und |\paperwidth|
% vertauscht. Damit wird das entsprechende Querformat erreicht. Leider
% kann das nicht sofort erfolgen, weil die Papiergr"o"se u.\,U. noch
% nicht festliegt. Au"serdem ben"otigt man noch einen entsprechenden
% Drucker oder einen |DVI|-Treiber, der mit einer speziellen Option
% eine um 90\,Grad gedrehte Ausgabe erstellen kann.
%  \begin{macro}{\if@landscape}
%  \begin{macro}{\@landscapetrue}
%  \begin{macro}{\@landscapefalse}
%    \begin{macrocode}
\newif\if@landscape
\DeclareOption{landscape}{\@landscapetrue}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%
% \subsubsection{Satzspiegeloptionen}
%
%  \begin{option}{BCOR}
%  \changes{v2.2a}{1995/01/25}{nun als Option verf"ugbar}
%  \changes{v2.2c}{1995/05/25}{nicht mehr im Kompatibilit"atsmodus}
%  \begin{option}{DIV}
%  \changes{v2.2a}{1995/01/25}{nun als Option verf"ugbar}
%  \changes{v2.2c}{1995/05/25}{nicht mehr im Kompatibilit"atsmodus}
% F"ur die neu hinzugekommenen Optionen |BCOR| und |DIV| mu"s eine
% Sonderbehandlung durchgef"uhrt werden. Diese Sonderbehandlung mu"s
% die Optionen scannen und Fehler zur"uckweisen. Daf"ur werden die
% oben definierten Befehle |\@...BCOR| und |\@...DIV| sowie
% |\ta@TraceError| verwendet. Damit die Optionen zeichenweise
% gescannt werden k"onnen, wird die Expansion von |\CurrentOption|
% erzwungen.
%  \begin{option}{DIVcalc}
% Zuvor wird jedoch noch die Sonderbehandlung f"ur |DIVcalc| eingebaut.
% Vor Version 2.8q wurde das durch eine einfache Option realisiert,
% "uber die die Default-DIV-Liste so manipuliert wird, da"s
% automatisch nach einem guten DIV-Wert gesucht wird:
% \begin{verbatim}
% \providecommand\ta@divlist{}\def\ta@divlistelse{1}
% \end{verbatim}
% Neuerdings wird stattdessen der Z"ahler |\ta@div| gesetzt.
% \changes{v2.4g}{1996/11/04}{Neue Option \texttt{DIVcalc}}
% \changes{v2.8q}{2001/11/06}{die Option ver"andert nicht mehr die
%   \texttt{DIV}-Liste}
%    \begin{macrocode}
\DeclareOption{DIVcalc}{\ta@div=1\relax}
%    \end{macrocode}
%  \end{option}
%  \begin{option}{DIVclassic}
% Alternativ gibt es auch noch eine Sonderbehandlung fuer |DIVclassic|.
% Auch dabei wurde fr"uher die Default-DIV-Liste benutzt:
% \begin{verbatim}
% \providecommand\ta@divlist{}\def\ta@divlistelse{3}
% \end{verbatim}
% Gesucht wird dabei nach einem DIV-Wert, mit dem der Satzspiegel der
% Kreismethode m"oglichst gut erreicht wird.
% \changes{v2.4n}{1997/05/28}{Neue Option \texttt{DIVclassic}.}
%    \begin{macrocode}
\DeclareOption{DIVclassic}{\ta@div=3\relax}
%    \end{macrocode}
%  \end{option}
% Ansonsten also die Behandlung f"ur |BCOR|\emph{Wert},
% |DIV|\emph{Wert} und |a|\emph{Wert}|paper|, |b|\emph{Wert}|paper|,
% |c|\emph{Wert}|paper| sowie |d|\emph{Wert}|paper|.
%    \begin{macrocode}
\DeclareOption*{\x@paper}
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
% \subsection{Konfigurationsdatei}
%
% \changes{v2.0e}{1994/10/28}{Konfigurationsdatei
%                             \texttt{typearea.cfg} zur Definition
%                             weiterer Optionen bzw. Papiergr"o"sen}
% Es ist m"oglich in einer Datei |typearea.cfg| z.B. weitere Optionen
% zu definieren, die dann automatisch eingeladen werden.
%    \begin{macrocode}
\InputIfFileExists{typearea.cfg}
           {\typeout{***************************************^^J%
                     * Local config file typearea.cfg used^^J%
                     ***************************************}}
           {}
%    \end{macrocode}
%
% \subsection{Standardeinstellungen}
% Als Standardoptionen sind |headexclude|, |footexclude| und die
% Papiergr"o"se |a4paper| eingestellt. Diese Optionen k"onnen
% selbstverst"andlich durch explizite Angaben "uberladen werden.
% \changes{v2.3h}{1995/01/19}{\cs{relax} nach \cs{ProcessOptions}
%                             erg"anzt.}
%    \begin{macrocode}
\ExecuteOptions{headexclude,footexclude,a4paper}
\ProcessOptions\relax
%    \end{macrocode}
%
% \changes{v2.5}{1997/06/17}{Landscape per Schalter aktivieren}
% Das ist jetzt der richtige Zeitpunkt f"ur die Landscape-Aktivierung.
%    \begin{macrocode}
\if@landscape
 \setlength\@tempdima   {\paperheight}
 \setlength\paperheight {\paperwidth}
 \setlength\paperwidth  {\@tempdima}
\fi
%    \end{macrocode}
%
%  \begin{macro}{\ta@divlist}
%  \changes{v2.0e}{1994/10/28}{neue interne Definition}
%  \changes{v2.6}{2000/01/04}{die Liste umfa"st nun Werte ab 1\,pt statt
%                             ab 10\,pt.}
%  \begin{macro}{\ta@divlistelse}
%  \changes{v2.6}{2000/01/04}{neue interne Definition}
% Au"serdem mu"s an dieser Stelle noch f"ur die Standardeinstellung
% der |DIV|-Liste gesorgt werden, falls eine solche noch nicht
% definiert wurde. 
%    \begin{macrocode}
\providecommand\ta@divlist{{}{}{}{}{}{}{}{}{}{8}{10}{12}}
%    \end{macrocode}
%  \end{macro}
% Wenn kein Defaultwert definiert ist, wird dieser Wert verwendet:
%    \begin{macrocode}
\providecommand\ta@divlistelse{1}
%    \end{macrocode}
%  \end{macro}
%
% \subsection{Einige interne Register}
%
%  \begin{Length}{ta@hblk}
%  \begin{Length}{ta@vblk}
%  \begin{Length}{ta@temp}
% Diese Gr"o"senparameter und Z"ahler werden intern f"ur verschiedene
% Befehle ben"otigt. (|\ta@bcor| und |\ta@div| werden bereits bei der
% Optionenauswertung ben"otigt und sind deshalb vorgezogen.)
%    \begin{macrocode}
\newlength{\ta@hblk}
\newlength{\ta@vblk}
\newlength{\ta@temp}
%    \end{macrocode}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%
%
% \subsection{Die Berechnung des Seitenspiegels}
%
%  \begin{macro}{\typearea}
% Die Berechnung des Seitenspiegels, wie sie im Hauptteil der
% Anleitung beschrieben ist, findet mit Hilfe des Befehls |\typearea|
% statt, der hier definiert wird. Die Berechnung selbst findet in
% mehreren Stufen statt.
%  \begin{macro}{\@typearea}
% \changes{v2.4n}{1997/05/28}{Eigentliche Satzspiegelberechnung in
%                             \cs{@typearea} ausgegliedert.}
% Die eigentliche Satzspiegelberechnung geschieht "uber das Hilfsmakro
% |\@typearea|, das dann auch von |\typearea| genutzt wird. Dieses
% Hilfsmakro ben"otigt keine Parameter, da diese bereits zuvor von
% |\typearea| in die entsprechenden Variablen geschrieben wurden.
%    \begin{macrocode}
\newcommand*\@typearea{
%    \end{macrocode}
% Zun"achst werden die horizontalen Ma"se berechnet. Dazu wird als
% erstes die Gr"o"se einer horizontalen L"angeneinheit (\emph{HLE})
% ermittelt:
%    \begin{macrocode}
 \ta@hblk \paperwidth
 \advance \ta@hblk by -\ta@bcor
 \divide\ta@hblk by \ta@div
%    \end{macrocode}
% Die Gr"o"se des Bereichs f"ur die Randnotizen ist ebenfalls von der
% Streifenbreite abh"angig.
% \changes{v2.8q}{2002/03/28}{Textbreite ber"ucksichtigt Option 
%  \texttt{mpinclude}}
%    \begin{macrocode}
 \if@mincl
  \marginparwidth \ta@hblk
  \advance\marginparwidth -\marginparsep
 \else
  \if@twoside
   \marginparwidth 1.5\ta@hblk
  \else
   \marginparwidth \ta@hblk
  \fi
 \fi
%    \end{macrocode}
% Der linke und rechte Rand wird relativ zur benutzbaren Seitenbreite
% berechnet. Dabei mu"s auch der Rand ber"ucksichtigt werden, der vom
% Druckertreiber standardm"a"sig hinzugef"ugt wird. Au"serdem ist der
% Rand abh"angig davon, ob es sich um ein einseitiges oder
% beidseitiges Layout handelt. Bei Option \texttt{mpinclude} sind im
% beidseitigen Satz zus"atzlich die Randnotizen zu beachten. 
%    \begin{macrocode}
 \oddsidemargin -1in
 \evensidemargin -1in
 \if@twoside
  \advance\oddsidemargin by \ta@hblk
  \advance\oddsidemargin by \ta@bcor
  \advance\evensidemargin by 2\ta@hblk
  \if@mincl
    \advance\evensidemargin by \marginparwidth
    \advance\evensidemargin by \marginparsep
  \fi
 \else
  \advance\oddsidemargin by 1.5\ta@hblk
  \advance\oddsidemargin by \ta@bcor
  \evensidemargin\oddsidemargin
 \fi
%    \end{macrocode}
% Der Rest steht nun f"ur den Textbereich zur Verf"ugung:
%    \begin{macrocode}
 \textwidth \paperwidth
 \advance\textwidth by -\ta@bcor
 \advance\textwidth by -3\ta@hblk
%    \end{macrocode}
% Falls die Randnotizen f"ur die Satzspiegelberechnung zum Textbereich
% gehoeren, muessen sie zusammen mit ihrem Abstand vom Text nun von
% diesem abgezogen werden. Es wird dabei davon ausgegangen, dass die
% Randnotizen immer au"sen gesetzt werden. Sollte der Textbereich f"ur
% Randnotizen zu schmal sein, so wird der Bereich der Randnotizen so
% lange verkleinert, bis dies nicht mehr der Fall ist. Am einfachsten
% geht dies, indem gegebenfalls die Breiten vertauscht werden.
%    \begin{macrocode}
 \if@mincl
  \advance\textwidth by -\marginparwidth
  \advance\textwidth by -\marginparsep
  \ifdim\textwidth <\marginparwidth
    \PackageWarningNoLine{typearea}{%
      Width of text (\the\textwidth) less than width of\MessageBreak
      marginpar (\the\marginparwidth) while using option\MessageBreak
      `mpinclude'.\MessageBreak
      Because of this, I'm exchanging the values.\MessageBreak
      You should increase DIV to avoid such problems.\MessageBreak
      }
    \@tempdima \marginparwidth
    \marginparwidth \textwidth
    \textwidth \@tempdima
  \fi
 \fi
%    \end{macrocode}
%
% Danach folgen die vertikalen Ma"se. Auch daf"ur wird zun"achst die H"ohe
% eines Streifens ben"otigt.
%    \begin{macrocode}
 \ta@vblk \paperheight
 \divide\ta@vblk by \ta@div
%    \end{macrocode}
% Davon ausgehend kann der obere Rand berechnet werden, wobei zu
% ber"ucksichtigen ist, da"s {\TeX} diesen selbst"andig um ein Inch
% vergr"o"sert.
%    \begin{macrocode}
 \topmargin -1in
 \advance\topmargin by \ta@vblk
%    \end{macrocode}
% Au"serdem ist zu ber"ucksichtigen, ob der Kopf zum Textbereich oder
% zum Rand geh"ort.
%    \begin{macrocode}
 \if@hincl \else
  \advance\topmargin by -\headheight
  \advance\topmargin by -\headsep
 \fi
%    \end{macrocode}
% Bei der Berechnung des Textbereichs sind von der Papierh"ohe die R"ander
% abzuziehen und ebenfalls zu ber"ucksichtigen, ob Kopf- und Fu"s zu den
% R"andern oder zum Textbereich selbst gez"ahlt werden.
%    \begin{macrocode}
 \ta@temp \paperheight
 \advance\ta@temp by -3\ta@vblk
 \if@hincl
  \advance\ta@temp by -\headheight
  \advance\ta@temp by -\headsep
 \fi
 \if@fincl
  \advance\ta@temp by -\footskip
 \fi
%    \end{macrocode}
% Als Sonderbedingung ist dann noch zu beachten, da"s die Gr"o"se des
% Textbereichs nicht zu einer vertikalen Aufweitung f"uhrt.
%    \begin{macrocode}
 \textheight \topskip
 \@whiledim\textheight<\ta@temp
  \do{\advance\textheight by \baselineskip}
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\ta@modiv}
% Dieses Hilfsmakro wird weiter unten ben"otigt. Es dividiert den
% ersten  Parameter durch den zweiten und liefert das gerundete
% Ergebnis in |\ta@div| zur"uck. F"ur die Berechnung werden
% |\@tempdima| und |\@tempdimb| verwendet.
%    \begin{macrocode}
\newcommand*\ta@modiv[2]{
 \setlength{\@tempdima}{#1}
 \divide\@tempdima by#2\relax
 \ta@div\@tempdima
 \ifnum \ta@div<4\relax
  \ta@div=4\relax
 \else
  \setlength{\@tempdimb}{#1}
  \divide\@tempdimb\ta@div
  \addtolength{\@tempdima}{\@tempdima}
  \addtolength{\@tempdima}{-\@tempdimb}
  \advance\ta@div\@ne
  \setlength{\@tempdimb}{#1}
  \divide\@tempdimb\ta@div
%    \end{macrocode}
% \changes{v2.5a}{1997/06/22}{\cs{ifdim} statt \cs{ifnum}.}
%    \begin{macrocode}
  \ifdim \@tempdima<\@tempdimb
   \advance\ta@div by\m@ne
  \fi
 \fi
}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ta@temp@goodwidth}
% Dieses Makro setzt die Hilfdimension |\ta@temp| auf den Wert einer
% optimalen Zeilenbreite in der aktuellen Schrift. Voraussetzung f"ur
% diese Berechnung ist, da"s Zeilenbreiten von ca. 66 bis 72 Zeichen
% optimal sind. Zur Vereinfachung wird mit dem Mittelwert 69
% gerechnet. Eine solche Zeile besteht dann aus 66 durchschnittlichen
% Klein- und 3 durchschnittlichen Gro"sbuchstaben.
% \changes{v2.7i}{2001/05/17}{Berechnung ist robuster gegen
%   arithmetischen "Uberlauf bei sehr gro"sen Schriften} 
% \changes{v2.8q}{2002/03/06}{\cs{normalfont}\cs{normalsize} 
%   hinzugef"ugt}
%    \begin{macrocode}
\newcommand*\ta@temp@goodwidth{
  \settowidth{\ta@temp}{\normalfont\normalsize 
    abcdefghijklmnopqrstuvwxyz}
  \ifdim\ta@temp >200\p@
    \divide\ta@temp by 26
    \multiply\ta@temp by 3
    \settowidth{\@tempdima}{\normalfont\normalsize
      ABCDEFGHIJKLMNOPQRSTUVWXYZ}
    \divide\@tempdima by 26
    \multiply\@tempdima by 3
    \addtolength{\ta@temp}{\@tempdima}
  \else
    \multiply\ta@temp by 66
    \settowidth{\@tempdima}{\normalfont\normalsize
      ABCDEFGHIJKLMNOPQRSTUVWXYZ}
    \multiply\@tempdima by 3
    \addtolength{\ta@temp}{\@tempdima}
    \divide\ta@temp by 26
  \fi
}
%    \end{macrocode}
%  \end{macro}
% \changes{v2.4g}{1996/11/04}{"Uberfl"ussigen Kommentar gel"oscht}
% \changes{v2.7g}{2001/04/17}{die neuen Werte \texttt{current},
%                             \texttt{default}, \texttt{calc} und
%                             \texttt{classic} werden verstanden} 
% \changes{v2.8q}{2001/11/06}{der Wert \texttt{last} wird verstanden}
% Die symbolischen Werte f"ur das obligatorische Argument haben
% folgende Bedeutung:
% \begin{center}\begin{tabular}{lll}
%   Symbol           & Wert & Bedeutung \\\hline\\[-1.6ex]
%   \texttt{calc}    & 2 & guten Wert berechnen \\
%   \texttt{classic} & 3 & mittelalterlicher Buchseitenkanon \\
%   \texttt{current} & --- & aktuellen Wert beibehalten \\
%   \texttt{default} & 0 & Wert aus der Liste verwenden \\
%   \texttt{last}    & --- & Argument des letzten Aufrufs verwenden \\
% \end{tabular}\end{center}
%    \begin{macrocode}
\newcommand*\typearea[2][\z@]{
  \edef\@tempa{#1}\edef\@tempb{current}\ifx\@tempa\@tempb\else
    \setlength{\ta@bcor}{#1}
  \fi
  \edef\@tempa{#2}
  \def\@tempb{last}\ifx\@tempa\@tempb\let\@tempa=\@lastdiv\fi
  \def\@tempb{current}\ifx\@tempa\@tempb\else
    \def\@tempb{default}\ifx\@tempa\@tempb\ta@div=0\relax\else
      \def\@tempb{calc}\ifx\@tempa\@tempb\ta@div=2\relax\else
        \def\@tempb{classic}\ifx\@tempa\@tempb\ta@div=3\relax\else
          \ta@div=\@tempa\relax
        \fi
      \fi
    \fi
  \fi
  \edef\@lastdiv{\the\ta@div}
%    \end{macrocode}
% Nun mu"s festgestellt werden, ob die H"ohe des Kopfbereichs bereits
% vorgegeben ist, oder ob diese selbst berechnet werden soll. Im Falle der
% Berechnung wird als H"ohe f"ur den Kopf das 1.25-Fache des
% Grundzeilenabstandes gew"ahlt. Damit sollte auch noch genug Raum f"ur die
% optionale Trennlinie vorhanden sein.
% \changes{v2.4n}{1997/05/28}{Berechnete Kopfh"ohe vom Grundzeilenabstand
%                             abh"angig.}
%    \begin{macrocode}
  \@ifundefined{ta@hh}{\headheight 1.25\baselineskip}{\headheight\ta@hh}
%    \end{macrocode}
% Auch der Abstand zwischen Kopf und Text ist immer gleich.
% Verschiedene Typographen geben hier verschiedene Werte an. Ein guter
% Wert sollte erreicht werden, wenn dadurch eine Kopfzeile in das
% normale Zeilenraster eingepa"st wird. Der Abstand soll aber auch
% nicht zu gro"s, werden. Optimal ist angeblich ein Wert von einer
% Zeile. Dies f"uhrt jedoch zu einem klaren Konflikt bei
% unterstrichenen Kopfzeilen. Deshalb wird ein Kompromi"s gebildet.
%    \begin{macrocode}
 \headsep 1.5\baselineskip
%    \end{macrocode}
% Es folgen die restlichen von |DIV| und |BCOR| unabh"angigen Werte.
%    \begin{macrocode}
 \footskip 3.5\baselineskip
 \marginparsep 1cc
 \marginparpush 0.45\baselineskip
%    \end{macrocode}
% \changes{v2.4g}{1996/11/04}{\texttt{DIV}=0 versucht den Wert aus der
%                             Default-Liste zu verwenden.}
% Vor der eigentlichen Berechnung des Satzspiegels wird nun zun"achst
% "uberpr"uft, ob der "ubergebene |DIV|-Wert 0 ist. Da Werte von 0 bis
% 3 nicht m"oglich sind (Minimum sind drei Teile Rand und ein Teil
% Text), wird der Wert 0 daf"ur verwendet, den Defaultwert aus der
% Liste zu ermitteln, falls ein solcher vorhanden ist.
% \changes{v2.5h}{1999/12/29}{Text der Warnung korrigiert.}
%    \begin{macrocode}
 \ifnum\ta@div=\z@
  \@ifundefined{@ptsize}{%
   \@tempdima=\f@size pt\relax
   \advance\@tempdima by.5pt
   \ta@div=\@tempdima
   \divide\ta@div by65536\relax
   \advance\ta@div by-10\relax
   \xdef\@ptsize{\the\ta@div}%
   \PackageWarningNoLine{typearea}{%
     \string\@ptsize\space not defined!
     \MessageBreak
     Fontsize ist \f@size.\MessageBreak
     Defining \string\@ptsize\space to \@ptsize}%
   }{}
  \ta@divfor{\@ptsize}%
 \fi
%    \end{macrocode}
% \changes{v2.4n}{1997/05/28}{Optionale, klassische Kreisberechnung f"ur
%                             \texttt{DIV}.}
% Als zweiter Sonderfall wird f"ur einen |DIV|-Wert von 3 die
% \emph{Kreisberechnung} durchgef"uhrt. Dabei wird versucht, den
% Textbereich genau so hoch zu w"ahlen, wie das Papier breit ist. Ein
% solches Verh"altnis wird bei klassischen Papierformaten als
% harmonisch betrachtet. 
%    \begin{macrocode}
 \ifnum\ta@div=3
  \typeout{DIV calculation for classic typearea.}
  \setlength{\ta@temp}{\paperwidth}
  \addtolength{\ta@temp}{-\ta@bcor}
%    \end{macrocode}
% Bei der Berechnung des vertikal ben"otigten Platzes, ist zu
% beachten, ob Kopf und Fu"s zum Textbereich oder zu den R"andern
% geh"oren. 
%    \begin{macrocode}
  \if@hincl\else
   \addtolength{\ta@temp}{\headheight}
   \addtolength{\ta@temp}{\headsep}
  \fi
  \if@fincl\else
   \addtolength{\ta@temp}{\footskip}
  \fi
%    \end{macrocode}
% Wird vertikal mehr Platz ben"otigt, als vorhanden ist, wird eine andere
% Berechnung versucht, die weiter unten erfolgt.
% \changes{v2.5a}{1997/06/22}{\cs{ifdim} statt \cs{ifnum}.}
%    \begin{macrocode}
  \ifdim \ta@temp>\paperheight
   \PackageWarningNoLine{typearea}
    {No classic typearea with this papersize!\MessageBreak
     Using calculated DIV}
   \ta@div=\@ne
%    \end{macrocode}
% Ansonsten wird mittels des belegten Textbereichs und der Papierh"ohe der
% obere und untere Rand zusammen,
%    \begin{macrocode}
  \else
   \setlength{\ta@temp}{\paperheight}
   \addtolength{\ta@temp}{-\paperwidth}
   \addtolength{\ta@temp}{\ta@bcor}
%    \end{macrocode}
% daraus die Streifenh"ohe
%    \begin{macrocode}
   \divide\ta@temp 3\relax
%    \end{macrocode}
% und schlie"slich erneut mit Hilfe der Papierh"ohe der genaue |DIV|-Wert
% berechnet.
%    \begin{macrocode}
   \ta@modiv{\paperheight}{\ta@temp}
  \fi
% An dieser Stelle muss \texttt{mpinclude} nicht ber"ucksichtigt
% werden, da nicht die Breite des Textbereichs, sonder die Breite des
% Papiers als Kriterium verwendet wird.
 \fi
%    \end{macrocode}
% Wurde bisher kein Wert gefunden oder ein |DIV|-Wert von 1 bis 2
% angegeben, so wird nun ein m"oglichst optimaler |DIV|-Wert
% ermittelt. 
% \changes{v2.4n}{1997/05/28}{Optimale \texttt{DIV}-Berechnung
%                             verbessert} 
%    \begin{macrocode}
 \ifnum\ta@div<4
  \typeout{DIV calculation for typearea with good linewidth.}
%    \end{macrocode}
% Zun"achst k"onnte die Textbreite die gesamte Sichtbare Papierbreite
% einnehmen.
%    \begin{macrocode}
  \setlength{\textwidth}{\paperwidth}
  \addtolength{\textwidth}{-\ta@bcor}
%    \end{macrocode}
% Als Sollbreite wird hier die ideale Zeilenf"ullung verwendet
%    \begin{macrocode}
  \ta@temp@goodwidth
%    \end{macrocode}
% Im Zweispaltenmodus besteht jede Zeile aus zwei solchen Spalten
% zuz"uglich dem Spaltenabstand.
% \changes{v2.8q}{2001/12/13}{DIVcalc liefert im zweispaltigen Satz
%                             (wie dokumentiert) breitere Spalten}
%    \begin{macrocode}
  \if@twocolumn
    \addtolength{\ta@temp}{\ta@temp}
    \addtolength{\ta@temp}{\columnsep}
  \fi
%    \end{macrocode}
% In fr"uheren Versionen erfolgte nun eine iterative Ann"aherung an den
% optimalen |DIV|-Wert. Je nach {\TeX}-Implementierung und
% Papierformat, kann das aber recht lange dauern. Die obere Berechnung
% zum Vorbild nehmend, wird deshalb nun ebenfalls versucht, den
% optimalen Wert direkt zu berechnen. Dazu wird zun"achst wie oben die
% Gr"o"se der horizontalen R"ander zusammen ermittelt:
%    \begin{macrocode}
  \setlength{\ta@hblk}{\paperwidth}
  \addtolength{\ta@hblk}{-\ta@temp}
%    \end{macrocode}
% Daraus dann die Breite eines Streifens.
%    \begin{macrocode}
  \divide\ta@hblk by 3
%    \end{macrocode}
% Ist die Breite negativ, so wird die Mindestbreite von 5mm eingesetzt.
% \changes{v2.5a}{1997/06/22}{\cs{ifdim} statt \cs{ifnum}.}
%    \begin{macrocode}
  \ifdim \ta@hblk<\z@\relax
    \setlength{\ta@hblk}{5mm}
  \fi
%    \end{macrocode}
% Nun kann wieder der |DIV|-Wert ermittelt werden.
% \changes{v2.8q}{2002/03/28}{Ber"uchsichtigung von Option
%   \texttt{mpinclude} bei der \texttt{DIV}-Berechnung}
% Im Falle der Option \texttt{mpinclude} gilt allgemein, dass
% der Nenner mit $\frac{3}{3+m}$ zu multiplizieren ist. Dabei ist $m$
% die Anzahl an L"angeneinheiten, die f"ur die Randnotizen verwendet
% werden sollen. Mit $m=1$ ist also der Faktor $\frac{3}{4}=0.75$ zu
% verwenden. Schwieriger wird es, wenn hier nicht die Anzahl
% L"angeneinheiten, sondern ein konkreter Wert f"ur die Breite der
% Randnotizen verwendet wird.
%    \begin{macrocode}
   \if@mincl
     \setlength{\ta@temp}{.75\ta@hblk}
   \else
     \setlength{\ta@temp}{\ta@hblk}
   \fi
%    \begin{macrocode}
  \ta@modiv{\paperwidth}{\ta@temp}
%    \end{macrocode}
% Als Erschwernis kommt jetzt jedoch hinzu, da"s nun zwar der
% |DIV|-Wert f"ur die Breite optimal ist, jedoch u.\,U. zu einer zu
% gro"sen H"ohe f"uhrt. Deshalb wird zun"achst ein Satzspiegel f"ur
% diesen |DIV|-Wert berechnet.
%    \begin{macrocode}
  \@typearea
%    \end{macrocode}
% Nun wird "uberpr"uft, ob die vertikalen Ausma"se in Ordnung
% sind. Auch hier ist wieder eine minimale Streifenbreite
% vorteilhaft. Die Streifenbreite ergibt sich direkt aus dem oberen
% Rand. Wobei jedoch noch das {\TeX}-Offset von 1in zu
% ber"ucksichtigen ist.
% \changes{v2.5a}{1997/06/22}{\cs{ifdim} statt \cs{ifnum}}
%    \begin{macrocode}
  \setlength{\ta@temp}{-1in}
  \addtolength{\ta@temp}{5mm}
  \ifdim\topmargin<\ta@temp
%    \end{macrocode}
% Ist der Minimalrand nicht eingehalten, so wird f"ur diesen ein neuer
% |DIV|-Wert ermittelt. Dabei mu"s ebenfalls ber"ucksichtigt werden,
% ob Kopf- und Fu"sbereich zum Text oder zum Rand geh"oren. 
% \changes{v2.5b}{1997/06/29}{Bei der Mindestrandbetrachtung
%                             \texttt{headinclude} und
%                             \texttt{footinclude} ber"ucksichtigen}
%    \begin{macrocode}
   \setlength{\ta@temp}{15mm}
   \if@hincl\else
    \addtolength{\ta@temp}{\headheight}
    \addtolength{\ta@temp}{\headsep}
   \fi
   \if@fincl\else
    \addtolength{\ta@temp}{\footskip}
   \fi
   \divide\ta@temp by3\relax
   \ta@modiv{\paperheight}{\ta@temp}
  \fi
%    \end{macrocode}
% Dieser Sonderfall ist somit abschlie"send behandelt.
%    \begin{macrocode}
 \fi
%    \end{macrocode}
% Damit steht jetzt also der |DIV|-Wert fest, und die eigentliche
% Berechnung kann folgen.
%    \begin{macrocode}
 \@typearea
%    \end{macrocode}
% \changes{v2.0e}{1994/10/28}{Die Seitenaufteilung wird in die log-Datei
%                             geschrieben.}
% \changes{v2.4i}{1996/11/11}{Die Seitenaufteilung wird etwas sp"ater in
%                             die log-Datei geschrieben.}
% \changes{v2.4i}{1996/11/11}{Am Ende von \cs{typearea} wird noch
%                             \cs{@typeare@end} ausgef"uhrt.}
% \changes{v2.4j}{1996/12/04}{Bei der Seitenaufteilung wird \cs{textheight}
%                             nicht mehr doppelt, daf"ur zus"atzlich
%                             \cs{baselineskip} ausgegeben.}
% \changes{v2.5}{1997/06/17}{"`arithmetic overflow"' bei landscape
%                            behoben}
% Zum Schlu"s soll die Seitenaufteilung noch in die |log|-Datei
% geschrieben werden.
%    \begin{macrocode}
 \ta@temp@goodwidth
 \setlength{\@tempdima}{\ta@temp}
 \addtolength{\ta@temp}{-\textwidth}
 \divide\@tempdima 100\relax
 \divide\ta@temp\@tempdima
 \@tempcnta\ta@temp
 \ifnum\@tempcnta<5\relax
  \ifnum\@tempcnta>-5\relax
   \@tempcnta=0
  \else
   \advance\@tempcnta 4
  \fi
 \else
  \advance\@tempcnta -4
 \fi
 \ifnum\@tempcnta<-15\relax
  \PackageWarningNoLine{typearea}
   {Bad DIV-value!\MessageBreak
    You should decrease DIV, increase fontsize or\MessageBreak
    change papersize}
 \else\ifnum\@tempcnta>15\relax
  \PackageWarningNoLine{typearea}
   {Bad DIV-value!\MessageBreak
    You should increase DIV, decrease fontsize or\MessageBreak
    change papersize}
 \fi\fi
 \ifnum\ta@div<6\relax
  \PackageWarningNoLine{typearea}
   {Very low DIV-value!\MessageBreak
    DIV-values less than 6 result in textwidth/-height\MessageBreak
    smaller than total marginwidth/-height.\MessageBreak
    You should increase DIV, increase fontsize or\MessageBreak
    change papersize}
 \fi
 \PackageInfo{typearea}{%
    These are the values describing the layout:\MessageBreak
    DIV\space\space=\space\number\ta@div\MessageBreak
    BCOR\space=\space\the\ta@bcor\MessageBreak
    \string\paperwidth\space\space\space\space\space\space=%
                         \space\the\paperwidth\MessageBreak
    \space\string\textwidth\space\space\space\space\space\space=%
                         \space\the\textwidth\MessageBreak
    \space DIV-departure\space\space\space=%
                         \space\the\@tempcnta/100\MessageBreak
    \space\string\evensidemargin\space=%
                         \space\the\evensidemargin\MessageBreak
    \space\string\oddsidemargin\space\space=%
                         \space\the\oddsidemargin\MessageBreak
    \string\paperheight\space\space\space\space\space=%
                         \space\the\paperheight\MessageBreak
    \space\string\textheight\space\space\space\space\space=%
                         \space\the\textheight\MessageBreak
    \space\string\topmargin\space\space\space\space\space\space=%
                         \space\the\topmargin\MessageBreak
    \space\string\headheight\space\space\space\space\space=%
                         \space\the\headheight\MessageBreak
    \space\string\headsep\space\space\space\space\space\space\space\space=%
                         \space\the\headsep\MessageBreak
    \space\string\topskip\space\space\space\space\space\space\space\space=%
                         \space\the\topskip\MessageBreak
    \space\string\footskip\space\space\space\space\space\space\space=%
                         \space\the\footskip\MessageBreak
    \space\string\baselineskip\space\space\space=%
                         \space\the\baselineskip\MessageBreak
  }
  \@typearea@end}
%    \end{macrocode}
%
%  \begin{macro}{\@typearea@end}
% Das Makro |\@typearea@end| wird verwendet, um mit einem gewaltigen
% Hack die "Anderung des Satzspiegels innerhalb eines Dokuments zu
% erm"oglichen. 
%
% Zun"achst ist das Makro leer, weil in der Pr"aambel nichts weiter zu tun
% ist.
%    \begin{macrocode}
\newcommand\@typearea@end{}
%    \end{macrocode}
%
% Am Anfang des Dokuments mu"s das Makro jedoch so umdefiniert werden, da"s
% alle Berechnungen, die |\begin{document}| f"ur die Ausgabedimensionen
% durchf"uhrt auch noch von |\typearea| durchgef"uhrt werden.
%    \begin{macrocode}
\AtBeginDocument{%
 \renewcommand\@typearea@end{%
%    \end{macrocode}
% Als erstes wird jedoch eine Warnung ausgegeben, weil es wirklich sehr
% unsauber ist, so zu verfahren. Das ganze ist absolut abh"angig von der
% \LaTeX-Version.
%    \begin{macrocode}
  \PackageWarning{typearea}
   {Typearea changed!\MessageBreak
    You should do this only at preamble, because only\MessageBreak
    \protect\begin{document} calculates output dimensions!\MessageBreak
    Trying to calculate new output dimensions, but\MessageBreak
    this is only a dirty hack}
%    \end{macrocode}
% Sicherheitshalber werden jetzt die Gleitobjekte ausgegeben und eine neue
% Seite begonnen.
%    \begin{macrocode}
  \clearpage
%    \end{macrocode}
% Dann k"onnen endlich die Dimensionen, die z.\,B. von der Ausgaberoutine
% ben"otigt werden, neu berechnet werden.
%    \begin{macrocode}
  \@colht\textheight
  \@colroom\textheight \vsize\textheight
  \columnwidth\textwidth
  \if@twocolumn
    \advance\columnwidth -\columnsep
    \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
  \fi
  \hsize\columnwidth \linewidth\hsize
 }}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\areaset}
% \changes{v2.1b}{1994/12/31}{\cs{headheight} von \cs{@ptsize}
%                             abh"angig gemacht}
% \changes{v2.4i}{1996/11/11}{Am Ende von \cs{typearea} wird noch
%                             \cs{@typeare@end} ausgef"uhrt.}
% \changes{v2.6}{2000/01/04}{\cs{headheight} von \cs{f@size} statt von
%                            \cs{@ptsize} abh"angig gemacht}
% \changes{v2.7g}{2001/04/17}{Auch hier existiert der symbolische Wert
%                             \texttt{current} f"ur BCOR}
% Zur Berechnung eines Seitenspiegels mit fester Breite und
% H"ohe dient der Befehl |\areaset|. Der Algorithmus ist "ahnlich dem
% vorherigen Verfahren, aber einfacher.
%    \begin{macrocode}
\newcommand*\areaset[3][\z@]{
  \edef\@tempa{#1}\edef\@tempb{current}\ifx\@tempa\@tempb\else
    \setlength{\ta@bcor}{#1}
  \fi
  \textwidth #2
  \textheight #3
  \ta@hblk \paperwidth
  \advance\ta@hblk by -\ta@bcor
  \advance\ta@hblk by -\textwidth
  \divide\ta@hblk by 3
  \oddsidemargin -1in
  \evensidemargin -1in
  \if@twoside
    \advance\oddsidemargin by \ta@hblk
    \advance\oddsidemargin by \ta@bcor
    \advance\evensidemargin by 2\ta@hblk
  \else
    \advance\oddsidemargin by 1.5\ta@hblk
    \advance\oddsidemargin by \ta@bcor
    \evensidemargin\oddsidemargin
  \fi
  \headheight 15\p@
  \advance\headheight by\f@size\p@
  \advance\headheight by-10\p@
  \headsep 1.5\baselineskip
  \footskip 3.5\baselineskip
  \ta@vblk \paperheight
  \advance\ta@vblk by -\textheight
  \divide\ta@vblk by 3
  \if@hincl
    \advance\textheight by -\headheight
    \advance\textheight by -\headsep
  \fi
  \if@fincl
    \advance\textheight by -\footskip
  \fi
  \topmargin \ta@vblk
  \advance\topmargin by -1in
  \if@hincl \else
    \advance\topmargin by -\headheight
    \advance\topmargin by -\headsep
  \fi
  \if@twoside
    \marginparwidth 1.5\ta@hblk
  \else
    \marginparwidth \ta@hblk
  \fi
  \marginparsep 1cc
  \marginparpush 0.45\baselineskip
  \@areaset@end}
%    \end{macrocode}
%
%  \begin{macro}{\@areaset@end}
% Da die Schlu"s-Berechnungen und auch die Ausgabe von |\@areaset@end|
% und |\@typearea@end| identisch sind, wird hier genau daf"ur gesorgt.
% Dazu kann nat"urlich nicht |\let| verwendet werden, weil sich die
% Definition von |\@typarea@end| ja im Laufe der Zeit "andert.
%    \begin{macrocode}
\newcommand\@areaset@end{\@typearea@end}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%
% \subsection{Berechnung des Standardseitenspiegels}
%
%  \begin{macro}{\ta@divfor}
% Der Standardseitenspiegel ist abh"angig von den mit |\SetDIVList|
% vorgegebenen Einstellungen. Dazu mu"s aus einer eventuell vorhandenen
% inneren Liste |ta@divlist| der von der Schriftgr"o"se abh"angige
% \textsf{DIV}-Wert ausgelesen werden. Dies geschieht mit Hilfe des
% |\ta@divfor|-Befehls, der sich wiederum einiger interner Befehle
% zur Listenbearbeitung bedient.
% \changes{v2.4g}{1996/11/04}{Der Satzspiegel wird nicht mehr direkt
%                             berechnet, sondern nur der
%                             \texttt{DIV}-Wert aus der Defaultliste
%                             ermittelt.} 
% \changes{v2.6}{2000/01/04}{Ber"ucksichtigung der erweiterten Liste}
% \changes{v2.8q}{2002/03/28}{Ber"ucksichtigung der Option
%   `mpinclude'}
% \changes{v2.9e}{2002/08/25}{zweimal \cs{relax} eingef"ugt}
%    \begin{macrocode}
\newcommand*{\ta@divfor}[1]{
  \if@mincl
    \PackageInfo{typearea}{%
      With option `mpinclude' there are no predefined\MessageBreak
      DIV-values. Using DIV calculation for good line\MessageBreak
      width}
    \ta@div=2
  \else
    \xdef\@tempa{\ta@divlist{}}
    \ta@div=#1\relax
    \@whilenum \ta@div >-9 \do {%
      \ifx\@tempa\empty \relax%
      \else \xdef\@tempa{\expandafter\@cdr\@tempa\@nil}%
      \fi
      \advance\ta@div by -1
      }
    \ifx\@tempa\empty
%    \end{macrocode}
% Wenn keine Voreinstellung gefunden werden konnte, so wird immer
% der Optimalwert berechnet. Mit einer Warnung wird darauf hingewiesen.
%    \begin{macrocode}
      \ta@div=10\advance\ta@div by#1\relax
      \PackageWarningNoLine{typearea}{%
        DIV for \the\ta@div pt and used papersize\MessageBreak
        not defined!\MessageBreak
        Using DIV=\ta@divlistelse}
      \ta@div=\ta@divlistelse\relax
    \else
%    \end{macrocode}
% Ansonsten wird der vorgegebene Wert verwendet.
%    \begin{macrocode}
      \xdef\@tempa{\expandafter\@car\@tempa\@nil}
      \ifx\@tempa\empty
        \ta@div=\ta@divlistelse\relax
      \else
        \ta@div=\@tempa\relax
      \fi
    \fi
  \fi}
%    \end{macrocode}
%  \end{macro}
% \changes{v2.8q}{2001/11/06}{Initialisierung mit Hilfe der
%   symbolischen Werte \texttt{current}}
% Nun fehlt nur noch die eigentliche Initialisierung. Dazu wird einfach der
% Satzspiegel mit den getroffenen Voreinstellungen berechnet. Da der
% |DIV|-Wert 0 f"ur einen Wert aus der Default-Liste steht, bleibt die
% Kompatibilit"at zu "alteren Versionen erhalten. Der aktuelle Wert
% f"ur |DIV| und |BCOR| wurde "uber die Optionen bereits
% gesetzt. Dabei kann abweichend zu sonst der aktuelle Wert auch 0, 1,
% 2 oder 3 sein. Die Initialisierung des Pakets ist damit sehr einfach.
%    \begin{macrocode}
\typearea[current]{current}
%    \end{macrocode}
%
% \subsection{Fast das Ende}
%
%    \begin{macrocode}
%</typearea>
%    \end{macrocode}
%
% \section{"`scrartcl"'-class,
%       "`scrreprt"'-class,
%       "`scrbook"'-class,
%       "`scrlttr2"'-class}
%
% Alle drei Haupt-\emph{classes} haben viele Teile gemeinsam. Die
% gr"o"sten Gemeinsamkeiten bestehen dabei zwischen |scrreprt| und
% |scrbook|. |scrartcl| unterscheidet sich in mehreren Punkten von den
% beiden "ubrigen Haupt-\emph{classes}.
%
% |scrlttr2| unterscheidet sich in vielen Punkten grundlegend von den
% drei Haupt-\emph{classes}. Dennoch wird sie ab Version 2.8n
% ebenfalls hier implementiert.
%
%    \begin{macrocode}
%<*class>
%    \end{macrocode}
%
% \changes{v2.0e}{1994/07/07}{Erste Version von "`scrartcl"', "`scrreprt"'
%                             und "`scrbook"'.}
% \changes{v2.0e}{1994/08/10}{\cs{sectdef} "uberall in "`scrreprt"' und
%                             "`scrbook"' durch \cs{secdef} ersetzt.}
% \changes{v2.0e}{1994/08/10}{\cs{addcontensline} in "`scrreprt"' und
%                             "`scrbook"' durch \cs{addcontentsline}
%                             ersetzt.}
% \changes{v2.0e}{1994/08/10}{\cs{@makechapterhead} an zwei Stellen in
%                             "`scrreprt"' und "`scrbook"' durch
%                             \cs{@makeschapterhead} ersetzt.}
% \changes{v2.0e}{1994/08/10}{\cs{afterheadings} in "`scrreprt"' und
%                             "`scrbook"' durch \cs{@afterheadings}
%                             ersetzt.}
% \changes{v2.1b}{1994/12/31}{Letzte Version f"ur 1994
%                             fertiggestellt.}
% \changes{v2.8m}{2001/09/08}{"`scrlttr2"' zur"uck in "`scrclass.dtx"'}
%
% Die Implementierung "ahnelt in vielen Punkten der der Standard-classes.
% Deshalb werden hier allenfalls grobe Unterschiede behandelt.
%
% \subsection{Optionen}
%
% \subsubsection{Optionen mit Hilfe von \texttt{keyval}}
%
% Die neue Briefklasse (und derzeit nur diese) verwendet das
% \texttt{keyval}-Paket f"ur die Auswertung der Optionen. Dabei wird
% schlicht jede Option "uber \cs{DeclareOption*} ausgewertet.
%    \begin{macrocode}
%<*scrlettr>
\RequirePackage{keyval}
%    \end{macrocode}
%
%  \begin{macro}{\KOMA@key}
%  \begin{macro}{\KOMAoptions}
% \changes{v2.8q}{2001/10/08}{Neu}
%  \begin{macro}{\scr@save@KV@errx}
% \changes{v2.8q}{2001/10/15}
% Ein paar Abk"urzungen und Erleichterungen sowohl f"ur mich als auch
% f"ur den Anwender. Das erste Makro dient der Definition eines neuen
% \texttt{keyval}-Schl"ussels. Das zweite ruft \cs{setkeys} auf.
%    \begin{macrocode}
\newcommand*{\KOMA@key}{\define@key{KOMA}}
\newcommand*{\KOMAoptions}[1]{%
  \@ifundefined{scr@save@KV@errx}{%
    \let\scr@save@KV@errx=\KV@errx
    \renewcommand*{\KV@errx}[1]{%
      \ClassError{%
        scrlttr2%
        }{unknown KOMA option `#1'}{%
        You've tried to use the KOMA option `#1'.\MessageBreak
        But there is no KOMA option with that name.\MessageBreak
        See the manual of KOMA-Script for information about known koma
        options.}}%
    \setkeys{KOMA}{#1}%
    \let\KV@errx=\scr@save@KV@errx
    \let\scr@save@KV@errx=\relax
  }{%
    \setkeys{KOMA}{#1}%
  }\ignorespaces%
}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
%  \begin{macro}{\AfterProcessOptions}
%  \begin{macro}{\AfterProcessOptions@hook}
% \changes{v2.8q}{2001/10/08}{Neu}
% Au"serdem existiert ein interner \emph{hook}, um aufgrund von
% Optionen unmittelbar nach \cs{ProcessOptions} Aktionen auszul"osen.
%    \begin{macrocode}
\newcommand*{\AfterProcessOptions@hook}{}
\newcommand*{\AfterProcessOptions}[1]{%
  \g@addto@macro{\AfterProcessOptions@hook}{#1}%
}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\@setif}
% \changes{v2.8q}{2001/10/08}{Neu}
% Es wird ebenfalls ein Makro ben"otigt, mit dem man einen Schalter
% "uber die symbolischen Werte \texttt{true}, \texttt{false},
% \texttt{on} und \texttt{off} setzen kann.
%  \begin{macro}{\@setif@alsoerr}
% \changes{v2.8q}{2001/10/09}{Neu}
%    \begin{macrocode}
\newcommand*{\@setif}[3][]{%
  \begingroup%
    \edef\@tempa{#1}
    \ifx\@tempa\@empty\def\@tempc{@#2}\else\def\@tempc{#1}\fi    
    \edef\@tempa{#3}\def\@tempb{on}\ifx\@tempa\@tempb
      \def\@tempa{true}%
    \else\def\@tempb{off}\ifx\@tempa\@tempb
      \def\@tempa{false}%
    \fi\fi%
    \@ifundefined{\@tempc\@tempa}{%
      \ClassError{%
        scrlttr2%
        }{You've used an unknown switch or value}{%
        You've tried to set switch `#2' to value `#3', but there's
        either no\MessageBreak%
        switch `#2' defined or `#3' is not a switch
        value.\MessageBreak%
        Allowed switch values are `true', `false', `on',
        `off'\@setif@alsoerr.}
      \let\@tempa\endgroup
      }{%
      \edef\@tempa{\endgroup\noexpand\@nameuse{\@tempc\@tempa}}
      }
  \@tempa
  \let\@setif@alsoerr=\@empty
  }
\newcommand*{\@setif@alsoerr}{}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\@setxif}
% \changes{v2.8q}{2001/10/08}{Neu}
% Es existiert eine Variante von obigem Makro, bei der die Werte f"ur
% \texttt{true} und \texttt{false} explizit angegeben werden. Diese
% sind dann Parameter 3 (\texttt{true}) und 4 (\texttt{false}).
%    \begin{macrocode}
\newcommand*{\@setxif}[5][]{%
  \begingroup%
    \edef\@tempa{#1}
    \ifx\@tempa\@empty\def\@tempc{@#2}\else\def\@tempc{#1}\fi
    \@ifundefined{\@tempc true}{%
      \ClassError{%
        scrlttr2%
        }{You've used an unknown switch}{%
        You've tried to set switch `#2' to value `#3', but
        there's no\MessageBreak
        switch `#2' defined.}
        \let\@tempa\endgroup
      }{%
      \edef\@tempa{#3}\edef\@tempb{#4}\ifx\@tempa\@tempb
        \edef\@tempa{\endgroup\noexpand\@nameuse{\@tempc true}}
      \else\def\@tempb{#5}\ifx\@tempa\@tempb
        \edef\@tempa{\endgroup\noexpand\@nameuse{\@tempc false}}
      \else
        \ClassError{%
          scrlttr2%
          }{You've used an unknown switch value}{%
          You've tried to set switch `#2' to value `#3', but allowed
          switch\MessageBreak
          values are `#4', `#5'\@setif@alsoerr\space only.} 
        \let\@tempa\endgroup
      \fi\fi%
      }
  \@tempa
  \let\@setif@alsoerr=\@empty
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\@setnumstate}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Es wird au"serdem ein Makro ben"otigt, mit dem man ein nummerisches
% Makro in Abh"angigkeit "uber einen symbolischen Wert setze kann.
% Dabei soll es auch m"oglich sein, dass verschiedene symbolische
% Werte auf dieselbe Nummer abgebildet werden. Das erste Argument ist
% das Makro das umdefiniert werden soll. Das zweite ist die Option,
% "uber die der Wert gesetzt wird. Das dritte ist eine Liste aus
% symbolischen und nummerischen Werten der Art
% \{\emph{Symbol}\}\{\emph{Wert}\},\{\emph{Symbol}\}\{\emph{Wert}\}\dots
%    \begin{macrocode}
\newcommand*{\@setnumstate}[4]{%
  \begingroup
    \edef\@searched{#4}%
    \let\@tempa=\@empty
    \let\@tempb=\@empty
    \@tempswafalse
    \@for\@valuelist:=#3\do{%
      \if@tempswa\else
        \edef\@tempc{\expandafter\@firstoftwo\@valuelist}%
        \edef\@tempa{\@tempa\@tempb`\@tempc'}%
        \edef\@tempb{, }%
        \ifx\@tempc\@searched
          \@tempswatrue
          \edef\@tempa{\expandafter\@secondoftwo\@valuelist}%
        \fi
      \fi
      }
    \if@tempswa
      \edef\@tempa{\endgroup
        \noexpand\renewcommand*{\noexpand#1}{\@tempa}}
    \else
      \ClassError{%
        scrlttr2%
        }{You've used an unknown option value}{%
        You've tried to set option `#2' to value `#4',
        but allowed values\MessageBreak
        are only:\MessageBreak
        \@tempa.}%
        \let\@tempa=\endgroup
    \fi
  \@tempa
  }
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@ObsoleteOption}
% \changes{v2.8q}{2001/10/08}{Neu}
% Es gibt au"serdem ein Makro, um vor der Verwendung alter Optionen zu
% warnen und den Namen und die Syntax der neuen Option anzugeben.
%    \begin{macrocode}
\newcommand*{\@ObsoleteOption}[1]{%
  \ClassWarningNoLine{%
    scrlttr2%
    }{%
    You've used the obsolete option `\CurrentOption'.\MessageBreak
    I'm using option `#1' instead.\MessageBreak
    You should do this change also}
  \KOMAoptions{#1}
}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\@ObsoleteCommand}
% \changes{v2.8q}{2001/10/09}{Neu}
% Gleiches gilt f"ur veraltete Befehle. Allerdings werden hier zwei
% Argumente ben"otigt, um zu wissen, was der alte Befehl
% war. Au"serdem ist es hier sinnvoll die Zeilennummer mit auszugeben.
%    \begin{macrocode}
\newcommand*{\@ObsoleteCommand}[2]{%
  \ClassWarning{%
    scrlttr2%
    }{%
    You`ve used the obsolete command `\string#1'.\MessageBreak
    I`m using `\string\KOMAoptions{#2}' instead.\MessageBreak
    You should do this change also}
  \KOMAoptions{#2}
}
%    \end{macrocode}
%  \end{macro}
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
%
% \subsubsection{Papierformate, DIV, BCOR und Schriftgr"o"se}
%
% Bevor hier etwas getan werden kann, werden ebenfalls ein paar
% Hilfsmakros ben"otigt. Allerdings gilt dies nicht f"ur die
% Briefklasse
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
%  \begin{macro}{\ifnumber}
% Dieses Makro testet, ob ein "ubergebener Parameter eine positive,
% ganze Zahl ist. Ist dies der Fall, wird der zweite Parameter
% ausgef"uhrt, sonst der dritte.
%    \begin{macrocode}
\newcommand\ifnumber[3]{
 \begingroup\@tempswafalse\let\scr@next\test@number
 \expandafter\scr@next#1\scr@next
 \if@tempswa\endgroup#2\else\endgroup#3\fi
}
%    \end{macrocode}
%  \begin{macro}{\test@number}
% F"ur den eigentlichen Test wird der erste Parameter Token f"ur Token
% gescannt und beurteilt.
%    \begin{macrocode}
\newcommand*{\test@number}[1]{
 \ifx \scr@next#1
  \let\scr@next\relax
 \else
%    \end{macrocode}
% Dabei wird f"ur einen schnelleren Vergleich die Tatsache genutzt, da"s
% Ziffernzeichen immer im selben durchg"angigen Bereich liegen
%    \begin{macrocode}
  \@tempcnta=\expandafter\expandafter\expandafter\number
  \expandafter`#1\relax
  \ifnum \@tempcnta>47\relax
   \ifnum \@tempcnta<58\relax
    \@tempswatrue
   \else\@tempswafalse\fi
  \else\@tempswafalse\fi
%    \end{macrocode}
% Das zeichenweise scannen und parsen kann nat"urlich nicht einfach
% abgebrochen werden. Stattdessen ist der Parameterrest noch zu entfernen.
%    \begin{macrocode}
  \if@tempswa\else\let\scr@next\gobble@till@next\fi\fi
 \scr@next}
%    \end{macrocode}
%  \begin{macro}{\gobble@till@next}
% Das geschieht mit einem einzigen "`Leermacro"'.
%    \begin{macrocode}
\newcommand*{\gobble@till@next}{}
\def\gobble@till@next#1\scr@next{}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\@BCOR}
%  \begin{macro}{\@@BCOR}
%  \begin{macro}{\@DIV}
%  \begin{macro}{\@@DIV}
%  \begin{macro}{\@headlines}
% \changes{v2.7g}{2001/04/17}{Neu}
%  \begin{macro}{\@@headlines}
% \changes{v2.7g}{2001/04/17}{Neu}
%  \begin{macro}{\@pt@scan}
% \changes{v2.6}{2000/01/04}{neu in dieser Version}
%  \begin{macro}{\@pt@@scan}
% \changes{v2.6}{2000/01/04}{neu in dieser Version}
%  \begin{macro}{\x@paper}
%  \begin{macro}{\x@@paper}
% Auch hier werden die Scan-Befehle f"ur die Optionen |BCOR|, |DIV| und die
% ISO/DIN-Papierformate
% ben"otigt. Allerdings erfolgt keine direkte Wertzuweisung sondern nur
% eine explizite Weitergabe der globalen Option an das
% \emph{typearea}-package. Die Werte selbst werden auch nicht "uberpr"uft,
% sondern es wird davon ausgegangen, da"s diese Optionen immer zu
% \emph{typearea} geh"oren und dort ggf. ein expliziter Fehler ausgegeben
% werden soll. Die Befehle werden anschlie"send von den
% gleichnamigen Scan-Befehlen des packages "uberladen.
%    \begin{macrocode}
\newcommand*{\@BCOR}{\expandafter\@@BCOR\CurrentOption BCORBCOR\@@BCOR}
\newcommand*{\@@BCOR}{}
\def\@@BCOR #1BCOR#2BCOR#3\@@BCOR{
 \edef\@tempa{#1}\ifx\@tempa\@empty
  \edef\@tempa{#3}\def\@tempb{BCOR}\ifx\@tempa\@tempb
   \PassOptionsToPackage{BCOR#2}{typearea}
  \else\OptionNotUsed\fi
 \else\OptionNotUsed\fi}
\newcommand*{\@DIV}{\expandafter\@@DIV\CurrentOption DIVDIV\@@DIV}
\newcommand*{\@@DIV}{}
\def\@@DIV #1DIV#2DIV#3\@@DIV{
 \edef\@tempa{#1}\ifx\@tempa\@empty
  \edef\@tempa{#3}\def\@tempb{DIV}\ifx\@tempa\@tempb
   \PassOptionsToPackage{DIV#2}{typearea}
  \else\OptionNotUsed\fi
 \else\@BCOR\fi}
\newcommand{\@headlines}{%
  \expandafter\@@headlines\CurrentOption headlines\@@headlines}
\newcommand*{\@@headlines}{}
\def\@@headlines #1headlines#2\@@headlines{
  \edef\@tempa{#2}\edef\@tempb{headlines}\ifx\@tempa\@tempb
    \PassOptionsToPackage{#1headlines}{typearea}
  \else\@DIV\fi}
\newcommand*{\@pt@scan}{\expandafter\@pt@@scan\CurrentOption pt\@pt@@scan}
\newcommand*{\@pt@@scan}{}
\def\@pt@@scan #1pt#2\@pt@@scan{
 \edef\@tempa{pt}\edef\@tempb{#2}\ifx\@tempa\@tempb
  \ifnumber{#1}
   {\@tempcnta=#1\relax
    \advance \@tempcnta by-10\relax
    \edef\@ptsize{\the\@tempcnta}}
   {\@headlines}
  \else\@headlines\fi}
\newcommand*{\x@paper}{\expandafter\x@@paper\CurrentOption paper\x@@paper}
\newcommand*{\x@@paper}{}
\def\x@@paper #1#2paper#3\x@@paper{
 \edef\@tempa{paper}\edef\@tempb{#3}\ifx\@tempa\@tempb
  \ifx a#1\PassOptionsToPackage{a#2paper}{typearea}
   \else\ifx b#1\PassOptionsToPackage{b#2paper}{typearea}
    \else\ifx c#1\PassOptionsToPackage{c#2paper}{typearea}
     \else\ifx d#1\PassOptionsToPackage{d#2paper}{typearea}
      \else\OptionNotUsed\fi\fi\fi\fi
 \else\@pt@scan\fi}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
%  \begin{option}{BCOR}
%  \begin{option}{DIV}
%  \begin{option}{headlines}
%  \begin{option}{paper}
% Die Briefklasse arbeitet hier einfach mit \texttt{keyval}-Optionen:
%    \begin{macrocode}
%<*scrlettr>
\KOMA@key{BCOR}{\PassOptionsToPackage{BCOR#1}{typearea}}
\KOMA@key{DIV}{\PassOptionsToPackage{DIV#1}{typearea}}
\KOMA@key{headlines}{\PassOptionsToPackage{#1headlines}{typearea}}
\KOMA@key{paper}{\PassOptionsToPackage{#1paper}{typearea}}
%</scrlettr>
%    \end{macrocode}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%
%  \begin{option}{a4paper}
%  \begin{option}{a5paper}
%  \begin{option}{b5paper}
%  \begin{option}{letterpaper}
%  \begin{option}{legalpaper}
%  \begin{option}{executivepaper}
% Allerdings m"ussen die Standardpapierformate zus"atzlich per alter
% Option unterst"utzt werden.
%    \begin{macrocode}
%<*scrlettr>
\DeclareOption{a4paper}{\@ObsoleteOption{paper=a4}}
\DeclareOption{a5paper}{\@ObsoleteOption{paper=a5}}
\DeclareOption{b5paper}{\@ObsoleteOption{paper=b5}}
\DeclareOption{letterpaper}{\@ObsoleteOption{paper=letter}}
\DeclareOption{legalpaper}{\@ObsoleteOption{paper=legal}}
\DeclareOption{executivepaper}{\@ObsoleteOption{paper=executive}}
%</scrlettr>
%    \end{macrocode}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%
%
% Es gibt einige neue Optionen gegen"uber den Standard-Classes.
%
% \subsubsection{Tabellenoptionen}
%
% Da Flie"sobjekte in einem Brief etwas fehlt am Platz sind, werden
% in Briefen auch keine Optionen daf"ur angeboten.
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
%  \begin{option}{onelinecaption}
% \changes{v2.8q}{2001/11/17}{Neue Option}
%  \begin{option}{noonelinecaption}
% \changes{v2.8q}{2001/11/17}{Neue Option}
% Genau wie beim |caption2|-Paket gibt es Optionen, mit denen die
% Sonderbehandlung f"ur einzeilige Tabellen- und Abbildungsunter- und
% -"uberschriften ein- und ausgeschaltet werden werden k"onnen.
%  \begin{macro}{\ifonelinecaptions}
% \changes{v2.8q}{2001/11/17}{Neuer Schalter}
%  \begin{macro}{\onelinecaptionstrue}
%  \begin{macro}{\onelinecaptionsfalse}
% Die Entscheidung wird in einem Schalter gespeichert. In der
% Hoffnung, beim Laden von |caption2| Speicher zu sparen, wird der
% gleiche Name verwendet, den auch |caption2| verwendet.
%    \begin{macrocode}
\newif\ifonelinecaptions\onelinecaptionstrue
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
% Da f"ur diese Option nicht der gleiche Name verwendet wird, wie
% bei |caption2|, wird von den Optionen nicht nur der Schalter
% entsprechend gesetzt, sondern auch die korrespondierende Option an
% |caption2| weitergeleitet. Der gleiche Name konnte schlecht
% verwendet werden, weil er bei einer Klasse auch nicht ansatzweise
% als selbsterkl"arend bezeichnet werden kann.
%    \begin{macrocode}
\DeclareOption{onelinecaption}{\onelinecaptionstrue%
  \PassOptionsToPackage{oneline}{caption2}}
\DeclareOption{noonelinecaption}{\onelinecaptionsfalse%
  \PassOptionsToPackage{nooneline}{caption2}}
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
%  \begin{option}{tablecaptionabove}
% \changes{v2.8h}{2001/07/19}{Neu}
% \changes{v2.8k}{2001/08/15}{aus \texttt{typearea} in die
%                             Klassen verschoben}
%  \begin{option}{tablecaptionbelow}
% \changes{v2.8h}{2001/07/19}{Neu}
% \changes{v2.8k}{2001/08/15}{aus \texttt{typearea} in die
%                             Klassen verschoben}
%  \begin{macro}{\if@tablecaptionabove}
% \changes{v2.8h}{2001/07/19}{Neu}
% \changes{v2.8k}{2001/08/15}{aus \texttt{typearea} in die
%                             Klassen verschoben}
%  \begin{macro}{\@tablecaptionabovetrue}
%  \begin{macro}{\@tablecaptionabovefalse}
% Es besteht nun die Wahl, ob \cs{caption} bei Tabellen f"ur Unter-
% oder "Uberschriften voreingestellt ist. Die Defaulteinstellung ist
% aus Kompatibilit"atsgr"unden die Tabellenunterschrift.
%    \begin{macrocode}
\newif\if@tablecaptionabove\@tablecaptionabovefalse
\DeclareOption{tablecaptionabove}{\@tablecaptionabovetrue}
\DeclareOption{tablecaptionbelow}{\@tablecaptionabovefalse}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%  \end{option}
%
%  \begin{option}{origlongtable}
% \changes{v2.8l}{2001/08/16}{Neu}
%  \begin{macro}{\if@komalongtable}
% \changes{v2.8l}{2001/08/16}{Neu}
%  \begin{macro}{\@komalongtabletrue}
%  \begin{macro}{\@komalongtablefalse}
% Wenn das \texttt{longtable}-Paket geladen ist, werden die
% Tabellen"uber- oder -unterschriften daf"ur normalerweise von den
% Klassen umdefiniert. Dies geschieht automatisch nicht, wenn das
% \texttt{caption2}-Paket geladen ist. Es geschieht ausserdem nicht,
% wenn diese Option gesetzt ist. Die Unterscheidung erfolgt mit einem
% Schalter.
%    \begin{macrocode}
\newif\if@komalongtable\@komalongtabletrue
\DeclareOption{origlongtable}{\@komalongtablefalse}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
%
% \subsubsection{Kopf-, Fu"s- und Randbereich}
%  \begin{option}{headsepline}
%  \begin{option}{headnosepline}
% Der Kopfteil kann mit einer Linie vom Textbereich getrennt
% werden.
%  \begin{macro}{\if@hsl}
%  \begin{macro}{\@hsltrue}
%  \begin{macro}{\@hslfalse}
% Die Entscheidung wird in einem Schalter gespeichert.
%    \begin{macrocode}
\newif\if@hsl
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
% Gleichzeitig wird dem \texttt{typearea}-Paket mitgeteilt, dass der
% Kopf zum Textbereich zu rechnen ist.
%    \begin{macrocode}
%<*!scrlettr>
\DeclareOption{headsepline}{%
  \PassOptionsToPackage{headinclude}{typearea}\@hsltrue}
%</!scrlettr>
%<*scrlettr>
\KOMA@key{headsepline}[true]{\@setif{hsl}{#1}}%
\AfterProcessOptions{%
  \if@hsl\PassOptionsToPackage{headinclude}{typearea}\fi}
%</scrlettr>
\DeclareOption{headnosepline}{%
%<!scrlettr>  \@hslfalse%
%<scrlettr>  \@ObsoleteOption{headsepline=false}%
  }
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
%  \begin{option}{footsepline}
% \changes{v2.0e}{1994/08/14}{bei \cs{PassOptionsToPackage} fehlte die
%                             package-Angabe.}
%  \begin{option}{footnosepline}
% Der Fu"steil kann mit einer Linie vom Textbereich getrennt werden.
%  \begin{macro}{\if@fsl}
%  \begin{macro}{\@fsltrue}
%  \begin{macro}{\@fslfalse}
% Die Entscheidung wird in einem Schalter gespeichert.
%    \begin{macrocode}
\newif\if@fsl
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
% Gleichzeitig wird dem \texttt{typearea}-Paket mitgeteilt, dass der
% Fu"s zum Textbereich zu rechnen ist.
%    \begin{macrocode}
%    \begin{macrocode}
%<*!scrlettr>
\DeclareOption{footsepline}{\PassOptionsToPackage{footinclude}{typearea}
                            \@fsltrue}
%</!scrlettr>
%<*scrlettr>
\KOMA@key{footsepline}[true]{\@setif{fsl}{#1}}%
\AfterProcessOptions{%
  \if@fsl\PassOptionsToPackage{footinclude}{typearea}\fi}
%</scrlettr>
\DeclareOption{footnosepline}{%
%<!scrlettr>  \@fslfalse%
%<scrlettr>  \@ObsoleteOption{footsepline=false}%
  }
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
%  \begin{option}{mpinclude}
%    \changes{v2.8q}{2002/03/28}{Neue Option}
%  \begin{option}{mpexclude}
%    \changes{v2.8q}{2002/03/28}{Neue Option}
% Es gibt Dokumente mit sehr ausf"uhrlichen Randnotizen, bei denen die
% Randnotizen bei der Satzspiegelberechnung in den Satzspiegel
% eingerechnet werden sollten. Siehe hierzu auch die gleichnamige
% Option des \texttt{typearea} Pakets. In den Hauptklassen muss
% lediglich daf"ur gesorgt werden, dass der Kopf- und Fu"sbereich in
% diesem Fall auch die Randnotizen "uberdeckt. Eine Weiterleitung an
% die Pakete \texttt{typearea} und \texttt{scrpage2} ist nicht
% erforderlich, da in diesem derselbe Schalter verwendet wird. Dieser
% wird in den Paketen nur dann definiert, wenn er nicht bereits
% definiert ist.
%  \begin{macro}{\if@mincl}
%  \begin{macro}{\@mincltrue}
%  \begin{macro}{\@minclfalse}
% Der Zustand wird in einem Schlater gespeichert. \textbf{Achtung:}
% Bei Verwendung dieser Option m"ussen gr"ossere DIV-Werte verwendet
% werden. Siehe dazu weiter unten. F"ur die Briefklasse wird bei
% Verwendung der Optionen eine Warnung ausgegeben.
%    \begin{macrocode}
\newif\if@mincl
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\DeclareOption{mpinclude}{%
  \@mincltrue
%<*scrlettr>  
  \ClassWarning{scrlttr2}{%
    You should not use option `mpinclude' with this\MessageBreak
    class}
%</scrlettr>
  }
\DeclareOption{mpexclude}{
  \@minclfalse
%<*scrlettr>  
  \ClassWarning{scrlttr2}{%
    You should not use option `mpexclude' with this\MessageBreak
    class}
%</scrlettr>
  }
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
% \subsubsection{Optionen f"ur den Briefkopf}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
% Die Gestaltung des Briefkopfes war bei der alten \texttt{scrlettr}
% Klasse eng begrenzt. Deshalb hatte ich f"ur mich selbst das
% \texttt{briefkopf} Paket geschrieben und ohne Support
% ver"offentlicht. Die Funktionalit"at ist nun direkt verf"ugbar. Dazu
% werden verschiedene Optionen ben"otigt.
%
%  \begin{option}{fromalign}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Diese Option legt fest, ob der Absender linksb"undig, mittig oder
% rechtsb"undig gesetzt werden soll.
%  \begin{macro}{\@alignfrom}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Die Einstellung wird in einem nummerisch auszuwertenden Makro
% gespeichert. Dabei gelten folgende Werte:
% \begin{center}
%   \begin{tabular}{rl}
%     Wert & Ausrichtung \\\hline
%     0    & linksb"undig \\
%     1    & zentriert \\
%     2    & rechtsb"undig \\
%     10000 & nicht antasten \\
%   \end{tabular}
% \end{center}
% Voreingestellt ist "`nicht antasten"'.
%    \begin{macrocode}
\newcommand*{\@alignfrom}{0}
\KOMA@key{fromalign}{%
  \@setnumstate{\@alignfrom}{fromalign}{%
    {left}{0},%
    {center}{1},{centered}{1},{middle}{1},%
    {right}{2},%
    {no}{10000},{false}{10000},{off}{10000}}{#1}%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{fromrule}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Es kann gew"ahlt werden, ob im Absender nach dem Namen oder nach dem
% gesamten Absender eine Linie gesetzt werden soll.
%  \begin{macro}{\@rulefrom}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Die Einstellung wird in einem nummerisch auszuwertenden Makro
% gespeichert. Dabei gelten folgende Werte:
% \begin{center}
%   \begin{tabular}{rl}
%     Wert & Absenderlinie \\\hline
%     0    & keine \\
%     1    & unter dem Name \\
%     2    & unter der Adresse \\
%   \end{tabular}
% \end{center}
% Voreingestellt ist keine Linie.
%    \begin{macrocode}
\newcommand*{\@rulefrom}{0}
\KOMA@key{fromrule}[below]{%
  \@setnumstate{\@rulefrom}{fromrule}{%
    {false}{0},{no}{0},{off}{0},{aftername}{1},%
    {below}{2},{afteraddress}{2},{true}{2},{yes}{2},{on}{2}%
    }{#1}%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{fromphone}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Ob die Telefonnummer im Absender gesetzt werden soll oder nicht,
% kann hier angegeben werden.
%  \begin{macro}{\if@phone}
%    \changes{v2.8q}{2002/01/25}{Neu}
%  \begin{macro}{\@phonetrue}
%    \changes{v2.8q}{2002/01/25}{Neu}
%  \begin{macro}{\@phonefalse}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Gespeichert wird die Information in einem einfachen Schalter.
% Voreingestellt ist keine Telefonnummer im Absender.
%    \begin{macrocode}
\newif\if@phone
\KOMA@key{fromphone}[true]{\@setif{phone}{#1}}%
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{fromfax}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Ob die Faxnummer im Absender gesetzt werden soll oder nicht,
% kann hier angegeben werden.
%  \begin{macro}{\if@fax}
%    \changes{v2.8q}{2002/01/25}{Neu}
%  \begin{macro}{\@faxtrue}
%    \changes{v2.8q}{2002/01/25}{Neu}
%  \begin{macro}{\@faxfalse}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Gespeichert wird die Information in einem einfachen Schalter.
% Voreingestellt ist keine Faxnummer im Absender.
%    \begin{macrocode}
\newif\if@fax
\KOMA@key{fromfax}[true]{\@setif{fax}{#1}}%
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{fromemail}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Ob die E-Mail-Adresse im Absender gesetzt werden soll oder nicht,
% kann hier angegeben werden.
%  \begin{macro}{\if@email}
%    \changes{v2.8q}{2002/01/25}{Neu}
%  \begin{macro}{\@emailtrue}
%    \changes{v2.8q}{2002/01/25}{Neu}
%  \begin{macro}{\@emailfalse}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Gespeichert wird die Information in einem einfachen Schalter.
% Voreingestellt ist keine E-Mail-Adresse im Absender.
%    \begin{macrocode}
\newif\if@email
\KOMA@key{fromemail}[true]{\@setif{email}{#1}}%
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{fromurl}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Ob die URL auf eine Homepage im Absender gesetzt werden soll oder
% nicht, kann hier angegeben werden.
%  \begin{macro}{\if@www}
%    \changes{v2.8q}{2002/01/25}{Neu}
%  \begin{macro}{\@wwwtrue}
%    \changes{v2.8q}{2002/01/25}{Neu}
%  \begin{macro}{\@wwwfalse}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Gespeichert wird die Information in einem einfachen Schalter.
% Voreingestellt ist keine URL im Absender.
%    \begin{macrocode}
\newif\if@www
\KOMA@key{fromurl}[true]{\@setif{www}{#1}}%
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{fromlogo}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Ob ein Logo in den Briefkopf gesetzt werden soll oder
% nicht, kann hier angegeben werden.
%  \begin{macro}{\if@logo}
%    \changes{v2.8q}{2002/01/25}{Neu}
%  \begin{macro}{\@logotrue}
%    \changes{v2.8q}{2002/01/25}{Neu}
%  \begin{macro}{\@logofalse}
%    \changes{v2.8q}{2002/01/25}{Neu}
% Gespeichert wird die Information in einem einfachen Schalter.
% Voreingestellt ist kein Logo im Briefkopf.
%    \begin{macrocode}
\newif\if@logo
\KOMA@key{fromlogo}[true]{\@setif{logo}{#1}}%
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
%
% \subsubsection{Optionen f"ur den Kopf der Folgeseiten in Briefen}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%  \begin{option}{pagenumber}
%    \changes{v2.8q}{2002/01/31}{Neu}
% Bei Briefen kann gew"ahlt werden, ob auf Folgeseiten die Seitenzahl
% im Kopf oder im Fu"s stehen soll. Dabei kann zwischen Seitenzahl
% rechts, links oder zentriert gew"ahlt werden. Voreingestellt ist der
% Fu"s und mittig.
%  \begin{macro}{\@pageat}
%    \changes{v2.8q}{2002/01/31}{Neu}
% In dieser nummerisch auswertbaren Variablen wird gespeichert, wo die
% Seitenzahl stehen soll. Dabei gilt:
% \begin{center}\begin{tabular}{rl}
%   Wert & Bedeutung f"ur die Seitenzahl\\\hline
%   -1   & keine \\
%   0    & im Kopf links \\
%   1    & im Kopf mittig \\
%   2    & im Kopf rechts \\
%   3    & im Fu"s links \\
%   4    & im Fu"s mittig \\
%   5    & im Fu"s rechts \\
% \end{tabular}\end{center}
%    \begin{macrocode}
\newcommand*{\@pageat}{4}
\KOMA@key{pagenumber}{%
  \begingroup
    \@setnumstate{\@tempa}{pagenumber}{%
      {no}{-1},{off}{-1},{false}{-1},%
      {topleft}{0},{headleft}{0},%
      {topmiddle}{1},{topcenter}{1},{topcentered}{1},%
      {headmiddle}{1},{headcenter}{1},{headcentered}{1},%
      {topright}{2},{headright}{2},%
      {botleft}{3},{footleft}{3},%
      {botmiddle}{4},{botcenter}{4},{botcentered}{4},%
      {footmiddle}{4},{footcenter}{4},{footcentered}{4},%
      {botright}{5},{footright}{5},%
      {top}{10},{head}{10},{bot}{11},{foot}{11},%
      {left}{20},{middle}{21},{center}{21},{centered}{21},{right}{22}%
      }{#1}%
    \ifnum\@tempa<10
      \edef\@tempa{\endgroup\edef\noexpand\@pageat{\@tempa}}%
    \else
      \ifnum\@tempa<20
        \@tempcnta\@pageat\relax
        \ifnum\@tempcnta>2
          \advance\@tempcnta by -3
        \fi
        \ifnum\@tempa=11
          \advance\@tempcnta by 3
        \fi
        \edef\@tempa{\endgroup\edef\noexpand\@pageat{\the\@tempcnta}}%
      \else
        \ifnum\@pageat>2
          \edef\@pageat{3}%
        \else
          \edef\@pageat{0}
        \fi
        \@tempcnta\@tempa
        \advance\@tempcnta by -20
        \advance\@tempcnta by\@pageat
        \edef\@tempa{\endgroup\edef\noexpand\@pageat{\the\@tempcnta}}%
      \fi
    \fi
  \@tempa
  }
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
% \subsubsection{Standardoptionen}
%
%  \begin{option}{10pt}
%  \begin{option}{11pt}
%  \begin{option}{12pt}
%  \begin{macro}{\@ptsize}
% Wir definieren \cs{@ptsize} als Grundschriftgr"o"se minus
% 10\,pt. Hier wird allerdings zun"achst nur ein Dummy definiert,
% damit sp"ater \cs{renewcommand} verwendet werden kann.
%    \begin{macrocode}
\newcommand*\@ptsize{%
%<scrlettr>  2%
  }
%    \end{macrocode}
%  \end{macro}
%  \begin{option}{fontsize}
%    \begin{macrocode}
%<*scrlettr>
\KOMA@key{fontsize}{%
  \begingroup
    \setlength{\@tempdima}{#1}
    \addtolength{\@tempdima}{-10\p@}
    \edef\@tempa{\endgroup\noexpand\renewcommand*\noexpand\@ptsize{%
        \strip@pt\@tempdima}}
  \@tempa
  }
%</scrlettr>
\DeclareOption{10pt}{%
%<!scrlettr>  \renewcommand*\@ptsize{0}
%<scrlettr>  \@ObsoleteOption{fontsize=10pt}
  }
\DeclareOption{11pt}{%
%<!scrlettr>  \renewcommand*\@ptsize{1}
%<scrlettr>  \@ObsoleteOption{fontsize=11pt}
  }
\DeclareOption{12pt}{%
%<!scrlettr>  \renewcommand*\@ptsize{2}
%<scrlettr>  \@ObsoleteOption{fontsize=12pt}
  }
%    \end{macrocode}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%
%  \begin{option}{oneside}
%  \begin{option}{twoside}
%  \begin{option}{draft}
%  \begin{option}{final}
%    \begin{macrocode}
%<*scrlettr>
\KOMA@key{twoside}[true]{\@setif{twoside}{#1}%
  \if@twoside\@mparswitchtrue\else\@mpseswitchfalse\fi}
%</scrlettr>
\DeclareOption{oneside}{%
%<!scrlettr>  \@twosidefalse \@mparswitchfalse
%<scrlettr>  \@ObsoleteOption{twoside=false}
  }
%<!scrlettr>\DeclareOption{twoside}{\@twosidetrue  \@mparswitchtrue}
%<*scrlettr>
\KOMA@key{draft}[true]{%
  \begingroup
    \let\@drafttrue=\@tempswatrue
    \let\@draftfalse=\@tempswafalse
    \@setif{draft}{#1}
    \if@tempswa
      \global\setlength{\overfullrule}{5\p@}
    \else
      \global\setlength{\overfullrule}{\z@}
    \fi
  \endgroup
  }
%</scrlettr>
%<!scrlettr>\DeclareOption{draft}{\setlength{\overfullrule}{5pt}}
\DeclareOption{final}{%
%<!scrlettr>  \setlength{\overfullrule}{\z@}
%<scrlettr>  \@ObsoleteOption{draft=false}
  }
%    \end{macrocode}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%
%  \begin{option}{titlepage}
%  \begin{option}{notitlepage}
%  \begin{macro}{\if@titlepage}
%  \begin{macro}{\@titlepagetrue}
%  \begin{macro}{\@titlepagefalse}
% Briefe haben keine Titelei, die "ubrigen Klassen bieten zwei Arten
% der Titelei.
%    \begin{macrocode}
%<*!scrlettr>
\newif\if@titlepage
%<scrartcl>\@titlepagefalse
%<scrreprt|scrbook>\@titlepagetrue
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\DeclareOption{titlepage}{\@titlepagetrue}
\DeclareOption{notitlepage}{\@titlepagefalse}
%</!scrlettr>
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%  \begin{option}{openright}
%  \begin{option}{openany}
%  \begin{macro}{\if@openright}
%  \begin{macro}{\@openrighttrue}
%  \begin{macro}{\@openrightfalse}
% Bei Artikeln und Briefen gibt es keine Kapitel also auch keine
% Schalter, damit diese immer auf rechten Seiten beginnen. Bei den
% anderen Klassen schon.
%    \begin{macrocode}
%<*!scrartcl&!scrlettr>
\newif\if@openright
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\DeclareOption{openright}{\@openrighttrue}
\DeclareOption{openany}{\@openrightfalse}
%</!scrartcl&!scrlettr>
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%  \begin{option}{onecolumn}
%  \begin{option}{twocolumn}
%  \begin{option}{leqno}
%  \begin{option}{fleqno}
% Briefe sind immer einspaltig und kennen keine Gleichungen, also gibt
% es f"ur diese auch die entsprechenden Optionen nicht.
%    \begin{macrocode}
%<*!scrlettr>
\DeclareOption{onecolumn}{\@twocolumnfalse}
\DeclareOption{twocolumn}{\@twocolumntrue}
\DeclareOption{leqno}{\input{leqno.clo}}
\DeclareOption{fleqn}{\input{fleqn.clo}}
%</!scrlettr>
%    \end{macrocode}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%
%  \begin{option}{openbib}
% \changes{v2.3g}{1996/01/14}{\cs{if@openbib} (\cs{@openbibtrue},
%                             \cs{@openbibfalse} entfernt.}
% \changes{v2.3g}{1996/01/14}{Definition der openbib Option neu
%                             implementiert.}
%  \begin{macro}{\@openbib@code}
%  \begin{macro}{\newblock}
% Briefe haben kein Literaturverzeichnis. Alle anderen Klassen bieten
% eine alternative Darstellung daf"ur.
%    \begin{macrocode}
%<*!scrlettr>
\DeclareOption{openbib}{%
  \AtEndOfPackage{%
   \renewcommand*\@openbib@code{%
      \advance\leftmargin\bibindent
      \itemindent -\bibindent
      \listparindent \itemindent
      \parsep \z@
      }%
   \renewcommand*\newblock{\par}}%
}
%</!scrlettr>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
% \subsubsection{Abstract (Zusammenfassung)}
%  \begin{option}{abstracton}
%  \begin{option}{abstractoff}
% Das Abstract (Zusammenfassung) kann mit einem standardm"a"sigen Titel
% versehen werden. Der Titel kann aber auch unterdr"uckt werden.
%
% Bei B"uchern und Briefen gibt es keine Zusammenfassung als
% gesonderte Umgebung.
%
%  \begin{macro}{\if@abstrt}
%  \begin{macro}{\@abstrttrue}
%  \begin{macro}{\@abstrtfalse}
% Die Enscheidung wird in einem Schalter gespeichert.
%    \begin{macrocode}
%<*!scrbook&!scrlettr>
\newif\if@abstrt
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%    \begin{macrocode}
\DeclareOption{abstracton}{\@abstrttrue}
\DeclareOption{abstractoff}{\@abstrtfalse}
%</!scrbook&!scrlettr>
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
% \subsubsection{Briefspezifische Optionen f"ur die erste Seite}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%  \begin{option}{enlargefirstpage}
% \changes{v2.8o}{2001/09/18}{Neue Option}
% Normalerweise wird der Text der ersten Seite entsprechend dem
% normalen Satzspiegel gesetzt. Ist allerdings der Fu"s der ersten
% Seite zu hoch, dann wird der Satzspiegel vertikal entsprechend
% verk"urzt. Mit der Option \texttt{firstpageenlarge} kann erzwungen
% werden, dass im umgekehrten Fall, der Satzspiegel vertikal
% verl"angert wird.
%  \begin{macro}{\if@enlargefp}
%  \begin{macro}{\@enlargefptrue}
%  \begin{macro}{\@enlargefpfalse}
% Gespeichert wird die Information "uber die Optionen in einem
% Schalter.
%    \begin{macrocode}
\newif\if@enlargefp
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\KOMA@key{enlargefirstpage}[true]{%
  \@setif[@enlargefp]{enlargefirstpage}{#1}}
%    \end{macrocode}
%  \end{option}
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
%
% \subsubsection{Optionen f"ur das Absatzlayout}
%
% Ab Version 2.8i k"onnen wir auch mit Avsatzlayouts umgehen, die einen
% Absatzabstand statt einem Absatzeinzug verlangen. Gesteuert wird
% dies "uber Optionen und Schalter.
%
%  \begin{macro}{\if@parskip}
% \changes{v2.8i}{2001/07/22}{Neu}
% \changes{v2.8q}{2001/11/06}{Entf"allt}
% Dieser Schalter steuert intern, ob mit Absatzabstand oder
% Absatzeinzug gearbeitet werden soll. Voreingestellt ist wie bisher
% der Absatzeinzug.
%    \begin{macrocode}
\newif\if@parskip
%    \end{macrocode}
%  \end{macro}
%  \begin{option}{parskip}
% \changes{v2.8i}{2001/07/22}{Neu}
%  \begin{option}{parskip-}
% \changes{v2.8l}{2001/08/16}{Neu}
%  \begin{option}{parskip+}
% \changes{v2.8i}{2001/07/22}{Neu}
%  \begin{option}{parskip*}
% \changes{v2.8i}{2001/07/22}{Neu}
%  \begin{option}{halfparskip}
% \changes{v2.8i}{2001/07/22}{Neu}
%  \begin{option}{halfparskip-}
% \changes{v2.8l}{2001/08/16}{Neu}
%  \begin{option}{halfparskip+}
% \changes{v2.8i}{2001/07/22}{Neu}
%  \begin{option}{halfparskip*}
% \changes{v2.8i}{2001/07/22}{Neu}
%  \begin{option}{parindent}
% \changes{v2.8i}{2001/07/22}{Neu}
% Diese vier Optionen steuern die Umschaltung zwischen den Modi. Dabei
% schalten alle \texttt{parskip}-Optionen einen Absatzabstand ein,
% wohingegen die \texttt{parindent}-Option den Absatzeinzug
% einschaltet. Die \texttt{+}-Variante sorgt au"serdem daf"ur, dass
% die letzte Zeile eines Absatzes maximal zu zweidrittel gef"ullt
% wird. Entsprechend sorgt die \texttt{*}-Variante f"ur eine maximale
% F"ullung von drei Vierteln. Die normale Variante sorgt lediglich
% f"ur einen freien Raum von 1\,em. Die \texttt{-}-Variante sorgt f"ur
% "uberhaupt nichts.
%  \begin{macro}{\scr@parskip}
% \changes{v2.8i}{2001/07/22}{Neu}
% Hiermit wird ggf. der Absatzabstand eingestellt.
%  \begin{macro}{scr@parfillskip}
% \changes{v2.8i}{2001/07/22}{Neu}
%  \begin{macro}{\@parskip@indent}
% \changes{v2.8q}{2001/11/06}{Neu}
% Hiermit wird ggf. die F"ullung der letzten Absatzzeile eingestellt.
% einzustellen ist.
%    \begin{macrocode}
\newcommand*{\scr@parskip}{\setlength{\parskip}{\z@}}
\newcommand*{\scr@parfillskip}{\setlength{\parfillskip}{\z@}}
%<*!scrlettr>
\DeclareOption{parskip}{\@parskiptrue%
  \renewcommand*{\scr@parskip}{%
    \setlength{\parskip}{\baselineskip}%
    \addtolength{\parskip}{\z@ \@plus .1\baselineskip}}
  \renewcommand*{\scr@parfillskip}{%
    \setlength{\parfillskip}{1em \@plus 1fil}}}
\DeclareOption{parskip-}{\@parskiptrue%
  \renewcommand*{\scr@parskip}{%
    \setlength{\parskip}{\baselineskip}%
    \addtolength{\parskip}{\z@ \@plus .1\baselineskip}}
  \renewcommand*{\scr@parfillskip}{%
    \setlength{\parfillskip}{\z@ \@plus 1fil}}}
\DeclareOption{parskip+}{\@parskiptrue%
  \renewcommand*{\scr@parskip}{%
    \setlength{\parskip}{\baselineskip}%
    \addtolength{\parskip}{\z@ \@plus .1\baselineskip}}
  \renewcommand*{\scr@parfillskip}{%
    \setlength{\parfillskip}{.3333\linewidth}
    \addtolength{\parfillskip}{\z@ \@plus 1fil}}}
\DeclareOption{parskip*}{\@parskiptrue%
  \renewcommand*{\scr@parskip}{%
    \setlength{\parskip}{\baselineskip}%
    \addtolength{\parskip}{\z@ \@plus .1\baselineskip}}
  \renewcommand*{\scr@parfillskip}{%
    \setlength{\parfillskip}{.25\linewidth}
    \addtolength{\parfillskip}{\z@ \@plus 1fil}}}
\DeclareOption{halfparskip}{\@parskiptrue%
  \renewcommand*{\scr@parskip}{%
    \setlength{\parskip}{.5\baselineskip}%
    \addtolength{\parskip}{\z@ \@plus .5\baselineskip}}
  \renewcommand*{\scr@parfillskip}{%
    \setlength{\parfillskip}{1em \@plus 1fil}}}
\DeclareOption{halfparskip-}{\@parskiptrue%
  \renewcommand*{\scr@parskip}{%
    \setlength{\parskip}{.5\baselineskip}%
    \addtolength{\parskip}{\z@ \@plus .5\baselineskip}}
  \renewcommand*{\scr@parfillskip}{%
    \setlength{\parfillskip}{\z@ \@plus 1fil}}}
\DeclareOption{halfparskip+}{\@parskiptrue%
  \renewcommand*{\scr@parskip}{%
    \setlength{\parskip}{.5\baselineskip}%
    \addtolength{\parskip}{\z@ \@plus .5\baselineskip}}
  \renewcommand*{\scr@parfillskip}{%
    \setlength{\parfillskip}{.3333\linewidth}
    \addtolength{\parfillskip}{\z@ \@plus 1fil}}}
\DeclareOption{halfparskip*}{\@parskiptrue%
  \renewcommand*{\scr@parskip}{%
    \setlength{\parskip}{.5\baselineskip}%
    \addtolength{\parskip}{\z@ \@plus .5\baselineskip}}
  \renewcommand*{\scr@parfillskip}{%
    \setlength{\parfillskip}{.25\linewidth}
    \addtolength{\parfillskip}{\z@ \@plus 1fil}}}
\DeclareOption{parindent}{\@parskipfalse}
%</!scrlettr>
%<*scrlettr>
\newcommand*{\@parskip@indent}{}
\KOMA@key{parskip}[true]{%
  \begingroup%
    \@tempcnta=-1\edef\@tempa{#1}%
    \def\@tempb{false}\ifx\@tempa\@tempb\@tempcnta=0\fi
    \def\@tempb{off}\ifx\@tempa\@tempb\@tempcnta=0\fi
    \def\@tempb{full-}\ifx\@tempa\@tempb\@tempcnta=1\fi
    \def\@tempb{half-}\ifx\@tempa\@tempb\@tempcnta=2\fi
    \def\@tempb{full}\ifx\@tempa\@tempb\@tempcnta=3\fi
    \def\@tempb{true}\ifx\@tempa\@tempb\@tempcnta=3\fi
    \def\@tempb{on}\ifx\@tempa\@tempb\@tempcnta=3\fi
    \def\@tempb{half}\ifx\@tempa\@tempb\@tempcnta=4\fi
    \def\@tempb{full+}\ifx\@tempa\@tempb\@tempcnta=5\fi
    \def\@tempb{half+}\ifx\@tempa\@tempb\@tempcnta=6\fi
    \def\@tempb{full*}\ifx\@tempa\@tempb\@tempcnta=7\fi
    \def\@tempb{half*}\ifx\@tempa\@tempb\@tempcnta=8\fi
    \let\@tempa\endgroup
    \ifnum \@tempcnta <\z@\relax
      \ClassError{%
        scrlttr2%
        }{You've used an unknown option value}{%
        You've tried to set option `parskip' to value `#1', but
        allowed values\MessageBreak
        are `full-', `full', `full+', `full*', `half-',
        `half', `half+',\MessageBreak
        `half*', `false' and `off' only.\MessageBreak
        You may also use `on' instead of `full'.}%
    \else\ifnum \@tempcnta =\z@
        \def\@tempa{\endgroup\@parskipfalse\@parskip@indent}%
      \else
        \let\@tempb=\relax\let\@tempc=\relax
        \ifodd \@tempcnta
          \def\@tempb{\def\noexpand\scr@parskip{%
              \noexpand\setlength{\parskip}{\baselineskip}%
              \noexpand\addtolength{\parskip}{%
                \z@ \@plus .1\baselineskip}}}%
        \else
          \def\@tempb{\def\noexpand\scr@parskip{%
            \noexpand\setlength{\parskip}{.5\baselineskip}%
            \noexpand\addtolength{\parskip}{%
              \z@ \@plus .5\baselineskip}}}%
        \fi
        \advance\@tempcnta by \m@ne
        \divide\@tempcnta by \tw@
        \ifcase\@tempcnta
          \def\@tempc{\def\noexpand\scr@parfillskip{%
            \noexpand\setlength{\parfillskip}{\z@ \@plus 1fil}}}%
        \or
          \def\@tempc{\def\noexpand\scr@parfillskip{%
            \noexpand\setlength{\parfillskip}{1em \@plus 1fil}}}%
        \or
          \def\@tempc{\def\noexpand\scr@parfillskip{%
            \noexpand\setlength{\parfillskip}{.3333\linewidth}%
            \noexpand\addtolength{\parfillskip}{\z@ \@plus 1fil}}}%
        \or
          \def\@tempc{\def\noexpand\scr@parfillskip{%
            \noexpand\setlength{\parfillskip}{.25\linewidth}%
            \noexpand\addtolength{\parfillskip}{\z@ \@plus 1fil}}}%
        \fi
        \edef\@tempa{%
          \endgroup\noexpand\@parskiptrue\@tempb\@tempc%
          \noexpand\@parskip@indent}%
      \fi
    \fi
  \@tempa
  }   
%</scrlettr>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%
%
% \subsubsection{Optionen zur Steuerung der Numerierung}
%
% In Briefen gibt es keine Gliederung also auch keine Optionen f"ur
% die Steuerung der Nummerierung.
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
%  \begin{option}{pointednumbers}
% \changes{v2.3h}{1995/01/19}{Option zum Einschalten des Punktes nach
%                             Nummern.}
% \changes{v2.4g}{1996/11/04}{Die Option hei"st nun wirklich so, bei
%                             \texttt{pointednumber} wird explizit ein
%                             Fehler gemeldet.}
% \changes{v2.4g}{1996/11/04}{\cs{@altsecnumformatfalse} wird direkt auf
%                             \cs{@altsecnumformattrue} gesetzt.}
%  \begin{option}{pointlessnumbers}
% \changes{v2.3h}{1995/01/19}{Option zur Verhinderung des Punktes nach
%                             Nummern.}
% \changes{v2.4g}{1996/11/04}{Die Option hei"st nun wirklich so, bei
%                             \texttt{pointlessnumber} wird explizit
%                             ein Fehler gemeldet.}
% \changes{v2.4g}{1996/11/04}{\cs{@altsecnumformattrue} wird direkt auf
%                             \cs{@altsecnumformatfalse} gesetzt.}
% Normalerweise wird automatisch entschieden, ob Nummern mit einem Punkt
% enden m"ussen oder nicht. Um dies abzuschalten, mu"s nur der
% gew"unschte Zustand eingeschaltet und die Umschaltm"oglichkeit entfernt
% werden. Dies kann jedoch erst am Ende der Class geschehen.
%    \begin{macrocode}
\DeclareOption{pointednumbers}
  {\AtEndOfClass{\@altsecnumformattrue
                 \global\let\@altsecnumformatfalse\@altsecnumformattrue}}
\DeclareOption{pointednumber}
  {\AtEndOfClass{\@altsecnumformattrue
                 \global\let\@altsecnumformatfalse\@altsecnumformattrue}
   \ClassError
%<scrbook>    {scrbook}
%<scrreprt>    {scrreprt}
%<scrartcl>    {scrartcl}
    {undefined option `pointednumber' instead of `pointednumbers'}
    {You've used the class-option `pointednumber'.\MessageBreak
     This name was an implementation-error at versions from 2.3h till
     2.4f.\MessageBreak
     The correct name is `pointednumbers'.
     Change this at your document.\MessageBreak
     If you'll continue, the option `pointednumbers' will be used.}}
\DeclareOption{pointlessnumbers}
  {\AtEndOfClass{\@altsecnumformatfalse
                 \global\let\@altsecnumformattrue\@altsecnumformatfalse}}
\DeclareOption{pointlessnumber}
  {\AtEndOfClass{\@altsecnumformatfalse
                 \global\let\@altsecnumformattrue\@altsecnumformatfalse}
   \ClassError
%<scrbook>    {scrbook}
%<scrreprt>    {scrreprt}
%<scrartcl>    {scrartcl}
    {undefined option `pointlessnumber' instead of `pointlessnumbers'}
    {You've used the class-option `pointlessnumber'.\MessageBreak
     This name was an implementation-error at versions from 2.3h till
     2.4f.\MessageBreak
     The correct name is `pointlessnumbers'.
     Change this at your document.\MessageBreak
     If you'll continue, the option `pointlessnumbers' will be used.}}
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
% \subsubsection{Optionen zur Steuerung der "Uberschriften}
%
% In Briefen gibt es keine Gliederung also auch keine Optionen f"ur
% die Steuerung der "Uberschriften.
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
%  \begin{option}{bigheadings}
% \changes{v2.3h}{1996/01/20}{Neue Option}
% \changes{v2.4g}{1996/11/04}{Die Option hei"st nun wirklich so. Bei
%                             Verwendung des alten, falschen Namens
%                             wird ein Fehler ausgegeben}
%  \begin{macro}{\@bigheadings}
%  \begin{option}{normalheadings}
% \changes{v2.3h}{1996/01/20}{Neue Option}
% \changes{v2.4g}{1996/11/04}{Die Option hei"st nun wirklich so. Bei
%                             Verwendung des alten, falschen Namens
%                             wird ein Fehler ausgegeben}
%  \begin{macro}{\@normalheadings}
%  \begin{option}{smallheadings}
% \changes{v2.3h}{1996/01/20}{Neue Option}
% \changes{v2.4g}{1996/11/04}{Die Option hei"st nun wirklich so. Bei
%                             Verwendung des alten, falschen Namens
%                             wird ein Fehler ausgegeben}
%  \begin{macro}{\@smallheadings}
% Neuerdings kann zwischen verschiedenen "Uberschriftgr"o"sen umgeschaltet
% werden, wobei die bisherige Gr"o"se als gro"s gilt und
% voreingestellt wird.
% \changes{v2.3h}{1996/01/20}{Die Gr"o"se von \cs{chapter} um eine Stufe
%                             veringert.}
% \changes{v2.3h}{1996/01/20}{Verwendung von \cs{chapterheadstartvskip}
%                             und \cs{chapterheadendvskip} an Stelle von
%                             festen vertikalen Abst"anden am Anfang und
%                             am Ende eines Kapitels.}
% \changes{v2.7c}{2000/01/19}{Vertikale Abst"ande nach der
%                             Kapitel"uberschrift geringf"ugig
%                             ver"andert und mit Leim versehen, 
%                             um mit \cs{flushbottom} zu besseren
%                             Ergebnissen zu gelangen.}  
%    \begin{macrocode}
\newcommand\@bigheadings
  {\AtEndOfClass{
%<*scrbook|scrreprt>
    \renewcommand*{\chapterheadstartvskip}{\vspace*{2.3\baselineskip}}
    \renewcommand*{\chapterheadendvskip}{\vspace{1.725\baselineskip
        \@plus .115\baselineskip \@minus .192\baselineskip}}
%</scrbook|scrreprt>
    \let\size@part\Huge
    \let\size@partnumber\huge
%<scrbook|scrreprt>    \let\size@chapter\huge
    \let\size@section\Large
    \let\size@subsection\large
    \let\size@subsubsection\normalsize
    \let\size@paragraph\normalsize
    \let\size@subparagraph\normalsize}}
\DeclareOption{bigheadings}{\@bigheadings}
\DeclareOption{bigheading}{\@bigheadings
  \ClassError
%<scrbook>    {scrbook}
%<scrreprt>    {scrreprt}
%<scrartcl>    {scrartcl}
    {undefined option `bigheading' instead of `bigheadings'}
    {You've used the old option name `bigheading'!\MessageBreak
     The correct name of the option is `bigheadings'.\MessageBreak
     The old name was an implementation error from\MessageBreak
     version 2.3h till 2.4f.\MessageBreak
     You should change this at your document!\MessageBreak
     If you'll continue, option `bigheadings' will be used.}}
\newcommand\@normalheadings
  {\AtEndOfClass{
%<*scrbook|scrreprt>
    \renewcommand*{\chapterheadstartvskip}{\vspace*{2\baselineskip}}
    \renewcommand*{\chapterheadendvskip}{\vspace{1.5\baselineskip
        \@plus .1\baselineskip \@minus .167\baselineskip}}
%</scrbook|scrreprt>
    \let\size@part\huge
    \let\size@partnumber\huge
%<*scrbook|scrreprt>
    \let\size@chapter\LARGE
    \let\size@section\Large
    \let\size@subsection\large
%</scrbook|scrreprt>
%<*scrartcl>
    \let\size@section\large
    \let\size@subsection\normalsize
%</scrartcl>
    \let\size@subsubsection\normalsize
    \let\size@paragraph\normalsize
    \let\size@subparagraph\normalsize}}
\DeclareOption{normalheadings}{\@normalheadings}
\DeclareOption{normalheading}{\@normalheadings
  \ClassError
%<scrbook>    {scrbook}
%<scrreprt>    {scrreprt}
%<scrartcl>    {scrartcl}
    {undefined option `normalheading' instead of `normalheadings'}
    {You've used the old option name `normalheading'!\MessageBreak
     The correct name of the option is `normalheadings'.\MessageBreak
     The old name was an implementation error from\MessageBreak
     version 2.3h till 2.4f.\MessageBreak
     You should change this at your document!\MessageBreak
     If you'll continue, option `normalheadings' will be used.}}
\newcommand\@smallheadings
  {\AtEndOfClass{
%<*scrbook|scrreprt>
    \renewcommand*{\chapterheadstartvskip}{\vspace*{1.8\baselineskip}}
    \renewcommand*{\chapterheadendvskip}{\vspace{1.35\baselineskip
        \@plus 0.09\baselineskip \@minus .15\baselineskip}}
%</scrbook|scrreprt>
    \let\size@part\LARGE
    \let\size@partnumber\LARGE
%<*scrbook|scrreprt>
    \let\size@chapter\Large
    \let\size@section\large
%</scrbook|scrreprt>
%<*scrartcl>
    \let\size@section\normalsize
%</scrartcl>
    \let\size@subsection\normalsize
    \let\size@subsubsection\normalsize
    \let\size@paragraph\normalsize
    \let\size@subparagraph\normalsize}}
\DeclareOption{smallheadings}{\@smallheadings}
\DeclareOption{smallheading}{\@smallheadings
  \ClassError
%<scrbook>    {scrbook}
%<scrreprt>    {scrreprt}
%<scrartcl>    {scrartcl}
    {undefined option `smallheading' instead of `smallheadings'}
    {You've used the old option name `smallheading'!\MessageBreak
     The correct name of the option is `smallheadings'.\MessageBreak
     The old name was an implementation error from\MessageBreak
     version 2.3h till 2.4f.\MessageBreak
     You should change this at your document!\MessageBreak
     If you'll continue, option `smallheadings' will be used.}}
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%  \end{macro}
%  \end{option}
%  \end{macro}
%  \end{option}
%
%
%  \begin{option}{chapterprefix}
% \changes{v2.8}{2001/06/15}{Neu}
%  \begin{option}{nochapterprefix}
% \changes{v2.8}{2001/06/15}{Neu}
% Normalerweise verwenden |scrbook.cls| und |scrreprt.cls| nicht die
% enorm gro"sen "Uberschriften von |book.cls| und |report.cls|, die mit
% einem Absatz "`Kapitel \emph{Nummer}"' beginnen. Mit der Option
% |chapterprefix| kann dies jetzt wieder aktiviert werden. Die Option,
% zur Deaktivierung hei"st entsprechend |nochapterprefix|. Um f"ur
% Spezialanwendungen auch innerhalb des Dokuments eine Umschaltung zu
% erm"oglichen bzw. f"ur die Optionen "`appendixprefix"' und
% "`noappendixprefix"' erfolgt die Umschaltung durch einen Schalter.
%  \begin{macro}{\if@chapterprefix}
%  \begin{macro}{\@chapterprefixtrue}
%  \begin{macro}{\@chapterprefixfalse}
%    \begin{macrocode}
%<*scrbook|scrreprt>
\newif\if@chapterprefix
\DeclareOption{chapterprefix}{\@chapterprefixtrue}
\DeclareOption{nochapterprefix}{\@chapterprefixfalse}
%</scrbook|scrreprt>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%  \end{option}
%
%
%  \begin{option}{appendixprefix}
% \changes{v2.8}{2001/06/15}{Neu}
%  \begin{option}{noappendixprefix}
% \changes{v2.8}{2001/06/15}{Neu}
% Will man abweichend von den Optionen |chapterprefix| und
% |nochapterprefix| die gro"sen "Uberschriften f"ur den Anhang
% aktivieren oder deaktivieren, so kann man das mit dieser Option
% erreichen. Allerdings setzt diese keinen Schalter, sondern ein
% Zusatzmakro, das auch f"ur andere Zwecke genutzt werden kann.
%    \begin{macrocode}
%<*scrbook|scrreprt>
\DeclareOption{appendixprefix}{\def\appendixmore{\@chapterprefixtrue}}
\DeclareOption{noappendixprefix}{\def\appendixmore{\@chapterprefixfalse}}
%</scrbook|scrreprt>
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
% Allerdings gibt es bei Briefen ebenfalls den Befehl
% |\cleardoublepage|, also auch die zugeh"origen Optionen.
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
%  \begin{option}{cleardoubleempty}
% \changes{v2.8a}{2001/06/18}{Neu}
%  \begin{option}{cleardoubleplain}
% \changes{v2.8a}{2001/06/18}{Neu}
%  \begin{option}{cleardoublestandard}
% \changes{v2.8a}{2001/06/18}{Neu}
%  \begin{option}{cleardoublepage}
% \changes{v2.8q}{2001/10/17}{Neu bei \texttt{scrlttr2}}
% \changes{v2.8q}{2001/11/06}{\cs{cleardoublestandardpage} statt
%                            \cs{cleardoublestandard}}
%  \begin{macro}{\cleardoublestandardpage}
% \changes{v2.8a}{2001/06/18}{Neu}
%  \begin{macro}{\cleardoubleemptypage}
% \changes{v2.8a}{2001/06/18}{Neu}
%  \begin{macro}{\cleardoubleplainpage}
% \changes{v2.8a}{2001/06/18}{Neu}
% Bei Verwendung von |twoside| und |openright| bei den Klassen
% |scrbook.cls| und |scrreprt.cls| wird bei |\chapter| implizit
% |\cleardoublepage| ausgef"uhrt. Das f"uhrt ggf. normalerweise zu
% einer linken Seite, auf der noch der Kolumnentitel des vorherigen
% Kapitels und eine Seitenzahl steht. H"aufig wird stattdessen nur
% eine Seitenzahl oder auch gar nichts gew"unscht. Es soll also der
% Seitenstil |plain| oder |empty| verwendet werden. Dies wird mit
% den beiden neuen Optionen erm"oglicht. Dazu werden auch gleich drei
% neue Makros definiert:
%    \begin{macrocode}
\newcommand*{\cleardoublestandardpage}{}
\let\cleardoublestandardpage\cleardoublepage
\newcommand*{\cleardoubleemptypage}{\clearpage%
  {\thispagestyle{empty}\cleardoublestandardpage}}
\newcommand*{\cleardoubleplainpage}{\clearpage%
  {\thispagestyle{plain}\cleardoublestandardpage}}
%<*!scrlettr>
\DeclareOption{cleardoubleempty}{%
  \let\cleardoublepage\cleardoubleemptypage}
\DeclareOption{cleardoubleplain}{%
  \let\cleardoublepage\cleardoubleplainpage}
\DeclareOption{cleardoublestandard}{%
  \let\cleardoublepage\cleardoublestandardpage}
%</!scrlettr>
%<*scrlettr>
\DeclareOption{cleardoubleempty}{%
  \@ObsoleteOption{cleardoublepage=empty}}
\DeclareOption{cleardoubleplain}{%
  \@ObsoleteOption{cleardoublepage=plain}}
\DeclareOption{cleardoublestandard}{%
  \@ObsoleteOption{cleardoublepage=standard}}
\KOMA@key{cleardoublepage}{%
  \begingroup%
    \def\@tempc{%
      \endgroup%
      \ClassError{%
        scrlttr2%
        }{You've used an unknown switch value}{%
        You've tried to set switch `cleardoublepage' to value
        `#1', but\MessageBreak
        allowed switch values are `emtpy', `plain' and
        `standard' only.}}
    \edef\@tempa{#1}%
    \def\@tempb{empty}\ifx\@tempa\@tempb%
      \def\@tempc{\endgroup%
        \let\cleardoublepage\cleardoubleemptypage}\fi
    \def\@tempb{plain}\ifx\@tempa\@tempb%
      \def\@tempc{\endgroup%
        \let\cleardoublepage\cleardoubleplainpage}\fi
    \def\@tempb{standard}\ifx\@tempa\@tempb%
      \def\@tempc{\endgroup%
        \let\cleardoublepage\cleardoublestandardpage}\fi
  \@tempc}
%</scrlettr>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%  \end{option}
%  \end{option}
%  \end{option}
%
%
% \subsubsection{Optionen zur Beeinflussung des Inhaltsverzeichnisses}
%
% In Briefen gibt es keine Gliederung also auch keine Optionen f"ur
% die Beinflussung des Inhaltsverzeichnisses.
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
%  \begin{option}{liststotoc}
% \changes{v2.3h}{1995/01/21}{Neue Option}
% \changes{v2.8b}{2001/06/26}{Verwendung von \cs{float@headings}}
% \changes{v2.8g}{2001/07/18}{\cs{float@headings} umbenannt in
%                             \cs{float@listhead}} 
% Die Option sorgt daf"ur, da"s das Abbildungs- und das
% Tabellenverzeichnis im Inhalsverzeichnis aufgef"uhrt werden. Dazu
% muss nur \cs{float@listhead} umdefiniert werden.
% \changes{v2.4a}{1996/03/13}{\cs{listtabelname} durch \cs{listtablename}
%                             ersetzt.}
%  \begin{macro}{\float@listhead}
%    \begin{macrocode}
\DeclareOption{liststotoc}{%
  \AtEndOfClass{%
    \renewcommand*{\float@listhead}[1]{%
%<scrartcl>      \addsec{#1}
%<!scrartcl>      \addchap{#1}
      \@mkboth{#1}{#1}%
      \if@dynlist%
        \newcommand*{\scr@starttoc}{}%
        \let\scr@starttoc=\@starttoc%
        \renewcommand*{\@starttoc}[1]{%
          \before@starttoc{##1}\scr@starttoc{##1}\after@starttoc{##1}}%
      \fi%
      }}
  }
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{liststotocnumbered}
% \changes{v2.8q}{2002/04/08}{dem langj"ahrigen Druck nachgegeben}
% Die Option sorgt daf"ur, da"s das Abbildungs- und das
% Tabellenverzeichnis nummerierte Kapitel/Abschnitte werden. Dazu
% muss nur \cs{float@listhead} umdefiniert werden. Ich halte diese
% Option selbst f"ur wenig sinnvoll.
%  \begin{macro}{\float@listhead}
%    \begin{macrocode}
\DeclareOption{liststotocnumbered}{%
  \AtEndOfClass{%
    \renewcommand*{\float@listhead}[1]{%
%<scrartcl>      \section{#1}
%<!scrartcl>      \chapter{#1}
      \@mkboth{#1}{#1}%
      \if@dynlist%
        \newcommand*{\scr@starttoc}{}%
        \let\scr@starttoc=\@starttoc%
        \renewcommand*{\@starttoc}[1]{%
          \before@starttoc{##1}\scr@starttoc{##1}\after@starttoc{##1}}%
      \fi%
      }}
  }
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{bibtotoc}
% \changes{v2.3h}{1995/01/21}{Neue Option.}
% \changes{v2.6b}{2000/05/26}{\cs{@mkboth} eingef"ugt.}
% \changes{v2.6c}{2000/06/10}{\cs{bibpreamble} eingef"ugt.}
% \changes{v2.7}{2001/01/03}{Klammerung koorigiert.}
% \changes{v2.7j}{2001/06/27}{Setzen der Pr"aambel in die
%                             thebibliography-Umgebung verschoben}
% Die Option sorgt daf"ur, da"s das Literaturverzeichnis im
% Inhaltsverzeichnis aufgef"uhrt wird.
%  \begin{option}{bibtotocnumbered}
% \changes{v2.3h}{1995/01/21}{Neue Option.}
% \changes{v2.6b}{2000/05/26}{\cs{@mkboth} eingef"ugt.}
% \changes{v2.6c}{2000/06/10}{\cs{bibpreamble} eingef"ugt.}
% \changes{v2.7}{2001/01/03}{Klammerung koorigiert.}
% \changes{v2.7b}{2001/01/05}{\cs{setchapterpreamble} wird verwendet.}
% \changes{v2.7i}{2001/05/17}{\cs{chapter} statt \cs{addchap}}
% \changes{v2.7j}{2001/06/27}{Setzen der Pr"aambel in die
%                             thebibliography-Umgebung verschoben}
% Wobei auch eine normal numerierte Variante m"oglich ist.
%  \begin{macro}{\bib@heading}
%    \begin{macrocode}
\DeclareOption{bibtotoc}
  {\AtEndOfClass{%
    \renewcommand*\bib@heading{%
%<*scrartcl>
      \addsec{\refname}
      \@mkboth{\refname}{\refname}
%</scrartcl>
%<*scrbook|scrreprt>
      \addchap{\bibname}
      \@mkboth{\bibname}{\bibname}
%</scrbook|scrreprt>
  }}}
\DeclareOption{bibtotocnumbered}
  {\AtEndOfClass{%
    \renewcommand*\bib@heading{%
%<*scrartcl>
      \section{\refname}
      \@mkboth{\refname}{\refname}    
%</scrartcl>
%<*scrbook|scrreprt>
      \chapter{\bibname}
      \@mkboth{\bibname}{\bibname}
%</scrbook|scrreprt>
  }}}
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%  \end{option}
%
%  \begin{option}{idxtotoc}
% \changes{v2.3h}{1995/01/21}{Neue Option.}
% Die Option sorgt daf"ur, da"s der Index auch im Inhaltsverzeichnis
% erscheint.
%  \begin{macro}{\idx@heading}
% Dazu wird das interne Makro |\idx@heading| umdefiniert, "uber das
% die "uberschrift gesetzt und der Kolumnentitel angepa"st wird.
% \changes{v2.4c}{1996/04/04}{Kolumnentitel werden nun korrekt behandelt.}
% \changes{v2.4g}{1996/11/04}{Index auch bei scrartcl wieder zweispaltig.}
% \changes{v2.6c}{2000/06/10}{Im Index kann nach der "Uberschrift eine
%                             Preambel gesetzt werden}
% \changes{v2.7a}{2001/01/04}{F"ur \texttt{scrbook} und \texttt{scrreprt}
%                             die Link-Erzeugung mit \texttt{hyperref}
%                             verbessert.}
% \changes{v2.7j}{2001/05/27}{Setzen der Pr"aambel in die
%                             theindex-Umgebung verschoben}
% An dieser Stelle m"u"s daf"ur gesorgt werden, da"s im Falle von
% \texttt{scrbook} und \texttt{scrreprt} das Makro \cs{@schapter} verwendet
% wird. Damit dies hier m"oglich ist mu"sten tiefreifendere "Anderungen am
% \LaTeX-Kernel bzw. am Gliederungsbefehl |\chapter| vorgenommen werden.
% Die urspr"ungliche Definition sah so aus:
% \begin{verbatim}
% \renewcommand*\idx@heading{%
%   \if@twoside\cleardoublepage\else\clearpage\fi%
%   \@mkboth{\indexname}{\indexname}%
% <scrreprt|scrbook>   \addcontentsline{toc}{chapter}{\indexname}%
%   \twocolumn[%
% <scrartcl>   \addsec
% <scrreprt|scrbook>    \@makeschapterhead
%     {\indexname}\index@preamble]%
% }
% \end{verbatim}
% Die neue Definition wurde wie folgt ge"andert:
%    \begin{macrocode}
\DeclareOption{idxtotoc}
 {\AtEndOfClass{%
   \renewcommand*\idx@heading{%
     \if@twoside\cleardoublepage\else\clearpage\fi%
%<scrartcl>     \twocolumn[\addsec{\indexname}]
%<scrreprt|scrbook>     \twocolumn[\addchap{\indexname}]
     \@mkboth{\indexname}{\indexname}%
 }}}
%    \end{macrocode}
%  \end{macro}
%  \end{option}
%
%
%  \begin{option}{tocleft}
% \changes{v2.8q}{2001/11/14}{Neue Option}
%  \begin{option}{tocindent}
% \changes{v2.8q}{2001/11/14}{Neue Option}
% Optionen f"ur zwei unterschiedliche Darstellungen des
% Inhaltsverzeichnisses. Die Variante |tocindent| ist die altbekannte
% Variante. Bei |tocleft| hingegen wird eine tabellenartige Form
% verwendet, bei der die Nummern, Texte und Seitenzahlen jeweils
% untereinander stehen. Der f"ur die Nummern ben"otigte Platz wird
% dabei automatisch ermittelt.
%  \begin{macro}{\if@tocleft}
% \changes{v2.8q}{2001/11/14}{Neuer Schalter}
%  \begin{macro}{\@toclefttrue}
%  \begin{macro}{\@tocleftfalse}
% Die Wahl der Darstellungsart wird in einem Schalter gespeichert.
%    \begin{macrocode}
\newif\if@tocleft
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\DeclareOption{tocleft}{\@toclefttrue}
\DeclareOption{tocindent}{\@tocleftfalse}
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
%  \begin{option}{listsleft}
% \changes{v2.8q}{2001/11/14}{Neue Option}
%  \begin{option}{listsindent}
% \changes{v2.8q}{2001/11/14}{Neue Option}
% Optionen f"ur zwei unterschiedliche Darstellungen der
% Verzeichnisses von Gleitumgebungen. Die Variante |listindent| ist
% die altbekannte Variante mit einem festen Einzug der Nummer. Bei
% |listleft| hingegen wird der f"ur die Nummern ben"otigte Platz
% automatisch ermittelt.
%  \begin{macro}{\if@dynlist}
% \changes{v2.8q}{2001/11/14}{Neuer Schalter}
%  \begin{macro}{\@dynlisttrue}
%  \begin{macro}{\@dynlistfalse}
% Die Wahl der Darstellungsart wird in einem Schalter gespeichert.
%    \begin{macrocode}
\newif\if@dynlist
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\DeclareOption{listsleft}{\@dynlisttrue}
\DeclareOption{listsindent}{\@dynlistfalse}
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
%
% \subsubsection{Briefspezifische Optionen f"ur das Adressfenster}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%  \begin{option}{addrfield}
% \changes{v2.8q}{2001/10/09}{Neu}
% Das Adressfeld f"ur Fensterumschl"age kann mit |addrfield| ein- und
% ausgeschaltet werden
%  \begin{macro}{\if@afield}
%  \begin{macro}{\if@afieldtrue}
%  \begin{macro}{\if@afieldfalse}
% Die Speicherung erfolgt wiederum in einem Schalter.
%    \begin{macrocode}
\newif\if@afield\@afieldtrue
\KOMA@key{addrfield}[true]{\@setif[@afield]{addrfield}{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{backaddress}
%    \changes{v2.8q}{2002/01/22}{Neu}
% Im Adressfeld kann die R"ucksendeadresse gesetzt werden. Dies
% geschieht nun nicht mehr allein durch Definition einer
% R"ucksendeadresse, sondern auch durch eine Option.
%  \begin{macro}{\if@baddr}
%  \begin{macro}{\@baddrtrue}
%  \begin{macro}{\@baddrfalse}
% Die Einstellung der Option wird in einem Schalter gespeichert.
%    \begin{macrocode}
\newif\if@baddr\@baddrtrue
\KOMA@key{backaddress}[true]{\@setif[@baddr]{backaddress}{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{subject}
% \changes{v2.8q}{2001/10/09}{Neu}
% Ein Betreff-Titel kann mit |subject| ein- und abgeschaltet
% werden. In England und Frankreich scheint es teilweise "ublich zu
% sein, den Betreff erst nach der Anrede und daf"ur zentriert zu
% setzen\footnote{Ich kann mir nur m"uhsahm eine Bemerkung dazu
%   verkneifen.}. 
% Deshalb kann alternativ zum Einschalten des Betreff-Titels hier auch
% dies aktiviert werden.
%  \begin{macro}{\if@subj}
%  \begin{macro}{\@subjtrue}
%  \begin{macro}{\@subjfalse}
%  \begin{macro}{\if@subjafter}
%  \begin{macro}{\@subjaftertrue}
%  \begin{macro}{\@subjafterfalse}
% Die Speicherung erfolgt in zwei Schaltern.
%    \begin{macrocode}
\newif\if@subj
\newif\if@subjafter
\KOMA@key{subject}[true]{%
  \begingroup
    \edef\@tempa{#1}%
    \def\@tempb{afteropening}%
    \ifx\@tempa\@tempb\endgroup\@subjaftertrue
    \else
      \def\@tempb{beforeopening}%
      \ifx\@tempa\@tempb\endgroup\@subjafterfalse
      \else
        \endgroup\def\@setif@alsoerr{, `afteropening' and
          `beforeopening'\MessageBreak}%
        \@setxif[@subj]{subject}{#1}{titled}{untitled}%
      \fi
    \fi
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%  \begin{option}{locfield}
% \changes{v2.8q}{2001/10/09}{Neu}
% Mit Hilfe der Optione |locfield| kann der Platz neben dem Adressfeld
% gro"s oder klein gew"ahlt werden.
%  \begin{macro}{\if@bigloc}
%  \begin{macro}{\@bigloctrue}
%  \begin{macro}{\@biglocfalse}
% Die Einstellung wird in einem Schalter gespeichert.
%    \begin{macrocode}
\newif\if@bigloc
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\KOMA@key{locfield}[wide]{\@setxif[@bigloc]{locfield}{#1}{wide}{narrow}}
\DeclareOption{wlocfield}{\@ObsoleteOption{locfield=wide}}
\DeclareOption{slocfield}{\@ObsoleteOption{locfield=narrow}}
%    \end{macrocode}
%  \end{option}
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
% \subsection{Briefspezifische Optionen f"ur Faltmarken}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%
%  \begin{option}{foldmarks}
% \changes{v2.8q}{2001/09/10}{Neu}
% Die Faltmarken k"onnen mit |foldmarks| aktiviert und deaktiviert
% werden.
%  \begin{macro}{\if@fold}
%  \begin{macro}{\@foldtrue}
%  \begin{macro}{\@foldfalse}
% Ob Faltmarken gesetzt werden sollen oder nicht, wird in einem
% Schalter gespeichert.
%    \begin{macrocode}
\newif\if@fold\@foldtrue
\KOMA@key{foldmarks}[true]{\@setif[@fold]{foldmarks}{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
% \subsubsection{Briefspezifische Optionen f"ur die Gesch"aftszeile}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%  \begin{option}{numericaldate}
% \changes{v2.8q}{2001/10/07}{Neue Option (an Stelle von
%                             \texttt{scrdate} und \texttt{orgdate})}
% Es kann zwischen dem Originaldatum, das beispielsweise von
% \texttt{german.sty} definiert wird, und dem \texttt{scrlttr2}-Datum
% gew"ahlt werden. Nat"urlich gibt es diese Optionen nur bei Briefen.
%  \begin{macro}{\if@orgdate}
%  \begin{macro}{\@orgdatetrue}
%  \begin{macro}{\@orgdatefalse}
% Die Einstellung wird in einem Schalter gespeichert.
%    \begin{macrocode}
\newif\if@orgdate\@orgdatetrue
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
% Dummerweise besitzt der alte Schalter genau die gegenteilige
% Bedeutung der Option, deshalb muss der Schalter zweimal invertiert
% werden.
%    \begin{macrocode}
\KOMA@key{numericaldate}[true]{%
  \if@orgdate\@orgdatefalse\else\@orgdatetrue\fi
  \@setif[@orgdate]{numericaldate}{#1}
  \if@orgdate\@orgdatefalse\else\@orgdatetrue\fi
}
\DeclareOption{scrdate}{\@ObsoleteOption{numericaldate=true}}
\DeclareOption{orgdate}{\@ObsoleteOption{numericaldate=false}}
%    \end{macrocode}
%  \end{option}
%
%
%  \begin{option}{refline}
% \changes{v2.8n}{2001/09/08}{Neue Option}
% Kopf und Fu"s der ersten Seite sind normalweise so breit, dass sie
% zur Adresse des Empf"angers passen. F"ur die Gesch"aftszeile gibt es
% zwei Alternativen, eine breite und eine, deren Breite der Textbreite
% entspricht. Voreingestellt ist die Textbreite.
%  \begin{macro}{\if@refwide}
% \changes{v2.8n}{2001/09/08}{Neuer Schalter}
%  \begin{macro}{\@refwidetrue}
%  \begin{macro}{\@refwidefalse}
% Gespeichert wird die Information in einem Schalter.
%    \begin{macrocode}
\newif\if@refwide
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\KOMA@key{refline}[wide]{\@setxif[@refwide]{refline}{#1}{wide}{narrow}}
%    \end{macrocode}
%  \end{option}
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
%
% \subsubsection{Optionen f"ur den Satzspiegel}
%
% \changes{v2.6}{2000/01/04}{ab jetzt sind auch die Optionen f"ur die
%                            Schriftgr"o"sen variabel.}
%  \begin{option}{BCOR}
% \changes{v2.2a}{1995/01/25}{nun als Option verf"ugbar.}
% \changes{v2.2c}{1995/05/25}{nicht mehr im Kompatibilit"atsmodus.}
%  \begin{option}{DIV}
% \changes{v2.2a}{1995/01/25}{nun als Option verf"ugbar}
% \changes{v2.2c}{1995/05/25}{nicht mehr im Kompatibilit"atsmodus}
% Die Optionen |BCOR|, |DIV| und die Papiergr"o"sen m"ussen f"ur ihre
% Weiterleitung an das
% \emph{typearea}-package gesondert erkannt werden. Da die Optionen
% Parameter besitzen, k"onnen sie nur mit |\DeclareOption*| verarbeitet
% werden. Im Kompatibilit"atsmodus erfolgt eine gesonderte Behandlung.
%    \begin{macrocode}
%<!scrlettr>\if@compatibility\else
  \DeclareOption*{%
%<*scrlettr>
%    \end{macrocode}
% Bei der Briefklasse tritt eine Besonderheit ein. Hier ist es
% m"oglich, spezielle \texttt{lco}-Dateien zu definieren, die "uber
% Optionen geladen werden k"onnen. Die unterschiedlichen Brieftypen
% sind ein Fall f"ur solche \emph{\textbf{l}etter \textbf{c}lass
% \textbf{o}ption} Dateien. Wurde eine solche Datei geladen, ist die
% Option nat"urlich auch nicht mehr unbenutzt.
% \changes{v2.8q}{2001/10/17}{Endung "`.lco"' beim
%                             \cs{LoadLetterOption}-Aufruf in
%                             \cs{DeclareOption*} entfernt}
% \changes{v2.8q}{2001/10/18}{\cs{expandafter} beim Aufruf von
%                             \cs{KOMAoptions} erg"anzt}
%    \begin{macrocode}
    \let\scr@save@KV@errx=\KV@errx%
    \IfFileExists{\CurrentOption.lco}{%
      \begingroup\edef\@tempa{\endgroup%
        \noexpand\AtEndOfClass{%
          \noexpand\LoadLetterOption{\CurrentOption}}%
        }%
      \@tempa\let\KV@errx\@gobble
      }{%
      \renewcommand*{\KV@errx}[1]{\OptionNotUsed}
      }
%    \end{macrocode}
% An dieser Stelle muss nun die Expansion von \verb+\CurrentOption+
% erzwungen werden. Alternativ k"onnte dies auch in
% \verb+\KOMAoptions+ erledigt werden.
%    \begin{macrocode}
    \expandafter\KOMAoptions\expandafter{\CurrentOption}
    \let\KV@errx=\scr@save@KV@errx%
    \let\scr@save@KV@errx=\relax%
%</scrlettr>
%<!scrlettr>    \x@paper
    }
%<!scrlettr>\fi
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
% \subsubsection{Optionenauswahl}
% \changes{v2.0e}{1994/09/04}{Standardoption \texttt{abstactoff} durch
%                             \texttt{abstractoff} ersetzt.}
% \changes{v2.2f}{1995/06/14}{\cs{ExecuteOptions} von Leerzeichen u."a.
%                             befreit.}
% \changes{v2.8q}{2001/10/06}{\texttt{scrlttr2} verwendet nicht mehr
%                             die Option \texttt{KOMAold}, sondern
%                             \texttt{DIN} als Standard}
% Es m"ussen die Standardoptionen festgelegt und alle Optionen ausgew"ahlt
% werden. Anschlie"send ist die Schriftgr"o"seneinstellung vorzunehmen
% und der Seitenspiegel mit Hilfe des |typearea|-packages zu berechnen.
%    \begin{macrocode}
\ExecuteOptions{%
%<scrartcl,scrreprt,scrbook>  final,11pt,onecolumn%
%<scrartcl,scrreprt,scrbook>  ,headnosepline,footnosepline,bigheadings%
%<scrartcl>  ,oneside,abstractoff%
%<scrreprt>  ,nochapterprefix,oneside,openany,abstractoff%
%<scrbook>  ,nochapterprefix,twoside,openright%
}
\ProcessOptions\relax
%<scrlettr>\AfterProcessOptions@hook
%<scrlettr>\let\AfterProcessOptions@hook=\undefined
%    \end{macrocode}
%
% \subsubsection{Laden von Dateien}
% \changes{v2.8q}{2001/11/17}{das Paket \texttt{scrlfile} wird
%                             ben"otigt}
%
% Ab Version 2.8q ist das Paket \texttt{scrlfile} Bestandteil von
% \textsf{KOMA-Script}. Da es von den Klassen beispielsweise zur
% Verbesserung der Zusammenarbeit mit |caption2| ben"otigt wird, wird
% es hier geladen. Obwohl die Briefklasse es derzeit nicht ben"otigt,
% wird es aus Gr"unden der Einheitlichkeit auch f"ur diese geladen.
%    \begin{macrocode}
\RequirePackage{scrlfile}
%    \end{macrocode}
%
% \subsubsection{Allgemeine Schalter}
%  \begin{macro}{\if@restonecol}
%  \begin{macro}{\@restonecoltrue}
%  \begin{macro}{\@restonecolfalse}
% Damit innerhalb einer Umgebung lokal auf ein- oder zweispaltigen
% Satz umgeschaltet werden kann, wird ein Schalter ben"otigt. Dieser
% wird dann daf"ur verwendet, sich zu merken, dass eine Umschaltung
% stattgefunden hat und am Ende der Umgebung wieder aufzuheben
% ist. Der Schalter wird nicht in Umgebungen verwendet, die
% geschachtelt werden. Verwendung findet er beispielsweise f"ur
% Titelseiten und das Inhaltsverzeichnis.
%    \begin{macrocode}
\newif\if@restonecol
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\if@mainmatter}
%  \begin{macro}{\@mainmattertrue}
%  \begin{macro}{\@mainmatterfalse}
% \changes{v2.3a}{1995/07/08}{\cs{if@mainmatter} Anforderung
%                             verschoben.}
% "Uber diesen Schalter wird bei Buchklassen festgelegt, ob wir uns im
% Hauptteil des Dokuments befinden oder nicht. Die eigentliche
% Umschaltung geschieht mit Hilfe der Befehle \cs{frontmatter},
% \cs{mainmatter}, \cs{backmatter}. Ohne Umschaltung befinden wir uns
% bereits im Hauptteil.
%    \begin{macrocode}
%<scrbook>\newif\if@mainmatter\@mainmattertrue
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% \subsubsection{Schriftgr"o"seninitialisierung}
% \changes{v2.6}{2000/01/04}{Das Einlesen der Schriftgr"o"sen-Options-Datei
%                            funktioniert nun mit diversen Gr"o"sen.}
%    \begin{macrocode}
\@tempcnta=10
\advance\@tempcnta by\@ptsize\relax
\xdef\@tempa{%
%<!scrbook>size%
%<scrbook>bk%
\the\@tempcnta.clo}
\InputIfFileExists{\@tempa}{}{%
%<*scrbook>
  \xdef\@tempb{size\the\@tempcnta.clo}
  \InputIfFileExists{\@tempb}{%
    \ClassWarning{scrbook}{File `\@tempa' not found!\MessageBreak
                           Used `\@tempb' instead}}{
%</scrbook>
    \ClassError
%<scrbook>    {scrbook}
%<scrreprt>    {scrreprt}
%<scrartcl>    {scrartcl}
%<scrlettr>    {scrlttr2}
      {File `\@tempa' not found!\MessageBreak
       This error is fatal!}
      {To every fontsize you want to select by class option,\MessageBreak
       you need a corresponding
%<scrbook>        bk-class-option-file or\MessageBreak at least a
       size-class-option-file declaring all\MessageBreak
       the macros based on fontsize.\MessageBreak
       Ask a wizzard for more information or use another
       fontsize.\MessageBreak
       You cannot continue!}
       \batchmode \csname @@end\endcsname \end
%<scrbook>    }
}
%    \end{macrocode}
%
%  \begin{option}{fontsize}
% \changes{v2.8q}{2001/10/17}{nach dem Laden der Schriftgr"o"sendatei
%                             nicht mehr zul"assig}
% Ab hier darf nat"urlich die Option \texttt{fontsize} nicht mehr
% verwendet werden!
%    \begin{macrocode}
%<*scrlettr>
\KOMA@key{fontsize}{%
  \begingroup
    \setlength{\@tempdima}{#1}
    \addtolength{\@tempdima}{-10\p@}
    \ifnum \@tempdima=\@ptsize
    \else
      \ClassError{%
        scrlttr%
      }{option `fontsize' not allowed\MessageBreak
      after loading sizeX.clo file}{%
      Maybe you've used option `fontsize' at
      \string\KOMAoptions.\MessageBreak
      You should set this option at \string\documentclass.}
    \fi
  \endgroup
  }
%</scrlettr>
%    \end{macrocode}
%  \end{option}
%
% \subsubsection{Satzspiegel einstellen}
% \changes{v2.4}{1996/02/25}{Es wird jetzt explizit nach einem aktuellen
%                            typearea verlangt.}
% \changes{v2.8n}{2001/09/06}{Es wird wirklich nach einem aktuellen
%                             typearea verlangt}
% Zun"achst werden die ganzen Befehle, die sowohl in den Klassen als
% auch in \texttt{typearea} definiert sind, wieder gel"oescht. Dies
% ist allerdings bei der Briefklasse nicht notwendig, das diese anders
% arbeitet.
%    \begin{macrocode}
%<*!scrlettr>
\let\test@number      =\undefined
\let\gobble@till@next =\undefined
\let\@BCOR            =\undefined
\let\@@BCOR           =\undefined
\let\@DIV             =\undefined
\let\@@DIV            =\undefined
\let\@headlines       =\undefined
\let\@@headlines      =\undefined
\let\x@paper          =\undefined
\let\x@@paper         =\undefined
%</!scrlettr>
%    \end{macrocode}
%  \begin{macro}{\scr@file@date@version}
% \changes{v2.8n}{2001/09/06}{Neu}
% Es muss jeweils die gleiche Version von \texttt{typearea} geladen
% werden, die auch von der jeweiligen Klasse geladen wurde.
%    \begin{macrocode}
\newcommand*{\scr@file@date@version}{}
\def\scr@file@date@version#1/#2/#3 #4 #5\@nil{#1/#2/#3 #4}
\RequirePackage{typearea}[\expandafter\expandafter\expandafter%
  \scr@file@date@version\csname ver@%
%<scrbook>  scrbook%
%<scrreprt>  scrreprt%
%<scrartcl>  scrartcl%
%<scrlettr>  scrlttr2%
  .cls\endcsname\@nil]
%    \end{macrocode}
%  \end{macro}
%
% Bei der Briefklasse gibt es jetzt noch ein paar Besonderheit.
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%  \begin{Length}{oddsidemargin}
%  \begin{Length}{evensidemargin}
% Der rechte und der linke Rand ohne Bindekorrektur auf bei
% beidseitigem Layout gleich gro"s. Die Bindekorrektur wird
% selbstverst"andlich wieder dem ungeraden Rand zugeschlagen.
%    \begin{macrocode}
\if@twoside
  \addtolength{\oddsidemargin}{\evensidemargin}
  \addtolength{\oddsidemargin}{-\ta@bcor}
  \setlength{\evensidemargin}{.5\oddsidemargin}
  \setlength{\oddsidemargin}{\evensidemargin}
  \addtolength{\oddsidemargin}{\ta@bcor}
\fi
%    \end{macrocode}
%  \end{Length}
%  \end{Length}
%
%  \begin{option}{BCOR}
% \changes{v2.8q}{2001/10/18}{funktioniert auch noch nach
%                             dem Laden von \texttt{typearea.sty}}
%  \begin{option}{DIV}
% \changes{v2.8q}{2001/10/18}{funktioniert auch noch nach
%                             dem Laden von \texttt{typearea.sty}}
%  \begin{option}{headlines}
% \changes{v2.8q}{2001/10/18}{funktioniert auch noch nach
%                             dem Laden von \texttt{typearea.sty}}
% Nach dem Laden von \texttt{typearea.sty} muss die Funktionsweise
% dieser Optionen ge"andert werden. Bei \texttt{BCOR} und \texttt{DIV}
% ist das einfach. Bei \texttt{headlines} sieht es etwas anders aus. 
%    \begin{macrocode}
\KOMA@key{BCOR}{\typearea[{#1}]{last}}
\KOMA@key{DIV}{\typearea[current]{#1}}
\KOMA@key{headlines}{%
  \def\ta@hh{#1\baselineskip}%
  \typearea[current]{last}}
%    \end{macrocode}
%  \end{option}
%  \end{option}
%  \end{option}
%
%  \begin{option}{paper}
% \changes{v2.8q}{2001/10/17}{funktioniert auch noch nach
%                             dem Laden von \texttt{typearea.sty}}
% Au"serdem mu"s die \texttt{paper}-Option nun anders funktionieren.
%    \begin{macrocode}
\KOMA@key{paper}{%
  \begingroup
    \edef\@tempc{\noexpand\@tempswatrue%
      \noexpand\ifdim\paperwidth=\the\paperwidth\noexpand\else%
      \noexpand\@tempswafalse\noexpand\fi%
      \noexpand\ifdim\paperheight=\the\paperheight\noexpand\else%
      \noexpand\@tempswafalse\noexpand\fi%
      }  
    \edef\@tempa{#1}%
    \def\@tempb{letter}\ifx\@tempa\@tempb%
      \setlength{\paperheight}{11in}\setlength{\paperwidth}{8.5in}%
    \else\def\@tempb{legal}\ifx\@tempa\@tempb%
      \setlength{\paperheight}{14in}\setlength{\paperwidth}{8.5in}%
    \else\def\@tempb{executive}\ifx\@tempa\@tempb%
      \setlength{\paperheight}{10.5in}\setlength{\paperwidth}{7.25in}%
    \else%
      \def\ta@opt@err{%
        \ClassError{%
          scrlttr2%
          }{papersize `#1' undefined}{%
          You've told me to set KOMA option `paper' to value
          `#1',\MessageBreak
          but the value `#1' is not allowed to this
          option.\MessageBreak
          See the KOMA-Script manual for informations about known
          papersizes.}%
        }
      \let\@headlines\ta@opt@err%
      \x@@paper #1paperpaper\x@@paper%
    \fi\fi\fi
    \@tempc%
    \if@tempswa%
      \ClassInfo{%
        scrlttr2%
        }{%
        change to already set paper size ignored%
        }
      \let\@tempc\endgroup%
    \else%
      \ClassWarning{%
        scrlttr2%
        }{%
        you're changing paper size after loading package\MessageBreak
        `typearea'. This may be dangerous.\MessageBreak
        You should set paper size only at \string\documentclass\space
        not\MessageBreak 
        with \string\KOMAoptions%
        }
      \edef\@tempc{\endgroup%
        \setlength{\paperwidth}{\the\paperwidth}%
        \setlength{\paperheight}{\the\paperheight}%
        \noexpand\typearea[current]{last}}
    \fi
  \@tempc%
  }
%    \end{macrocode}
%  \end{option}
%
% Damit sind wir ersteinmal am Ende der Besonderheiten der
% Briefklasse.
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
%
% \subsection{Einige Gr"o"sen}
%
% \changes{v2.8i}{2001/07/22}{\cs{baselinestretch} wird nicht umdefiniert}
%  \begin{Length}{lineskip}
%  \begin{Length}{normallineskip}
% Minimaler Zeilenabstand:
%    \begin{macrocode}
\setlength{\lineskip}{\p@}
\setlength{\normallineskip}{\p@}
%    \end{macrocode}
%  \end{Length}
%  \end{Length}
%
%  \begin{Length}{columnsep}
%  \begin{Length}{columnseprule}
% Spaltenabstand und Spaltentrennlinie (da die Briefklasse
% zweispaltigen Satz nicht unterst"utzt, entf"allt dies f"ur selbige):
%    \begin{macrocode}
%<*!scrlettr>
\setlength{\columnsep}{10\p@}
\setlength{\columnseprule}{\z@}
%</!scrlettr>
%    \end{macrocode}
%  \end{Length}
%  \end{Length}
%
% Absatzabstand und Absatzeinzug:
%  \begin{macro}{\parskip}
% \changes{v2.8i}{2001/07/22}{abh"angig von den Optionen}
%  \begin{macro}{\parindent}
% \changes{v2.8i}{2001/07/22}{abh"angig von den Optionen}
%  \begin{macro}{\parfillskip}
%  \begin{macro}{\@listi}
%  \begin{macro}{\@listI}
%  \begin{macro}{\@listii}
%  \begin{macro}{\@listiii}
%  \begin{macro}{\@list@extra}
%    \changes{v2.8q}{2001/11/06}{Neu}
%  \begin{macro}{\@parskip@indent}
%    \changes{v2.8q}{2001/11/13}{Neu}
%  \begin{macro}{\footnotesize}
%    \changes{v2.9h}{2002/09/03}{etwas robuster}
%  \begin{macro}{\small}
%    \changes{v2.9h}{2002/09/03}{etwas robuster}
%  \begin{macro}{\add@extra@listi}
%    \changes{v2.9h}{2002/09/03}{neu (intern)}
% Ab Version 2.8i wird hier optionsabh"angig gearbeitet. Dabei m"ussen
% auch die Befehle bei der Umschaltung der Schriftgr"o"se f"ur
% \cs{small} und \cs{footnotesize} ge"andert werden.
%    \begin{macrocode}
\g@addto@macro{\@listi}{\@list@extra}
\let\@listI=\@listi
\g@addto@macro{\@listii}{\@list@extra}
\g@addto@macro{\@listiii}{\@list@extra}
\newcommand*{\add@extra@listi}[1]{%
  \expandafter\let\csname #1@listi\endcsname=\@listi
  \def\@listi{\csname #1@listi\endcsname\@list@extra}%
}
\g@addto@macro{\footnotesize}{\protect\add@extra@listi{ftns}}
\g@addto@macro{\small}{\protect\add@extra@listi{sml}}
\newcommand*{\@list@extra}{}
%<scrlettr>\renewcommand*{%
%<!scrlettr>\newcommand*{%
  \@parskip@indent}{%
  \if@parskip
    \setlength{\parindent}{\z@}%
    \scr@parskip
    \scr@parfillskip
    \renewcommand*{\@list@extra}{%
      \topsep\z@ \parsep\parskip \itemsep\z@}%
  \else
    \setlength{\parindent}{1em}%
    \setlength{\parskip}{\z@ \@plus \p@}%
    \setlength{\parfillskip}{\z@ \@plus 1fil}%
    \renewcommand*{\@list@extra}{}%
  \fi
  }
\@parskip@indent
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% Die Penalties (genau wie bei den Standardklassen):
%  \end{macro}
%    \begin{macrocode}
\@lowpenalty  = 51
\@medpenalty  =151
\@highpenalty =301
%    \end{macrocode}
%
%  \begin{Counter}{topnumber}
%  \begin{macro}{\topfraction}
%  \begin{Counter}{bottomnumber}
%  \begin{macro}{\bottomfraction}
%  \begin{Counter}{totalnumber}
%  \begin{macro}{\textfraction}
%  \begin{macro}{\floatpagefraction}
%  \begin{Counter}{dbltopnumber}
%  \begin{macro}{\dbltopfraction}
%  \begin{macro}{\dblfloatpagefraction}
% Allgemeine Einstellungen f"ur Flie"sumgebungen (Seitenanteile). Da
% es bei Briefen dergleichen nicht gibt, werden die Werte dort auch
% nicht gesetzt.
% \changes{v2.8n}{2001/09/06}{da Briefe keine Flie"sumgebungen haben,
%                             werden bei \texttt{scrlttr2} auch keine
%                             Parameter daf"ur mehr gesetzt}
%    \begin{macrocode}
%<*!scrlettr>
\setcounter{topnumber}{2}
\renewcommand*\topfraction{.7}
\setcounter{bottomnumber}{1}
\renewcommand*\bottomfraction{.3}
\setcounter{totalnumber}{3}
\renewcommand*\textfraction{.2}
\renewcommand*\floatpagefraction{.5}
\setcounter{dbltopnumber}{2}
\renewcommand*\dbltopfraction{.7}
\renewcommand*\dblfloatpagefraction{.5}
%</!scrlettr>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{Counter}
%  \end{macro}
%  \end{macro}
%  \end{Counter}
%  \end{macro}
%  \end{Counter}
%  \end{macro}
%  \end{Counter}
%
%
% \subsection{Befehle f"ur den Kompatibilit"atsmodus}
%  \begin{macro}{\headincludeon}
%  \begin{macro}{\headincludeoff}
%  \begin{macro}{\headseplineon}
%  \begin{macro}{\headseplineoff}
%  \begin{macro}{\footincludeon}
%  \begin{macro}{\footincludeoff}
%  \begin{macro}{\footseplineon}
%  \begin{macro}{\footseplineoff}
% Da die classes des \textsf{KOMA-Script} Pakets nun auch im
% Kompatibilit"atsmodus verwendet werden k"onnen, ben"otigen wir einige
% Befehle, die es bei \textsf{Script 2.0} noch gab. Betroffen sind an
% dieser Stelle nur die Befehle f"ur die Kopf- und
% Fu"szeilentrennlinie und die Einbeziehung von Kopf- und Fu"szeilen
% in den Textbereich bei der Berechnung des Seitenspiegels. Da es
% diese Befehle f"ur die Briefklasse nie gab, werden sie f"ur diese
% auch nicht definiert. 
% \changes{v2.0e}{1994/10/12}{Kopf- und Fu"szeilenhandling f"ur den
%                             Kompatibilit"atsmodus erg"anzt}
%    \begin{macrocode}
%<*!scrlettr>
\if@compatibility
  \newcommand*\headincludeon{\@hincltrue}
  \newcommand*\headincludeoff{\@hinclfalse}
  \newcommand*\headseplineon{\@hsltrue \@hincltrue}
  \newcommand*\headseplineoff{\@hslfalse \@hinclfalse}
  \newcommand*\footincludeon{\@fincltrue}
  \newcommand*\footincludeoff{\@finclfalse}
  \newcommand*\footseplineon{\@fsltrue \@fincltrue}
  \newcommand*\footseplineoff{\@fslfalse \@finclfalse}
\fi
%</!scrlettr>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% \subsection{Kopf- und Fu"szeilendefinition}
%
% \changes{v2.0e}{1994/08/10}{Bei "`scrbook"' gibt es kein einseitiges
%                             Layout.}
% \changes{v2.3a}{1995/07/08}{Da bei "`book"' seit Version 1.2v die
%                             Option oneside wieder ein einseitiges
%                             Layout erzeugt, dieses wieder eingebaut.}
%  \begin{macro}{\ps@plain}
%  \begin{macro}{\ps@myheadings}
%  \begin{macro}{\ps@headings}
% Es wird das Aussehen der Kopf- und Fu"szeilen f"ur die
% Standardseitenstile |empty|, |plain|, |headings| und |myheadings|
% festgelegt. Diese sind bei|scrartcl| abh"angig davon, ob es sich um
% einseitiges oder beidseitiges Layout handelt. 
%
% Im Gegensatz zu den Seitenstilen der Standard-classes steht die
% Seitennummer beim \textsf{KOMA-Script} Paket immer in der Fu"szeile.
% Au"serdem sind Trennlinien zwischen Kopf- und Textbereich sowie zwischen
% Text- und Fu"sbereich m"oglich.
%
% Die Kopfzeile wird auch nicht mehr in Gro"sbuchstaben gewandelt.
%
% \changes{v2.2a}{1995/02/07}{Bei "`scrbook"' und "`scrreprt"' Punkt
%                             hinter der section-Nummer entfernt}
% \changes{v2.2c}{1995/05/25}{Punkt hinter der Kapitelnummer in der
%                             Kopfzeile entfernt}
% \changes{v2.2c}{1995/05/25}{Nummern in der Kopfzeile auf CJK umgestellt}
% \changes{v2.4f}{1996/10/08}{\cs{strut} in der Kopfzeile eingef"ugt}
% Da sich die Seitenstil f"ur die Briefklasse erheblich von denen
% normalen Seitenstilen unterscheiden, werden diese getrennt
% definiert.
%  \begin{macro}{\set@tempdima@hw}
%    \changes{v2.8q}{2002/03/28}{Neu (intern)}
% Um nicht st"andig das gleiche schreiben zu m"ussen wird hier ein
% internes Makro verwendet.
%    \begin{macrocode}
%<*!scrlettr>
\newcommand*{\set@tempdima@hw}{%
  \setlength{\@tempdima}{\textwidth}%
  \if@mincl
    \addtolength{\@tempdima}{\marginparsep}%
    \addtolength{\@tempdima}{\marginparwidth}%
  \fi
  } 
%    \end{macrocode}
%  \end{macro}
%    \begin{macrocode}
\if@twoside
 \renewcommand*{\ps@plain}{\let\@mkboth\@gobbletwo
  \renewcommand*{\@evenhead}{}%
  \renewcommand*{\@oddhead}{}%
  \renewcommand*{\@evenfoot}{%
   \set@tempdima@hw\hss\hb@xt@ \@tempdima{\vbox{%
    \if@fsl \hrule \vskip 3\p@ \fi
    \hb@xt@ \@tempdima{{\pnumfont\thepage\hfil}}}}}%
  \renewcommand*{\@oddfoot}{%
   \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
    \if@fsl \hrule \vskip 3\p@ \fi
    \hb@xt@ \@tempdima{{\pnumfont\hfil\thepage}}}}\hss}}%
 \newcommand*{\ps@headings}{\let\@mkboth\markboth
  \renewcommand*{\@evenhead}{%
   \set@tempdima@hw\hss\hb@xt@ \@tempdima{\vbox{%
    \hb@xt@ \@tempdima{{\headfont\strut\leftmark\hfil}}%
    \if@hsl \vskip 1.5\p@ \hrule \fi}}}
  \renewcommand*{\@oddhead}{%
   \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
    \hb@xt@ \@tempdima{{\headfont\hfil\strut\rightmark}}%
    \if@hsl \vskip 1.5\p@ \hrule \fi}}\hss}
  \renewcommand*{\@evenfoot}{%
   \set@tempdima@hw\hss\hb@xt@ \@tempdima{\vbox{%
    \if@fsl \hrule \vskip 3\p@ \fi
    \hb@xt@ \@tempdima{{\pnumfont\thepage\hfil}}}}}%
  \renewcommand*{\@oddfoot}{%
   \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
    \if@fsl \hrule \vskip 3\p@ \fi
    \hb@xt@ \@tempdima{{\pnumfont\hfil\thepage}}}}\hss}%
%<*scrartcl>
  \renewcommand*{\sectionmark}[1]{%
   \markboth {\ifnum \c@secnumdepth >\z@%
    \sectionmarkformat\fi ##1}{}}
  \renewcommand*{\subsectionmark}[1]{%
   \markright {\ifnum \c@secnumdepth >\@ne%
    \subsectionmarkformat\fi ##1}}}
%</scrartcl>
%<*scrreprt|scrbook>
  \renewcommand*{\chaptermark}[1]{%
   \markboth {\ifnum \c@secnumdepth >\m@ne
%<scrbook>      \if@mainmatter
        \chaptermarkformat\fi
%<scrbook>      \fi
        ##1}{}}%
  \renewcommand*{\sectionmark}[1]{%
    \markright {\ifnum \c@secnumdepth >\z@
        \sectionmarkformat\fi
        ##1}}}
%</scrreprt|scrbook>
 \newcommand*{\ps@myheadings}{\let\@mkboth\@gobbletwo
  \renewcommand*{\@evenhead}{%
   \set@tempdima@hw\hss\hb@xt@ \@tempdima{\vbox{%
    \hb@xt@ \@tempdima{{\headfont\strut\leftmark\hfil}}%
    \if@hsl \vskip 1.5\p@ \hrule \fi}}}
  \renewcommand*{\@oddhead}{%
   \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
    \hb@xt@ \@tempdima{{\headfont\hfil\strut\rightmark}}%
    \if@hsl \vskip 1.5\p@ \hrule \fi}}\hss}
  \renewcommand*{\@evenfoot}{%
   \set@tempdima@hw\hss\hb@xt@ \@tempdima{\vbox{%
    \if@fsl \hrule \vskip 3\p@ \fi
    \hb@xt@ \@tempdima{{\pnumfont\thepage\hfil}}}}}%
  \renewcommand*{\@oddfoot}{%
   \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
    \if@fsl \hrule \vskip 3\p@ \fi
    \hb@xt@ \@tempdima{{\pnumfont\hfil\thepage}}}}\hss}%
%<!scrartcl>  \renewcommand*{\chaptermark}[1]{}
%<scrartcl>  \renewcommand*{\subsectionmark}[1]{}
  \renewcommand*{\sectionmark}[1]{}}
\else
 \renewcommand*{\ps@plain}{\let\@mkboth\@gobbletwo
  \renewcommand*{\@evenhead}{}%
  \renewcommand*{\@oddhead}{}%
  \renewcommand*{\@evenfoot}{}%
  \renewcommand*{\@oddfoot}{%
   \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
    \if@fsl \hrule \vskip 3\p@ \fi
    \hb@xt@ \@tempdima{{\pnumfont\hfil\thepage\hfil}}}}\hss}}
 \newcommand*{\ps@headings}{\let\@mkboth\markboth
  \renewcommand*{\@evenhead}{}%
  \renewcommand*{\@oddhead}{%
   \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
    \hb@xt@ \@tempdima{{\headfont\hfil\strut\rightmark\hfil}}
    \if@hsl \vskip 1.5\p@ \hrule \fi}}\hss}%
  \renewcommand*{\@evenfoot}{}%
  \renewcommand*{\@oddfoot}{%
   \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
    \if@fsl \hrule \vskip 3\p@ \fi
    \hb@xt@ \@tempdima{{\pnumfont\hfil\thepage\hfil}}}\hss}}%
%<*scrartcl>
%    \end{macrocode}
% \changes{v2.1b}{1994/12/31}{Im einseitigen Seitenstil
%                             \cs{markboth} durch
%                             \cs{markright} ersetzt.}
% \changes{v2.2a}{1995/02/07}{Im einseitigen Seitenstil
%                             bei "`scrartcl"' und \texttt{oneside}
%                             \cs{subsectionmark} eingef"ugt.}
% \changes{v2.2a}{1995/02/07}{Im einseitigen Seitenstil
%                             bei "`scrreprt"' und \texttt{oneside}
%                             \cs{sectionmark} eingef"ugt.}
%    \begin{macrocode}
  \renewcommand*{\subsectionmark}[1]{}
  \renewcommand*{\sectionmark}[1]{\markright {\ifnum \c@secnumdepth >\z@
      \sectionmarkformat\fi ##1}}}
%</scrartcl>
%    \end{macrocode}
% \changes{v2.0e}{1994/08/17}{Im einseitigen Seitenstil
%                             \cs{markboth} durch
%                             \cs{markright} ersetzt.}
%    \begin{macrocode}
%<*scrreprt|scrbook>
  \renewcommand*{\sectionmark}[1]{}
  \renewcommand*{\chaptermark}[1]{\markright {\ifnum \c@secnumdepth >\m@ne
%<scrbook>   \if@mainmatter
      \chaptermarkformat\fi
%<scrbook>   \fi
    ##1}}}
%</scrreprt|scrbook>
 \newcommand*{\ps@myheadings}{\let\@mkboth\@gobbletwo
  \renewcommand*{\@evenhead}{}%
  \renewcommand*{\@oddhead}{%
   \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
    \hb@xt@ \@tempdima{{\headfont\hfil\strut\rightmark\hfil}}
    \if@hsl \vskip 1.5\p@ \hrule \fi}}\hss}%
  \renewcommand*{\@evenfoot}{}%
  \renewcommand*{\@oddfoot}{%
   \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
   \if@fsl \hrule \vskip 3\p@ \fi
   \hb@xt@ \@tempdima{{\pnumfont\hfil\thepage\hfil}}}}\hss}%
%<scrartcl>  \renewcommand*{\subsectionmark}[1]{}%
%<!scrartcl>  \renewcommand*{\chaptermark}[1]{}%
  \renewcommand*{\sectionmark}[1]{}}
\fi
%</!scrlettr>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\@firsthead}
%  \begin{macro}{\@gen@firsthead}
%    \changes{v2.8q}{2002/01/28}{Neu}
%  \begin{macro}{\@nexthead}
%  \begin{macro}{\@firstfoot}
%  \begin{macro}{\@nextfoot}
%  \begin{macro}{\pagemark}
% Bei \texttt{scrlttr2} gibt es die "ublichen Seitenstile, allerdings
% ist deren Verhalten etwas anders als gewohnt. Dies ist in den
% Besonderheiten f"ur Briefen begr"undet.
%    \begin{macrocode}
%<*scrlettr>
\newcommand*{\@firsthead}{\noindent%
  \parbox[b]{\useplength{firstheadwidth}}
  {\centering\usekomafont{fromaddress}{%
      \ifkomavarempty{fromname}{}{%
        {\usekomafont{fromname}%
          {\ignorespaces\usekomavar{fromname}}}\\[-8pt]
        \rule{\useplength{firstheadwidth}}{.4pt}\\
        }%
      \ifkomavarempty{fromaddress}{}{%
        \ignorespaces\usekomavar{fromaddress}%
        }%
      }%
    }%
  }
\newcommand*{\@gen@firsthead}{%
% Damit wird ggf. die Kopfzeile der ersten Seite umdefiniert.
%    \begin{macrocode}
  \ifcase\@alignfrom
%    \end{macrocode}
% Wir befinden uns nun in dem Bereich f"ur \verb|\@alignfrom|=0.
% Entsprechend unserer Festlegung wird daher als Erstes der
% linksb"undige Absender definiert. Wir verwenden daf"ur eine
% \emph{parbox}, in der der Text linksb"undig angeordnet wird. Diese
% Box soll "uber die gesamte Breite gehen d"urfen:
%    \begin{macrocode}
    \renewcommand*{\@firsthead}{\noindent
      \parbox[b]{\textwidth}{\raggedright
%    \end{macrocode}
% Zuerst wird der Name gesetzt. Dabei soll eine eigene Schriftart f"ur
% den Namen verwendet werden.
%    \begin{macrocode}
        {\usekomafont{fromname}\strut\ignorespaces
          \usekomavar{fromname}%
%    \end{macrocode}
% Hat \verb|\@rulefrom| den nummerischen Wert 1, so soll direkt auf den
% Absender eine Linie folgen. Die L"ange dieser Linie kann vom Anwender
% bestimmt oder automatisch gew"ahlt werden. Es wird dabei die
% Pseudo-L"ange \texttt{fromrulewidth} verwendet. Ist diese negativ,
% so wird sie automatisch bestimmt. Bei der automatischen
% L"angenbestimmung wird daf"ur gesorgt, dass die Linie nicht bis in das
% Logo ragt, das eventuell rechtsb"undig neben dem Absender steht:
%    \begin{macrocode}
          {%
            \ifnum\@rulefrom=1\\[-.5\baselineskip]%
              \setlength{\@tempdima}{\useplength{fromrulewidth}}%
              \ifdim\@tempdima=\z@
                \setlength{\@tempdima}{\textwidth}%
                \if@logo
                  \settowidth{\@tempdimb}{\usekomavar{fromlogo}}%
                  \addtolength{\@tempdima}{-\@tempdimb}%
                \fi
              \fi
              \expandafter\rule\expandafter{\the\@tempdima}{.4pt}%
            \fi
            }%
          \\}%
%    \end{macrocode}
% Als N"achstes wird die Absenderadresse einschlie"slich aller
% optionalen Felder gesetzt. Dabei werden optionale Felder nur
% gesetzt, wenn der entsprechende Schalter \emph{true} ist. Die
% Adresse wird ebenfalls innerhalb einer Gruppe in einer eigenen
% Schriftart gesetzt. 
%    \begin{macrocode}
        {\usekomafont{fromaddress}\strut\ignorespaces
          \usekomavar{fromaddress}%
          \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi%
          \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi%
          \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi%
          \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi%
%    \end{macrocode}
% Wie weiter oben erw"ahnt, kann auch an dieser Stelle eine Linie
% gesetzt  werden. Wir gehen davon aus, dass die Linie automatisch
% nicht in das Logo ragt, da es in diesem Fall "uber der Linie zu
% stehen hat. Die entsprechende Berechnung kann also entfallen.
%    \begin{macrocode}
          \ifnum\@rulefrom=2\\[-.5\baselineskip]%
            \setlength{\@tempdima}{\useplength{fromrulewidth}}%
            \ifdim\@tempdima=\z@
              \setlength{\@tempdima}{\textwidth}%
            \fi
            \expandafter\rule\expandafter{\the\@tempdima}{.4pt}%
          \fi
          \\
          }%
        }%
%    \end{macrocode}
% Die parbox ist damit ebenfalls beendet. Es mu"ss nun ggf. noch das
% Logo gesetz werden. Es wird in diesem Fall von der aktuellen
% Position am rechten Rand nach links ausgegeben.
%    \begin{macrocode}
      \if@logo
        \llap{\usekomavar{fromlogo}}%
      \fi
      }%
%    \end{macrocode}
% Damit ist die Definition des linksb"undigen Absenders abgeschlossen.
% Es geht weiter mit dem zentrierten Absender. Dieser hat als
% Besonderheit, dass das Logo nicht in den Briefkopf, sondern in den
% Bereich rechts neben dem Empf"anger gesetzt wird. Dort ist bereits
% das location-Feld, daher wird dieser Fall auch dort behandelt.
%    \begin{macrocode}
  \or
    \renewcommand*{\@firsthead}{\noindent
      \parbox[b]{\textwidth}{\centering
        {\usekomafont{fromname}\strut\ignorespaces
          \usekomavar{fromname}%
          {%
            \ifnum\@rulefrom=1\\[-.5\baselineskip]%
              \setlength{\@tempdima}{\useplength{fromrulewidth}}%
              \ifdim\@tempdima=\z@
                \setlength{\@tempdima}{\textwidth}%
              \fi
              \expandafter\rule\expandafter{\the\@tempdima}{.4pt}%
            \fi
            }%
          \\
          }%
        {\usekomafont{fromaddress}\strut\ignorespaces
          \usekomavar{fromaddress}%
          \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi%
          \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi%
          \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi%
          \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi%
          \ifnum\@rulefrom=2\\[-.5\baselineskip]%
            \setlength{\@tempdima}{\useplength{fromrulewidth}}%
            \ifdim\@tempdima=\z@
              \setlength{\@tempdima}{\textwidth}%
            \fi
            \expandafter\rule\expandafter{\the\@tempdima}{.4pt}%
          \fi
          \\
          }%
        }%
      }%
%    \end{macrocode}
% Damit ist die Definition des zentrierten Absenders abgeschlossen. Es
% geht weiter mit dem rechtsb"undigen Absender. Das ganze wird einfach
% beim linksb"undigen Absender abgeschaut.
%    \begin{macrocode}
  \or
    \renewcommand*{\@firsthead}{\noindent
      \if@logo
        \rlap{\usekomavar{fromlogo}}%
      \fi
      \parbox[b]{\textwidth}{\raggedleft
        {\usekomafont{fromname}\strut\ignorespaces
          \usekomavar{fromname}%
          {%
            \ifnum\@rulefrom=1\\[-.5\baselineskip]%
              \setlength{\@tempdima}{\useplength{fromrulewidth}}%
              \ifdim\@tempdima=\z@
                \setlength{\@tempdima}{\textwidth}%
                \if@logo
                  \settowidth{\@tempdimb}{\usekomavar{fromlogo}}%
                  \addtolength{\@tempdima}{-\@tempdimb}%
                \fi
              \fi
              \expandafter\rule\expandafter{\the\@tempdima}{.4pt}%
            \fi
            }%
          \\
          }%
        {\usekomafont{fromaddress}\strut\ignorespaces
          \usekomavar{fromaddress}%
          \if@phone\\\usekomavar*{fromphone}\usekomavar{fromphone}\fi%
          \if@fax\\\usekomavar*{fromfax}\usekomavar{fromfax}\fi%
          \if@email\\\usekomavar*{fromemail}\usekomavar{fromemail}\fi%
          \if@www\\\usekomavar*{fromurl}\usekomavar{fromurl}\fi%
          \ifnum\@rulefrom=2\\[-.5\baselineskip]%
            \setlength{\@tempdima}{\useplength{fromrulewidth}}%
            \ifdim\@tempdima=\z@
              \setlength{\@tempdima}{\textwidth}%
            \fi
            \expandafter\rule\expandafter{\the\@tempdima}{.4pt}%
          \fi
          \\
          }%
        }%
      }%
%    \end{macrocode}
% Damit ist die Umdefinierung beendet. In allen anderen F"allen wird
% der Kopf nicht ver"andert.
%    \begin{macrocode}
  \fi
  }
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*{\@firstfoot}{}
\newcommand*{\@nexthead}{%
  \rlap{\parbox[c]{\textwidth}{\raggedright\strut
      \ifnum\@pageat=0\pagemark\else\leftmark\fi\strut}}%
  \parbox[c]{\textwidth}{%
    \centering\strut
    \ifcase\@pageat
      \rightmark
    \or
      \pagemark
    \or
      \rightmark
    \fi\strut}%
  \llap{\parbox[c]{\textwidth}{\raggedleft\strut
      \ifcase\@pageat
        \leftmark
      \or
        \rightmark
      \or
        \pagemark
      \else
        \rightmark
      \fi\strut}}%
  }%
\newcommand*{\@nextfoot}{%
  \ifnum\@pageat>2
    \parbox[c]{\textwidth}{%
      \ifcase\@pageat\or\or\or\raggedright\or\centering\or\raggedleft\fi
      \strut\pagemark%
      }%
  \fi
}
\newcommand*{\pagemark}{{\usekomafont{pagenumber}\pagename\ \thepage}}
\renewcommand*{\ps@plain}{%
  \renewcommand*{\@evenhead}{%
    \vbox{\vbox{\hsize=\textwidth\hbox to\textwidth{%
          \parbox[b]{\textwidth}{\strut
            \ifnum\@pageat>-1
              \ifnum\@pageat<3
                \ifcase\@pageat\raggedright\or\centering\or\raggedleft\fi
                \pagemark
              \else
                \hfill
              \fi
            \else
              \hfill
            \fi}%
          }%
        \if@hsl\kern1pt\rule{\textwidth}{.4pt}\fi
        }%
      }%
    }%
  \let\@oddhead\@evenhead%
  \renewcommand*{\@evenfoot}{%
    \parbox[t]{\textwidth}{%
      \if@fsl
        {%
          \raggedright%
          \vskip-\baselineskip\vskip.4pt
          \hrulefill\\
          }%
      \fi
      \ifnum\@pageat>2
        \ifcase\@pageat\or\or\or\raggedright\or\centering\or\raggedleft\fi
        \strut\pagemark
      \else
        \hfill
      \fi
      }%
    }%
  \let\@oddfoot\@evenfoot
  }
\newcommand*{\ps@headings}{%
  \let\@mkboth=\markboth
  \renewcommand*{\@evenhead}{%
    \vbox{%
      \vbox{\hsize=\textwidth\hbox to\textwidth{\headfont\@nexthead}}%
      \if@hsl\kern1pt\rule{\textwidth}{.4pt}\fi%
      }%
    }%
  \let\@oddhead\@evenhead%
  \renewcommand*{\@evenfoot}{%
    \parbox[t]{\textwidth}{%
      \if@fsl
        {%
          \raggedright%
          \vskip-\baselineskip\vskip.4pt
          \hrulefill\\
          }%
      \fi
      \vbox{\hsize=\textwidth\hbox to\textwidth{\headfont\@nextfoot}}%
      }%
    }%
  \let\@oddfoot\@evenfoot
  }
\newcommand*{\ps@myheadings}{%
  \ps@headings\let\@mkboth=\@gobbletwo
  }
\let\@mkboth=\@gobbletwo
%</scrlettr>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
%  \begin{macro}{\titlepagestyle}
% \changes{v2.8d}{2001/07/05}{Neu}
%  \begin{macro}{\partpagestyle}
% \changes{v2.8d}{2001/07/05}{Neu}
%  \begin{macro}{\chapterpagestyle}
% \changes{v2.8d}{2001/07/05}{Neu}
%  \begin{macro}{\indexpagestyle}
% \changes{v2.8d}{2001/07/05}{Neu}
% Auf verschiedenen Seiten wird automatisch mit |\thispagestyle| auf
% einen anderen Seitenstil umgeschaltet. Welcher das ist, ist in
% diesem Makros abgelegt und kann bei Bedarf ge"andert
% werden. Voreingestellt ist der in fr"uheren Versionen fest
% verdrahtete Seitenstil \texttt{plain}. Da es bei Briefen die
% entsprechenden Teile nicht gibt, wird f"ur \texttt{scrlttr2}
% entsprechendes auch nicht definiert.
%    \begin{macrocode}
%<*!scrlettr>
\newcommand*{\titlepagestyle}{plain}
\newcommand*{\partpagestyle}{plain}
%<scrbook|scrreprt>\newcommand*{\chapterpagestyle}{plain}
\newcommand*{\indexpagestyle}{plain}
%</!scrlettr>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
% \subsection{Titel}
%
%  \begin{macro}{\extratitle}
%  \begin{macro}{\@extratitle}
%  \begin{macro}{\titlehead}
%  \begin{macro}{\@titlehead}
%  \begin{macro}{\subject}
%  \begin{macro}{\@subject}
%  \begin{macro}{\publishers}
%  \begin{macro}{\@publishers}
%  \begin{macro}{\uppertitleback}
%  \begin{macro}{\@uppertitleback}
%  \begin{macro}{\lowertitleback}
%  \begin{macro}{\@lowertitleback}
%  \begin{macro}{\dedication}
%  \begin{macro}{\@dedication}
% Da der Titel im \textsf{KOMA-Script} Paket wesentlich mehr
% Angaben erlaubt als bei den Standard-classes, gibt es nat"urlich
% auch einige Befehle, mit denen diese gesetzt werden k"onnen.
%
% Alle zus"atzlichen Angaben sind optional und k"onnen auch weggelassen
% werden. In diesem Fall werden Leerfelder verwendet. Bis auf |\subject|
% sind alle Zusatzbefehle |\long| deklariert.
%
% Bei Briefen entf"allt die Titelei
%    \begin{macrocode}
%<*!scrlettr>
\newcommand*{\@extratitle}{}
\newcommand{\extratitle}[1]{\gdef\@extratitle{#1}}
\newcommand*{\@titlehead}{}
\newcommand{\titlehead}[1]{\gdef\@titlehead{#1}}
\newcommand*{\@subject}{}
\newcommand*{\subject}[1]{\gdef\@subject{#1}}
\newcommand*{\@publishers}{}
\newcommand{\publishers}[1]{\gdef\@publishers{#1}}
\newcommand*{\@uppertitleback}{}
\newcommand{\uppertitleback}[1]{\gdef\@uppertitleback{#1}}
\newcommand*{\@lowertitleback}{}
\newcommand{\lowertitleback}[1]{\gdef\@lowertitleback{#1}}
\newcommand*{\@dedication}{}
\newcommand{\dedication}[1]{\gdef\@dedication{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\next@tpage}
% \changes{v2.3b}{1995/07/24}{\cs{null} entfernt.}
% \changes{v2.3g}{1996/01/14}{\cs{newpage} durch \cs{clearpage} ersetzt.}
%    \begin{macrocode}
\newcommand*{\next@tpage}{\clearpage\thispagestyle{empty}}
%    \end{macrocode}
% Innerhalb eines Titels auf die n"achste Seite umschalten.
%  \end{macro}
%  \begin{macro}{\maketitle}
% Anschlie"send wird der Titel generiert.
% Bei |scrartcl| mu"s unterschieden werden, ob der Titel auf einer eigenen
% Titelseite oder als Seitenkopf erstellt werden soll. Der
% \textsf{KOMA-Script}-Titel ist u.U. sehr gro"s. In diesem Fall
% sollte eigentlich immer eine Titelseite verwendet werden.
% \changes{v2.1a}{1994/10/29}{Das Hilfskonstrukt \cs{@maketitle}
%                             wurde aus der Unterscheidung
%                             herausgenommen. Dies ist f"ur
%                             den Fall, da"s \cs{maketitle}
%                             von einem package "uberladen wird.}
% \changes{v2.3a}{1995/07/08}{\texttt{plus} durch \cs{@plus} ersetzt.}
% \changes{v2.3a}{1995/07/08}{\texttt{fill} durch \cs{fill} ersetzt.}
% \changes{v2.3d}{1995/08/19}{\cs{fill} durch \texttt{fill} ersetzt.}
% \changes{v2.3a}{1995/07/08}{\cs{vfil} durch \cs{vfill} ersetzt.}
% \changes{v2.3b}{1995/07/24}{Umbruch bei \cs{@extratitle} in der
%                             beidseitigen Titelseite korrigiert.}
% \changes{v2.3g}{1996/01/14}{\cs{footnote} funktioniert nun auch im
%                             Titel} 
% \changes{v2.4}{1996/02/25}{\cs{footnote} funktioniert nun wirklich im
%                            Titel.}
% \changes{v2.4h}{1996/11/09}{Egal ob der Titel auf eine Extraseite
%                             kommt oder nicht, \cs{@title} wird mit
%                             \cs{sectfont} gesetzt, wobei die Gr"o"se
%                             neuerdings danach eingestellt wird.}
% \changes{v2.4l}{1997/02/06}{Symbolische Fu"snoten und
%                             Fu"snotensymbolbreiten von 0pt zur
%                             besseren Zentrierung des Autors sind
%                             auch bei Titelseiten angebracht.}
% \changes{v2.8p}{2001/09/22}{\cs{titlefont} an Stelle von \cs{sectfont}}
%    \begin{macrocode}
\if@titlepage
    \newcommand*\maketitle[1][1]{\begin{titlepage}%
    \setcounter{page}{#1}
    \let\footnotesize\small
    \let\footnoterule\relax
    \let\footnote\thanks
    \renewcommand*\thefootnote{\@fnsymbol\c@footnote}%
    \let\@oldmakefnmark\@makefnmark
    \renewcommand*{\@makefnmark}{\rlap\@oldmakefnmark}
    \ifx\@extratitle\@empty \else
        \noindent\@extratitle\next@tpage\cleardoublepage
        \thispagestyle{empty}
    \fi
    \ifx\@titlehead\@empty \else
        \noindent\begin{minipage}[t]{\textwidth}
        \@titlehead
        \end{minipage}\par
    \fi
    \null\vfill
    \begin{center}
    \ifx\@subject\@empty \else
        {\Large \@subject \par}
        \vskip 3em
    \fi
    {\titlefont\huge \@title\par}
    \vskip 3em
    {\Large \lineskip 0.75em
    \begin{tabular}[t]{c}
        \@author
    \end{tabular}\par}
    \vskip 1.5em
    {\Large \@date \par}
    \vskip \z@ \@plus3fill
    {\Large \@publishers \par}
    \vskip 3em
    \end{center}\par
    \@thanks
    \vfill\null
    \if@twoside\next@tpage
        \noindent\begin{minipage}[t]{\textwidth}
        \@uppertitleback
        \end{minipage}\par
        \vfill
        \noindent\begin{minipage}[b]{\textwidth}
        \@lowertitleback
        \end{minipage}
    \fi
    \ifx\@dedication\@empty \else
        \next@tpage\null\vfill
        {\centering \Large \@dedication \par}
        \vskip \z@ \@plus3fill
        \if@twoside \next@tpage\cleardoublepage \fi
    \fi
    \end{titlepage}
    \setcounter{footnote}{0}%
%    \end{macrocode}
% \changes{v2.3g}{1996/01/14}{Verwendung von \cs{global}\cs{let} statt
%                             \cs{gdef}, um Speicher zu sparen.}
% \changes{v2.3g}{1996/01/14}{\cs{@date} und \cs{title} u."a. ebenfalls
%                             l"oschen, um Speicher zu sparen.}
%    \begin{macrocode}
    \global\let\thanks\relax
    \global\let\maketitle\relax
    \global\let\@thanks\@empty
    \global\let\@author\@empty
    \global\let\@date\@empty
    \global\let\@title\@empty
    \global\let\@extratitle\@empty
    \global\let\@titlehead\@empty
    \global\let\@subject\@empty
    \global\let\@publishers\@empty
    \global\let\@uppertitleback\@empty
    \global\let\@lowertitleback\@empty
    \global\let\@dedication\@empty
    \global\let\author\relax
    \global\let\title\relax
    \global\let\extratitle\relax
    \global\let\titlehead\relax
    \global\let\subject\relax
    \global\let\publishers\relax
    \global\let\uppertitleback\relax
    \global\let\lowertitleback\relax
    \global\let\dedication\relax
    \global\let\date\relax
    \global\let\and\relax}
\else
%    \end{macrocode}
% \changes{v2.3a}{1995/07/08}{Verwendung von \cs{@makefnmark} in
%                             \cs{@makefntext}.}
% \changes{v2.3a}{1995/07/08}{Definition von \cs{@makefnmark} und
%                             \cs{@makefntext} unabh"angig von math
%                             definiert.}
% \changes{v2.3e}{1995/08/30}{Optionales Argument bei der einseitigen
%                             Version erlauben und ignorieren.}
% \changes{v2.3g}{1996/01/14}{Mehrfach \cs{null} bei \cs{next@tpage}
%                             erg"anzt.}
% \changes{v2.4l}{1997/02/06}{Es ist nicht mehr notwendig \cs{\@makefntext}
%                             umzudefinieren, stattdessen wird nur
%                             \cs{\@makefnmark} umdefiniert.}
% \changes{v2.8d}{2001/07/05}{\cs{titlepagestyle} statt \texttt{plain}}
%    \begin{macrocode}
     \newcommand*\maketitle[1][1]{\par
       \@tempcnta=#1\relax\ifnum\@tempcnta=1\else
%<scrartcl>         \ClassWarning{scrartcl}
%<scrreprt>         \ClassWarning{scrreprt}
%<scrbook>         \ClassWarning{scrbook}
                      {Optional argument of \string\maketitle\space ignored
                       at\MessageBreak
                       notitlepage-mode}\fi
       \begingroup
         \renewcommand*\thefootnote{\@fnsymbol\c@footnote}%
         \let\@oldmakefnmark\@makefnmark
         \renewcommand*{\@makefnmark}{\rlap\@oldmakefnmark}
         \if@twocolumn
           \ifnum \col@number=\@ne
             \@maketitle
           \else
             \twocolumn[\@maketitle]%
           \fi
         \else
           \newpage
           \global\@topnum\z@
           \@maketitle
         \fi
         \thispagestyle{\titlepagestyle}\@thanks
       \endgroup
       \setcounter{footnote}{0}%
       \let\thanks\relax
       \let\maketitle\relax
       \let\@maketitle\relax
%    \end{macrocode}
% \changes{v2.3g}{1996/01/14}{Verwendung von \cs{global}\cs{let} statt
%                             \cs{gdef}, um Speicher zu sparen.}
% \changes{v2.3g}{1996/01/14}{\cs{@date} und \cs{title} u."a. ebenfalls
%                             l"oschen, um Speicher zu sparen.}
%    \begin{macrocode}
       \global\let\@thanks\@empty
       \global\let\@author\@empty
       \global\let\@date\@empty
       \global\let\@title\@empty
       \global\let\@extratitle\@empty
       \global\let\@titlehead\@empty
       \global\let\@subject\@empty
       \global\let\@publishers\@empty
       \global\let\@uppertitleback\@empty
       \global\let\@lowertitleback\@empty
       \global\let\@dedication\@empty
       \global\let\author\relax
       \global\let\title\relax
       \global\let\extratitle\relax
       \global\let\titlehead\relax
       \global\let\subject\relax
       \global\let\publishers\relax
       \global\let\uppertitleback\relax
       \global\let\lowertitleback\relax
       \global\let\dedication\relax
       \global\let\date\relax
       \global\let\and\relax}
\fi
%    \end{macrocode}
%  \begin{macro}{\@maketitle}
%    \begin{macrocode}
\newcommand*{\@maketitle}{%
    \clearpage
    \let\footnote\thanks
    \ifx\@extratitle\@empty \else
        \noindent\@extratitle \next@tpage \if@twoside \null\next@tpage \fi
    \fi
    \ifx\@titlehead\@empty \else
        \noindent\begin{minipage}[t]{\textwidth}
        \@titlehead
        \end{minipage}\par
    \fi
    \null
    \vskip 2em%
    \begin{center}%
    \ifx\@subject\@empty \else
        {\Large \@subject \par}
        \vskip 1.5em
    \fi
    {\titlefont\huge \@title \par}%
    \vskip 1.5em%
    {\Large
      \lineskip .5em%
      \begin{tabular}[t]{c}%
        \@author
      \end{tabular}\par}%
    \vskip 1em%
    {\Large \@date \par}%
    \vskip \z@ \@plus 1em
    {\Large \@publishers \par}
    \ifx\@dedication\@empty \else
        \vskip 2em
        {\Large \@dedication \par}
    \fi
  \end{center}%
  \par
  \vskip 2em}
%</!scrlettr>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%
% \subsection{Kapiteleinteilung}
%
% Die gesamte Gliederungsgeschichte entf"allt bei Briefen:
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
% \changes{v2.3h}{1996/01/20}{Gr"o"senbefehle in den "Uberschriften
%                             variabel gestaltet.}
%  \begin{macro}{\numberline}
% \changes{v2.3c}{1995/08/06}{\cs{numberline} umdefiniert.}
% Dieses Makro wird indirekt im Inhaltsverzeichnis verwendet und mu"s 
% umdefiniert werden, um Duden Regel~5 und Regel~6 zu implementieren.
%    \begin{macrocode}
\renewcommand*{\numberline}[1]{%
  \hb@xt@\@tempdima{#1\autodot\hfil}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\chaptermark}
% Dieses Makro, das f"ur lebende Kolumnentitel auf Kapitelebene
% zust"andig ist, wird im Kernel nicht definiert. Deshalb wird es hier
% nachgeholt. Strenggenommen ist das nur notwendig, wenn innerhalb der
% Seitenstildefinitionen |\renewcommand| verwendet wird. Auf jedenfall
% ist es sauberer, die Definition hier durchzuf"uhren, als sie
% wegzulassen.
%    \begin{macrocode}
%<!scrartcl>\newcommand*\chaptermark[1]{}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{Counter}{secnumdepth}
%  \begin{Counter}{part}
%  \begin{Counter}{chapter}
%  \begin{Counter}{section}
%  \begin{Counter}{subsection}
%  \begin{Counter}{subsubsection}
%  \begin{Counter}{paragraph}
%  \begin{Counter}{subparagraph}
%  \begin{macro}{thepart}
%  \begin{macro}{thechapter}
%  \begin{macro}{thesection}
%  \begin{macro}{thesubsection}
%  \begin{macro}{thesubsubsection}
%  \begin{macro}{theparagraph}
%  \begin{macro}{thesubparagraph}
% Au"serdem werden an dieser Stelle nun einige Z"ahler definiert und
% initialisiert, die f"ur die Gliederung ma"sgeblich sind. Das
% Erscheinungsbild der Z"ahler bei ihrer Ausgabe wird ebenfalls festgelegt.
%    \begin{macrocode}
%<!scrartcl>\setcounter{secnumdepth}{2}
%<scrartcl>\setcounter{secnumdepth}{3}
\newcounter{part}
%<!scrartcl>\newcounter{chapter}
%<scrartcl>\newcounter{section}
%<!scrartcl>\newcounter{section}[chapter]
\newcounter{subsection}[section]
\newcounter{subsubsection}[subsection]
\newcounter{paragraph}[subsubsection]
\newcounter{subparagraph}[paragraph]
\renewcommand*\thepart{\@Roman\c@part}
%<!scrartcl>\renewcommand*\thechapter{\@arabic\c@chapter}
%<!scrartcl>\renewcommand*\thesection{\thechapter.\@arabic\c@section}
%<scrartcl>\renewcommand*\thesection{\@arabic\c@section}
\renewcommand*\thesubsection{\thesection.\@arabic\c@subsection}
\renewcommand*\thesubsubsection{\thesubsection.\@arabic\c@subsubsection}
\renewcommand*\theparagraph{\thesubsubsection.\@arabic\c@paragraph}
\renewcommand*\thesubparagraph{\theparagraph.\@arabic\c@subparagraph}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{Counter}
%  \end{Counter}
%  \end{Counter}
%  \end{Counter}
%  \end{Counter}
%  \end{Counter}
%  \end{Counter}
%  \end{Counter}
%
%  \begin{macro}{\@thepart}
%  \changes{v2.8e}{2001/07/10}{Entfernt}
%  \begin{macro}{\@maybeasf}
%  \changes{v2.8e}{2001/07/10}{Entfernt}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\@chapapp}
% Analog zu den Standardklassen.
%    \begin{macrocode}
%<!scrartcl>\newcommand*\@chapapp{\chaptername}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\frontmatter}
% \changes{v2.4e}{1996/07/02}{Option \texttt{openany} beachten.}
% \changes{v2.5h}{1999/12/29}{Option \texttt{twoside} beachten.}
%    \begin{macrocode}
%<*scrbook>
\newcommand*\frontmatter{\if@twoside\cleardoublepage\else\clearpage\fi
  \@mainmatterfalse\pagenumbering{roman}}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\mainmatter}
% \changes{v2.4e}{1996/07/02}{Option \texttt{openany} beachten.}
% \changes{v2.5h}{1999/12/29}{Option \texttt{twoside} beachten.}
%    \begin{macrocode}
\newcommand*\mainmatter{\if@twoside\cleardoublepage\else\clearpage\fi
  \@mainmattertrue\pagenumbering{arabic}}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\backmatter}
% Auch wenn nicht ganz einzusehen ist, warum das anders sein soll,
% wird hier nicht nach der Option \texttt{twoside}, sondern nach
% \texttt{openright} unterschieden.
%    \begin{macrocode}
\newcommand*\backmatter{\if@openright\cleardoublepage\else\clearpage\fi
      \@mainmatterfalse}
%</scrbook>
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\part}
% \changes{v2.1c}{1995/01/17}{Zeichenkette "`markboth"' durch
%                             Befehl \cs{markboth} ersetzt.}
% \changes{v2.2c}{1995/05/25}{Part-Ausgabe auf CJK umgestellt.}
% \changes{v2.3c}{1995/08/06}{Alternative Numerierung bei r"omischer
%                             Part-Numerierung.}
% \changes{v2.3d}{1995/08/19}{Alternative Numerierung korrigiert.}
% \changes{v2.3g}{1996/01/14}{\cs{hbox} durch \cs{null} ersetzt.}
% \changes{v2.8d}{2001/07/05}{\cs{partpagestyle} statt \texttt{plain}}
% \changes{v2.8p}{2001/09/27}{Pr"aambel "uber der "Uberschrift
%                             hinzugef"ugt} 
% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont} behebt
%   einen Bug im color Paket}
%  \begin{macro}{\@part}
% \changes{v2.4b}{1996/03/29}{\cs{size@partnumer} durch
%                             \cs{size@partnumber} ersetzt.}
% \changes{v2.4n}{1997/05/28}{F"ur scrartcl \cs{markboth} zum L"oschen
%                             der Kolumnentitel durch \cs{sectionmark}
%                             ersetzt.}
% \changes{v2.4n}{1997/05/28}{In der Sternvariante \cs{chaptermark} bzw.
%                             \cs{sectionmark} eingef"ugt, um die
%                             Kolumnentitel zu l"oschen.}
% \changes{v2.6a}{2000/01/20}{Zum L"oschen der Kolumnentitel wird nun
%                             \cs{@mkboth} verwendet.}
% \changes{v2.8e}{2001/07/10}{\cs{@maybeautodot} wird aufgerufen}
% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
%                             \cs{size@part} und \cs{size@partnumber}
%                             aufgerufen} 
% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}
% \changes{v2.9c}{2002/08/10}{\cs{@parskipfalse}\cs{@parskip@indent}
%   und \cs{centering} in der Reihenfolge vertauscht}
%  \begin{macro}{\@spart}
% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}
% \changes{v2.9c}{2002/08/10}{\cs{@parskipfalse}\cs{@parskip@indent}
%   und \cs{centering} in der Reihenfolge vertauscht}
%  \begin{macro}{\@endpart}
% Der Gliederungsfehl |\part| wird wie in den Standardklassen mit Hilfe
% mehrere Hilfsmakros definiert. Wesentliche Unterschiede zu den
% Standardklassen existieren nicht, jedoch sind Schriftgr"o"se,
% Schriftart u.~"a. flexibler gehalten. Au"serdem gibt es die
% M"oglichkeit von Pr"aambeln. \emph{Achtung: Die Pr"aambel vor der
% \cs{part}-"Uberschrift kann ohne Warnung "uber den oberen Rand
% hinaus reichen!}
% \changes{v2.4e}{1996/07/02}{Option \texttt{openany} beachten.}
% \changes{v2.5e}{1998/07/17}{\cs{numberline} verwendet, damit die
%                             reservierte Part-Nummern-Breite in
%                             \cs{l@part} auch wirklich verwendet
%                             wird}
%    \begin{macrocode}
%<*scrartcl>
\newcommand\part{\par
   \addvspace{4ex}%
   \@afterindentfalse
   \secdef\@part\@spart}
%</scrartcl>
%<*scrreprt|scrbook>
\newcommand\part{\if@openright\cleardoublepage\else\clearpage\fi
                 \thispagestyle{\partpagestyle}%
                 \if@twocolumn
                     \onecolumn
                     \@tempswatrue
                   \else
                     \@tempswafalse
                 \fi
                 \null\vfil%
                 \vbox to\z@{\vss\use@preamble{part@o}\strut\par}%
                 \vskip-\baselineskip\nobreak%
                 \secdef\@part\@spart}
%</scrreprt|scrbook>
\newcommand*{\@part}{}
\def\@part[#1]#2{%
%<*scrartcl>
    \ifnum \c@secnumdepth >\m@ne
      \refstepcounter{part}%
      \@maybeautodot\thepart%
      \addcontentsline{toc}{part}{\protect\numberline{\thepart}#1}%
    \else
      \addcontentsline{toc}{part}{#1}%
    \fi
    {\parindent \z@ \raggedright
     \interlinepenalty \@M
     \normalfont\sectfont\nobreak
     \ifnum \c@secnumdepth >\m@ne
       \size@partnumber\partformat
       \par\nobreak
     \fi
     \size@part #2\strut%
     \@mkboth{}{}\par}%
     \nobreak
     \vskip 3ex
    \@afterheading}
%</scrartcl>
%<*scrreprt|scrbook>
    \ifnum \c@secnumdepth >-2\relax
      \refstepcounter{part}%
      \@maybeautodot\thepart%
      \addcontentsline{toc}{part}{\protect\numberline{\thepart}#1}%
    \else
      \addcontentsline{toc}{part}{#1}%
    \fi
    \@mkboth{}{}%
    {\@parskipfalse\@parskip@indent\centering
     \interlinepenalty \@M
     \normalfont\sectfont
     \ifnum \c@secnumdepth >-2\relax
       \size@partnumber\partformat
       \par
       \vskip 20\p@
     \fi
     \size@part #2\strut\par}%
    \@endpart}
%</scrreprt|scrbook>
\newcommand*{\@spart}[1]{%
%<*scrartcl>
    {\parindent \z@ \raggedright
     \interlinepenalty \@M
     \normalfont
     \sectfont\nobreak\size@part #1\strut\@mkboth{}{}\par}%
     \nobreak
     \vskip 3ex
    \@afterheading}
%</scrartcl>
%<*scrreprt|scrbook>
    {\@parskipfalse\@parskip@indent\centering
     \interlinepenalty \@M
     \normalfont
     \sectfont\size@part #1\strut\@mkboth{}{}\par}%
    \@endpart}
%    \end{macrocode}
% \changes{v2.3g}{1996/01/14}{\cs{@endpart} wird f"ur scrartcl nicht mehr
%                             definiert}
% \changes{v2.6c}{2000/06/10}{\cs{@endpart} f"ugt nur noch in beidseitigen
%                             Dokumenten bei Verwendung von openright eine
%                             Leerseite ein}
% \changes{v2.8p}{2001/09/27}{\cs{vbox} eingef"ugt}
% \changes{v2.8p}{2001/09/27}{\cs{use@preamble} ersetzt
%                             \cs{@part@preamble}}
%    \begin{macrocode}
\newcommand*{\@endpart}{\vbox to\z@{\use@preamble{part@u}\vss}%
  \vfil\newpage
  \if@twoside\if@openright
      \null%
      \thispagestyle{empty}%
      \newpage
  \fi\fi
  \if@tempswa
    \twocolumn
  \fi}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
%  \begin{macro}{\addpart}
% \changes{v2.8c}{2001/06/29}{Neu}
% \changes{v2.8d}{2001/07/05}{\cs{partpagestyle} statt \texttt{plain}}
%  \begin{macro}{\@addpart}
% \changes{v2.8c}{2001/06/29}{Neu}
% \changes{v2.8l}{2001/08/17}{Erst eintagen, dann ausgeben}
%  \begin{macro}{\@saddpart}
% \changes{v2.8c}{2001/06/29}{Neu}
%    \begin{macrocode}
%<*scrartcl>
\newcommand\addpart{\par
  \addvspace{4ex}%
  \@afterindentfalse
  \secdef\@addpart\@saddpart}
%</scrartcl>
%<*scrreprt|scrbook>
\newcommand\addpart{\if@openright\cleardoublepage\else\clearpage\fi
  \thispagestyle{\partpagestyle}%
  \if@twocolumn
    \onecolumn
    \@tempswatrue
  \else
    \@tempswafalse
  \fi
  \null\vfil
  \secdef\@addpart\@saddpart}
%</scrreprt|scrbook>
\newcommand*{\@addpart}{}
\def\@addpart[#1]#2{\addcontentsline{toc}{part}{#1}\@spart{#2}}
\newcommand*{\@saddpart}{}
\def\@saddpart#1{\@spart{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
%  \begin{macro}{\chapter}
% \changes{v2.8d}{2001/07/05}{\cs{chapterpagestyle} statt \texttt{plain}}
%  \begin{macro}{\@chapter}
% \changes{v2.8e}{2001/07/10}{\cs{@maybeautodot} wird aufgerufen}
% \changes{v2.8g}{2001/07/18}{per \cs{float@addtolists} wird nun auch
%                             ein vertikaler Abstand in Listen des
%                             \texttt{float}-Pakets eingebaut}
%  \begin{macro}{\@schapter}
%  \begin{macro}{\@makechapterhead}
% \changes{v2.7b}{2001/01/05}{Kapitel k"onnen grunds"atzlich mit einer
%                             Pr"aambel versehen werden}
% \changes{v2.8p}{2001/09/25}{es gibt verschiedene Arten von
%                             Pr"aambeln}
%  \begin{macro}{\@@makechapterhead}
%    \changes{v2.8p}{2001/09/25}{Neu}
%    \changes{v2.9g}{2002/09/01}{\cs{size@chapter} verschoben}
%  \begin{macro}{\@makeschapterhead}
% Der Gliederungsfehl |\chapter|, der nur in den Klassen
% \texttt{scrbook} und \texttt{scrreprt} vorhanden ist, wird wie in
% den Standardklassen mit Hilfe mehrere Hilfsmakros definiert.
% \changes{v2.7b}{2001/01/05}{Kapitel k"onnen grunds"atzlich mit einer
%                             Preambel versehen werden}
% \changes{v2.8q}{2002/04/18}{\cs{raggedsection} wird bei Option
%   \texttt{chapterprefix} auch auf den Pr"afix angewendet}
%  \begin{macro}{\if@at@twocolumn}
% \changes{v2.7b}{2001/01/05}{Neu}
%  \begin{macro}{\scr@topnewpage}
% \changes{v2.7b}{2001/01/05}{Neu}
% \changes{v2.8q}{2001/11/27}{Fehlende Klammern erg"anzt}
%  \begin{macro}{\@topnewpage}
% \changes{v2.7b}{2001/01/05}{Neu}
% Interessant ist dabei die Erweiterung, da"s jedes Kapitel mit einer
% Preambel versehen werden kann. Diese wird im zweispaltigen Satz wie
% die "Uberschrift selbst einspaltig gesetzt. Intern wird dies f"ur
% die Preambel des Index und der Bibliography verwendet. Dabei
% entsteht aber wiederum das Problem, da"s der Indexkopf innerhalb von
% |\twocolumn| ausgegeben wird andererseits aber innerhalb von
% |\chapter| das Makro |\@topnewpage| verwendet wird. Damit w"urde
% dann also |\@topnewpage| innerhalb von |\@topnewpage|
% aufgerufen. Das ist jedoch nicht erlaubt. Als mu"s der Aufruf von
% |\@topnewpage| in |\@chapter| und |\@schapter| verhindert werden,
% wenn wir uns bereits in |\@topnewpage| befinden. Eine M"oglichkeit
% daf"ur w"are, einen Schalter in den Index-Kopf einzubauen. Wir
% w"ahlen hingegen die Methode, |\@topnewpage| entsprechend
% umzudefinieren. Damit kann dann auch der Anwender |\@chapter|
% innerhalb des optionalen Arguments von |\twocolumn| verwenden.
% \changes{v2.7g}{2001/04/17}{vergessenes \cs{long} erg"anzt}
%    \begin{macrocode}
\newif\if@at@twocolumn
\newcommand*\scr@topnewpage{}
\let\scr@topnewpage\@topnewpage
\long\def\@topnewpage[#1]{%
  \@at@twocolumntrue\scr@topnewpage[{#1}]\@at@twocolumnfalse}
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
                    \thispagestyle{\chapterpagestyle}%
                    \global\@topnum\z@
                    \@afterindentfalse
                    \secdef\@chapter\@schapter}
\newcommand*{\@chapter}{}
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
%<scrbook>                       \if@mainmatter
                         \refstepcounter{chapter}%
                         \@maybeautodot\thechapter%
                         \typeout{\@chapapp\space\thechapter.}%
                         \addcontentsline{toc}{chapter}%
                                   {\protect\numberline{\thechapter}#1}%
%<scrbook>                       \else
%<scrbook>                         \addcontentsline{toc}{chapter}{#1}\fi
                    \else
                      \addcontentsline{toc}{chapter}{#1}
                    \fi
                    \chaptermark{#1}%
                    \addtocontents{lof}{\protect\addvspace{10\p@}}%
                    \addtocontents{lot}{\protect\addvspace{10\p@}}%
                    \@ifundefined{float@addtolists}{}{%
                      \float@addtolists{\protect\addvspace{10\p@}}}
                    \if@twocolumn
                      \if@at@twocolumn
                        \@makechapterhead{#2}%
                      \else
                        \@topnewpage[\@makechapterhead{#2}]%
                      \fi
                    \else
                      \@makechapterhead{#2}%
                      \@afterheading
                    \fi}
\newcommand*{\chapterheadstartvskip}{}
\newcommand*{\chapterheadendvskip}{}
\newcommand*{\@@makechapterhead}[1]{\chapterheadstartvskip%
  {\normalfont\sectfont\size@chapter\parindent \z@%
      \if@chapterprefix\let\@tempa\raggedsection\else\let\@tempa\@hangfrom\fi%
      \@tempa{\ifnum \c@secnumdepth >\m@ne%
%<scrbook>        \if@mainmatter \chapterformat\fi\fi}%
%<!scrbook>        \chapterformat\fi}%
      \if@chapterprefix\par\nobreak\vskip.5\baselineskip\fi%
      {\raggedsection \interlinepenalty \@M #1\par}}%
    \nobreak\chapterheadendvskip%
    }
\newcommand*{\use@chapter@o@preamble}{%
  {\settoheight{\@tempdima}{\vbox{\chapterheadstartvskip}}%
    \settodepth{\@tempdimb}{\vbox{\chapterheadstartvskip}}%
    \addtolength{\@tempdima}{\@tempdimb}%
    \setbox0\vbox{\use@preamble{chapter@o}%
      \vskip-\parskip}% 
    \setlength{\@tempdimb}{\ht0}%
    \addtolength{\@tempdimb}{\dp0}%
    \vbox to \z@{%
      \vbox to \@tempdima{\vfill\box0}%
      \vskip-\@tempdima%
      }%
    \ifdim \@tempdimb>\@tempdima%
      \addtolength{\@tempdimb}{-\@tempdima}%
      \ClassWarning{%
%<scrbook>        scrbook%
%<scrreprt>        scrreprt%
%<scrartcl>        scrartcl%
        }{%
        preamble before chapter is \the\@tempdimb\space too
        high.\MessageBreak
        To avoid the overfull \string\vbox\space you may
        redefine\MessageBreak
        \string\chapterheadstartvskip\space at the preamble of
        your\MessageBreak
        document. You may also change
        \string\setchapterpreamble\MessageBreak 
        before the command, which generates the message
        about\MessageBreak
        an overfull \string\vbox
        }%
    \fi%
    }
}
\newcommand*{\@makechapterhead}[1]{%
  \use@chapter@o@preamble%
  \@@makechapterhead{#1}%
  \use@preamble{chapter@u}\nobreak%
  }
\newcommand*{\@schapter}[1]{\if@twocolumn
                    \if@at@twocolumn
                      \@makeschapterhead{#1}%
                    \else
                      \@topnewpage[\@makeschapterhead{#1}]%
                    \fi
                 \else
                   \@makeschapterhead{#1}%
                   \@afterheading
                 \fi}
\newcommand*{\@@makeschapterhead}[1]{\chapterheadstartvskip%
  {\parindent \z@ \raggedsection
    \normalfont
    \sectfont\size@chapter #1\par
    \nobreak\chapterheadendvskip
  }}
\newcommand*{\@makeschapterhead}[1]{%
  \use@chapter@o@preamble%
  \@@makeschapterhead{#1}%
  \use@preamble{chapter@u}\nobreak%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\use@preamble}
% \changes{v2.8p}{2001/09/25}{Neu}
% Dieses Makro dient allgemein zum Setzen einer Pr"aambel (f"ur
% Gliederungs"uberschriften), wenn eine
% solche definiert ist. Als Argument wird der Name der Pr"aambel
% "ubergeben, an den automatisch \verb;@preamble; angeh"angt
% wird. Zum Schluss wird die gespeicherte Pr"aambel gel"oscht.
%    \begin{macrocode}
\newcommand*{\use@preamble}[1]{%
  \@ifundefined{#1@preamble}{}{%
    \@nameuse{#1@preamble}%
    \global\expandafter\let\csname#1@preamble\endcsname=\relax}%
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\set@preamble}
% \changes{v2.8p}{2001/09/25}{Neu}
% Das Makro \cs{set@preamble} dient allgemein der Defintion einer
% Pr"aambel (f"ur Gliederungs"uberschriften). Als Argument wird der
% Name der Gliederungsebene "ubergeben. Danach folgt ein optionales
% Argument, das die Position der Pr"aambel angibt. Darauf folgt ein
% weiteres optionales Argument, das die Breite der Pr"aambel
% angibt. Ist nur ein optionales Argument angegeben, so ist es die
% Position. Es folgt ein obligatorisches Argument mit dem Inhalt der
% Pr"aambel. Die Definition der Pr"aambel erfolgt global.
%  \begin{macro}{\set@@preamble}
% \changes{v2.8p}{2001/09/25}{Neu}
%  \begin{macro}{\set@@@preamble}
% \changes{v2.8p}{2001/09/25}{Neu}
%  \begin{macro}{\set@@@@preamble}
% \changes{v2.8p}{2001/09/25}{Neu}
% \changes{v2.8q}{2001/11/27}{Fehlende Klammern erg"anzt}
% Da mehrere optionale Argumente nach einem obligatorischen Argument
% auszuwerten sind, werden diverse Hilfsmakros ben"otigt.
%    \begin{macrocode}
\newcommand*{\set@preamble}[1]{%
%    \end{macrocode}
% Zunaechst wird das erste optionale Argument gesucht.
%    \begin{macrocode}
  \@ifnextchar [
  {\set@@preamble{#1}}{\set@@@preamble{#1}[][\hsize]}}
\newcommand*{\set@@preamble}{}
\def\set@@preamble#1[#2]{%
%    \end{macrocode}
% Wenn ein optionales Argument existiert, kann es auch ein zweites
% geben. Wenn nicht, wird mit der Voreinstellung gearbeitet.
%    \begin{macrocode}
  \@ifnextchar [
  {\set@@@preamble{#1}[{#2}]}{\set@@@preamble{#1}[{#2}][\hsize]}}
\newcommand{\set@@@preamble}{}
\long\def\set@@@preamble#1[#2][#3]#4{%
%    \end{macrocode}
% Dies ist das Hauptmakro, das die eigentliche Arbeit macht. Es muss
% long definiert werden, da die Pr"aambel auch aus mehreren Abs"atzen
% bestehen kann.
%
% Zun"achst wird das Positionsargument ausgewertet. Dies geschieht mit
% lokalen Hilfsmakros und einer Schleife. Zur Funktion der Schleife
% siehe im dokumentierten \LaTeX-Kern.
%    \begin{macrocode}
  {%
    \def\prmbl@pos{#2}\let\prmbl@hpos\relax\let\prmbl@vpos\relax%
    \expandafter \@tfor \expandafter \@tempa%
      \expandafter :\expandafter =\prmbl@pos%
    \do{%
      \if \@tempa l%
        \set@preamble@hpos{0}{#2}%
      \fi%
      \if \@tempa c%
        \set@preamble@hpos{1}{#2}%
      \fi%
      \if \@tempa r%
        \set@preamble@hpos{2}{#2}%
      \fi%
      \if \@tempa u%
        \set@preamble@vpos{0}{#2}%
      \fi%
      \if \@tempa o%
        \set@preamble@vpos{1}{#2}%
      \fi%
      }
%    \end{macrocode}
% Wurde keine horizontale oder vertikale Ausrichtung definiert, so
% wird nun der Standardwert daf"ur eingesetzt.
%    \begin{macrocode}
    \@ifundefined{prmbl@hpos}{\def\prmbl@hpos{0}}{}%
    \@ifundefined{prmbl@vpos}{\def\prmbl@vpos{0}}{}%
%    \end{macrocode}
% Nun sind die Positionen ermittelt und es werden abh"angig davon
% entsprechende P"aambelmakros definiert. 
%    \begin{macrocode}
    \ifcase\prmbl@hpos
%    \end{macrocode}
% Zun"achst links unten und oben:
%    \begin{macrocode}
      \ifcase\prmbl@vpos
        \set@@@@preamble{#1@u}{t}{#3}{}{\hfil}{#4}
      \else
        \set@@@@preamble{#1@o}{b}{#3}{}{\hfil}{#4}
      \fi
    \or
%    \end{macrocode}
% Dann zentriert unten und oben:
%    \begin{macrocode}
      \ifcase\prmbl@vpos
        \set@@@@preamble{#1@u}{t}{#3}{\hfil}{\hfil}{#4}
      \else
        \set@@@@preamble{#1@o}{b}{#3}{\hfil}{\hfil}{#4}
      \fi
    \else
%    \end{macrocode}
% Zum Schluss rechts und oben:
%    \begin{macrocode}
      \ifcase\prmbl@vpos
        \set@@@@preamble{#1@u}{t}{#3}{\hfil}{}{#4}
      \else
        \set@@@@preamble{#1@o}{b}{#3}{\hfil}{}{#4}
      \fi
    \fi
   }
}
%    \end{macrocode}
% Es folgt das Makro, mit dem die Definition tats"achlich
% stattfindet. Das erste Argument ist der Name der Pr"aambel, das
% zweite die Positionsoption f"ur die verwendete \cs{parbox}, das
% dritte ist die Breite der \cs{parbox}, dann zwei Argumente mit der
% horizontalen Ausrichtung vor und nach der \cs{parbox} und das
% sechste Agument ist schlie"slich der Inhalt der \cs{parbox}.
%    \begin{macrocode}
\newcommand{\set@@@@preamble}[6]{%
  \expandafter\gdef\csname #1@preamble\endcsname{%
    \hbox to\hsize{#4\parbox[{#2}]{#3}{#6\par}#5\par}}}
%    \end{macrocode}
%
%  \begin{macro}{\set@preamble@hpos}
% \changes{v2.8q}{2001/09/25}{Neu}
% Eines der Hilfsmakros dient dazu, die horizontale Position der
% Pr"aambel einzustellen, falls dies nicht bereits erfolgt ist. Ist es
% bereits nicht "ubereinstimmend erfolg, wird ein Fehler
% ausgegeben. Dieses Makro ist extrem intern und funktioniert nur im
% Kontext vor \cs{set@preamble}.
%    \begin{macrocode}
\newcommand*{\set@preamble@hpos}[2]{%
  \@ifundefined{prbml@hpos}{%
    \def\prmbl@hpos{#1}%
    }{%
    \ifnum \prmbl@hpos=0\relax\else%
      \ClassError{%
%<scrbook>        scrbook%
%<scrreprt>        scrreprt%
%<scrartcl>        scrartcl%
        }{%
        inconsistent hpos options%
        }{%
        You said `#2' as position option. But you have
        to\MessageBreak
        use only one from `l', `r' or `c' not two of
        these.\MessageBreak
        If you'll continue only first hpos option will be
        used}%
    \fi}}
%    \end{macrocode}
%  \end{macro}%\iffalse\set@preamble@hpos\fi
%  \begin{macro}{\set@preamble@vpos}
% \changes{v2.8q}{2001/09/25}{Neu}
% Das Hilfsmakro f"ur die vertikale Position funktioniert in gleicher
% Weise.
%    \begin{macrocode}
\newcommand*{\set@preamble@vpos}[2]{%
  \@ifundefined{prbml@vpos}{%
    \def\prmbl@vpos{#1}%
    }{%
    \ifnum \prmbl@vpos=0\relax\else%
      \ClassError{%
%<scrbook>        scrbook%
%<scrreprt>        scrreprt%
%<scrartcl>        scrartcl%
        }{%
        inconsistent vpos options%
        }{%
        You said `#2' as position option. But you have
        to\MessageBreak
        use only one from `o' or `u' not two of
        these.\MessageBreak
        If you'll continue only first vpos option will be
        used}%
    \fi}}
%    \end{macrocode}
%  \end{macro}%\iffalse\set@preamble@vpos\fi
%  \end{macro}%\iffalse\set@@@@preamble\fi
%  \end{macro}%\iffalse\set@@@preamble\fi
%  \end{macro}%\iffalse\set@@preamble\fi
%  \end{macro}%\iffalse\set@preamble\fi
%
%
%  \begin{macro}{\dictum}
% \changes{v2.8q}{2001/20/04}{Neu}
%  \begin{macro}{\dictumwidth}
% \changes{v2.8q}{2001/20/04}{Neu}
%  \begin{macro}{\raggeddictum}
% \changes{v2.8q}{2001/20/04}{Neu}
%  \begin{macro}{\raggeddictumtext}
% \changes{v2.8q}{2001/20/04}{Neu}
%  \begin{macro}{\raggeddictumauthor}
% \changes{v2.8q}{2001/20/04}{Neu}
%  \begin{macro}{\@dictumfont}
% \changes{v2.8q}{2001/20/04}{Neu}
%  \begin{macro}{\scr@fnt@dictumtext}
% \changes{v2.8q}{2001/20/04}{Neu}
%  \begin{macro}{\scr@fnt@instead@dictum}
% \changes{v2.8q}{2001/20/04}{Neu}
%  \begin{macro}{\@dictumauthorfont}
% \changes{v2.8q}{2001/20/04}{Neu}
%  \begin{macro}{\scr@fnt@dictumauthor}
% \changes{v2.8q}{2001/20/04}{Neu}
%  \begin{macro}{\dictumauthorformat}
% \changes{v2.8q}{2001/20/04}{Neu}
% Ein \emph{dictum} ist ein Spruch. Er besteht aus dem Spruch selbst
% und verf"ugt optional "uber einen Autor, der dann mit einer Linie
% abgetrennt wird. Gibt es keinen Autor, gibt es auch keine Linie. Die
% Schriften f"ur Autor und Spruch k"onnen getrennt voneinander
% eingestellt werden. Die Anordnung des Spruchs wird durch
% \cs{raggeddictumtext} gesetzt. Die des Autors durch
% \cs{raggeddictumauthor}. Die Formatierung selbst geschieht mit dem
% Makro \cs{dictumauthorformat}. Vordefiniert ist, den Namen des
% Autors in 
% runde Klammern zu setzen. Die gesamte Geschichte von Text und Autor
% wird in eine Box der Breite \cs{dictumwidth} gepackt. Diese wird mit
% \cs{raggeddictum} angeordnet.
%    \begin{macrocode}
\newcommand{\dictum}[2][]{\par%
  \raggeddictum\parbox{\dictumwidth}{%
    {\@dictumfont{\raggeddictumtext #2\strut\par}%
      \edef\@tempa{#1}\ifx\@tempa\@empty\else%
      {\raggeddictumtext\vskip-1ex\hrulefill\par}%
      \raggeddictumauthor\@dictumauthorfont\dictumauthorformat{#1}%
      \strut\par%
      \fi%
      }%
    }\par%
  }
\newcommand*{\dictumwidth}{.3333\textwidth}
\newcommand*{\raggeddictum}{\raggedleft}
\newcommand*{\dictumauthorformat}[1]{(#1)}
\newcommand*{\raggeddictumtext}{\raggedright}
\newcommand*{\raggeddictumauthor}{\raggedleft}
\newcommand*{\@dictumfont}{\normalfont\normalcolor\sffamily\small}
\newcommand*{\@dictumauthorfont}{\itshape}
\newcommand*{\scr@fnt@dictumtext}{\@dictumfont}
\newcommand*{\scr@fnt@dictumauthor}{\@dictumauthorfont}
\newcommand*{\scr@fnt@instead@dictum}{dictumtext}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
%  \begin{macro}{\setchapterpreamble}
% \changes{v2.7b}{2001/01/05}{Neu}
% \changes{v2.8p}{2001/09/25}{Verwendung von \cs{set@preamble}}
%  \begin{macro}{\chapter@u@preamble}
% \changes{v2.8p}{2001/09/25}{Neu}
% \changes{v2.8p}{2001/09/25}{Ersatz f"ur \cs{chapter@preamble}}
%  \begin{macro}{\chapter@o@preamble}
% \changes{v2.8p}{2001/09/25}{Neu}
% Diese Makros werden ben"otigt, um die Kapitel-Pr"aambel zu setzen
% bzw. zu speichern. Leider kann an dieser Stelle \emph{nicht}
% |\renewcommand*| verwendet werden, weil das Makros unbedingt global
% definiert werden mu"s. 
%    \begin{macrocode}
\newcommand*{\setchapterpreamble}{\set@preamble{chapter}}
\newcommand*{\chapter@u@preamble}{}
\let\chapter@u@preamble\relax
\newcommand*{\chapter@o@preamble}{}
\let\chapter@o@preamble\relax
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\setpartpreamble}
% \changes{v2.8f}{2001/07/12}{Neu}
% \changes{v2.8p}{2001/09/27}{Verwendung von \cs{use@preamble}}
%  \begin{macro}{\part@preamble@u}
% \changes{v2.8p}{2001/09/27}{Ersatz f"ur \cs{part@preamble}}
%  \begin{macro}{\part@preamble@o}
% \changes{v2.8p}{2001/09/27}{Neu}\
% Analog gibt es Befehle f"ur eine Teil-Pr"aambel. Hier wird aber
% direkt mit |\relax| gearbeitet.
%    \begin{macrocode}
\newcommand*{\setpartpreamble}{\set@preamble{part}}
\newcommand*{\part@preamble@u}{}
\let\part@preamble@u\relax
\newcommand*{\part@preamble@o}{}
\let\part@preamble@o\relax
%</scrreprt|scrbook>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\addchap}
% \changes{v2.0e}{1994/08/10}{\cs{sectdef} durch \cs{secdef} ersetzt.}
% \changes{v2.0e}{1994/08/10}{\cs{addcontensline} durch
%                             \cs{addcontentsline} ersetzt.}
% \changes{v2.0e}{1994/08/10}{\cs{chaptermark} durch
%                             \cs{markboth} ersetzt.}
% \changes{v2.0e}{1994/10/12}{\cs{markboth} durch \cs{chaptermark}
%                             ersetzt.}
% \changes{v2.0e}{1994/08/10}{\cs{@makechapterhead} durch
%                             \cs{@makeschapterhead} ersetzt.}
% \changes{v2.0e}{1994/08/10}{\cs{afterheadings} durch
%                             \cs{@afterheading} ersetzt.}
% \changes{v2.1a}{1994/10/29}{Argument von \cs{chaptermark} entfernt bei
%                             "`scrbook"'.}
% \changes{v2.0e}{1994/10/12}{Mehrfach \cs{markboth} durch
%                             \cs{sectionmark} ersetzt.}
% \changes{v2.2b}{1995/03/20}{\cs{chaptermark} durch \cs{@mkboth}
%                             ersetzt.}
% \changes{v2.7a}{2001/01/04}{\cs{addsec} f"ur eine bessere
%                             Unterst"utzung von \texttt{hyperref}
%                             ge"andert}
% \changes{v2.8d}{2001/07/05}{\cs{chapterpagestyle} statt \texttt{plain}}
%  \begin{macro}{\addsec}
% \changes{v2.0e}{1994/10/12}{Mehrfach \cs{markboth} durch
%                             \cs{sectionmark} ersetzt.}
% \changes{v2.2b}{1995/03/20}{\cs{sectionmark} durch \cs{@mkboth}
%                             ersetzt.}
% \changes{v2.3h}{1995/01/21}{Jetzt auch bei scrbook und scrreprt.}
% \changes{v2.4g}{1996/11/04}{\cs{section*} vorgezogen, damit dadurch
%                             provozierte Seitenumbr"uche im
%                             Inhaltsverzeichnis ber"ucksichtigt werden.}
% \changes{v2.5d}{1998/01/03}{\cs{@mkboth} bedingt durch \cs{markright}
%                             ersetzt.}
%  \begin{macro}{\@addsec}
%  \begin{macro}{\@saddsec}
% \textsf{KOMA-Script} bietet in allen drei Hauptklassen den zus"atzlichen
% Gliederungsbefehl |\addsec| und in \texttt{scrbook} und \texttt{scrreprt}
% au"serdem |\addchap|. Es handelt sich dabei um mit |\section*| bzw.
% |\chapter*| vergleichbare Befehle, bei denen jedoch der Kolumnentitel
% korrigiert und ein Eintrag ins Inhaltsverzeichnis erfolgt (nicht in der
% Stern-Variante).
%    \begin{macrocode}
\newcommand*\addsec{\secdef\@addsec\@saddsec}
\newcommand*{\@addsec}{}
\def\@addsec[#1]#2{\section*{#2}\addcontentsline{toc}{section}{#1}
%<scrartcl> \if@twoside \@mkboth{#1}{}\else \@mkboth{#1}{#1}\fi}
%<scrreprt|scrbook> \if@twoside\ifx\@mkboth\markboth\markright{#1}\fi\fi}
\newcommand*{\@saddsec}[1]{\section*{#1}\@mkboth{}{}}
%<*scrreprt|scrbook>
%    \end{macrocode}
% Die Definition von \cs{addcap} sah bis zu Version 2.7 so aus:
% \begin{verbatim}
% \newcommand\addchap{\if@openright\cleardoublepage\else\clearpage\fi
%                     \thispagestyle{plain}%
%                     \global\@topnum\z@
%                     \@afterindentfalse
%                     \secdef\@addchap\@saddchap}
% \def\@addchap[#1]#2{\typeout{#2}
%                     \addcontentsline{toc}{chapter}{#1}
%                     \if@twoside\@mkboth{#1}{}\else\@mkboth{}{#1}\fi
%                     \addtocontents{lof}{\protect\addvspace{10\p@}}%
%                     \addtocontents{lot}{\protect\addvspace{10\p@}}%
%                     \if@twocolumn
%                          \@topnewpage[\@makeschapterhead{#2}]%
%                     \else
%                          \@makeschapterhead{#2}%
%                          \@afterheading
%                     \fi}
% \def\@saddchap#1{\@mkboth{}{}
%                  \if@twocolumn
%                       \@topnewpage[\@makeschapterhead{#1}]%
%                  \else
%                       \@makeschapterhead{#1}%
%                       \@afterheading
%                  \fi}
% \end{verbatim}
% Dies f"uhrte jedoch zu Problemen im Zusammenhang mit
% \texttt{hyperref}, da hierbei keine korrekten Links erzeugt
% werden. Mit dem \texttt{hypertex}-Treiber werden auch in der neuen
% Version keine korrekten Links erzeugt. Dies wird von mir jedoch als
% Bug in \texttt{hyperref 6.69c} betrachtet. Mit dem
% \texttt{hpdftex}-Treiber werden n"amlich im Gegensatz dazu korrekte
% Links erzeugt. Deshalb wurde der Code wie folgt vereinfacht. Von
% wesentlicher Bedeutung ist dabei der Aufruf von \cs{chapter*}, da in
% \texttt{hpdftex.def} das interne Makro \cs{@schapter} so umdefiniert
% wird, da"s ein korrekter Link erzeugt wird.
%  \begin{macro}{\@addchap}
%  \begin{macro}{\@saddchap}
%    \begin{macrocode}
\newcommand\addchap{\if@openright\cleardoublepage\else\clearpage\fi
  \thispagestyle{\chapterpagestyle}%
  \global\@topnum\z@
  \@afterindentfalse
  \secdef\@addchap\@saddchap%
}
\newcommand*{\@addchap}{}
\def\@addchap[#1]#2{\@schapter{#2}%
  \addcontentsline{toc}{chapter}{#1}%
  \if@twoside\@mkboth{#1}{}\else\@mkboth{}{#1}\fi}
\newcommand*{\@saddchap}[1]{\@schapter{#1}\@mkboth{}{}}
%    \end{macrocode}
% In \texttt{hyperref} zumindest bis Version 6.71a ist ein dicker Bug. In
% verschiedenen \texttt{def}-Dateien wird dort das \emph{interne}
% \textsf{KOMA-Script} Makro |\@addchap| umdefiniert, ohne sicherzustellen,
% da"s das Makro auch noch so aussieht, wie man das erwartet hat. Die
% sauberste L"osung w"are sicher gewesen dort |\@addchap| nur zu erg"anzen,
% so wie man das auch bei |\@schapter| gemacht hat. Ab Version 6.71b ist
% dieser Bug behoben. Damit ich nicht eines Fehlers verd"achtigt werde,
% wird ggf. eine entsorechende Meldung ausgegeben.
%  \changes{v2.7e}{2001/04/16}{Fehlende, schlie"sende Klammer erg"anzt}
%  \changes{v2.7f}{2001/04/17}{Fehlendes Klammerpaar erg"anzt}
%  \changes{v2.8q}{2001/11/17}{\cs{AfterPackage} zur "Uberpr"ufung der
%                              \texttt{hyperref}-Version verwendet}
%    \begin{macrocode}
%<*scrbook>
\AfterPackage{hyperref}{%
  \@ifpackagelater{hyperref}{2001/02/19}{}{%
    \ClassWarningNoLine{scrbook}{%
      You are using an old version of hyperref package!\MessageBreak%
      This version has a buggy hack at many drivers\MessageBreak%
      causing \string\addchap\space to behave strange.\MessageBreak%
      Please update hyperref to at least version
      6.71b}}}
%</scrbook>
%</scrreprt|scrbook>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\section}
% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
%   \cs{size@section} aufgerufen}
% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont} behebt
%   einen Bug im color Paket}
%  \begin{macro}{\subsection}
% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
%   \cs{size@subsection} aufgerufen}
% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont} behebt
%   einen Bug im color Paket}
%  \begin{macro}{\subsubsection}
% \changes{v2.3d}{1995/08/19}{wird bei \texttt{scrartcl}
%   nun ebenfalls numeriert und ins Inhaltsverzeichnis geschrieben}
% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
%   \cs{size@subsubsection} aufgerufen}
% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont} behebt
%   einen Bug im color Paket}
%  \begin{macro}{\paragraph}
% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
%   \cs{size@paragraph} aufgerufen}
% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont} behebt
%   einen Bug im color Paket}
%  \begin{macro}{\subparagraph}
% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
%   \cs{size@subparagraph} aufgerufen}
% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont} behebt
%   einen Bug im color Paket}
% Die Standardgliederungsbefehle |\section| bis |\subparagraph| sind
% mit der im Kernel daf"ur vorgesehenen Schnittstelle definiert. Im
% Unterschied zu den Standardklassen erfolgt die Formatierung jedoch
% in |\raggedsection| und der Schriftart |\sectfont|. Au"serdem sind
% die Gr"o"sen ver"anderbar. In letzter Konsequenz sollten hier
% eigentlich auch die Abst"ande variabilisiert werden. Vielleicht in
% einer sp"ateren Version.
%    \begin{macrocode}
\newcommand\section{\@startsection{section}{1}{\z@}%
  {-3.5ex \@plus -1ex \@minus -.2ex}%
  {2.3ex \@plus.2ex}%
  {\raggedsection\normalfont\sectfont\nobreak\size@section\nobreak}}
\newcommand\subsection{\@startsection{subsection}{2}{\z@}%
  {-3.25ex\@plus -1ex \@minus -.2ex}%
  {1.5ex \@plus .2ex}%
  {\raggedsection\normalfont\sectfont\nobreak\size@subsection\nobreak}}
\newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
  {-3.25ex\@plus -1ex \@minus -.2ex}%
  {1.5ex \@plus .2ex}%
  {\raggedsection\normalfont\sectfont\nobreak\size@subsubsection\nobreak}}
\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
  {3.25ex \@plus1ex \@minus.2ex}%
  {-1em}%
  {\raggedsection\normalfont\sectfont\nobreak\size@paragraph\nobreak}}
\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
  {3.25ex \@plus1ex \@minus .2ex}%
  {-1em}%
  {\raggedsection\normalfont\sectfont\nobreak\size@subparagraph\nobreak}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{minisec}
% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont} behebt
%   einen Bug im color Paket}
% In \textsf{KOMA-Script} gibt es diese zus"atzliche Gliederungsebene, die
% immer ohne Nummer und ihne Eintrag ins Inhaltsverzeichnis erfolgt.
%    \begin{macrocode}
\newcommand\minisec[1]{\@afterindentfalse \vskip 1.5ex
  {\parindent \z@
    \raggedsection\normalfont\sectfont\nobreak#1\par\nobreak}%
  \@afterheading}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\sectionragged}
% \changes{v2.3h}{1996/01/20}{"Uberschriften werden \cs{raggedsection}
%                             gesetzt.}
% \changes{v2.3h}{1996/01/20}{\cs{raggedsection} ist als \cs{raggedright}
%                             voreingestellt.}
\let\raggedsection\raggedright
%  \end{macro}
%
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
%
% \subsection{Listen-Umgebungen}
%
% \subsection{Array, Tabellen, Tabulatoren, Rahmen}
%  \begin{Length}{arraycolsep}
%  \begin{Length}{tabcolsep}
%  \begin{Length}{arrayrulewidth}
%  \begin{Length}{doublerulewidth}
%  \begin{Length}{tabbingsep}
%  \begin{Length}{@mpfootins}
%  \begin{Length}{fboxsep}
%  \begin{Length}{fboxrule}
%    \begin{macrocode}
\setlength\arraycolsep{5\p@}
\setlength\tabcolsep{6\p@}
\setlength\arrayrulewidth{.4\p@}
\setlength\doublerulesep{2\p@}
\setlength\tabbingsep{\labelsep}
\setlength{\skip\@mpfootins}{\skip\footins}
\setlength\fboxsep{3\p@}
\setlength\fboxrule{.4\p@}
%    \end{macrocode}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%
% \subsubsection{Gleichungen}
%
%  \begin{macro}{\theequation}
%    \begin{macrocode}
%<!scrartcl&!scrlettr>\@addtoreset{equation}{chapter}
\renewcommand*\theequation{%
%<!scrartcl&!scrlettr>  \thechapter.%
  \@arabic\c@equation}
%    \end{macrocode}
%  \end{macro}
%
% \subsubsection{R"ander}
%
%  \begin{Length}{leftmargini}
%  \begin{Length}{leftmarginii}
%  \begin{Length}{leftmarginiii}
%  \begin{Length}{leftmarginiv}
%  \begin{Length}{leftmarginv}
%  \begin{Length}{leftmarginvi}
%  \begin{Length}{leftmargin}
%  \begin{Length}{labelsep}
%  \begin{Length}{labelwidth}
% F"ur die Listenumgebungen in verschiedenen Stufen m"ussen R"ander
% definiert werden.
%    \begin{macrocode}
\if@twocolumn
  \setlength{\leftmargini}{2em}
\else
  \setlength{\leftmargini}{2.5em}
\fi
\setlength{\leftmarginii}{2.2em}
\setlength{\leftmarginiii}{1.87em}
\setlength{\leftmarginiv}{1.7em}
\if@twocolumn
  \setlength{\leftmarginv}{.5em}
  \setlength{\leftmarginvi}{.5em}
\else
  \setlength{\leftmarginv}{1em}
  \setlength{\leftmarginvi}{1em}
\fi
\setlength{\leftmargin}{\leftmargini}
\setlength{\labelsep}{.5em}
\setlength{\labelwidth}{\leftmargini}
\addtolength{\labelwidth}{-\labelsep}
\@beginparpenalty=-\@lowpenalty
\@endparpenalty  =-\@lowpenalty
\@itempenalty    =-\@lowpenalty
%    \end{macrocode}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%  \end{Length}
%
%
% \subsubsection{Marken}
%
% F"ur die numerierten Listenumgebungen m"ussen Marken bzw. Numerierungen
% festgelegt werden.
%  \begin{macro}{\theenumi}
%  \begin{macro}{\theenumii}
%  \begin{macro}{\theenumiii}
%  \begin{macro}{\theenumiv}
%  \begin{macro}{\labelenumi}
%  \begin{macro}{\labelenumii}
% \changes{v2.4m}{1997/02/28}{"Offnende Klammer gem"a"s Doku entfernt.}
%  \begin{macro}{\labelenumiii}
%  \begin{macro}{\labelenumiv}
%  \begin{macro}{\p@enumii}
%  \begin{macro}{\p@enumiii}
%  \begin{macro}{\p@enumiv}
%  \begin{macro}{\labelitemi}
% \changes{v2.5g}{1999/10/09}{Mathemodus eliminiert.}
%  \begin{macro}{\labelitemii}
% \changes{v2.5g}{1999/10/09}{\cs{textendash} verwendet.}
%  \begin{macro}{\labelitemiii}
% \changes{v2.5g}{1999/10/09}{Mathemodus eliminiert.}
%  \begin{macro}{\labelitemiv}
% \changes{v2.5g}{1999/10/09}{Mathemodus eliminiert.}
%    \begin{macrocode}
\renewcommand*\theenumi{\@arabic\c@enumi}
\renewcommand*\theenumii{\@alph\c@enumii}
\renewcommand*\theenumiii{\@roman\c@enumiii}
\renewcommand*\theenumiv{\@Alph\c@enumiv}
\newcommand*\labelenumi{\theenumi.}
\newcommand*\labelenumii{\theenumii)}
\newcommand*\labelenumiii{\theenumiii.}
\newcommand*\labelenumiv{\theenumiv.}
\renewcommand*\p@enumii{\theenumi}
\renewcommand*\p@enumiii{\p@enumii(\theenumii)}
\renewcommand*\p@enumiv{\p@enumiii\theenumiii}
\newcommand*\labelitemi{\textbullet}
\newcommand*\labelitemii{\normalfont\bfseries\textendash}
\newcommand*\labelitemiii{\textasteriskcentered}
\newcommand*\labelitemiv{\textperiodcentered}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
% \subsubsection{Definition der Umgebungen}
%
%  \begin{environment}{description}
% Die |description|-Umgebung dient der Beschreibung von einzelnen
% Begriffen. Der Begriff aus dem optionalen Argument des |\item|-Befehls
% wird in einem speziellen Font, dem |descfont|, gesetzte.
%    \begin{macrocode}
\newenvironment{description}
               {\list{}{\labelwidth\z@ \itemindent-\leftmargin
                        \let\makelabel\descriptionlabel}}
               {\endlist}
\newcommand*{\descriptionlabel}[1]{\hspace\labelsep
                                \descfont #1}
%    \end{macrocode}
%  \end{environment}
%
%  \begin{environment}{labeling}
% Die |labeling|-Umgebung ist eine Erweiterung des \textsf{Script} Pakets.
% Sie erwartet ein optionales und ein normales Argument. Das optionale
% Argument beschreibt einen speziellen Trenntext zwischen |\item|-Marke und
% |\item|-Beschreibung. Das eigentliche Argument wird f"ur die Ermittlung
% der Einr"uckung des Beschreibungstextes bzw. des Trenntextes ben"otigt.
%    \begin{macrocode}
\newenvironment{labeling}[2][]
  {\def\sc@septext{#1}
   \list{}{\settowidth{\labelwidth}{#2#1}
     \leftmargin\labelwidth \advance\leftmargin by \labelsep
     \let\makelabel\labelinglabel}}
  {\endlist}
\newcommand\labelinglabel[1]{#1\hfil\sc@septext}
%    \end{macrocode}
%  \end{environment}
%
% \changes{v2.1a}{1994/10/29}{\texttt{abstract}-Environment verschoben.}
%  \begin{environment}{verse}
% \changes{v2.3g}{1996/01/14}{\cs{item} mu"s keine "`[]"'-Klammern mehr
%                             verarbeiten.}
% Die Verse-Umgebung ist f"ur Zitate in Gedichtform und "ahnliches gedacht.
%    \begin{macrocode}
\newenvironment{verse}
               {\let\\=\@centercr
                \list{}{\itemsep      \z@
                        \itemindent   -1.5em%
                        \listparindent\itemindent
                        \rightmargin  \leftmargin
                        \advance\leftmargin 1.5em}%
                \item\relax}
               {\endlist}
%    \end{macrocode}
%  \end{environment}
%
%  \begin{environment}{quotation}
% \changes{v2.3g}{1996/01/14}{\cs{item} mu"s keine "`[]"'-Klammern mehr
%                             verarbeiten.}
%  \begin{environment}{quote}
% \changes{v2.3g}{1996/01/14}{\cs{item} mu"s keine "`[]"'-Klammern mehr
%                             verarbeiten.}
% Die |quotation|- und die |quote|-Umgebung erlauben rechts und links
% einger"uckte Passagen. Abs"atze werden entweder in der ersten Zeile
% zus"atzlich einger"uckt oder durch vertikalen Abstand markiert.
%    \begin{macrocode}
\newenvironment{quotation}
               {\list{}{\listparindent 1em%
                        \itemindent    \listparindent
                        \rightmargin   \leftmargin
                        \parsep        \z@ \@plus\p@}%
                \item\relax}
               {\endlist}
\newenvironment{quote}
               {\list{}{\rightmargin\leftmargin}%
                \item\relax}
               {\endlist}
%    \end{macrocode}
%  \end{environment}
%  \end{environment}
%
%  \begin{environment}{addmargin}
%    \changes{v2.8q}{2001/11/29}{Neue Umgebung}
%  \begin{environment}{addmargin*}
%    \changes{v2.8q}{2001/11/29}{Neue Umgebung}
%    \changes{v2.9a}{2002/06/27}{\cs{if@thispageodd} durch
%      \cs{ifthispageodd} ersetzt}
% Diese beiden Umgebungen "ahneln |quote| und |quotation|. Dabei
% werden Absatzeinzug und Absatzabstand nicht ver"andert. Die einzige
% Ver"anderung besteht in den R"andern. Wie stark die R"ander
% ver"andert werden, h"angt dabei von den Parametern ab. Ist nur der
% obligatorische Parameter angegeben, werden die R"ander auf beiden
% Seiten um diesen Wert vergr"o"sert. Ist ein optionaler Parameter
% angegeben, so ist dies bei |addmargin| der linke und bei
% |addmargin*| der innere Rand. Der obligatorische Parameter ist dann
% der andere Rand. Diese Entscheidung ist das einzige, was die
% Umgebungen selbst erledigen m"ussen.
%  \begin{macro}{\@addmargin}
% \changes{v2.8q}{2001/11/29}{Neu}
% Der Rest wird von diesem Makro erledigt.
%    \begin{macrocode}
\newenvironment{addmargin}{%
  \@tempswafalse\@addmargin
  }{\endlist}
\newenvironment{addmargin*}{%
  \@tempswafalse
  \if@twoside\ifthispageodd{}{\@tempswatrue}\fi
  \@addmargin
  }{\endlist}
\newcommand*{\@addmargin}[2][\@tempa]{%
  \@tempcnta=\@listdepth
  \list{}{%
    \if@tempswa
      \def\@tempa{\leftmargin}%
      \setlength{\leftmargin}{#2}%
      \setlength{\rightmargin}{#1}%
    \else
      \def\@tempa{\rightmargin}%
      \setlength{\rightmargin}{#2}%
      \setlength{\leftmargin}{#1}%
    \fi
    \setlength{\listparindent}{\parindent}%
    \setlength{\itemsep}{\parskip}%
    \setlength{\itemindent}{\z@}%
    \setlength{\topsep}{\z@}%
    \setlength{\parsep}{\parskip}%
    \setlength{\partopsep}{\parskip}%
    \let\makelabel\@gobble
    \setlength{\labelsep}{\z@}
    \setlength{\labelwidth}{\z@}
    \@listdepth=\@tempcnta%
    }%
  \item[]%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{environment}
%  \end{environment}
%
%
% \subsection{Abstract (Zusammenfassung)}
%  \begin{environment}{abstract}
% |scrartcl| und |scrreprt| bieten die M"oglichkeit einer Zusammenfassung,
% eines sogenannten Abstracts. Wenn eine Titelseite verlangt wurde,
% wird auch die Zusammenfassung auf eine eigene Seite gesetzt.
%
% |scrbook| kennt kein Abstract.
% \changes{v2.3a}{1995/07/08}{\cs{@endparpenalty} zur Verhinderung eines
%                             Seitenumbruchs nach dem Abstract-Kopf
%                             eingef"ugt.}
% \changes{v2.3g}{1996/01/14}{\cs{@beginparpenalty} zur Verhinderung eines
%                             Seitenumbruchs vor dem Abstract-Kopf
%                             eingef"ugt.}
% \changes{v2.7a}{2001/01/04}{Statt \cs{section*} wird nun \cs{addsec*}
%                             verwendet, damit die Kolumnentitel korrekt
%                             behandelt werden.}
%    \begin{macrocode}
%<*!scrbook&!scrlettr>
\if@titlepage
 \newenvironment{abstract}{%
     \titlepage
     \null\vfil
     \@beginparpenalty\@lowpenalty
     \if@abstrt
     \begin{center}
       \normalfont\sectfont\nobreak\abstractname
       \@endparpenalty\@M
     \end{center}\fi}
    {\par\vfil\null\endtitlepage}
\else
 \newenvironment{abstract}{%
     \if@twocolumn\if@abstrt
       \addsec*{\abstractname}\fi%
     \else
       \if@abstrt
       \small
       \begin{center}%
         {\normalfont\sectfont\nobreak\abstractname
           \vspace{-.5em}\vspace{\z@}}%
       \end{center}\fi%
       \quotation
     \fi}
     {\if@twocolumn\else\endquotation\fi}
\fi
%</!scrbook&!scrlettr>
%    \end{macrocode}
%  \end{environment}
%
% \subsection{Umgebung f"ur die Titelseite}
%
%  \begin{environment}{titlepage}
% Die Titelseite bedarf ebenfalls einer gesonderter Umgebung. Beim
% zweispaltigen Layout soll die Titelseite z.\,B. einspaltig gedruckt
% werden. Briefe kennen keine Titelseiten also auch nicht diese
% Umgebung.
%    \begin{macrocode}
%<*!scrlettr>
\newenvironment{titlepage}
    {%
%<!scrartcl>      \cleardoublepage
      \if@twocolumn
        \@restonecoltrue\onecolumn
      \else
        \@restonecolfalse\newpage
      \fi
      \thispagestyle{empty}%
      \if@compatibility
        \setcounter{page}{0}
      \fi}%
    {\if@restonecol\twocolumn \else \newpage \fi
    }
%</!scrlettr>
%    \end{macrocode}
%  \end{environment}
%
% \subsection{Randmarkierung}
%  \begin{macro}{\marginline}
% Das \textsf{Script} Paket stellt zus"atzlich ein Randzeilenmakro zur
% Verf"ugung, das je nach gerader oder ungerader Seite in doppelseitigen
% Layout rechts- oder linksb"undig gesetzt werden mu"s.
% \changes{v2.4l}{1997/02/06}{Die Definition mit Hilfe des optionalen
%                             Parameters von \cs{marginpar} deutlich
%                             vereinfacht.}
% \changes{v2.8q}{2001/11/27}{Fehlende Klammern erg"anzt}
%    \begin{macrocode}
\newcommand\marginline[1]{\marginpar[\raggedleft{#1}]{\raggedright #1}}
%    \end{macrocode}
%  \end{macro}
%
% \subsection{Anhang}
%  \begin{macro}{\appendix}
% Wird der Anhang aktiviert, so werden Kapitel zuk"unftig mit Buchstaben
% "`numeriert"'. Briefe kennen keinen Anhang.
% \changes{v2.2d}{1995/05/28}{\texttt{scrartcl} ben"otigt keinen Z"ahler
%                             f"ur chapter.}
% \changes{v2.3c}{1995/08/06}{Alternative Numerierung bei Verwendung
%                             eines Anhangs.}
% \changes{v2.8}{2001/06/15}{\cs{appendixmore} wird beachtet}
% \changes{v2.8e}{2001/07/10}{\cs{@altsecnumformattrue} wird nicht
%                             l"anger ausgef"uhrt}
% \changes{v2.8o}{2001/09/19}{\cs{par} eingef"ugt}
%    \begin{macrocode}
%<*!scrlettr>
\newcommand*\appendix{\par%
%<*scrartcl>
  \setcounter{section}{0}%
  \setcounter{subsection}{0}%
  \renewcommand*\thesection{\@Alph\c@section}%
%</scrartcl>
%<*scrreprt|scrbook>
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \renewcommand*\@chapapp{\appendixname}%
  \renewcommand*\thechapter{\@Alph\c@chapter}%
%</scrreprt|scrbook>
  \@ifundefined{appendixmore}{}{\appendixmore}}
%</!scrlettr>
%    \end{macrocode}
%  \end{macro}
%
%
% \subsection{Flie"sumgebungen}
%
% Briefe kennen keine Flie"sumgebungen
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
% F"ur die Flie"sumgebungen m"ussen verschiedene Konstanten definiert
% werden, die Aufteilung zwischen Text und Flie"sumgebung und
% "ahnliches regeln.
%
%  \begin{environment}{figure}
% \changes{v2.2c}{1995/05/25}{Abbildungsausgabe auf CJK umgestellt.}
% \changes{v2.8h}{2001/07/19}{\cs{caption} wird explizit zu
%                             \cs{captionbelow}}
% Zun"achst werden "`figures"', also Abbildungen behandelt.
%  \begin{Counter}{figure}
%  \begin{macro}{\thefigure}
% Daf"ur wird ein neuer Z"ahler ben"otigt, der bei der Buch- und der
% Bericht-Klasse mit \cs{chapter} zur"uckgesetzt wird.
%  \begin{macro}{\fps@figure}
% Die Standardplatzierung f"ur Abbildungen ist \emph{t}op,
% \emph{b}ottom, \emph{p}age.
%  \begin{macro}{\ftype@figure}
% Um die verschiedenen \emph{float}-Typen unterscheiden zu k"onnen,
% ben"otigen sie eine Nummer. Abbildungen bekommen hier willk"urlich
% die Nummer 1.
%  \begin{macro}{\ext@figure}
% Die Extension der Datei f"ur das Verzeichnis.
%  \begin{macro}{\fnum@figure}
% Die Ausgabe der Abbildungsnummer.
%    \begin{macrocode}
%<!scrartcl>\newcounter{figure}[chapter]
%<scrartcl>\newcounter{figure}
\renewcommand*\thefigure{%
%<!scrartcl>                        \thechapter.%
                        \@arabic\c@figure}
\newcommand*{\fps@figure}{tbp}
\newcommand*{\ftype@figure}{1}
\newcommand*{\ext@figure}{lof}
\newcommand*{\fnum@figure}{\figureformat}
\newenvironment{figure}
               {\let\caption\captionbelow\@float{figure}}
               {\end@float}
\newenvironment{figure*}
               {\let\caption\captionbelow\@dblfloat{figure}}
               {\end@dblfloat}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{Counter}
%  \end{environment}
%
%  \begin{environment}{table}
% \changes{v2.2c}{1995/05/25}{Tabellenausgabe auf CJK umgestellt.}
% \changes{v2.8h}{2001/07/19}{Bei Tabellen kann der Default f"ur
%                             \cs{caption} von Unter- auf
%                             "Uberschriften ge"andert werden} 
% Auch verschiebbare Tabellen sind m"oglich.
%  \begin{Counter}{table}
%  \begin{macro}{\thetable}
%  \begin{macro}{\fps@table}
%  \begin{macro}{\ftype@table}
%  \begin{macro}{\ext@table}
%  \begin{macro}{\fnum@table}
% Die einzelnen Makros
% daf"ur werden entsprechend denen f"ur Abbildungen definiert.
%    \begin{macrocode}
%<scrartcl>\newcounter{table}
%<!scrartcl>\newcounter{table}[chapter]
\renewcommand*\thetable{%
%<!scrartcl>                       \thechapter.%
                       \@arabic\c@table}
\newcommand*{\fps@table}{tbp}
\newcommand*{\ftype@table}{2}
\newcommand*{\ext@table}{lot}
\newcommand*{\fnum@table}{\tableformat}
\newenvironment{table}
               {\if@tablecaptionabove\let\caption\captionabove%
                 \else\let\caption\captionbelow\fi\@float{table}}
               {\end@float}
\newenvironment{table*}
               {\if@tablecaptionabove\let\caption\captionabove%
                 \else\let\caption\captionbelow\fi\@dblfloat{table}}
               {\end@dblfloat}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{Counter}
%  \end{environment}
%
%
%  \begin{macro}{\ifthispageodd}
% \changes{v2.8q}{2001/11/22}{Neu}
% H"aufig wird mit |\ifodd\value{page}| getestet, ob man sich gerade
% auf einer rechten oder einer linken Seite befindet. Dummerweise
% funktioniert das aber genaugenommen nur zuf"allig manchmal. Ob man
% sich auf einer linken oder einer rechten Seite befindet, ergibt sich
% n"amlich erst bei der Ausgabe. Deshalb wird hier ein Makro
% definiert, das "uber eine Art Label-Mechanismus arbeitet. Es werden
% bewusst keine echten |\label| und |\pageref| verwendet, weil diese
% Befehle von verschiedenen Paketen manipuliert werden.
%
%  \begin{macro}{\new@tpo@label}
% \changes{v2.8q}{2001/11/22}{Neu}
% Definition eines neuen \emph{true}-\emph{page}-\emph{odd}
% Labels. Wird in der \texttt{aux}-Datei verwendet.
%    \begin{macrocode}
\newcommand*{\new@tpo@label}[2]{%
  \expandafter\gdef\csname scr@tpo@#1\endcsname{#2}%
  }
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\ref@tpo@label}
% \changes{v2.8q}{2001/11/22}{Neu}
% Dieses Makro referenziert ein \emph{true}-\emph{page}-\emph{odd}
% Label. Ist das Label nicht definiert, so wird stattdessen the
% aktuelle Seitenzahl verwendet.
%    \begin{macrocode}
\newcommand*{\ref@tpo@label}[1]{%
  \expandafter\ifx\csname scr@tpo@#1\endcsname\relax\value{page}%
  \else\csname scr@tpo@#1\endcsname\fi}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\scr@tpo}
% \changes{v2.8q}{2001/11/22}{Neu}
% Es wird ein Z"ahler ben"otigt, der die aktuelle Nummer der Anfrage
% beinhaltet.
%    \begin{macrocode}
\newcommand*{\scr@tpo}{0}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\if@thispageodd}
%    \changes{v2.8q}{2001/11/22}{Neu}
% Dieses Makro macht die eigentliche Arbeit. Es funktioniert wie ein
% normales \cs{iffalse} oder \cs{iftrue}. Da "uber die
% \texttt{aux}-Datei gearbeitet wird, funktioniert das Ganze nur, wenn
% die Datei auch geschrieben wird und min. zwei \LaTeX-L"aufe
% erfolgen. Das Makro darf keinesfalls direkt verwendet werden, weil
% dann geschachtete \cs{if} \dots \cs{fi} nicht
% funktionieren. Stattdessen ist \cs{ifthispageodd} zu verwenden.
%    \begin{macrocode}
\newcommand*{\if@thispageodd}{%
  \begingroup%
    \@tempcnta=\scr@tpo%
    \advance\@tempcnta by\@ne%
    \xdef\scr@tpo{\the\@tempcnta}%
    \@bsphack
    \protected@write\@auxout{}{%
      \string\new@tpo@label{\scr@tpo}{\noexpand\the\value{page}}}%
    \@esphack
    \count@\ref@tpo@label{\scr@tpo}%
    \edef\@tempa{%
      \endgroup\noexpand\ifodd\noexpand\number\the\count@\space}%
  \@tempa%
}
%    \end{macrocode}
% Damit wenigstens halbwegs getestet werden kann, ob ein neuer Lauf
% durchgef"uhrt werden muss, wird hier noch eine weitere Information
% in die \texttt{aux}-Datei geschrieben und auch gleich der
% entsprechende Test vorgenommen.
%    \begin{macrocode}
\AtEndDocument{%
  \if@filesw\immediate\write\@auxout{%
    \string\gdef\string\scr@tpo@lst{\scr@tpo}}\fi%
  \ifx\scr@tpo@lst\scr@tpo\else\ifnum \scr@tpo>0
    \ClassWarningNoLine{%
%<scrbook>      scrbook%
%<scrreprt>      scrreprt%
%<scrartcl>      scrartcl%
      }{Rerun to get odd- an even-page-stuff right}%
  \fi\fi
  }
%    \end{macrocode}
%  \end{macro}
%
% Nun fehlt nur noch das eigentliche oben versprochene
% Anwendermacro. Das ist nun aber auch kein Problem mehr:
%    \begin{macrocode}
\newcommand{\ifthispageodd}[2]{\if@thispageodd #1\else #2\fi}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\caption}
% \changes{v2.2c}{1995/05/25}{Flie"stitel auf CJK umgestellt.}
% Es ist m"oglich, die Flie"sumgebungen mit einem Titel und einer
% Beschreibung zu versehen. Diese wird vom ggf. etwas abgesetzt. 
%  \begin{Length}{abovecaptionskip}
%  \begin{Length}{belowcaptionskip}
% Um wieviel ist in zwei L"angenregistern gespeichert:
%    \begin{macrocode}
\newlength\abovecaptionskip
\newlength\belowcaptionskip
\setlength\abovecaptionskip{10\p@}
\setlength\belowcaptionskip{0\p@}
%    \end{macrocode}
%  \end{Length}
%  \end{Length}
%  \begin{macro}{\if@captionabove}
% \changes{v2.8h}{2001/07/19}{Neu}
% Ob es sich um eine Unter- oder "Uberschrift handelt und also
% \cs{abovecaptionskip} davor und \cs{belowcaptionskip} danach steht
% oder umgekehrt, wird "uber diesen Schalter gesteuert. Voreingestellt
% sind Unterschriften.
%    \begin{macrocode}
\newif\if@captionabove\@captionabovefalse
%    \end{macrocode}  
%  \end{macro}
%  \begin{macro}{\scr@caption}
% \changes{v2.8h}{2001/07/19}{Neu}
%  \begin{macro}{\captionabove}
% \changes{v2.8h}{2001/07/19}{Neu}
%  \begin{macro}{\captionbelow}
% \changes{v2.8h}{2001/07/19}{Neu}
% Damit "uberhaupt zwischen Unter- und "Uberschriften unterschieden
% werden kann, muss zun"achst das Originalmakro gesichert werden. Dies
% geschieht erst zu Beginn des Dokuments, damit Pakete ggf. noch ihre
% eigenen Definitionen von \cs{caption} vornehmen k"onnen. Das
% \texttt{hyperref}-Paket ist so ein Kandidat.
%    \begin{macrocode}
\newcommand{\scr@caption}{}
\AtBeginDocument{\let\scr@caption\caption}
%    \end{macrocode}
%  \end{macro}
% Jetzt ist es m"oglich durch einfaches Umlegen des Schalters f"ur die
% korrekte Darstellung zu sorgen:
%    \begin{macrocode}
\newcommand{\captionabove}{\@captionabovetrue\scr@caption}
\newcommand{\captionbelow}{\@captionabovefalse\scr@caption}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%
%  \begin{environment}{captionbeside}
% \changes{v2.8q}{2001/11/22}{Neu}
% Um einiges komplizierter als die Beschreibung unter oder "uber die
% Tabelle oder Abbildung zu setzen, ist der Versuch, sie daneben zu
% setzen. Dies funktioniert frunds"atzlich auch nicht mit
% \texttt{longtable}-Tabellen.
%
%  \begin{macro}{\scap@pos}
% \changes{v2.8q}{2001/11/22}{Neu}
% Hier wird gespeichert, ob die Beschreibung links oder rechts vom
% Rest stehen soll. Voreingestellt ist rechts davon.
%    \begin{macrocode}
\newcommand*{\scap@pos}{r}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\scap@valign}
% \changes{v2.8q}{2001/11/22}{Neu}
% Hier wird gespeichert, ob die beiden Boxen (siehe Definition der
% Umgebung) \emph{\textbf{t}op}, \emph{\textbf{b}ottem} oder
% \emph{\textbf{c}enter} ausgerichtet werden sollen. Andere Buchstaben
% sind nicht erlaubt. Voreingestellt ist \emph{\textbf{b}ottem}.
%    \begin{macrocode}
\newcommand*{\scap@valign}{b}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\scap@caption}
% \changes{v2.8q}{2001/11/22}{Neu}
% Die Beschreibung, die der Umgebung als Parameter "ubergeben wird,
% muss zwischengespeichert werden. Hier wird lediglich das Makro
% daf"ur reserviert.
%    \begin{macrocode}
\newcommand*{\scap@caption}{}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\scap@width}
% \changes{v2.8q}{2001/11/22}{Neu}
% Die Breite, die Tabelle bzw. Abbildung einschlie"slich Beschreibung
% und insgesamt haben d"urften. Voreingestellt ist die gesamte
% verf"ugbare Breite.
%    \begin{macrocode}
\newcommand*{\scap@width}{\linewidth}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\scap@move}
% \changes{v2.8q}{2001/11/22}{Neu}
% Der Wert, um den die Tabelle bzw. Abbildung einschlie"slich
% Beschreibung nach rechts bzw. au"sen verschoben
% werden. Voreingestellt ist keine Verschiebung.
%    \begin{macrocode}
\newcommand*{\scap@move}{\z@}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\scap@currentlabel}
% \changes{v2.8q}{2001/11/24}{Neu}
% Das |\caption| innerhalb einer Umgebung (|\parbox| und
% |captionbeside|) aufgerufen wird, w"urde ein |\label|, das zwar
% innerhalb der Gleitumgebung aber nach der |captionbeside|-Umgebung
% eingef"ugt wird, nicht die Gleitumgebung, sondern die umgebende
% Referenzebene referenzieren. Damit das nicht geschieht, wird in der
% |captionbeside|-Umgebung in der |\parbox| die aktuelle Referenz
% |\@currentlabel| in dem globalen Makro |\scap@currentlabel|
% zwischengespeichert und am Ende der |captionbeside|-Umgebung mit
% Hilfe von |\aftergroup| nach dem Ende der Umgebung
% wiederhergestellt. Da die |captionbeside|-Umgebung ohnehin nicht
% geschaltelt werden kann, funktioniert das problemlos. F"ur diese
% Aktion wird hier ein globales Makro reserviert.
%    \begin{macrocode}
\newcommand*{\scap@currentlabel}{}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\ifscap@alt}
% \changes{v2.8q}{2001/11/22}{Neuer Schalter}
%  \begin{macro}{\scap@alttrue}
%  \begin{macro}{\scap@altfalse}
% Der Schalter, der angibt, ob die Verschiebung |\scap@move| im
% doppelseitigen Modus aus linken Seiten vom rechten Rand aus nach
% links erfolgen soll.
%    \begin{macrocode}
\newif\ifscap@alt
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% \begin{macro}{\@captionbeside}
% \changes{v2.8q}{2001/11/22}{Neu}
% \begin{macro}{\@@captionbeside}
% \changes{v2.8q}{2001/11/22}{Neu}
% \begin{macro}{\@@@captionbeside}
% \changes{v2.8q}{2001/11/22}{Neu}
% \begin{macro}{\@@@@captionbeside}
% \changes{v2.8q}{2001/11/22}{Neu}
% Die Umgebung soll einmal folgende Parameter besitzen:
% \begin{description}
%  \item[(optional)] Verzeichniseintrag
%  \item[(obligatorisch)] Beschreibung
%  \item[(optional)] lokaler Wert f"ur |\scap@pos|
%  \item[(optional)] lokaler Wert f"ur |\scap@width|
%  \item[(optional)] lokaler Wert f"ur |\scap@move|
%  \item[(*)] lokaler Wert f"ur \cs{ifscap@alt} (Stern gesetzt
%  entspricht |\scap@alttrue|
% \end{description}
% Wie man sieht, sollte man bei Angabe aller optionalen Parameter auch
% bewusst den Stern setzen oder darauf verzichten.
%
% Damit alle Parameter ausgewertet werden k"onnen, werden einige
% Hilfsmakros ben"otigt.
%    \begin{macrocode}
\newcommand*{\@captionbeside}{}
\long\def\@captionbeside[#1]#2{%
  \@ifnextchar [%]
    {\@@captionbeside[{#1}]{#2}}
    {\c@pti@nb@sid@[{#1}]{#2}}%
  }
\newcommand*{\@@captionbeside}{}
\long\def\@@captionbeside[#1]#2[#3]{%
  \def\scap@pos{#3}%
  \@ifnextchar [%]
    {\@@@captionbeside[{#1}]{#2}}
    {\c@pti@nb@sid@[{#1}]{#2}}%
  }
\newcommand*{\@@@captionbeside}{}
\long\def\@@@captionbeside[#1]#2[#3]{%
  \def\scap@width{#3}%
  \@ifnextchar [%]
    {\@@@@captionbeside[{#1}]{#2}}
    {\setlength{\@tempdima}{#3}%
      \addtolength{\@tempdima}{-\linewidth}%
      \setlength{\@tempdima}{-.5\@tempdima}%
      \edef\scap@move{\the\@tempdima}%
      \c@pti@nb@sid@[{#1}]{#2}}%
  }
\newcommand*{\@@@@captionbeside}{}
\long\def\@@@@captionbeside[#1]#2[#3]{%
  \def\scap@move{#3}%
  \@ifstar
    {\scap@alttrue\c@pti@nb@sid@[{#1}]{#2}}
    {\scap@altfalse\c@pti@nb@sid@[{#1}]{#2}}%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\c@pti@nb@sid@b@x}
% \changes{v2.8q}{2001/11/22}{Neu}
% Es wird noch eines der kostbaren Boxregister ben"otigt.
%    \begin{macrocode}
\newbox\c@pti@nb@sid@b@x
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\c@pti@nb@sid@}
% \changes{v2.8q}{2001/11/22}{Neu}
% Hier wird nun die Umgebung eigentlich ge"offnet, w"ahrend zuvor nur
% die Parameter ausgewertet wurden.
%    \begin{macrocode}
\newcommand{\c@pti@nb@sid@}{}
\long\def\c@pti@nb@sid@[#1]#2{%
  \def\scap@caption{\captionbelow[{#1}]{#2}}%
  \begin{lrbox}{\c@pti@nb@sid@b@x}%
  }
%    \end{macrocode}
%  \end{macro}
%
% Jetzt endlich k"onnen wir uns auf die Umgebung st"urzen. Die
% Umgebung zu starten ist einfach. Es wird ein Doppelargumentmakro
% ausgef"uhrt.
%    \begin{macrocode}
\newenvironment*{captionbeside}{%
  \@dblarg\@captionbeside%
  }{%
%    \end{macrocode}
% Komplizierter ist die Beendigung der Umgebung. Hier f"allt der
% gesamte Satzaufwand an.
%    \changes{v2.9a}{2002/06/27}{\cs{if@thispageodd} durch
%      \cs{ifthispageodd} ersetzt}
%    \begin{macrocode}
  \end{lrbox}%
  \settowidth{\@tempdima}{\usebox\c@pti@nb@sid@b@x}%
  \setlength{\@tempdimb}{\scap@width}%
  \addtolength{\@tempdimb}{-\@tempdima}%
  \addtolength{\@tempdimb}{-\columnsep}%
  \ifdim \@tempdimb<2em
    \ClassWarning{%
%<scrbook>      scrbook%
%<scrreprt>      scrreprt%
%<scrartcl>      scrartcl%
      }{%
      caption beside will be very, very small.\MessageBreak
      In most cases this will result in overfull and
      underfull\MessageBreak
      \string\hbox\space messages%
      }%
  \fi%
  \onelinecaptionsfalse
  \setcapwidth[r]{\@tempdimb}%
  \let\@tempa\scap@pos
  \setlength{\@tempdimc}{\scap@move}%
  \if i\scap@pos\def\@tempa{l}\fi
  \if o\scap@pos\def\@tempa{r}\fi
  \if@twoside
    \ifthispageodd{}{%
      \if o\scap@pos\def\@tempa{l}\fi
      \if i\scap@pos\def\@tempa{r}\fi
      \ifscap@alt
        \addtolength{\@tempdimc}{\scap@width}%
        \addtolength{\@tempdimc}{-\linewidth}%
        \setlength{\@tempdimc}{-\@tempdimc}%
      \fi
    }%
  \fi
  \hspace*{\@tempdimc}%
  \if l\@tempa%
    \rlap{%
      \parbox[\scap@valign]{\@tempdimb}{\scap@caption
        \global\let\scap@currentlabel\@currentlabel}%
      \nobreak\hskip\columnsep%
      \parbox[\scap@valign]{\@tempdima}{\usebox\c@pti@nb@sid@b@x}%
      }%
  \else
    \rlap{%
      \parbox[\scap@valign]{\@tempdima}{\usebox\c@pti@nb@sid@b@x}%
      \nobreak\hskip\columnsep%
      \parbox[\scap@valign]{\@tempdimb}{\scap@caption
        \global\let\scap@currentlabel\@currentlabel}%
      }%
  \fi
  \par
  \aftergroup\let\aftergroup\@currentlabel\aftergroup\scap@currentlabel
  }
%    \end{macrocode}
%  \end{environment}
%
%
%  \begin{macro}{\@makecaption}
% \changes{v2.3a}{1995/07/08}{\cs{setbox}\cs{tempboxa}\cs{hbox} durch
%                             \cs{sbox}\cs{@tempboxa} ersetzt.}
% \changes{v2.3a}{1995/07/08}{Minipage-Flag zur"uckgesetzt (ist das ok?).}
% \changes{v2.3f}{1995/12/09}{Fontumschaltung einheitlich f"ur lange und
%                             kurze Unter-/"Uberschriften.}
% \changes{v2.5g}{1999/10/09}{Neben den komplett h"angenden
%                             Unter-/"Uberschriften sind nun auch nicht
%                             h"angende oder teilweise h"angende m"oglich.}
% Bis Version 2.5f sah die Definition wie folgt aus.
% \begin{verbatim}
% \long\def\@makecaption#1#2{%
%   \vskip\abovecaptionskip
%   \sbox\@tempboxa{{\caplabelfont #1\captionformat}{\capfont #2}}%
%   \ifdim \wd\@tempboxa >\hsize
%     \@hangfrom{{\caplabelfont #1\captionformat}}{\capfont #2\par}
%   \else
%     \global \@minipagefalse
%     \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
%   \fi
%   \vskip\belowcaptionskip}
% \end{verbatim}
%  \begin{macro}{\ifdofullc@p}
% Nun jedoch wird das ganze etwas komplizierter. Als erstes wird ein
% Schalter ben"otigt, der angibt, ob auf die volle L"ange des
% "`Labels"' eingezogen werden soll, oder nicht:
%    \begin{macrocode}
\newif\ifdofullc@p
%    \end{macrocode}
% wobei die Standardeinstellung der volle Einzug ist, um zum bisherigen
% Verhalten kompatibel zu bleiben.
%    \begin{macrocode}
\dofullc@ptrue
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\if@capbreak}
% \changes{v2.8j}{2001/07/30}{Neu}
% Au"serdem gibt es einen Schalter, der angibt, ob nach dem Label ein
% Umbruch erfolgen soll. Dies ist normalerweise nicht der Fall.
%    \begin{macrocode}
\newif\if@capbreak\@capbreakfalse
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\setcapindent}
% \changes{v2.8j}{2001/07/30}{\cs{if@capbreak} wird verwendet}
% \changes{v2.8l}{2001/08/17}{\cs{edef}\cs{cap@indent} statt
%                             \cs{def}\cs{cap@indent}}
% \changes{v2.8q}{2001/11/17}{wird nach dem Laden von
%                             \texttt{caption2} umdefiniert}
% Dann wird weiter ein Befehl ben"otigt, mit dem der Benutzer die
% Weite des Einzugs selbst einstellen kann. Da intern f"ur die Weite
% ein Makro verwendet werden soll, findet hier sicherheitshalber eine
% Zuweisung an eine Dimension statt. So sollten Fehlermeldungen hier
% und nicht erst bei Verwendung auftauchen. Nat"urlich mu"s hier auch
% der automatische Einzug abgeschaltet werden. In der Sternform wird
% au"serdem daf"ur gesorgt, da"s zwischen "`Label"' und Beschreibung
% ein Umbruch erfolgt. In der normalen Version wird stattdessen f"ur
% Kompatibilit"at zu fr"uheren Versionen gesorgt.
%  \begin{macro}{\@setcapindent}
%  \begin{macro}{\@@setcaptindent}
% F"ur die Implementierung der Sternform werden zwei interne Makros
% ben"otigt.
%    \begin{macrocode}
\newcommand*{\setcapindent}{\@ifstar{\@@setcapindent}{\@setcapindent}}
\newcommand*{\@setcapindent}[1]{
  \setlength{\@tempdima}{#1}%
  \ifdim\@tempdima>\hsize\addtolength{\@tempdima}{-\hsize}\@capbreaktrue
  \else\@capbreakfalse\fi
  \edef\cap@indent{\the\@tempdima}
  \dofullc@pfalse
}
\newcommand*{\@@setcapindent}[1]{
  \setlength{\@tempdima}{#1}%
  \edef\cap@indent{\the\@tempdima}
  \dofullc@pfalse\@capbreaktrue
}
\AfterPackage{caption2}{%
  \renewcommand*{\setcapindent}{%
    \ClassWarning{%
%<scrbook>      scrbook%
%<scrreprt>      scrreprt%
%<scrartcl>      scrartcl%
      }{%
      You're using package caption2.\MessageBreak
      Because of this you should also use \string\captionstyle\space
      and\MessageBreak
      set length \string\captionindent\space instead if
      using\MessageBreak
      \string\setcapindent
      }
    \captionstyle{indent}%
    \@ifstar{\setlength{\captionindent}}{\setlength{\captionindent}}}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\setcaphanging}
% \changes{v2.8q}{2001/11/17}{wird nach dem Laden von
%                             \texttt{caption2} umdefiniert}
% Andererseits soll es auch m"oglich sein, nachtr"aglich wieder den
% automatischen Einzug einzuschalten. Daf"ur gibt es ein weiteres Makro.
%    \begin{macrocode}
\newcommand*{\setcaphanging}{\dofullc@ptrue\@capbreakfalse}
\AfterPackage{caption2}{%
  \renewcommand*{\setcaphanging}{%
    \ClassWarning{%
%<scrbook>      scrbook%
%<scrreprt>      scrreprt%
%<scrartcl>      scrartcl%
      }{%
      You're using package caption2.\MessageBreak
      Because of this you should also use \string\captionstyle\MessageBreak
      instead of \string\setcaphang
      }
    \captionstyle{hang}}}
%    \end{macrocode}
%  \end{macro}
%
%
% Nun aber zur neuen Definition der "Uber-/Unterschriften. Zun"achst geht
% alles wie gehabt.
% \changes{v2.5g}{1999/10/09}{\cs{@makecaption} per \cs{newcommand} 
%                             definiert statt mit \cs{long}\cs{def}.}
% \changes{v2.8h}{2001/07/19}{Unterscheidung zwischen "Uber- und
%                             Unterschriften}
% \changes{v2.8j}{2001/07/30}{\cs{@makecaption} verwendet
%                             \cs{@@makecaption}}
% \changes{v2.8q}{2001/11/17}{die Sonderbehandlung f"ur einzeilige
%                             \emph{caption}s ist abschaltbar}
% \changes{v2.8q}{2001/11/17}{\emph{caption}s k"onnen in ihrer Breite
%                             beschr"ankt werden}
%    \begin{macrocode}
\newcommand{\@makecaption}[2]{%
  \if@captionabove\vskip\belowcaptionskip\else\vskip\abovecaptionskip\fi
  \@@makecaption\@firstofone{#1}{#2}
  \if@captionabove\vskip\abovecaptionskip\else\vskip\belowcaptionskip\fi}
%    \end{macrocode}
%  \begin{macro}{\@@makecaption}
% Tats"achlich gesetzt wird die "Uber- bzw. Unterschrift mit diesem
% Makro. Dabei muss der erste Parameter entweder \verb|\@gobble| oder
% \verb|\@firstofone| sein.
%
%  \begin{macro}{\cap@width}
% \changes{v2.8q}{2001/11/17}{Neues internes Makro}
%  \begin{macro}{\cap@left}
% \changes{v2.8q}{2001/11/17}{Neues internes Makro}
%  \begin{macro}{\cap@right}
% \changes{v2.8q}{2001/11/17}{Neues internes Makro}
% Die Breite der mehrzeiligen bzw. die maximale Breite der einzeiligen
% \emph{caption}s sowie das Makro das links und rechts von der Box mit
% der mehrzeiligen \emph{caption} aufgerufen wird. In der
% Voreinstellung wird f"ur Zentrierung gesorgt.
%    \begin{macrocode}
\newcommand*{\cap@width}{\hsize}
\newcommand*{\cap@left}{\hfill}
\newcommand*{\cap@right}{\hfill}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\setcapwidth}
%    \changes{v2.8q}{2001/11/17}{Neue}
%    \changes{v2.9a}{2002/06/27}{\cs{if@thispageodd} durch
%      \cs{ifthispageodd} ersetzt}
% Hier wird |\cap@width| gesetzt. Dabei werden optional auch
% |\cap@left| und |\cap@right| angepasst.
%    \begin{macrocode}
\newcommand*{\setcapwidth}[2][]{%
  \begingroup%
    \setlength{\@tempdima}{#2}%
    \edef\@tempa{\endgroup\def\noexpand\cap@width{\the\@tempdima}}%
  \@tempa%
  \begingroup
    \edef\@tempa{#1}%
    \def\@tempb{c}\ifx\@tempa\@tempb
      \endgroup%
      \def\cap@margin{\let\cap@left=\hfill\let\cap@right=\hfill}%
    \else
      \def\@tempb{l}\ifx\@tempa\@tempb
        \endgroup%
        \def\cap@margin{\let\cap@left=\relax\let\cap@right\hfill}%
      \else
        \def\@tempb{r}\ifx\@tempa\@tempb
          \endgroup%
          \def\cap@margin{\let\cap@left=\hfill\let\cap@right=\relax}%
        \else
          \def\@tempb{i}\ifx\@tempa\@tempb
            \endgroup
            \def\cap@margin{%
              \let\cap@left=\relax
              \let\cap@right=\hfill
              \if@twoside
                \ifthispageodd{}{%
                  \let\cap@left=\hfill
                  \let\cap@right=\relax
                }%
              \fi
            }%
          \else
            \def\@tempb{o}\ifx\@tempa\@tempb
              \endgroup
              \def\cap@margin{%
                \let\cap@left=\hfill
                \let\cap@right=\relax
                \if@twoside
                  \ifthispageodd{}{%
                    \let\cap@left=\relax
                    \let\cap@right=\hfill
                  }%
                \fi
              }%
            \else
              \ifx \@tempa\@empty\else
                \ClassError{%
%<scrbook>                  scrbook%
%<scrreprt>                  scrreprt%
%<scrartcl>                  scrartcl%
                  }{%
                  unknown optional position argument%
                  }{%
                  You've used `#1' as position argument at
                  \string\setcaptionwidth,\MessageBreak
                  but only ONE of `c', `l', `r', `i`, `o` ist
                  allowed.\MessageBreak
                  Argument will be ignored, if you'll continue.%
                  }%
              \fi%
              \endgroup%
  \fi\fi\fi\fi\fi%
  }
%    \end{macrocode}
% Falls |caption2| geladen wird, "andert sich die Funktion. Das
% optionale Argument wird dann ignorriert.
%    \begin{macrocode}
\AfterPackage{caption2}{%
  \renewcommand*{\setcapwidth}[2][]{%
    \ClassWarning{%
      scrbook%
      }{%
      Ignorring optional argument of \string\setcapwidth!\MessageBreak
      You're using package caption2.\MessageBreak
      Because of this you should also use
      \string\setcaptionwidth\MessageBreak
      instead of \string\setcapwidth\MessageBreak
      }
    \setcaptionwidth{#2}}}%
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\cap@margin}
% \changes{v2.8q}{2001/11/17}{Neues internes Makro}
% Dieses Makro beinhaltet nicht den Wert der R"ander, sondern das
% Makro, mit dem innerhalb von |\@@makecaption| die Makros |\cap@left|
% und |\cap@right| neu definiert werden. Dies geschieht nur, wenn die
% R"ander mit |\setcapmargin| gesetzt werden. Vordefiniert ist also
% keinerlei Aktion.
%    \begin{macrocode}
\newcommand*{\cap@margin}{}
\let\cap@margin=\relax%
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\setcapmargin}
%    \changes{v2.8q}{2001/11/17}{Neue}
%  \begin{macro}{\@setcapmargin}
%    \changes{v2.8q}{2001/11/17}{Neue}
%    \changes{v2.9a}{2002/06/27}{\cs{if@thispageodd} durch
%      \cs{ifthispageodd} ersetzt}
%  \begin{macro}{\@@setcapmargin}
% \changes{v2.8q}{2001/11/17}{Neue}
% Statt die Breite der \emph{caption} zu setzen, k"onnen auch die
% R"ander gesetzt werden. In der Sternvariante werden im zweiseitigen
% Modus die R"ander auf linken Seiten vertauscht.
%    \begin{macrocode}
\newcommand*{\setcapmargin}{\@ifstar{\@setcapmargin}{\@@setcapmargin}}
\newcommand*{\@setcapmargin}[2][\@tempdimb]{%
  \def\cap@margin{%
    \onelinecaptionsfalse%
    \begingroup%
      \setlength{\@tempdima}{\hsize}%
      \setlength{\@tempdimb}{#2}%
      \addtolength{\@tempdima}{-\@tempdimb}%
      \setlength{\@tempdimc}{#1}%
      \addtolength{\@tempdima}{-\@tempdimc}%
      \edef\@tempa{\endgroup%
        \def\noexpand\cap@width{\the\@tempdima}%
        \noexpand\if@twoside%
          \noexpand\ifthispageodd{%
            \def\noexpand\cap@left{\noexpand\hspace*{\the\@tempdimc}}%
            \def\noexpand\cap@right{\noexpand\hspace*{\the\@tempdimb}}%
          }{%
            \def\noexpand\cap@right{\noexpand\hspace*{\the\@tempdimc}}%
            \def\noexpand\cap@left{\noexpand\hspace*{\the\@tempdimb}}%
          }%
        \noexpand\else%
          \def\noexpand\cap@left{\noexpand\hspace*{\the\@tempdimc}}%
          \def\noexpand\cap@right{\noexpand\hspace*{\the\@tempdimb}}%
        \noexpand\fi}
    \@tempa}%
  }
\newcommand*{\@@setcapmargin}[2][\@tempdimb]{%
  \def\cap@margin{%
    \onelinecaptionsfalse%
    \begingroup%
      \setlength{\@tempdima}{\hsize}%
      \setlength{\@tempdimb}{#2}%
      \addtolength{\@tempdima}{-\@tempdimb}%
      \setlength{\@tempdimc}{#1}%
      \addtolength{\@tempdima}{-\@tempdimc}%
      \edef\@tempa{\endgroup%
        \def\noexpand\cap@width{\the\@tempdima}%
        \def\noexpand\cap@left{\noexpand\hspace*{\the\@tempdimc}}%
        \def\noexpand\cap@right{\noexpand\hspace*{\the\@tempdimb}}}%
    \@tempa}%
  }
%    \end{macrocode}
% Wenn |caption2| geladen ist, "andert sich die Bedeutung.
%    \begin{macrocode}
\AfterPackage{caption2}{%
  \renewcommand*{\@setcapmargin}[2][\@tempdimb]{%
    \setlength{\@tempdimb}{#2}%
    \setlength{\@tempdima}{#1}%
    \ifdim\@tempdima\@tempdimb\else
      \ClassWarning{%
        scrbook%
        }{%
        Can set only centered caption!\MessageBreak
        You're using package caption2.\MessageBreak
        Because of this you should also use
        \string\setcaptionmargin\MessageBreak
        instead of \string\setcapmargin
        }
    \fi
    \addtolength{\@tempdimb}{\@tempdimb}%
    \setcaptionmargin{.5\@tempdimb}}
  \let\@@setcapmargin=\@setcapmargin
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
% Jetzt aber zum Eigentlichen. Die Breite der \emph{caption} muss nur
% bestimmte werden, wenn |onelinecaption| verwendet wird. Das bedeutet
% auch, dass bei |noonelinecaption| das Problem mit dem Hochz"ahlen
% der Fu"snoten nicht auftritt.
% \changes{v2.8q}{2002/05/17}{Das Problem mit doppelten Fu"snoten behoben.}
%    \begin{macrocode}
\newcommand{\@@makecaption}[3]{%
  \cap@margin%
  \ifonelinecaptions%
    \@tempcnta=\value{mpfootnote}\@tempcntb=\value{footnote}%
    \let\scr@tmp@footnotetext=\@footnotetext
    \let\@footnotetext=\@gobble
    \sbox\@tempboxa{%
      {\capfont#1{{\caplabelfont#2\captionformat}}%
        #3}%
      }%
    \let\@footnotetext=\scr@tmp@footnotetext
    \let\scr@tmp@footnotetext=\undefined
    \setcounter{footnote}{\@tempcntb}\setcounter{mpfootnote}{\@tempcnta}%
  \else
    \sbox\@tempboxa{\hspace*{2\cap@width}}%
  \fi
  \begingroup%
    \setlength{\@tempdima}{\wd\@tempboxa}%
    \setlength{\@tempdima}{\cap@width}%
    \ifdim \wd\@tempboxa >\@tempdima%
      \cap@left%
      \vbox{\hsize=\cap@width%
%    \end{macrocode}
% Im Fall, da"s nun also mehrzeilig gesetzt werden mu"s, ist zu
% unterscheiden, ob wie bisher voll h"angend gearbeitet werden soll
% oder nicht. In ersterem Fall machen wir das, wie bisher, allerdings
% wird der \cs{capfont} fr"uher aktiviert, damit darin auch globale
% Gr"o"sen"anderungen f"ur die "Uber/Unterschrift Platz
% finden. Au"serdem wird die die ge"anderte Parameter"ubergabe
% ber"ucksichtigt.
%    \begin{macrocode} 
        \ifdofullc@p
          {\capfont\@hangfrom{#1{{\caplabelfont#2\captionformat}}}{#3\par}}
%    \end{macrocode}
% Im zweiten Fall ist nun zu unterscheiden, ob nach dem Label ein
% Umbruch erfolgen soll oder nicht. Dabei ist der Einzug zu beachten.
% Ist der Einzug negativ, so findet ebenfalls ein Umbruch statt und
% nur die erste Folgezeile wird eingezogen.
%    \begin{macrocode} 
        \else%
          \ifdim\cap@indent<\z@%
            {\capfont#1{{\caplabelfont #2\captionformat\par}}\noindent%
              \hspace*{-\cap@indent}#3\par}
          \else%
            \if@capbreak
              {\capfont#1{{\caplabelfont #2\captionformat\par}}\noindent%
                \@hangfrom{\hspace*{\cap@indent}}{#3\par}}
            \else
              {\capfont\@hangfrom{\hspace*{\cap@indent}}%
                {\hspace{-\cap@indent}#1%
                  {{\caplabelfont#2\captionformat}}#3\par}}
            \fi
          \fi
        \fi}%
      \cap@right%
    \else
      \global \@minipagefalse
      \hb@xt@\hsize{\cap@left\box\@tempboxa\cap@right}%
    \fi%
  \endgroup}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\LT@makecaption}
% \changes{v2.8j}{2001/07/30}{Neu}
% \changes{v2.8k}{2001/08/15}{Keine Umdefinierung, wenn das
%                             \texttt{caption2}-Paket erkannt
%                             oder die Option \texttt{origlongtable}
%                             gesetzt wurde}
% \changes{v2.8q}{2001/11/18}{Breite und Anordnung wird "uber
%                             \textsf{KOMA-Script}-Makros bestimmt}
% \changes{v2.8q}{2001/11/18}{Verwendung von \cs{AfterPackage}}
%  \begin{macro}{\LT@array}
% \changes{v2.8q}{2001/11/18}{Neu}
%  \begin{macro}{\LT@caption}
% \changes{v2.8q}{2001/11/18}{Neu}
% Ab Version 2.8j wird auf vielfachen Wunsch das
% \texttt{longtable}-Paket ber"ucksichtigt. Da Pakete aber nach
% Klassen geladen werden, kann dies erst nach dem Laden des Pakets
% aktiviert werden. Die Definition entspricht der obigen. Wird das
% |caption2|-Paket nach |longtable| geladen, so wird automatisch die
% Definition von |caption2| verwendet. Wird |caption2| vor |longtable|
% geladen, so liegt voraussichtlich eine Fehlbedienung vor, auf die
% hingewiesen wird.
%    \begin{macrocode}
\AfterPackage{longtable}{%
  \@ifpackageloaded{caption2}{\@komalongtablefalse%
    \ClassWarning{%
%<scrbook>    scrbook}{%
%<scrreprt>     scrreprt}{%
%<scrartcl>     scrartcl}{%
      you've loaded package caption2 before package\MessageBreak
      longtable!\MessageBreak
      Because of this package caption2 isn't able to
      control\MessageBreak
      \string\caption\space at longtables. After loading package
      caption2\MessageBreak
      KOMA-Script also doesn't control \string\caption.\MessageBreak
      I think, you should load package caption2 after
      package\MessageBreak
      longtable%
      }}{}
  \if@komalongtable
    \renewcommand{\LT@makecaption}[3]{%
      \LT@mcol\LT@cols c{%
        \hbox to\z@{\hss\parbox[t]\linewidth{%
            \if@captionabove%
              \vskip\belowcaptionskip%
            \else%
              \vskip\abovecaptionskip%
            \fi%
            \@@makecaption{#1}{#2}{#3}
            \endgraf%
            \if@captionabove%
              \vskip\abovecaptionskip%
            \else%
              \vskip\belowcaptionskip%
            \fi%
            }%
          \hss}%
        }%
      }%
    \newcommand*{\scr@LT@array}{}%
    \let\scr@LT@array=\LT@array%
    \renewcommand*{\LT@array}{%
      \let\scr@caption=\LT@caption
      \def\captionabove{\noalign{\global\@captionabovetrue}%
        \scr@caption}%
      \def\captionbelow{\noalign{\global\@captionabovefalse}%
        \scr@caption}%
      \if@tablecaptionabove
        \let\LT@caption=\captionabove
      \else
        \let\LT@caption=\captionbelow
      \fi
      \scr@LT@array}
    \ClassInfo{%
%<scrbook>      scrbook}{%
%<scrreprt>      scrreprt}{%
%<scrartcl>      scrartcl}{%
      longtable captions redefined}
  \fi
  }
%    \end{macrocode}  
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\fs@komaabove}
% \changes{v2.8j}{2001/07/30}{Neu}
%  \begin{macro}{\fs@komabelow}
% \changes{v2.8j}{2001/07/30}{Neu}
%  \begin{macro}{\floatc@komascript}
% \changes{v2.8j}{2001/07/30}{Neu}
% Ab Version 2.8j werden f"ur das \texttt{float}-Paket zwei float-Stile
% Namens \texttt{komaabove} und \texttt{komabelow} definiert. Da
% m"oglicherweise auch andere 
% Pakete darauf zur"uckgreifen, wird das unabh"angig von der Existenz
% von \texttt{float} getan. Verwendet wird dies innerhalb von
% KOMA-Script jedoch nicht. Es werden au"serdem interne Makros von
% \texttt{float} verwendet!
%    \begin{macrocode}
\newcommand*{\fs@komaabove}{%
  \let\@fs@capt\floatc@komascript
  \let\@fs@pre\@empty
  \def\@fs@mid{\vskip\abovecaptionskip}
  \let\@fs@post\@empty
  \let\@fs@iftopcapt\iftrue}
\newcommand*{\fs@komabelow}{%
  \let\@fs@capt\floatc@komascript
  \let\@fs@pre\@empty
  \def\@fs@mid{\vskip\abovecaptionskip}
  \let\@fs@post\@empty
  \let\@fs@iftopcapt\iffalse}
\newcommand{\floatc@komascript}{\@@makecaption\@firstofone}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
%
% \subsection{"`Alte"' Font-Auswahlbefehle}
%
%  \begin{macro}{\rm}
%  \begin{macro}{\sf}
%  \begin{macro}{\tt}
%  \begin{macro}{\bf}
%  \begin{macro}{\it}
%  \begin{macro}{\sl}
%  \begin{macro}{\sc}
%  \begin{macro}{\sfb}
% \changes{v2.2c}{1995/05/25}{nicht mehr mathematisch.}
% \changes{v2.3a}{1995/07/08}{Keine Unterscheidung mehr f"ur den
%                             Kompatibilit"atsmodus.}
% Um die Umstellung von \LaTeX\ auf \LaTeXe\ zu erleichtern, gibt es
% die alten Font-Auswahlbefehle |\rm|, |\sf|, |\tt|, |\bf|, |\it|, |\sl|
% und |\sc| auch in den \emph{classes}. Es ist zu beachten, da"s diese
% Befehle hier nach dem alten Fontauswahlverfahren arbeiten. Es werden
% also immer alle Parameter zugleich ge"andert. Somit ist zu empfehlen,
% da"s statt dieser Befehle zuk"unftig in der Regel die neuen
% |\text..|-Befehle verwendet werden.
%
% Der aus der \textsf{Script 2.0}-Familie bekannte Befehl |\sfb| ist hier
% ebenfalls definiert.
%    \begin{macrocode}
\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
\DeclareOldFontCommand{\sfb}{\normalfont\sffamily\bfseries}{\@nomath\sfb}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\cal}
% \changes{v2.3}{1995/06/25}{Der Befehl ist in \LaTeX nicht mehr definiert.
%                            Deshalb wird er nun neu und gleich robust
%                            deklariert. Daf"ur f"allt \cs{pcal} weg.}
% \changes{v2.3g}{1996/01/14}{"Uberfl"ussige Klammerpaare entfernt.}
%  \begin{macro}{\mit}
% \changes{v2.3}{1995/06/25}{Der Befehl ist in \LaTeX nicht mehr definiert.
%                            Deshalb wird er nun neu und gleich robust
%                            deklariert. Daf"ur f"allt \cs{pmit} weg.}
% \changes{v2.3g}{1996/01/14}{"Uberfl"ussige Klammerpaare entfernt.}
% Die beiden Befehle |\cal| und |\mit| war bis zur \LaTeX-Version vom
% 1.12.1994 patch level 3 noch im Kernal definiert. Jetzt sind die beiden
% den classes "uberlassen. Hier ist die Definition aus den Standard-classes
% "ubernommen.
%    \begin{macrocode}
\DeclareRobustCommand*{\cal}{\@fontswitch\relax\mathcal}
\DeclareRobustCommand*{\mit}{\@fontswitch\relax\mathnormal}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
% \subsection{Font-Variablen}
%  \begin{macro}{\descfont}
%  \begin{macro}{\sectfont}
%    \changes{v2.8c}{2001/06/29}{\cs{normalcolor} eingef"ugt}
%  \begin{macro}{\pnumfont}
%    \changes{v2.8c}{2001/06/29}{\cs{normalcolor} eingef"ugt}
%  \begin{macro}{\headfont}
%    \changes{v2.8c}{2001/06/29}{\cs{normalcolor} eingef"ugt}
%  \begin{macro}{\capfont}
%    \changes{v2.8c}{2001/06/29}{\cs{normalcolor} eingef"ugt}
%    \changes{v2.8n}{2001/09/06}{f"ur Briefe nicht l"anger definiert}
%  \begin{macro}{\caplabelfont}
%    \changes{v2.8c}{2001/06/29}{\cs{normalcolor} eingef"ugt}
%    \changes{v2.8n}{2001/09/06}{f"ur Briefe nicht l"anger definiert}
%  \begin{macro}{\titlefont}
%    \changes{v2.8p}{2001/09/22}{Neu}
%  \begin{macro}{\subject@font}
%    \changes{v2.8q}{2002/01/14}{Neu}
%  \begin{macro}{\baddr@font}
%    \changes{v2.8q}{2002/01/22}{Neu}
% Das \textsf{Script}-Paket definiert einige Font-Variablen, f"ur
% verschiedene Gestaltungsbereiche wie "Uberschriften, Unterschriften oder
% die Paginierung.
%    \begin{macrocode}
\newcommand*\descfont{\sffamily\bfseries}
\newcommand*\sectfont{\normalcolor\sffamily\bfseries}
\newcommand*\pnumfont{\normalfont\normalcolor}
\newcommand*\headfont{\normalfont\normalcolor\slshape}
%<!scrlettr>\newcommand*\capfont{\normalfont\normalcolor}
%<!scrlettr>\newcommand*\caplabelfont{\normalfont\normalcolor}
\newcommand*\titlefont{\sectfont}
%<scrlettr>\newcommand*{\subject@font}{\normalfont\normalcolor\bfseries}
%<scrlettr>\newcommand*{\baddr@font}{\sffamily}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\setkomafont}
% \changes{v2.8o}{2001/09/14}{Neu}
% Mit Hilfe dieses Makros kann die Schriftart von
% KOMA-Script-Elementen gesetzt werden.
%    \begin{macrocode}
\newcommand*{\setkomafont}[2]{%
  \@ifundefined{scr@fnt@#1}{%
    \@ifundefined{scr@fnt@instead@#1}{%
      \ClassError{%
%<scrartcl>        scrartcl%
%<scrreprt>        scrreprt%
%<scrbook>        scrbook%
%<scrlettr>        scrlttr2%
      }{font of element `#1' can't be set}{%
        You've told me to redefine the font selection of the element,%
        \MessageBreak%
        but either no such element is known by KOMA-Script\MessageBreak
        or the element does not use a special font selection}
    }{%
      \ClassError{%
%<scrartcl>        scrartcl%
%<scrreprt>        scrreprt%
%<scrbook>        scrbook%
%<scrlettr>        scrlttr2%
      }{font of element `#1' can't be set}{%
        You've told me to redefine the font selection of the element,%
        \MessageBreak%
        but the element does not use a special font
        selection. The\MessageBeak
        The font of `#1' may be changed with element `\csname
        scr@fnt@instead@#1\endcsname'}
    }%
  }{%
    \expandafter\expandafter\expandafter\renewcommand%
    \csname scr@fnt@#1\endcsname{#2}%
    \@ifundefined{scr@fnt@wrn@#1}{}{%
      \ClassWarning{%
%<scrartcl>      scrartcl%
%<scrreprt>      scrreprt%
%<scrbook>      scrbook%
%<scrlettr>      scrlttr2%
      }{\csname scr@fnt@wrn@#1\endcsname{#1}}
    }
  }
}
%    \end{macrocode}
%  \begin{macro}{\addtokomafont}
% \changes{v2.8p}{2001/09/22}{Neu}
% Dieses Makro funktioniert fast wie obiges, allerdings f"ugt es der
% vorhandenen Definition etwas an.
%  \begin{macro}{\l@addto@macro}
% \changes{v2.8p}{2001/09/22}{Neu}
% Damit dies lokal m"oglich ist, wird eine lokal arbeitende Variante
% von \cs{g@addto@macro} ben"otigt, wie sie hier vorgestellt wird.
%    \begin{macrocode}
\newcommand{\l@addto@macro}[2]{%
  \begingroup%
    \toks@\expandafter{#1#2}%
    \edef\@tempa{\endgroup\def\noexpand#1{\the\toks@}}%
  \@tempa}
%    \end{macrocode}
%  \end{macro}
%    \begin{macrocode}
\newcommand*{\addtokomafont}[2]{%
  \@ifundefined{scr@fnt@#1}{%
    \@ifundefined{scr@fnt@instead@#1}{%
      \ClassError{%
%<scrartcl>        scrartcl%
%<scrreprt>        scrreprt%
%<scrbook>        scrbook%
%<scrlettr>        scrlttr2%
      }{font of element `#1' can't be extended}{%
        You've told me to extend the font selection of the element,%
        \MessageBreak%
        but either no such element is known by KOMA-Script\MessageBreak
        or the element does not use a special font selection}
    }{%
      \ClassError{%
%<scrartcl>        scrartcl%
%<scrreprt>        scrreprt%
%<scrbook>        scrbook%
%<scrlettr>        scrlttr2%
      }{font of element `#1' can't be extended}{%
        You've told me to extend the font selection of the element,%
        \MessageBreak%
        but the element does not use a special font
        selection. The\MessageBeak
        The font of `#1' may be changed with element `\csname
        scr@fnt@instead@#1\endcsname'}
    }%
  }{%
    \expandafter\expandafter\expandafter\l@addto@macro%
    \csname scr@fnt@#1\endcsname{#2}%
    \@ifundefined{scr@fnt@wrn@#1}{}{%
      \ClassWarning{%
%<scrartcl>      scrartcl%
%<scrreprt>      scrreprt%
%<scrbook>      scrbook%
%<scrlettr>      scrlttr2%
      }{\csname scr@fnt@wrn@#1\endcsname{#1}}
    }
  }
}
%    \end{macrocode}
%
%  \begin{macro}{\usekomafont}
% \changes{v2.8p}{2001/09/28}{Neu}
% Mit Hilfe dieses Makros kann auf die Schriftart von
% KOMA-Script-Elementen umgeschaltet werden.
%    \begin{macrocode}
\newcommand*{\usekomafont}[1]{%
  \@ifundefined{scr@fnt@#1}{%
    \@ifundefined{scr@fnt@instead@#1}{%
      \ClassError{%
%<scrartcl>        scrartcl%
%<scrreprt>        scrreprt%
%<scrbook>        scrbook%
%<scrlettr>        scrlttr2%
        }{font of element `#1' can't be used}{%
        You've told me to use the font selection of the element,%
        \MessageBreak%
        but either no such element is known by KOMA-Script\MessageBreak
        or the element does not use a special font selection}
      }{%
      \ClassWarning{%
%<scrartcl>        scrartcl%
%<scrreprt>        scrreprt%
%<scrbook>        scrbook%
%<scrlettr>        scrlttr2%
      }{%
        You've told me to use the font selection of the element,%
        \MessageBreak%
        but the element does not use a special font
        selection. The\MessageBeak
        The font of `#1' may be selected with element `\csname
        scr@fnt@instead@#1\endcsname'.\MessageBreak
        I fix this using font of `\csname
        scr@fnt@instead@#1\endcsname'}%
      }%
    \@nameuse{scr@fnt@instead@#1}%
    }{%
    \@nameuse{scr@fnt@#1}%
    }%
  }
%    \end{macrocode}
%
%  \begin{macro}{\scr@fnt@descriptionlabel}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@title}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@sectioning}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@part}
%    \changes{v2.8p}{2001/09/23}{Neu}
%  \begin{macro}{\scr@fnt@partnumber}
%    \changes{v2.8p}{2001/09/23}{Neu}
%  \begin{macro}{\scr@fnt@chapter}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@wrn@chapter}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@section}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@subsection}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@subsubsection}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@paragraph}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@subparagraph}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@minisec}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@wrn@minisec}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@pagenumber}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@pagination}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@pagehead}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@pagefoot}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@caption}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@captionlabel}
%    \changes{v2.8o}{2001/09/14}{Neu}
%  \begin{macro}{\scr@fnt@subject}
%    \changes{v2.8q}{2002/01/14}{Neu}
%  \begin{macro}{\scr@fnt@backaddress}
%    \changes{v2.8q}{2002/01/22}{Neu}
%  \begin{macro}{\scr@fnt@fromaddress}
%    \changes{v2.8q}{2002/01/28}{Neu}
%  \begin{macro}{\scr@fnt@fromname}
%    \changes{v2.8q}{2002/01/28}{Neu}
% Damit die Fontumschaltung mit dem einen Befehl funktioniert, wird
% werden Makros ben"otigt, in denen die passenden Fontvariablen
% gespeichert sind und ggf. zus"atzliche Makros f"ur Warnungen.
%    \begin{macrocode}
\newcommand*{\scr@fnt@descriptionlabel}{\descfont}
\newcommand*{\scr@fnt@title}{\titlefont}
\newcommand*{\scr@fnt@sectioning}{\sectfont}
%<*!scrlettr>
\newcommand*{\scr@fnt@part}{\size@part}
\newcommand*{\scr@fnt@partnumber}{\size@partnumber}
%<scrbook|scrreprt>\newcommand*{\scr@fnt@chapter}{\size@chapter}
\newcommand*{\scr@fnt@section}{\size@section}
\newcommand*{\scr@fnt@subsection}{\size@subsection}
\newcommand*{\scr@fnt@subsubsection}{\size@subsubsection}
\newcommand*{\scr@fnt@paragraph}{\size@paragraph}
\newcommand*{\scr@fnt@subparagraph}{\size@subparagraph}
\newcommand*{\scr@fnt@instead@minisec}{sectioning}
%</!scrlettr>
\newcommand*{\scr@fnt@pagenumber}{\pnumfont}
\let\scr@fnt@pagination=\scr@fnt@pagenumber
\newcommand*{\scr@fnt@pagehead}{\headfont}
\newcommand*{\scr@fnt@wrn@pagehead}[1]{%
  font selection of elements `pagehead' and `pagefoot'\MessageBreak
  changed, because you wanted to change font selection\MessageBreak
  of element `#1'%
}
\let\scr@fnt@pagefoot=\scr@fnt@pagehead
\let\scr@fnt@wrn@pagefoot=\scr@fnt@wrn@pagehead
%<*!scrlettr>
\newcommand*{\scr@fnt@caption}{\capfont}
\newcommand*{\scr@fnt@captionlabel}{\caplabelfont}
%</!scrlettr>
%<scrlettr>\newcommand*{\scr@fnt@subject}{\subject@font}
%<scrlettr>\newcommand*{\scr@fnt@backaddress}{\baddr@font}
%<scrlettr>\newcommand*{\scr@fnt@fromaddress}{\faddr@font}
%<scrlettr>\newcommand*{\scr@fnt@fromname}{\fname@font}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
% \subsection{Inhaltverzeichnis, Abbildungsverzeichnis und
%             Tabellenverzeichnis}
%
% Diese Verzeichnisse existieren bei Briefen nicht.
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
%  \begin{macro}{\tableofcontents}
%  \begin{macro}{\@pnumwidth}
%  \begin{macro}{\@tocrmarg}
%  \begin{macro}{\@dotsep}
%  \begin{Counter}{tocdepth}
% F"ur das Inhaltsverzeichnis m"ussen die Eintr"age f"ur die
% unterschiedlichen Kapiteleinteilungen definiert werden.
%    \begin{macrocode}
\newcommand*\@pnumwidth{1.55em}
\newcommand*\@tocrmarg {2.55em}
\newcommand*\@dotsep{4.5}
%<!scrartcl>\setcounter{tocdepth}{2}
%<scrartcl>\setcounter{tocdepth}{3}
%    \end{macrocode}
%  \end{Counter}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\toc@heading}
% \changes{v2.3h}{1995/01/21}{Befehl, zum Setzen der "Uberschrift des
%                             Inhaltsverzeichnisses.}
%    \begin{macrocode}
\newcommand*\toc@heading{\section*{\contentsname
  \@mkboth{\contentsname}{\contentsname}}}
%    \end{macrocode}
%  \end{macro}
% \changes{v2.3h}{1995/01/21}{Verwendung von \cs{toc@heading}.}
% \changes{v2.8l}{2001/08/16}{Gruppe eingef"ugt und \cs{parskip} auf 0
%                             gesetzt}
% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}
% \changes{v2.8q}{2001/11/14}{\cs{if@tocleft} bearbeiten}
%  \begin{macro}{\before@starttoc}
% \changes{v2.8q}{2001/11/14}{Neu}
% Dieses Makro f"uhrt im Falle von |tocleft| am Anfang eines
% Verzeichnisses alle notwendigen "Anderungen durch, um das
% Verzeichnis entsprechend zu handhaben.
%  \begin{macro}{\scr@dottedtocline}
%  \begin{macro}{\scr@numberline}
%  \begin{macro}{\last@l@number}
% Daf"ur werden ein paar Hilfsmakros ben"otigt, die vorsichtshalber
% global vordefiniert werden.
%    \begin{macrocode}
\newcommand*{\scr@dottedtocline}{}%
\newcommand*{\scr@numberline}{}%
\newcommand*{\last@l@number}{}%
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\@l@number}
% \changes{v2.8q}{2001/11/14}{Neu}
% In diesem Makro wird w"ahrend der Erstellung des
% Inhaltsverzeichnisses die aktuelle Breite der Gliederungsnummer
% gespeichert.
%  \begin{macro}{\set@l@number}
% \changes{v2.8q}{2001/11/14}{Neu}
% Dieses Makro ist daf"ur verantwortlich, dass zum einen |\@tempdima|
% f"ur den Aufruf von |\numberline| auf den richtigen Wert gesetzt
% wird, zum anderen wird die aktuelle gr"o"ste Breite der
% Gliederungsnummer hier angepasst.
%    \begin{macrocode}
\newcommand*{\@l@number}{}
\newcommand*{\set@l@number}[1]{%
  \settowidth{\@tempdima}{#1\enskip}%
  \ifdim\@tempdima >\@l@number\relax%
    \xdef\@l@number{\the\@tempdima}%
  \fi%
  \ifdim\@tempdima >\last@l@number \else%
    \setlength{\@tempdima}{\last@l@number}%
  \fi%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\newcommand*{\before@starttoc}[1]{
  \let\scr@dottedtocline=\@dottedtocline%
  \renewcommand*{\@dottedtocline}[2]{%
    \scr@dottedtocline{##1}{\z@}}%
  \let\scr@numberline=\numberline%
  \renewcommand*{\numberline}[1]{%
    \set@l@number{##1}\scr@numberline{##1}}%
  \gdef\@l@number{\z@}%
  \@ifundefined{#1@l@number}{%
    \def\last@l@number{2em}%
    }{%
    \expandafter\let\expandafter\last@l@number
    \expandafter=\csname#1@l@number\endcsname%
    }%
  }
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\after@starttoc}
% \changes{v2.8q}{2001/11/14}{Neu}
% Dieses Makro schreibt am Ende den entsprechenden Eintrag in die
% \texttt{aux}-Datei.
%    \begin{macrocode}
\newcommand*{\after@starttoc}[1]{%
  \protected@write\@auxout{}{%
    \string\gdef\expandafter\string\csname#1@l@number\endcsname{%
      \@l@number}}%
  }
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\toc@l@number}
% \changes{v2.8q}{2001/11/14}{Neu}
% Dieses Makro wird innerhalb von |\tableofcontents| "uber
% |\before@starttoc| und |\after@starttoc| in der \texttt{aux}-Datei
% global definiert. Aus Sicherheitsgr"unden wird es hier global
% vordefiniert.
%    \begin{macrocode}
\newcommand*{\toc@l@number}{}
%    \end{macrocode}
%  \end{macro}
%    \begin{macrocode}
\newcommand*{\tableofcontents}{%
  \begingroup
%<*scrartcl>
    \toc@heading%
    \@parskipfalse\@parskip@indent%
    \@starttoc{toc}%
%</scrartcl>
%<*scrreprt|scrbook>
    \if@twocolumn
      \@restonecoltrue\onecolumn
    \else
      \@restonecolfalse
    \fi
    \chapter*{\contentsname
        \@mkboth{\contentsname}{\contentsname}}%
    \@parskipfalse\@parskip@indent%
    \if@tocleft\before@starttoc{toc}\fi%
    \@starttoc{toc}%
    \if@tocleft\after@starttoc{toc}\fi%
    \if@restonecol\twocolumn\fi
%</scrreprt|scrbook>
  \endgroup
}
%    \end{macrocode}
%
%  \begin{macro}{\l@part}
% Nat"urlich werden auch Makros ben"otigt, um die Eintr"age in das
% Inhaltsverzeichnis zu formatieren. Beginnend mit den Eintr"agen f"ur
% \cs{part}.
%    \begin{macrocode}
\newcommand*\l@part[2]{%
  \ifnum \c@tocdepth >-2\relax
%<scrartcl>    \addpenalty{\@secpenalty}%
%<!scrartcl>    \addpenalty{-\@highpenalty}%
    \addvspace{2.25em \@plus\p@}%
%    \end{macrocode}
% \changes{v2.5e}{1998/07/17}{Ge"anderte part-Formatierung ragte in
%                             den linken Rand}
%    \begin{macrocode}
    \setlength\@tempdima{2em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
%    \end{macrocode}
% \changes{v2.5c}{1997/11/25}{Formatierung bei Zeilenumbruch im
%                             part-Eintrag korrigiert}
% \changes{v2.5e}{1998/07/17}{Beinhaltes \cs{sectfont} eine
%                             Gr"o"senangabe, so wird diese
%                             "uberschrieben} 
%    \begin{macrocode}
      \leavevmode\sectfont\large
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
%<*scrartcl>
      \if@compatibility
        \global\@nobreaktrue
%    \end{macrocode}
% \changes{v2.3g}{1996/01/14}{Fehlendes Kommentarzeichen erg"anzt.}
%    \begin{macrocode}
        \everypar{\global\@nobreakfalse\everypar{}}%
      \else
%</scrartcl>
      \penalty\@highpenalty
%<scrartcl>       \fi
    \endgroup
  \fi}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\l@chapter}
% Kapiteleintr"age gibt es nat"urlich nicht bei der Artikel-Klasse.
%    \begin{macrocode}
%<*scrreprt|scrbook>
\newcommand*\l@chapter[2]{%
  \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 1.0em \@plus\p@
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \sectfont
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
      \penalty\@highpenalty
    \endgroup
  \fi}
%</scrreprt|scrbook>
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\l@section}
% Bei der Artikel-Klasse folgt die Formatierung f"ur
% \cs{section}-Eintr"age, an Stelle der Eintr"age f"ur \cs{chapter}
% der Buch- oder der Bericht-Klasse. Bei diesen handelt es sich hier
% stattdessen um eine normale Ebene.
%    \begin{macrocode}
%<*scrartcl>
\newcommand*\l@section[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty{\@secpenalty}%
    \addvspace{1.0em \@plus\p@}%
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \sectfont
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
    \endgroup
  \fi}
%</scrartcl>
%<*scrreprt|scrbook>
\newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
%</scrreprt|scrbook>
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\l@subsection}
%  \begin{macro}{\l@subsubsection}
%  \begin{macro}{\l@paragraph}
%  \begin{macro}{\l@subparagraph}
% Die "ubrigen Ebenen werden normal behandelt.
%    \begin{macrocode}
%<*scrartcl>
\newcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
\newcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
\newcommand*\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
\newcommand*\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
%</scrartcl>
%<*scrreprt|scrbook>
\newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
\newcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
\newcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}}
\newcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
%</scrreprt|scrbook>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\float@listhead}
% \changes{v2.8b}{2001/06/26}{Neu}
% \changes{v2.8g}{2001/07/18}{\cs{float@headings} umbenannt in
%                             \cs{float@listhead}}
% In Absprache mit Anselm Lingnau, dem Autor vor \texttt{float.sty},
% wird ab Version 2.8b \cs{float@headings} zum Setzen des
% Kolumnentitels bei den Verzeichnissen verwendet, die
% \texttt{float.sty} f"ur neu definierte floats zur Verf"ugung
% stellt. Dabei definiert \texttt{float.sty} die Anweisung nur, wenn
% sie nicht bereits existiert. Die Zusammenarbeit wird dadurch
% verbessert. Da Anselm sich in letzter Minute entschlossen hat, das
% Makro \cs{float@listhead} zu nennen, wurde dies in Version 2.8g
% angepasst.
%
%    \begin{macrocode}
\newcommand*{\float@listhead}[1]{%
%<scrartcl>  \section*{#1}%
%<!scrartcl>  \chapter*{#1}%
  \@mkboth{#1}{#1}%
%    \end{macrocode}
% \changes{v2.8q}{2001/11/14}{Dynamische Anpassung an die Nummer}
% Dies ist der passende Ort, um die Breite, die f"ur die Nummer des
% Gleitobjekts ben"otigt wird zu ermitteln und anzupassen, falls dies
% ge"unscht wird. Dazu findet eine lokale Umdefinierung von
% |\@starttoc| statt. Die Umdefinierung ist deshalb lokal, weil alle
% mir bekannten Verzeichnisse von Gleitobjekten innerhalb einer Gruppe
% ausgegeben werden.
%    \begin{macrocode}
  \if@dynlist%
    \newcommand*{\scr@starttoc}{}%
    \let\scr@starttoc=\@starttoc%
    \renewcommand*{\@starttoc}[1]{%
      \before@starttoc{##1}\scr@starttoc{##1}\after@starttoc{##1}}%
  \fi%
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\listoffigures}
%  \begin{macro}{\lof@heading}
% \changes{v2.3h}{1995/01/21}{Befehl, zum Setzen der "Uberschrift des
%                             Abbildungsverzeichnisses.}
% \changes{v2.4d}{1996/04/11}{\cs{addsec} durch \cs{section*} ersetzt.}
% \changes{v2.8b}{2001/06/26}{Verwendung von \cs{float@headings}}
% \changes{v2.8g}{2001/07/18}{\cs{float@headings} umbenannt in
%                             \cs{float@listhead}}
%    \begin{macrocode}
\newcommand*\lof@heading{\float@listhead{\listfigurename}}
%    \end{macrocode}
%  \end{macro}
% \changes{v2.3h}{1995/01/21}{Verwendung von \cs{lof@heading}.}
% \changes{v2.4k}{1996/12/13}{\cs{lof@heading} nicht nur bei scrartcl.}
% \changes{v2.8l}{2001/08/16}{Gruppe eingef"ugt und \cs{parskip} auf 0
%                             gesetzt}
% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}
%  \begin{macro}{\l@figure}
%    \begin{macrocode}
\newcommand*\listoffigures{%
  \begingroup%
%<*scrartcl>
    \lof@heading%
    \@parskipfalse\@parskip@indent%
    \@starttoc{lof}%
%</scrartcl>
%<*scrreprt|scrbook>
    \if@twocolumn
      \@restonecoltrue\onecolumn
    \else
      \@restonecolfalse
    \fi
    \lof@heading%
    \@parskipfalse\@parskip@indent%
    \@starttoc{lof}%
    \if@restonecol\twocolumn\fi
%</scrreprt|scrbook>
  \endgroup
}
\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\listoftables}
%  \begin{macro}{\lot@heading}
% \changes{v2.3h}{1995/01/21}{Befehl zum Setzen der "Uberschrift des
%                             Tabellenverzeichnisses.}
% \changes{v2.4a}{1996/03/13}{\cs{listtabelname} durch \cs{listtablename}
%                             ersetzt.}
% \changes{v2.8b}{2001/06/26}{Verwendung von \cs{float@headings}}
% \changes{v2.8g}{2001/07/18}{\cs{float@headings} umbenannt in
%                             \cs{float@listhead}} 
%    \begin{macrocode}
\newcommand*\lot@heading{\float@listhead{\listtablename}}
%    \end{macrocode}
%  \end{macro}
% \changes{v2.3h}{1995/01/21}{Verwendung von \cs{lot@heading}.}
% \changes{v2.4k}{1996/12/13}{\cs{lot@heading} nicht nur bei scrartcl.}
% \changes{v2.8l}{2001/08/16}{Gruppe eingef"ugt und \cs{parskip} auf 0
%                             gesetzt}
% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}
%  \begin{macro}{\l@table}
%    \begin{macrocode}
\newcommand*\listoftables{%
  \begingroup
%<*scrartcl>
    \lot@heading%
    \@parskipfalse\@parskip@indent%
    \@starttoc{lot}%
%</scrartcl>
%<*scrreprt|scrbook>
    \if@twocolumn
      \@restonecoltrue\onecolumn
    \else
      \@restonecolfalse
    \fi
    \lot@heading%
    \@parskipfalse\@parskip@indent%
    \@starttoc{lot}%
    \if@restonecol\twocolumn\fi
%</scrreprt|scrbook>
  \endgroup
}
\let\l@table\l@figure
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
%
% \subsection{Das Literaturverzeichnis}
%
% Dieses Verzeichnis existiert bei Briefen nicht.
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
%  \begin{environment}{thebibliography}
%  \begin{macro}{\setbibpreamble}
%    \changes{v2.6c}{2000/06/10}{Neuer Befehl eingef"uhrt}
%    \changes{v2.7j}{2001/05/27}{\cs{renewcommand} durch \cs{def}
%                                ersetzt zur Erh"ohung der
%                                \texttt{natbib}-Kompatibilit"at}
%  \begin{macro}{\bibpreamble}
%    \changes{v2.6c}{2000/06/10}{Neues Makro eingef"uhrt}
%    \changes{v2.6d}{2000/07/20}{Makro funktioniert nachdem \cs{let}
%                                durch \cs{newcommand*} ersetzt wurde}
%    \changes{v2.8q}{2002/01/10}{Wieder \cs{let}}
%  \cs{bibpreamble} kann vom Benutzer mit \cs{setbibpreamble} auf
%  einen Text gesetzt werden, der nach der "Uberschrift eingef"ugt
%  wird. Dasselbe Makro wird von \texttt{natbib.sty} als \cs{relax}
%  definiert; aus Kompatibilit"atsgr"unden wird hier vergleichbar
%  verfahren und \cs{def} statt \cs{renewcommand} verwendet.
% \changes{v2.7j}{2001/05/27}{Setzen der Pr"aambel in die
%                             theindex-Umgebung verschoben}
%    Au"serdem wird ab Version 2.7j die Pr"aambel nicht mehr in
%    \cs{bib@heading} gesetzt, sondern in der
%    \texttt{thebibliography}-Umgebung. Dies dient ebenfalls der
%    Kompatibilit"at mit natbib. 
%    \begin{macrocode}
\newcommand*{\bibpreamble}{\relax}
\let\bibpreamble\relax
\newcommand{\setbibpreamble}[1]{\def\bibpreamble{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\bib@heading}
% \changes{v2.3h}{1995/01/21}{Befehl zum Setzen der "Uberschrift des
%                             Literaturverzeichnisses.}
% \changes{v2.6c}{2000/06/10}{Die Preambel wird gesetzt.}
% \changes{v2.7b}{2001/01/05}{\cs{setchapterpreamble} wird verwendet.}
% \changes{v2.7j}{2001/06/27}{Setzen der Pr"aambel in die
%                             thebibliography-Umgebung verschoben}
%    \begin{macrocode}
\newcommand*\bib@heading{%
%<*scrartcl> 
  \section*{\refname}
  \@mkboth{\refname}{\refname}    
%</scrartcl>
%<*scrbook|scrreprt>
  \chapter*{\bibname}
  \@mkboth{\bibname}{\bibname}
%</scrbook|scrreprt>
}
%    \end{macrocode}
%  \end{macro}
% \changes{v2.2a}{1995/02/01}{In \texttt{scrartcl} \cs{bibname}
%                             vollst"andig durch \cs{refname} ersetzt.}
% \changes{v2.3g}{1996/01/14}{Implementierung von openbib ge"andert.}
% \changes{v2.3h}{1995/01/21}{Verwendung von \cs{bib@heading}}
%  \begin{Length}{bibindent}
% Nun werden noch die Umgebung f"ur das Literaturverzeichnis und der Befehl
% f"ur die einzelnen Eintr"age definiert.
%    \begin{macrocode}
\newdimen\bibindent
\bibindent=1.5em
%    \end{macrocode}
%  \end{Length}
% \changes{v2.8q}{2002/01/10}{Leere Pr"aambel erkennen und gesondert
%                             behandeln}
%    \begin{macrocode}
\newenvironment{thebibliography}[1]{%
%<scrbook|scrreprt>  \ifx\bibpreamble\relax\else\ifx\bibpreamle\@empty\else
%<scrbook|scrreprt>    \setchapterpreamble{\bibpreamble}%
%<scrbook|scrreprt>  \fi\fi
  \bib@heading%
%<scrartcl>  \ifx\bibpreamble\relax\else\ifx\bibpreamle\@empty\else
%<scrartcl>    \noindent\bibpreamble\par\nobreak
%<scrartcl>  \fi\fi
  \list{\@biblabel{\@arabic\c@enumiv}}%
  {\settowidth\labelwidth{\@biblabel{#1}}%
    \leftmargin\labelwidth
    \advance\leftmargin\labelsep
    \@openbib@code
    \usecounter{enumiv}%
    \let\p@enumiv\@empty
    \renewcommand*\theenumiv{\@arabic\c@enumiv}}%
  \sloppy\clubpenalty4000\widowpenalty4000%
  \sfcode`\.=\@m}
{\def\@noitemerr
  {\@latex@warning{Empty `thebibliography' environment}}%
  \endlist}
%    \end{macrocode}
%  \end{environment}
%
%  \begin{macro}{\newblock}
% \changes{v2.3g}{1996/01/14}{Grundeinstellung ge"andert.}
%    \begin{macrocode}
\newcommand*\newblock{\hskip .11em\@plus.33em\@minus.07em}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@openbib@code}
% \changes{v2.3g}{1996/01/14}{Neues Makro.}
%    \begin{macrocode}
\let\@openbib@code\@empty
%    \end{macrocode}
%  \end{macro}
%
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
%
% \subsection{Index}
% Dieses Verzeichnis existiert bei Briefen nicht.
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
%  \begin{environment}{theindex}
% \changes{v2.8d}{2001/07/05}{\cs{indexpagestyle} statt \texttt{plain}}
%  \begin{macro}{\index@preamble}
%    \changes{v2.6c}{2000/06/10}{Neues internes Makro eingef"uhrt}
%  \begin{macro}{\setindexpreamble}
%    \changes{v2.6c}{2000/06/10}{Neuer Befehl eingef"uhrt}
%    \changes{v2.6d}{2000/07/20}{Befehl funktioniert nachdem \cs{let}
%                                durch \cs{newcommand*} ersetzt wurde}
%    Analog zu \cs{bibpreamble} kann \cs{index@preamble} vom Benutzer mit
%    \cs{setindexpreamble} auf einen Text gesetzt werden, der nach
%    der Index"uberschrift eingef"ugt wird. Hier wird ein echtes internes
%    Makro verwendet, da nicht auf Kompatibilit"at geachtet werden
%    mu"s.
%    \begin{macrocode}
\newcommand*{\index@preamble}{\relax}
\newcommand{\setindexpreamble}[1]{\renewcommand*{\index@preamble}{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\idx@heading}
% \changes{v2.3h}{1995/01/21}{Befehl zum Setzen der "Uberschrift des
%                             Indexes.}
% \changes{v2.4c}{1995/04/04}{Kolumnentitel werden nun korrekt behandelt}
% \changes{v2.4g}{1996/11/04}{Index auch bei scrartcl wieder zweispaltig}
% \changes{v2.6c}{2000/06/10}{Verwendung von \cs{index@preamble}
%                             eingef"ugt}
% \changes{v2.7j}{2001/05/27}{Setzen der Pr"aambel in die
%                             theindex-Umgebung verschoben}
% Bis Version 2.7a sah diese Definition so aus:
% \begin{verbatim}
% \newcommand*{\idx@heading}{%
%   \if@twoside\cleardoublepage\else\clearpage\fi%
%   \@mkboth{\indexname}{\indexname}%
%   \twocolumn[%
% <scrartcl>  \section*%
% <scrreprt|scrbook>  \@makeschapterhead%
%     {\indexname}\index@preamble]
% }
% \end{verbatim}
% Dagegen ist grunds"atzlich nichts zu sagen. Allerdings gibt es seit
% Version 2.7b das die neue Methode der Kapitel-Preambel, die extra
% eingef"uhrt wurde, um die \texttt{hyperref}-Links -- insbesondere
% den des Index -- zumindest bei Verwendung von \texttt{hpdftex.def}
% zu verbessern. Deshalb wurde die Implementierung entsprechend
% abge"andert. Au"serdem wurde das Setzen der Pr"aambel aus
% Konsistenzgr"unden in Version 2.7j "ubereinstimmten mit der
% \texttt{thebibliography}-Umgebung in die \texttt{theindex}-Umgebung
% verschoben.
%    \begin{macrocode}
\newcommand*{\idx@heading}{%
  \if@twoside\cleardoublepage\else\clearpage\fi%
%<scrartcl>  \twocolumn[\section*{\indexname}]
%<scrreprt|scrbook>  \twocolumn[\chapter*{\indexname}]
  \@mkboth{\indexname}{\indexname}%
}
%    \end{macrocode}
%  \end{macro}
% \changes{v2.3h}{1995/01/21}{Verwendung von \cs{idx@heading}}
% \changes{v2.7j}{2001/05/27}{Setzen der Pr"aambel in die
%                             theindex-Umgebung verschoben}
% Ein Index ist ebenfalls m"oglich. Dieser ist wie "ublich definiert.
%    \begin{macrocode}
\newenvironment{theindex}
  {\if@twocolumn
    \@restonecolfalse
    \else
    \@restonecoltrue
    \fi
    \columnseprule \z@
    \columnsep 35\p@
%<scrbook|scrreprt>    \setchapterpreamble{\index@preamble}
    \idx@heading%
%<scrartcl>    \index@preamble\par\nobreak
    \thispagestyle{\indexpagestyle}\parindent\z@
    \setlength{\parskip}{\z@ \@plus .3\p@}
    \setlength{\parfillskip}{\z@ \@plus 1fil}
    \let\item\@idxitem}
  {\if@restonecol\onecolumn\else\clearpage\fi}
\newcommand*\@idxitem  {\par\hangindent 40\p@}
%    \end{macrocode}
%  \begin{macro}{\subitem}
% \changes{v2.3g}{1996/01/14}{Verwendung von \cs{@idxitem} spart Speicher}
%  \begin{macro}{\subsubitem}
% \changes{v2.3g}{1996/01/14}{Verwendung von \cs{@idxitem} spart Speicher}
%  \begin{macro}{\indexspace}
%    \begin{macrocode}
\newcommand*\subitem   {\@idxitem \hspace*{20\p@}}
\newcommand*\subsubitem{\@idxitem \hspace*{30\p@}}
\newcommand*\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{environment}
%
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
%
% \subsection{Fu"snoten}
%
%  \begin{macro}{\footnoterule}
% Fu"snoten sind etwas abweichend definiert.
%    \changes{v2.3a}{1995/07/08}{\cs{@width} verwendet}
%    \changes{v2.8q}{2002/02/06}{\cs{raggedbottom}-Verbesserung
%      eingef"ugt}
% Insbesondere wird im Fall, dass \cs{raggedbottom} verwendet wird,
% die Fu"snotenlinie nach unten gedr"uckt. Dies funktioniert nur dann
% nicht, wenn Abbildungen oder Tabellen mit der Option "`\texttt{b}"'
% an das Ende der Seite gesetzt werden. \cs{raggedbottom} wird daran
% erkannt, dass \cs{@textbottom} nicht \cs{relax} ist. Das kann
% nat"urlich auch einmal schief gehen, ist dann aber auch nicht ganz
% so tragisch.
%    \begin{macrocode}
\renewcommand*\footnoterule{%
  \kern-3\p@
  \ifx\@textbottom\relax\else\vskip \z@ \@plus.0005fil\fi
  \hrule\@width.4\columnwidth
  \kern 2.6\p@}
%<!scrartcl>\@addtoreset{footnote}{chapter}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\deffootnote}
% \changes{v2.4l}{1997/02/06}{Neues Makro zur Definition der Gestalt von
%                             Fu"snoten.}
% \changes{v2.9b}{2002/08/05}{Absatzeinzug korrigiert}
% Dieses Makro erlaubt einen optionalen und erwartet drei weitere
% Parameter. Der erste, optionale gibt den Einzug der ersten Zeile des
% Fu"snotentextes vom linken Rand an. Die Fu"snotenmarkierungen werden
% rechtsb"undig in diesen Einzug gesetzt. Der zweite, also erste nicht
% optionale Parameter gibt den Einzug jeder weiteren Zeile des
% Fu"snotentextes vom linken Rand an. Fehlt der optionale Parameter so
% ist er gleich diesem. Der dritte, also zweite nicht optionale
% Parameter gibt den zus"atzlichen Einzug jedes weiteren Absatzes
% einer Fu"snote an. Der letzte Parameter schlie"slich bestimmt die
% Ausgabe der Fu"snotenmarkierung in der Fu"snote. Diese wird
% zus"atzlich in eine \verb|\hbox| gesetzt.
%    \begin{macrocode}
\newcommand\deffootnote[4][]{%
  \long\def\@makefntext##1{%
    \setlength{\@tempdimc}{#3}%
    \edef\@tempa{#1}\ifx\@tempa\@empty
      \@setpar{\@@par
        \@tempdima = \hsize
        \addtolength{\@tempdima}{-#2}
        \parshape \@ne #2 \@tempdima}%
    \else
      \addtolength{\@tempdimc}{#2}%
      \addtolength{\@tempdimc}{-#1}%
      \@setpar{\@@par
        \@tempdima = \hsize
        \addtolength{\@tempdima}{-#1}
        \@tempdimb = \hsize
        \addtolength{\@tempdimb}{-#2}
        \parshape \tw@ #1 \@tempdima #2 \@tempdimb}%
    \fi
    \par
    \parindent\@tempdimc\noindent
    \ftn@font{\hbox to \z@{\hss\@@makefnmark}##1}}
%    \end{macrocode}
%  \begin{macro}{\@@makefnmark}
% \changes{v2.4l}{1997/02/06}{Neues Makro zum Setzen der
%                             Fu"snotenmarkierung im Text}
%    \begin{macrocode}
  \def\@@makefnmark{\hbox{\ftnm@font{#4}}}
%    \end{macrocode}
%  \end{macro}
%    \begin{macrocode}
}
%    \end{macrocode}
%  \begin{macro}{\ftn@font}
% \changes{v2.8q}{2001/11/16}{Neu}
%  \begin{macro}{\scr@fnt@footnote}
% \changes{v2.8q}{2001/11/16}{Neu}
%  \begin{macro}{\ftnm@font}
% \changes{v2.8q}{2001/11/16}{Neu}
%  \begin{macro}{\scr@fnt@footnotenumber}
% \changes{v2.8q}{2001/11/16}{Neu}
%  \begin{macro}{\scr@fnt@footnotenlabel}
% \changes{v2.8q}{2001/11/16}{Neu}
%  \begin{macro}{\scr@fnt@instead@footnotetext}
% \changes{v2.8q}{2001/11/16}{Neu}
% Das erste Makro gibt die Schrift an, in der die Fu"snote gesetzt
% wird. Davon abweichend kann mit dem zweiten Makro die Schriftart
% f"ur die Fu"snotennummer getrennt angegeben werden. Aufgrund der
% Definition kann auch ein Makro verwendet werden, das ein Argument
% erwartet.
%    \begin{macrocode}
\newcommand*{\ftn@font}{\normalfont}
\newcommand*{\scr@fnt@footnote}{\ftn@font}
\newcommand*{\ftnm@font}{}
\newcommand*{\scr@fnt@footnotenumber}{\ftnm@font}
\newcommand*{\scr@fnt@footnotelabel}{\ftnm@font}
\newcommand*{\scr@fnt@instead@footnotetext}{footnote}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\deffootnotemark}
% \changes{v2.4l}{1997/02/06}{Neues Makro zur Definition der
%                             Fu"snotenmarkierung im Text}
%    \begin{macrocode}
\newcommand*\deffootnotemark[1]{\def\@makefnmark{\hbox{\ftntm@font{#1}}}}
%    \end{macrocode}
%  \begin{macro}{\ftntm@font}
% \changes{v2.8q}{2001/11/16}{Neu}
%  \begin{macro}{\scr@fnt@footnotereference}
% \changes{v2.8q}{2001/11/16}{Neu}
%  \begin{macro}{\scr@fnt@footnoteref}
% \changes{v2.8q}{2001/11/16}{Neu}
% Dies ist die Schriftart der Fu"snotenreferenz im Text. Auch hier kann
% ggf. ein Makro verwendet werden, das ein Argument erwartet.
%    \begin{macrocode}
\newcommand*{\ftntm@font}{}
\newcommand*{\scr@fnt@footnotereference}{\ftntm@font}
\newcommand*{\scr@fnt@footnoteref}{\ftntm@font}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\thefootnotemark}
% \changes{v2.4l}{1997/02/06}{Neues Makro, damit \cs{@thefnmark} auf
%                             Anwenderebene verf"ugbar wird.}
%    \begin{macrocode}
\newcommand*{\thefootnotemark}{\@thefnmark}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\textsuperscript}
% \changes{v2.4l}{1997/02/06}{Neues Makro, damit \cs{@textsuperscript} auf
%                             Anwenderebene verf"ugbar wird.}
% \changes{v2.5g}{1999/10/09}{Da \cs{textsuperscript} bereits
%                             existiert, wird es nicht mehr
%                             umdefiniert. Die dadurch entstehende
%                             Inkompatibilit"at wird in Kauf
%                             genommen.}
% Das Makro ist im Kernel vorhanden. Die Umdefinition sah einst wie
% folgt aus:
%    \begin{verbatim}
%    \let\textsuperscript\@textsuperscript
%    \end{verbatim}
%  \end{macro}
% \changes{v2.4l}{1997/02/06}{Verwendung der neuen Makros zur
%                             Fu"snotengestaltgebung.}
% \changes{v2.8c}{2001/06/29}{\cs{normalcolor} eingef"ugt}
%  \begin{macro}{\@makefnmark}
%    \begin{macrocode}
\deffootnote[1em]{1.5em}{1em}
  {\textsuperscript{\thefootnotemark}}
\deffootnotemark{\textsuperscript{\thefootnotemark}}
%    \end{macrocode}
%  \end{macro}
%
%
% \subsection{Kleinigkeiten}
%
%  \begin{macro}{textsubscript}
% \changes{v2.8h}{2001/07/19}{Neu}
%  \begin{macro}{@textsubscript}
% \changes{v2.8h}{2001/07/19}{Neu}
% Im \LaTeX-Kern wird zwar ein Makro \cs{textsuperscript} definiert,
% um Texte hochstellen zu k"onnen, die entsprechende Anweisung zum
% Tiefstellen fehlt jedoch. Das wird hier nachgeholt, wobei nahezu
% unver"andert auf die Definition aus dem \LaTeX-Kern zur"uckgegriffen
%  wird.
%    \begin{macrocode}
\DeclareRobustCommand*\textsubscript[1]{%
  \@textsubscript{\selectfont#1}}
\newcommand{\@textsubscript}[1]{%
  {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%
% \subsection{Standardbezeichnungen}
%
% Diese werden von |german.sty| ohnehin "uberschrieben.
%  \begin{macro}{\contentsname}
%  \begin{macro}{\listfigurename}
%  \begin{macro}{\listtablename}
%  \begin{macro}{\refname}
%  \begin{macro}{\bibname}
%  \begin{macro}{\indexname}
%  \begin{macro}{\figurename}
%  \begin{macro}{\tablename}
%  \begin{macro}{\partname}
%  \begin{macro}{\chaptername}
%  \begin{macro}{\appendixname}
%  \begin{macro}{\abstractname}
%  \begin{macro}{\today}
%    \begin{macrocode}
%<*!scrlettr>
\newcommand*\contentsname{Contents}
\newcommand*\listfigurename{List of Figures}
\newcommand*\listtablename{List of Tables}
%<scrartcl>\newcommand*\refname{References}
%<!scrartcl>\newcommand*\bibname{Bibliography}
\newcommand*\indexname{Index}
\newcommand*\figurename{Figure}
\newcommand*\tablename{Table}
\newcommand*\partname{Part}
%<!scrartcl>\newcommand*\chaptername{Chapter}
\newcommand*\appendixname{Appendix}
\newcommand*\abstractname{Abstract}
%</!scrlettr>
\newcommand*\today{\ifcase\month\or
  January\or February\or March\or April\or May\or June\or
  July\or August\or September\or October\or November\or December\fi
  \space\number\day, \number\year}
%    \end{macrocode}
%
%  \begin{macro}{\captionsenglish}
%  \begin{macro}{\captionsUSenglish}
%  \begin{macro}{\captionsamerican}
%  \begin{macro}{\captionsbritish}
%  \begin{macro}{\captionsUKenglish}
%  \begin{macro}{\captionsgerman}
%  \begin{macro}{\captionsaustrian}
%  \begin{macro}{\captionsngerman}
%  \begin{macro}{\captionsfrench}
%  \begin{macro}{\captionsitalian}
%  \begin{macro}{\captionsspanish}
%  \begin{macro}{\captionscroatian}
%    \changes{v2.8q}{2001/10/05}{Sprachspende von Branka
%                                Lon\v{c}arevi\'{c}}
%  \begin{macro}{\captionsdutch}
%    \changes{v2.8q}{2002/02/01}{Sprachspende von Henk Jongbloets}
% Bei |scrlttr2| gibt es eine gro"se Anzahl von Label-Variablen, die es
% in den Standard-classes nicht gibt, die also auch nicht in
% Sprachanpassungen wie |german.sty| oder |ngerman.sty| vorhanden sind.
% Deshalb ist es notwendig diese Labels hier neu zu definieren.
%  \begin{macro}{\providecaptionname}
% \changes{v2.8q}{2001/11/08}{Neu}
%  \begin{macro}{\newcaptionname}
% \changes{v2.8q}{2001/11/08}{Neu}
%  \begin{macro}{\renewcaptionname}
% \changes{v2.8q}{2001/11/08}{Neu}
% Doch bevor dies geschieht, werden erst einmal drei Benutzerkommandos
% definiert, mit denen einer Sprache, so ein Begriff zugef"ugt werden
% kann.
%    \begin{macrocode}
\newcommand*{\providecaptionname}[3]{%
  \@ifundefined{captions#1}{%
    \@ifundefined{cap@info@#1@done}{%
      \ClassInfo{%
        scrlttr2%
        }{%
        No captions found for `#1'\MessageBreak
        --> skipped%
        }%
      \expandafter\let\csname cap@info@#1@done\endcsname\@empty}{}%
    }{%
    \begingroup%
      \let\@tempa\endgroup%
      \csname captions#1\endcsname%
      \ifx #2\undefined%
        \def\@tempa{\endgroup%
          \expandafter\g@addto@macro\csname captions#1\endcsname{%
            \def#2{#3}}}%
      \else
        \ClassInfo{%
          scrlttr2%
          }{%
          `\string#2' at language `#1' already
          defined\MessageBreak
          --> skipped%
          }
      \fi
    \@tempa
    }
  }
\newcommand*{\newcaptionname}[3]{%
  \@ifundefined{captions#1}{%
    \ClassInfo{%
      scrlttr2%
      }{%
      No captions found for `#1' --> defining%
      }%
    \@namedef{captions#1}{}%
    }{}%
  \begingroup%
    \csname captions#1\endcsname%
    \ifx #2\undefined\else%
      \ClassError{%
        scrlttr2%
        }{%
        `\string#2' at language `#1' already defined%
        }{%
        You've told me to define `\string#2' at language
        `#1',\MessageBreak
        but it is already defined.\MessageBreak
        It will be redefined, if you'll continue.%
        }
    \fi
  \endgroup%
  \expandafter\g@addto@macro\csname captions#1\endcsname{%
    \def#2{#3}}%
  }
\newcommand*{\renewcaptionname}[3]{%
  \@ifundefined{captions#1}{%
    \ClassError{%
      scrlttr2%
      }{%
      No captions found for `#1'%
      }{%
      You've told me to redefine the caption `\string#2' at language
      `#1',\MessageBreak
      but `\expandafter\string\csname captions#1\endcsname' is not
      defined.\MessageBreak
      If you'll continue it will be defined.%
      }
    \@namedef{captions#1}{}%
    }{}%
  \begingroup%
    \csname captions#1\endcsname%
    \ifx #2\undefined%
      \ClassError{%
        scrlttr2%
        }{%
        `\string#2' not defined at language `#1'%
        }{%
        You've told me to redefine `\string#2' at language
        `#1',\MessageBreak
        but it is not defined.\MessageBreak
        If you'll continue it will be defined.%
        }
    \fi
  \endgroup
  \expandafter\g@addto@macro\csname captions#1\endcsname{%
    \def#2{#3}}%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
% F"ur das Datum wird gleiches nicht ben"otigt, da hier direkt mit
% |\providecommand|, |\newcommand| und |\renewcommand| gearbeitet
% werden kann.
%  \begin{macro}{\g@addnumerical@date}
% Intern wird bei der Briefklasse aber ein Makro ben"otigt, mit dem an
% existierende Datumsumschaltungen -- und nur an existierende --
% weitere Befehle angeh"angt werden k"onnen.
%    \begin{macrocode}
%<*scrlettr>
\newcommand*{\g@addnumerical@date}[2]{%
  \@ifundefined{date#1}{%
    \ClassInfo{%
      scrlttr2%
      }{%
      no date found for language `#1'\MessageBreak
      --> skipped%
      }
    }{%
    \expandafter\g@addto@macro\csname date#1\endcsname{%
      \let\sym@date=\today%
      \def\num@date{#2}%
      \def\today{\if@orgdate\sym@date\else\num@date\fi}%
      }
    }
  }
%</scrlettr>
%    \end{macrocode}
%  \end{macro}
%
% Weil es in fr"uheren Versionen zu Problemen damit gekommen ist,
% werden diese jedoch erst bei |\begin{document}| definiert. Dabei
% wird |\providecaptionname| verwendet, so dass sie auch schon vor
% |\begin{document}| mit |\newcaptionname| anderslautend definiert
% werden k"onnen.
% \begin{table}
%   \centering
%   \begin{tabular}{ll}
%     Sprache & Spender \\\hline\\[-1.6ex]
%     English & Frank Neukam, Michael Dewey, Markus Kohm \\
%     Deutsch & Frank Neukam, Markus Kohm \\
%     Franz"osisch & Frank Neukam, Henk Jongbloets \\
%     Italienisch & Simone Naldi \\
%     Spanisch & Ralph J.\ Hangleiter, Alejandro L\'opez-Valencia\\
%     Kroatisch & Branka Lon\v{c}arevi\'{c} \\
%     Holl"andisch & Henk Jongbloets \\
%   \end{tabular}
%   \caption{Liste der unterst"utzten Sprachen und der
%     \emph{Sprachspender}}
% \end{table}
% Eine Besonderheit stellt die englische Sprache dar. Es wird
% versucht, diese als Notersatz immer zu definieren.
%    \begin{macrocode}
%<*scrlettr>
\AtBeginDocument{
  \@ifundefined{captionsenglish}{\let\captionsenglish\@empty}{}%
  \providecaptionname{english}\yourrefname{Your ref.}%
  \providecaptionname{english}\yourmailname{Your letter of}%
  \providecaptionname{english}\myrefname{Our ref.}%
  \providecaptionname{english}\customername{Customer no.}%
  \providecaptionname{english}\invoicename{Invoice no.}%
  \providecaptionname{english}\subjectname{Subject}%
  \providecaptionname{english}\ccname{cc}%
  \providecaptionname{english}\enclname{encl}%
  \providecaptionname{english}\headtoname{To}%
  \providecaptionname{english}\headfromname{From}%
  \providecaptionname{english}\datename{Date}%
  \providecaptionname{english}\pagename{Page}%
  \providecaptionname{english}\phonename{Phone}%
  \providecaptionname{english}\faxname{Fax}%
  \providecaptionname{english}\emailname{Email}%
  \providecaptionname{english}\wwwname{Url}%
  \providecaptionname{english}\bankname{Bank account}%
  \providecaptionname{USenglish}\yourrefname{Your ref.}%
  \providecaptionname{USenglish}\yourmailname{Your letter of}%
  \providecaptionname{USenglish}\myrefname{Our ref.}%
  \providecaptionname{USenglish}\customername{Customer no.}%
  \providecaptionname{USenglish}\invoicename{Invoice no.}%
  \providecaptionname{USenglish}\subjectname{Subject}%
  \providecaptionname{USenglish}\ccname{cc}%
  \providecaptionname{USenglish}\enclname{encl}%
  \providecaptionname{USenglish}\headtoname{To}%
  \providecaptionname{USenglish}\headfromname{From}%
  \providecaptionname{USenglish}\datename{Date}%
  \providecaptionname{USenglish}\pagename{Page}%
  \providecaptionname{USenglish}\phonename{Phone}%
  \providecaptionname{USenglish}\faxname{Fax}%
  \providecaptionname{USenglish}\emailname{Email}%
  \providecaptionname{USenglish}\wwwname{Url}%
  \providecaptionname{USenglish}\bankname{Bank account}%
  \providecaptionname{american}\yourrefname{Your ref.}%
  \providecaptionname{american}\yourmailname{Your letter of}%
  \providecaptionname{american}\myrefname{Our ref.}%
  \providecaptionname{american}\customername{Customer no.}%
  \providecaptionname{american}\invoicename{Invoice no.}%
  \providecaptionname{american}\subjectname{Subject}%
  \providecaptionname{american}\ccname{cc}%
  \providecaptionname{american}\enclname{encl}%
  \providecaptionname{american}\headtoname{To}%
  \providecaptionname{american}\headfromname{From}%
  \providecaptionname{american}\datename{Date}%
  \providecaptionname{american}\pagename{Page}%
  \providecaptionname{american}\phonename{Phone}%
  \providecaptionname{american}\faxname{Fax}%
  \providecaptionname{american}\emailname{Email}%
  \providecaptionname{american}\wwwname{Url}%
  \providecaptionname{american}\bankname{Bank account}%
  \providecaptionname{british}\yourrefname{Your ref.}%
  \providecaptionname{british}\yourmailname{Your letter of}%
  \providecaptionname{british}\myrefname{Our ref.}%
  \providecaptionname{british}\customername{Customer no.}%
  \providecaptionname{british}\invoicename{Invoice no.}%
  \providecaptionname{british}\subjectname{Subject}%
  \providecaptionname{british}\ccname{cc}%
  \providecaptionname{british}\enclname{encl}%
  \providecaptionname{british}\headtoname{To}%
  \providecaptionname{british}\headfromname{From}%
  \providecaptionname{british}\datename{Date}%
  \providecaptionname{british}\pagename{Page}%
  \providecaptionname{british}\phonename{Phone}%
  \providecaptionname{british}\faxname{Fax}%
  \providecaptionname{british}\emailname{Email}%
  \providecaptionname{british}\wwwname{Url}%
  \providecaptionname{british}\bankname{Bank account}%
  \providecaptionname{UKenglish}\yourrefname{Your ref.}%
  \providecaptionname{UKenglish}\yourmailname{Your letter of}%
  \providecaptionname{UKenglish}\myrefname{Our ref.}%
  \providecaptionname{UKenglish}\customername{Customer no.}%
  \providecaptionname{UKenglish}\invoicename{Invoice no.}%
  \providecaptionname{UKenglish}\subjectname{Subject}%
  \providecaptionname{UKenglish}\ccname{cc}%
  \providecaptionname{UKenglish}\enclname{encl}%
  \providecaptionname{UKenglish}\headtoname{To}%
  \providecaptionname{UKenglish}\headfromname{From}%
  \providecaptionname{UKenglish}\datename{Date}%
  \providecaptionname{UKenglish}\pagename{Page}%
  \providecaptionname{UKenglish}\phonename{Phone}%
  \providecaptionname{UKenglish}\faxname{Fax}%
  \providecaptionname{UKenglish}\emailname{Email}%
  \providecaptionname{UKenglish}\wwwname{Url}%
  \providecaptionname{UKenglish}\bankname{Bank account}%
  \providecaptionname{german}\yourrefname{Ihr Zeichen}%
  \providecaptionname{german}\yourmailname{Ihr Schreiben vom}%
  \providecaptionname{german}\myrefname{Unser Zeichen}%
  \providecaptionname{german}\customername{Kundennummer}%
  \providecaptionname{german}\invoicename{Rechnungsnummer}%
  \providecaptionname{german}\subjectname{Betrifft}%
  \providecaptionname{german}\ccname{Kopien an}%
  \providecaptionname{german}\enclname{Anlagen}%
  \providecaptionname{german}\headtoname{An}%
  \providecaptionname{german}\headfromname{Von}%
  \providecaptionname{german}\datename{Datum}%
  \providecaptionname{german}\pagename{Seite}%
  \providecaptionname{german}\phonename{Telephon}%
  \providecaptionname{german}\faxname{Fax}%
  \providecaptionname{german}\emailname{E-Mail}%
  \providecaptionname{german}\wwwname{URL}%
  \providecaptionname{german}\bankname{Bankverbindung}%
  \providecaptionname{ngerman}\yourrefname{Ihr Zeichen}%
  \providecaptionname{ngerman}\yourmailname{Ihr Schreiben vom}%
  \providecaptionname{ngerman}\myrefname{Unser Zeichen}%
  \providecaptionname{ngerman}\customername{Kundennummer}%
  \providecaptionname{ngerman}\invoicename{Rechnungsnummer}%
  \providecaptionname{ngerman}\subjectname{Betrifft}%
  \providecaptionname{ngerman}\ccname{Kopien an}%
  \providecaptionname{ngerman}\enclname{Anlagen}%
  \providecaptionname{ngerman}\headtoname{An}%
  \providecaptionname{ngerman}\headfromname{Von}%
  \providecaptionname{ngerman}\datename{Datum}%
  \providecaptionname{ngerman}\pagename{Seite}%
  \providecaptionname{ngerman}\phonename{Telefon}%
  \providecaptionname{ngerman}\faxname{Fax}%
  \providecaptionname{ngerman}\emailname{E-Mail}%
  \providecaptionname{ngerman}\wwwname{URL}%
  \providecaptionname{ngerman}\bankname{Bankverbindung}%
  \providecaptionname{austrian}\yourrefname{Ihr Zeichen}%
  \providecaptionname{austrian}\yourmailname{Ihr Schreiben vom}%
  \providecaptionname{austrian}\myrefname{Unser Zeichen}%
  \providecaptionname{austrian}\customername{Kundennummer}%
  \providecaptionname{austrian}\invoicename{Rechnungsnummer}%
  \providecaptionname{austrian}\subjectname{Betrifft}%
  \providecaptionname{austrian}\ccname{Kopien an}%
  \providecaptionname{austrian}\enclname{Anlagen}%
  \providecaptionname{austrian}\headtoname{An}%
  \providecaptionname{austrian}\headfromname{Von}%
  \providecaptionname{austrian}\datename{Datum}%
  \providecaptionname{austrian}\pagename{Seite}%
  \providecaptionname{austrian}\phonename{Telefon}%
  \providecaptionname{austrian}\faxname{Fax}%
  \providecaptionname{austrian}\emailname{E-Mail}%
  \providecaptionname{austrian}\wwwname{URL}%
  \providecaptionname{austrian}\bankname{Bankverbindung}%
  \providecaptionname{french}\yourrefname{Vos r\'ef\'erences}%
  \providecaptionname{french}\yourmailname{Votre lettre du}%
  \providecaptionname{french}\myrefname{Nos r\'ef\'erences}%
  \providecaptionname{french}\customername{Num\'ero de client}%
  \providecaptionname{french}\invoicename{Num\'ero de facture}%
  \providecaptionname{french}\subjectname{Concernant}%
  \providecaptionname{french}\ccname{Copie \`a}%
  \providecaptionname{french}\enclname{Annexes}%
  \providecaptionname{french}\headtoname{A}%
  \providecaptionname{french}\headfromname{De}%
  \providecaptionname{french}\datename{Date}%
  \providecaptionname{french}\pagename{Page}%
  \providecaptionname{french}\phonename{T\'el\'ephone}%
  \providecaptionname{french}\faxname{T\'el\'efax}%
  \providecaptionname{french}\emailname{E-mail}%
  \providecaptionname{french}\wwwname{URL}%
  \providecaptionname{french}\bankname{Compte en banque}%
  \providecaptionname{italian}\yourrefname{Vs./Rif.}%
  \providecaptionname{italian}\yourmailname{Vs.~lettera del}%
  \providecaptionname{italian}\myrefname{Ns./Rif.}%
  \providecaptionname{italian}\customername{Nr.~cliente}%
  \providecaptionname{italian}\invoicename{Nr.~fattura}%
  \providecaptionname{italian}\subjectname{Oggetto}%
  \providecaptionname{italian}\ccname{Per conoscenza}%
  \providecaptionname{italian}\enclname{Allegato}%
  \providecaptionname{italian}\headtoname{A}%
  \providecaptionname{italian}\headfromname{}% TODO: translate it
  \providecaptionname{italian}\datename{Data}%
  \providecaptionname{italian}\pagename{Pagina}%
  \providecaptionname{italian}\phonename{}% TODO: translate it
  \providecaptionname{italian}\faxname{}% TODO: translate it
  \providecaptionname{italian}\emailname{}% TODO: translate it
  \providecaptionname{italian}\wwwname{}% TODO: translate it
  \providecaptionname{italian}\bankname{}% TODO: translate it
  \providecaptionname{spanish}\yourrefname{Su ref.}%
  \providecaptionname{spanish}\yourmailname{Su carta de}%
  \providecaptionname{spanish}\myrefname{Nuestra ref.}%
  \providecaptionname{spanish}\customername{No. de cliente}%
  \providecaptionname{spanish}\invoicename{No. de factura}%
  \providecaptionname{spanish}\subjectname{Asunto}%
  \providecaptionname{spanish}\ccname{Copias}%
  \providecaptionname{spanish}\enclname{Adjunto}%
  \providecaptionname{spanish}\headtoname{A}%
  \providecaptionname{spanish}\headfromname{De}%
  \providecaptionname{spanish}\datename{Fecha}%
  \providecaptionname{spanish}\pagename{P\'agina}%
  \providecaptionname{spanish}\phonename{Tel\'efono}%
  \providecaptionname{spanish}\faxname{Fax}%
  \providecaptionname{spanish}\emailname{Email}% or Correo electr\'onico
  \providecaptionname{spanish}\wwwname{URL}% or P\`agina web
  \providecaptionname{spanish}\bankname{Cuenta bancaria}%
  \providecaptionname{croatian}\yourrefname{Va\v{s} znak}%
  \providecaptionname{croatian}\yourmailname{Va\v{s}e pismo od}%
  \providecaptionname{croatian}\myrefname{Na\v{s} znak}%
  \providecaptionname{croatian}\customername{Broj kupca}%
  \providecaptionname{croatian}\invoicename{Broj fakture}%
  \providecaptionname{croatian}\subjectname{Predmet}%
  \providecaptionname{croatian}\ccname{Kopija}%
  \providecaptionname{croatian}\enclname{Privitak}%
  \providecaptionname{croatian}\headtoname{Prima}%
  \providecaptionname{croatian}\headfromname{\v{S}alje}%
  \providecaptionname{croatian}\datename{Nadnevak}%
  \providecaptionname{croatian}\pagename{Stranica}%
  \providecaptionname{croatian}\phonename{Telefon}% 
  \providecaptionname{croatian}\faxname{Fax}% 
  \providecaptionname{croatian}\emailname{E-Mail}%
  \providecaptionname{croatian}\wwwname{URL}% 
  \providecaptionname{croatian}\bankname{Bankovna veza}%
  \providecaptionname{dutch}\yourrefname{Uw kenmerk}%
  \providecaptionname{dutch}\yourmailname{Uw brief van}%
  \providecaptionname{dutch}\myrefname{Ons kenmerk}%
  \providecaptionname{dutch}\customername{Klant No.}%
  \providecaptionname{dutch}\invoicename{Rekening No.}%
  \providecaptionname{dutch}\subjectname{Onderwerp}%
  \providecaptionname{dutch}\ccname{Kopie aan}%
  \providecaptionname{dutch}\enclname{Bijlage(n)}%
  \providecaptionname{dutch}\headtoname{Aan}%
  \providecaptionname{dutch}\headfromname{Van}%
  \providecaptionname{dutch}\datename{Datum}%
  \providecaptionname{dutch}\pagename{Pagina}%
  \providecaptionname{dutch}\phonename{Telefoon}%
  \providecaptionname{dutch}\faxname{Fax}%
  \providecaptionname{dutch}\emailname{E--mail}%
  \providecaptionname{dutch}\urlname{URL}%
  \providecaptionname{dutch}\bankname{Bankrekening}%
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\dateenglish}
%  \begin{macro}{\dateUSenglish}
%  \begin{macro}{\dateamerican}
%    \changes{v2.4c}{1997/11/25}{american identisch mit USenglish
%      definiert} 
%  \begin{macro}{\datebritish}
%    \changes{v2.4c}{1997/11/25}{british identisch mit english
%      definiert} 
%  \begin{macro}{\dateUKenglish}
%    \changes{v2.4c}{1997/11/25}{UKenglish identisch mit english
%      definiert} 
%  \begin{macro}{\dategerman}
%  \begin{macro}{\dateaustrian}
%  \begin{macro}{\datengerman}
%    \changes{v2.5}{1999/09/08}{ngerman neu und identisch mit german}
%  \begin{macro}{\datefrench}
%  \begin{macro}{\dateitalian}
%    \changes{v2.3e}{1996/05/31}{Ich hoffe, da"s das stimmt}
%  \begin{macro}{\datespanish}
%    \changes{v2.4c}{1997/11/25}{Ich hoffe, da"s das stimmt}
%    \changes{v2.4c}{1997/11/25}{Datumsumschaltung nicht mehr
%      zwingend} 
%  \begin{macro}{\datecroatian}
%    \changes{v2.8q}{2001/05/10}{Neu}
%  \begin{macro}{\datedutch}
%    \changes{v2.8q}{2002/02/01}{Neu}
% Dar"uber hinaus ist auch das Datumsformat sprachabh"angig. Dies wird
% hier ebenfalls beachtet.
%    \begin{macrocode}
  \g@addnumerical@date{english}{%
    \number\day/\number\month/\number\year}
  \g@addnumerical@date{british}{%
    \number\day/\number\month/\number\year}
  \g@addnumerical@date{UKenglish}{%
    \number\day/\number\month/\number\year}
  \g@addnumerical@date{USenglish}{%
    \number\month/\number\day/\number\year}
  \g@addnumerical@date{american}{%
    \number\month/\number\day/\number\year}
  \g@addnumerical@date{german}{%
    \number\day.\,\number\month.\,\number\year}
  \g@addnumerical@date{ngerman}{%
    \number\day.\,\number\month.\,\number\year}
  \g@addnumerical@date{austrian}{%
    \number\day.\,\number\month.\,\number\year}
  \g@addnumerical@date{french}{%
    \number\day.\,\number\month.\,\number\year}
  \g@addnumerical@date{italian}{%
    \number\day.\,\number\month.\,\number\year}
  \g@addnumerical@date{spanish}{%
    \number\day.\,\number\month.\,\number\year}
  \g@addnumerical@date{croatian}{%
    \number\day.\,\number\month.\,\number\year.}
  \g@addnumerical@date{dutch}{%
    \number\day.\,\number\month.\,\number\year}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
% Zum Schlu"s findet noch die eigentliche Auswahl statt. Diese orientiert
% sich nun an der Auswahl nach german.sty 2.5b und verwendet keine festen
% Sprachzuordnungen mehr. Daf"ur sind nun keine Erweiterungen f"ur andere
% Sprachen mehr m"oglich.
%   \changes{v2.2c}{1995/03/20}{Im Sprachenvergleich fehlten die "`="'
%     hinter \cs{language}}
%   \changes{v2.4c}{1997/11/25}{Sprachauswahl um american, british,
%     UKenglish und spanish erweitert}
%   \changes{v2.5}{1999/09/08}{Sprachauswahl um ngermen erweitert}
%   \changes{v2.5b}{2000/01/20}{Reaktivierung der Sprache geschieht
%     nun via \cs{languagename}, soweit dies m"oglich ist}
%   \changes{v2.5e}{2000/07/14}{Workaround f"ur Sprache nohyphenation
%     durch Format mit Babel-Erweiterung aber kein Babel package
%     geladen}
%    \begin{macrocode}
  \captionsenglish
  \dateenglish
%    \end{macrocode}
%   \changes{v2.9i}{2002/09/04}{Workaround f"ur den
%     \texttt{hyphen.cfg}-Bug von Babel}
% Wird die \texttt{hyphen.cfg} von Babel verwendet, wird aber das
% \textsl{babel}-Paket nicht geladen, so ist \cs{languagename} h"aufig
% nicht korrekt, so dass dann \cs{selectlanguage} mit
% \cs{languagename} als Argument schief geht. Daher hier ein
% Workaround f"ur das Problem.
%    \begin{macrocode}
  \begingroup\expandafter\expandafter\expandafter\endgroup
  \expandafter\ifx\csname date\languagename\endcsname\relax
    \ClassWarningNoLine{%
      scrlttr2%
    }{%
      \string\language\space is \the\language, \string\languagename\space is
      `\languagename'\MessageBreak
      but \expandafter\string\csname
      date\languagename\endcsname\space not defined!\MessageBreak
      This seems to be a bug at you're `hyphen.cfg'.\MessageBreak
      I'l undefine \string\languagename\space to avoid errors%
    }%
    \let\languagename=\undefined
  \fi
  \ifx\languagename\undefined
    \ClassWarningNoLine{scrlttr2}{\string\languagename\space not
      defined, using \string\language.\MessageBreak
      This may result in use of wrong language!\MessageBreak
      You should use a compatible language
      package\MessageBreak
      (e.g. `Babel', `german', `ngerman', ...)}
    \ifx\l@american\undefined\else\ifnum\language=\l@american
        \captionsamerican
        \dateamerican
    \fi\fi
    \ifx\l@british\undefined\else\ifnum\language=\l@british
        \captionsbritish
        \datebritish
    \fi\fi
    \ifx\l@UKenglish\undefined\else\ifnum\language=\l@UKenglish
        \captionsUKenglish
        \dateUKenglish
    \fi\fi
    \ifx\l@USenglish\undefined\else\ifnum\language=\l@USenglish
        \captionsUSenglish
        \dateUSenglish
    \fi\fi
    \ifx\l@austrian\undefined\else\ifnum\language=\l@austrian
        \captionsaustrian
        \dateaustrian
    \fi\fi
    \ifx\l@german\undefined\else\ifnum\language=\l@german
        \captionsgerman
        \dategerman
    \fi\fi
    \ifx\l@ngerman\undefined\else\ifnum\language=\l@ngerman
        \captionsngerman
        \datengerman
    \fi\fi
    \ifx\l@french\undefined\else\ifnum\language=\l@french
        \captionsfrench
        \datefrench
    \fi\fi
    \ifx\l@italian\undefined\else\ifnum\language=\l@italian
        \captionsitalian
        \dateitalian
    \fi\fi
    \ifx\l@spanish\undefined\else\ifnum\language=\l@spanish
        \captionsspanish
        \datespanish
    \fi\fi
    \ifx\l@croatian\undefined\else\ifnum\language=\l@croatian
        \captionscroatian
        \datecroatian
    \fi\fi
    \ifx\l@dutch\undefined\else\ifnum\language=\l@dutch
        \captionsdutch
        \datedutch
    \fi\fi
  \else
    \edef\@tempa{nohyphenation}
    \ifx\languagename\@tempa
      \ClassWarningNoLine{%
        scrlttr2%
        }{%
        You've selected language `\languagename'.\MessageBreak
        Maybe your LaTeX format contains Babel extension\MessageBreak
        but you have not selected a language using\MessageBreak
        Babel package.\MessageBreak
        Please select another language!\MessageBreak
        Only as a workaround english captions and date\MessageBreak
        will be used%
        }%
    \else
      \expandafter\selectlanguage\expandafter{\languagename}
      \ClassInfo{%
        scrlttr2%
        }{%
        used language is `\languagename'.\MessageBreak
        Supported languages are `english', `UKenglish',\MessageBreak
        `british', `american', `USenglish',\MessageBreak
        `german', `ngerman', `austrian',\MessageBreak
        `dutch', `italian', `spanish', `croatian'%
      }
    \fi
  \fi
  }
%</scrlettr>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
% \subsection{Erweiterung der Internationalisierung}
%
% Dergleichen gibt es bei Briefen nicht.
%    \begin{macrocode}
%<*!scrlettr>
%    \end{macrocode}
%
% \changes{v2.2c}{1995/05/25}{Anpassung an CJK von Werner Lemberg.}
%
% Die Standardnamen wie |\figurename| etc. sind nicht immer
% ausreichend, da manche Sprachen Z"ahlw"orter vor oder nach dem
% jeweiligen Z"ahler einf"ugen  m"ussen (man denke da sogar im
% Deutschen an "`Abbildung~1"' und "`Erste Abbildung"'). Desweiteren
% werden bei manchen Sprachen die Zwischenr"aume anders gesetzt
% bzw. sogar ganz unterdr"uckt. 
%
% Es gibt drei Ebenen, die man modifizieren kann, um verschiedenste
% Sprachen zu implementieren: Ebene~1 besteht aus den hinl"anglich
% bekannten Makros wie |\figurename| und alle weiteren Makros, die
% z.\,B. |german.sty| modifiziert. Desweiteren k"onnen die Makros
% |\sectfont| etc. etwaige zus"atzliche Fonts aktivieren. Ebene~2 ist
% die zus"atzliche Adaptierung von den Z"ahlern selbst (|\thesection|
% k"onnte z.B. chinesische Schriftzeichen ansprechen anstelle von
% arabischen Ziffern). Die allgemeinste Form der dritten Ebene
% besteht aus den Makros |\chaptermarkformat|, |\sectionmarkformat|,
% |\subsectionmarkformat|, |\partformat|, |\chapterformat|,
% |\figureformat|, |\tableformat| und |\captionformat|, welche die
% "Anderung der Reihenfolge von Z"ahler und Titel sowie die genaue
% Kontrolle der Zwischenr"aume etc. erm"oglichen.
%
% F"ur die g"angigen Sprachen k"onnen alle Makros f"ur die dritte
% Ebene identisch definiert werden. Bei Verwendung von "`exotischen"'
% Sprachen, aber auch speziellen Darstellungen in den g"angigen
% Sprachen k"onnen diese Makros umdefiniert werden.
%
% Das Konzept f"ur der Internationalisierung mit der dritten Ebene wurde
% urspr"unglich von Werner Lemberg\footnote{Werner Lemberg ist im InterNet
% unter \texttt{a7621gac@awiuni11.bitnet} zu erreichen.} entwickelt.
% Die "`caption files"' seines CJK-Pakets (\textbf{C}hinesisch,
% \textbf{J}apanisch, \textbf{K}oreanisch) bauen auf diesem Konzept auf.
% Damit ist \textsf{KOMA-Script} f"ur alle m"oglichen Sprachanpassungen
% bestens ger"ustet.
%
%  \begin{macro}{\if@altsecnumformat}
% \changes{v2.3c}{1995/08/06}{Einf"uhrung von
%                             \cs{if@altsecnumformat}}
%  \begin{macro}{\@altsecnumformattrue}
%  \begin{macro}{\@altsecnumformatfalse}
% Dieses Hilfsmakro wird f"ur die Umschaltung auf Duden-Regel~6 bei der
% Numerierung ben"otigt.
%  \begin{macro}{\if@autodot}
% \changes{v2.8e}{2001/07/10}{Neu}
%  \begin{macro}{\@autodottrue}
%  \begin{macro}{\@autodotfalse}
% Damit die Umschaltung auch wieder zur"uck auf Regel~5 automatisch
% erfolgen kann, wird ein zweiter Schalter ben"otigt.
%    \begin{macrocode}
\newif\if@altsecnumformat\@altsecnumformatfalse
\newif\if@autodot\@autodotfalse
%    \end{macrocode}
%  \begin{macro}{\@maybeautodot}
% \changes{v2.8e}{2001/07/10}{Neu}
% Ob der automatische Punkt aktiviert werden muss, wird aufgrund der
% Darstellung eines Z"ahlers entschieden. Diese wird dem Makro als
% Argument "ubergeben (|\thepart|, |\thechapter| etc.). Durch
% Verwendung einer Gruppe, werden alle Definitionen lokal gehalten.
%    \begin{macrocode}
\newcommand{\@maybeautodot}[1]{\if@autodot\else\begingroup%
  \expandafter\@@maybeautodot #1\@stop\endgroup\fi}
%    \end{macrocode}
%  \begin{macro}{\@@maybeautodot}
% \changes{v2.8e}{2001/07/10}{Neu}
% Die expandierte Darstellung wird dann auf Darstellungsbefehle f"ur
% Z"ahler gescannt.
%    \begin{macrocode}
\newcommand*{\@@maybeautodot}[1]{%
  \ifx #1\@stop\let\@@maybeautodot\relax%
  \else%
    \ifx #1\Alph \aftergroup\@autodottrue\fi%
    \ifx #1\alph \aftergroup\@autodottrue\fi%
    \ifx #1\Roman \aftergroup\@autodottrue\fi%
    \ifx #1\roman \aftergroup\@autodottrue\fi%
    \ifx #1\@Alph \aftergroup\@autodottrue\fi%
    \ifx #1\@alph \aftergroup\@autodottrue\fi%
    \ifx #1\@Roman \aftergroup\@autodottrue\fi%
    \ifx #1\@roman \aftergroup\@autodottrue\fi%
    \ifx #1\romannumeral \aftergroup\@autodottrue\fi%
  \fi%
  \@@maybeautodot}
%    \end{macrocode}
%  \begin{macro}{\scr@sect}
%  \begin{macro}{\@sect}
% Damit auch alle mit |startsection| definierten Gliederungsebenen bei
% der Entscheidung ber"ucksichtigt werden, muss ein internes Makro des
% \LaTeX-Kerns erweitert werden. F"ur die Ebenen |part| und |chapter|
% wird dies direkt in der Definition der Befehle erledigt. 
%    \begin{macrocode}
\let\scr@sect\@sect
\renewcommand*{\@sect}[1]{\stepcounter{#1}%
  \expandafter\@maybeautodot\csname the#1\endcsname%
  \addtocounter{#1}{-1}\scr@sect{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
% Dabei soll die Umstellung beim zweiten TeX-Lauf bereits am Anfang
% aktiv sein. Deshalb wird die Information am Ende in die aux-Datei
% geschrieben.
%    \begin{macrocode}
\AtEndDocument{%
  \if@autodot\if@filesw\write\@auxout{%
    \string\global\string\@altsecnumformattrue}
  \fi\fi}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\chaptermarkformat}
% \changes{v2.3a}{1995/07/08}{Leerraum nach der Kapitelnummer erh"oht.}
% \changes{v2.3c}{1995/08/06}{Duden Regel 6.}
% \changes{v2.8}{2001/06/15}{\cs{chapappifprefix} eingef"ugt}
% \changes{v2.8o}{2001/09/19}{\cs{chapappifchapterprefix} statt
%                             \cs{chapappifprefix}} 
%  \begin{macro}{\sectionmarkformat}
% \changes{v2.3a}{1995/07/08}{Leerraum nach der Kapitelnummer erh"oht.}
% \changes{v2.3c}{1995/08/06}{Duden Regel 6.}
%  \begin{macro}{\subsectionmarkformat}
% \changes{v2.3a}{1995/07/08}{Leerraum nach der Kapitelnummer erh"oht.}
% \changes{v2.3c}{1995/08/06}{Duden Regel 6.}
% Diese drei Makros werden f"ur die Markierungen innerhalb der pagestyles
% in |\chaptermark|, |\sectionmark| und |\subsectionmark| verwendet.
% Die drei Makros sind bewu"st unabh"angig voneinander definiert.
%  \begin{macro}{\autodot}
% \changes{v2.7}{2001/01/03}{Neues Makro \cs{autodot}.}
% \changes{v2.7}{2001/01/03}{Abstand von \cs{quad} auf \cs{enskip} 
%                            verringert.}
% Innerhalb der Makros wird ein Makro verwendet, das automatisch einen
% Punkt setzt, falls dies nach dem Duden als erforderlich angesehen
% wird.
%    \begin{macrocode}
\newcommand*\autodot{\if@altsecnumformat.\fi}
%<*scrreprt|scrbook>
\newcommand*\chaptermarkformat    {\chapappifchapterprefix{\ }%
                                   \thechapter\autodot\enskip}
\newcommand*\sectionmarkformat    {\thesection\autodot\enskip}
%</scrreprt|scrbook>
%<*scrartcl>
\newcommand*\sectionmarkformat    {\thesection\autodot\enskip}
\newcommand*\subsectionmarkformat {\thesubsection\autodot\enskip}
%</scrartcl>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\partformat}
% \changes{v2.3c}{1995/08/06}{Duden Regel 6.}
% \changes{v2.5f}{1999/02/14}{"Uberfl"ussiges Leerzeichen am Ende
%                             entfernt}
% \changes{v2.7h}{2001/04/22}{verlorenen Backslash in \cs{autodot}
%                             wieder eingef"ugt}
%  \begin{macro}{\chapterformat}
% \changes{v2.3c}{1995/08/06}{Duden Regel 6.}
% \changes{v2.7}{2000/01/03}{Einfaches Leerzeichen durch \cs{enskip}
%                            ersetzt.}
% \changes{v2.8}{2001/06/15}{\cs{chapappifprefix} eingef"ugt}
% \changes{v2.8o}{2001/09/19}{\cs{chapappifchapterprefix} statt
%                             \cs{chapappifprefix}} 
%  \begin{macro}{\chapappifprefix}
% \changes{v2.8}{2001/06/15}{Neu}
% \changes{v2.8o}{2001/09/19}{obsolet}
%  \begin{macro}{\chapappifchapterprefix}
% \changes{v2.8o}{2001/09/19}{Neu}
% \changes{v2.8o}{2001/09/19}{Argument ist nicht optional}
%  \begin{macro}{\chapapp}
% \changes{v2.8}{2001/06/15}{Neu}
%  \begin{macro}{\figureformat}
% \changes{v2.3c}{1995/08/06}{Duden Regel 6.}
%  \begin{macro}{\tableformat}
% \changes{v2.3c}{1995/08/06}{Duden Regel 6.}
%  \begin{macro}{\captionformat}
% \changes{v2.3c}{1995/08/06}{Duden Regel 6.}
% Diese f"unf Makros werden nun innerhalb der entsprechenden
% "Uberschriften, Unterschriften, Titel etc. verwendet.
%    \begin{macrocode}
\newcommand*{\partformat}{\partname~\thepart\autodot}
%<*scrreprt|scrbook>
\newcommand*{\chapterformat}{%
  \chapappifchapterprefix{\ }\thechapter\autodot\enskip}
%</scrreprt|scrbook>
\newcommand*{\figureformat}{\figurename~\thefigure%
%<!scrartcl>  \autodot%
  }
\newcommand*{\tableformat}{\tablename~\thetable%
%<!scrartcl>  \autodot%
}
\newcommand*{\captionformat}{:\ }
%    \end{macrocode}
% Das in |\chapterformat| verwendete Makro |\chapappifchapterprefix| setzt
% abh"angig von |\if@chapterprefix| noch das Makro |\chapapp| gefolgt
% vom obliatorischen Argument. |\chapapp| macht |\@chapapp| auf
% Anwenderebene verf"ugbar. Der Vorteil des neuen
% |\chapappifchapterprefix| gegen"uber dem alten |\chapappifprefix|
% ist, dass nun beim Umdefinieren von |\chapterformat| und
% |\chaptermarkformat| wieder |\renewcommand| verwendet werden kann
% und beim Umschalten in den Anhang die Kopfzeile korrekt ist, weil
% das Makro nun nicht mehr gesch"utzt ist, sondern direkt expandiert.
%    \begin{macrocode}
%<*scrbook|scrreprt>
\newcommand*{\chapappifprefix}[1][]{%
  \ClassWarning{%
%<scrbook>    scrbook%
%<scrreprt>    scrreprt%
  }{%
    Please don't use obsolete command
    \string\chapappifprefix.\MessageBreak
    The new command \string\chapappifchapterprefix\space has
    an\MessageBreak
    obligatory instead of an optional argument. Use that\MessageBreak
    new command%
  }%
  \if@chapterprefix\chapapp#1\fi}
\newcommand*{\chapappifchapterprefix}[1]{\if@chapterprefix\chapapp#1\fi}
\newcommand*{\chapapp}{\@chapapp}
%</scrbook|scrreprt>
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% Dieses Makro wird bei allen "Uberschriften mit |\@startsection|
% verwendet.
%  \begin{macro}{\@seccntformat}
% \changes{v2.3c}{1995/08/06}{CJK erweitert}
%  \begin{macro}{\othersectionlevelsformat}
% \changes{v2.7}{2000/01/03}{F"ur alle "ubrigen Gliederungsebenen
%                            ebenfalls ein Makro auf Anwenderebene
%                            eingef"uhrt.}
% \changes{v2.7}{2000/01/03}{\cs{quad} durch \cs{enskip} ersetzt.}
% \changes{v2.7i}{2001/05/17}{\cs{let} durch \cs{def} ersetzt}
% Wobei ein Hilfsmakro eingesetzt wird, das auf Anwenderseite umdefiniert
% werden kann.
%    \begin{macrocode}
\newcommand*{\othersectionlevelsformat}[1]{%
  \csname the#1\endcsname\autodot\enskip}
\renewcommand*{\@seccntformat}{\othersectionlevelsformat}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%    \begin{macrocode}
%</!scrlettr>
%    \end{macrocode}
%
%
% \subsection{Die Brief-Umgebung}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%  \begin{environment}{letter}
%   \changes{v2.8q}{2002/01/16}{optionales Argument hinzugef"ugt}
%   \changes{v2.8q}{2002/01/16}{Fu"snotenz"ahler wird zur"uckgesetzt}
%   \changes{v2.9d}{2002/08/12}{Fu"snotenz"ahler wird korrekt zur"uckgesetzt}
% Diese Umgebung ist etwas anders definiert, als normalerweise von
% \LaTeX gewohnt. Mit ihr k"onnen innerhalb eines Dokuments beliebig
% viele Briefe erzeugt werden. Eine der Abweichungen von der
% Standardklasse besteht darin, dass als optionales Argument Optionen
% gesetzt werden k"onnen.
%  \begin{macro}{\stopletter}
%  \begin{macro}{\@processto}
%  \begin{macro}{\@xproc}
% Die Adresse, die als Argument der Briefumgebung
% "ubergeben wird, muss in Name und Adresse zerlegt werden.
%    \begin{macrocode}
\newenvironment{letter}[2][]{%
%    \end{macrocode}
% Als erstes wird eine neue Seite begonnen. Dies kann ggf. auch eine
% neue rechte Seite sein. Danach werden alle relevanten Z"ahler
% und Strafpunkte zur"uckgesetzt und der obligatorische Parameter
% ausgewertet.
%    \begin{macrocode}
  \newpage
  \if@twoside\ifodd\c@page\else
      \thispagestyle{empty}\null\newpage\fi\fi
  \setcounter{page}{\@ne}%
  \setcounter{footnote}{0}%
  \interlinepenalty=200\@processto{#2}%
%    \end{macrocode}
% Dann werden ggf. die "ubergebenen Optionen ausgef"uhrt.
%    \begin{macrocode}
  \KOMAoptions{#1}%
%    \end{macrocode}
% Zum Schluss werden die per \cs{AtBeginLetter} angegeben Anweisungen
% ausgef"uhrt.
%    \begin{macrocode}
  \@beginletterhook
  }{%
  \stopletter\@@par\pagebreak\@@par%
  }
\newcommand*{\stopletter}{}
\newcommand{\@processto}[1]{%
  \expandafter\@xproc#1\\\@nil\ifkomavarempty{toaddress}{}{%
    \expandafter\@xproc#1\@nil}}
\newcommand*{\@xproc}{}
\long\def\@xproc#1\\#2\@nil{%
  \setkomavar{toname}{#1}\setkomavar{toaddress}{#2}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\fname@font}
%    \changes{v2.8q}{2002/01/28}{Neu}
% Die Schriftart, die f"ur den Absendername verwendet
% wird. Voreingestellt ist keine "Anderung.
%    \begin{macrocode}
\newcommand*{\fname@font}{}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\faddress@font}
%    \changes{v2.8q}{2002/01/28}{Neu}
% Die Schriftart, die f"ur den Absender verwendet wird. Voreingestellt
% ist keine "Anderung.
%    \begin{macrocode}
\newcommand*{\faddr@font}{}
%    \end{macrocode}
%  \end{macro}
%  \end{environment}
%
%  \begin{macro}{\AtBeginLetter}
% \changes{v2.8n}{2001/09/08}{Neu}
%  \begin{macro}{\@beginletterhook}
% \changes{v2.8n}{2001/09/08}{Neu}
% Wie oben zu sehen, wurde in den Anfang der Briefumgebung ein Haken
% eingef"ugt. Dieser wird auch tats"achlich intern genutzt. Er
% funktioniert prinzipiell wie der |\AtBeginDocument|-Haken. Zun"achst
% macht der Haken rein gar nichts.
%    \begin{macrocode}
\newcommand{\AtBeginLetter}{\g@addto@macro\@beginletterhook}
\newcommand{\@beginletterhook}{}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
% \subsection{Briefspezifische Feld-Variablen}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%
%  \begin{macro}{\newkomavar}
%    \changes{v2.8q}{2002/01/14}{Neu}
% Bei Briefen gibt es eine ganze Reihe von speziellen Variablen. An
% dieser Stelle sei als Beispiel nur das Feld "`Ihr Zeichen"`
% genannt. Es ist nahezu unm"oglich alle diese Felder
% vorherzusehen. Daher wurde in der neuen Briefklasse ein neuer
% Mechanismus zur Definition solcher Felder geschaffen. Es wird
% zwischen zwei Arten von Feldern unterschieden:
% \begin{itemize}
%   \item Felder f"ur die Gesch"aftszeile
%   \item Felder f"ur sonstige Verwendung
% \end{itemize}
% Felder k"onnen aber auch nachtr"aglich zur Gesch"aftszeile
% hinzugef"ugt werden. Die Sternvariante von \cs{newkomavar} f"uhrt
% dies jedoch automatisch durch.
%  \begin{macro}{\@newkomavar}
% Da mit einer Sternvariante gearbeitet wird, wird ein Hilfsmakro
% ben"otigt. Das Makro erh"alt ein optionales und
% ein obligatorisches Argument. Das optionale Argument ist dabei die
% Voreinstellung f"ur den \emph{Ausgabenamen} des Feldes, der
% ggf. ausgegeben werden soll. Das obligatorische Argument ist
% \emph{Name} des Feldes, "uber den das Feld angesprochen wird.
% Das Makro definiert zwei weitere Makros: \cs{\emph{scr@Name}@var} und
% \cs{scr@\emph{Name}@name}.
%    \begin{macrocode}
\newcommand*{\newkomavar}{%
  \@ifstar {\@tempswatrue\@newkomavar}{\@tempswafalse\@newkomavar}}
\newcommand*{\@newkomavar}[2][\relax]{%
  \@ifundefined{scr@#2@name}{%
    \@ifundefined{scr@#2@var}{%
      \begingroup
        \def\@tempa{#1}\def\@tempb{\relax}%
        \ifx\@tempa\@tempb\endgroup\else
        \endgroup\@namedef{scr@#2@name}{#1}%
      \fi%
      \expandafter\let\csname scr@#2@var\endcsname=\@empty
      \if@tempswa\addtoreffields{#2}\fi
      }{%
      \ClassError{%
        scrlttr2%
        }{%
        This should never happen%
        }{%
        The contents of the KOMA-Script variable `#2'\MessageBreak
        is undefined, but the name of the variable is
        defined.\MessageBreak
        This should never happen. So someone crashs me!%
        }
      }
    }{%
    \ClassError{%
      scrlttr2%
      }{%
      Variable `#2' already defined%
      }{%
      I'll ignore this command, if you'll continue.%
      }
    }
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\setkomavar}
%    \changes{v2.8q}{2002/01/14}{Neu}
% Nat"urlich wird auch ein Befehl ben"otigt, um die Feldvariablen
% zu setzen und ihnen ggf. einen neuen Namen f"ur die Ausgabe zu
% geben. Der \emph{Name} der Feldvariable wird als obligatorisches
% erstes Argument "ubergeben.
%  \begin{macro}{\@setkomavar}
%    \changes{v2.8q}{2002/01/14}{Neu}
% Da dann zwischen einer Sternvariante und einer normalen
% unterschieden werden soll wird ein Hilfsmakro ben"otigt.
%  \begin{macro}{\@setkomaname}
%    \changes{v2.8q}{2002/01/14}{Neu}
% Die Sternvariante definiert nur den Ausgabename neu.
%  \begin{macro}{\@@setkomavar}
%    \changes{v2.8q}{2002/01/14}{Neu}
% Da in der normalen Variante nach dem Stern ein optionales Argument
% folgen kann, wird mit einem weiteren Hilfsmakro gearbeitet. Der
% \emph{Ausgabename} wird dabei als optionales, zweites Argument
% "ubergeben. Der \emph{Inhalt} wird als obligatorisches, drittes
% Argument "ubergeben.
%    \begin{macrocode}
\newcommand*{\setkomavar}{%
  \@ifstar {\@setkomaname}{\@setkomavar}}
\newcommand*{\@setkomavar}[1]{%
  \@ifnextchar [%]
  {\@@setkomavar{#1}}{\@@setkomavar{#1}[\relax]}}
\newcommand*{\@setkomaname}[2]{%
  \@ifundefined{scr@#1@var}{%
    \@komavar@err{set}{#1}%
    }{%
    \@namedef{scr@#1@name}{#2}%
    }%
  }
\newcommand*{\@@setkomavar}{}
\long\def\@@setkomavar#1[#2]#3{%
  \@ifundefined{scr@#1@var}{%
    \@komavar@err{set}{#1}%
    }{%
    \@namedef{scr@#1@var}{#3}%
    \begingroup
      \def\@tempa{#2}\def\@tempb{\relax}%
      \ifx\@tempa\@tempb\endgroup\else
      \endgroup\@namedef{scr@#1@name}{#2}%
    \fi
    }
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\@komavar@err}
%    \changes{v2.8q}{2002/01/14}{Neu}
% Dieses Makro wird intern in den Makros \cs{setkomavar} und
% \cs{usekomavar} verwendet.
%    \begin{macrocode}
\newcommand*{\@komavar@err}[2]{%
  \ClassError{%
    scrlttr2%
    }{%
    KOMA-Script variable not defined%
    }{%
    You've tried to #1 the not defined KOMA-Script variable
    `#2'.\MessageBreak
    You have to define the variable using \string\newkomavar\space
    before\MessageBreak
    you do this.%
    }%
  }
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\usekomavar}
%    \changes{v2.8q}{2002/01/14}{Neu}
%    \changes{v2.9i}{2002/09/04}{robust}
% Selbstverst"andlich wird auch ein Makro ben"otigt, um auf den
% Inhalt oder den Ausgabename einer Variablen zugreifen zu
% k"onnen. Mit der normalen Variante wird dabei der Inhalt, mit der
% Sternvariante der Name ausgegeben.
%  \begin{macro}{\@usekomavar}
%    \changes{v2.8q}{2002/01/14}{Neu}
%    \changes{v2.9i}{2002/09/04}{optionales Argument}
%    \changes{v2.9j}{2002/09/18}{\cs{@firstofone} als Defaultargument
%      eingefügt}
%  \begin{macro}{\@usekomaname}
%    \changes{v2.8q}{2002/01/14}{Neu}
%    \changes{v2.9i}{2002/09/04}{optionales Argument}
%    \changes{v2.9j}{2002/09/18}{\cs{@firstofone} als Defaultargument
%      eingefügt}
% Da mir einer Sternvariante gearbeitet wird, werden zwei Hilfsmakros
% ben"otigt. 
%    \begin{macrocode}
\DeclareRobustCommand*{\usekomavar}{%
  \@ifstar {\@usekomaname}{\@usekomavar}}
\newcommand*{\@usekomavar}[2][\@firstofone]{%
  \@ifundefined{scr@#2@var}{%
    \@komavar@err{use}{#2}%
    }{%
    #1{\@nameuse{scr@#2@var}}%
    }%
  }
\newcommand*{\@usekomaname}[2][\@firstofone]{%
  \@ifundefined{scr@#2@var}{%
    \@komavar@err{use}{#2}%
    }{%
    #1{\@nameuse{scr@#2@name}}%
    }%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\ifkomavarempty}
%    \changes{v2.8q}{2002/01/14}{Neu}
%    \changes{v2.9i}{2002/09/04}{Leerzeichen rausgeworfen}
%    \changes{v2.9i}{2002/09/04}{robust}
% Es gibt auch noch ein Makro, um zu testen, ob eine KOMA-Script
% Variable oder deren Name leer ist. Die Sternvariante ist wieder f"ur
% den Namen zust"andig.
%  \begin{macro}{\if@komavarempty}
%    \changes{v2.8q}{2002/01/14}{Neu}
% Da mit einer Sternvariante gearbeitet wird, wird wieder ein
% Hilfsmakro verwendet.
%    \begin{macrocode}
\DeclareRobustCommand*{\ifkomavarempty}{%
  \begingroup
  \@ifstar {\@tempswatrue\@ifkomavarempty}%
           {\@tempswafalse\@ifkomavarempty}%
  }
\newcommand{\@ifkomavarempty}[3]{%
  \@ifundefined{scr@#1@var}{%
    \endgroup\@komavar@err{use}{#1}%
    }{%
    \if@tempswa\endgroup
      \@ifundefined{scr@#1@name}{#2}{%
        \expandafter\ifx\csname scr@#1@name\endcsname\@empty
          #2%
        \else
          #3%
        \fi
        }%
    \else\endgroup
      \expandafter\ifx\csname scr@#1@var\endcsname\@empty
        #2%
      \else
        #3%
      \fi
    \fi
    }%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%
%  \begin{KOMAvar}{signature}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{place}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{location}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{backaddress}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{specialmail}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{title}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{fromlogo}
%    \changes{v2.8q}{2002/01/28}{Neu}
% Zun"achst besitzt die Briefklasse einige Variablen, die von Haus aus
% nicht "uber einen Ausgabenamen verf"ugen, weil sie "ublicherweise
% ohne Ausgabe einer Bezeichung verwendet werden. Diese Variablen
% haben teilweise auch keinen vordefinierten Inhalt. Der Inhalt
% muss erst vom Anwender gesetzt werden. Teilweise gibt es aber auch
% einen vordefinierten Inhalt, der von anderen Variablen abh"angt.
%    \begin{macrocode}
\newkomavar{signature}
\setkomavar{signature}{\usekomavar{fromname}}
\newkomavar{place}
\newkomavar{location}
\newkomavar{backaddress}
\setkomavar{backaddress}{%
  \ifkomavarempty{fromname}{}{%
    \strut\ignorespaces\usekomavar{fromname}%
    \ifkomavarempty{fromaddress}{}{\\}}%
  \ifkomavarempty{fromaddress}{}{%
    \strut\ignorespaces\usekomavar{fromaddress}}%
  }
\newkomavar{specialmail}
\newkomavar{title}
\newkomavar{fromlogo}
%    \end{macrocode}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%
%  \begin{KOMAvar}{placeseparator}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{subjectseparator}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{ccseparator}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{enclseparator}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{backaddressseparator}
%    \changes{v2.8q}{2002/01/22}{Neu}
%  \begin{KOMAvar}{phoneseparator}
%    \changes{v2.8q}{2002/03/25}{Neu}
%  \begin{KOMAvar}{faxseparator}
%    \changes{v2.8q}{2002/03/25}{Neu}
%  \begin{KOMAvar}{emailseparator}
%    \changes{v2.8q}{2002/03/25}{Neu}
%  \begin{KOMAvar}{urlseparator}
%    \changes{v2.8q}{2002/03/25}{Neu}
% Daneben gibt es einige Trennzeichen. Diese haben ggf. als
% Ausgabenamen das Feld, f"ur das sie als Trennzeichen dienen. Die
% Trennzeichen sind vordefiniert.
%    \begin{macrocode}
\newkomavar[\usekomavar{place}]{placeseparator}
\setkomavar{placeseparator}{,~}
\newkomavar[\subjectname]{subjectseparator}
\setkomavar{subjectseparator}{: }
\newkomavar[\ccname]{ccseparator}
\setkomavar{ccseparator}{: }
\newkomavar[\enclname]{enclseparator}
\setkomavar{enclseparator}{: }
\newkomavar{backaddressseparator}
\setkomavar{backaddressseparator}{,~}
\newkomavar[\phonename]{phoneseparator}
\setkomavar{phoneseparator}{:~}
\newkomavar[\faxname]{faxseparator}
\setkomavar{faxseparator}{:~}
\newkomavar[\emailname]{emailseparator}
\setkomavar{emailseparator}{:~}
\newkomavar[\wwwname]{urlseparator}
\setkomavar{urlseparator}{:~}
%    \end{macrocode}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar} 
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%
%  \begin{KOMAvar}{fromname}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{fromaddress}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{fromemail}
%    \changes{v2.8q}{2002/01/28}{Neu}
%  \begin{KOMAvar}{fromurl}
%    \changes{v2.8q}{2002/01/28}{Neu}
%  \begin{KOMAvar}{frombank}
%    \changes{v2.8q}{2002/01/28}{Neu}
%  \begin{KOMAvar}{toname}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{toaddress}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{fromphone}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{fromfax}
%    \changes{v2.8q}{2002/01/28}{Neu}
%  \begin{KOMAvar}{yourmail}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{yourref}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{myref}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{customer}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{invoice}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{subject}
%    \changes{v2.8q}{2002/01/16}{Neu}
%  \begin{KOMAvar}{date}
%    \changes{v2.8q}{2002/01/16}{Neu}
% Desweiteren gibt es einige Variable, die auch einen Ausgabenamen
% haben, weil dieser "ublicherweise vorangestellt wird. Eine
% Besonderheit stellt dabei \texttt{subject} dar. Der Ausgabename
% beinhaltet dabei n"amlich auch die Trennzeichen, die hinter dem
% Namen "ublicherweise stehen. Diese sind wiederum ein Variable, deren
% Name der Ausgabename des Feldes ist. Will man also nur den Namen
% aber nicht die Trennzeichen "andern, so "andert man statt dem Namen
% von \texttt{subject} den Namen von \texttt{subjectseparator}.
% "Ahnlich ist es mit \texttt{toaddress} und
% \texttt{fromaddress}. Dort ist der Wert von \texttt{toname}
% bzw. \texttt{fromname} der Ausgabename. Bei \texttt{toaddress} und
% \texttt{fromaddress} wird davon jedoch intern kein Gebrauch
% gemacht. Die Variable \texttt{date} wird bereits so vordefiniert,
% dass auch weiterhin \cs{date} funktioniert.
%    \begin{macrocode}
\newkomavar[\headfromname]{fromname}
\newkomavar[\usekomavar{fromname}]{fromaddress}
\newkomavar[\headtoname]{toname}
\newkomavar[\usekomavar{toname}]{toaddress}
\newkomavar[\usekomavar*{phoneseparator}%
  \usekomavar{phoneseparator}]{fromphone}
\newkomavar[\usekomavar*{faxseparator}%
  \usekomavar{faxseparator}]{fromfax}
\newkomavar[\usekomavar*{emailseparator}%
  \usekomavar{emailseparator}]{fromemail}
\newkomavar[\usekomavar*{urlseparator}%
  \usekomavar{urlseparator}]{fromurl}
\newkomavar[\bankname]{frombank}
\newkomavar[\yourrefname]{yourref}
\newkomavar[\yourmailname]{yourmail}
\newkomavar[\myrefname]{myref}
\newkomavar[\customername]{customer}
\newkomavar[\invoicename]{invoice}
\newkomavar[\usekomavar*{subjectseparator}%
  \usekomavar{subjectseparator}]{subject}
\newkomavar[\datename]{date}
\setkomavar{date}{\@date}
%    \end{macrocode}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%  \end{KOMAvar}
%
%  \begin{macro}{\firsthead}
%    \changes{v2.8q}{2002/01/28}{\cs{@alignfrom} auf 10000 gesetzt}
%  \begin{macro}{\firstfoot}
%  \begin{macro}{\nexthead}
%  \begin{macro}{\nextfoot}
% Bei der Gelegenheit werden auch gleich die Befehle zum Setzen
% der Felder f"ur die Kopf- und Fu"szeilen der ersten und aller
% weiterer Seiten eines Briefes definiert.
%    \begin{macrocode}
\newcommand{\firsthead}[1]{%
  \renewcommand*{\@alignfrom}{10000}%
  \renewcommand*{\@firsthead}{\noindent#1}%
  }
\newcommand{\firstfoot}[1]{%
  \renewcommand*{\@firstfoot}{\noindent#1}%
  }
\newcommand{\nexthead}[1]{%
  \renewcommand*{\@nexthead}{\noindent#1}%
  }
\newcommand{\nextfoot}[1]{%
  \renewcommand*{\@nextfoot}{\noindent#1}%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
%
% \subsection{Briefspezifische Schalter und Befehle f"ur Faltmarken,
%             Adressfeld und Titel}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%
%  \begin{macro}{\foldmarkson}
%  \begin{macro}{\foldmarksoff}
% Diese Befehle dienen nur der Kompatibilit"at mit der alten
% \texttt{scrlettr.cls}.
%    \begin{macrocode}
\newcommand*{\foldmarkson}{%
  \@ObsoleteCommand{\foldmarkson}{foldmarks=on}}
\newcommand*{\foldmarksoff}{%
  \@ObsoleteCommand{\foldmarksoff}{foldmarks=off}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\addrfieldon}
%  \begin{macro}{\addrfieldoff}
% Diese Befehle dienen nur der Kompatibilit"at mit der alten
% \texttt{scrlettr.cls}.
%    \begin{macrocode}
\newcommand*{\addrfieldon}{%
  \@ObsoleteCommand{\addrfieldon}{addrfield=on}}
\newcommand*{\addrfieldoff}{%
  \@ObsoleteCommand{\addrfieldoff}{addrfield=off}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\subjecton}
%  \begin{macro}{\subjectoff}
% Diese Befehle dienen nur der Kompatibilit"at mit der alten
% \texttt{scrlettr.cls}.
%    \begin{macrocode}
\newcommand*{\subjecton}{%
  \@ObsoleteCommand{\subjecton}{subject=titled}}
\newcommand*{\subjectoff}{%
  \@ObsoleteCommand{\subjectoff}{subject=untitled}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\subjectafteron}
%  \begin{macro}{\subjectafteroff}
% \changes{v2.4a}{1997/06/06}{Neue Befehle \cs{subjectafteron} und
%                             \cs{subjectafteroff}.}
% Diese Befehle dienen nur der Kompatibilit"at mit der alten
% \texttt{scrlettr.cls}.
%    \begin{macrocode}
\newcommand*{\subjectafteron}{%
  \@ObsoleteCommand{\subjectafteron}{subject=afteropening}}
\newcommand*{\subjectafteroff}{%
  \@ObsoleteCommand{\subjectafteroff}{subject=beforeopening}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
%
% \subsection{Briefspezifische L"angen}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
% Zu Berechnung der Feldpositionen werden verschiedene
% Dimensions-Variablen ben"otigt. Um jedoch nicht unn"otig viele
% L"angenregister zu verbrauchen, wird hier mit einer
% Pseudo-L"angen-Arithmetik gearbeitet.
%
%  \begin{macro}{\@newplength}
% \changes{v2.8q}{2001/10/06}{Neu}
% \changes{v2.8q}{2001/10/06}{Kompatibilit"at zu \texttt{scrlettr.cls}
%                             aufgegeben} 
% Dieses Makro definiert eine neue Pseude-L"ange und setzt sie auf den
% Wert 0. Eine Pseudo-L"ange ist ein Makro, das eine L"ange enth"alt.
%    \begin{macrocode}
\newcommand*{\@newplength}[1]{%
  \@ifundefined{ltr@len@#1}{%
    \expandafter\let\csname ltr@len@#1\endcsname=\z@%
    }{%
    \ClassError{scrlttr2}{%
      pseudo-length \expandafter\string\csname ltr@len@#1\endcsname
      already defined%
      }{%
      You tried to define a new pseudo-length using
      \string\@newplength\MessageBreak
      which is already defined. Try another name or
      better\MessageBreak
      Don't use this KOMA-Script internal macro}
    }
  }
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\useplength}
% \changes{v2.8q}{2001/10/06}{Neu}
% Nat"urlich muss auf eine solche Pseudo-L"ange auch wieder lesend
% zugeriffen werden k"onnen. Wir definieren dies hier so, dass es
% au"serdem m"oglich ist, ein Vorzeichen zu verwenden. Ein Faktor ist
% allerdings nicht m"oglich.
%    \begin{macrocode}
\newcommand*{\useplength}[1]{%
  \expandafter\number\expandafter\csname ltr@len@#1\endcsname}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\setlengthtoplength}
% \changes{v2.8q}{2001/10/06}{Neu}
% Eine echte L"ange soll auf das Vielfache einer Pseudo-L"ange gesetzt
% werden. Dabei wird der Faktor als optionaler Parameter "ubergeben.
% Der erste obligatorische Parameter ist die L"ange, der zweite
% obligatorische Parameter ist die Pseudo-L"ange.
%    \begin{macrocode}
\newcommand*{\setlengthtoplength}[3][]{%
  \setlength{#2}{\useplength{#3}}%
  \setlength{#2}{#1#2}}
%    \end{macrocode}
%
%  \begin{macro}{\@setplength}
% \changes{v2.8q}{2001/10/06}{Neu}
% Nat"urlich wird ebenfalls eine M"oglichkeit ben"otigt, einer
% Pseudo-L"ange einen Wert zuzuweisen. Dies geschieht unter lokaler
% Anwendung einer L"ange, damit sichergestellt ist, dass eine
% L"angenangabe "ubergeben wird. Dabei wird das zuvor definierte Makro
% \cs{setlengthtoplength} verwendet.
%    \begin{macrocode}
\newcommand*{\@setplength}[3][]{%
  \begingroup%
    \setlength{\@tempskipa}{#3}%
    \setlength{\@tempskipa}{#1\@tempskipa}%
    \edef\@tempa{\noexpand\endgroup%
      \noexpand\expandafter\noexpand\renewcommand\noexpand\expandafter*%
      \noexpand\csname ltr@len@#2\noexpand\endcsname{\the\@tempskipa}%
      }%
    \@tempa%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\addtolengthplength}
% \changes{v2.8q}{2001/10/06}{Neu}
% Wenn wir schon dabei sind, soll statt dem Setzen auch das Addieren
% funktionieren. Hier ist die Erschwernis, dass der Faktor nur f"ur
% die Pseudo-L"ange und nicht f"ur das Endergebnis gelten soll.
%    \begin{macrocode}
\newcommand*{\addtolengthplength}[3][]{%
  \begingroup%
    \setlengthtoplength[{#1}]{\@tempskipa}{#3}%
    \edef\@tempa{\endgroup%
      \noexpand\addtolength{#2}{\the\@tempskipa}}%
    \@tempa%
  }
%    \end{macrocode}
%
%  \begin{macro}{\@addtoplength}
% \changes{v2.8q}{2001/10/06}{Neu}
% Ebenso wird ein Makro ben"otigt, mit dem zu einer Pseudo-L"ange das
% Vielfache eines Wertes addiert werden kann.
%    \begin{macrocode}
\newcommand*{\@addtoplength}[3][]{%
  \begingroup%
    \setlength{\@tempskipa}{#3}%
    \setlength{\@tempskipa}{#1\@tempskipa}%
    \addtolengthplength{\@tempskipa}{#2}%
    \edef\@tempa{\noexpand\endgroup%
      \noexpand\expandafter\noexpand\renewcommand\noexpand\expandafter*%
      \noexpand\csname ltr@len@#2\noexpand\endcsname{\the\@tempskipa}%
      }%
    \@tempa%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\ltr@len@foldmarkhpos}
% \changes{v2.8q}{2001/10/06}{Neu}
% Abstand der Faltmarken von der linken Papierkante.
%    \begin{macrocode}
\@newplength{foldmarkhpos}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ltr@len@tfoldmarkvpos}
% \changes{v2.8q}{2001/10/06}{Neu}
%  \begin{macro}{\ltr@len@bfoldmarkvpos}
% \changes{v2.8q}{2001/10/06}{Neu}
% Abstand der oberen und unteren Faltmarken von der oberen Papierkante.
%    \begin{macrocode}
\@newplength{tfoldmarkvpos}
\@newplength{bfoldmarkvpos}
%    \end{macrocode}
%   \end{macro}
%   \end{macro}
%  \begin{macro}{\ltr@len@toaddrvpos}
% \changes{v2.8q}{2001/10/06}{Neu}
% Abstand des Adressfensters von der oberen Papierkante.
%    \begin{macrocode}
\@newplength{toaddrvpos}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@backaddrheight}
% \changes{v2.8q}{2001/10/06}{Neu}
% H"ohe der R"ucksendeadresse.
%    \begin{macrocode}
\@newplength{backaddrheight}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@toaddrhpos}
% \changes{v2.8q}{2001/10/06}{Neu}
% Abstand des Adressfeldes von der linken Papierkante bzw. wenn
% negativ von der rechten Papierkante.
%    \begin{macrocode}
\@newplength{toaddrhpos}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@specialmailindent}
%    \changes{v2.8q}{2002/03/25}{Neu}
% Abstand der Versandtart vom linken Rand des Adressfensters.
%    \begin{macrocode}
\@newplength{specialmailindent}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ltr@len@specialmailrightindent}
%    \changes{v2.8q}{2002/03/25}{Neu}
% Abstand der Versandtart vom rechten Rand des Adressfensters.
%    \begin{macrocode}
\@newplength{specialmailrightindent}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ltr@len@toaddrindent}
% \changes{v2.8q}{2001/10/06}{Neu}
% Abstand der Adresse vom linken Rand des Adressfensters.
%    \begin{macrocode}
\@newplength{toaddrindent}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@toaddrwidth}
% \changes{v2.8q}{2001/10/06}{Neu}
% Breite des Adressfensters
%    \begin{macrocode}
\@newplength{toaddrwidth}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@toaddrheight}
% \changes{v2.8q}{2001/10/06}{Neu}
% H"ohe des Adressfensters ohne R"ucksendeadresse
%    \begin{macrocode}
\@newplength{toaddrheight}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@locwidth}
% \changes{v2.8q}{2001/10/06}{Neu}
% Breite des Feldes neben dem Adressfenster
%    \begin{macrocode}
\@newplength{locwidth}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@refvpos}
% \changes{v2.8q}{2001/10/06}{Neu}
% Abstand der Gesch"aftszeile von der Papieroberkante.
%    \begin{macrocode}
\@newplength{refvpos}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@refwidth}
% \changes{v2.8q}{2001/10/06}{Neu}
% Breite der Gesch"aftszeile.
%    \begin{macrocode}
\@newplength{refwidth}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@refaftervskip}
% \changes{v2.8q}{2001/10/09}{Neu}
% Abstand nach der Gesch"aftszeile.
%    \begin{macrocode}
\@newplength{refaftervskip}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ltr@len@sigbeforevskip}
% \changes{v2.8q}{2001/10/09}{Neu}
% Raum f"ur die Unterschrift.
%    \begin{macrocode}
\@newplength{sigbeforevskip}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ltr@len@sigindent}
% \changes{v2.8q}{2001/10/06}{Neu}
% Horizontaler Einzug des Schlussgru"ses und der Signatur.
%    \begin{macrocode}
\@newplength{sigindent}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@@firstfootvpos}
% \changes{v2.8q}{2001/10/06}{Neu}
% Abstand des Fu"ses der ersten Seite von der Papieroberkante.
%    \begin{macrocode}
\@newplength{firstfootvpos}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@firstfootwidth}
% \changes{v2.8q}{2001/10/06}{Neu}
% Breite des Fu"ses der ersten Seite.
%    \begin{macrocode}
\@newplength{firstfootwidth}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\set@ltr@len@firstheadvspos}
% \changes{v2.8q}{2001/10/06}{Neu}
% Abstand des Kopfes der ersten Seite von der Papoeroberkante.
%    \begin{macrocode}
\@newplength{firstheadvpos}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ltr@len@firstheadwidth}
% \changes{v2.8q}{2001/10/06}{Neu}
% Breite des Kopfes der ersten Seite.
%    \begin{macrocode}
\@newplength{firstheadwidth}
%    \end{macrocode}
%   \end{macro}
%  \begin{macro}{\ltr@len@fromrulewidth}
%    \changes{v2.8q}{2002/01/28}{Neu}
% Die L"ange einer eventuell gesetzten Linie im Absender. Negative
% Werte bedeuten, dass die L"ange automtaisch bestimmt wird.
\@newplength{fromrulewidth}
\@setplength{fromrulewidth}{0pt}
%  \end{macro}
%
% F"ur alle Positionen gibt es Standardwerte. Diese Stellen sind leider
% extrem druckerabh"angig. Es ist daher "au"serst wichtig, da"s der
% Druckertreiber richtig eingestellt wird. Dazu kann die Testseite aus
% dem Standardpaket verwendet werden.
%
% Wichtig: Ab Version 2.8n sind alle vertikalen Abst"ande relativ zum
% oberen Papierrand. Au"serdem gibt es zwei Varianten, eine
% ausgewogene und eine, bei der mehr Platz f"ur den Brieftext der
% ersten Seite bleibt.
%
%  \begin{macro}{\LoadLetterOption}
% \changes{v2.8q}{2001/10/08}{Neu}
% Bei der neuen Briefklasse existiert eine Anweisung, mit der eine
% \emph{\textbf{l}etter-\texttt{c}lass-\texttt{o}ption}-Datei geladen
% werden kann. Das Laden wird mit entsprechender Information in der
% \texttt{log}-Datei vermerkt. Damit in der Datei interne Makros
% verwendet werden k"onnen, mu"s der catcode von "`@"' entsprechend
% gesetzt sein. Damit der Befehl sowohl in der Pr"aambel als auch in
% weiteren Optionen-Dateien oder in der Klasse selbst verwendet werden
% kann, muss der catcode am Ende wieder restauriert werden. Dabei muss
% etwas trickreich gearbeitet werden, damit tats"achlich eine
% Schachtelung m"oglich ist. So erfolgt die Umschaltung des catcodes
% immer nur beim ersten Aufruf innerhalb einer Schachtel.
%    \begin{macrocode}
\newcommand*{\LoadLetterOption}[1]{%
  \@ifundefined{@restore@catcode@level}
    {\let\@restore@catcode@level=\z@}{}
  \ifnum\@restore@catcode@level =\z@
    \ifnum\catcode`\@=11
      \let\@restore@catcode\relax
    \else
      \@tempcnta=\catcode`\@
      \edef\@restore@catcode{%
        \noexpand\catcode`\noexpand\@=\the\@tempcnta}%
      \makeatletter
    \fi
  \fi
  \@tempcnta=\@restore@catcode@level\relax
  \advance\@tempcnta by \@ne\relax
  \edef\@restore@catcode@level{\the\@tempcnta}
  \InputIfFileExists{#1.lco}{%
    \ClassInfo{%
      scrlttr2%
      }{Letter-Class-Option `#1' loaded}
    }{%
    \ClassError{%
      scrlttr2%
      }{%
      Letter-Class-Option file `#1.lco' not found%
      }{%
      You've told me to load the Letter-Class-Option `#1'. So I have
      to load\MessageBreak
      the file `#1.lco'. But the file isn't available.}
    }
  \@tempcnta=\@restore@catcode@level\relax
  \advance\@tempcnta by \m@ne\relax
  \edef\@restore@catcode@level{\the\@tempcnta}
  \ifnum\@tempcnta =\z@
    \@restore@catcode
  \fi
  }
%    \end{macrocode} 
%  \end{macro}
%
%  \begin{macro}{\LetterOptionNeedsPapersize}
% \changes{v2.8q}{2001/10/17}{Neu}
% Es besteht die M"oglichkeit, in \texttt{lco}-Dateien eine bestimmte
% Papiergr"o"se zu fordern. Dazu wird der Name der \texttt{lco}-Datei
% und die geforderte Papiergr"ose als Parameter "ubergeben. Stimmt die
% Papiergr"o"se nicht "uberein, so wird bei \cs{opening} eine Warnung
% ausgegeben.
%  \begin{macro}{\@PapersizeWarning}
%    \changes{v2.8q}{2002/03/25}{Neu (intern)}
%  \begin{macro}{\@@PapersizeWarning}
%    \changes{v2.8q}{2002/03/25}{Neu (intern)}
%  \begin{macro}{\LOPNP@size}
%    \changes{v2.8q}{2002/03/25}{Neu (intern)}
%  \begin{macro}{\LOPNP@option}
%    \changes{v2.8q}{2002/03/25}{Neu (intern)}
% Zur einfacheren Realisierung wird mit vier internen Hilfsmakros
% gearbeitet.
%    \begin{macrocode}
\newcommand*{\LOPNP@option}{}
\newcommand*{\LOPNP@size}{}
\newcommand*{\@PapersizeWarning}{
  \begingroup%
    \edef\@tempc{\noexpand\@tempswatrue
      \noexpand\ifdim\paperwidth=\the\paperwidth\noexpand\else
      \noexpand\@tempswafalse\noexpand\fi
      \noexpand\ifdim\paperheight=\the\paperheight\noexpand\else
      \noexpand\@tempswafalse\noexpand\fi
      \noexpand\@@PapersizeWarning
      }  
    \def\@tempb{letter}\ifx\LOPNP@size\@tempb%
      \setlength{\paperheight}{11in}\setlength{\paperwidth}{8.5in}%
    \else\def\@tempb{legal}\ifx\LOPNP@size\@tempb%
      \setlength{\paperheight}{14in}\setlength{\paperwidth}{8.5in}%
    \else\def\@tempb{executive}\ifx\LOPNP@size\@tempb%
      \setlength{\paperheight}{10.5in}\setlength{\paperwidth}{7.25in}%
    \else%
      \def\ta@opt@err{%
        \ClassError{%
          scrlttr2%
          }{papersize `\LOPNP@size' undefined}{%
          You've told me to check for paper size
          `\LOPNP@size'\MessageBreak
          at letter option file `\LOPNP@option.lco',\MessageBreak
          but this paper size is not supported.\MessageBreak
          See the KOMA-Script manual for informations about known
          paper sizes.}%
        }
      \let\@headlines\ta@opt@err%
      \expandafter\x@@paper\LOPNP@size paperpaper\x@@paper%
    \fi\fi\fi
    \@tempc
  \endgroup%
}
\newcommand*{\@@PapersizeWarning}{%
  \if@tempswa\else%
  \ClassWarningNoLine{%
    scrlttr2%
    }{%
    Letter option file `\LOPNP@option.lco'\MessageBreak
    needs paper size `\LOPNP@size'.\MessageBreak
    Current paper size is not `\LOPNP@size'!\MessageBreak
    You should add `paper=\LOPNP@size' at the\MessageBreak
    option list of \string\documentclass!\MessageBreak
    Maybe you know what you are doing,\MessageBreak
    so I do not change this myself}
  \fi
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%    \begin{macrocode}
\newcommand*{\LetterOptionNeedsPapersize}[2]{%
  \edef\LOPNP@size{#2}\edef\LOPNP@option{#1}%
  }
%    \end{macrocode}
%  \end{macro}
%
% Als Voreinstellung wird schoneinmal die Datei \texttt{DIN.lco}
% geladen.
%    \begin{macrocode}
\LoadLetterOption{DIN}
%    \end{macrocode}
%
% Der Inhalt dieser Dateien folgt. Es handelt sich im Wesentlichen um
% das Setzen der Pseudo-L"angen. In einigen F"allen werden aber auch
% zus"atzlich Befehle (um)definiert.
%    \begin{macrocode}
%</scrlettr>
%</class>
%<*lco>
%    \end{macrocode}
%
% Die Maße f"ur einige Optionen wurden nicht von mir selbst
% recherchiert:
% \begin{center}
%   \begin{tabular}{ll}
%   \texttt{lco}-Datei & Recherchiert von \\\hline\\[-1.6ex]
%   DIN                & mir \\
%   DINmtext           & mir \\
%   KOMAold            & mir \\
%   SNleft             & Roger Luethi \\
%   SN                 & Roger Luethi \\
%   \end{tabular}{ll}
% \end{center}
%
% Zun"achst wird gepr"uft, ob "uberhaupt die richtige Klasse geladen
% ist.
%    \begin{macrocode}
\@ifclassloaded{scrlttr2}{}{%
  \GenericWarning{(%
%<DIN>  DIN%
%<DINmoretext> DINmtext%
%<SN>  SN%
%<SNold>  SNold%
%<SwissLeft>  SNleft%
%<KOMAold>  KOMAold%
  .lco)\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces}{%
  Letter-class-option
%<DIN>  DIN
%<DINmoretext> DINmtext
%<SN>  SN
%<SNold>  SNold
%<SwissLeft>  SNleft
%<KOMAold>  KOMAold
  Warning:\space
  This letter class option file was made only\MessageBreak
  to be used with KOMA-Script letter class\MessageBreak
  `scrlttr2'. Use with other classes may result\MessageBreak
  in a lot of errors\@gobble
  }
}
%    \end{macrocode}
%
% Dann wird gepr"uft, ob das richtige Papierformat vorhanden ist.
%    \begin{macrocode}
%<*DIN|DINmoretext|SN|SNold|SwissLeft|KOMAold>
\LetterOptionNeedsPapersize{%
%<DIN>  DIN%
%<DINmoretext>  DINmtext%
%<SN>  SN%
%<SNold>  SNold%
%<SwissLeft>  SNleft%
%<KOMAold>  KOMAold%
  }
  {a4}
%</DIN|DINmoretext|SN|SNold|SwissLeft|KOMAold>
%    \end{macrocode}
%
% Dann werden die Werte gesetzt.
%    \begin{macrocode}
\@setplength{foldmarkhpos}{3.5mm}
%<DIN|SwissLeft|SN>\@setplength{tfoldmarkvpos}{105mm}
%<DINmoretext>\@setplength{tfoldmarkvpos}{87mm}
%<KOMAold>\@setplength{tfoldmarkvpos}{103.5mm}
%<DIN|SwissLeft|SN>\@setplength{bfoldmarkvpos}{210mm}
%<DINmoretext>\@setplength{bfoldmarkvpos}{192mm}
%<KOMAold>\@setplength{bfoldmarkvpos}{202.5mm}
%<DIN|SN>\@setplength{toaddrvpos}{45mm}
%<DINmoretext>\@setplength{toaddrvpos}{27mm}
%<SwissLeft>\@setplength{toaddrvpos}{35.5mm}
%<KOMAold>\@setplength{toaddrvpos}{49mm}
%<DIN|SN>\@setplength{refvpos}{98.5mm}
%<DINmoretext>\@setplength{refvpos}{80.5mm}
%<SwissLeft>\@setplength{refvpos}{89mm}
%<KOMAold>\@setplength{refvpos}{89.5mm}
%<!KOMAold>\@setplength{refaftervskip}{\baselineskip}
%<KOMAold>\@setplength[2]{refaftervskip}{\baselineskip}
%<DIN|DINmoretext|SwissLeft>\@setplength{toaddrhpos}{20mm}
%<SN>\@setplength{toaddrhpos}{-8mm}
%<KOMAold>\@setplength{toaddrhpos}{1in}
%<KOMAold>\@addtoplength{toaddrhpos}{\oddsidemargin}
%<DIN|DINmoretext>\@setplength{toaddrwidth}{85mm}
%<SN>\@setplength{toaddrwidth}{90mm}
%<SwissLeft>\@setplength{toaddrwidth}{100mm}
%<KOMAold>\@setplength{toaddrwidth}{70mm}
%<DIN|DINmoretext|SN|SwissLeft|KOMAold>\@setplength{toaddrheight}{40mm}
\@setplength{toaddrindent}{\z@}
\@setplength{specialmailindent}{\fill}
\@setplength{specialmailrightindent}{1em}
\@setplength{locwidth}{\z@}
%<DIN|DINmoretext|SN|SwissLeft|KOMAold>\@setplength{backaddrheight}{5mm}
%<DIN|DINmoretext|SN|SwissLeft>\@setplength{firstheadvpos}{8mm}
%<KOMAold>\@setplength{firstheadvpos}{6mm}
%<KOMAold>\@setplength{firstheadwidth}{\textwidth}
%<*!KOMAold>
\@setplength{firstheadwidth}{\paperwidth}
\ifdim \useplength{toaddrhpos}>\z@
  \@addtoplength[-2]{firstheadwidth}{\useplength{toaddrhpos}}
\else
  \@addtoplength[2]{firstheadwidth}{\useplength{toaddrhpos}}
\fi
%</!KOMAold>
\@setplength{firstfootwidth}{\useplength{firstheadwidth}}
%<KOMAold>\@setplength{firstfootvpos}{\paperheight}
%<KOMAold>\@addtoplength{firstfootvpos}{-2cm}
%<!KOMAold>\@setplength{firstfootvpos}{1in}
%<!KOMAold>\@addtoplength{firstfootvpos}{\topmargin}
%<!KOMAold>\@addtoplength{firstfootvpos}{\headheight}
%<!KOMAold>\@addtoplength{firstfootvpos}{\headsep}
%<!KOMAold>\@addtoplength{firstfootvpos}{\textheight}
%<!KOMAold>\@addtoplength{firstfootvpos}{\footskip}
%    \end{macrocode}
% Bei der Breite der Gesch"aftszeile brauchen wir wieder eine
% Sonderl"osung, damit die Option "`wide"' auch sp"ater noch gesetzt
% werden kann. Also verwenden wir hier den Wert 0 als mit der
% Bedeutung "`ist bei \cs{opening} zu berechnen.
%    \begin{macrocode}
\@setplength{refwidth}{0pt}
\@setplength{sigindent}{0mm}
\@setplength{sigbeforevskip}{2\baselineskip}
%<!KOMAold>\let\raggedsignature=\centering
%<KOMAold>\let\raggedsignature=\raggedright
%<*DINmoretext>
\renewcommand*{\@firsthead}{\noindent
  \parbox[b]{\useplength{firstheadwidth}}{\centering%
    \usekomafont{fromaddress}{%
      \ifkomavarempty{fromname}{}{%
        \usekomafont{fromname}%
        {\ignorespaces\usekomavar{fromname}\\[-8pt]
          \rule{\useplength{firstheadwidth}}{.4pt}\\
          }%
        }%
      \ifkomavarempty{fromaddress}{}{%
        \def\\{,\ \@ogobble}
        \ignorespaces\usekomavar{fromaddress}%
        }%
      }%
    }%
  }
%</DINmoretext>
%    \end{macrocode}
%
% Au"serdem gibt es noch die Kompatibilit"atseinstellungen, die
% ebenfalls von \texttt{KOMAold} aktiviert werden.
%    \begin{macrocode}
%<*KOMAold>
\def\yourref{\setkomavar{yourref}}
\def\yourmail{\setkomavar{yourmail}}
\def\myref{\setkomavar{myref}}
\def\customer{\setkomavar{customer}}
\def\invoice{\setkomavar{invoice}}
\@ifundefined{scr@refitemi@var}{\newkomavar{refitemi}}{}
\def\refitemi{\setkomavar{refitemi}}
\def\refitemnamei{\setkomavar*{refitemi}}
\@ifundefined{scr@refitemii@var}{\newkomavar{refitemii}}{}
\def\refitemii{\setkomavar{refitemii}}
\def\refitemnameii{\setkomavar*{refitemii}}
\@ifundefined{scr@refitemiii@var}{\newkomavar{refitemiii}}{}
\def\refitemiii{\setkomavar{refitemiii}}
\def\refitemnameiii{\setkomavar*{refitemiii}}
\l@addto@macro{\defaultreffields}{%
  \addtoreffields{refitemi}%
  \addtoreffields{refitemii}%
  \addtoreffields{refitemiii}%
  }
\addtoreffields{refitemi}%
\addtoreffields{refitemii}%
\addtoreffields{refitemiii}%
\def\toname{\usekomavar{toname}}
\def\toaddress{\usekomavar{toaddress}}
\@ifundefined{scr@branch@var}{\newkomavar{branch}}{}
\def\branch{\setkomavar{branch}}
\def\frombranch{\usekomavar{branch}}
\def\signature{\setkomavar{signature}}
\def\fromsig{\usekomavar{signature}}
\def\name{\setkomavar{fromname}}
\def\fromname{\usekomavar{fromname}}
\def\address{\setkomavar{fromaddress}}
\def\fromaddress{\usekomavar{fromaddress}}
\def\location{\setkomavar{location}}
\def\fromlocation{\usekomavar{location}}
\def\backaddress{\setkomavar{backaddress}}
\def\@tempa{%
  \ifkomavarempty{fromname}{}{%
    \strut\ignorespaces\usekomavar{fromname}%
    \ifkomavarempty{fromaddress}{}{\\}}%
  \ifkomavarempty{fromaddress}{}{%
    \strut\ignorespaces\usekomavar{fromaddress}}%
  }
\ifx\@tempa\scr@backaddress@var%
  \setkomavar{backaddress}{}
\fi
\def\frombackaddress{\usekomavar{backaddress}}
\def\telephone{\setkomavar{fromphone}}
\def\telephonenum{\usekomavar{fromphone}}
\def\specialmail{\setkomavar{specialmail}}
\def\@specialmail{\usekomavar{specialmail}}
\def\title{\setkomavar{title}}
\def\@title{\usekomavar{title}}
\def\subject{\setkomavar{subject}}
\def\@subject{\usekomavar{subject}}
\def\place{\setkomavar{place}}
\def\fromplace{\usekomavar{place}}
\let\ccnameseparator=\scr@ccseparator@var
\setkomavar{ccseparator}{\ccnameseparator}
\let\enclnameseparator=\scr@enclseparator@var
\setkomavar{enclseparator}{\enclnameseparator}
\setkomafont{fromname}{\scshape}
%</KOMAold>
%    \end{macrocode}
%
%    \begin{macrocode}
%</lco>
%<*class>
%    \end{macrocode}
%
%
% \subsection{Serienbriefe und Adressdateien}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%  \begin{macro}{\adrentry}
%    \changes{v2.8q}{2002/05/19}{\cs{adrentry} verwendet das neue
%      \cs{addrentry}}
%  \begin{macro}{\adrchar}
%    \changes{v2.8q}{2002/05/19}{\cs{adrchar} verwendet das neue
%      \cs{addrchar}}
% Serienbriefe werden mit Hilfe der Funktionen |\adrentry| und
% |\adrchar| und einer Adressdatei realisiert. Dar"uber hinaus
% werden mit diesen Befehlen Abk"urzungen f"ur Adressen definiert.
% Durch die Definition mit Hilfe von \cs{addrentry} bzw. \cs{addrchar}
% m"ussen vom Anwender f"ur neue Anwendungen nur die neuen Befehle
% umdefiniert werden.
%    \begin{macrocode}
\newcommand*{\adrentry}[7]{%
  \addrentry{#1}{#2}{#3}{#4}{#5}{#6}{#7}{}}
\newcommand*{\adrchar}{\addrchar}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\addrentry}
% \changes{v2.8n}{2001/09/06}{Neu}
%  \begin{macro}{\addrchar}
% \changes{v2.8n}{2001/09/06}{Neu}
% Diese Makros erm"oglichen ab Version 2.8n die Verwendung von bis zu
% 9 Argumenten.
%    \begin{macrocode}
\newcommand*{\addrentry}[9]{\def\@tempa{#1}\ifx \@tempa\@empty \else
 \def\@tempa{#2}\ifx \@tempa\@empty
  \expandafter\def\csname #9\endcsname{#1\\#3}
 \else
  \expandafter\def\csname #9\endcsname{#2 #1\\#3}
 \fi \fi}
\newcommand*{\addrchar}[1]{}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
%
% \subsection{Befehle in der Briefumgebung}
%
%    \begin{macrocode}
%<*scrlettr>
%    \end{macrocode}
%
%  \begin{macro}{\stopbreaks}
%  \begin{macro}{\startbreaks}
%  \begin{macro}{\@nobreakvspace}
%  \begin{macro}{\@nobreakvspacex}
%  \begin{macro}{\@nobreakcr}
% Innerhalb von Briefen wird der Umbruch etwas anders gehandhabt.
% Dadurch soll der Brieftext besser positioniert werden.
%    \begin{macrocode}
\newcommand*{\stopbreaks}{\interlinepenalty \@M
 \def\par{\@@par\nobreak}\let\\=\@nobreakcr
 \let\vspace\@nobreakvspace}
\newcommand*{\@nobreakvspace}{%
  \@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
\newcommand*{\@nobreakvspacex}[1]{\ifvmode\nobreak\vskip #1\relax\else
 \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
\newcommand*{\@nobreakcr}{%
  \vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
\newcommand*{\startbreaks}{\let\\=\@normalcr
 \interlinepenalty 200\def\par{\@@par\penalty 200}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\move@topt}
% \changes{v2.8n}{2001/09/07}{Neu}
% F"ur die folgenden Aktionen wird ein Makro ben"otigt, mit dem man
% vertikal von der relativen Seitenposition zur relativen
% Papierposition gelangen kann.
%    \begin{macrocode}
\newcommand*{\move@topt}{%
  \null\vskip -1in\vskip -\topmargin%
  \vskip -\headheight\vskip -\headsep%
  \vskip -\topskip%
  \ignorespaces%
  }
%    \end{macrocode}
%  \begin{macro}{\move@frompt}
% \changes{v2.8n}{2001/09/07}{Neu}
% Nat"urlich wird auch ein Makro ben"otigt, um vertikal von einer
% relativen Papierposition wieder auf die relative Seitenposition
% zur"uck zu gelangen.
%    \begin{macrocode}
\newcommand*{\move@frompt}{%
  \vskip 1in\vskip \topmargin%
  \vskip \headheight\vskip \headsep%
  \vskip \topskip%
  \vskip -\baselineskip%
  \ignorespaces%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\move@topl}
% \changes{v2.8n}{2001/09/07}{Neu}
% F"ur die folgenden Aktionen wird au"serdem ein Makro ben"otigt, mit
% dem man horizontal von der relativen Seitenposition zur relativen
% Papierposition gelangen kann.
%    \begin{macrocode}
\newcommand*{\move@topl}{%
  \null\hskip -1in%
  \ifodd\value{page}\hskip -\oddsidemargin\else\hskip -\evensidemargin\fi
  \ignorespaces%
  }
%    \end{macrocode}
%  \begin{macro}{\move@frompl}
% \changes{v2.8n}{2001/09/07}{Neu}
% Nat"urlich wird auch ein Makro ben"otigt, um horizontal von einer
% relativen Papierposition wieder auf die relative Seitenposition
% zur"uck zu gelangen.
%    \begin{macrocode}
\newcommand*{\move@frompl}{%
  \hskip 1in%
  \ifodd\value{page}\hskip \oddsidemargin\else\hskip \evensidemargin\fi%
  \ignorespaces%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\vb@t@z}
% \changes{v2.8n}{2001/09/07}{Neu}
% Ausserdem wird ein vertikales "Aquivalent zu |\rlap| ben"otigt.
%    \begin{macrocode}
\newcommand*{\vb@t@z}[1]{{%
    \setbox0\vbox to\z@{#1\vss}%
    \setlength{\parskip}{\z@}\setlength{\baselineskip}{\z@}%
    \setlength{\parfillskip}{\z@ \@plus 1fil}%
    \setlength{\@tempdima}{\ht0}\addtolength{\@tempdima}{\dp0}%
    \box0\vskip-\@tempdima%
    }}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@foldmarks}
% F"ur die Faltmarken m"ussen nicht nur Abst"ande definiert werden, es
% wird auch ein Befehl ben"otigt, um die Faltmarken zu setzen.
%  \begin{macro}{\@foldmark}
% \changes{v2.8n}{2001/09/07}{Neu}
% Das geht am einfachsten, wenn wir auch einen Befehl haben, mit dem
% man eine einzelne Faltmarke relativ zur aktuellen Position setzen
% kann. Dies geschieht mit Hilfe von |\rlap|, damit die horizontale
% Position unver"andert bleibt. Als Parameter werden der vertikale
% Abstand zur aktuellen Position und die L"ander der Marke
% "ubergeben.
%    \begin{macrocode}
\newcommand*{\@foldmark}[2]{%
  \vskip #1%
  \vb@t@z{\rlap{\move@topl\hskip\useplength{foldmarkhpos}%
    \rule{#2}{.2pt}}}%
  \vskip -#1\ignorespaces%
}
\newcommand*{\@foldmarks}{%
  \if@fold%
    \typeout{Foldmarks: yes}%
    \move@topt
    \@foldmark{\useplength{tfoldmarkvpos}}{2mm}
    \@foldmark{.5\paperheight}{4mm}
    \@foldmark{\useplength{bfoldmarkvpos}}{2mm}
    \move@frompt
  \else
    \typeout{Foldmarks: no}%
  \fi%
}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%
%  \begin{macro}{\@savevbox}
% \changes{v2.8n}{2001/09/07}{Neu}
% \changes{v2.8q}{2001/10/30}{zus"atzlich ein optionales Argument}
%  \begin{macro}{\if@savevbox@warning}
%  \begin{macro}{\@savevbox@warningtrue}
%  \begin{macro}{\@savevbox@warningfalse}
% \changes{v2.8q}{2001/10/30}{Neu}
% Wenn eine der vertikalen Boxen in \cs{opening} zu einer
% \texttt{overbox \string\vbox\space} Meldung f"uhrt, weiss letztlich
% niemand, welche Box daf"ur verantwortlich war. Deshalb definieren
% wir hier ein Makro, das ggf. eine Meldung ausgibt, die erkl"art,
% welches Element die Ursache war und was man tun kann. Das erste
% Argument ist dabei die Sollh"ohe der Box, das zweite Argument ist
% der Boxinhalt, das dritte Argument is der Name des Elements, das zu
% hoch ist, das vierte der Name der Elementh"ohe und das f"unfte
% schlie"slich der Befehl, mit dem das Element vom Anwender definiert
% werden kann. Das optionale Argument wird nur bei der Ausgabe mit
% ausgegeben, findet jedoch bei der Berechnung keine
% Ber"ucksichtigung.
%    \begin{macrocode}
\newif\if@savevbox@warning\@savevbox@warningtrue
\newcommand{\@savevbox}[6][]{%
  \begingroup%
    \vbox to #2{#1#3}%
    \if@savevbox@warning\@savevbox@warningfalse%
    \setbox0\vbox{#3}%
    \setlength{\@tempdima}{#2}%
    \setlength{\@tempdimb}{\ht0}\addtolength{\@tempdimb}{\dp0}%
    \ifdim \@tempdimb>\@tempdima%
      \addtolength{\@tempdimb}{-\@tempdima}%
      \ClassWarning{%
        scrlttr2%
      }{%
        #4 is \the\@tempdimb\space too high.\MessageBreak
        You have to change `\string#5'\MessageBreak
        or you have to define a smaller\MessageBreak
        #4 using \string#6.\MessageBreak
        Because of this too high #4\MessageBreak
        you've got an overfull \string\vbox\space message%
      }%
    \fi%
    \fi%
  \endgroup%
}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
%  \begin{macro}{\@firstheadfootfield}
% \changes{v2.8n}{2001/09/08}{Neu}
% \changes{v2.8q}{2001/10/30}{\cs{parfillskip} lokal auf 0 gesetzt}
% \changes{v2.8q}{2001/10/30}{Fu"s explizit in eine Box gesetzt}
% Ab Version 2.8n werden Kopf und Fu"s der ersten Seite nicht mehr per
% Seitenstil \texttt{firstpage} gesetzt, sondern mit einem speziellen
% Feld. Dabei wird auch beachtet, dass dieses Feld im Kopf eine
% bestimmte aber beschr"ankte H"ohe hat. Diese H"ohe ist unabh"angig
% von der normalen Kopfh"ohe und richtet sich stattdessen nach der
% Position des Adressfeldes.
%    \begin{macrocode}
\newcommand*{\@firstheadfootfield}{%
  \typeout{Head of first page}%
  \move@topt\vskip\useplength{firstheadvpos}%
  {\setlength\@tempdima{.5\textwidth}%
    \addtolengthplength[-.5]{\@tempdima}{firstheadwidth}%
    \addtolength{\@tempdima}{-\parindent}%
    \hskip\@tempdima}%
  \vb@t@z{\hsize\useplength{firstheadwidth}%
    \vskip-\parskip%
    \rlap{{%
        \setlength{\@tempdima}{\useplength{toaddrvpos}}%
        \addtolengthplength[-1]{\@tempdima}{firstheadvpos}%
        \addtolength{\@tempdima}{-\baselineskip}%
%    \end{macrocode}
% Da sich einige -- beispielsweise |briefkopf.sty| -- darauf
% verlassen, dass |\textwidth| die Breite des Briefkopfes ist, wird
% diese L"ange lokal entsprechend gesetzt. Au"serdem wird daf"ur
% gesorgt, dass |\parfillskip| hier nicht ber"ucksichtigt wird.
%    \begin{macrocode}
        \setlength{\textwidth}{\useplength{firstheadwidth}}%
        \setlength{\parfillskip}{\z@ \@plus 1fil}%
        \@savevbox{\@tempdima}{\@firsthead\vskip \z@ \@plus .00001fil}%
          {head of first page}{firstheadvpos}{\firsthead}%
        }}%
    }%
  \vskip-\useplength{firstheadvpos}\move@frompt%
  \typeout{Foot of first page}%
  \move@topt%
  {\setlength\@tempdima{.5\textwidth}%
    \addtolengthplength[-.5]{\@tempdima}{firstfootwidth}%
    \addtolength{\@tempdima}{-\parindent}%
    \hskip\@tempdima}%
  \vb@t@z{\hsize\useplength{firstfootwidth}%
    \vskip\useplength{firstfootvpos}%
    \rlap{{%
%    \end{macrocode}
% Da sich einige -- beispielsweise |briefkopf.sty| -- darauf
% verlassen, dass |\textwidth| die Breite des Brieffu"ses ist, wird
% diese L"ange lokal entsprechend gesetzt. Au"serdem wird daf"ur
% gesorgt, dass |\parfillskip| hier nicht ber"ucksichtigt wird.
%    \begin{macrocode}
        \setlength{\textwidth}{\useplength{firstfootwidth}}%
        \setlength{\parfillskip}{\z@ \@plus 1fil}%
        \vbox{\hsize\useplength{firstfootwidth}\@firstfoot}%
    }}%
  }%
  \move@frompt%
  {\setlength{\@tempdima}{1in}\addtolength{\@tempdima}{\topmargin}%
    \addtolength{\@tempdima}{\headheight}%
    \addtolength{\@tempdima}{\headsep}%
    \addtolength{\@tempdima}{\textheight}%
    \addtolength{\@tempdima}{\footskip}%
    \addtolengthplength[-1]{\@tempdima}{firstfootvpos}%
    \ifdim\@tempdima>\z@\enlargethispage{-\@tempdima}%
    \else\if@enlargefp\enlargethispage{-\@tempdima}\fi\fi}%
  \vskip-2\parskip%
}
%    \end{macrocode}
%  \end{macro}
%
%
%  \begin{macro}{\@addrfield}
%    \changes{v2.8q}{2002/04/01}{\cs{parfillskip} lokal ge"andert}
%    \changes{v2.8q}{2002/06/03}{Sonderbehandlung f"ur Adressfeld
%      rechts}
% Dasselbe gilt auch f"ur das Adressfeld f"ur Fensterumschl"age. Die
% R"ucksendeadresse und die Briefart wird dabei unterstrichen.
%    \begin{macrocode}
\newcommand*{\@addrfield}{%
  \if@afield
    \begingroup%
      \if@baddr
        \ifkomavarempty{backaddress}{%
          \let\@tempa\@empty\let\@tempb\@empty
        }{%
          \def\@tempa{backaddress}\def\@tempb{,\space}%
        }%
      \else
        \let\@tempa\@empty\let\@tempb\@empty
      \fi
      \ifkomavarempty{specialmail}{}{%
        \edef\@tempa{\@tempa\@tempb specialmail}\def\@tempb{,\space}%
      }%
      \typeout{Address (\@tempa\@tempb addressee)}%
    \endgroup%
    \move@topt\vskip\useplength{toaddrvpos}%
    \vb@t@z{{\setlength{\parfillskip}{\z@ \@plus 1fil}%
        \rlap{\move@topl
          \setlengthtoplength{\@tempskipa}{toaddrhpos}%
          \ifdim \@tempskipa<\z@
            \addtolength{\@tempskipa}{\paperwidth}%
            \addtolengthplength[-]{\@tempskipa}{toaddrwidth}%
          \fi
          \hskip\@tempskipa
          \@addtoplength{toaddrheight}{\useplength{backaddrheight}}%
          \@savevbox{\useplength{toaddrheight}}{\hsize\useplength{toaddrwidth}%
            \@savevbox[\vss]{\useplength{backaddrheight}}{%
              \hsize\useplength{toaddrwidth}%
              \if@baddr
                \ifkomavarempty{backaddress}{}{{%
                    \noindent%
                    \def\\{\usekomavar{backaddressseparator}\@ogobble}%
                    \underline{\scriptsize\usekomafont{backaddress}%
                      \usekomavar{backaddress}}}}%
              \fi
            }{backaddress}{backaddrheight}{\setkomavar}%
            \ifkomavarempty{specialmail}{}{%
              \vbox{\hsize\useplength{toaddrwidth}%
                \hspace*{\useplength{specialmailindent}}%
                \underline{\usekomavar{specialmail}}%
                \hspace*{\useplength{specialmailrightindent}}}%
            }%
            \vfil%
            \noindent\hskip\useplength{toaddrindent}%
            \setlength{\@tempdima}{\useplength{toaddrwidth}}%
            \addtolengthplength[-2]{\@tempdima}{toaddrindent}%
            \vbox{\hsize\@tempdima%
              \noindent\usekomavar{toname}\\\usekomavar{toaddress}}%
            \vfil\null}%
          {address field}{toaddrheight}
          {\begin{letter} or you\MessageBreak
            have to define a smaller special purpose using\MessageBreak
            \string\specialmail}
        }}}%
    \vskip-\useplength{toaddrvpos}\move@frompt
  \else
    \typeout{Address: No}%
  \fi
  }
%    \end{macrocode}
%  \begin{macro}{\@ogobble}
%    \changes{v2.8q}{2002/01/22}{Neu}
% In obiger Definition wird das Makro \cs{@ogobble} verwendet, um
% einen optionalen Parameter zu vernichten, falls dieser existiert.
%    \begin{macrocode}
\newcommand*{\@ogobble}[1][]{}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\@locfield}
%    \changes{v2.8o}{2001/09/17}{\cs{noindent} eingef"ugt}
%    \changes{v2.8q}{2002/02/07}{\cs{noindent} nach dem Logo}
%    \changes{v2.8q}{2002/07/23}{Berechnung der Breite hierher
%      verschoben}
%    \changes{v2.8q}{2002/06/03}{Sonderbehandlung f"ur Adressfeld
%      rechts}
% Das "`locfield"' wird unabh"angig von der Adresse gesetzt.
%    \begin{macrocode}
\newcommand*{\@locfield}{%
  \ifdim \useplength{locwidth}=\z@%
    \@setplength{locwidth}{\paperwidth}%
    \ifdim \useplength{toaddrhpos}>\z@
      \@addtoplength[-2]{locwidth}{\useplength{toaddrhpos}}%
    \else
      \@addtoplength[2]{locwidth}{\useplength{toaddrhpos}}%
    \fi
    \@addtoplength[-1]{locwidth}{\useplength{toaddrwidth}}%
    \if@bigloc%
      \@setplength[.66667]{locwidth}{\useplength{locwidth}}%
    \else%
      \@setplength[.5]{locwidth}{\useplength{locwidth}}%
    \fi%
  \fi%
  \ifnum 1=\@alignfrom
    \if@logo
      \ifkomavarempty{location}{%
        \setkomavar{location}{\null}}{}%
    \fi
  \fi
  \ifkomavarempty{location}{%
    \typeout{Location field: empty}%
    }{%
    \typeout{Location field: yes}%
    \move@topt\vskip\useplength{toaddrvpos}%
    \vb@t@z{\rlap{%
        \move@topl
        \setlengthtoplength[-]{\@tempskipa}{toaddrhpos}%
        \ifdim \@tempskipa<\z@
          \addtolength{\@tempskipa}{\paperwidth}%
        \else
          \addtolengthplength{\@tempskipa}{locwidth}%
        \fi
        \hskip\@tempskipa
        \llap{%
          \@savevbox{\useplength{toaddrheight}}{%
            \noindent\hsize\useplength{locwidth}%
            \ifnum 1=\@alignfrom
              \if@logo
                \ifkomavarempty{fromlogo}{}{%
                  {\raggedleft\noindent\usekomavar{fromlogo}\\
                    \vskip\parskip}\noindent}%
              \fi
            \fi
            \usekomavar{location}\vskip \z@ \@plus .00001fil}
          {location field}{toaddrheight}{\setkomavar}%
          }}%
      }%
    \vskip-\useplength{toaddrvpos}\move@frompt
    }%
  }
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@datefield}
% \changes{v2.8q}{2002/01/14}{Schalter \cs{if@tempwa} wird bereits
%                             hier auf \texttt{true} gesetzt}
% Je nachdem, welche Felder definiert sind, mu"s eine gesch"aftsm"a"siger
% Standardbrief oder ein eher pers"onliches Aussehen gew"ahlt werden.
%  \begin{macro}{\@set@reffield}
% Einzelne Felder werden mit Hilfe dieses Makros gesetzt. Als
% Parameter wird der Name des Feldes "ubergeben. Es wird dann davon
% ausgegangen, dass der Name des Feldes in der jeweiligen Sprache im
% Makro \verb|\|\texttt{\emph{\#1}}\verb|name| und der Wert des Feldes
% in \verb|\var|\texttt{\emph{\#1}} zu finden ist.
%    \begin{macrocode}
\newcommand*{\@set@reffield}[1]{%
  \ifkomavarempty{#1}{}{%
    \settowidth{\@tempdima}{\strut\usekomavar{#1}}%
    \setbox0\hbox{\strut\scriptsize\sffamily\usekomavar*{#1}}%
    \ifdim \@tempdima<\wd0\setlength{\@tempdima}{\wd0}\fi
    \if@tempswa\enskip\hfill\fi
    \parbox[t]{\@tempdima}{\noindent\raggedright
        \strut\box0\\\strut\usekomavar{#1}}%
    \@tempswatrue
  }%
}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\@set@reffields}
%    \changes{v2.8q}{2002/01/14}{Neu}
% Dieses Makro enth"alt alle Aufrufe von \cs{@set@reffield}, die
% durchzuf"uhren sind. Das Makro kann mit Hilfe von
% \cs{addtoreffields} erweitert werden.
%    \begin{macrocode}
\newcommand*{\@set@reffields}{}%
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\addtoreffields}
% Dieses Makro erwartet als obligatorisches Argument den Namen einer
% KOMA-Script Variable. Der Befehl arbeitet lokal zur aktuellen
% Umgebung.
%    \begin{macrocode}
\newcommand*{\addtoreffields}[1]{%
  \l@addto@macro{\@set@reffields}{\@set@reffield{#1}}%
  }
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\removereffields}
%    \changes{v2.8q}{2002/01/14}{Neu}
% Es gibt auch einen Befehl, um alle Felder aus der Gesch"aftszeile zu
% entfernen.
%    \begin{macrocode}
\newcommand*{\removereffields}{%
  \renewcommand*{\@set@reffields}{}%
  }
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\defaultreffields}
%    \changes{v2.8q}{2002/01/14}{Neu}
% Ebenso ein Befehl, um die "ublichen Felder zu setzen.
%    \begin{macrocode}
\newcommand*{\defaultreffields}{%
  \removereffields
  \addtoreffields{yourref}%
  \addtoreffields{yourmail}%
  \addtoreffields{myref}%
  \addtoreffields{customer}%
  \addtoreffields{invoice}%
}
%    \end{macrocode}
% Genau diesen Befehl rufen wir auch gleich auf:
%    \begin{macrocode}
\defaultreffields
%    \end{macrocode}
%  \end{macro}
%
% \changes{v2.3e}{1996/05/31}{Abstand zwischen Ort und Datum
%                             eingef"ugt}
% \changes{v2.8o}{2001/09/18}{f"ur den Brieftyp \texttt{KOMAold}
%                             anschlie"send einen zus"atzlichen
%                             vertikalen Abstand eingef"ugt}
% \changes{v2.8q}{2001/11/13}{\cs{rlap} eingef"ugt}
% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}
% \changes{v2.8q}{2002/01/14}{Leertests entfernt, da in
%                             \cs{@set@reffield} bereits enthalten}
%    \begin{macrocode}
\newcommand*{\@datefield}{{\@parskipfalse\@parskip@indent
    \ifdim\useplength{refwidth}=\z@
      \if@refwide
        \@setplength{refwidth}{\useplength{firstheadwidth}}
      \else
        \@setplength{refwidth}{\textwidth}
      \fi
    \fi
    \@tempswafalse
    \move@topt\vskip\useplength{refvpos}%
    {\setlength\@tempdima{.5\textwidth}%
      \addtolengthplength[-.5]{\@tempdima}{refwidth}%
      \addtolength{\@tempdima}{-\parindent}%
      \hskip\@tempdima}%
    \rlap{\vbox{\hsize\useplength{refwidth}%
        \noindent\@set@reffields
        \ifkomavarempty{date}{%
          \if@tempswa
            \typeout{Reference line(s): with fields but without date}%
          \else
            \typeout{Reference line(s): no}%
            \aftergroup\aftergroup\aftergroup\@tempswatrue
          \fi
          }{%
          \if@tempswa
            \typeout{Reference line(s): with fields and date}%
            \settowidth{\@tempdima}{\strut\usekomavar{date}}%
            \setbox0\hbox{\scriptsize\sffamily\usekomavar*{date}}%
            \ifdim \@tempdima<\wd0\setlength{\@tempdima}{\wd0}\fi
            \enskip\hfill
            \parbox[t]{\@tempdima}{\noindent\raggedright%
              \strut\box0\\\strut\usekomavar{date}}
          \else
            \typeout{Reference line: only place and date}%
            \enskip\hfill
            \ifkomavarempty{place}{}{%
              \usekomavar{place}\usekomavar{placeseparator}}%
            \usekomavar{date}%
            \@tempswatrue
          \fi
          }%
        }%
      }%
    \if@tempswa\vskip-\baselineskip\fi
    \vskip\useplength{refaftervskip}%
  }%
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@maketitle}
% \changes{v2.3b}{1996/01/14}{Verwendung von \cs{sectfont} f"ur den
%                             \cs{title}}
% \changes{v2.8p}{2001/09/22}{\cs{titlefont} an Stelle von
%                             \cs{sectfont}} 
% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}
%  \begin{macro}{\@subjfield}
% \changes{v2.8q}{2001/10/19}{\cs{centerline} durch \cs{centering}
%                             ersetzt}
% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}
% \changes{v2.8q}{2002/01/31}{wird mit h"angendem Einzug gesetzt}
% Der eigentliche Titel wir mit |\maketitle| gesetzt. Dies sollte
% jedoch ebenso wie der Betreff \emph{nicht} manuell geschehen.
%    \begin{macrocode}
\newcommand*{\@maketitle}{%
  \ifkomavarempty{title}{%
    \typeout{Title: no}%
    }{%
    \typeout{Title: yes}%
    {\@parskipfalse\@parskip@indent%
      \centering{\LARGE\titlefont\usekomavar{title}}\par}%
    \vskip\baselineskip%
    }%
  }
\newcommand*{\@subjfield}{{\@parskipfalse\@parskip@indent%
    \ifkomavarempty{subject}{%
      \typeout{Subject: no}%
      }{%
      \if@subjafter%
        \typeout{Subject: after opening}%
        \centering%
      \else%
        \typeout{Subject: before opening}%
        \noindent%
      \fi%
      {\usekomafont{subject}\if@subj\@hangfrom{\usekomavar*{subject}}\fi%
        {\usekomavar{subject}}\par}\vskip2\baselineskip%
      }%
    }%
  }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\opening}
% \changes{v2.8n}{2001/09/08}{Komplett "uberarbeitet}
% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}
% \changes{v2.8q}{2002/03/25}{\cs{@PapersizeWarning}}
% Denn beim Er"offnungsgru"s mit |\opening| wird neben s"amtlichen
% Feldern auch der Titel und der Betreff gesetzt.
%    \begin{macrocode}
\newcommand{\opening}[1]{%
  \@PapersizeWarning
  \@gen@firsthead
  \@mkboth{\scr@fromname@var}{\scr@subject@var}%
  \thispagestyle{empty}\noindent
  \@foldmarks\@firstheadfootfield\@addrfield\@locfield\@datefield
  \@maketitle
  \if@subjafter\else\@subjfield\fi
  {\@parskipfalse\@parskip@indent\noindent#1\par}%
  {\setlength{\@tempdima}{\baselineskip}%
    \addtolength{\@tempdima}{-\parskip}
    \ifdim \@tempdima>\z@\vskip\@tempdima\fi}
  \if@subjafter\@subjfield\fi%
  \@afterindentfalse\@afterheading
  }
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\closing}
%    \changes{v2.2b}{1995/02/16}{{\cmd\fromsig} wird nicht mehr auf
%      \cs{empty} getestet sondern direkt eingesetzt}
%    \changes{v2.3b}{1996/01/14}{Abstand zwischen Schlu"sgru"s und
%      Signatur erh"oht}
%    \changes{v2.5d}{2000/06/10}{Abstand zwischen Schlu"sgru"s und
%      Signatur variabel}
%    \changes{v2.8q}{2001/11/13}{%
%      \cs{@parskipfalse}\cs{@parskip@indent}}
%    \changes{v2.8q}{2002/02/05}{nicht mehr \cs{long}}
%    \changes{v2.8q}{2002/02/05}{darf \texttt{\cmd{\\}[\dots]}
%      enthalten}
% Au"ser dem Er"offnungsgru"s mit |\opening| gibt es nat"urlich auch
% einen Schlu"sgru"s mit |\closing|, bei dem au"serdem die
% Unterschrift u."a. gesetzt wird.
%  \begin{macro}{\presig@skip}
% \changes{v2.5d}{2000/06/10}{Neues Makro, das den Abstand zwischen
%                            Schlu"sgru"s und Signatur beinhaltet}
% \changes{v2.8q}{2001/10/09}{Ersetzt durch Pseudo-L"ange
%                            sigbeforevskip}
%  \end{macro}
%  \begin{macro}{\setpresigskip}
% \changes{v2.5d}{2000/06/10}{Neues Makro, das den Abstand zwischen
%                            Schlu"sgru"s und Signatur setzt}
% \changes{v2.8q}{2001/10/09}{Mit Hilfe der neuen Pseudo-L"angen definiert}
% Das Makro |\presig@skip| beinhaltet dabei den Abstand zwischen
% Schlu"sgru"s und Signatur. Da der Wert "uber ein Benutzerinterface
% per |\setpresigskip| gesetzt wird, mu"s hier kein kostbares
% L"angenregister (skip oder dim) verschwendet werden, sondern ein
% Makro reicht aus. In |\setpresigskip| wird allerdings noch
% sichergestellt, da"s die Fehlermeldung bei falschem Parameter
% m"oglichst nicht erst bei Verwendung auftritt.
%    \begin{macrocode}
\newcommand*{\setpresigskip}{\@setplength{sigbeforevskip}}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\@xtrimtempa}
%    \changes{v2.8q}{2002/02/05}{Neu (intern)}
%  \begin{macro}{\@@xtrimtempa}
%    \changes{v2.8q}{2002/02/05}{Neu (intern)}
% Die beiden internen Macros werden ben"otigt, um beim Zerlegen eines
% mit \texttt{\cmd{\\}[\cs{dots}]} zusammengesetzten Arguments das
% optionale Argument in eckigen Klammern abzutrennen. Das Ergebnis
% steht anschlie"send in \cs{@tempa}.
%    \begin{macrocode}
\newcommand*{\@xtrimtempa}{%
  \@ifnextchar [{\@@xtrimtempa}{\@@xtrimtempa[]}}
\newcommand*{\@@xtrimtempa}{}
\def\@@xtrimtempa[#1]#2\@nil{\def\@tempa{#2}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \begin{macro}{\@tempdimaismaxwidthof}
%    \changes{v2.8q}{2002/02/05}{Neu (intern)}
% Das Makro zerlegt ein mit \texttt{\cmd{\\}[\cs{dots}]}
% zusammengesetzten Arguments und merkt in \cs{@tempdima} die L"ange
% des l"angsten Elements. \cs{@tempdima} enth"alt beim Aufruf die
% minimale L"ange.
%    \begin{macrocode}
\newcommand*{\@tempdimaismaxwidthof}{}
\def\@tempdimaismaxwidthof#1\\#2\@nil{%
  \settowidth{\@tempdimb}{\strut\ignorespaces#1}%
  \ifdim\@tempdima<\@tempdimb\setlength{\@tempdima}{\@tempdimb}\fi
  \def\@tempa{#2}\ifx\@tempa\@empty
    \let\@tempb\relax
  \else
    \expandafter\@xtrimtempa\@tempa\@nil
    \def\@tempb{\expandafter\@tempdimaismaxwidthof\@tempa\@nil}%
  \fi
  \@tempb
  }
%    \end{macrocode}
%  \end{macro}
% Jetzt endlich zum eigentichen Befehl.
%    \begin{macrocode}
\newcommand*{\closing}[1]{{\@parskipfalse\@parskip@indent\nobreak\par%
  \nobreak\vskip\baselineskip%
  \stopbreaks\noindent%
  \setlength{\@tempdima}{0pt}%
  \expandafter\@tempdimaismaxwidthof\scr@signature@var\\\@nil
  \expandafter\@tempdimaismaxwidthof#1\\\@nil
  \ifdim\@tempdima<\@tempdimb\setlength{\@tempdima}{\@tempdimb}\fi%
  \hspace{\useplength{sigindent}}%
  \parbox{\@tempdima}{\raggedsignature\strut\ignorespaces%
    #1\strut\\[\useplength{sigbeforevskip}]
    \strut\usekomavar{signature}\strut}}\par
  \nobreak\vskip\baselineskip%
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\ps}
% \changes{v2.8n}{2001/09/08}{Komplett "uberarbeitet}
% Ebenfalls m"oglich ist ein Postscriptum. Dieser Befehl erwartet
% das Postscriptum nicht als Argument, sondern schaltet zum Nachtext
% um.
%    \begin{macrocode}
\newcommand\ps{\par%
  \ifdim\parskip=\z@%
    \vskip\baselineskip%
  \fi\startbreaks\noindent\ignorespaces%
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\cc}
% Dar"uber hinaus gibt es noch einen Verteiler. Dieser wird
% sauber formatiert.
% \changes{v2.6}{2001/01/03}{\cs{def} durch \cs{newcommand*} ersetzt.}
% \changes{v2.8n}{2001/09/08}{Komplett "uberarbeitet}
%    \begin{macrocode}
\newcommand*{\cc}[1]{\par%
  \ifdim\parskip=\z@%
    \vskip\baselineskip%
  \fi\noindent%
  \parbox[t]{\textwidth}{%
    \ifkomavarempty{ccseparator}{}{%
      \@hangfrom{%
        \strut\usekomavar*{ccseparator}\usekomavar{ccseparator}}%
      }%
    \ignorespaces #1\strut}\par%
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\encl}
% Auch Anlagen werden ordentlich gesetzt.
% \changes{v2.4a}{1997/06/06}{Der Doppelpunkt bei den Anlagen wird nur noch
%                             gesetzt, wenn \cs{enclname} nicht leer ist.}
% \changes{v2.6}{2001/01/03}{\cs{def} durch \cs{newcommand*} ersetzt.}
% \changes{v2.8n}{2001/09/08}{Komplett "uberarbeiten}
% \changes{v2.8q}{2002/01/31}{Fehlendes \% erg"anzt}
%    \begin{macrocode}
\newcommand*{\encl}[1]{\par%
  \ifdim\parskip=\z@%
    \vskip\baselineskip%
  \fi\noindent%
  \parbox[t]{\textwidth}{%
    \ifkomavarempty*{enclseparator}{}{%
      \@hangfrom{%
        \strut\usekomavar*{enclseparator}\usekomavar{enclseparator}}%
      }%
    \ignorespaces #1\strut}\par%
  }
%    \end{macrocode}
%  \end{macro}
%
%
%    \begin{macrocode}
%</scrlettr>
%    \end{macrocode}
%
%
% \subsection{Grundeinstellungen}
%
%    \begin{macrocode}
%<!scrbook>\pagestyle{plain}
%<scrbook>\pagestyle{headings}
\pagenumbering{arabic}      % Arabic page numbers
%<*!scrbook>
%<!scrlettr>\if@twoside
%<!scrlettr>\else
  \raggedbottom
%<!scrlettr>\fi
%</!scrbook>
%<*!scrlettr>
\if@twocolumn
  \twocolumn
  \sloppy
  \flushbottom
\else
  \onecolumn
\fi
%</!scrlettr>
%    \end{macrocode}
%
% \subsection{Das war es fast}
%
%    \begin{macrocode}
%</class>
%    \end{macrocode}
%
% \section{Nochmal generell}
%
% \input{scrlogo.dtx}
%
%
% \setlength{\IndexMin}{.25\textheight}
% \IndexPrologue{\section*{Index}
%                \markboth{Index}{Index}
%                Die kursiven Zahlen geben die Seiten an, auf denen
%                der entsprechende Eintrag beschrieben ist.
%                Die unterstrichenden Zahlen geben die Stelle der
%                Definition des Eintrags an.
%                Alle anderen Zahlen benennen Stellen, an denen der
%                entsprechende Eintrag verwendet ist.
%                \vspace{1em}\noindent}
%
% \setlength{\GlossaryMin}{.25\textheight}
% \GlossaryPrologue{\section*{"Anderungsverzeichnis}
%                   \markboth{"Anderungsverzeichnis}{"Anderungsverzeichnis}
%                   \addcontentsline{toc}{section}{"Anderungsverzeichnis}
%                   Die erste Version des \textsf{KOMA-Script} Pakets
%                   stammt vom 7.\,Juli~1994. Es werden nur die
%                   "Anderungen ab diesem Zeitpunkt dokumentiert.\par%
%                   \vspace{1em}\noindent}
%
% \Finale
%
\endinput
%
% Ende der Datei `scrclass.dtx'

%%% Local Variables:
%%% mode: latex
%%% mode: font-lock
%%% Text-master: scrclass.ins
%%% End:
