diff options
-rw-r--r-- | Master/texmf-dist/source/latex/bibunits/bibunits.dtx | 1884 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/bibunits/bibunits.ins | 58 |
2 files changed, 1942 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/bibunits/bibunits.dtx b/Master/texmf-dist/source/latex/bibunits/bibunits.dtx new file mode 100644 index 00000000000..36136233ab8 --- /dev/null +++ b/Master/texmf-dist/source/latex/bibunits/bibunits.dtx @@ -0,0 +1,1884 @@ +% \CheckSum{611} +% +% \iffalse +%% Package `bibunits' to use with LaTeX2e. +%% +%% Copyright (C) 1999--2004 Thorsten Hansen +%% +% +% This work may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, either version 1.3 of this license +% or any later version. The latest version of this license is in +% http://www.latex-project.org/lppl.txt and version 1.3 or later is +% part of all distributions of LaTeX version 2003/12/01 or +% later. +% +% This work has the LPPL maintenance status "maintained". The Current +% Maintainer of this work is Thorsten Hansen. +% +% This is a contributed file to the LaTeX2e system. +% +% +%<*dtx> + \ProvidesFile{bibunits.dtx} +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{bibunits} +%<driver>\ProvidesFile{bibunits.drv} +% \fi +% \ProvidesFile{bibunits.dtx} + [2004/05/12 v2.4 Multiple bibliographies in one document.] +% +% \iffalse +%<*driver> +\documentclass{ltxdoc} +\usepackage{ifthen} +% +% Sort `General´ before macros starting with `@'. +% +\makeatletter +\def\changes@#1#2#3{% +\protected@edef\@tempa{\noexpand\glossary{#1\levelchar + \ifx\saved@macroname\@empty + \space + \actualchar + \generalname + \else + \space % <-- \space added + \expandafter\@gobble + \saved@macroname + \actualchar + \string\verb\quotechar*% + \verbatimchar\saved@macroname + \verbatimchar + \fi + :\levelchar #3}}% + \@tempa\endgroup\@esphack} +\makeatother +% +% +% +\CodelineIndex +\RecordChanges +%\OnlyDescription +\begin{document} +\DocInput{bibunits.dtx} +\end{document} +%</driver> +% \fi +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \newcommand{\class}[1]{\textsf{#1}} +% \renewcommand*\descriptionlabel[1]{\hspace\labelsep\option{#1}} +% \newcommand{\komascript}{KOMA-\textsc{Script}} +% \newcommand{\macrott}[1]{\texttt{\symbol{'134}#1}} +% \newcommand{\option}[1]{\textsf{#1}} +% \newcommand{\package}[1]{\textsf{#1}} +% +% ^^A +% ^^A Rules to separate figures from the text. (Modified from bibtopic.dtx). +% ^^A +% \newcommand\toprule[1][]{^^A +% \ifthenelse{\equal{#1}{}}{^^A +% \noindent{\makebox[\textwidth][t]{\hrulefill}}^^A +% }{% +% \noindent{\makebox[\textwidth][t]{\hrulefill^^A +% \raisebox{-.5ex}{ \small\ttfamily#1 }\hrulefill}}^^A +% }% +% \par\noindent} +% +% \newcommand\bottomrule{\noindent\rule[\baselineskip]{\textwidth}{.6pt}} +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \hyphenation{bib-lio-gra-phy bib-lio-gra-phies bib-unit bib-units} +% +% \GetFileInfo{bibunits.dtx} +% \title{The \package{bibunits} Package} +% \author{Thorsten Hansen\\ +% \normalsize thorsten.hansen@psychol.uni-giessen.de} +% \date{\fileversion\quad \filedate} +% \maketitle +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \GlossaryPrologue{\section*{{Change History}}% +% \markboth{{Change History}}{{Change History}}% +% Version 1.0 by Jos\'e Alberto Fern\'andez, Version 1.0a till 2.3 +% by Thorsten Hansen. Version numbers suffixed with characters have +% not been released. Since v2.1, each new version has a `General' +% item describing the new feature or the fixed problem, +% and local items describing the changes of the code.} +% +% \changes{v1.0}{1991/09/07}{Initial \LaTeX\ 2.09 version.} +% \changes{v1.0a}{1998/10/30}{The same cited item can occur in more than one +% bibliography.} +% \changes{v1.0b}{1998/11/09}{Auxiliary files are created only for bibunits +% which contain cite commands.} +% \changes{v1.0c}{1998/11/15}{Extra spaces are no longer introduced, +% upgrade to \LaTeXe.} +% \changes{v2.0}{1999/07/22}{Documentation.} +% \changes{v2.1a}{1999/11/15}{Add bibliography name to table of +% contents for compatibility with \komascript\ classes using the option +% \option{bibtotoc}.} +% \changes{v2.1b}{1999/11/24}{Fixed problem with cite command after +% \macrott{paragraph}.} +% \changes{v2.1c}{1999/11/24}{New option \option{labelstoglobalaux}.} +% \changes{v2.1d}{2000/01/27}{Global labels are no longer overwritten by +% local bibunit labels for the same cited item.} +% \changes{v2.1e}{2000/03/28}{Compatibility with \package{babel} using +% the option \option{frenchb}.} +% \changes{v2.1f}{2000/04/02}{Streamlined implementation of starting +% bibunits by cite commands.} +% \changes{v2.1g}{2000/07/31}{Compatibility with \package{mparhack}.} +% \changes{v2.1h}{2000/08/06}{New implementation: global labels are no +% longer overwritten by local bibunit labels for the same cited item.} +% \changes{v2.1i}{2000/09/30}{Allow \macrott{putbib} to appear before +% the first occurrence of a cite within a bibunit.} +% \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to +% \macrott{@starredversion}, delete macro \macrott{@localcitedefault}.} +% \changes{v2.1k}{2000/10/02}{Ignore spaces in arguments for starred +% version of \macrott{cite}.} +% \changes{v2.1l}{2000/10/03}{New option \option{globalcitecopy}.} +% \changes{v2.1m}{2000/10/05}{Compatibility with \package{natbib} and +% \package{babel} using the option \option{frenchb}.} +% \changes{v2.1n}{2000/10/08}{\package{jurabib} compatibility.} +% \changes{v2.1o}{2000/10/09}{Use of \macrott{@input} and +% \macrott{@input@} consistent with \LaTeX\ base implementation.} +% \changes{v2.2}{2000/10/10}{Documentation.} +% \changes{v2.2a}{2003/07/12}{New macros \macrott{defaultbibliography} +% and \macrott{defaultbibliographystyle}; default values of +% \macrott{bu@bibunit} and \macrott{bu@bibstyle} changed +% from \texttt{\{\}} to \macrott{jobname} resp.\ \texttt{plain}.} +% \changes{v2.2b}{2003/07/12}{Compatibility with \package{cite} which +% has integrated package \package{overcite} since v4.0 of +% \package{cite}.} +% \changes{v2.2c}{2003/07/27}{Check whether warning ``Label(s) may +% have changed. Rerun\dots'' should be given.} +% \changes{v2.2d}{2003/07/27}{New options \option{sectionbib} and +% \option{subsectionbib}.} +% \changes{v2.2e}{2003/08/18}{Compatibility patch for \package{babel} +% together with \package{jurabib}.} +% \changes{v2.3}{2004/02/06}{Documentation.} +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +% \begin{abstract} +% The \package{bibunits} package allows separate bibliographies for +% different units or parts of the text. The units can be chapters, +% sections or \texttt{bibunit} environments. The package separates +% the citations of each unit of text into a local auxiliary file to +% be processed by \BibTeX. The same cited item can occur in more +% than one bibliography. A global bibliography can also appear in +% the document and citations can be placed in both at the same time. +% The package is compatible with a wide variety of packages, +% including, but not limited to, \textsf{cite}, \textsf{jurabib}, +% \textsf{natbib}, \textsf{overcite} and \komascript\ classes. It is +% based on the \package{bibunits} style by Jos\'e Alberto Fern\'andez. +% \end{abstract} +% +% +% +% \section{Introduction} +% +% Suppose, you have different units or parts within your document, and +% each unit should have its own bibliography. In this case, you can +% use the \package{bibunits} package to do the work. +% +% +% Let's first consider a simple example to see how \package{bibunits} +% works (see Fig.~\ref{fig:Example}). We specify two bibunits using the +% \textsf{bibunit} environment. The optional parameter specifies the +% bibliography style to be used within the bibunits bibliography, in +% this case \textsf{plain} for the first and \textsf{alpha} for the +% second bibunit. Citations can be made as usual. Similar to the +% |\bibliography| command, you have to specify where the bibliography +% should appear within a bibunit. This is done using |\putbib|. The +% optional parameter specifies the \BibTeX\ files to be used for +% generating the bibunits bibliography, in this case \texttt{lit}. +% +% \begin{figure}[h] +% \hspace*{-25mm}\begin{minipage}[t]{0.6\textwidth} +% \toprule +% {\let\small\footnotesize +% \begin{verbatim} +% \documentclass{article} +% \usepackage{bibunits} +% +% \begin{document} +% \begin{bibunit}[plain] +% References to the \TeX book \cite{Knuth:1991} +% and to Lamport's \LaTeX\ book, which appears +% only in the references\nocite{Lamport:1994}. +% \putbib[lit] +% \end{bibunit} +% +% \begin{bibunit}[alpha] +% A new bibunit with a different style and a cite +% of a Postscript tutorial \cite{Adobe:1985}. +% \putbib[lit] +% \end{bibunit} +% +% \end{document} +% \end{verbatim}} +% \bottomrule +% \end{minipage} +% \hspace{5mm} +% \begin{minipage}[t]{0.65\textwidth} +% \toprule +% \leftmargini1mm +% \begin{quote} +% \footnotesize +% References to the \TeX book [1] +% and to Lamport's \LaTeX\ book, which appears +% only in the references. +% \let\section\subsubsection +% \vspace{-3mm} +% \begin{thebibliography}{1} +% \bibitem{Knuth:1991} +% Donald~E. Knuth. +% \newblock {\em The {\TeX} book}. +% \newblock Addison-Wesley, Reading, Massachusetts, 1991. +% \bibitem{Lamport:1994} +% Leslie Lamport. +% \newblock {\em {\LaTeX:} A Document Preparation System}. +% \newblock Addison-Wesley, Reading, Massachusetts, 2 edition, 1994. +% \end{thebibliography} +% +% A new bibunit with a different style and a cite +% of a Postscript tutorial [Ado85]. +% \vspace{-3mm} +% \begin{thebibliography}{{Ado}85} +% \bibitem[{Ado}85]{Adobe:1985} +% {Adobe {S}ystem {I}ncorporated}. +% \newblock {\em Postscript Language Tutorial and Cookbook}. +% \newblock Addison-Wesley, Reading, Massachusetts, 1985. +% \end{thebibliography} +% +% \end{quote} +% \vspace{2.25mm} +% \bottomrule +% \end{minipage} +% \caption{Example input and output.} +% \label{fig:Example} +% \end{figure} +% +% For each bibunit, +% there is now a separate auxiliary file |bu|\meta{i}|.aux| to be +% processed by \BibTeX. In this example, we have two bibunits with +% auxiliary files |bu1.aux| and |bu2.aux|. To process your document, +% three runs of \LaTeX\ and two runs of \BibTeX\ are required. +% +% \vbox{% +% \begin{verbatim} +% latex mydoc +% bibtex bu1 +% bibtex bu2 +% latex mydoc +% latex mydoc +% \end{verbatim}} +% +% This example should give a pretty good impression of what +% principally can be +% done with \package{bibunits} and how it can be done. But +% \package{bibunits} allows for many more features, e.g., bibunits +% can be specified by |\sections|, a global bibliography can be used, +% and cite command can be placed in both the local and the global +% bibliography at the same time, among other features. All these +% features and associated commands are described in the next section. +% +% +% +% +% \section{Usage Notes} +% +% There are two ways to specify the units for which a bibliography is +% generated. You can either define your own \textsf{bibunit} +% environment, or you can specify bibunits for the \LaTeX\ units +% |\chapter| or |\section|. Both ways are mutually exclusive, meaning +% that you can choose only one and cannot mix them. +% +% \DescribeEnv{bibunit} Use the environment +% |\begin{bibunit}|\oarg{style} to create a bibunit. The optional +% argument \meta{style} specifies a bibliography style. If the optional +% argument \meta{style} is omitted, the default style is used. How to +% define a default style is explained below within this section. +% +% \DescribeMacro{\bibliographyunit} +% Alternatively, use |\bibliographyunit|\oarg{unit}, where \meta{unit} can be +% |\chapter| or |\section| to specify for which document unit +% a bibliography is generated, namely for every chapter or for every +% section. Use |\bibliographyunit| with no arguments to deactivate +% bibliography units. By default |\bibliographyunit| is deactivated. +% The command |\bibliographyunit| has to be issued +% after |\begin{document}|. +% +% \DescribeMacro{\cite*} +% \DescribeMacro{\nocite*} +% You can create a global bibliography as usual with the commands\\ +% |\bibliography|\oarg{BibTeX files} and |\bibliographystyle|\oarg{style}. +% Use |\cite| and |\nocite| to generate citations that appear in the +% local bibliography. Use |\cite*| and |\nocite*| inside a unit +% to generate citations for both the local and global bibliography. +% +% \DescribeMacro{\putbib} +% Use |\putbib|\oarg{BibTeX files} to specify where the +% bibliography should appear within a bibunit. If the optional +% argument is omitted, |\putbib| uses the default \BibTeX\ files. How to +% define a default files is explained below within this section. +% +% \DescribeMacro{\defaultbibliography} +% \DescribeMacro{\defaultbibliographystyle} +% Use |\defaultbibliography|\marg{BibTeX files} and\\ +% |\defaultbibliographystyle|\marg{style} to specify default \BibTeX\ +% data files and style to be used in the local bibliographies. If no +% defaults are specified, |\jobname| is used as the default +% bibliography file and \textsf{plain} is used as the default +% bibliography style. +% +% \medskip\footnotesize +% \def\MacroFont{\fontencoding\encodingdefault +% \fontfamily\ttdefault +% \fontseries\mddefault +% \fontshape\updefault +% \footnotesize}% +% +% For compatibility to pre-v.2.3 +% versions of \package{bibunits}, two other ways to define +% default \BibTeX\ styles and files for the local units are possible, +% but their use is not recommended. +% +% If |\bibliographyunit| is active, there are two other ways to define +% default \BibTeX\ styles and files for the local units: +% either by defining a global bibliography using |\bibliography| and +% |\bibliographystyle| or by using +% starred versions |\bibliography*| and |\bibliographystyle*|, as +% detailed below. +% +% \DescribeMacro{\bibliography} \DescribeMacro{\bibliographystyle} +% If |\bibliographyunit| is active, the commands +% |\bibliography|\oarg{BibTeX files} and\\ +% |\bibliographystyle|\oarg{style} also specify the +% \BibTeX\ files and style to be used by default in the local units. +% The commands |\bibliography| and |\bibliographystyle| have to be issued +% after |\begin{document}|. +% +% \DescribeMacro{\bibliography*} +% \DescribeMacro{\bibliographystyle*} +% If |\bibliographyunit| is active, you can use starred +% forms |\bibliography*|\marg{BibTeX files} and +% |\bibliographystyle*|\marg{style} to specify the defaults for +% the local units only. These commands do not generate a global +% bibliography or any information for the global bibliography. +% The commands |\bibliography*| and |\bibliographystyle*| have to be issued +% after |\begin{document}|. +% +% Note that the old pre-v2.3 ways to define default +% style and \BibTeX\ files can only be specified while +% |\bibliographyunit| is active. Thus, if you do want default styles +% but \textsf{bibunit} environments instead of |\bibliographyunit|s, +% you have to issue a dummy |\bibliographyunit[\section]|, then +% specify defaults |\bibliography*|\marg{BibTeX files} and +% |\bibliographystyle*|\marg{style} and finally switch off the +% generation of bibunits by sections using |\bibliographyunit|. +% +% \normalsize +% +% +% +% \subsection{Package options} +% \begin{description} +% \item[globalcitecopy] Create an entry in the global bibliography for +% each cite command within a bibunit. Default is to create an entry +% only for the local bibliography. +% \item[labelstoglobalaux] Write the replacement text for a label +% inside a bibunit to the global auxiliary file. +% Default is to write the labels to the local auxiliary file. The +% option \option{labelstoglobalaux} is useful in some situations, e.g., +% \begin{itemize} +% \item to resolve the references when a bibunit bibliography is +% |\include|d. +% \item to resolve citations within a moving argument like +% |\section|, which otherwise would result in an `Undefined +% reference' error. +% \end{itemize} +% Note that this option results in wrong labels for numerical +% reference schemes if the same cited item appears at different +% positions in more than one bibliography +% (cf.~Sec.~\ref{sec:Limitations}). +% \item[sectionbib] Let bibliography titles appear at the section +% level. Useful for chapters as bibliography units. +% \item[subsectionbib] Let bibliography titles appear at the subsection +% level. Useful for sections as bibliography units. +% \end{description} +% +% +% +% \subsection{\textnormal{\BibTeX} processing} +% +% For each bibunit, in sequence, there is now a corresponding file +% |bu|\meta{i}|.aux| that needs to be compiled through \BibTeX. Suppose +% your document has \meta{n} different bibunits, you must now invoke +% \BibTeX\ on |bu1|, \dots , |bu|\meta{n}. This can be done by a +% csh-script. +% \begin{verbatim} +% #!/bin/csh +% foreach auxfile (bu*.aux) +% echo bibtex `basename $auxfile .aux` +% bibtex `basename $auxfile .aux` +% end +% \end{verbatim} +% +% I you don't have the |basename| command, you can use an alternative +% script where the suffix |.aux| is removed using |sed|. +% \begin{verbatim} +% #!/bin/csh +% foreach auxfile (bu*.aux) +% set auxfilebasename = `echo $auxfile | sed s/.aux//` +% echo bibtex $auxfilebasename +% bibtex $auxfilebasename +% end +% \end{verbatim} +% +% If by some strange coincidence you have named some of your files +% |bu|\meta{i}|.aux|, you have to redefine the internal command +% |\@bibunitname|, otherwise your files will be overwritten. To get +% for your document |foo.tex| filenames |foo.|\meta{i}|.aux| as for +% the first version of \package{bibunits}, you can redefine the +% internal macro |\@bibunitname|. +% \begin{verbatim} +% \makeatletter +% \renewcommand{\@bibunitname}{\jobname.\the\@bibunitauxcnt} +% \makeatother +% \end{verbatim} +% +% If you also want a global bibliography for your document |foo.tex|, +% the file |foo.aux| needs to be compiled through \BibTeX\ as well. +% +% +% +% +% \subsection{Limitations} +% \label{sec:Limitations} +% +% \begin{itemize} +% \item A citation within a moving argument in a bibunit cannot be +% resolved outside this bibunit, because the label is local to the +% bibunit. This occurs, e.g., for a |\cite| within |\section|, which is +% undefined in the table of contents. You can use the option +% \option{labelstoglobalaux} to resolve the citations, but this +% has two side effects. +% \begin{itemize} +% \item Since the cite command also appears globally in the table of +% contents, it generates a |\citation| command for the +% \emph{global} auxiliary file. As a result, another \BibTeX\ run +% causes this previously local reference to creep into the global +% bibliography. +% \item Since the replacement text for all cited items is now +% global, the same cited item has always the same replacement +% text, regardless whether it appears at different positions within +% different bibunits. This results in wrong labels for numerical +% reference schemes if the same cited item appears at different +% positions within the bibliographies. +% \end{itemize} +% \item When using \package{natbib}, |\cite*| has the +% meaning as defined by \package{natbib}, namely to force full +% citation of multiple authors. To get the behavior as defined +% by \package{bibunits} (without \package{natbib}), use an +% accompanying |\nocite| outside of a bibunit. Alternatively, if +% you want \emph{every} local item to appear also in the global +% bibliography, you can use \package{bibunits} with option +% \option{globalcitecopy}. +% \item With \package{natbib}, you cannot use numerical and +% author-year reference schemes together. Typographically, this +% is regarded bad style anyway. +% \end{itemize} +% +% +% +% +% \section{Examples} +% \label{sec:Examples} +% +% +% +% \subsection{Bibunits by the \texttt{bibunit} environment} +% +% In the first example, two bibliographies are generated, the first +% using the \BibTeX\ file |texlit.bib| and the style |plain|, the +% second using the \BibTeX\ file |lit.bib| and the style |abbrv|. +% % +% \begin{verbatim} +% \documentclass{article} +% \usepackage{bibunits} +% +% \begin{document} +% \begin{bibunit}[plain] +% some text \cite{Lamport:1994} more text more citations +% \putbib[texlit] +% \end{bibunit} +% some text between the units +% \begin{bibunit}[abbrv] +% some text \cite{Knuth:1991} more text more citations +% \putbib[lit] +% \end{bibunit} +% \end{document} +% \end{verbatim} +% +% If all bibunits use the same \BibTeX\ files and style, you can +% specify defaults and omit the optional arguments of the |bibunit| +% environment and the |\putbib| macro. In the second example, a +% default \BibTeX\ file |texlit.bib| and a default style |abbrv| is +% defined using |\defaultbibliography| and |\defaultbibliographystyle|. +% % +% \begin{verbatim} +% \documentclass{article} +% \usepackage{bibunits} +% +% \begin{document} +% \defaultbibliography{texlit} +% \defaultbibliographystyle{plain} +% +% \begin{bibunit} +% some text \cite{Lamport:1994} more text more citations +% \putbib +% \end{bibunit} +% some text between the units +% \begin{bibunit} +% some text \cite{Knuth:1991} more text more citations +% \putbib +% \end{bibunit} +% \end{document} +% \end{verbatim} +% +% If you use, e.g., the class |article|, the heading of the bibliography has +% the same font size as a section, which might be too large, especially if +% you have bibunits \emph{within} sections or even subsections. In +% this case you may want to change the bibliography heading to have +% the same appearance as a subsection. This can be done by passing the +% option \option{subsectionbib} to \package{bibunits}. +% % +% \begin{verbatim} +% \documentclass{article} +% \usepackage[subsectionbib]{bibunits} +% \end{verbatim} +% +% Similarily, if you use a class such as |book| where the +% bibliography headings appear at the chapter level by default, +% headings of the local bibliographies can be changed to appear at the +% section level by passing the +% option \option{sectionbib} to \package{bibunits}. +% % +% \begin{verbatim} +% \documentclass{book} +% \usepackage[sectionbib]{bibunits} +% \end{verbatim} +% +% +% +% +% \subsection{Bibunits by chapters or sections} +% +% You can also define bibliographies for every chapter or section. In +% this case, the redefinition of |\thebibliography| by passing options +% \option{sectionbib} resp.\ \option{subsectionbib} is essential for +% the proper behavior of the \package{bibunits} package. The reason is +% quite simple: if you create bibliographies for every section, +% and |\thebibliography| also appears at the section level, a new +% unit is opened by |\thebibliography|, and the information of the +% previous unit is no longer available. (More technically: The +% auxiliary file of the previous unit is closed, and the +% replacement text for the citation which is generated inside +% |\thebibliography| cannot be written to this file. Instead, it is +% written to the global |.aux| file.) +% +% The next example corresponds to the first example of the previous +% section with different \BibTeX\ files and styles. Note that you have +% to specify the |\defaultbibliographystyle| \emph{before} the corresponding +% section. +% % +% \begin{verbatim} +% \documentclass{article} +% \usepackage[subsectionbib]{bibunits} +% +% \begin{document} +% \bibliographyunit[\section] +% \defaultbibliographystyle{plain} +% +% \section{First section} +% some text \cite{Lamport:1994} more text more citations +% \putbib[texlit] +% some text between the units +% \defaultbibliographystyle{abbrv} +% \section{Second and last section} +% some text \cite{Knuth:1991} more text more citations +% \putbib[lit] +% \end{document} +% \end{verbatim} +% % +% \vspace{-1ex} +% \noindent You can also use the same \BibTeX\ file and style for all units. +% % +% \begin{verbatim} +% \documentclass{article} +% \usepackage[subsectionbib]{bibunits} +% +% \begin{document} +% \bibliographyunit[\section] +% \defaultbibliography{texlit} +% \defaultbibliographystyle{plain} +% +% \section{First section} +% some text \cite{Lamport:1994} more text more citations +% \putbib +% some text between the units +% \section{Second and last section} +% some text \cite{Knuth:1991} more text more citations +% \putbib +% \end{document} +% \end{verbatim} +% +% +% +% +% \subsection{Bibunits and a global bibliography} +% +% In all four examples, one can specify a global +% bibliography and its style with the usual \LaTeX\ commands. +% Citations for the global bibliography are entered using |\cite| and +% |\nocite| commands while outside a unit or using |\cite*| and +% |\nocite*| while inside a unit. The starred forms generate citations +% also for the local unit. Thus it is not possible to generate +% citations \emph{only} for the global bibliography while inside a +% unit (which seems to be a reasonable restriction). Note that if +% |\bibliographyunit| is active, \emph{and} you use a global +% bibliography, \emph{and} you use the same \BibTeX\ file and style +% for all (local as well as global) bibliographies, \emph{then} the +% |\defaultbibliography| and |\defaultbibliographystyle| commands are not +% necessary. In this case proper defaults for the local bibliographies +% are specified by the commands +% |\bibliography| and |\bibliographystyle|, too. Note that a second +% run of \LaTeX\ is necessary before \BibTeX\ processing, in case that +% the global bibliography has its usual place at the end of the +% document. +% +% The font size used to typeset the global bibliography is the same as +% for the local bibliographies. To change this, switch off the +% bibliography units by chapters or sections using |\bibliographyunit| +% and change |\thebibliography| to its original meaning just before +% the global bibliography. +% % +% \begin{verbatim} +% \bibliographyunit +% \let\thebibliography\stdthebibliography +% \bibliographystyle{plain} % global bibliography +% \bibliography{texlit} % global bibliography +% \end{verbatim} +% +% +% +% \section{Acknowledgments} +% +% The author thanks Jos\'e Alberto Fern\'andez for the coding of +% \package{bibunits} v1.0. Further, contributions of code fragments +% from various people are gratefully acknowledged (in alphabetical +% order): Battista Benciolini for the patch to allow |putbib| to +% appear before the first occurrence of a cite within a bibunit; Jens +% Berger for the \package{jurabib} fragment of the \package{babel} +% compatibility code; Jason Harrison for an +% alternative script to call \BibTeX\ for each local auxiliary file; +% Werner J\"urgens for the hint on how to suppress unwanted spaces; +% Frank Mittelbach for a code fragment how to make \package{bibunits} +% ``Label(s) may have changed.'' warning appear at the end of a \LaTeX\ run; +% Andrew E.\ Schulman for an early version of the \package{natbib} +% compatibility patch; Stefan Ullrich for an early version of the +% \package{jurabib} compatibility patch (communicated by Jens Berger) +% and the \package{mparhack} compatibility patch. Finally, the author +% acknowledges the contributions of numerous people, in particular +% Frank Mittelbach, whose suggestions and bug reports have helped to +% improve \package{bibunits}. +% +% +% \StopEventually{} +% +% +% +% +% \section{The Macros} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% +% \subsection{Allocation} +% +% \begin{macro}{\@bu@tempcnta} +% \changes{v2.1m}{2000/10/05}{Counter removed.} +% +% [Allocation of counter removed.] +% \end{macro} +% +% +% +% \subsection{Option handling} +% +% +% \begin{macro}{\iflabelstoglobalaux} +% \changes{v2.1c}{1999/11/24}{Add code for option processing and option +% \option{labelstoglobalaux}.} +% +% Define a new if to switch between global definition of labels +% within a bibliography and local labels (default). Global labels +% can be activated with option \option{labelstoglobalaux}. +% \begin{macrocode} +\newif\iflabelstoglobalaux \labelstoglobalauxfalse +\DeclareOption{labelstoglobalaux}{\labelstoglobalauxtrue} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\ifglobalcitecopy} +% \changes{v2.1l}{2000/10/03}{Add code for option \option{globalcitecopy}.} +% +% Define a new if to switch between entering of cite commands +% within a bibunit also to the global bibliography or only to the local +% bibliography (default). Entering of cite commands also to the +% global bibliography can be activated with +% option \option{globalcitecopy}. +% +% \begin{macrocode} +\newif\ifglobalcitecopy +\globalcitecopyfalse +\DeclareOption{globalcitecopy}{\globalcitecopytrue} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{sectionbib} +% \changes{v2.2d}{2003/07/27}{Add code for option \option{sectionbib}.} +% +% Let bibliography titles appear at the section level. Useful for +% chapters as bibliography units. +% +% \begin{macrocode} +\DeclareOption{sectionbib}{% + \AtBeginDocument{% + \let\stdthebibliography\thebibliography + \def\thebibliography{% + \let\chapter\section + \stdthebibliography}}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{subsectionbib} +% \changes{v2.2d}{2003/07/27}{Add code for option \option{subsectionbib}.} +% +% Let bibliography titles appear at the subsection level. Useful for +% sections as bibliography units. +% +% \begin{macrocode} +\DeclareOption{subsectionbib}{% + \AtBeginDocument{% + \let\stdthebibliography\thebibliography + \def\thebibliography{% + \let\chapter\subsection + \let\section\subsection + \stdthebibliography}}} +% \end{macrocode} +% \end{macro} +% +% +% \noindent Finally, process all package options. +% +% \begin{macrocode} +\ProcessOptions +% \end{macrocode} +% +% +% +% \subsection{An auxiliary file for each bibunit is provided} +% +% +% \begin{macro}{\@bibunitaux} +% Define the file descriptor |\@bibunitaux| of the auxiliary file that is +% generated for each bibunit. +% \begin{macrocode} +\newwrite\@bibunitaux +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@bibunitauxcnt} +% Define the counter for the bibunits and initialize it with zero. +% \begin{macrocode} +\newcount\@bibunitauxcnt \@bibunitauxcnt=0 +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@bibunitname} +% \changes{v1.0d}{1998/11/15}{New name +% \mbox{\texttt{bu}\string\meta{i}\texttt{.aux}} for the +% auxiliary files that are created for each bibunit.} +% +% The command |\@bibunitname| sets the basename of the auxiliary files +% that are created for each bibunit to |bu| (|bu| for +% |b|ib|u|nits), followed by the current number of the bibunit, +% |\the\@bibunitauxcnt|. (In version 1.0 of \package{bibunits} there +% was no such command, and the command sequence +% |\jobname.\the\@bibunitauxcnt| was directly used.) +% \begin{macrocode} +\def\@bibunitname{bu\the\@bibunitauxcnt} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{New cite commands} +% +% The main idea is to save the old meaning of the command and then +% to redefine it. At the beginning of a bibunit, the new commands are +% activated, at the end of a bibunit, the old commands are restored. +% +% \begin{macro}{\if@localcite} +% \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to +% \macrott{@starredversion}.} +% +% Define a new if to store if a macro is evoked with or without a +% star. This is used by cite commands to switch between local and +% global cites, i.e., cites of references that occur in the local +% or also in the global bibliography. The is also a starred version +% of |\bibliopography| and |\bibliopographystyle| to enter +% default \BibTeX\ data files and styles for the bibunits only. +% +% \begin{macrocode} +\newif\if@starredversion +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@localcitedefault} +% \changes{v2.1j}{2000/10/02}{Macro removed.} +% +% [Macro deleted.] +% \end{macro} +% +% +% \begin{macro}{\std@cite} +% \begin{macro}{\bu@cite} +% \changes{v2.0c}{1999/09/27}{Macro declared robust.} +% \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to +% \macrott{@starredversion} and switch false and true.} +% +% \begin{macrocode} +\let\std@cite\cite +\DeclareRobustCommand\bu@cite{% + \@ifstar + {\@starredversiontrue\std@cite}% + {\@starredversionfalse\std@cite}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\std@@citex} +% \begin{macro}{\bu@@citex} +% \changes{v2.0a}{1999/06/02}{\package{natbib} v6.5 compatibility.} +% \changes{v2.0b}{1999/07/06}{Implementation streamlined.} +% \changes{v2.0f}{1999/10/05}{\package{overcite} compatibility.} +% \changes{v2.0g}{1999/10/22}{\package{natbib} v7.0 compatibility.} +% \changes{v2.1b}{1999/11/24}{\macrott{leavevmode} added.} +% \changes{v2.1f}{2000/04/02}{\macrott{@startbibunitorrelax} added, +% definition of standard version for all \package{natbib} cite +% commands removed.} +% \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to +% \macrott{@starredversion} and switch if branches, +% delete \macrott{@localcitedefault}.} +% \changes{v2.1k}{2000/10/02}{For standard definition (without +% \package{bibunits} or \package{overcite}), replace direct +% writing to \macrott{@bibunitaux} by use of \macrott{std@nocite}.} +% \changes{v2.1l}{2000/10/03}{Handling of option +% \option{globalcitecopy} added.} +% \changes{v2.1n}{2000/10/08}{\package{jurabib} compatibility.} +% \changes{v2.2b}{2003/07/12}{\package{cite} compatibility.} +% +% Define the \package{bibunits} macro |\bu@@citex| replacing the +% internal macro |\@citex|. Macro |\@citex| is evoked by the |\cite| +% and its various derivatives defined by other packages. Basically, +% |\bu@@citex| the following actions take place. The macro +% |\startbibunitorrelax| ensures that auxiliary files are created +% only for non-empty bibunits. The macro |\leavevmode| are added to +% fix a problem that occurs in some special situations when a +% |\paragraph| within a bibunit is immediately followed by a cite +% command, as explained below. Next, the standard version of +% |\@citex|, namely |\std@@citex| is evoked with |\@auxout| locally +% changed, so that citations are written to the local auxiliary +% file of each bibunit. Finally, if option \option{globalcitecopy} +% is active or the starred form of the cite command is evoked, +% i.e., |\if@starredversion| is true, citations are +% \emph{also} written to the global auxiliary file, so that +% citations appear in both the local as well as the global +% bibliography at the same time. +% +% After this general description, the use of |\leavevmode| is +% further detailed. The |\leavevmode| commands are added to fix a +% problem that occurs when a |\paragraph| within a bibunit is +% immediately followed by a cite command, and within |\paragraph| +% something is written to |\@auxout|, e.g., an entry for the table +% of contents or the index. In this cases, the entry go to the +% local auxiliary file of the corresponding bibunit instead of the +% standard auxiliary file |\@auxout|. The reason is that the +% argument of |\paragraph| is stored in an |\everypar|, which is +% evaluated later. In case of a cite command that immediately +% follows |\paragraph|, the evaluation occurs within the scope of +% the cite, where the |\@auxout| is let to the local auxiliary file +% of the corresponding bibunit. Consequently, the entry is written +% to the wrong, i.e., local, auxiliary file. We add an +% |\leavevmode| to evaluate |\everypar| before |\@auxout| is +% redefined. Alternatively, the typesetting of |\paragraph| in +% |\@xsect| of the \LaTeX\ kernel might be revised. +% +% Additional to the new standard definition of |\@citex|, different +% versions have to be defined depending other packages loaded, +% namely \package{natbib}, \package{overcite} and +% \package{jurabib}. These packages are mutually exclusive, with +% the priority as defined by their order in the previous sentence. +% That means, e.g., if you have chosen \package{natbib} together +% with \package{bibunits}, you cannot use \package{overcite} or +% \package{jurabib}. +% +% All definitions are done |\AtBeginDocument| so that packages +% loaded after \package{bibunits} can be discovered. +% +% \begin{macrocode} +\AtBeginDocument{% +% \end{macrocode} +% +% Several modifications and additions are necessary if package +% \package{natbib} is loaded: First macro |\NAT@set@cites| is used +% to invoke \package{natbib}'s cite commands. This is only +% necessary if these commands have not been set, i.e. in case +% \package{bibunits} is evoked before \package{natbib}, but does +% not do any harm otherwise. Second macro |\bu@@citex| is changed +% as described below, and the various versions of +% \package{natbib}'s cite commands are save in a |\std|\dots version. +% +% The definition of |\bu@@citex| is changed in the following ways: +% i) the |\let| of |\@auxout| is encapsulated using |\begingroup| +% and |\endgroup| instead of braces, since braces results in an +% error; ii) macro |\std@@citex| has two optional +% arguments instead of one; iii) the code of |\if@starredversion| is +% skipped in favor of the meaning of a starred cite in +% \package{natbib}, namely to force full listing of multiple +% authors. +% +% \begin{macrocode} + \@ifpackageloaded{natbib}% + {% + \NAT@set@cites \let\std@@citex\@citex + \def\bu@@citex[#1][#2]#3{% + \@startbibunitorrelax + \leavevmode + \begingroup\let\@auxout\@bibunitaux\std@@citex[#1][#2]{#3}\endgroup + \ifglobalcitecopy + \std@nocite{#3}% + \fi + }% + }% +% \end{macrocode} +% +% If \package{natbib} is not loaded, we check for +% \package{cite}. In this case, an additional command +% |\@citew| has to be redefined which handles |\cite| without an +% argument. Further, an internal command of \package{cite}, +% namely |\@nocite| is used to write to the standard auxiliary file. +% +% \begin{macrocode} + {% + \@ifpackageloaded{cite}% + {% + \let\std@@citew\@citew + \def\bu@@citew#1{% + \@startbibunitorrelax + \leavevmode + {\let\@auxout\@bibunitaux \std@@citew{#1}}% + \ifglobalcitecopy + \@nocite{#1}% + \else + \if@starredversion + \@nocite{#1}% + \fi + \fi + } + \let\std@@citex\@citex + \def\bu@@citex[#1]#2{% + \@startbibunitorrelax + \leavevmode + {\let\@auxout\@bibunitaux \std@@citex[#1]{#2}}% + \ifglobalcitecopy + \@nocite{#2}% + \else + \if@starredversion + \@nocite{#2}% + \fi + \fi + } + }% +% \end{macrocode} +% +% Next we check if \package{overcite} is loaded. This is done for +% compatibility reasons only, since \package{overcite} is +% integrated into \package{cite} since version 4.0.---We give a +% warning that an obsolete package has been loaded and do the +% same definitions as for \package{cite}. +% +% \begin{macrocode} + {% + \@ifpackageloaded{overcite}% + {% + \PackageWarningNoLine{bibunits}% + {Obsolete package overcite loaded. Use package cite which + option [superscript] instead}% + \let\std@@citew\@citew + \def\bu@@citew#1{% + \@startbibunitorrelax + \leavevmode + {\let\@auxout\@bibunitaux \std@@citew{#1}}% + \ifglobalcitecopy + \@nocite{#1}% + \else + \if@starredversion + \@nocite{#1}% + \fi + \fi + } + \let\std@@citex\@citex + \def\bu@@citex[#1]#2{% + \@startbibunitorrelax + \leavevmode + {\let\@auxout\@bibunitaux \std@@citex[#1]{#2}}% + \ifglobalcitecopy + \@nocite{#2}% + \else + \if@starredversion + \@nocite{#2}% + \fi + \fi + } + }% +% \end{macrocode} +% +% If neither \package{natbib} nor \package{cite} nor +% \package{overcite} are loaded, we +% check for \package{jurabib}. In this case, the definition of +% |\std@@citex| differs from the default version by a second +% optional argument, similar to \package{natbib}. +% +% \begin{macrocode} + {% + \@ifpackageloaded{jurabib}% + {% + \let\std@@citex\@citex + \def\bu@@citex[#1][#2]#3{% + \@startbibunitorrelax + \leavevmode + {\let\@auxout\@bibunitaux \std@@citex[#1][#2]{#3}}% + \ifglobalcitecopy + \std@nocite{#3}% + \else + \if@starredversion + \std@nocite{#3}% + \fi + \fi + }% + }% +% \end{macrocode} +% +% Finally, the default definition. +% +% \begin{macrocode} + {% + \let\std@@citex\@citex + \def\bu@@citex[#1]#2{% + \@startbibunitorrelax + \leavevmode + {\let\@auxout\@bibunitaux \std@@citex[#1]{#2}}% + \ifglobalcitecopy + \std@nocite{#2}% + \else + \if@starredversion + \std@nocite{#2}% + \fi + \fi + }% + }% + }% + }% + }% +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\std@nocite} +% \begin{macro}{\bu@nocite} +% \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to +% \macrott{@starredversion} and switch false and true.} +% +% \begin{macrocode} +\let\std@nocite\nocite +\def\bu@nocite{% + \@ifstar + {\@starredversiontrue\@bu@nocite}% + {\@starredversionfalse\@bu@nocite}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@bu@nocite} +% \changes{v2.1f}{2000/04/02}{\macrott{@startbibunitorrelax} added.} +% \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to +% \macrott{@starredversion} and switch if branches, +% delete \macrott{@localcitedefault}.} +% \changes{v2.1k}{2000/10/02}{Replace direct writing to +% \macrott{@bibunitaux} by \macrott{std@nocite} within scope +% of redefined \macrott{@auxout}, \macrott{@bsphack} and +% \macrott{@esphack} removed.} +% \changes{v2.1l}{2000/10/03}{Handling of option +% \option{globalcitecopy} added.} +% +% \begin{macrocode} +\def\@bu@nocite#1{% + \@startbibunitorrelax + {\let\@auxout\@bibunitaux \std@nocite{#1}}% + \ifglobalcitecopy + \std@nocite{#1}% + \else + \if@starredversion + \std@nocite{#1}% + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{New bibliography and bibliographystyle commands} +% +% \changes{v1.0e}{1998/11/30}{Global definition of bibunit data and style.} +% +% In this paragraph no general description is given, rather an +% explanation why in the following two macros |\@bu@bibliography| and +% |\@bu@bibliographystyle| the command |\gdef\bu@bibdata| and +% |\gdef\bu@bibstyle| are written to the auxiliary file and are directly +% executed, too. The execution through the auxiliary file has been left +% for compatibility to older versions of \package{bibunits}: if you +% also have a global bibliography, you can specify \BibTeX\ styles and +% files for the global bibliography (using |\bibliography| and +% |\bibliographystyle|, usually at the end of the document). In this +% case, writing the execution of |\gdef| to the auxiliary file ensures +% that in subsequent runs of \LaTeX defaults for the local +% bibliographies are generated as well. Without this, the user would +% have to explicitly specify \BibTeX\ files and styles for the local +% bibliographies using the starred forms |\bibliography*| and +% |\bibliographystyle*|. On the other hand, with the direct execution +% of the |\gdef| commands, the starred forms specify defaults which can be +% used already in the first run of \LaTeX\, if put before the first bibunit. +% +% +% +% \begin{macro}{\bu@bibdata} +% \changes{v2.2a}{2003/07/12}{Default changed from \texttt{\{\}} to +% \macrott{jobname}.} +% +% Define data files store. +% \begin{macrocode} +\def\bu@bibdata{\jobname} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\orig@bibliography} +% \begin{macro}{\bibliography} +% \begin{macro}{\std@bibliography} +% \changes{v2.1h}{2000/08/06}{New definition of +% \macrott{bibliography} to open \texttt{bu.aux}, write to +% \macrott{@mainaux} and close \texttt{bu.aux}.} +% +% If |\labelstoglobalaux| is false, define a new version of +% |\bibliography| where the replacement text for the labels is +% written to a new file |bu.aux|. This file is input at the +% end of each bibunit to restore the global labels which are +% overwritten if a global item is also cited within a bibunit. +% Input of the main auxiliary file is not appropriate, because this +% file contains additional material which should not be input more +% than once, e.g., commands which generate entries for the table of +% contents. +% +% The definition of |\std@bibliography| is used to define a +% version of |\bibliography| with enhanced functionality +% |\bu@bibliography|. +% +% \begin{macrocode} +\AtBeginDocument{% + \iflabelstoglobalaux + \else + \let\orig@bibliography\bibliography + \def\bibliography#1{% + \if@filesw + \immediate\openout\@bibunitaux bu.aux + \immediate\write\@mainaux{\string\@input{bu.aux}}% + \fi + \orig@bibliography{#1}% + \if@filesw + \immediate\closeout\@bibunitaux + \fi + }% + \fi + \let\std@bibliography\bibliography +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\bu@bibliography} +% \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to +% \macrott{@starredversion}.} +% +% \begin{macrocode} +\def\bu@bibliography{% + \@ifstar + {\@starredversiontrue\@bu@bibliography}% + {\@starredversionfalse\@bu@bibliography}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@bu@bibliography} +% \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to +% \macrott{@starredversion}, delete \macrott{@localcitedefault}.} +% \changes{v2.2a}{2003/07/12}{Evokes new macro +% \macrott{defaultbibliography}.} +% +% \begin{macrocode} +\def\@bu@bibliography#1{% + \defaultbibliography{#1}% + \if@starredversion + \else + \std@bibliography{#1}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\defaultbibliography} +% \changes{v2.2a}{2003/07/12}{New macro.} +% +% \macrott{defaultbibliography} allows to define default +% bibliography files whether bibunits is active or not. Does the same as +% \macrott{bibliography*} when bibunits is active. +% +% \begin{macrocode} +\def\defaultbibliography#1{% + \if@filesw + \immediate\write\@auxout{\string\gdef\string\bu@bibdata{#1}}% + \fi + \gdef\bu@bibdata{#1}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\bu@bibstyle} +% \changes{v2.2a}{2003/07/12}{Default changed from \texttt{\{\}} to +% \texttt{plain}.} +% +% Define style store. +% \begin{macrocode} +\def\bu@bibstyle{plain} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\std@bibliographystyle} +% \begin{macro}{\bu@bibliographystyle} +% \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to +% \macrott{@starredversion}.} +% +% \begin{macrocode} +\let\std@bibliographystyle\bibliographystyle +\def\bu@bibliographystyle{% + \@ifstar + {\@starredversiontrue\@bu@bibliographystyle}% + {\@starredversionfalse\@bu@bibliographystyle}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@bu@bibliographystyle} +% \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to +% \macrott{@starredversion}, delete \macrott{@localcitedefault}.} +% \changes{v2.2a}{2003/07/12}{Evokes new macro +% \macrott{defaultbibliographystyle}.} +% +% \begin{macrocode} +\def\@bu@bibliographystyle#1{% + \defaultbibliographystyle{#1}% + \if@starredversion + \else + \std@bibliographystyle{#1}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\defaultbibliographystyle} +% \changes{v2.2a}{2003/07/12}{New macro.} +% +% \macrott{defaultbibliographystyle} allows to define a default +% bibliography style whether bibunits is active or not. Does the same as +% \macrott{bibliographystyle*} when bibunits is active. +% +% \begin{macrocode} +\def\defaultbibliographystyle#1{% + \if@filesw + \immediate\write\@auxout{\string\gdef\string\bu@bibstyle{#1}}% + \fi + \gdef\bu@bibstyle{#1}% +} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{Bibunits} +% +% +% \subsubsection{Bibunits by an extra environment} +% +% The starting of a bibunit is a two-step process: in the first step +% (macro |\bibunit|), all cite commands are redefined to trigger the +% second step, namely the actual starting of a bibunit (macro +% |\@startbibunit|). This may seem weird on the first sight, but has +% the advantage that no auxiliary files are created if a bibunit +% contains no |\cite|, |\cite*|, |\nocite| or |\nocite*| commands. To +% handle citations of the same reference in different bibliographies, +% the local auxiliary file is input at the beginning of each bibunit +% (in macro |\@startbibunit|), and the replacement text is also +% written to the \emph{local} auxiliary file (in macro |\@putbib|). +% +% +% \begin{macro}{\bibunit} +% \changes{v2.0g}{1999/10/22}{\package{natbib} v7.0 compatibility.} +% \changes{v2.1f}{2000/04/02}{Evoking of \package{bibunits} version +% of cite commands, let \macrott{@startbibunitorrelax} to +% \macrott{@startbibunit} added.} +% +% At the beginning of a bibunit, all cite command are set to +% their initializing versions, and |\@finishbibunit| can relax, +% because currently no citation has appeared. Hence no local +% auxiliary file has been opened for the current bibunit, which has to +% be closed at the end of the bibunit. +% \begin{macrocode} +\def\bibunit{% + \global\let\cite\bu@cite + \global\let\@citex\bu@@citex + \global\let\@citew\bu@@citew + \global\let\nocite\bu@nocite + \global\let\@startbibunitorrelax\@startbibunit + \global\let\@finishbibunit\relax + \@ifnextchar[{\@bibunitx}{\@bibunitx[\bu@bibstyle]}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@bibunitx} +% If the current bibunit has an extra bibstyle, it is saved in +% |\@localbibstyle|. (In version 1.0a |\bibstyle| command has been +% directly written to the local auxiliary file. This is now done in +% |\@startbibunit|.) +% \begin{macrocode} +\def\@bibunitx[#1]{\gdef\@localbibstyle{#1}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\endbibunit} +% \changes{v2.0f}{1999/10/05}{\package{overcite} compatibility.} +% \changes{v2.0g}{1999/10/22}{\package{natbib} v7.0 compatibility.} +% \changes{v2.1f}{2000/04/02}{Restoration of standard versions of +% \package{natbib} cite commands removed.} +% \changes{v2.1h}{2000/08/06}{Input \texttt{bu.aux}.} +% \changes{v2.1o}{2000/10/09}{Use \macrott{@input} instead of +% \macrott{@input@} for reading \texttt{bu.aux}.} +% +% At the end of the bibunit, all cite commands are restored to +% their former meaning (|\@citew| is used by package +% \package{overcite}). Also the local auxiliary file is closed if +% it has been opened. Finally, the replacement text for the global +% citation labels (if exists) are restored using |\@input|. +% \begin{macrocode} +\def\endbibunit{% + \global\let\cite\std@cite + \global\let\@citex\std@@citex + \global\let\@citew\std@@citew + \global\let\nocite\std@nocite + \@finishbibunit + \@input{bu.aux}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@startbibunit} +% \changes{v2.0f}{1999/10/05}{\package{overcite} compatibility.} +% \changes{v2.0g}{1999/10/22}{\package{natbib} v7.0 compatibility.} +% \changes{v2.1d}{2000/01/27}{Remove enclosing braces around input +% of local auxiliary file and restore catcodes and endlinechar.} +% \changes{v2.1e}{2000/03/28}{Change catcode of `:'.} +% \changes{v2.1f}{2000/04/02}{Evoking of \package{bibunit} version +% of cite commands moved to \macrott{bibunit}, restoration of +% standard versions of \package{natbib} cite commands removed, +% let \macrott{@startbibunitorrelax} to \macrott{relax}. +% added.} +% \changes{v2.1m}{2000/10/05}{Change of catcode of `:' removed; +% encapsulate setting of \macrott{endlinechar} by braces.} +% +% This command does all the necessary initialization for a bibunit: +% New versions of the cite commands are activated (|\@citew| is +% used by package \package{overcite}), the macro |\@finishbibunit| +% which is called by |\endbibunit| is let to close the local +% auxiliary file, the number of the bibunits is incremented. Most +% important, the local auxiliary file is read, so that citations of +% the same reference in different bibliographies are handled +% correctly for numerical citation schemes. Finally, the bibstyle +% is written to the local auxiliary file. +% \begin{macrocode} +\def\@startbibunit{% + \global\let\@startbibunitorrelax\relax + \global\let\@finishbibunit\@finishstartedbibunit + \global\advance\@bibunitauxcnt 1 + \if@filesw +% \end{macrocode} +% Input the local auxiliary file and prevent the creation of +% unwanted spaces by setting |\endlinechar-1| (|\catcode`\^^M=9| +% would also work here). +% \begin{macrocode} + {\endlinechar-1 + \@input{\@bibunitname.aux}}% + \immediate\openout\@bibunitaux\@bibunitname.aux + \immediate\write\@bibunitaux{\string\bibstyle{\@localbibstyle}}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \noindent When bibunits are specified by chapters or sections, a new +% chapter or section marks both the end of the old and the start of the +% new bibunit by calling |\endbibunit|. For the first chapter or section, +% the command |\@finishbibunit| has to be defined (to do nothing), +% which is done here. +% \begin{macrocode} +\let\@finishbibunit\relax +% \end{macrocode} +% +% +% \begin{macro}{\@finishstartedbibunit} +% \changes{v2.2c}{2003/07/27}{Input of \macrott{@bibunitname.aux} added.} +% +% Close the local auxiliary file. +% \begin{macrocode} +\def\@finishstartedbibunit{% + \if@filesw + \immediate\closeout\@bibunitaux + \fi +% \end{macrocode} +% Check for if the labels have changed and a ``Rerun to get +% cross-references right'' warning needs to be given. The mechanism +% is the same as in |\enddocument|: redefine |\bibcite| to check +% if the labels have changed and then read the auxiliary file. +% Since we have changed |\bibcite| to call directly |\@namedef|, we +% use a variant |\@xtestdef| of \LaTeX's\ |\@testdef| for this job. +% Also, we do not have to |\makeatletter| before reading +% |\@bibunitaux|, because this file is supposed to contain only +% bibliography related macros without any |@|'s. +% But we do have to change |\endlinechar| as above to prevent +% the creation of unwanted spaces. +% +% \begin{macrocode} + \ifx\bibunits@rerun@warning\@empty + \if@filesw + {\endlinechar-1 + \let\@namedef\@xtestdef + \@input{\@bibunitname.aux}}% + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\bibunits@rerunwaring} +% \changes{v2.2c}{2003/07/27}{Macro added.} +% +% Initialize |\bibunits@rerun@warning| as empty and call it +% |\AtEndDocument|. The definition of |\bibunits@rerun@warning| may +% be changed in macro |\@xtestdef|. +% \begin{macrocode} +\let\bibunits@rerun@warning\@empty +\AtEndDocument\bibunits@rerun@warning +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@xtestdef} +% \changes{v2.2c}{2003/07/27}{Macro added.} +% +% Check if labels created by |\bibcite| in the local auxiliary +% files may have have changed. Analogous to |\@testdef| of \LaTeX. +% \begin{macrocode} +\def\@xtestdef #1#2{% + \def\reserved@a{#2}% + \expandafter\ifx\csname#1\endcsname\reserved@a + \else + \gdef\bibunits@rerun@warning{% + \PackageWarningNoLine{bibunits}{Label(s) may have changed. + Rerun to get cross-references right}}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Bibunits by chapters or sections} +% +% |\chapter| or |\section| substituting definition. +% +% \begin{macro}{\old@bibunit} +% \begin{macro}{\@bibunit} +% \begin{macro}{\@endbibunit} +% \begin{macrocode} +\let\old@bibunit\@gobble +\def\@bibunit{\endbibunit\bibunit\old@bibunit} +\def\@endbibunit{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\bibliographyunit} +% \begin{macrocode} +\def\bibliographyunit{% + \@endbibunit + \@ifnextchar[{\@bibliographyunit}{% + \global\let\old@bibunit\@gobble + \global\let\bibliography\std@bibliography + \global\let\bibliographystyle\std@bibliographystyle + \endbibunit + \gdef\@endbibunit{}}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@bibliographyunit} +% \begin{macrocode} +\def\@bibliographyunit[#1]{% + \global\let\bibliography\bu@bibliography + \global\let\bibliographystyle\bu@bibliographystyle + \global\let\old@bibunit#1 + \global\let#1\@bibunit + \gdef\@endbibunit{\global\let#1\old@bibunit}% +} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{Insert a local bibliography} +% +% \begin{macro}{\putbib} +% If the \BibTeX\ data file is given as an optional argument, evoke +% |\@putbib| which uses this argument, otherwise call |\@putbib| +% with the default \BibTeX\ data file stored in |\bu@bibdata|. +% +% \begin{macrocode} +\def\putbib{\@ifnextchar[{\@putbib}{\@putbib[\bu@bibdata]}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@putbib} +% \changes{v2.1a}{1999/11/15}{Set \macrott{temp@auxout} and activate +% \macrott{bu@addtocontents}.} +% \changes{v2.1c}{1999/11/24}{Change to respond to option +% \option{labelstoglobalaux}.} +% \changes{v2.1g}{2000/07/31}{Add activation of +% \macrott{bu@bibitem} and \macrott{bu@lbibitem}, remove activation of +% \macrott{bu@addtocontents} and redefinition of \macrott{@auxout}.} +% \changes{v2.1h}{2000/08/07}{Remove code for \option{labelstoglobalaux} +% and activation of \macrott{bu@bibitem} and +% \macrott{bu@lbibitem}.} +% \changes{v2.1i}{2000/09/30}{\macrott{@startbibunitorrelax} added.} +% \changes{v2.1o}{2000/10/09}{Add local .bbl files to +% \macrott{@filelist} by using \macrott{@input@} instead of +% \macrott{@input}.} +% +% Similar to |\bibliography|, |\@putbib| writes the \BibTeX\ data +% and |\@input|s the typeset bibliography |\@bibunitname.bbl|. Macro +% |\@startbibunitorrelax| triggers a new bibunit and allows +% |\putbib| to be issued before the first cite command within a +% bibunit. +% +% \begin{macrocode} +\def\@putbib[#1]{% + \@startbibunitorrelax + \if@filesw + \immediate\write\@bibunitaux{\string\bibdata{#1}}% + \fi + \@input@{\@bibunitname.bbl}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\bu@addtocontents} +% \changes{v2.1a}{1999/11/15}{Add macro.} +% \changes{v2.1g}{2000/07/31}{Remove macro.} +% +% [Macro removed.] +% \end{macro} +% +% +% \noindent The package allows the same cited item to occur in more than one +% bibliography. Therefore the text which actually replaces the |\cite| +% has to be kept locally, too. This can be switched off using +% \option{labelstoglobalaux}. +% +% The text which replaces the |\cite| is created by the |\bibitem| +% commands in the |.bbl| file which is |\@input|ed in |\@putbib|. The +% |\bibitem| macro invokes macros |\@lbibitem| or |\@bibitem| which +% write to |\@auxout|. By default, i.e., without option +% \option{labelstoglobalaux} these commands are replaced by +% \package{bibunits} version to write to the local auxiliary file of the +% bibunit. The former meaning of |\@auxout| is saved in |\temp@auxout| +% to be restored afterwards. +% +% Note that some packages, like \package{mparhack} or \komascript\ +% classes like \class{scrartcl} with option \option{bibtotoc} also write +% material to |\@auxout| while inside |\thebibliography| within the +% |.bbl| file. Therefore, redefining |\@auxout| in |\putbib| would +% result in erroneously writing this material to the local auxiliary +% file. Therefore, only the commands which actually write, i.e., +% |\@bibitem| and |\@lbibitem|, are redefined to write to the local +% auxiliary file. +% +% Note that the redefined command |\bibliography| which generates a global +% bibliography uses the same mechanism to write the replacement text +% for the cite commands to |bu.aux|. +% +% +% \begin{macro}{\std@bibitem} +% \begin{macro}{\std@lbibitem} +% \begin{macro}{\@bibitem} +% \begin{macro}{\@lbibitem} +% \changes{v2.1g}{2000/07/31}{Add macros.} +% \changes{v2.1h}{2000/08/07}{Direct redefinition of +% \macrott{@bibitem} and \macrott{@lbibitem} instead of +% definition of local \macrott{bu} versions, but only if +% \macrott{labelstoglobalaux} is false. Setting of +% \macrott{temp@auxout} added.} +% +% Define new versions of |\@bibitem| and |\@lbibitem| which write +% to |\bibunitaux| instead of |\@auxout|. +% Encapsulation with braces instead of the two |let|s results in +% |\@noitemerr| for the \textsf{thebibliography} environment. +% \begin{macrocode} +\AtBeginDocument{% + \iflabelstoglobalaux + \else + \let\std@bibitem\@bibitem + \let\std@lbibitem\@lbibitem + \def\@bibitem#1{% + \let\temp@auxout\@auxout + \let\@auxout\@bibunitaux + \std@bibitem{#1}% + \let\@auxout\temp@auxout + } + \def\@lbibitem[#1]#2{% + \let\temp@auxout\@auxout + \let\@auxout\@bibunitaux + \std@lbibitem[#1]{#2}% + \let\@auxout\temp@auxout + } + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \subsection{Allow commands to be used not only in preamble} +% +% \changes{v1.0f}{1998/12/29}{Remove \macrott{bibcite} from +% the list of preamble commands.} +% +% To handle citations of the same cited item in more than one +% bibliography, replacement text for the citation is written to the +% local auxiliary file. In subsequent runs of \LaTeX, this file is +% read at the beginning of the bibunit. +% +% +% \begin{macro}{\remequivalent} +% \begin{macro}{\plugh} +% \begin{macro}{\hgulp} +% The local auxiliary file contains |\bibcite| commands, which can be +% used only in the preamble in some older version of \LaTeX. For +% compatibility with these versions, macros to remove an item from +% a list are provided (see the \TeX book, p.\ 380; the only change +% is the separator |\do| instead of |\\|). +% \begin{macrocode} +\def\remequivalent#1\from#2{% + \let\given=#1% + \ifx#2\empty + \else + \edef#2{\expandafter\plugh#2\plugh}% + \fi +} +\def\plugh\do#1#2{% + \ifx#1\given + \else + \noexpand\do\noexpand#1% + \fi + \ifx#2\plugh + \hgulp\fi\plugh#2% +} +\def\hgulp\fi\plugh\plugh{\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% Now we are ready to remove |\bibcite| from the |\@preamblecmds| list. +% \begin{macrocode} +\remequivalent\bibcite\from\@preamblecmds +% \end{macrocode} +% +% +% \medskip +% The command |\bibcite| calls |\@newl@bel| to create new +% labels. This is by default only allowed as a preamble command and +% would cause a `Can be used only in preamble' warning. Instead of +% removing |\@newl@bel| from the list of preamble command (like +% |\bibcite|), we redefine |\bibcite| to directly call |\@namedef| and +% issue no warning. We decided not to give even an info, because +% multiple cited references should be perfectly normal to +% \package{bibunits}. Similarly, we modify \package{natbib}'s +% |\bibcite|. +% +% +% \begin{macro}{\bibcite} +% \changes{v2.0a}{1999/06/02}{\package{natbib} compatibility.} +% \changes{v2.0d}{1999/09/27}{Implementation streamlined.} +% \changes{v2.1d}{2000/01/27}{\macrott{@namedef} not defined +% \macrott{global}.} +% \changes{v2.1h}{2000/08/06}{\macrott{@namedef} again defined +% \macrott{global}.} +% +% \begin{macrocode} +\AtBeginDocument{% + \@ifpackageloaded{natbib}% + {\renewcommand\bibcite[2]{\global\@namedef{b@#1\@extra@binfo}{#2}}}% + {\renewcommand\bibcite[2]{\global\@namedef{b@#1}{#2}}}% +} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{Package \package{babel} compatibility} +% +% \begin{macro}{\@input} +% \begin{macro}{\std@@citex} +% \begin{macro}{\bu@@citex} +% \changes{v2.1m}{2000/10/05}{Redefinition of \macrott{std@@citex}, +% \macrott{@input} and, if \package{natbib} is loaded, of +% \macrott{bu@@citex}.} +% \changes{v2.2e}{2003/08/18}{Package \package{jurabib} specific +% redefinition of \macrott{std@@citex} and \macrott{bu@@citex}.} +% +% If \package{babel} with options \option{frenchb} is loaded, some +% characters like the colon `:' are made active. Since a colon +% frequently appears within a cite key, active characters have to +% be switched off for various commands. This can be done using +% |\bbl@redefine|. +% +% First, check if \package{babel} is loaded, by checking if |\bbl@redefine| +% is defined. In this case, |\bbl@redefine| commands. +% \begin{macrocode} +\AtBeginDocument{% + \@ifundefined{bbl@redefine}% + {}% + {% + \bbl@redefine\@input#1{% + \@safe@activestrue\org@@input{#1}\@safe@activesfalse}% + \@ifpackageloaded{natbib}% + {% + \bbl@redefine\std@@citex[#1][#2]#3{% + \@safe@activestrue\org@std@@citex[#1][#2]{#3}\@safe@activesfalse}% + \bbl@redefine\bu@@citex[#1][#2]#3{% + \@safe@activestrue\org@bu@@citex[#1][#2]{#3}\@safe@activesfalse}% + }% + { + \@ifpackageloaded{jurabib}% + {% + \bbl@redefine\std@@citex[#1][#2]#3{% + \@safe@activestrue\org@std@@citex[#1][#2]{#3}\@safe@activesfalse}% + \bbl@redefine\bu@@citex[#1][#2]#3{% + \@safe@activestrue\org@bu@@citex[#1][#2]{#3}\@safe@activesfalse}% + }% + {% neither natbib nor jurabib loaded + \bbl@redefine\std@@citex[#1]#2{% + \@safe@activestrue\org@std@@citex[#1]{#2}\@safe@activesfalse}% + }% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% \PrintIndex +% \PrintChanges +% \Finale +% diff --git a/Master/texmf-dist/source/latex/bibunits/bibunits.ins b/Master/texmf-dist/source/latex/bibunits/bibunits.ins new file mode 100644 index 00000000000..38bc72528b8 --- /dev/null +++ b/Master/texmf-dist/source/latex/bibunits/bibunits.ins @@ -0,0 +1,58 @@ +% +% This is file `bibunits.ins', +% for extracting package files from the original source file +% `bibunits.dtx'. +% +% This work may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, either version 1.3 of this license +% or any later version. The latest version of this license is in +% http://www.latex-project.org/lppl.txt and version 1.3 or later is +% part of all distributions of LaTeX version 2003/12/01 or later. +% +% To produce the package run bibunits.ins through LaTeX. +% +% Copyright (C) 2004 Thorsten Hansen + +\input docstrip + +\preamble + +IMPORTANT NOTICE: + +This work may be distributed and/or modified under the conditions of +the LaTeX Project Public License, either version 1.3 of this license +or any later version. The latest version of this license is in +http://www.latex-project.org/lppl.txt and version 1.3 or later is +part of all distributions of LaTeX version 2003/12/01 or +later. + +This work has the LPPL maintenance status "maintained". The Current +Maintainer of this work is Thorsten Hansen. + +Any modified versions of this file must be renamed with new filenames +distinct from bibunits.sty. + +This is a generated file. It may not be distributed without the +original source file \inFileName. + +To produce the documentation run \inFileName through LaTeX. + + +\endpreamble + +\generate{\file{bibunits.sty}{\from{bibunits.dtx}{package}}} + +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* `bibunits.sty'} +\Msg{*} +\Msg{* To produce the documentation run bibunits.dtx through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} + + +\endbatchfile |