% sidefig.sty
\RequirePackage{ifthen}
\RequirePackage{calc}

\newsavebox{\figbox}
\newlength{\leftnegwidth}
\setlength{\leftnegwidth}
 {\marginparwidth+\marginparsep}
\newcommand{\@lab}{}
\newcommand{\@cap}{}
\newcommand{\@captp}{}

% \begin{sidefig}[type]{caption}{label}
% <figure> or <table>
% \end{sidefig}
\newenvironment{sidefig}[3][figure]
{ \renewcommand{\@lab}{\pageref{#3}}
  \renewcommand{\@captp}{#1}
  \renewcommand{\@makecaption}[2]
    {\raggedright\textbf{##1}\\##2}
  \renewcommand{\@cap}{\caption{#2\label{#3}}}
  \begin{lrbox}{\figbox}
  \begin{minipage}{\textwidth}\centering
}
% schliessender Teil
{ \end{minipage}\end{lrbox}
  \@float{\@captp}
  % Label schon im Hilfsfile?
  \ifthenelse{\equal{\@lab}{}}
    % nein, dann einfach Bild drucken
    {\usebox{\figbox}}
    % ja, dann gerade-ungerade-Test durchfuehren
    {\ifthenelse{\isodd{\@lab}}
      % ungerade Seite: Legende rechts
      {\parbox{\textwidth+\leftnegwidth}
         {\usebox{\figbox}
          \hfil
          \begin{minipage}[c]{\marginparwidth}
            \@cap
          \end{minipage}
         }
      }
      % gerade Seite: Legende links
      {\hspace*{-\leftnegwidth}%
       \parbox{\textwidth+\leftnegwidth}
         {\begin{minipage}[c]{\marginparwidth}
            \@cap
          \end{minipage}
          \hfil
          \usebox{\figbox}
         }
      }
    }
  \end@float}