Blob Blame History Raw
%%
%% This is file `bibtopic.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% bibtopic.dtx  (with options: `package')
%% 
%% LaTeX package for multiple bibliographies
%% 
%% Copyright (C) 1998-2000 P. Basso, S. Ulrich
%%               2001-2004 S. Ulrich
%% 
%% Please send bug reports to: <stefanulrich@users.sourceforge.net>
%% 
%% This program is free software; you can redistribute it and/or
%% modify it under the terms of the GNU General Public License
%% as published by the Free Software Foundation; either version 2
%% of the License, or (at your option) any later version.
%% 
%% This program is distributed in the hope that it will be useful,
%% but WITHOUT ANY WARRANTY; without even the implied warranty of
%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%% GNU General Public License for more details.
%% 
%% You should have received a copy of the GNU General Public License
%% along with this program; if not, write to the Free Software
%% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
%% 
\NeedsTeXFormat{LaTeX2e}[1996/12/01] \ProvidesPackage{bibtopic}[2002/08/22 v1.0k
Sectioned Bibliographies]
\RequirePackage{ifthen}
\newcommand\bt@tempa{}
\newcommand\bt@tempb{}
\newcommand\bt@tempc{}
\newcommand\bt@args{}
\newcommand*\bt@info{\@gobble}
\newcommand*\bt@infoNoLine{\@gobble}
\newcommand\bt@gobblethree[3]{}
\newif\ifbt@natbib
\newif\ifbt@koma@class
\newif\ifbt@brf
\newif\ifbt@after@brf
\newif\ifbt@elem
\newif\ifbt@inside@sect
\newif\ifbt@inside@unit
\newif\ifbt@found@item
\newif\ifbt@print@cited
\newif\ifbt@print@all
\newif\if@globalbiblio
\newcommand\bt@stepcnt[1]{%
     \@tempcnta#1
     \advance\@tempcnta\@ne
     \protected@xdef#1{\the\@tempcnta}%
}
\newcounter{btauxfile}
\def\thebtauxfile{\jobname\arabic{btauxfile}}
\newcommand\bt@unit@cnt{1}
\newcommand\bt@internal@sect@cnt{0}
\newcommand\bt@helpctr{0}
\newcommand\bt@totalctr{0}
\newread\bt@infilea
\newread\bt@infileb
\newwrite\bt@outfile

\newif\ifbt@btunits
\DeclareOption{btunits}{%
    \PackageWarningNoLine{bibtopic}{ignoring obsolete `btunits' option}
}
\newif\ifbt@fallback@thb
\DeclareOption{defaultbib}{%
    \global\bt@fallback@thbtrue
}
\DeclareOption{verbose}{%    
    \def\bt@info#1{%
        \begingroup
            \def\MessageBreak{^^J(bibtopic)\@spaces\@spaces\@spaces}%
            \set@display@protect
            \immediate\write\@unused{%
                ^^JPackage bibtopic info: #1\on@line.^^J%
            }%
        \endgroup
    }%
    \def\bt@infoNoLine#1{%
        \begingroup
            \def\MessageBreak{^^J(bibtopic)\@spaces\@spaces\@spaces}%
            \set@display@protect
            \immediate\write\@unused{%
                ^^JPackage bibtopic info: #1.^^J%
            }%
        \endgroup
    }%
}
\newif\ifbt@breakcites
\DeclareOption{breakcites}{%
    \global\bt@breakcitestrue
}
\newif\ifbt@normalwarnings
\DeclareOption{normalwarnings}{%
    \global\bt@normalwarningstrue
}
\newif\ifbt@printheadings
\DeclareOption{printheadings}{%
    \global\bt@printheadingstrue
}
\newif\ifbt@part@cont@ctr
\DeclareOption{unitcntnoreset}{%
    \global\bt@part@cont@ctrtrue
}
\newif\ifbt@sectctr@reset
\DeclareOption{sectcntreset}{%
    \global\bt@sectctr@resettrue
}
\newif\ifbt@fast
\bt@fasttrue
\DeclareOption{slow}{%
    \global\bt@fastfalse
}
\DeclareOption{dot}{%
   \def\thebtauxfile{\jobname.\arabic{btauxfile}}%
}
\newif\ifbt@warn@override
\bt@warn@overridetrue
\newif\ifbt@override@numargs
\bt@override@numargstrue
\newif\ifbt@overridden@numargs
\DeclareOption{overridenumbers}{%
    \bt@warn@overridefalse
    \bt@override@numargstrue
}
\DeclareOption{dontoverridenumbers}{%
    \bt@warn@overridefalse
    \bt@override@numargsfalse
}
\ProcessOptions*

\newcommand\bt@isnum[1]{%
    \if!\ifnum9<1#1!\else_\fi
        \expandafter\@firstoftwo
    \else
        \expandafter\@secondoftwo
    \fi
}

\newcommand*\bt@sect@ref@list{}
\newcommand\bt@curr@file{}
\newcommand\bt@curr@line{}
\newcommand*\bt@kv@req@list{}

\newcommand*\bt@curr@bib@file{}
\newcommand*\bt@cited@list{}
\newcommand*\bt@warn@files{}
\newcommand*\bt@label{}
\newcommand*\bt@globalstyle{}%
\newcommand*\bt@defaultstyle{plain}%
\newcommand*\@bt@orig@citation{}
\let\@bt@orig@citation\citation
\ifthenelse{\boolean{bt@fast}}{%
   \def\citation#1{%
      \@for\bt@tempa:=#1\do{%
        \def\@extra@b@citeb{\bt@unit@cnt}%
        \global\@namedef{\bt@tempa bt@\@extra@binfo}{}%
        \@bt@orig@citation{\bt@tempa}%
      }%
   }%
}{%
   \def\citation#1{%
      \@for\bt@tempa:=#1\do{%
        \def\@extra@b@citeb{\bt@unit@cnt}%
        \bt@add@elem{\bt@tempa}{\bt@cited@list}%
        \@bt@orig@citation{\bt@tempa}%
      }%
   }%
}
\newcommand*\bt@citesurround{}%

\def\bt@citesurround#1{%
    \ifthenelse{\not\boolean{bt@breakcites}}{%
        \hbox{#1}%
    }{%
        #1%
    }%
}
\@ifundefined{citeform}{\let\citeform\relax}{}
\@ifundefined{citepunct}{\def\citepunct{,\penalty\@m\ }}{}
\@ifpackageloaded{backref}{%
    \bt@after@brftrue
}{%
    \relax
}
\newcommand\bt@citex{}
\def\bt@citex[#1]#2{%  Add \@extra@b@citeb to \cite
    \let\@citea\@empty
    \@cite{%
        \@for\@citeb:=#2\do{%
            \@citea\let\@citea\citepunct
            \edef\@citeb{\expandafter\@firstofone\@citeb}%
            \if@filesw\immediate\write\@auxout{%
                \string\citation{\@citeb}}\fi
            \@ifundefined{b@\@citeb \@extra@b@citeb}{%
                \mbox{\reset@font\bfseries ?}%
                \@warning{Citation `\@citeb' on page \thepage\space
                undefined}\G@refundefinedtrue
            }{%
                \bt@citesurround{\citeform{\csname b@\@citeb
                \@extra@b@citeb\endcsname}}%
            }%
        }%
    }{#1}%
}
\newcommand\bt@nocite{}
\def\bt@nocite#1{%
    \@bsphack % Add \@extra@b@citeb to \nocite
    \@for\@citeb:=#1\do{%
        \edef\@citeb{\expandafter\@firstofone\@citeb}%
        \if@filesw
            \immediate\write\@auxout{%
                \string\citation{\@citeb}%
            }%
        \fi
        \@ifundefined{b@\@citeb\@extra@b@citeb}{%
            \G@refundefinedtrue
            \@warning{Citation `\@citeb'  undefined}%
        }{}%
    }%
    \@esphack
}

\newcommand*\bt@setcites{%
    \let\@citex\bt@citex
    \let\nocite\bt@nocite
}

\newcommand\change@bibcite{%
    \let\change@bibcite\relax
    \def\bibcite##1##2{%
        \global\@namedef{b@##1\@extra@binfo}{##2}%
    }%
}
\gdef\the@ipfilectr{}
\def\@extra@b@citeb{\the@ipfilectr}
\gdef\@extra@binfo{}  % in case .aux files are left from old run.

\newcommand\bt@saveitem{}
\newcommand*\bt@savebib{}
\newcommand*\bt@endsavebib{}
\newif\ifbt@harvard@errs

\AtBeginDocument{%
    \@ifclassloaded{scrbook}{%
        \global\bt@koma@classtrue
    }{%
        \@ifclassloaded{scrartcl}{%
            \global\bt@koma@classtrue
        }{%
            \@ifclassloaded{scrreprt}{%
                \global\bt@koma@classtrue
            }{%
                \relax
            }%
        }%
    }%
    \global\let\bt@savebib\thebibliography
    \global\let\bt@endsavebib\endthebibliography
    \let\bt@saveitem\bibitem
    \@ifpackageloaded{natbib}{%
        \global\bt@natbibtrue
    }{%
        \def\harvarditem{\global\bt@harvard@errstrue}%
        \let\harvardand\relax
        \let\harvardyearleft\relax
        \let\harvardyearright\relax
    }%
    \@ifpackageloaded{backref}{%
        \ifthenelse{\not\boolean{bt@after@brf}}{%
            \PackageError{%
                bibtopic%
            }{%
                Load bibtopic after hyperref when using the `backref'
                option\MessageBreak of hyperref%
            }{%
                Please see the section about `Compatibility with other^^J%
                packages' in bibtopic.dvi for details.
            }%
        }{}%
        \global\bt@brftrue
    }{%
        \relax
    }%
}

\AtEndDocument{%
    \immediate\write\@auxout{%
        \string\csname\space bt@set@cnt\string\endcsname{\bt@helpctr}}%
    \def\citation#1{\@bt@orig@citation{#1}}%
    \let\bt@kv@add\@gobbletwo
    \bt@files@warnings
    \ifnum\bt@helpctr=\bt@totalctr\else
        \PackageWarningNoLine{%
            bibtopic%
        }{%
            Rerun to get indentation of bibitems right%
        }%
    \fi
}
\newcommand*\bt@savelist{}
\newcommand*\bt@append@list[2]{%
    \let\bt@savelist#2
    \protected@xdef#2{\bt@savelist\@elt{#1}}%
}
\newcommand*\bt@add@elem[2]{%
    \bt@if@elem{#1}{#2}{%
        \relax
    }{%
        \bt@append@list{#1}{#2}%
    }%
}
\newcommand\bt@test@cmd{}
\newcommand*\bt@if@elem[2]{%
    \let\bt@test@cmd\@secondoftwo
    \let\bt@elt\@elt
    \protected@edef\bt@tempc{#1}%
    \def\@elt##1{%
        \protected@edef\bt@tempb{##1}%
        \ifx\bt@tempc\bt@tempb
            \let\bt@test@cmd\@firstoftwo
        \fi
    }%
    #2%
    \let\@elt\bt@elt
    \bt@test@cmd
}
\newcommand\bt@elt{}
\newcommand*\bt@mk@warning@list[1]{%
    \@temptokena={}%
    \let\bt@elt\@elt
    \def\@elt##1{%
        \@temptokena=\expandafter{\the\@temptokena ##1\MessageBreak}%
    }%
    #1%
    \let\@elt\bt@elt
}

\newcommand*\@orig@bibliographystyle{}
\let\@orig@bibliographystyle\bibliographystyle
\def\bibliographystyle#1{%
    \gdef\bt@globalstyle{#1}%
    \bt@info{Default bibliographystyle is `#1'}%
    \@orig@bibliographystyle{#1}%
}
\def\bibliography{%
    \PackageWarning{%
        bibtopic%
    }{%
        Ignoring `\string\bibliography' command\MessageBreak
        (not compatible with bibtopic.sty)%
    }%
    \@gobble
}

\newcommand*\@bt@write@auxfile[3]{%
    \bt@can@overwrite{btaux.aux}%
    \bt@copy@verbatim{\thebtauxfile.aux}{btaux.aux}%    
    \immediate\closeout\bt@outfile
    \immediate\openout\bt@outfile\thebtauxfile.aux
    \ifthenelse{\boolean{bt@natbib}}{%
        \immediate\write\bt@outfile{%
                \@percentchar\@percentchar\space
                Info from `bibtopic.sty': natbib loaded.^^J%
                \string\bibstyle{#1}^^J%
                \string\citation{#2}^^J%
                \string\bibdata{#3}%
        }%
    }{%
        \immediate\write\bt@outfile{%
            \string\bibstyle{#1}^^J%
            \string\citation{#2}^^J%
            \string\bibdata{#3}%
        }%
    }%
    \immediate\closeout\bt@outfile
    \bt@if@files@differ{\thebtauxfile.aux}{btaux.aux}{%
        \bt@if@elem{\thebtauxfile}{\bt@warn@files}{%
            \relax
        }{%
            \ifthenelse{\boolean{bt@normalwarnings}}{%
                \PackageWarningNoLine{%
                    bibtopic%
                }{%
                    \thebtauxfile.bbl may be outdated%
                }%
            }{%
                \bt@appendtofile{\thebtauxfile.bbl}{%
                    \string\csname\space
                    bt@warn@outdated\string\endcsname{\thebtauxfile}%
                }%
            }%
        }%
    }{}% they don't differ
}

\newcommand*\bt@appendtofile[2]{%
    \bt@can@overwrite{btbbl.aux}%
    \bt@copy@verbatim{#1}{btbbl.aux}%
    \immediate\closeout\bt@outfile
    \bt@copy@verbatim{btbbl.aux}{#1}
    \immediate\write\bt@outfile{\expandafter\string #2}%
    \immediate\closeout\bt@outfile
}

\newcommand*\bt@save@list[1]{%
    \expandafter\protected@xdef\csname bt@sect%
       #1\endcsname{\bt@cited@list}%
}
\newcommand\btBegThbCmd{}
\newcommand*\bt@beg@thb@hook{%
    \btBegThbCmd
    \global\bt@found@itemfalse
    \bt@item{}%
}%
\newcommand\bt@save@cnt{0}
\newcommand*\bt@end@thb@hook{%
    \endbt@item
    \ifthenelse{\boolean{bt@natbib}}{%
        \protected@xdef\bt@save@cnt{\theNAT@ctr}%
    }{%
        \protected@xdef\bt@save@cnt{\@arabic\c@enumiv}%
    }%
    \bt@bibitemcheck
}%
\newcommand*\bt@change@bibitem{%
    \expandafter\ifx\btBegThbCmd\empty\else
            \bt@info{\string\btBegThbCmd nonempty: \meaning\btBegThbCmd}%
    \fi
    \ifthenelse{\boolean{bt@natbib}}{%
        \def\harvarditem{\endbt@item\bt@harvitem}%
    }{}%
    \def\bibitem{\endbt@item\bt@item}%
}
\newcommand*\bt@adjust@label[1]{%     
    \bt@isnum{#1}{%
        \def\bt@label{\bt@totalctr}%
    }{%
        \def\bt@label{#1}%
    }%
}
\newcommand*\bt@change@thb{%
    \long\def\bt@tempa##1##2\endthebibliography{%
        \def\bt@tempc{##1}%
    }%
    \expandafter\bt@tempa\thebibliography{}\endthebibliography
    \ifthenelse{\boolean{bt@brf}}{%
        \@ifundefined{BRorg@thebibliography}{%
            \PackageInfo{bibtopic}{assuming backref.sty <= v1.16}%
            \let\bt@brf@bbl@cmd\oldbibl
        }{%
            \PackageInfo{bibtopic}{assuming backref.sty >= v1.19}%
            \let\bt@brf@bbl@cmd\BRorg@thebibliography
        }%
        \def\bt@tempb{\@starttoc}%
        \ifx\bt@tempb\bt@tempc
            \expandafter\bt@tempa\bt@brf@bbl@cmd{}\endthebibliography
        \fi
    }{}%
    \def\bt@tempa{\bibfont}%
    \ifx\bt@tempa\bt@tempc %
        \bt@change@nat@thb
    \else
        \def\bt@tempa{\bibsection}%
        \ifx\bt@tempa\bt@tempc
            \bt@change@nat@thb
        \else
            \def\bt@tempa{\bib@heading}%
            \ifx\bt@tempa\bt@tempc
                \bt@change@KOMA@thb
            \else
                \def\bt@tempa{\chapter}%
                \ifx\bt@tempa\bt@tempc
                    \bt@change@standard@thb
                \else
                    \def\bt@tempa{\section}%
                    \ifx\bt@tempa\bt@tempc
                    \bt@change@standard@thb
                    \else
                        \ifbt@koma@class
                            \bt@change@KOMA@thb
                        \else
                            \ifthenelse{\boolean{bt@fallback@thb}}{%
                                \PackageWarning{%
                                    bibtopic%
                                }{%
                                    `defaultbib' specified; using
                                    built-in\MessageBreak
                                    `thebibliography' environment%
                                }%
                                \let\thebibliography\bt@dflt@bthb
                                \let\endthebibliography\bt@dflt@ethb
                            }{%
                                \PackageError{%
                                    bibtopic%
                                }{%
                                    Found unknown `thebibliography' environment%
                                }{%
                                    You should either use a package providing
                                    a known bibliography^^J%
                                    environment (such as natbib), or use the
                                    `defaultbib' package^^J%
                                    option as a workaround; please see the
                                    section about `Warnings^^J%
                                    and error messages' in `bibtopic.dvi' for
                                    details.
                                }%
                            }%
                        \fi
                    \fi
                \fi
            \fi
        \fi
    \fi
}

\providecommand\@openbib@code{}
\newcommand\bt@dflt@bthb[1]{%
    \bt@adjust@label{#1}%
    \ifthenelse{\boolean{bt@printheadings}}{%
        \@ifundefined{chapter}{%
            \@ifundefined{section}{%
            \@startsection{section}{1}{\z@}%
                {-3.5ex \@plus -1ex \@minus -.2ex}%
                {2.3ex \@plus.2ex}%
                {\normalfont\Large\bfseries}*{\refname}%
            }{%
            \section*{\refname\@mkboth{\refname}{\refname}}%
            }%
        }{%
            \chapter*{\bibname\@mkboth{\bibname}{\bibname}}%
        }%
    }{}%
    \list{\@biblabel{\@arabic\c@enumiv}}{%
        \settowidth\labelwidth{\@biblabel{#1}}%
        \leftmargin\labelwidth
        \advance\leftmargin\labelsep
        \@openbib@code
        \ifthenelse{\boolean{bt@sectctr@reset}}{%
            \usecounter{enumiv}%
        }{%
            \@nmbrlisttrue
            \def\@listctr{enumiv}%
        }%
        \let\p@enumiv\@empty
        \renewcommand*\theenumiv{\@arabic\c@enumiv}%
    }%
    \sloppy\clubpenalty4000\widowpenalty4000%
    \sfcode`\.=\@m
    \bt@beg@thb@hook
}%

\newcommand\bt@dflt@ethb{%
    \bt@end@thb@hook
    \def\@noitemerr{%
        \@latex@warning{Empty `thebibliography' environment}%
    }%
    \endlist
}%

\newcommand\bt@change@nat@thb{%
    \def\thebibliography##1{%
        \bt@adjust@label{##1}%
        \ifthenelse{\not\boolean{bt@printheadings}}{%
            \let\bibsection\relax
        }{}%
        \bt@savebib{\bt@label}%    
        \ifthenelse{\not\boolean{bt@sectctr@reset}}{%
            \setcounter{NAT@ctr}{\bt@save@cnt}%
        }{}%
        \bt@beg@thb@hook
    }%
    \def\endthebibliography{%
       \bt@end@thb@hook
       %   \bt@endsavebib %% not; define it explicitly instead:
       \def\@noitemerr{%
           \PackageWarning{%
              bibtopic%
           }{%
              Empty `thebibliography' environment%
           }%
       }%
       \endlist % \vskip-\lastskip omitted here
    }%
}

\newcommand*\bt@change@standard@thb{%
    \def\thebibliography##1{%
        \bt@adjust@label{##1}%
        \ifthenelse{\not\boolean{bt@printheadings}}{%
            \let\chapter\@gobbletwo
            \let\section\@gobbletwo
        }{}%
        \bt@savebib{\bt@label}%
        \ifthenelse{\not\boolean{bt@sectctr@reset}}{%
            \setcounter{enumiv}{\bt@save@cnt}%
        }{}%
        \bt@beg@thb@hook
    }%
    \def\endthebibliography{%
        \bt@end@thb@hook
        \bt@endsavebib
    }%
}
\newcommand*\bt@change@KOMA@thb{%
    \ifthenelse{\not\boolean{bt@printheadings}}{%
        \let\bib@heading\relax
    }{}%
    \bt@change@standard@thb
}

\newcommand\bt@harvitem{%
    \@ifnextchar[{\bt@@harvitem}{\bt@@harvitem[]}%] brace matching
}

\newcommand*\bt@@harvitem[4][]{%
    \ifthenelse{\equal{#1}{}}{%
        \protected@xdef\bt@args{[#2(#3)]}%
    }{%
        \bt@warn@brackets{#2}#1[]\end%
        \protected@xdef\bt@args{[#1(#3)#2]}%
    }%
    \bt@call@item{#4}%
}
\newenvironment{bt@item}{%
    \@ifnextchar[{\bt@@item}{\bt@@item[]}%] brace matching
}{
    \relax
}
\newcommand*\bt@@item[2][]{%
    \ifthenelse{\equal{#2}{}}{%
        \def\endbt@item{\relax}%
    }{%
        \ifthenelse{\equal{#1}{}}{%
            \gdef\bt@args{}%
        }{%
            \bt@isnum{#1}{%
                \ifthenelse{\boolean{bt@override@numargs}}{%
                    \global\bt@overridden@numargstrue
                    \gdef\bt@args{}%
                }{%
                    \bt@warn@brackets{#2}#1[]\end%
                    \protected@xdef\bt@args{[#1]}%
                }%
            }{%
                \bt@warn@brackets{#2}#1[]\end%
                \protected@xdef\bt@args{[#1]}%
            }%
        }%
        \bt@call@item{#2}%
    }%
}
\newcommand*\bt@warn@brackets{}
\def\bt@warn@brackets#1#2[#3]#4\end{%
    \ifthenelse{\equal{#3}{}}{%
        \relax
    }{%
        \PackageError{%
            bibtopic%
        }{%
            Can't parse brackets in key `#1' properly%
        }{%
            You seem to have used brackets `[]' inside that key in^^J%
            `\bt@curr@bib@file.bib', and bibtopic could have confused these^^J%
            with the optional argument of the `\string\bibitem' command.^^J%
            To avoid this, please `hide' such brackets in an extra pair^^J%
            of braces, like this: `{[]}'.^^J^^J%
            (Don't forget to rerun BibTeX on `\thebtauxfile' afterwards.)^^J%
            If you proceed now, your bibliograpy may look somewhat garbled.
        }%
    }%
}

\newcommand*\bt@boxing@hook{%
    \global\let\@noitemerr\relax
    \def\cite{%
        \@ifstar{}{}% just gobble it
        \@ifnextchar[{% brace matching ]}{
            \@citex
        }{%
            \@citex[]%
        }%
    }
    \def\@citex[##1]{%
        \@ifnextchar[{%]}{
            \bt@gobble@citex[##1]%
        }{%
            \bt@gobble@citex[##1][]%
        }%
    }%
    \def\bt@gobble@citex[##1][##2]##3{}%
    \let\citet\cite
    \let\Citet\cite
    \let\citep\cite
    \let\Citep\cite
    \let\citealt\cite
    \let\Citealt\cite
    \let\citealp\cite
    \let\Citealp\cite
    \let\citetext\cite
    \let\citeauthor\cite
    \let\Citeauthor\cite
    \let\citeauthoryear\cite
    \let\citeyearpar\cite
    \let\citetalias\cite
    \let\citepalias\cite
    \let\jbdoitem\relax
    \let\jbbibargs\bt@gobblethree
}

\newcommand*\bt@call@item{}
\ifthenelse{\boolean{bt@fast}}{%
   \def\bt@call@item#1{%
       \@ifundefined{#1bt@\@extra@b@citeb}{%
           \bt@print@all@or@notcited{#1}%
       }{%
           \bt@print@all@or@cited{#1}%
       }%
   }
}{%
   \def\bt@call@item#1{%
       \def\endbt@item{\relax}%
       \bt@if@elem{#1}{\csname bt@sect\bt@unit@cnt\endcsname}{%
           \bt@print@all@or@cited{#1}%
       }{%
           \bt@print@all@or@notcited{#1}%
       }%
   }%
}

\newcommand*\bt@print@all@or@cited[1]{%
    \ifthenelse{\boolean{bt@print@cited}}{%
        \bt@do@print@item{#1}%
    }{%
        \ifthenelse{\boolean{bt@print@all}}{%
            \bt@do@print@item{#1}%
        }{%
            \bt@dont@print@item
        }%
    }%
}
\newcommand*\bt@print@all@or@notcited[1]{%
    \ifthenelse{\boolean{bt@print@cited}}{%
        \bt@dont@print@item
    }{%
        \bt@do@print@item{#1}%
    }%
}
\newcommand*\bt@do@print@item[1]{%
    \global\bt@found@itemtrue
    \bt@stepcnt\bt@helpctr
    \bt@if@elem{#1}{\bt@kv@req@list}{%
        \bt@add@elem{#1}{\bt@sect@ref@list}%    
    }{}%
    \def\endbt@item{\relax}%
    \expandafter\bt@saveitem\bt@args{#1}%
}

\newbox\bt@tempboxa

\newcommand*\bt@dont@print@item{%
    \def\endbt@item{%
        \end{lrbox}%
    }%
    \begin{lrbox}{\bt@tempboxa}%
    \bt@boxing@hook
}
\newcommand\bt@copy@verbatim[2]{%
    \openin\bt@infilea=#1\relax
    \immediate\openout\bt@outfile=#2\relax
    \immediate\write\bt@outfile{%
        \@percentchar%
        \@percentchar%
        \@percentchar%
        \space produced automatically by bibtopic.sty v1.0k%
    }%
    \begingroup
        \let\do\@makeother \dospecials
        \endlinechar\m@ne
        \ifeof\bt@infilea
            \bt@info{Tried to copy #1, but couldn't find it}%
        \else
            \loop
                \read\bt@infilea to\bt@tempa
                % same trick as with \if!...!
                \if\ifeof\bt@infilea 0\else 1\fi 1
                \immediate\write\bt@outfile{\bt@tempa}%
            \repeat
        \fi
    \endgroup
    \closein\bt@infilea
}
\newcommand*\bt@can@overwrite[1]{%
    \openin\bt@infilea=#1\relax
    \bgroup
        \let\do\@makeother \dospecials
        \endlinechar\m@ne
        \ifeof\bt@infilea
            \bt@info{File `#1' doesn't exist}%
        \else
            \read\bt@infilea to\@tempa
            \ifeof\bt@infilea
                \bt@info{File `#1' is empty}%
            \else
            \bt@if@signatureline{\@tempa}{%
                \relax
            }{%
                \PackageError{bibtopic}{%
                    file `#1' not written by bibtopic%
                }{%
                    The file `#1' looks as if it hasn't been written
                    by bibtopic;^^J%
                    however, bibtopic would now try to overwrite this file.^^J%
                    (See section 3 in bibtopic.dvi for more details.)^^J%
                    If this file contains anything important, please^^J%
                    copy its contents to a safe place now.^^J^^J%
                    If you hit RETURN now, this file will be overwritten.^^J%
                }%
            }%
            \fi
        \fi
    \egroup
    \closein\bt@infilea
}

\newcommand\bt@version{0}
\newcommand\bt@if@@signatureline{}
\newcommand\bt@if@signatureline{}
{
\catcode`\ =12
\catcode`\%=12
\endlinechar\m@ne
\gdef\bt@if@signatureline#1{
\expandafter\bt@if@@signatureline
#1%%% produced automatically by bibtopic.sty v.%%%\end
}
\gdef\bt@if@@signatureline
#1%%% produced automatically by bibtopic.sty v#2.#3%%%#4\end{
\ifx\\#2\\
\let\bt@tempc\@secondoftwo
\else
\def\bt@version{#2.#3}
\let\bt@tempc\@firstoftwo
\fi
\bt@tempc
}
}

\newif\ifbt@cont
\newif\ifbt@files@diff
\newcommand\bt@line@cnt{}
\newcommand*\bt@if@files@differ[4]{%    
    \bt@files@difffalse
    \def\bt@line@cnt{0}%
    \bgroup
        \let\do\@makeother
        \dospecials
        \endlinechar-1
        \openin\bt@infilea=#1
        \openin\bt@infileb=#2
        \bt@conttrue
        \loop
        \ifeof\bt@infilea
            \bt@contfalse
            \ifeof\bt@infileb
            \else
                \global\bt@files@difftrue
            \fi
        \else
            \ifeof\bt@infileb
                \bt@contfalse
                \global\bt@files@difftrue
            \fi
        \fi
        \ifbt@cont
            \read\bt@infilea to\bt@tempa
            \read\bt@infileb to\bt@tempb
            \bt@stepcnt{\bt@line@cnt}%
            \ifnum\bt@line@cnt=1
                \bt@if@signatureline{\bt@tempb}{%
                    \read\bt@infileb to\bt@tempb
                }{}%
            \fi
            \ifx\bt@tempa\bt@tempb
            \else
                \bt@contfalse
                \global\bt@files@difftrue
            \fi
        \repeat
        \closein\bt@infilea
        \closein\bt@infileb
    \egroup
    \ifthenelse{\boolean{bt@files@diff}}{%
        #3%
    }{%
        #4%
    }%
}

\newcommand*\bt@set@cnt[1]{%
    \gdef\bt@totalctr{#1}%
}

\newcommand*\bt@keyval@list{}

\newcommand*\bt@kv@add[2]{%
    \protected@edef\bt@tempa{\bt@keyval@list}%
    \protected@xdef\bt@keyval@list{\noexpand\@elt{#1}{#2}\bt@tempa}%
}

\DeclareRobustCommand*\btCiteSect[1]{%
    \btGetVal{#1}%
    \cite{#1} (section\nobreakspace{}\ref{\btretval})%
}

\DeclareRobustCommand*\btRef[2]{%
    % get section label of #1 from \bt@keyval@list
    % reference type is #2
    \ifx\bt@keyval@list\@undefined
        {\bfseries{???}}%
    \else
        \bt@get@keyval{#1}{\bt@keyval@list}%
        #2{\btretval}%
    \fi
}

\DeclareRobustCommand*\btGetVal[1]{%
    \bt@get@keyval{#1}{\bt@keyval@list}%
}
\newcommand*\bt@print@keyvals[2]{%
    \let\bt@elt\@elt%
    \def\@elt##1{%
        \protected@write\@auxout{}{%
            \string\bt@kv@add{##1}{#2}%
        }%
    }#1%
    \let\@elt\bt@elt
}
\newcommand*\bt@get@keyval[2]{%
    \gdef\btretval{???}%
    \bt@add@elem{#1}{\bt@kv@req@list}%
    %% get value of key #1 from list #2
    \protected@edef\bt@tempa{#1}%
    \bt@elemfalse
    \let\bt@elt\@elt%
    \def\@elt##1##2{\def\bt@tempb{##1}%
        \ifx\bt@tempa\bt@tempb  %##2
            \gdef\btretval{##2}%
        \fi
    }%
    #2%
    \let\@elt\bt@elt
    \ifthenelse{\equal{\btretval}{???}}{%
        \PackageWarning{bibtopic}{%
            Key `#1' not found\MessageBreak in list of cited works%
        }%
    }{}%
}

\newcommand*\bt@get@label[2]{%
    \protected@edef\bt@tempa{#1}%
    \let\bt@elt\@elt%
    \def\@elt##1##2{\def\bt@tempb{##1}%
        \ifx\bt@tempa\bt@tempb%
        ##2
        \fi
    }%
    #2%
    \let\@elt\bt@elt
}

\newenvironment{btSect}[2][\bt@globalstyle]{%
    \ifthenelse{\equal{#1}{}}{%
        \PackageWarning{%
            bibtopic%
        }{%
            No \string\bibliographystyle\space given
            - \MessageBreak assuming `\bt@defaultstyle'%
        }%
        \def\bt@globalstyle{\bt@defaultstyle}%
    }{}%
    \expandafter\ifx\csname bt@sect\bt@unit@cnt%
            \endcsname\relax
        \expandafter\protected@xdef\csname bt@sect%
            \bt@unit@cnt\endcsname{\bt@cited@list}%
    \fi
    \stepcounter{btauxfile}%
    \bt@info{bibliographystyle is `#1'\MessageBreak
            for file `\thebtauxfile .bbl'%
    }%
    \bt@inside@secttrue
    \gdef\bt@curr@bib@file{#2}%
    \gdef\bt@sect@ref@list{}%    
    \bt@change@thb%
    \if@filesw
        \@bt@write@auxfile{#1}{*}{#2}%
    \fi
}{%
    \relax
}%
\newenvironment{btUnit}{%
    \ifthenelse{\boolean{bt@inside@unit}}{%
        \PackageError{%
            bibtopic%
        }{%
            The `btUnit' environment cannot be nested%
        }{%
            You cannot use a `btUnit' environment inside another^^J%
            `btUnit' environment.
        }%
    }{}%
    \global\bt@inside@unittrue
    \immediate\write\@auxout{%
        \string\csname\space change@bibcite\string\endcsname%
    }%
    \ifthenelse{\not\boolean{bt@natbib}}{%
        \bt@setcites
    }{}%
    \ifthenelse{\not\boolean{bt@part@cont@ctr}}{%
        \def\bt@save@cnt{0}%
        \ifthenelse{\boolean{bt@natbib}}{%
            \setcounter{NAT@ctr}{0}%
        }{%
            \setcounter{enumiv}{0}% for standard styles
        }%
    }{}%
    \protected@xdef\the@ipfilectr{\bt@unit@cnt}%
    \immediate\write\@auxout{\string\def\string\bt@cited@list{}^^J%
                    \string\gdef\string\@extra@binfo{\@extra@b@citeb}}%
}{%
    \immediate\write\@auxout{\string\bt@save@list{\bt@unit@cnt}}
    \bt@stepcnt\bt@unit@cnt
    \gdef\the@ipfilectr{}%
    \immediate\write\@auxout{%
        \string\gdef\string\@extra@binfo{\@extra@b@citeb}}%
    \global\bt@inside@unitfalse
}
\newcommand*\btPrintCited{%
    \ifthenelse{\boolean{bt@inside@sect}}{%
        \protected@edef\bt@curr@line{\the\inputlineno}%
        \def\bt@curr@cmd{\string\btPrintCited}%
        \bt@stepcnt\bt@internal@sect@cnt%
        \bt@print@citedtrue\bt@print@allfalse
        \label{Sec:\bt@internal@sect@cnt}%
        \bt@change@bibitem
        \bt@input@or@warn{\thebtauxfile}%
        \bt@print@keyvals{\bt@sect@ref@list}{%
            Sec:\bt@internal@sect@cnt
        }%
    }{%
        \bt@sect@err{btSect}{\btPrintCited}%
    }%
}
\newcommand*\btPrintNotCited{%
    \ifthenelse{\boolean{bt@inside@sect}}{%
        \protected@edef\bt@curr@line{\the\inputlineno}%
        \def\bt@curr@cmd{\string\btPrintNotCited}%
        \bt@stepcnt\bt@internal@sect@cnt
        \bt@print@citedfalse\bt@print@allfalse
        \label{Sec:\bt@internal@sect@cnt}%
        \bt@change@bibitem
        \bt@input@or@warn{\thebtauxfile}%
    }{%
        \bt@sect@err{btSect}{\btPrintNotCited}%
    }%
}
\newcommand*\btPrintAll{%
    \ifthenelse{\boolean{bt@inside@sect}}{%
        \protected@edef\bt@curr@line{\the\inputlineno}%
        \def\bt@curr@cmd{\string\btPrintAll}%
        \bt@stepcnt\bt@internal@sect@cnt
        \bt@print@citedfalse\bt@print@alltrue
        \label{Sec:\bt@internal@sect@cnt}%
        \bt@change@bibitem
        \bt@input@or@warn{\thebtauxfile}%
        \bt@print@keyvals{\bt@sect@ref@list}%
            {Sec:\bt@internal@sect@cnt}%
    }{%
        \bt@sect@err{btSect}{\btPrintAll}%
    }%
}
\newenvironment{bibtopics}[2]{%
    \begin{btSect}[#1]{#2}%
    \btPrintAll
}{%
    \end{btSect}%
}
\newcommand\bt@bibstyle{}
\newcommand\bt@citation{}
\newcommand\bt@bibdata{}
\newenvironment{bibunit}[1][\bt@globalstyle]{%
    \ifx#1\@empty
        \PackageWarning{%
            bibtopic%
        }{%
            No \string\bibliographystyle\space given
            - \MessageBreak assuming `\bt@defaultstyle'%
        }%
        \def\bt@globalstyle{\bt@defaultstyle}%
    \fi
    \def\bt@bibstyle{#1}%
    \def\nocite##1{\def\bt@citation{##1}}%
    \def\cite##1{\def\bt@citation{##1}}%
    \gdef\putbib[##1]{\gdef\bt@bibdata{##1}}%
    \stepcounter{btauxfile}%
}{%
    \bt@change@thb
    \if@filesw
        \@bt@write@auxfile{\bt@bibstyle}{\bt@citation}{\bt@bibdata}%
    \fi
        \bt@inside@secttrue
        \btPrintAll
}
\newcommand*\bt@bibitemcheck{%
    \ifthenelse{\not\boolean{bt@found@item}}{%
        \PackageWarningNoLine{%
            bibtopic%
        }{%
            No appropriate bibitems found for command\MessageBreak %
            \bt@curr@cmd\space on line \bt@curr@line%     
        }%
    }{}%
}
\newcommand*\bt@sect@err[2]{%
    \PackageError{%
        bibtopic%
    }{%
        You can't use `\string#2' outside of `#1'%
    }{%
        See the documentation on the `\string#2' command\MessageBreak
        in `bibtopic.dvi' for details.
    }%
}

\newcommand*\bt@bibtex@warning[1]{%
    \PackageWarningNoLine{%
        bibtopic%
    }{%
        Please (re)run BibTeX on the file(s):%
        \expandafter\MessageBreak#1%
        and after that rerun LaTeX%
    }%
}

\newcommand*\bt@files@warnings{%
    \ifthenelse{\boolean{bt@harvard@errs}}{%
        \PackageError{%
            bibtopic%
        }{%
            Your command \string\harvarditem\space was ignored%
        }{%
            `bibtopic' currently supports the `\string\harvarditem'
            command^^J
            only in connection with the `natbib' package. So either^^J%
            load this package, or change the `\string\citationstyle' command
            to some^^J%
            non-harvard style.^^J%
            If you hit RETURN now, some of your bibliographies will be empty.
        }%
    }{}%
    \ifthenelse{\boolean{bt@overridden@numargs}}{%
        \ifthenelse{\boolean{bt@warn@override}}{%
            \PackageWarningNoLine{%
                bibtopic%
            }{%
                The numerical argument in some `\string\bibitem' commands^^J%
                has been ignored. Using one of the package options^^J%
                `overridenumbers' or `dontoverridenumbers' will make^^J%
                this warning go away.^^J%
                Please see the documentation on these options^^J%
                in `bibtopic.dvi' for more details.
            }%
        }{}%
    }{}%
    \ifthenelse{\equal{\bt@warn@files}{}}{%
        \relax
    }{%
        \bt@mk@warning@list{\bt@warn@files}%
        \bt@bibtex@warning{\the\@temptokena}%
        \def\bt@helpctr{\bt@totalctr}%
    }%
}

\newcommand*\bt@input@or@warn[1]{%
    \IfFileExists{#1.bbl}%
    {%
        \input#1.bbl%
    }{%
        \bt@if@elem{#1}{\bt@warn@files}{%
            \relax
        }{%
            \PackageWarningNoLine{%
                bibtopic%
            }{%
                No file #1.bbl%
            }%
            \ifbt@normalwarnings
            \else
                \bt@append@list{#1}{\bt@warn@files}%
            \fi
        }%
    }%
}%

\newcommand*\bt@warn@outdated[1]{%
    \bt@if@elem{#1}{\bt@warn@files}{%
        \relax
    }{%
        \bt@infoNoLine{Marking #1.bbl as outdated}%
        \bt@append@list{#1}{\bt@warn@files}%
    }%
    \ifthenelse{\not\boolean{bt@natbib}}{%
        \global\let\bt@item\relax
        \global\let\endbt@item\relax
    }{}%
}%
\endinput
%%
%% End of file `bibtopic.sty'.