% \CheckSum{1139}
% \iffalse meta-comment
% ======================================================================
% scrkfloa.dtx
% Copyright (c) Markus Kohm, 2002-2009
%
% This file is part of the LaTeX2e KOMA-Script bundle.
%
% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, version 1.3c of the license.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX 
% version 2005/12/01 or later and of this work.
%
% This work has the LPPL maintenance status "author-maintained".
%
% The Current Maintainer and author of this work is Markus Kohm.
%
% This work consists of all files listed in manifest.txt.
% ----------------------------------------------------------------------
% scrkfloa.dtx
% Copyright (c) Markus Kohm, 2002-2009
%
% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
% Version 1.3c, verteilt und/oder veraendert werden.
% Die neuste Version dieser Lizenz ist
%   http://www.latex-project.org/lppl.txt
% und Version 1.3c ist Teil aller Verteilungen von LaTeX
% Version 2005/12/01 oder spaeter und dieses Werks.
%
% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
% (allein durch den Autor verwaltet).
%
% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
% 
% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien.
% ======================================================================
% \fi
%
% \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         \~}
%
% \iffalse
%%% From File: scrkfloa.dtx
%<*driver>
% \fi
\ProvidesFile{scrkfloa.dtx}[2009/01/24 v3.02a KOMA-Script (floats)]
% \iffalse
\documentclass[halfparskip-]{scrdoc}
\usepackage[english,ngerman]{babel}
\usepackage[latin1]{inputenc}
\CodelineIndex
\RecordChanges
\GetFileInfo{scrkfloa.dtx}
\title{\KOMAScript{} \partname\ \texttt{\filename}%
  \footnote{Dies ist Version \fileversion\ von Datei \texttt{\filename}.}}
\date{\filedate}
\author{Markus Kohm}

\begin{document}
  \maketitle
  \tableofcontents
  \DocInput{\filename}
\end{document}
%</driver>
% \fi
%
% \selectlanguage{ngerman}
%
% \changes{v2.95}{2002/06/25}{%
%   erste Version aus der Aufteilung von \texttt{scrclass.dtx}}
%
% \section{Gleitumgebungen}
%
% \KOMAScript{} verfügt bezüglich der Gleitumgebungen über einige
% Features, die über das, was die Standardklassen bieten, hinaus
% geht. \marginline{Geplant!} Allerdings ist das hier verwendete Interface
% gnadenlos veraltet und wird deshalb irgendwann ersetzt. Dabei wird
% höchstwahrscheinlich grundsätzlich auf das \textsf{caption}-Paket aufgebaut
% werden. Man betrachte dieses Modul daher als grundsätzlich zur Disposition
% stehend.
%
% Die einzige Gleitumgebung, über die Briefe derzeit verfügen sind
% Randnotizen.
%
% \StopEventually{\PrintIndex\PrintChanges}
%
% \iffalse
%<*option>
% \fi
%
% \iffalse
%<*class>
%<*!letter>
% \fi
%
% \subsection{Einige Anweisungen und Einstellungen für die Optionen}
%
% Einige Anweisungen und Einstellungen werden bereits benötigt, bevor die
% Optionen abgearbeitet werden.
%
% \begin{macro}{\if@tablecaptionabove}
%   \changes{v2.8h}{2001/07/19}{neu Option}
%   \changes{v2.8k}{2001/08/15}{aus \texttt{typearea} in die Klassen
%     verschoben} 
%   \changes{v2.98c}{2008/02/18}{Definition erfolgt etwas früher}
% \begin{macro}{\@tablecaptionabovetrue}
% \begin{macro}{\@tablecaptionabovefalse}
% Die Einstellung, ob es Tabellenüber- oder -unterschriften sind, wird in
% einem Schalter gespeichert.
%    \begin{macrocode}
\newif\if@tablecaptionabove\@tablecaptionabovefalse
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ifonelinecaptions}
%   \changes{v2.8q}{2001/11/17}{neuer Schalter}
%   \changes{v2.98c}{2008/03/03}{Definition erfolgt etwas früher}
% \begin{macro}{\onelinecaptionstrue}
% \begin{macro}{\onelinecaptionsfalse}
% Die Entscheidung, ob die Sonderbehandlung für einzeilige caption-Texte
% durchgeführt werden soll, wird in einem Schalter gespeichert. In der
% Hoffnung, beim Laden von \textsf{caption2} Speicher zu sparen, wird
% der gleiche Name verwendet, den auch \textsf{caption2}
% verwendet. Trotzdem sollte man diesen Schalter als internen Schalter
% betrachten.
%    \begin{macrocode}
\newif\ifonelinecaptions\onelinecaptionstrue
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\scap@pos}
%   \changes{v2.8q}{2001/11/22}{neu (intern)}
%   \changes{v2.98c}{2008/03/03}{Definition erfolgt etwas früher}
% Hier wird gespeichert, ob die Beschreibung bei |captionbeside| links oder
% rechts vom Rest stehen soll. Voreingestellt ist rechts davon
% (\emph{\textbf{r}ight}). Andere Möglichkeiten sind \emph{\textbf{l}eft},
% \emph{\textbf{o}uter}, \emph{\textbf{i}nner}.
%    \begin{macrocode}
\newcommand*{\scap@pos}{r}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\scap@valign}
%   \changes{v2.8q}{2001/11/22}{neu (intern)}
%   \changes{v2.98c}{2008/03/03}{Definition erfolgt etwas früher}
% Hier wird gespeichert, ob bei |captionbeside| 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}
%
% \subsection{Optionen für Titel von Gleitumgebungen}
%
% \begin{option}{captions}
%   \changes{v2.98c}{2008/02/18}{Neuer Zentralschalter für caption}
% Dies ist nun die zentrale Option für Einstellungen zu \cs{caption}. Als
% besondere Schwierigkeit ergibt sich dabei jedoch, dass das Paket
% \textsf{caption} einige Sonderbehandlungen für \KOMAScript{} enthält, die
% darauf angewiesen sind, dass die alte Optionenschnittstelle verwendet
% wird. Erfreulicherweise funktioniert das aber ab Version~3.1g über eine
% Erweiterung der Schalter-Umschaltbefehle (|\@tablecaptionabovetrue|,
% |\@tablecaptionabovefalse|, |\onelinecaptionstrue|,
% |\onelinecaptionsfalse|), so dass lediglich dafür georgt werden muss,
% dass diese weiterhin verwendet werden.
%    \begin{macrocode}
\KOMA@key{captions}{%
  \KOMA@set@ncmdkey{captions}{@tempa}{%
    {tableheading}{0},%
    {tableabove}{0},{abovetable}{0},{abovetabular}{0},{topattable}{0},%
    {tablesignature}{1},%
    {tablebelow}{1},{belowtable}{1},{belowtabular}{1},{bottomattable}{1},%
    {oneline}{2},%
    {nooneline}{3},%
    {rightbeside}{4},{besideright}{4},%
    {leftbeside}{5},{besideleft}{5},%
    {innerbeside}{6},{besideinner}{6},%
    {outerbeside}{7},{besideouter}{7},%
    {topbeside}{8},{besidetop}{8},%
    {centeredbeside}{9},{besidecentered}{9},%
    {middlebeside}{9},{besidemiddle}{9},%
    {bottombeside}{10},{besidebottom}{10}%
  }{#1}%
  \ifcase \@tempa\relax
    \@tablecaptionabovetrue
  \or
    \@tablecaptionabovefalse
  \or
    \onelinecaptionstrue
  \or
    \onelinecaptionsfalse
  \or
    \renewcommand*{\scap@pos}{r}%
  \or
    \renewcommand*{\scap@pos}{l}%
  \or
    \renewcommand*{\scap@pos}{i}%
  \or
    \renewcommand*{\scap@pos}{o}%
  \or
    \renewcommand*{\scap@valign}{t}%
  \or
    \renewcommand*{\scap@valign}{c}%
  \or
    \renewcommand*{\scap@valign}{b}%
  \fi
}
%    \end{macrocode}
% \end{option}
%
% \begin{option}{tablecaptionabove}
%   \changes{v2.8h}{2001/07/19}{neue Option}
%   \changes{v2.8k}{2001/08/15}{aus \texttt{typearea} in die Klassen
%     verschoben} 
%   \changes{v2.98c}{2008/02/18}{obsolete} 
%   \changes{v3.01a}{2008/11/20}{deprecated}
% \begin{option}{tablecaptionbelow}
%   \changes{v2.8h}{2001/07/19}{neue Option}
%   \changes{v2.8k}{2001/08/15}{aus \texttt{typearea} in die Klassen
%     verschoben} 
%   \changes{v2.98c}{2008/02/18}{obsolete} 
%   \changes{v3.01a}{2008/11/20}{deprecated}
% Es besteht nun die Wahl, ob \cs{caption} bei Tabellen für Unter-
% oder Überschriften voreingestellt ist. Die Defaulteinstellung ist
% aus Kompatibilitätsgründen die Tabellenunterschrift.
%    \begin{macrocode}
\KOMA@DeclareDeprecatedOption{tablecaptionabove}{captions=tableheading}
\KOMA@DeclareDeprecatedOption{tablecaptionbelow}{captions=tablesignature}
%    \end{macrocode}
% \end{option}
% \end{option}
%
%  \begin{option}{origlongtable}
%    \changes{v2.8l}{2001/08/16}{neue Option}
% Wenn das \textsf{longtable}-Paket geladen ist, werden die
% Tabellentitel dafür normalerweise von den Klassen umdefiniert. Dies
% geschieht automatisch nicht, wenn das \textsf{caption2}-Paket
% geladen ist. Es geschieht ausserdem nicht, wenn diese Option gesetzt
% ist.
%  \begin{macro}{\if@komalongtable}
%    \changes{v2.8l}{2001/08/16}{neue Option}
%  \begin{macro}{\@komalongtabletrue}
%  \begin{macro}{\@komalongtablefalse}
% Die Einstellung wird in einem Schalter gespeichert.
%    \begin{macrocode}
\newif\if@komalongtable\@komalongtabletrue
\DeclareOption{origlongtable}{\@komalongtablefalse}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{option}
%
% \begin{option}{onelinecaption}
%   \changes{v2.8q}{2001/11/17}{neue Option}
%   \changes{v2.98c}{2008/03/03}{obsolete} 
%   \changes{v2.98c}{2008/03/03}{keine Sonderbehandlung für \textsf{caption2}
%     mehr}
%   \changes{v3.01a}{2008/11/20}{deprecated}
% \begin{option}{noonelinecaption}
%   \changes{v2.8q}{2001/11/17}{neue Option}
%   \changes{v2.98c}{2008/03/03}{obsolete} 
%   \changes{v2.98c}{2008/03/03}{keine Sonderbehandlung für \textsf{caption2}
%     mehr}
%   \changes{v3.01a}{2008/11/20}{deprecated}
% Da für diese Option nicht der gleiche Name verwendet wird, wie bei
% \textsf{caption2}, wurde von den Optionen bis Version~2.98b nicht nur der
% Schalter entsprechend gesetzt, sondern auch die korrespondierende Option an
% \textsf{caption2} weitergeleitet. Der gleiche Name konnte schlecht
% verwendet werden, weil er bei einer Klasse auch nicht ansatzweise
% als selbsterklärend bezeichnet werden kann. Ab Version~2.98c entfällt die
% Sonderbehandlung von \textsf{caption2}.
%    \begin{macrocode}
\KOMA@DeclareDeprecatedOption{onelinecaption}{captions=oneline}
\KOMA@DeclareDeprecatedOption{noonelinecaption}{captions=nooneline}
%    \end{macrocode}
%  \end{option}
%  \end{option}
%
%
% \iffalse
%</!letter>
%</class>
%</option>
%<*body>
% \fi
%
% \subsection{Randnotizen}
%
% Randnotizen sind ebenfalls eine Art von Gleitumgebung.
%
%  \begin{macro}{\marginline}
% \KOMAScript{} stellt zusätzlich ein Randzeilenmakro zur Verfügung,
% das je nach gerader oder ungerader Seite in doppelseitigen Layout
% rechts- oder linksbündig gesetzt werden muss.
%    \changes{v2.4l}{1997/02/06}{Definition mit Hilfe des optionalen
%      Parameters von \cs{marginpar} deutlich vereinfacht}
%    \changes{v2.8q}{2001/11/27}{fehlende Klammern ergänzt}
%    \begin{macrocode}
\newcommand\marginline[1]{%
  \marginpar[\raggedleft{#1}]{\raggedright #1}%
}
%    \end{macrocode}
%  \end{macro}
%
% \iffalse
%<*class>
%<*!letter>
% \fi
%
% \subsection{Definitionen für Titel von Gleitumgebungen}
%
%  \begin{macro}{\caption}
%    \changes{v2.2c}{1995/05/25}{Fließtitel auf CJK umgestellt}
% Es ist möglich, die Fließumgebungen 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ängenregistern gespeichert:
%    \begin{macrocode}
\newlength{\abovecaptionskip}
\newlength{\belowcaptionskip}
\setlength{\abovecaptionskip}{10\p@}
\setlength{\belowcaptionskip}{0\p@}
%    \end{macrocode}
%  \end{Length}
%  \end{Length}
%  \begin{macro}{\captionformat}
%     \changes{v2.3c}{1995/08/06}{neu}
% Trennung von Label und Text:
%    \begin{macrocode}
\newcommand*{\captionformat}{:\ }
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\if@captionabove}
%    \changes{v2.8h}{2001/07/19}{neu}
% Ob es sich um eine Unter- oder Überschrift handelt und also
% \cs{abovecaptionskip} davor und \cs{belowcaptionskip} danach steht
% oder umgekehrt, wird über 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 (intern)}
%  \begin{macro}{\captionabove}
%    \changes{v2.8h}{2001/07/19}{neu}
%  \begin{macro}{\captionbelow}
%    \changes{v2.8h}{2001/07/19}{neu}
% Damit überhaupt zwischen Unter- und Überschriften unterschieden
% werden kann, muss zunächst das Originalmakro gesichert werden. Dies
% geschieht erst zu Beginn des Dokuments, damit Pakete ggf. noch ihre
% eigenen Definitionen von \cs{caption} vornehmen können. Das
% \textsf{hyperref}-Paket ist so ein Kandidat.
%    \begin{macrocode}
\newcommand{\scr@caption}{}
\AtBeginDocument{\let\scr@caption\caption}
%    \end{macrocode}
%  \end{macro}
% Jetzt ist es möglich durch einfaches Umlegen des Schalters für 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 über die
% Tabelle oder Abbildung zu setzen, ist der Versuch, sie daneben zu
% setzen. Dies funktioniert frundsätzlich auch nicht mit
% \texttt{longtable}-Tabellen.
%
%  \begin{macro}{\scap@caption}
%    \changes{v2.8q}{2001/11/22}{neu (intern)}
% Die Beschreibung, die der Umgebung als Parameter übergeben wird,
% muss zwischengespeichert werden. Hier wird lediglich das Makro
% dafür reserviert.
%    \begin{macrocode}
\newcommand*{\scap@caption}{}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\scap@width}
%    \changes{v2.8q}{2001/11/22}{neu (intern)}
% Die Breite, die Tabelle bzw. Abbildung einschließlich Beschreibung
% und insgesamt haben dürften. Voreingestellt ist die gesamte
% verfügbare Breite.
%    \begin{macrocode}
\newcommand*{\scap@width}{\linewidth}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\scap@move}
%    \changes{v2.8q}{2001/11/22}{neu (intern)}
% Der Wert, um den die Tabelle bzw. Abbildung einschließlich
% Beschreibung nach rechts bzw. außen 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 (intern)}
% Da \cs{caption} innerhalb einer Umgebung (\cs{parbox} und
% \texttt{captionbeside}) aufgerufen wird, würde ein \cs{label}, das
% zwar innerhalb der Gleitumgebung aber nach der
% \texttt{captionbeside}-Umgebung eingefügt wird, nicht die
% Gleitumgebung, sondern die umgebende Referenzebene
% referenzieren. Damit das nicht geschieht, wird in der
% \texttt{captionbeside}-Umgebung in der \cs{parbox} die aktuelle
% Referenz \cs{@currentlabel} in dem globalen Makro
% \cs{scap@currentlabel} zwischengespeichert und am Ende der
% \texttt{captionbeside}-Umgebung mit Hilfe von \cs{aftergroup} nach
% dem Ende der Umgebung wiederhergestellt. Da die
% \texttt{captionbeside}-Umgebung ohnehin nicht geschachtelt werden
% kann, funktioniert das problemlos. Für 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 \cs{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 (intern)}
%  \begin{macro}{\@@captionbeside}
%    \changes{v2.8q}{2001/11/22}{neu (intern)}
%  \begin{macro}{\@@@captionbeside}
%    \changes{v2.8q}{2001/11/22}{neu (intern)}
%  \begin{macro}{\@@@@captionbeside}
%    \changes{v2.8q}{2001/11/22}{neu (intern)}
% Die Umgebung soll einmal folgende Parameter besitzen:
% \begin{description}
%  \item[(optional)] Verzeichniseintrag
%  \item[(obligatorisch)] Beschreibung
%  \item[(optional)] lokaler Wert für \cs{scap@pos}
%  \item[(optional)] lokaler Wert für \cs{scap@width}
%  \item[(optional)] lokaler Wert für \cs{scap@move}
%  \item[(*)] lokaler Wert für \cs{ifscap@alt} (Stern gesetzt
%  entspricht \cs{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önnen, werden einige
% Hilfsmakros benötigt.
%    \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 (intern)}
% Es wird noch eines der kostbaren Boxregister benötigt.
%    \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 (intern)}
%    \changes{v2.98c}{2008/03/11}{vertikale Ausrichtung korrigiert}
% Hier wird nun die Umgebung eigentlich geöffnet, während zuvor nur
% die Parameter ausgewertet wurden.
%    \begin{macrocode}
\newcommand{\c@pti@nb@sid@}{}
\long\def\c@pti@nb@sid@[#1]#2{%
  \def\scap@caption{%
    \if c\scap@valign
      \setlength{\abovecaptionskip}{\z@}%
      \setlength{\belowcaptionskip}{\z@}%
    \else
      \setlength{\abovecaptionskip}{-\ht\strutbox}%
      \setlength{\belowcaptionskip}{-\dp\strutbox}%
    \fi
    \captionbelow[{#1}]{#2}%
  }%
  \begin{lrbox}{\c@pti@nb@sid@b@x}%
}
%    \end{macrocode}
%  \end{macro}
%
% Jetzt endlich können wir uns auf die Umgebung stürzen. Die
% Umgebung zu starten ist einfach. Es wird ein Doppelargumentmakro
% ausgeführt.
%    \begin{macrocode}
\newenvironment*{captionbeside}{%
  \@dblarg\@captionbeside%
}{%
%    \end{macrocode}
% Komplizierter ist die Beendigung der Umgebung. Hier fällt der
% gesamte Satzaufwand an.
%    \changes{v2.9a}{2002/06/27}{\cs{ifthispageodd} statt
%      \cs{if@thispageodd}}
%    \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{\KOMAClassName}{%
      caption beside will be very, very small.\MessageBreak
      In most cases this will result in overfull and\MessageBreak
      underfull \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}%
%    \end{macrocode}
%    \changes{v2.9p}{2003/12/10}{\cs{@temdima} replaced by
%      \cs{wd}\cs{c@pti@nb@sid@b@x}, because \cs{@temdima} would be changed}
%    \begin{macrocode}   
  \if l\@tempa
    \rlap{%
      \parbox[\scap@valign]{\@tempdimb}{\scap@caption
        \global\let\scap@currentlabel\@currentlabel}%
      \nobreak\hskip\columnsep
      \parbox[\scap@valign]{\wd\c@pti@nb@sid@b@x}{\usebox\c@pti@nb@sid@b@x}%
    }%
  \else
    \rlap{%
      \parbox[\scap@valign]{\wd\c@pti@nb@sid@b@x}{\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}{\capfont}
%    \changes{v2.8c}{2001/06/29}{\cs{normalcolor} eingefügt}
% Die Schriftart der Titel kann eingestellt werden. Dazu dient dieses
% Makro, das als internes Makro zu verstehen ist,
%  \begin{macro}{\caplabelfont}
%    \changes{v2.8c}{2001/06/29}{\cs{normalcolor} eingefügt}
% Davon unabhängig kann auch die Schriftart der Titel-Titel
% ("`Abbildung X:"') eingestellt werden. Auch dieses Makro ist als
% internes Makro zu verstehen.
%    \begin{macrocode}
\newcommand*\capfont{\normalfont\normalcolor}
\newcommand*\caplabelfont{\normalfont\normalcolor}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\scr@fnt@caption}
%    \changes{v2.8o}{2001/09/14}{neues Element \texttt{caption}}
%  \begin{macro}{\scr@fnt@captionlabel}
%    \changes{v2.8o}{2001/09/14}{neues Element \texttt{captionlabel}}
% Die eigentliche Änderung der Schriftart erfolgt über das Element
% \texttt{caption} bzw. \texttt{captionlabel}.
%    \begin{macrocode}
\newcommand*{\scr@fnt@caption}{\capfont}
\newcommand*{\scr@fnt@captionlabel}{\caplabelfont}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \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ückgesetzt (ist das
%      ok?)} 
%    \changes{v2.3f}{1995/12/09}{Fontumschaltung einheitlich für lange
%      und  kurze Unter-/Überschriften}
%    \changes{v2.5g}{1999/10/09}{neben den komplett hängenden
%      Titeln sind nun auch nicht hängende oder teilweise hängende
%      möglich}
% 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ötigt, der angibt, ob auf die volle Länge 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ßerdem 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
%      \textsf{caption2} umdefiniert}
% Dann wird weiter ein Befehl benötigt, mit dem der Benutzer die
% Weite des Einzugs selbst einstellen kann. Da intern für 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ürlich muss hier auch
% der automatische Einzug abgeschaltet werden. In der Sternform wird
% außerdem dafür gesorgt, dass zwischen "`Label"' und Beschreibung
% ein Umbruch erfolgt. In der normalen Version wird stattdessen für
% Kompatibilität zu früheren Versionen gesorgt.
%  \begin{macro}{\@setcapindent}
%  \begin{macro}{\@@setcaptindent}
% Für die Implementierung der Sternform werden zwei interne Makros
% benötigt.
%    \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{\KOMAClassName}{%
      You're using package `caption2'.\MessageBreak
      Because of this you should also use `\string\captionstyle'
      and\MessageBreak
      set length '\string\captionindent' instead of
      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
%      \textsf{caption2} umdefiniert}
% Andererseits soll es auch möglich sein, nachträglich wieder den
% automatischen Einzug einzuschalten. Dafür gibt es ein weiteres
% Makro.
%    \begin{macrocode}
\newcommand*{\setcaphanging}{\dofullc@ptrue\@capbreakfalse}
\AfterPackage{caption2}{%
  \renewcommand*{\setcaphanging}{%
    \ClassWarning{\KOMAClassName}{%
      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 Titel. Zunächst 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 Über- und
%     Unterschriften}
%   \changes{v2.8j}{2001/07/30}{\cs{@makecaption} verwendet
%     \cs{@@makecaption}}
%   \changes{v2.8q}{2001/11/17}{die Sonderbehandlung für einzeilige
%     \emph{caption}s ist abschaltbar}
%   \changes{v2.8q}{2001/11/17}{Titel können in ihrer Breite
%     beschränkt 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ächlich gesetzt wird der Titel mit diesem Makro. Dabei muss der
% erste Parameter entweder \cs{@gobble} oder \cs{@firstofone} sein.
%
%  \begin{macro}{\cap@width}
%    \changes{v2.8q}{2001/11/17}{neu (intern)}
%  \begin{macro}{\cap@left}
%    \changes{v2.8q}{2001/11/17}{neu (intern)}
%  \begin{macro}{\cap@right}
%    \changes{v2.8q}{2001/11/17}{neu (intern)}
% 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ür 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}{neu}
%    \changes{v2.9a}{2002/06/27}{\cs{ifthispageodd} statt
%      \cs{if@thispageodd}}
%    \changes{v2.97}{2007/02/27}{Mindestbreite für captions ist 0\,pt}
% Hier wird \cs{cap@width} gesetzt. Dabei werden optional auch
% \cs{cap@left} und \cs{cap@right} angepasst.
%    \begin{macrocode}
\newcommand*{\setcapwidth}[2][]{%
  \begingroup%
    \setlength{\@tempdima}{#2}%
    \ifdim\@tempdima <\z@
      \@tempdima\z@
      \ClassWarning{\KOMAClassName}{%
        caption width less than 0pt not allowed.\MessageBreak
        Setting caption width to 0pt%
      }%
    \fi
    \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{\KOMAClassName}{%
                  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 \textsf{caption2} geladen wird, ändert sich die Funktion. Das
% optionale Argument wird dann ignorriert.
%    \begin{macrocode}
\AfterPackage{caption2}{%
  \renewcommand*{\setcapwidth}[2][]{%
    \ClassWarning{\KOMAClassName}{%
      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'%
    }%
    \setcaptionwidth{#2}%
  }%
}%
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\cap@margin}
%    \changes{v2.8q}{2001/11/17}{neu (intern)}
% Dieses Makro beinhaltet nicht den Wert der Ränder, sondern das
% Makro, mit dem innerhalb von \cs{@@makecaption} die Makros
% \cs{cap@left} und \cs{cap@right} neu definiert werden. Dies
% geschieht nur, wenn die Ränder mit \cs{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}{neu}
%  \begin{macro}{\@setcapmargin}
%    \changes{v2.8q}{2001/11/17}{neu (intern)}
%    \changes{v2.9a}{2002/06/27}{\cs{ifthispageodd} statt
%      \cs{if@thispageodd}}
%  \begin{macro}{\@@setcapmargin}
%    \changes{v2.8q}{2001/11/17}{neu (intern)}
% Statt die Breite der \emph{caption} zu setzen, können auch die
% Ränder gesetzt werden. In der Sternvariante werden im zweiseitigen
% Modus die Ränder 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 \textsf{caption2} geladen ist, ändert sich die Bedeutung.
%    \begin{macrocode}
\AfterPackage{caption2}{%
  \renewcommand*{\@setcapmargin}[2][\@tempdimb]{%
    \setlength{\@tempdimb}{#2}%
    \setlength{\@tempdima}{#1}%
    \ifdim\@tempdima\@tempdimb\else
      \ClassWarning{\KOMAClassName}{%
        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 Option \texttt{onelinecaption} verwendet
% wird. Das bedeutet auch, dass bei \texttt{noonelinecaption} das
% Problem mit dem Hochzählen der Fußnoten nicht auftritt.
% \changes{v2.8q}{2002/05/17}{Problem mit doppelten Fußnoten behoben}
% \changes{v2.95}{2004/01/30}{Korrekturen für vertikalen Abstand und
%   \textsl{float}-Paket}
% \changes{v2.95a}{2006/07/13}{diverse Korrekturen für den vertikalen
%   Abstand u.\,a. bei Verwendung des \textsl{color}-Pakets}
% \changes{v2.97c}{2007/06/06}{\cs{unskip}\cs{strut} eingefügt, um die
%   vertikale Ausrichtung im \emph{above}-Fall in eingen Fällen zu
%   verbessern}
% \changes{3.02a}{2009/01/24}{diverse Gruppen- bzw. Argumentklammern ergänzt}
%    \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{\strut\ignorespaces
        #1{{\caplabelfont{#2\captionformat}}}%
        #3\unskip\strut}}%
    }%
    \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}{\cap@width}%
    \ifdim \wd\@tempboxa >\@tempdima
      \hb@xt@\hsize{%
        \setbox\@tempboxa\vbox{\hsize=\cap@width
%    \end{macrocode}
% Im Fall, dass nun also mehrzeilig gesetzt werden muss, ist zu
% unterscheiden, ob wie bisher voll hängend gearbeitet werden soll
% oder nicht. In ersterem Fall machen wir das, wie bisher, allerdings
% wird der \cs{capfont} früher aktiviert, damit darin auch globale
% Größsenänderungen für den Titel Platz finden. Außerdem wird die
% geänderte Parameterübergabe berücksichtigt.
% \changes{v2.97c}{2007/09/17}{\cs{scr@smashdp} eingefügt}
%    \begin{macrocode} 
          \ifdofullc@p
            {\capfont{\@hangfrom{\scr@smashdp{\strut\ignorespaces
                  #1{{\caplabelfont{#2\captionformat}}}}}%
              {#3\unskip\strut\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{\strut\ignorespaces
                #1{{\caplabelfont{#2\captionformat\par}}}%
                \noindent\hspace*{-\cap@indent}#3\unskip\strut\par}}%
            \else%
              \if@capbreak
                {\capfont{\strut\ignorespaces
                  #1{{\caplabelfont{#2\captionformat\par}}}%
                  \noindent\@hangfrom{\hspace*{\cap@indent}}{#3\par}}}%
              \else
                {\capfont{\@hangfrom{\scr@smashdp\strut\hspace*{\cap@indent}}%
                  {\hspace{-\cap@indent}\scr@smashdp{\ignorespaces#1%
                    {{\caplabelfont{#2\captionformat}}}}#3\unskip\strut\par}}}%
              \fi
            \fi
          \fi
        }%
        \setlength{\@tempdima}{\ht\@tempboxa}%
        \addtolength{\@tempdima}{\dp\@tempboxa}%
        \addtolength{\@tempdima}{-\ht\strutbox}%
        \ht\@tempboxa\ht\strutbox
        \dp\@tempboxa\@tempdima
        \strut\cap@left
        \box\@tempboxa
        \cap@right\strut
      }%
    \else
      \global \@minipagefalse
%    \end{macrocode}
% Im einzeiligen Fall wird nun die Box wie oben erneut erzeugt und gleich
% gesetzt. Im Prinzip ginge das auch direkt ohne erst eine Box zu erzeugen.
% \changes{3.02a}{2009/01/24}{die Box selbst muss im \cs{capfont} gesetzt
%   werden, falls darin eine Größenumschaltung stattfindet}
%    \begin{macrocode}
      \sbox\@tempboxa{%
        {\capfont{\scr@smashdp{\strut\ignorespaces
          #1{{\caplabelfont{#2\captionformat}}}}%
          #3}}%
      }%
      {\capfont{\hb@xt@\hsize{\strut\cap@left\box\@tempboxa\cap@right\strut}}}%
    \fi
  \endgroup
}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% \begin{macro}{\LT@makecaption}
%   \changes{v2.8j}{2001/07/30}{neu (intern)}
%   \changes{v2.8k}{2001/08/15}{keine Umdefinierung, wenn das
%     \textsf{caption2}-Paket erkannt oder die Option
%     \texttt{origlongtable} gesetzt wurde}
%   \changes{v2.8q}{2001/11/18}{Breite und Anordnung wird über
%     \KOMAScript-Makros bestimmt}
%   \changes{v2.8q}{2001/11/18}{Verwendung von \cs{AfterPackage}}
%   \changes{v2.9s}{2004/08/24}{vertikale Abstände durch verschieben von
%     \cs{vskip} korrigiert}
% \begin{macro}{\LT@array}
%   \changes{v2.8q}{2001/11/18}{neu (intern)}
% \begin{macro}{\LT@caption}
%   \changes{v2.8q}{2001/11/18}{neu (intern)}
% \begin{macro}{\scr@caption@before@longtable@warning}
%   \changes{v2.98c}{2008/03/03}{neu (intern)}
% Ab Version 2.8j wird auf vielfachen Wunsch das
% \textsf{longtable}-Paket berücksichtigt. Da Pakete aber nach
% Klassen geladen werden, kann dies erst nach dem Laden des Pakets
% aktiviert werden. Die Definition entspricht der obigen. Wird das
% \textsf{caption2}-Paket nach \textsf{longtable} geladen, so wird
% automatisch die Definition von \textsf{caption2} verwendet. Wird
% \textsf{caption2} vor \textsf{longtable} geladen, so liegt
% voraussichtlich eine Fehlbedienung vor, auf die hingewiesen wird.
%    \begin{macrocode}
\newcommand*{\scr@caption@before@longtable@warning}[1]{%
  \ClassWarning{\KOMAClassName}{%
    you've loaded package `#1' before package\MessageBreak
    `longtable'!\MessageBreak
    Because of this package `#1' isn't able to\MessageBreak
    control `\string\caption' at longtables. \space After loading
    \MessageBreak 
    package `#1' KOMA-Script also doesn't control\MessageBreak
    `\string\caption'.\MessageBreak
    I think, you should load package `caption' after\MessageBreak
    package `longtable'%
  }%
}
\AfterPackage{longtable}{%
  \@ifpackageloaded{caption2}{\@komalongtablefalse
    \scr@caption@before@longtable@warning{caption2}%
  }{}%
  \if@komalongtable
    \renewcommand{\LT@makecaption}[3]{%
      \noalign{%
        \if@captionabove
          \vskip\belowcaptionskip
        \else
          \vskip\abovecaptionskip
        \fi
      }%
      \LT@mcol\LT@cols c{%
        \hbox to\z@{\hss\parbox[t]\linewidth{%
            \@@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{\KOMAClassName}{%
      longtable captions redefined%
    }%
  \fi
}
%    \end{macrocode}  
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\fs@komaabove}
%    \changes{v2.8j}{2001/07/30}{neu (intern)}
%  \begin{macro}{\fs@komabelow}
%    \changes{v2.8j}{2001/07/30}{neu (intern)}
%  \begin{macro}{\floatc@komascript}
%    \changes{v2.8j}{2001/07/30}{neu (intern)}
% Ab Version 2.8j werden für das \textsf{float}-Paket zwei float-Stile
% Namens \texttt{komaabove} und \texttt{komabelow} definiert. Da
% möglicherweise auch andere Pakete darauf zurückgreifen, wird das
% unabhängig von der Existenz von \textsf{float} getan. Verwendet wird
% dies innerhalb von \KOMAScript{} jedoch nicht. Es werden außerdem
% interne Makros von \textsf{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}
%
%
% \subsection{Verteilung der Gleitumgebungen}
%
%  \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}
% Für die Fließumgebungen müssen verschiedene Konstanten definiert
% werden, die Aufteilung zwischen Text und Fließumgebung und Ähnliches
% regeln.
%    \begin{macrocode}
\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}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{Counter}
%  \end{macro}
%  \end{macro}
%  \end{Counter}
%  \end{macro}
%  \end{Counter}
%  \end{macro}
%  \end{Counter}
%
%
% \subsection{Titel ohne Gleitumgebung}
%
% \begin{macro}{captionof}
%   \changes{v3.05}{2009/07/08}{Neue Anweisung}
% Obwohl es inzwischen mehrere Pakete gibt, die diese Anweisung bereit
% stellen, kommt es doch immer wieder zu Fehlern, weil einige Anwender diese
% Pakete nicht nutzen. Also habe ich beschlossen, das selbst zu
% implementieren. Um die Kompatibilität mit \textsf{capt-of} nicht zu stören,
% wird die Definition vor dme Laden jenes Pakets zurück genommen. Mit dem
% Paket \textsf{caption} gibt es solche Probleme nicht, das dieses
% \cs{captionof} ohnehin per \cs{def} definiert.
%    \begin{macrocode}
\newcommand*{\captionof}[1]{\def\@captype{#1}\caption}
\BeforePackage{capt-of}{\let\captionof\relax}
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{Standardbezeichner}
%
%  \begin{macro}{\figurename}
%  \begin{macro}{\tablename}
% So heißen die Dinger:
%    \begin{macrocode}
\newcommand*\figurename{Figure}
\newcommand*\tablename{Table}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%
% \subsection{Abbildungsumgebung}
%
%  \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ächst werden \texttt{figure}s, also Abbildungen behandelt.
%  \begin{Counter}{figure}
%  \begin{macro}{\thefigure}
%   \changes{v2.97e}{2007/11/23}{Kapitelnummer nur im Hauptteil}
%  \begin{macro}{\figureformat}
%    \changes{v2.3c}{1995/08/06}{neu}
% Dafür wird ein neuer Zähler benötigt, der bei der Buch- und der
% Bericht-Klasse mit \cs{chapter} zurückgesetzt wird und auch den
% Kapitelzähler mit enthält.
%    \begin{macrocode}
%<book|report>\newcounter{figure}[chapter]
%<article>\newcounter{figure}
\renewcommand*\thefigure{%
%<*book>
  \ifnum \scr@compatibility>\@nameuse{scr@v@2.97d}\relax
    \if@mainmatter\thechapter.\fi
  \else
%</book>
%<book|report>  \thechapter.%
%<book>  \fi
  \@arabic\c@figure
}
\newcommand*{\figureformat}{%
  \figurename~\thefigure%
%<report|book>  \autodot%
}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{Counter}
%  \begin{macro}{\fps@figure}
% Die Standardplatzierung für Abbildungen ist \emph{t}op,
% \emph{b}ottom, \emph{p}age.
%    \begin{macrocode}
\newcommand*{\fps@figure}{tbp}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ftype@figure}
% Um die verschiedenen \emph{float}-Typen unterscheiden zu können,
% benätigen sie eine Nummer. Abbildungen bekommen hier willkürlich
% die Nummer 1.
%    \begin{macrocode}
\newcommand*{\ftype@figure}{1}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ext@figure}
% Die Extension der Datei für das Abbildungsverzeichnis.
%    \begin{macrocode}
\newcommand*{\ext@figure}{lof}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\fnum@figure}
% Die Ausgabe der Abbildungsnummer.
%    \begin{macrocode}
\newcommand*{\fnum@figure}{\figureformat}
%    \end{macrocode}
%  \end{macro}
% Jetzt aber zurück zur Umgebung. Wie üblich gibt es eine Version mit
% und eine Version ihne Stern. Zur unterschiedlichen Bedeutung bei
% zweispaltigem Satz siehe \texttt{classes.dtx} und \texttt{source2e}.
%    \begin{macrocode}
\newenvironment{figure}{%
  \let\caption\captionbelow\@float{figure}%
}{%
  \end@float
}
\newenvironment{figure*}{%
  \let\caption\captionbelow\@dblfloat{figure}%
}{%
  \end@dblfloat
}
%    \end{macrocode}
%  \end{environment}
%
%
% \subsection{Tabellengleitumgebung}
%
%  \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ür
%      \cs{caption} von Unter- auf Überschriften geändert werden} 
% Auch verschiebbare Tabellen sind möglich. Das Prinzip ist das
% gleiche wie bei den Abbildungen.
%  \begin{Counter}{table}
%  \begin{macro}{\thetable}
%   \changes{v2.97e}{2007/11/23}{Kapitelnummer nur im Hauptteil}
%  \begin{macro}{\tableformat}
%    \changes{v2.3c}{1995/08/06}{neu}
%    \begin{macrocode}
%<article>\newcounter{table}
%<book|report>\newcounter{table}[chapter]
\renewcommand*\thetable{%
%<*book>
  \ifnum \scr@compatibility>\@nameuse{scr@v@2.97d}\relax
    \if@mainmatter\thechapter.\fi
  \else
%</book>
%<book|report>  \thechapter.%
%<book>  \fi
  \@arabic\c@table
}
\newcommand*{\tableformat}{%
  \tablename~\thetable%
%<report|book>  \autodot%
}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{Counter}
%  \begin{macro}{\fps@table}
%    \begin{macrocode}
\newcommand*{\fps@table}{tbp}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ftype@table}
% Allerdings wird für Tabellen willkürlich Nummer 2 verwendet.
%    \begin{macrocode}
\newcommand*{\ftype@table}{2}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\ext@table}
% Natürlich haben sie auch eine andere Extension.
%    \begin{macrocode}
\newcommand*{\ext@table}{lot}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\fnum@table}
% Die Ausgabe der Nummer kann ebenfalls abweichen.
%    \begin{macrocode}
\newcommand*{\fnum@table}{\tableformat}
%    \end{macrocode}
%  \end{macro}
% Ob es \cs{caption} in der Voreinstellung eine Tabellenüberschrift
% oder eine Tabellenunterschrift erzeugt, hängt hier von den Optionen
% ab.
%    \begin{macrocode}
\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{environment}
%
% \iffalse
%</!letter>
%</class>
%</body>
% \fi
%
% \Finale
%
\endinput
%
% end of file `scrkfloa.dtx'
%%% Local Variables:
%%% mode: doctex
%%% TeX-master: t
%%% End:
