% chapterbib.sty   Version 1.8 (29-APR-1999) Donald Arseneau
%
% Allow multiple bibliographies in a LaTeX document, including items
% \cite'd in more than one bibliography.
%
% Instructions are below, after \endinput.
%
%====================== BEGIN MACROS ===========================

\newenvironment{cbunit}%
{\global\advance\c@inputfile\@ne \xdef\the@ipfilectr{@-\the\c@inputfile}%
 \@CB@writeContext}%
{\gdef\the@ipfilectr{}\@CB@writeContext}

\def\@CB@writeContext{\if@filesw\begingroup
  \edef\@tempa{\string\gdef\string\@extra@binfo{\@extra@b@citeb}}%
  \immediate\write\@auxout{\@tempa\@CB@wtoc{toc}\@CB@wtoc{lof}\@CB@wtoc{lot}}%
  \endgroup\fi}
\def\@CB@wtoc#1{\string\@writefile{#1}{\gdef
  \string\the@ipfilectr{\@extra@b@citeb}}}%

\let\cb@include\include
\def\include#1{\clearpage \cbunit \xdef\@currentipfile{#1}%
  \cb@include{#1}\global\let\@currentipfile\@savedjobname\endcbunit}

\newcommand\cb@input[1]{\cbunit \xdef\@currentipfile{#1}%
  \input{#1}\global\let\@currentipfile\@savedjobname\endcbunit}
\let\cbinput\cb@input

\@ifundefined{@extra@binfo}{% if not defined by compatible package
  \let\bibcite@iii\bibcite
  \def\bibcite#1{\bibcite@iii{#1\@extra@binfo}}%
 }{}%

\@ifundefined{@extra@b@citeb}{% if not defined by compatible package
 \def\@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\@empty}%
      \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
      \@ifundefined{b@\@citeb \@extra@b@citeb}{\mbox{\reset@font\bf ?}%
         \@warning{Citation `\@citeb' in file `\@currentipfile'
             on page \thepage \space undefined}\G@refundefinedtrue}%
      {\hbox{\citeform{\csname b@\@citeb \@extra@b@citeb\endcsname}}}}}{#1}}
}{}%

% Test if \@extra@b@citeb hook needs to be added to \nocite
\setbox\@tempboxa\hbox{%
  \def\@extra@b@citeb{\global\let\@gtempa\relax}\@extra@b@citeb
  \def\@ifundefined#1#2#3{\global\let\@gtempa\@empty #1}%
  \@fileswfalse \nocite{x}}

\ifx\@gtempa\@empty % define \nocite with hook
\def\nocite#1{\@bsphack % Add \@extra@b@citeb to \nocite
  \@for\@citeb:=#1\do{%
    \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
    \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
    \@ifundefined{b@\@citeb\@extra@b@citeb}{\G@refundefinedtrue
        \@warning{Citation `\@citeb' in file `\@currentipfile' undefined}}{}}%
  \@esphack}
\fi

\long\def\@firstofone#1{#1}

\@ifundefined{citeform}{\let\citeform\@empty}{}
\@ifundefined{citepunct}{\def\citepunct{,\penalty\@m\ }}{}

\xdef\@savedjobname{\jobname}% save root file name as a macro
\let\@currentipfile\@savedjobname
\gdef\the@ipfilectr{}
\def\@extra@b@citeb{\the@ipfilectr}
\newcount\c@inputfile \global\c@inputfile=0

\gdef\@extra@binfo{}  % in case .aux files are left from old run.

\@ifundefined{reset@font}{\let\reset@font\relax}{}
\@ifundefined{G@refundefinedtrue}{\let\G@refundefinedtrue\relax}{}

\let\cb@bibliographystyle\bibliographystyle
\def\bibliographystyle#1{\if\cb@roottest\cb@bibliographystyle{#1}\fi}
\def\cb@roottest{11}%   was: {2\ifx\the@ipfilectr\@empty 1\else2\fi}

\def\bibliography#1{\if\cb@roottest
   \if@filesw\immediate\write\@auxout{\string\bibdata{#1}}\fi
   \fi \cb@dobiblio{\@currentipfile.bbl}}

\@ifundefined{PackageWarning}{\let\cb@warning\@warning}%
         {\def\cb@warning{\PackageWarning{chapterbib}}}

\@ifundefined{@newl@bel}{% pre-1995; must redefine \@testdef
   \let\@test@defiii\@testdef
   \def\@testdef#1#2#3{%
      \if#1b\relax\@test@defiii b{#2\@extra@binfo}{#3}%
      \else \@test@defiii #1{#2}{#3}\fi}%
   \let\cb@dobiblio\@input}%
  {\let\cb@dobiblio\@input@}

\def\sectionbib#1#2{% Macro to convert \thebibliography command
 \long\def\@tempa##1##{% to parse beginning of old def
  \long\def\@tempa####1\endthebibliography{}\def\@tempc{##1}\@tempa}%
 \expandafter\@tempa\thebibliography{}{}\endthebibliography
 \def\@tempa{\chapter*}\ifx\@tempa\@tempc\else \begingroup\toks@{#1}%
  \cb@warning {The sectionbib option changes \string"\expandafter
   \strip@prefix\meaning\@tempc\string" to \string"\the\toks@\string"
   in \string\thebibliography }\endgroup\fi
 \let\cb@thebibliography\thebibliography
 \def\thebibliography{\let\@currentlabel\@empty
   \ifx\the@ipfilectr\@empty \else
   \expandafter\expandafter\expandafter\cb@sectionbib\fi
   \cb@thebibliography}%
 \expandafter\def\expandafter\cb@sectionbib\@tempc##1{#1{\bibname}%
  \ifx\@currentlabel\@empty \begingroup \c@secnumdepth-\tw@
   \addcontentsline{toc}{#2}{\bibname}% local: * -> no num
   \csname#2mark\endcsname{\bibname}\endgroup\fi }}

\def\strip@prefix#1>{}
\@ifundefined{bibname}{\def\bibname{Bibliography}}{}

\@ifundefined{DeclareOption}{% LaTeX2.09
  \def\@CB@wtoc#1{}% disable; broken in 2.09
}{% LaTeX2e option
\ProvidesPackage{chapterbib}[1999/04/29 \space v 1.8 ]
\DeclareOption{sectionbib}{\AtBeginDocument{\sectionbib{\section*}{section}}%
  \providecommand\StartFinalBibs{\chapter*{\bibname}\chaptermark\bibname
   \protected@edef\bibname{\chaptername\space\noexpand\thechapter}}}%
\DeclareOption{draft}{\let\cbinput=\include}
\DeclareOption{rootbib}{\def\cb@roottest{2\ifx\the@ipfilectr\@empty2\else1\fi}}
\DeclareOption{duplicate}{\gdef\cb@biblist{}\let\cb@sub@input\@input@}
\DeclareOption{gather}{\gdef\cb@biblist{}\let\cb@sub@input\@gobble}
\ProcessOptions

\ifx\cb@sub@input\@input@
 \def\cb@dofinalbibs{\if@filesw
 \toks@{\let\cb@bc\bibcite\let\bibcite\@gobbletwo}%
 \immediate\write\@auxout{\the\toks@}\fi
 \let\cb@elt\cb@dogatherbib \cb@biblist
 \if@filesw\immediate\write\@auxout{\let\string\bibcite\string\cb@bc}\fi}%
\fi
\ifx\cb@sub@input\@gobble
 \def\cb@dofinalbibs{\let\cb@elt\cb@dogatherbib \cb@biblist}%
\fi
\ifx\cb@biblist\@empty % duplicate or gather declared
 \providecommand\StartFinalBibs{\protected@edef\bibname
    {\bibname\space for \chaptername\space \noexpand\thechapter}}%
 \def\cb@dobiblio#1{\begingroup\makeatletter
  \ifx\the@ipfilectr\@empty % in root
    \StartFinalBibs \cb@dofinalbibs
  \else % in chapter
    \let\cb@elt\relax
    \xdef\cb@biblist{\cb@biblist
       \cb@elt{\thechapter}{\the\c@inputfile}{\@currentipfile}}%
    \cb@sub@input{#1}%
  \fi\endgroup}
 \def\cb@dogatherbib#1#2#3{%
  \setcounter{chapter}{#1}%
  \global\c@inputfile#2\global\advance\c@inputfile\m@ne
  \IfFileExists{#3.bbl}{\cb@input{#3.bbl}}{}}
\fi

\AtBeginDocument{\let\sectionbib\undefined}
}
\endinput

%====================== BEGIN INSTRUCTIONS ===========================


% chapterbib.sty   Version 1.8  (29-APR-1999) DA  (gather, duplicate, toc)
% ~~~~~~~~~~~~~~           1.7  (21-JUL-1997) DA  (sectionbib, \nocite)
%                          1.6  (08-FEB-1997) Donald Arseneau (more sectionbib)
%                          1.5  (09-OCT-1995) Donald Arseneau (rootbib)
%                          1.4  (11-MAR-1995) Donald Arseneau (sectionbib)
%                          1.3  (04-JUL-1994) Donald Arseneau (2e, cbunit)
%                          1.2  (21-MAY-1993) Donald Arseneau (bug fix)
%                          1.1  (24-MAR-1993) Donald Arseneau
%                          1.0  (23-NOV-1988) Niel Kempson
%
% Allow multiple bibliographies in a LaTeX document, including items
% \cite'd in more than one bibliography.  Despite the name "chapterbib",
% the BIBLIOGRAPHIES ARE FOR EACH INCLUDED FILE, not necessarily for each
% chapter.  The main point is to allow you to use BibTeX: Each included
% file should have its own \bibliographystyle and \bibliography commands,
% and you should run BibTeX on each included file separately rather than
% on the root file.
%
% There are also the commands \begin{cbunit}, \end{cbunit}, and \cbinput
% to allow multiple bibliographies without using \include (see item 4).
% There are two added hooks, \citeform and \citepunct, to customise the
% formatting of each entry in a citation list.
%
% Usage, Restrictions, and Options
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%
% 1. Normal use: Put \bibliographystyle and \bibliography commands in
%    each \include'd file. Run LaTeX; run BibTeX on each included file;
%    run LaTeX; run LaTeX.
%
% 2. If you get errors like "! LaTeX Error: Command \xxx already defined."
%    then bibtex is foolishly putting "\newcommand" in each bbl file.  The
%    fix is to put the \bibliography command in braces: {\bibliography{x}}.
%
% 3. The \bibliography and \bibliographystyle commands are not normally used
%    in the root file, only in files that have been \include'd. To have a
%    whole-document bibliography, see items 7-10, depending on which style of
%    whole-document bib.
%
% 4. If you can't use \include because a new section must start below the
%    preceding bibliography on the same page [odd format!], then you can
%    use \begin{cbunit}...\end{cbunit} or \cbinput, with a {thebibliography}
%    environment in each unit or input file.  To use BibTeX: input separate
%    files using \cbinput; at first use the package or global option [draft],
%    run LaTeX on the document, then BibTeX on each file that was \cbinput;
%    finally, remove the [draft] option and run LaTeX again (maybe twice to
%    get page references right).  The [draft] option only affects the treatment
%    of \cbinput, not \include or \begin{cbunit}.
%        With old LaTeX, do the preliminary run using \include commands, and
%    change these to \cbinput for the final run(s).
%
% 5. Your preferred citation style (xxx.sty) may not work with chapterbib at
%    first, but it is easy to make it compatible:  In `xxx.sty' change every
%    "b@\@citeb" to "b@\@citeb\@extra@b@citeb", and insert the line
%        \@ifundefined{@extra@b@citeb}{\def\@extra@b@citeb{}}{}
%    somewhere (but not as a comment or as part of another definition!).
%    If the package also redefines \bibcite then you should change that
%    definition, replacing "b@#1" with "b@#1\@extra@binfo", and insert
%        \gdef\@extra@binfo{}
%    somewhere in the file.
%    Even after putting the "\@extra@b@citeb" hook into \cite, there may be
%    a problem with \nocite.  This package will try to detect the hook in
%    \nocite, but this might fail.  If it does, then you may need to define
%    \nocite (with any "b@\@citeb" changed to "b@\@citeb\@extra@b@citeb")
%    in that sty file.
%
% 6. The report and book document classes usually treat the bibliography as
%    an unnumbered chapter (\chapter*), which is not so good for bibliographies
%    IN a chapter.  You can specify
%        \usepackage[sectionbib]{chapterbib}
%    and your bibliographies will be treated as sections (\section*) with an
%    entry in the table of contents and the page-header.  A bibliography in
%    the root file remains as a \chapter*.  The [sectionbib] option modifies
%    the existing thebibliography environment, so the other formatting in the
%    bibliography should remain unchanged.  On the other hand, if you already
%    have a non-standard bibliography defined, or if you want them numbered,
%    it may be easier to redefine \thebibliography directly, without any
%    trickery.
%        For more control, or in old LaTeX2.09, you can use the \sectionbib
%    command directly in the document preamble.  It takes two parameters:
%    the sectioning command, and the name of the sectioning level.  For
%    instance, the [sectionbib] option does \sectionbib{\section*}{section}.
%    Again, for the most control, it is better to redefine \thebibliography
%    entirely.
%
% 7. If you want a completely unrelated bibliography in the root file, perhaps
%    for a general reading list, you can provide your own bibliography there
%    using the thebibliography environment.  I don't suppose this will appeal
%    to BibTeX users!
%
% 8. To have a cohesive bibliography for the whole document, plus individual
%    bibs in the chapters, put \bibliography commands in the included chapters
%    plus in the root file; use \usepackage[rootbib]{chapterbib}; run LaTeX;
%    run BibTeX on the root file; change to \usepackage{chapterbib}; run
%    LaTeX; run BibTeX on each included file; run LaTeX; run LaTeX.
%    This produces an independent `overall' bibliography which only makes
%    sense for various `named' bibliography styles; a style with numbering
%    will give unrelated numbers in each bibliography.
%        Actually, you probably don't *need* to ever run with [rootbib]
%    because, although bibTeX should complain about multiple \bibdata
%    commands, it should produce all the right bbl files.
%
% 9. To have a bibliography-by-chapter at the end instead of separate bibs
%    in the chapters, use \usepackage[gather]{chapterbib} and run LaTeX as
%    in item 1. You can control the titling of the final bibliography by
%    defining \StartFinalBibs.  The default definition is (like)
%
%      \newcommand{\StartFinalBibs}{%
%        \renewcommand{\bibname}{Bibliography for Chapter \thechapter}}
%
%    normally, but when using the [sectionbib] option it becomes
%
%      \newcommand{\StartFinalBibs}{%
%        \chapter*{\bibname}\chaptermark{\bibname}%
%        \renewcommand{\bibname}{Chapter \thechapter}}
%
%    You should really provide your own definition.
%
%10. To have bibliographies in each chapter PLUS a bibliography-by-chapter at
%    the end, follow item 9, but declare \usepackage[duplicate]{chapterbib}
%    (or \usepackage[duplicate,sectionbib]{chapterbib}).
%
%11. If you use Babel, load chapterbib before babel.
%
% \citeform and \citepunct:
% ~~~~~~~~~~~~~~~~~~~~~~~~~
% Normally, the citations are formatted as given, but you can define \citeform
% (with one parameter) to reformat every citation.  Some possibilities:
%  \renewcommand\citeform[1]{\romannumeral 0#1}% roman numerals:  [iv,x]
%  \renewcommand\citeform[1]{(#1)}             % parentheses:  [(3),(4),(7)]
%  \renewcommand\citeform[1]{\thechapter.#1}   % number by chapter:  [3.9,3.10]
% If you change \citeform, you should define \@biblabel to match.
% \citepunct gives the punctuation (comma-penalty-space) between items.
%
% -----------------Implementation notes---------------
%
% LaTeX normally uses command names in the form \b@TAG to associate a mnemonic
% TAG with the citation name or number.  Chapterbib changes this to a command
% like \b@TAG@-nn where nn is a number identifying which included file is in
% effect.
%
% Tags indicating the citations and/or the input files:
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% \c@inputfile    = counter counting included files
% \the@ipfilectr  = (empty) when typesetting from the root file,
%                 = @-\the\c@inputfile when typesetting from an included file
% \@extra@b@citeb = \the@ipfilectr (just an alias)
% \@extra@binfo   = the value of \@extra@b@citeb as saved in .aux files
%
% \b@FOO:
% ~~~~~~~
% In the root file, the citation number (or name) is given by \b@FOO
% just like regular LaTeX, but in an \include'd file it is given by
% \b@FOO@-number.  Any definition of \cite (\@citex) should refer
% to this using \csname b@\@citeb\@extra@b@citeb \endcsname.
%
% \include \cbinput and \cbunit:
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% Redefine the \include macro so that when a file is \include'd...
% Increment the file number, (globally) update \the@ipfilectr to be
% @-number, and write \gdef\@extra@binfo{@-number} in the (main) .aux
% file, and do regular \include. When the \include'd file is finished,
% write \gdef\@extra@binfo{} in the (main) .aux file. Globally reset
% \the@ipfilectr to {}.  Provide similar \cbunit and \cbinput.
%
% \cite:
% ~~~~~~
% Redefine \cite (\@citex actually) and \bibcite to use the file number
% tag along with the specified tag.  \@citex also uses \citeform as a hook
% to reformat each individual citation.
% Only do the redefinitions if no citation style that supports chapterbib
% has been loaded--as indicated by existence of filename tags.
%
% \nocite:
% ~~~~~~~~
% A while ago LaTeX changed its \nocite so it checks the validity of the
% (no)citation tags.  This necessitated adding the "\@extra@b@citeb" hook
% to \nocite.  At first, I only redefined \nocite when redefining \cite,
% but there existed citation packages that supported chapterbib by putting
% \@extra@b@citeb into \cite but which did not define \nocite at all!
% These then gave warning messages for every \nocite.  With version 1.7,
% I now try exercising the \nocite command with some functions disabled:
% (1) .aux file output is locally switched off; (2) The \@ifundefined
% command is hacked to merely typeset the text of the tag; (3) this is
% done in a disappearing \hbox so it generates no output.  This detects
% (by setting a global flag \@gtempa) a \nocite command that executes
% \@ifundefined but not \@extra@b@citeb.  In such cases, \nocite must
% be redefined.
%
% \citepunct and \citeform:
% ~~~~~~~~~~~~~~~~~~~~~~~~~
% These customization hooks are present in cite.sty; others (\citemid,
% \citeleft, \citeright) are not defined here because \@cite is not redefined.
%
% We redefine \@testdef so that it properly checks whether the
% \cite labels have changed.
%
% Handle package options and redefining thebibliography.  [sectionbib]
% converts "\chapter*{...}" to "\section*{\bibname\markright{\bibname}%
%   \addcontentsline{toc}{section}{\bibname}}"
%
% Table of contents etc:
% ~~~~~~~~~~~~~~~~~~~~~~
% As of version 1.8, definitions of \@extra@b@citeb are written to the
% toc, lot, and lof files to avoid undefined citation tags in those tables.
% This is actually a problem in regular LaTeX with bibTeX -- cites that
% appear in those tables get numbered starting with 1, but they should
% be sequenced by where they originated -- but the problem was worse with
% chapterbib.
%
%---------------------------------------------------------------
%
% Authors  Niel Kempson        (original)
% ~~~~~~~  Donald Arseneau  <asnd@reg.triumf.ca>   March 1993 - Apr 1999
%
% Changes with ver 1.8: options gather and duplicate; babel workarounds; toc
% Changes with ver 1.7: change the \sectionbib command re. headings.
%                       update \nocite and alter \citeform
% Changes with ver 1.6: change the \sectionbib command to take arguments.
% Changes with ver 1.5: rootbib option; item 8 in instructions.
% Changes with ver 1.4: sectionbib and draft options
% Changes with ver 1.3: rewrite:
% The filename tag is defined in each .aux file by \include, not as an
% extra parameter to \bibcite.  \@bibitem & \@lbibitem are left alone.  Add
% \citeform and \citepunct. Add \cbunit and \cbinput for use without \include.
