\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{figbib}[2004/08/12]
\usepackage{epsfig}

%
% Options
% --------
%
% center, nopics, nopages, nosource, addcaption, nocaption, maincaption, xpart, xplate, german
%
%
% Commands
% --------
%
% \figbibListHeader
% \figbibPage
% \figbibFig
% \figbibPlate
% \figbibFrom
%
% \fbCaptionStyle
% \fbListStyle
%
% \fbDirectory
%
% \figbibBst
%
% \fbhfill
% \fbhspace#1
% \fbvspace#1
%
% \fbList#1
% \fbTheFigs
%
% \fbEpsfig
% \fbEpsfigM
% \fbEps
% \fbEpsM
%
% \fbref[1]
% \fbpageref[1]
%
% \FigBib
%
%
% Environments
% ------------
%
% fbMinipage
% fbFloat
% fbForce
%
%
% Lengths
% -------
%
% \figbibhang
% \figbibsep
% \figbibskip
% \figbibcskip
%


\newcommand\figbibListHeader{List of Figures}
\newcommand\figbibPage{p.}
\newcommand\figbibFig{Fig.}
\newcommand\figbibPlate{Plate}
\newcommand\figbibFrom{From:}
\def\figbibFigp{\figbibFig}

\def\fbCaptionStyle{}
\def\fbListStyle{}

\def\figurename{\figbibFig}

\def\fbDirectory{}
\def\figbibBst{figbib}



\DeclareOption{german}{%
  \renewcommand\figbibListHeader{Abbildungsverzeichnis}%
  \renewcommand\figbibPage{S.}%
  \renewcommand\figbibFig{Abb.}%
  \renewcommand\figbibPlate{Tafel}%
  \renewcommand\figbibFrom{Aus:}}

\let\if@figbibrefpage\iftrue
\DeclareOption{nopages}{\let\if@figbibrefpage\iffalse}

\let\if@figbibpics\iftrue
\DeclareOption{nopics}{\let\if@figbibpics\iffalse}

\let\if@figbibadd\iffalse
\DeclareOption{addcaption}{\let\if@figbibadd\iftrue}

\let\if@figbibcaption\iftrue
\DeclareOption{nocaption}{\let\if@figbibcaption\iffalse}

\let\if@figbibxcaption\iftrue
\DeclareOption{maincaption}{\let\if@figbibxcaption\iffalse}

\let\if@figbibsource\iftrue
\DeclareOption{nosource}{\let\if@figbibsource\iffalse}

\let\if@figbibxpart\iffalse
\DeclareOption{xpart}{\let\if@figbibxpart\iftrue}

\DeclareOption{xplate}{\def\figbibFigp{\figbibPlate}}

\def\figbib@align{flushleft}
\DeclareOption{center}{\def\figbib@align{center}}

\ProcessOptions*



\newcounter{figbib@pcnt}
\newcounter{figbib@xcnt}

\def\figbib@bbl{\jobname.figbib.bbl}
\def\figbib@incx{\stepcounter{figbib@xcnt}
  \gdef\figbib@figfile{\jobname.figbib.\arabic{figbib@xcnt}.fig}}

\let\if@figbibpic\if@figbibpics

\if@filesw
  \newwrite\figbib@aux
  \immediate\openout\figbib@aux\jobname.figbib.aux
  \PackageInfo{figbib}{Writing figbib file \jobname.figbib.aux}%
  \if@figbibxpart
    \figbib@incx
    \newwrite\figbib@figaux
    \immediate\openout\figbib@figaux\figbib@figfile
    \PackageInfo{figbib}{Writing figbib file \figbib@figfile}%
  \fi
\fi

\def\figbib@EpsfigMain#1#2{%
  \immediate\write\@auxout{\string\figbibdefreftype{#1}{\figbibFig}}
  \if@figbibpic
    \epsfig{file=\fbDirectory\csname figbibf@#1\endcsname, width=#2}%
  \fi
  \expandafter\let\expandafter\figbib@actadd%
    \csname figbiba@#1\endcsname
  \expandafter\let\expandafter\figbib@actcap%
    \csname figbibc@#1\endcsname  
  \def\figbib@actmac{\csname figbibm@#1\endcsname%
     \if@figbibadd\ifx\figbib@actadd\@empty\else, \figbib@actadd\fi\fi%
  }%
  \caption{%
     \if@figbibxcaption
       \ifx\figbib@actcap\@empty\figbib@actmac\else\figbib@actcap\fi
     \else      
       \figbib@actmac
     \fi
  }%
  \label{figbib:#1}%
}%

\def\fbhfill{\hfill}
\def\fbhspace#1{\hspace{#1}}
\def\fbvspace#1{}
\newenvironment*{fbMinipage}[1]%
  {\begin{minipage}[t]{#1}\begin{\figbib@align}}{\end{\figbib@align}\end{minipage}}

\long\def\figbib@makecaption#1#2{%
  \def\@tempcaption{#1%
    \if@figbibcaption%
     : #2%
     \fi%
  }
  \fbCaptionStyle
  \sbox\@tempboxa{\@tempcaption}
  \ifdim \wd\@tempboxa >\hsize
    \@tempcaption\par
  \else
    \begin{\figbib@align}\@tempcaption\end{\figbib@align}
  \fi
}

\long\def\@makecaption#1#2{%
  \vskip\abovecaptionskip
  \figbib@makecaption{#1}{#2}
  \vskip\belowcaptionskip
} 
  
\def\figbibpcaption#1{\refstepcounter{figbib@pcnt}
  \begin{minipage}{\textwidth}
  \figbib@makecaption{\figbibFigp~\arabic{figbib@pcnt}}{#1}
  \end{minipage}
}
     
\if@figbibxpart
  \def\fbTheFigs{\immediate\closeout\figbib@figaux%
     \InputIfFileExists{\figbib@figfile}{}{\typeout{No file \figbib@figfile}}
     \figbib@incx
     \immediate\openout\figbib@figaux\figbib@figfile
     \PackageInfo{figbib}{Writing figbib file \figbib@figfile}%
  }   

  \def\b@fbFloat#1{
    %
    \def\figbib@EpsfigMain##1##2{%
      \immediate\write\@auxout{\string\figbibdefreftype{##1}{\figbibFigp}}
      {\figbib@noexpands
      \if@figbibpic
       \immediate\write\figbib@figaux{%
         \string\epsfig{file=\fbDirectory\csname figbibf@##1\endcsname, width=##2}
         \string\\[\figbibcskip]}
      \fi
      \expandafter\let\expandafter\figbib@actadd%
        \csname figbiba@##1\endcsname
      \expandafter\let\expandafter\figbib@actcap%
        \csname figbibc@##1\endcsname  
      \def\figbib@actmac{\csname figbibm@##1\endcsname%
         \if@figbibadd\ifx\figbib@actadd\@empty\else, \figbib@actadd\fi\fi%
      }%
      \immediate\write\figbib@figaux{
        \string\figbibpcaption{%
          \if@figbibxcaption
            \ifx\figbib@actcap\@empty\figbib@actmac\else\figbib@actcap\fi
          \else      
            \figbib@actmac
          \fi
        }%
        \string\label{figbib:##1}
      }%
      }%
    }%
    \def\fbhfill{\immediate\write\figbib@figaux{\string\hfill}}
    \def\fbhspace##1{\immediate\write\figbib@figaux{\string\hspace{##1}}}
    \def\fbvspace##1{\immediate\write\figbib@figaux{\string\vspace{##1}}}
    \renewenvironment*{fbMinipage}[1]%
      {\immediate\write\figbib@figaux{\string\begin{minipage}[t]{##1}\string\begin{\figbib@align}}}
      {\immediate\write\figbib@figaux{\string\end{\figbib@align}\string\end{minipage}}}
  }
  \def\e@fbFloat{\immediate\write\figbib@figaux{\string\\[\figbibskip]}}
%
\else
  \def\fbTheFigs{\relax}
  \def\b@fbFloat#1{\begin{figure}[#1]\begin{\figbib@align}}
  \def\e@fbFloat{\end{\figbib@align}\end{figure}}
\fi

\newenvironment*{fbFloat}[1][tbp]{\b@fbFloat{#1}}{\e@fbFloat}%
    
%%%

\def\figbib@noexpands{
  \def\"{\noexpand\"}%
  \def~{\noexpand~}%
  \def\emph{\noexpand\emph}\def\em{\noexpand\em}%
  \def\textit{\noexpand\textit}\def\it{\noexpand\it}%
  \def\textbf{\noexpand\textbf}\def\bf{\noexpand\bf}%
  \def\textsc{\noexpand\textsc}\def\sc{\noexpand\sc}%
  \def\texttt{\noexpand\texttt}\def\tt{\noexpand\tt}%
}
    
\def\figbibdefmain#1#2{\global\@namedef{figbibm@#1}{#2}}
\def\figbibdefadd#1#2{\global\@namedef{figbiba@#1}{#2}}
\def\figbibdeffile#1#2{\global\@namedef{figbibf@#1}{#2}}
\def\figbibdefcaption#1#2{\global\@namedef{figbibc@#1}{#2}}
\def\figbibdefreftype#1#2{\global\@namedef{figbibr@#1}{#2}}

%%%


\newcommand*{\fbEpsfig}[3]{%
  \if@filesw\immediate\write\figbib@aux{\string\citation{#1}}\fi
  \@ifundefined{figbibm@#1}{\mbox{\reset@font\bfseries \figbibFig ???}%
    \G@refundefinedtrue
    \PackageWarning{figbib}{Figure `#1' on page \thepage\space undefined}%
  }{%
    \begin{fbFloat}[#3]%
    \begin{fbMinipage}{\textwidth}
    \figbib@EpsfigMain{#1}{#2}
    \end{fbMinipage}%
    \end{fbFloat}%
  }}

\newcommand*{\fbEpsfigM}[3]{%
  \if@filesw\immediate\write\figbib@aux{\string\citation{#1}}\fi
  \@ifundefined{figbibm@#1}{\mbox{\reset@font\bfseries \figbibFig ???}%
    \G@refundefinedtrue
    \PackageWarning{figbib}{Figure `#1' on page \thepage\space undefined}%
  }{%
    \begin{fbFloat}[#3]%
    \begin{fbMinipage}{\textwidth}
    \begin{fbMinipage}{#2}
    \figbib@EpsfigMain{#1}{#2}
    \end{fbMinipage}%
    \end{fbMinipage}%
    \end{fbFloat}%
  }}

\newcommand*{\fbEps}[2]{%
  \if@filesw\immediate\write\figbib@aux{\string\citation{#1}}\fi
  \@ifundefined{figbibm@#1}{\mbox{\reset@font\bfseries \figbibFig ???}%
    \G@refundefinedtrue
    \PackageWarning{figbib}{Figure `#1' on page \thepage\space undefined}%
  }{%
    \begin{fbMinipage}{\textwidth}%
    \figbib@EpsfigMain{#1}{#2}
    \end{fbMinipage}%
  }}

\newcommand*{\fbEpsM}[2]{%
  \if@filesw\immediate\write\figbib@aux{\string\citation{#1}}\fi
  \@ifundefined{figbibm@#1}{\mbox{\reset@font\bfseries \figbibFig ???}%
    \G@refundefinedtrue
    \PackageWarning{figbib}{Figure `#1' on page \thepage\space undefined}%
  }{%
    \begin{fbMinipage}{#2}%
    \figbib@EpsfigMain{#1}{#2}
    \end{fbMinipage}%
  }}

%%%

\@ifundefined{chapter}
  {\def\figbib@section{%
     \section*{\figbibListHeader}%
     \addcontentsline{toc}{section}{\figbibListHeader}}}%
  {\def\figbib@section{%
     \chapter*{\figbibListHeader}%
     \addcontentsline{toc}{chapter}{\figbibListHeader}}}

\def\fbList#1{%
  \if@filesw
    \immediate\write\figbib@aux{\string\bibstyle{\figbibBst}}%
    \immediate\write\figbib@aux{\string\bibdata{#1}}%
  \fi
  \InputIfFileExists{\figbib@bbl}{}{\typeout{No file \figbib@bbl}}
}

\newlength{\figbibhang}
\setlength{\figbibhang}{1cm}
\newlength{\figbibsep}
\setlength{\figbibsep}{1ex}
\newlength{\figbibskip}
\setlength{\figbibskip}{4ex}
\newlength{\figbibcskip}
\setlength{\figbibcskip}{1ex}

\newenvironment{thefigbiblist}{%
  \ifx\figbibListHeader\@empty\else\figbib@section\fi%
  \begin{list}{\relax}{%
        \def\makelabel##1{##1\hfil}%
        \setlength{\labelsep}{0.5em}%
        \setlength{\labelwidth}{\figbibhang}%
        \addtolength{\labelwidth}{-\labelsep}%
        \setlength{\itemindent}{0em}%
        \setlength{\parsep}{0ex}%
        \setlength{\leftmargin}{\figbibhang}%
        \setlength{\itemsep}{\figbibsep}}\fbListStyle%
  }{\end{list}}

\newcommand*\fbref[1]{%
  \@ifundefined{figbibr@#1}{\figbibFig}{\csname figbibr@#1\endcsname} \ref{figbib:#1}}

\newcommand*\fbpageref[1]{\figbibPage~\pageref{figbib:#1}}

\newcommand*{\figbibitem}[6]{%
  {%
    \figbib@noexpands
    \immediate\write\@auxout{\string\figbibdefmain{#1}{#2}}
    \immediate\write\@auxout{\string\figbibdefadd{#1}{#3}}
    \immediate\write\@auxout{\string\figbibdeffile{#1}{#4}}
    \immediate\write\@auxout{\string\figbibdefcaption{#1}{#6}}
  }%
  \item[\@ifundefined{figbibr@#1}{\figbibFig}{\csname figbibr@#1\endcsname}~\ref{figbib:#1}%
  \if@figbibrefpage%
    \ (\figbibPage~\pageref{figbib:#1})%
  \fi%
  :] #2%
  \ifx #3\@empty\else, #3\fi
  .%
  \if@figbibsource\ifx #5\@empty\else\ \figbibFrom\ #5\fi\fi
}

\newenvironment{fbForce}{\let\if@figbibpic\iftrue}{\let\if@figbibpic\if@figbibpics}

\def\FigBib{{\rmfamily F\kern-.05em\lower-.35ex\hbox{\textsc{i\kern-.025em g}}\kern-.05em%
    B\kern-.05em\textsc{i\kern-.025em b}}}
    
\endinput