diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/cite/chapterbib.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/cite/chapterbib.sty | 446 |
1 files changed, 446 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/cite/chapterbib.sty b/Master/texmf-dist/tex/latex/cite/chapterbib.sty new file mode 100644 index 00000000000..66224a2c4b7 --- /dev/null +++ b/Master/texmf-dist/tex/latex/cite/chapterbib.sty @@ -0,0 +1,446 @@ +% chapterbib.sty Version 1.11 (29-FEB-2004) 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 +% \@ifundefined{@safe@activestrue}{}{% babel is loaded + \@ifundefined{org@bibcite}{% + \let\bibcite@iii\bibcite + \def\bibcite#1{\bibcite@iii{#1\@extra@binfo}}% + }{% and will clobber us + \let\bibcite@iii\org@bibcite + \def\org@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{\let\@onlypreamble\document% + \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 + \ifx\@onlypreamble\document + \@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}}{}}% + \else + \@latex@error{Cannot be used in preamble}\@eha + \fi + \@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}% for [rootbib]: {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 + \@ifundefined{bibsection}{% Regular -- patch \thebibliography + \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\z@ + \addcontentsline{toc}{#2}{\bibname}% local: * -> no num + \csname#2mark\endcsname{\bibname}\endgroup\fi + \@ifnextchar\@mkboth{\@gobblethree}{}}% + }{% Some package or class has \bibsection -- patch that. + \long\def\@tempa##1##{% to parse beginning of old def + \long\def\@tempa####1\endthebibliography{}\def\@tempc{##1}\@tempa}% + \expandafter\@tempa\bibsection{}{}\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\bibsection }\endgroup\fi + \let\cb@bibsection\bibsection + \def\bibsection{\let\@currentlabel\@empty + \ifx\the@ipfilectr\@empty \else + \expandafter\expandafter\expandafter\cb@sectionbib\fi + \cb@bibsection}% + \expandafter\def\expandafter\cb@sectionbib\@tempc{#1}% +}} + +\long\def\@gobblethree#1#2#3{}% +\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}[2004/02/29 \space v 1.11] +\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 + +\@ifundefined{chapter}{% + \@ifundefined{section}{}{\providecommand\CBMainSectioning{section}}% +}{\providecommand\CBMainSectioning{chapter}} + +\ifx\cb@sub@input\@input@ % For [duplicate] + \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 % For [gather] + \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, or section + \let\cb@elt\relax + \xdef\cb@biblist{\cb@biblist + \cb@elt{\csname the\CBMainSectioning\endcsname}% = \thechapter + {\the\c@inputfile}{\@currentipfile}}% + \cb@sub@input{#1}% + \fi\endgroup} + \def\cb@dogatherbib#1#2#3{% + \setcounter{\CBMainSectioning}{#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.11 (29-FEB-2004) DA (allow \nocite check) + ~~~~~~~~~~~~~~ 1.10 (23-JUN-2003) DA (\bibsection \CBMainSectioning) + 1.9 (19-SEP-2001) DA (sectionbib change; babel) + 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 + "@\@citeb" to "@\@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 "@#1" with "@#1\@extra@binfo", and insert + \gdef\@extra@binfo{} + somewhere in the file. + Some citation packages deviate quite far from LaTeX's own method of + organizing cite tags using "b@\@citeb". The instructions above catch + such extensions as "Y@\@citeb", but not more radical differences. + In such cases, try contacting the author of the citation package. + If a citation style does not define "\nocite", then that command + would not be converted when you make the patches to "@\@citeb". + Chapterbib will try to detect the hook in "\nocite", but if this fails + you may need to redefine "\nocite" (with any "@\@citeb" changed to + "@\@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} + to convert your bibliographies from \chapter* to \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 (or the \bibsection command, if + present already), 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. + Alternatively, 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 -- but the root + \bibliographystyle must come first in the document. + + 9. To have a bibliography-by-chapter at the end instead of separate bibs + in the chapters, use \usepackage[gather]{chapterbib}, put \bibliography + commands in each file, and at the end of the main file. 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. If you are using the + article document class and \section, then you MUST do so. + + If your document class has neither section nor chapter, then you must + define \StartFinalBibs (of course) and also indicate the sectioning: + \newcommand\CBMainSectioning{motif} + if the main sectioning command is \motif, for example. + +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. + +%====================== END INSTRUCTIONS =========================== +% +% -----------------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@triumf.ca> March 1993 - Feb 2004 +% +% Changes with ver 1.11: Follow LaTeX's barring \nocite from preamble +% Changes with ver 1.10: \CBMainSectioning; \bibsection hook +% Changes with ver 1.9: sectionbib remove \@mkboth +% 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. +% |