%%==================================================%%
%%========It based on the idea of framed.sty========%%
%%==================================================%%
%%===== Currently the packge has a beta-Status =====%%
%%==================================================%%
%% WITH THANKS TO (alphabetically):
%% ROLF NIEPRASCHK
%% HEIKO OBERDIEK
%% HERBERT VOSS

%% Copyright (c) 2010 Marco Daniel
%
%% This package may be distributed under the terms of the LaTeX Project
%% Public License, as described in lppl.txt in the base LaTeX distribution.
%% Either version 1.0 or, at your option, any later version.
%%
%%
%%==================================================%%
%% Erstellung eines Rahmens, der am Seitenende keine
%% horizontale Linie einfuegt
%%>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>%%
%%      _______________                            %%
%%      |    page 1   |                            %%  
%%      |    Text     |                            %%
%%      |  __Text__   |                            %%
%%      |  | Text |   |                            %%
%%     P A G E B R E A K                           %%
%%      |  | Text |   |                            %%
%%      |  |_Text_|   |                            %%
%%      |    Text     |                            %%
%%      |____page 2___|                            %%
%%                                                 %%
%%>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>%%

%% Allgemeine Angaben
\def\mdframedpackagename{mdframed}
\def\md@PackageWarning#1{\PackageWarning{\mdframedpackagename}{#1}}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mdframed}[2010/04/16 v0.3: mdframed]

%%==================================================%%
%%=============== Benoetigte Pakete ================%%
%%==================================================%%
\IfFileExists{kvoptions.sty}{%
        \RequirePackage{kvoptions}
        \SetupKeyvalOptions{family=mdf,prefix=mdf@}
        }{%
        \md@PackageWarning{The package kvoptions.sty does not exist\MessageBreak
                           but it is requiered by \mdframedpackagename}%
         }
\IfFileExists{picture.sty}{%
        \RequirePackage[etex]{picture}
        }{%
        \md@PackageWarning{The package picture does not exist\MessageBreak
                           but it is requiered by \mdframedpackagename}%
         }

\IfFileExists{calc.sty}{%
        \RequirePackage{calc}
        }{%
        \md@PackageWarning{The package calc does not exist\MessageBreak
                           but it is requiered by \mdframedpackagename}%
         }

\IfFileExists{color.sty}{%
        \RequirePackage{color}
        }{%
        \md@PackageWarning{The package color does not exist\MessageBreak
                           but it is requiered by \mdframedpackagename}%
         }

%%==================================================%%
%%=============== Globale Optionen  ================%%
%%==================================================%%
\DeclareStringOption[2pt]{linewidth}
\DeclareStringOption[black]{linecolor}
\DeclareStringOption[white]{backgroundcolor}
\DeclareStringOption[black]{fontcolor}
\DeclareStringOption[20pt]{margin}
\DeclareStringOption[\z@]{skipabove}
\DeclareStringOption[\z@]{skipbelow}
\DeclareStringOption[none]{xcolor}

\ProcessKeyvalOptions*

%%==================================================%%
%%========Sicherstellen der key-value-Syntax========%%
%%================ HIER DER GLOABEL ================%%
%%==================================================%%
\AtBeginDocument{
 \@ifpackageloaded{xcolor}{%
    \let\mdf@xcolor\@empty %ignoriere die Eingabe der Optionen
    }{%
     \def\@tempa{none}
    \ifx\mdf@xcolor\@tempa
    \else
     \PassOptionsToPackage{\mdf@xcolor}{xcolor}
     \RequirePackage{xcolor}
   \fi
 }
}


\newcommand*\mdf@get@linewidth[1]{%
  \begingroup
    \unitlength=1pt\relax
    \@tempdima#1\unitlength
    \edef\mdf@GET@linewidth{\endgroup\@tempdima=\the\@tempdima}%
  \mdf@GET@linewidth
}
\picture@redefine\mdf@get@linewidth{&1}
\begingroup
   \mdf@get@linewidth{\mdf@linewidth}
   \global\edef\mdf@linewidth{\the\@tempdima}
\endgroup



\newcommand*\mdf@get@margin[1]{%
  \begingroup
    \unitlength=1pt\relax
    \@tempdima#1\unitlength
    \edef\mdf@GET@margin{\endgroup\@tempdima=\the\@tempdima}%
  \mdf@GET@margin
}
\picture@redefine\mdf@get@margin{&1}
\begingroup
   \mdf@get@margin{\mdf@margin}
   \global\edef\mdf@margin{\the\@tempdima}
\endgroup


\newcommand*\mdf@get@skipabove[1]{%
  \begingroup
    \unitlength=1pt\relax
    \@tempdima#1\unitlength
    \edef\mdf@GET@skipabove{\endgroup\@tempdima=\the\@tempdima}%
  \mdf@GET@skipabove
}
\picture@redefine\mdf@get@skipabove{&1}
\begingroup
   \mdf@get@skipabove{\mdf@skipabove}
   \global\edef\mdf@skipabove{\the\@tempdima}
\endgroup


\newcommand*\mdf@get@skipbelow[1]{%
  \begingroup
    \unitlength=1pt\relax
    \@tempdima#1\unitlength
    \edef\mdf@GET@skipbelow{\endgroup\@tempdima=\the\@tempdima}%
  \mdf@GET@skipbelow
}
\picture@redefine\mdf@get@skipbelow{&1}
\begingroup
   \mdf@get@skipbelow{\mdf@skipbelow}
   \global\edef\mdf@skipbelow{\the\@tempdima}
\endgroup

%%==================================================%%
%%========Sicherstellen der key-value-Syntax========%%
%%================ HIER DIE LOKALEN ================%%
%%==================================================%%

\define@key{mdframed}{linecolor}[\mdf@linecolor]{%
  \def\md@@linecolor{\color{#1}}
}


\define@key{mdframed}{backgroundcolor}[\mdf@backgroundcolor]{%
  \mdbackgroundcolor{#1} 
}

\define@key{mdframed}{fontcolor}[\mdf@fontcolor]{%
  \mdfontcolor{#1}
  \def\md@@fontcolor{\color{#1}} 
}

\newcommand*\md@linewidth{}
\define@key{mdframed}{linewidth}[2pt]{%
   \md@get@linewidth{#1}
   \edef\md@linewidth{\the\@tempdima}
   \md@framed@linewidth\md@linewidth
}
\newcommand*\md@get@linewidth[1]{%
  \begingroup
    \unitlength=1pt\relax
    \@tempdima#1\unitlength
    \edef\md@GET@linewidth{\endgroup\@tempdima=\the\@tempdima}%
  \md@GET@linewidth
}
\picture@redefine\md@get@linewidth{&1}



\newcommand*\md@margin{}
\define@key{mdframed}{margin}[10pt]{%
   \md@get@margin{#1}
   \edef\md@margin{\the\@tempdima}
    \md@framed@margin\md@margin
}
\newcommand*\md@get@margin[1]{%
  \begingroup
    \unitlength=1pt\relax
    \@tempdima#1\unitlength
    \edef\md@GET@margin{\endgroup\@tempdima=\the\@tempdima}%
  \md@GET@margin
}
\picture@redefine\md@get@margin{&1}




%%==================================================%%
%%==Deklaration diverser Eingabe und Hilfsparameter=%%
%%==================================================%%

\newskip\md@framed@margin      \md@framed@margin\mdf@margin       %% Abstand |Links<INHALTE>Rechts|
\newskip\md@framed@linewidth   \md@framed@linewidth\mdf@linewidth %% Dicke der Linie


\newcommand\mdframedabovespace[1]{\def\md@space@above@frame{#1}}
\mdframedabovespace{\baselineskip}                 %% Abstand vor der Frame-Umgebung


\newskip\md@temp@skip@a      \md@temp@skip@a\z@    %% Hilfslaenge
\newlength{\fp@putboxa@length@md}
\setlength{\fp@putboxa@length@md}{\z@}             %% Hilfslaenge

\newif\ifmd@content@split  \md@content@splitfalse  %% Ifabfrage, die prueft, ob der Inhalt von mdframed geteilt wird
                                                   %% default - wird nicht geteilt

\newif\ifmd@box@empty      \md@box@emptyfalse      %% Ifabfrage, die prueft, ob der Inhalt einer Box leer ist
                                                   %% default - ist nicht leer

\newcommand\mdbackgroundcolor[1]{\def\md@backgroundcolor{#1}}  %% User-Command - Hintergrundfarbe

\newcommand\mdlinecolor[1]{\def\md@linecolor{#1}}  %% User-Command - Linienfarbe
\def\md@@linecolor{\color{\mdf@linecolor}}          %% Abkuerzungskommando

\newcommand\mdfontcolor[1]{\def\md@fontcolor{#1}}
\def\md@@fontcolor{\color{\mdf@fontcolor}}

\mdbackgroundcolor{\mdf@backgroundcolor}
\mdlinecolor{\mdf@linecolor}
%%==================================================%%
%%===Globale Umgebung -- noch keine Modifikation ===%%
%%==================================================%%

\newenvironment{mdframed}[1][]% default-Umgebung
  {\setkeys{mdframed}{#1}%
   \vskip\mdf@skipabove
   \mdframed@global@env}%
  {\endmdframed@global@env\vskip\mdf@skipbelow}




%%==================================================%%
%%=================== Kommentare ===================%%
%%==================================================%%

\chardef\md@arrayparboxrestore=\catcode`\|   % for debug
\catcode`\|=\catcode`\%                      % (debug: insert space after backslash)
%% Kommentare werden im Code mit | gekennzeichnet


%%==================================================%%
%%================= Breite der BOX =================%%
%%==================================================%%
\def\md@margin@equation{%                          %% Berechnung der moeglichen Breite fuer den Rahmeninhalt
       \advance\hsize by -\md@framed@margin          %% hsize minus Randvorgabe
       \advance\hsize by -2\md@framed@linewidth       %% hsize minus Linienbreite
       \advance\hsize by -\width\md@arrayparboxrestore}%% Beruecksichtigung das Auszaehlung bzw. list-Umgebung enthalten

%%==================================================%%
%%===Bestimmung des Platzbedarfes fuer den Rahmen===%%
%%==================================================%%
\newskip\md@temp@frame@hsize
\newskip\md@temp@frame@vsize
\def\md@sizeofframe{\begingroup
 \setbox\z@\vbox{%
     \vskip-5in \hbox{\hskip-5in 
     \fboxsep2\baselineskip\fboxrule\md@framed@linewidth\fbox%
     {\hbox{\vrule \@height 4.7in \@depth.3in \@width 5in}}}%
   \vskip\z@skip}%
   \global\md@temp@frame@hsize\wd\z@ \global\md@temp@frame@vsize\ht\z@
 \endgroup
}

%%==================================================%%
%%============Start der globalen Umgebung===========%%
%%==================================================%%
\def\mdframed@global@env{\par
 %Bestimmung zusatzlichen Freiraumes gemaess Vorgabe des Rahmens
 \let\width\md@temp@frame@hsize \let\height\md@temp@frame@vsize
 % Einfuegen von Strafpunkten und Abstaenden 
 \begingroup
   \skip@\lastskip
   \if@nobreak
   \else 
      \penalty9999 % updates \page parameters <-pruefen
      \ifdim\pagefilstretch=\z@                 %%% pagefilstretch ist ein internes Register fuer den
                                                %%% Seitenumbruch. Es entaehlt den akkumulierten (gespeicherten) fil-Anteil
                                                %%% auf der aktuellen Seite
         \ifdim\pagefillstretch=\z@             %%% pagefillstretch ist ein internes Register fuer den
                                                %%% Seitenumbruch. Es entaehlt den akkumulierten (gespeicherten) fill-Anteil
                                                %%% auf der aktuellen Seite
            %%% nicht unendlich dehnbar, so hier foerdern eines Seitenumbruches
            \edef\@tempa{\the\skip@}%
            \edef\@tempb{\the\z@skip}%
            \ifx\@tempa\@tempb                  %%% ???????
                  \penalty-30
            \else
                  \vskip-\skip@
                  \penalty-30
                  \vskip\skip@
            \fi
         \fi
      \fi
    \penalty\z@
    % Give a stretchy breakpoint that will always be taken in preference
    % to the \penalty 9999 used to update page parameters.  The cube root
    % of 10000/100 indicates a multiplier of 0.21545, but the maximum 
    % calculated badness is really 8192, not 10000, so the multiplier
    % is 0.2301. 
    \advance\skip@ \z@ plus-.5\baselineskip
    \advance\skip@ \z@ plus-.231\height
    \advance\skip@ \z@ plus-.231\skip@
    \advance\skip@ \z@ plus-.231\topsep
    \vskip-\skip@ \penalty 1800 \vskip\skip@
  \fi
 \addvspace{\topsep}%
 \endgroup
 % clear out pending page break
 \nobreak \vskip 2\baselineskip \vskip\height     %%%\@M=10000
 \penalty9999 \vskip -2\baselineskip \vskip-\height  
 \penalty9999 % updates \pagetotal
   \md@adjheight
 \setbox\@tempboxa\vbox\bgroup
   \begingroup                %%% zweites begingroup noetig, dass fontcolor gesetzt werden kann
   \md@@fontcolor     %%% Setzen der Schriftfarbe
   \md@margin@equation
   \textwidth\hsize \columnwidth\hsize
}

\def\endmdframed@global@env{\par
     \kern\z@                         %%%\z@=0
     \hrule\@width\hsize\@height\z@   
     \penalty-100 % put depth into height
     \endgroup
 \egroup
 \begingroup 
  \md@put@frame
 \endgroup
}



%%==================================================%%
%%===========Ausgaberoutine -> Berechnung===========%%
%%==================================================%%

%% \md@put@frame nimmt den Inhalt der \@tempboxa und packt alles oder nur einen Teil
%% auf die Seite mit dem Rahmen.
%% Es ist rekursiv, solange alles von der \@tempboxa aufgebraucht ist (\@tempboxa muss die Tiefe 0 haben.)
%% Erste Iteration: Versuche alles in einen Rahmen zu bekommen. Falls es nicht passt, 
%% splitte es für die erste Rahmenumgebung
%% Spaetere Iteration: Versuche alles in den letzten Rahmen zu bekommen. Falls es nicht passt,
%% splitte es erneut. (Versuchsstadium -- Da bisher nur Anfang und Ende enthalten)

\def\md@put@frame{\relax
 \ifdim\pagegoal=\maxdimen \pagegoal\vsize \fi   %%%% \pagegoal aktuelle Seitenhöhe für den Seitenumbruch
                                                 %%%% Der Wert wird mit \vsize initialisiert
                                                 %%%% \pagegoal - \pagetotal ist dann der noch freie Raum auf einer Seite
                                                 %%%%
 \ifinner %Rekursion-sind in der Box             %%%% testet auf internal mode: Dieser ist im internal vertical mode,
                                                 %%%% also im Innern einer \vbox, oder im restricted horizontal mode,
                                                 %%%% also im Innern einer \hbox, gesetzt.
%%   \md@putbox@second                             %%%% Rahmen um den zweiten Teil der Box    "noch zu bearbeiten"
%%   \md@afterframe                                %%%% siehe Anweisung
 \else   %Noch keinen Teil der Box gesetzt.
   \dimen@\pagegoal             
   \advance\dimen@-\pagetotal                     %%% \dimen@ hat jetzt den noch freien Platz auf der Seite gespeichert
   \advance\dimen@-\topskip
   \ifdim\dimen@<2\baselineskip                   %%% Ist freier Platz < 2 Zeilenabstaenden, zu wenig Platz
     \clearpage                                   %%% Beginne neue Seite
     \md@put@frame    %                           %%% Rufe \md@put@frame erneut auf
   \else                                          %%% Es ist akzeptabler Platz auf der Seite
%     \begingroup                                  %%%
%        \advance\dimen@0.1\pageshrink              %%% \pageshrink ist ein internes Register fuer den Seitenumbruch. Es ent-
                                                  %%% haelt den akkumulierten Schrumpfanteil auf der aktuellen Seite;
                                                  %%% das heisst die Laenge, um die der Leerraum auf der aktuellen Seite
                                                  %%% bei Bedarf noch zusammengeschoben werden kann;
                                                  %%% Somit ist hier der maximale Seitenplatz ermittelt
     \expandafter%%% ????
%     \endgroup
     \ifdim\dimen@>\ht\@tempboxa                  %%% Pruefe, ob Box noch auf Seite passt
        \ifmd@content@split                       %%% Pruefe ob \@tempboxa gesplittet wurde
           \md@putbox@second                      %%% Wurde gesplittet- nehme zweiten Teil der Umrandung
         \else                                    %%%
           \md@putbox@single                      %%% Box wurde nicht gesplitter - einfacher Rahmen
        \fi%
        \md@afterframe                            %%% siehe Anweisung
     \else  %%%Box muss gesplittet werden
        \setbox\@tempboxa\vbox{                   %%% Simuliere den Rahmen und die Flexibilitaet der Seite
                                                  %%% \pagestretch ist ein internes Register fuer den Seitenumbruch. Es ent-
                                                  %%% haelt den akkumulierten Zuwachsanteil auf der aktuellen Seite;
                                                  %%% das heisst die Laenge, um die der Leerraum auf der aktuellen Seite
                                                  %%% bei Bedarf noch auseinander gezogen werden kann;
           \vskip  \z@ \@plus0.2\pagestretch \@minus.3\pageshrink
           \kern137sp\kern-137sp\penalty-30       %%% ????
           \unvbox\@tempboxa}                     %%%
        \edef\md@resto@set{\boxmaxdepth\the\boxmaxdepth     %%% \boxmaxdepth ist die maximale Tiefe (depth) einer \vbox,
                                                            %%% die diese annehmen darf. Dieser Wert ist mit \maxdimen,
                                                            %%% das heisst 16383,99999 pt, vorbelegt. Damit duerffen Boxen
                                                            %%% beliebige Unterlaengen (‘depth’) besitzen. 
                           \splittopskip\the\splittopskip}% %%% \splittopskip ist der Leerraum,
                                                            %%% der automatisch zu Beginn einer abgesplitteten Box gesetzt wird.
        \boxmaxdepth\z@ \splittopskip\z@                    %%%
        %%% Hier wird die \@tempboxa gesplittet
        \setbox\tw@\vsplit\@tempboxa to 1\dimen@              %%% \tw@ enthaelt oberen Teil der \@tempboxa mit der Groesse \dimen@
          \ifdim\ht\@tempboxa=\z@
              \md@box@emptytrue
          \fi
|       \toks99\expandafter{\splitfirstmark}%               %%% \splitfirstmark internes Register, welches den mittels
                                                            %%% \mark gesetzten Text ausgibt, der bei der letzten \vsplit-Operation
                                                            %%% gefunden wurde. Dies ist der erste \mark-Text im abgesplitteten Text

|       \toks98\expandafter{\splitbotmark}                  %%% splitbotmark internes Register, welches den mittels \mark gesetzten
                                                            %%% Text ausgibt, der bei der letzten \vsplit-Operation gefunden wurde.
                                                            %%% Dies ist der letzte \mark-Text im abgesplitteten Text
        \setbox\tw@\vbox{\unvbox\tw@}                       %%% Natuerliche Groesse der ersten Teilbox erhalten
        % If the split-to size > (\vsize-\topskip), then set box to full size
        %%% \topskip Ist der Mindestabstand, den die Grundlinie der ersten Zeile (Box) einer jeden Seite vom Seitenanfang haben soll.
        \begingroup
           \advance\dimen@\topskip                          %%% Addiere zum noch freien Platz auf der Seite topskip
        \expandafter\endgroup    %%% ????
           \ifdim\dimen@>\pagegoal                          %%% Ist \dimen@ groesser der Seitenhoehe
              \dimen@ii\pagegoal                            %%% \dimen@ii wird zur Seitenhoehe
              \advance\dimen@ii -\topskip                   %%% \dimen@ii wird zur Seitenhoehe Minus 
              \advance\dimen@ii \md@space@above@frame       %%% \dimen@ii bekommt zusaetzlich den gewuenschten Oberen Abstand
           \else                                            %%% \dimen@ ist kleiner als die aktuelle Seitenhoehe
                                                            %%% Es ist ausreichend Platz auf der Seite
             \advance\dimen@.9\pageshrink                   %%% siehe oben -> \dimen@ wird vergroessert
             \ifdim\ht\tw@>\dimen@                          %%% Ist die Hoehe der abgesplitteten Box groesser als \dimen@
                \dimen@ii=\dimen@ 
             \else                                          %%% abgesplittete Box ist kleiner 
               \dimen@ii\ht\tw@                             %%% \dimen@ -> setze \dimen@ii auf aktuelle Boxgroesse
             \fi
           \fi
%%        % Re-box contents to desired size \dimen@ii
%%        \advance\dimen@ii -\md@frh
        \setbox\tw@\vbox to\dimen@ii %                     %%% Setze die abgesplittete Box auf \dimen@ii
           \bgroup
              \vskip -\z@ \@plus-\pagestretch \@minus-.8\pageshrink  %%% Entferne den simulierte Rahmen und Seitenflexibilitaet
              \unvbox\tw@ \unpenalty\unpenalty                       %%% \unpenalty entfernt einen vorangehenden \penalty
                                                                     %%% in der Arbeitsliste, falls ein solcher vorhanden ist
              \ifdim\lastkern=-137sp                                 %%% \lastkern liefert, falls das letzte Element eine \kern-Operation
                                                                     %%%  war, dieses aus. Das Element bleibt aber erhalten.
                                                                     %%%  Komplette Box geht auf naechste Seite
                  % need work here???
                  \egroup %%%Moegliches egroup
                  \md@resto@set 
                  \clearpage %%% ??? \eject % (\vskip for frame size was discarded) 
                  %\md@adjheight
                  \md@put@frame % INSERTED ???
              \else % Bekommt Material fuer das Abspalten am Kopf (Got material split off at the head)
                  \egroup %%%Moegliches egroup
                  \md@resto@set
                  \ifvoid\@tempboxa                   %%% prueft, ob die \tempbox@ (abgesplitteter unterer Teil) leer ist.
                        \setbox\@tempboxa\box\tw@
                        \ifmd@box@empty
                            \md@putbox@single %
                        \else
                            \md@putbox@second %
                        \fi
                        \md@afterframe
                  \else %    Es ist wirklich gesplittet mit oberen Teil in \tw@ und unteren Teil in \tempboxa@
                       \ifdim\wd\tw@>\z@         %%%Ist der Obere Teil breiter als 0pt
                           \wd\tw@\wd\@tempboxa  %%%setze die Beite des oberen Teils auf die Breite des unteren Teils
                           \global\md@content@splittrue %%%% Merke, dass Box gesplittet wird
                                                        %%%% gebe den oberen Teil der Box aus
                           \md@putbox@first      %%% Ausgabe der ersten Teilbox
                       \else %%Oberer Teil ist Leer
                           \box\tw@              %%% Ausgabe und Leerung
                       \fi
                       \hrule \@height\z@ \@width\hsize
                       \clearpage
                       \md@adjheight
                       \md@put@frame
                  \fi
              \fi
     \fi
   \fi
\fi
}


%%==================================================%%
%%=Ausgabe der Box nach Vorgabe der Ausagaberoutine=%%
%%==================================================%%
\let\md@textwidth\textwidth
\def\md@putbox@single{%%%%% Ausgabe der ungesplitteten Gesamtbox
  \ifvoid\@tempboxa
  \else
      \centerline{%
        \rlap{\color{\md@backgroundcolor}%
               \setlength{\fp@putboxa@length@md}{\ht\@tempboxa}%
               \addtolength{\fp@putboxa@length@md}{\baselineskip}%
               \addtolength{\fp@putboxa@length@md}{\md@framed@linewidth}%
               \rule[-0.5\baselineskip]{\md@textwidth}{\fp@putboxa@length@md}%
              }%
       \setlength{\fp@putboxa@length@md}{\ht\@tempboxa}%
       \addtolength{\fp@putboxa@length@md}{0.5\baselineskip}%
        \rlap{\md@@linecolor%
              \vrule width \md@framed@linewidth height \fp@putboxa@length@md%
              \rule[-0.5\baselineskip-\md@framed@linewidth]{\hsize-2\md@framed@linewidth}{\md@framed@linewidth}%
         }%
         \hfill%
         {\box\@tempboxa}%
         \hfill%
         \llap{\md@@linecolor%
               \llap{%
                    \rule[-0.5\baselineskip-\md@framed@linewidth]{0pt}{\md@framed@linewidth}%
                    \vrule width \md@framed@linewidth height \fp@putboxa@length@md}%
                    }%
              \llap{\md@@linecolor\rule[\fp@putboxa@length@md]{\hsize}{\md@framed@linewidth}}%
              }%
  \fi
}


\def\md@putbox@first{%%%% Ausgabe der Teilbox 1
     \centerline{%
          \rlap{\color{\md@backgroundcolor}%
               \setlength{\fp@putboxa@length@md}{\ht\tw@}%
               \addtolength{\fp@putboxa@length@md}{0.5\baselineskip}%
               \addtolength{\fp@putboxa@length@md}{-\md@framed@linewidth}%
               \rule{\md@textwidth}{\fp@putboxa@length@md}%
              }%
           \setlength{\fp@putboxa@length@md}{\ht\tw@}%
           \addtolength{\fp@putboxa@length@md}{0.5\baselineskip}%
           \rlap{\md@@linecolor%
                \vrule width \md@framed@linewidth height \fp@putboxa@length@md%
                \rule[\fp@putboxa@length@md-\md@framed@linewidth]{\hsize-\md@framed@linewidth}{\md@framed@linewidth}%
                 }%
           \hfill%
           {\box\tw@}%
           \hfill%
           \llap{\md@@linecolor%
                  \vrule width \md@framed@linewidth height \fp@putboxa@length@md%
                  }%
            }%%  ??? \centerline bad idea
}


\def\md@putbox@second{%%%%% Ausgabe der Teilbox 2
  \ifvoid\@tempboxa
  \else
      \centerline{%
         \rlap{\color{\md@backgroundcolor}%
               \setlength{\fp@putboxa@length@md}{\ht\@tempboxa}%
               \addtolength{\fp@putboxa@length@md}{.7\baselineskip}%
               \addtolength{\fp@putboxa@length@md}{\md@framed@linewidth}%
               \rule[-0.5\baselineskip-\md@framed@linewidth]{\md@textwidth}{\fp@putboxa@length@md}%
              }%
        \setlength{\fp@putboxa@length@md}{\ht\@tempboxa}%
        \addtolength{\fp@putboxa@length@md}{0.2\baselineskip}% %Linienueberschuss auf zweiter Seite
        \rlap{\md@@linecolor%
              \vrule width \md@framed@linewidth height \fp@putboxa@length@md%
              \rule[-0.5\baselineskip-\md@framed@linewidth]{\hsize-2\md@framed@linewidth}{\md@framed@linewidth}%
             }%
         \hfill%
         {\box\@tempboxa}%
         \hfill%
         \llap{\md@@linecolor%
               \llap{%
                    \rule[-0.5\baselineskip-\md@framed@linewidth]{0pt}{\md@framed@linewidth}%
                    \vrule width \md@framed@linewidth height \fp@putboxa@length@md}%
                    }%
              }%
  \fi
}



%%==================================================%%
%%======Deklaration nach der Ausgabe einer Box======%%
%%==================================================%%
\def\md@afterframe{%
    \global\md@content@splitfalse
    \global\md@box@emptyfalse
    \nointerlineskip \null %{\showoutput \showlists}
    \penalty-30 \vskip\topsep \relax
}

%%==================================================%%
%%=====Berechnung bzw. Festlegung des Abstandes=====%%
%%==================================================%%
\def\md@adjheight{%
     \ifdim\md@space@above@frame>\z@
        \vbox to 1.2\md@space@above@frame{}% get proper baseline skip from above.
        \nobreak \nointerlineskip
        \vskip-1.2\md@space@above@frame
        \penalty\@M%
    \else
        \vbox to \md@space@above@frame{}% get proper baseline skip from above.
        \penalty\@M \nointerlineskip
        \vskip-0.6\md@space@above@frame
        \penalty\@M%
   \fi
} % useful for tops of pages



%%%%%KEINE AHNUNG
\catcode`\|=\md@arrayparboxrestore  %%%????




% \md@arrayparboxrestore has parts of \@parboxrestore, performing a similar but 
% less complete restoration of a default layout.  See how it is used in the 
% "settings" argument of \MakeFrame.  Though not a parameter, \hsize 
% should be set to the desired total line width available inside the
% frame before invoking \md@arrayparboxrestore.  
\def\md@arrayparboxrestore{%
   %%%AUS ltboxes.dtx -> \@arrayparboxrestore
   \let\if@nobreak\iffalse
   \let\if@noskipsec\iffalse  
   \let\-\@dischyph                         %%%Default \let\@dischyph=\-
   \let\'\@acci\let\`\@accii\let\=\@acciii  %%%Default: \let\@acci\' \let\@accii\` \let\@acciii\= <- Sicher gehen
                                            %%%dass Defaultwerte erhalten sind
                                            %%%Scheinen Mathesymbole zu sein ???
   % Test ob Listenumgebung enthalten ist
   \ifnum \ifdim\@totalleftmargin>\z@ 1\fi  %%%In latex.ltx->totalleftmargin=\z@, ausser in list-Umgebung:
                                            %%%\advance\@totalleftmargin \leftmargin
          \ifdim\rightmargin     >\z@ 1\fi  %%%Default \rightmargin=\z@, ausnahme: quote usw.
          \ifnum\@listdepth      >0   1\fi  %%%Zaehler fuer Listentiefe -> Keine Liste \@listdepth=0 sonst, je ebene +1
           0>\z@                            %%%Ist ein Parameter erfuellt, dann ist es eine Listenumgebung
     \@setminipage                          %%%Passform rund um das Element
     % Nun wird versucht, Aenderungen der Breite von \hsize antsprechend der Listenparameter zu uebergeben.
     % Dies ist defizitaer, denn eine erweiterte Möglichkeit, Aenderungen der Textdimension anzugegeben
     % ist (noch) nicht vorgesehen, insbesondere keine getrennte linke / rechte Einstellung.
     \advance\linewidth-\columnwidth \advance\linewidth\hsize
     \parshape\@ne \@totalleftmargin \linewidth %%% parshape definiert das Aussehen  eines Absatzes Zeile fuer Zeile.
                                                %%% Seine Parameterversorgung geschieht mittels der folgenden Syntax:
                                                %%% \parshape = n i1 l1 i2 l2 ... in ln.
                                                %%% Dabei gibt der Parameter n an, fuer wieviele Zeilen Definitionspaare folgen.
                                                %%% Jedes Definitionspaar besteht aus der Angabe i_j fuer den Einzug und
                                                %%% der Laengenangabe l_j fuer die entsprechende Zeile. Sind mehr als n Zeilen
                                                %%% vorhanden, so wird die letzte Angabe stets weiter verwendet
   \else % Not in list
     \linewidth=\hsize
   \fi
   \sloppy
}

\endinput
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
