ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/matt_papers/my_CV/bibunits/bibunits.dtx
Revision: 337
Committed: Thu Mar 13 20:09:19 2003 UTC (21 years, 4 months ago) by mmeineke
File size: 57833 byte(s)
Log Message:
*** empty log message ***

File Contents

# Content
1 % \CheckSum{499}
2 %
3 % \iffalse
4 %% Package `bibunits' to use with LaTeX2e.
5 %% Copyright (C) 1999, 2000 by Thorsten Hansen. All rights reserved.
6 %%
7 %
8 %<*dtx>
9 \ProvidesFile{bibunits.dtx}
10 %</dtx>
11 %<package>\NeedsTeXFormat{LaTeX2e}
12 %<package>\ProvidesPackage{bibunits}
13 %<driver>\ProvidesFile{bibunits.drv}
14 % \fi
15 % \ProvidesFile{bibunits.dtx}
16 [2000/10/10 v2.2 Multiple bibliographies in one document.]
17 %
18 % \iffalse
19 %<*driver>
20 \documentclass{ltxdoc}
21 \usepackage{ifthen}
22 %
23 % Sort `General´ before macros starting with `@'.
24 %
25 \makeatletter
26 \def\changes@#1#2#3{%
27 \protected@edef\@tempa{\noexpand\glossary{#1\levelchar
28 \ifx\saved@macroname\@empty
29 \space
30 \actualchar
31 \generalname
32 \else
33 \space % <-- \space added
34 \expandafter\@gobble
35 \saved@macroname
36 \actualchar
37 \string\verb\quotechar*%
38 \verbatimchar\saved@macroname
39 \verbatimchar
40 \fi
41 :\levelchar #3}}%
42 \@tempa\endgroup\@esphack}
43 \makeatother
44 %
45 %
46 %
47 \CodelineIndex
48 \RecordChanges
49 \OnlyDescription
50 \begin{document}
51 \DocInput{bibunits.dtx}
52 \end{document}
53 %</driver>
54 % \fi
55 %
56 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
57 %
58 % \newcommand{\class}[1]{\textsf{#1}}
59 % \renewcommand*\descriptionlabel[1]{\hspace\labelsep\option{#1}}
60 % \newcommand{\komascript}{KOMA-\textsc{Script}}
61 % \newcommand{\macrott}[1]{\texttt{\symbol{'134}#1}}
62 % \newcommand{\option}[1]{\textsf{#1}}
63 % \newcommand{\package}[1]{\textsf{#1}}
64 %
65 % ^^A
66 % ^^A Rules to separate figures from the text. (Modified from bibtopic.dtx).
67 % ^^A
68 % \newcommand\toprule[1][]{^^A
69 % \ifthenelse{\equal{#1}{}}{^^A
70 % \noindent{\makebox[\textwidth][t]{\hrulefill}}^^A
71 % }{%
72 % \noindent{\makebox[\textwidth][t]{\hrulefill^^A
73 % \raisebox{-.5ex}{ \small\ttfamily#1 }\hrulefill}}^^A
74 % }%
75 % \par\noindent}
76 %
77 % \newcommand\bottomrule{\noindent\rule[\baselineskip]{\textwidth}{.6pt}}
78 %
79 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80 %
81 % \hyphenation{bib-lio-gra-phy bib-lio-gra-phies bib-unit bib-units}
82 %
83 % \GetFileInfo{bibunits.dtx}
84 % \title{The \package{bibunits} Package}
85 % \author{Thorsten Hansen\\
86 % \normalsize hansen@neuro.informatik.uni-ulm.de}
87 % \date{\fileversion\quad \filedate}
88 % \maketitle
89 %
90 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
91 %
92 % \GlossaryPrologue{\section*{{Change History}}%
93 % \markboth{{Change History}}{{Change History}}%
94 % Version 1.0 by Jos\'e Alberto Fern\'andez, Version 1.0a till 2.1
95 % by Thorsten Hansen. Version numbers suffixed with characters have
96 % not been released. Since v2.1, each new version has a `General'
97 % item describing the new feature or the fixed problem,
98 % and local items describing the changes of the code.}
99 %
100 % \changes{v1.0}{1991/09/07}{Initial \LaTeX\ 2.09 version.}
101 % \changes{v1.0a}{1998/10/30}{The same cited item can occur in more than one
102 % bibliography.}
103 % \changes{v1.0b}{1998/11/09}{Auxiliary files are created only for bibunits
104 % which contain cite commands.}
105 % \changes{v1.0c}{1998/11/15}{Extra spaces are no longer introduced,
106 % upgrade to \LaTeXe.}
107 % \changes{v2.0}{1999/07/22}{Documentation.}
108 % \changes{v2.1a}{1999/11/15}{Add bibliography name to table of
109 % contents for compatibility with \komascript\ classes using the option
110 % \option{bibtotoc}.}
111 % \changes{v2.1b}{1999/11/24}{Fixed problem with cite command after
112 % \macrott{paragraph}.}
113 % \changes{v2.1c}{1999/11/24}{New option \option{labelstoglobalaux}.}
114 % \changes{v2.1d}{2000/01/27}{Global labels are no longer overwritten by
115 % local bibunit labels for the same cited item.}
116 % \changes{v2.1e}{2000/03/28}{Compatibility with \package{babel} using
117 % the option \option{frenchb}.}
118 % \changes{v2.1f}{2000/04/02}{Streamlined implementation of starting
119 % bibunits by cite commands.}
120 % \changes{v2.1g}{2000/07/31}{Compatibility with \package{mparhack}.}
121 % \changes{v2.1h}{2000/08/06}{New implementation: global labels are no
122 % longer overwritten by local bibunit labels for the same cited item.}
123 % \changes{v2.1i}{2000/09/30}{Allow \macrott{putbib} to appear before
124 % the first occurrence of a cite within a bibunit.}
125 % \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to
126 % \macrott{@starredversion}, delete macro \macrott{@localcitedefault}.}
127 % \changes{v2.1k}{2000/10/02}{Ignore spaces in arguments for starred
128 % version of \macrott{cite}.}
129 % \changes{v2.1l}{2000/10/03}{New option \option{globalcitecopy}.}
130 % \changes{v2.1m}{2000/10/05}{Compatibility with \package{natbib} and
131 % \package{babel} using the option \option{frenchb}.}
132 % \changes{v2.1n}{2000/10/08}{\package{jurabib} compatibility.}
133 % \changes{v2.1o}{2000/10/09}{Use of \macrott{@input} and
134 % \macrott{@input@} consistent with \LaTeX\ base implementation.}
135 % \changes{v2.2}{2000/10/10}{Documentation.}
136 %
137 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
138 %
139 %
140 % \begin{abstract}
141 % The \package{bibunits} package allows separate bibliographies for
142 % different units or parts of the text. The units can be chapters,
143 % sections or \texttt{bibunit} environments. The package separates
144 % the citations of each unit of text into a local auxiliary file to
145 % be processed by \BibTeX. The same cited item can occur in more
146 % than one bibliography. A global bibliography can also appear in
147 % the document and citations can be placed in both at the same time.
148 % The package is compatible with a wide variety of packages,
149 % including, but not limited to, \textsf{natbib}, \textsf{overcite}
150 % and \komascript\ classes. It is based on the \package{bibunits}
151 % style by Jos\'e Alberto Fern\'andez.
152 % \end{abstract}
153 %
154 %
155 %
156 % \section{Introduction}
157 %
158 % Suppose, you have different units or parts within your document, and
159 % each unit should have its own bibliography. In this case, you can
160 % use the \package{bibunits} package to do the work.
161 %
162 %
163 % Let's first consider a simple example to see how \package{bibunits}
164 % works (see Fig.~\ref{fig:Example}). We specify two bibunits using the
165 % \textsf{bibunit} environment. The optional parameter specifies the
166 % bibliography style to be used within the bibunits bibliography, in
167 % this case \textsf{plain} for the first and \textsf{alpha} for the
168 % second bibunit. Citations can be made as usual. Similar to the
169 % |\bibliography| command, you have to specify where the bibliography
170 % should appear within a bibunit. This is done using |\putbib|. The
171 % optional parameter specifies the \BibTeX\ files to be used for
172 % generating the bibunits bibliography, in this case \texttt{lit}.
173 %
174 % \begin{figure}[h]
175 % \hspace*{-25mm}\begin{minipage}[t]{0.6\textwidth}
176 % \toprule
177 % {\let\small\footnotesize
178 % \begin{verbatim}
179 % \documentclass{article}
180 % \usepackage{bibunits}
181 %
182 % \begin{document}
183 % \begin{bibunit}[plain]
184 % References to the \TeX book \cite{Knuth:1991}
185 % and to Lamport's \LaTeX\ book, which appears
186 % only in the references\nocite{Lamport:1994}.
187 % \putbib[lit]
188 % \end{bibunit}
189 %
190 % \begin{bibunit}[alpha]
191 % A new bibunit with a different style and a cite
192 % of a Postscript tutorial \cite{Adobe:1985}.
193 % \putbib[lit]
194 % \end{bibunit}
195 %
196 % \end{document}
197 % \end{verbatim}}
198 % \bottomrule
199 % \end{minipage}
200 % \hspace{5mm}
201 % \begin{minipage}[t]{0.65\textwidth}
202 % \toprule
203 % \leftmargini1mm
204 % \begin{quote}
205 % \footnotesize
206 % References to the \TeX book [1]
207 % and to Lamport's \LaTeX\ book, which appears
208 % only in the references.
209 % \let\section\subsubsection
210 % \vspace{-3mm}
211 % \begin{thebibliography}{1}
212 % \bibitem{Knuth:1991}
213 % Donald~E. Knuth.
214 % \newblock {\em The {\TeX} book}.
215 % \newblock Addison-Wesley, Reading, Massachusetts, 1991.
216 % \bibitem{Lamport:1994}
217 % Leslie Lamport.
218 % \newblock {\em {\LaTeX:} A Document Preparation System}.
219 % \newblock Addison-Wesley, Reading, Massachusetts, 2 edition, 1994.
220 % \end{thebibliography}
221 %
222 % A new bibunit with a different style and a cite
223 % of a Postscript tutorial [Ado85].
224 % \vspace{-3mm}
225 % \begin{thebibliography}{{Ado}85}
226 % \bibitem[{Ado}85]{Adobe:1985}
227 % {Adobe {S}ystem {I}ncorporated}.
228 % \newblock {\em Postscript Language Tutorial and Cookbook}.
229 % \newblock Addison-Wesley, Reading, Massachusetts, 1985.
230 % \end{thebibliography}
231 %
232 % \end{quote}
233 % \vspace{2.25mm}
234 % \bottomrule
235 % \end{minipage}
236 % \caption{Example input and output.}
237 % \label{fig:Example}
238 % \end{figure}
239 %
240 % For each bibunit,
241 % there is now a separate auxiliary file |bu|\meta{i}|.aux| to be
242 % processed by \BibTeX. In this example, we have two bibunits with
243 % auxiliary files |bu1.aux| and |bu2.aux|. To process your document,
244 % three runs of \LaTeX\ and two runs of \BibTeX\ are required.
245 %
246 % \vbox{%
247 % \begin{verbatim}
248 % latex mydoc
249 % bibtex bu1
250 % bibtex bu2
251 % latex mydoc
252 % latex mydoc
253 % \end{verbatim}}
254 %
255 % This example should give a pretty good impression of what
256 % principally can be
257 % done with \package{bibunits} and how it can be done. But
258 % \package{bibunits} allows for many more features, e.g., bibunits
259 % can be specified by |\sections|, a global bibliography can be used,
260 % and cite command can be placed in both the local and the global
261 % bibliography at the same time, among other features. All these
262 % features and associated commands are described in the next section.
263 %
264 %
265 %
266 %
267 % \section{Usage Notes}
268 %
269 % There are two ways to specify the units for which a bibliography is
270 % generated. You can either define your own \textsf{bibunit}
271 % environment, or you can specify bibunits for the \LaTeX\ units
272 % |\chapter| or |\section|. Both ways are mutually exclusive, meaning
273 % that you can choose only one and cannot mix them.
274 %
275 % \DescribeEnv{bibunit} Use the environment
276 % |\begin{bibunit}|\oarg{style} to create a bibunit. The optional
277 % argument \meta{style} specifies a bibliography style. If the optional
278 % argument \meta{style} is omitted, the default style is used. How to
279 % define a default style is explained below within this section.
280 %
281 % \DescribeMacro{\bibliographyunit}
282 % Alternatively, use |\bibliographyunit|\oarg{unit}, where \meta{unit} can be
283 % |\chapter| or |\section| to specify for which document unit
284 % a bibliography is generated, namely for every chapter or for every
285 % section. Use |\bibliographyunit| with no arguments to deactivate
286 % bibliography units. By default |\bibliographyunit| is deactivated.
287 % The command |\bibliographyunit| has to be issued
288 % after |\begin{document}|.
289 %
290 % \DescribeMacro{\cite*}
291 % \DescribeMacro{\nocite*}
292 % You can create a global bibliography as usual with the commands\\
293 % |\bibliography|\oarg{BibTeX files} and |\bibliographystyle|\oarg{style}.
294 % Use |\cite| and |\nocite| to generate citations that appear in the
295 % local bibliography. Use |\cite*| and |\nocite*| inside a unit
296 % to generate citations for both the local and global bibliography.
297 %
298 % \DescribeMacro{\putbib}
299 % Use |\putbib|\oarg{BibTeX files} to specify where the
300 % bibliography should appear within a bibunit. If the optional
301 % argument is omitted, |\putbib| uses the default \BibTeX\ files. How to
302 % define a default files is explained below within this section.
303 %
304 % If |\bibliographyunit| is active, default \BibTeX\ styles and files
305 % can be defined by |\bibliography| and |\bibliographystyle| and
306 % their starred versions |\bibliography*| and |\bibliographystyle*| as
307 % detailed below.
308 %
309 % \DescribeMacro{\bibliography} \DescribeMacro{\bibliographystyle}
310 % If |\bibliographyunit| is active, the commands
311 % |\bibliography|\oarg{BibTeX files} and
312 % |\bibliographystyle|\oarg{style} also specify the
313 % \BibTeX\ files and style to be used by default in the local units.
314 % The commands |\bibliography| and |\bibliographystyle| have to be issued
315 % after |\begin{document}|.
316 %
317 % \DescribeMacro{\bibliography*}
318 % \DescribeMacro{\bibliographystyle*}
319 % If |\bibliographyunit| is active, you can use starred
320 % forms\\ |\bibliography*|\marg{BibTeX files} and
321 % |\bibliographystyle*|\marg{style} to specify the defaults for
322 % the local units only. These commands do not generate a global
323 % bibliography or any information for the global bibliography.
324 % The commands |\bibliography*| and |\bibliographystyle*| have to be issued
325 % after |\begin{document}|.
326 %
327 % Note that default style and \BibTeX\ files can only be specified while\\
328 % |\bibliographyunit| is active. Thus, if you do want default styles
329 % but \textsf{bibunit} environments instead of |\bibliographyunit|s,
330 % you have to issue a dummy |\bibliographyunit[\section]|, then
331 % specify defaults\\ |\bibliography*|\marg{BibTeX files} and
332 % |\bibliographystyle*|\marg{style} and finally switch off the
333 % generation of bibunits by sections using |\bibliographyunit|.
334 % Examples can be found in Sec.~\ref{sec:Examples}.
335 %
336 %
337 %
338 % \subsection{Package options}
339 % \begin{description}
340 % \item[globalcitecopy] Create an entry in the global bibliography for
341 % each cite command within a bibunit. Default is to create an entry
342 % only for the local bibliography.
343 % \item[labelstoglobalaux] Write the replacement text for a label
344 % inside a bibunit to the global auxiliary file.
345 % Default is to write the labels to the local auxiliary file. The
346 % option \option{labelstoglobalaux} is useful in some situations, e.g.,
347 % \begin{itemize}
348 % \item to resolve the references when a bibunit bibliography is
349 % |\include|d.
350 % \item to resolve citations within a moving argument like
351 % |\section|, which otherwise would result in an `Undefined
352 % reference' error.
353 % \end{itemize}
354 % Note that this option results in wrong labels for numerical
355 % reference schemes if the same cited item appears at different
356 % positions in more than one bibliography
357 % (cf.~Sec.~\ref{sec:Limitations}).
358 % \end{description}
359 %
360 %
361 %
362 % \subsection{\textnormal{\BibTeX} processing}
363 %
364 % For each bibunit, in sequence, there is now a corresponding file
365 % |bu|\meta{i}|.aux| that needs to be compiled through \BibTeX. Suppose
366 % your document has \meta{n} different bibunits, you must now invoke
367 % \BibTeX\ on |bu1|, \dots , |bu|\meta{n}. This can be done by a
368 % csh-script.
369 % \begin{verbatim}
370 % #!/bin/csh
371 % foreach auxfile (bu*.aux)
372 % echo bibtex `basename $auxfile .aux`
373 % bibtex `basename $auxfile .aux`
374 % end
375 % \end{verbatim}
376 %
377 % I you don't have the |basename| command, you can use an alternative
378 % script where the suffix |.aux| is removed using |sed|.
379 % \begin{verbatim}
380 % #!/bin/csh
381 % foreach auxfile (bu*.aux)
382 % set auxfilebasename = `echo $auxfile | sed s/.aux//`
383 % echo bibtex $auxfilebasename
384 % bibtex $auxfilebasename
385 % end
386 % \end{verbatim}
387 %
388 % If by some strange coincidence you have named some of your files
389 % |bu|\meta{i}|.aux|, you have to redefine the internal command
390 % |\@bibunitname|, otherwise your files will be overwritten. To get
391 % for your document |foo.tex| filenames |foo.|\meta{i}|.aux| as for
392 % the first version of \package{bibunits}, you can redefine the
393 % internal macro |\@bibunitname|.
394 % \begin{verbatim}
395 % \makeatletter
396 % \renewcommand{\@bibunitname}{\jobname.\the\@bibunitauxcnt}
397 % \makeatother
398 % \end{verbatim}
399 %
400 % If you also want a global bibliography for your document |foo.tex|,
401 % the file |foo.aux| needs to be compiled through \BibTeX\ as well.
402 %
403 %
404 %
405 %
406 % \subsection{Limitations}
407 % \label{sec:Limitations}
408 %
409 % \begin{itemize}
410 % \item A citation within a moving argument in a bibunit cannot be
411 % resolved outside this bibunit, because the label is local to the
412 % bibunit. This occurs, e.g., for a |\cite| within |\section|, which is
413 % undefined in the table of contents. You can use the option
414 % \option{labelstoglobalaux} to resolve the citations, but this
415 % has two side effects.
416 % \begin{itemize}
417 % \item Since the cite command also appears globally in the table of
418 % contents, it generates a |\citation| command for the
419 % \emph{global} auxiliary file. As a result, another \BibTeX\ run
420 % causes this previously local reference to creep into the global
421 % bibliography.
422 % \item Since the replacement text for all cited items is now
423 % global, the same cited item has always the same replacement
424 % text, regardless whether it appears at different positions within
425 % different bibunits. This results in wrong labels for numerical
426 % reference schemes if the same cited item appears at different
427 % positions within the bibliographies.
428 % \end{itemize}
429 % \item When using \package{natbib}, |\cite*| has the
430 % meaning as defined by \package{natbib}, namely to force full
431 % citation of multiple authors. To get the behavior as defined
432 % by \package{bibunits} (without \package{natbib}), use an
433 % accompanying |\nocite| outside of a bibunit. Alternatively, if
434 % you want \emph{every} local item to appear also in the global
435 % bibliography, you can use \package{bibunits} with option
436 % \option{globalcitecopy}.
437 % \item With \package{natbib}, you cannot use numerical and
438 % author-year reference schemes together. Typographically, this
439 % is regarded bad style anyway.
440 % \end{itemize}
441 %
442 %
443 %
444 %
445 % \section{Examples}
446 % \label{sec:Examples}
447 %
448 %
449 %
450 % \subsection{Bibunits by the \texttt{bibunit} environment}
451 %
452 % In the first example, two bibliographies are generated, the first
453 % using the \BibTeX\ file |texlit.bib| and the style |plain|, the
454 % second using the \BibTeX\ file |lit.bib| and the style |abbrv|.
455 % %
456 % \begin{verbatim}
457 % \documentclass{article}
458 % \usepackage{bibunits}
459 %
460 % \begin{document}
461 % \begin{bibunit}[plain]
462 % some text \cite{lamport:1994} more text more citations
463 % \putbib[texlit]
464 % \end{bibunit}
465 % some text between the units
466 % \begin{bibunit}[abbrv]
467 % some text \cite{gnu:1998} more text more citations
468 % \putbib[lit]
469 % \end{bibunit}
470 % \end{document}
471 % \end{verbatim}
472 %
473 % If all bibunits use the same \BibTeX\ files and style, you can
474 % specify defaults and omit the optional arguments of the |bibunit|
475 % environment and the |\putbib| macro. In the second example, a
476 % default \BibTeX\ file |texlit.bib| and a default style |abbrv| is
477 % defined. Note that you have to activate bibliography units with the
478 % command |\bibliographyunit[\section]| (|\chapter| would also work)
479 % before you can specify the defaults, and afterwards you have to
480 % deactivate bibliography units with the command |\bibliographyunit|
481 % before you can use the |bibunit| environment.
482 % %
483 % \begin{verbatim}
484 % : same as in the previous example
485 %
486 % \begin{document}
487 % \bibliographyunit[\section]
488 % \bibliography*{texlit}
489 % \bibliographystyle*{plain}
490 % \bibliographyunit
491 %
492 % \begin{bibunit}
493 % some text \cite{lamport:1994} more text more citations
494 % \putbib
495 % \end{bibunit}
496 % some text between the units
497 % \begin{bibunit}
498 % some text \cite{knuth:1991} more text more citations
499 % \putbib
500 % \end{bibunit}
501 % \end{document}
502 % \end{verbatim}
503 %
504 % If you use the class |article|, the heading of the bibliography has
505 % the same font size as a section, which might be too large, especially if
506 % you have bibunits \emph{within} sections or even subsections. In
507 % this case you may want to change the bibliography heading to have
508 % the same appearance as a subsection.
509 % %
510 % \begin{verbatim}
511 % \let\stdthebibliography\thebibliography
512 % \renewcommand{\thebibliography}{%
513 % \let\section\subsection
514 % \stdthebibliography}
515 % \end{verbatim}
516 %
517 % Note that other classes may use other formatting instead of section for
518 % the bibliography heading. In this case the definition has to be changed
519 % accordingly, e.g., for the |book| class, where bibliography headings
520 % appear at the chapter level, let |\chapter| to |\subsection|.
521 % %
522 % \begin{verbatim}
523 % \let\stdthebibliography\thebibliography
524 % \renewcommand{\thebibliography}{%
525 % \let\chapter\subsection
526 % \stdthebibliography}
527 % \end{verbatim}
528 %
529 %
530 %
531 % \subsection{Bibunits by chapters or sections}
532 %
533 % You can also define bibliographies for every chapter or section. In
534 % this case, the redefinition of |\thebibliography| is essential for
535 % the proper behavior of the \package{bibunits} package. The reason is
536 % quite simple: if you create bibliographies for every section,
537 % and |\thebibliography| also appears at the section level, a new
538 % unit is opened by |\thebibliography|, and the information of the
539 % previous unit is no longer available. (More technically: The
540 % auxiliary file of the previous unit is closed, and the
541 % replacement text for the citation which is generated inside
542 % |\thebibliography| cannot be written to this file. Instead, it is
543 % written to the global |.aux| file.)
544 %
545 % The next example corresponds to the first example of the previous
546 % section with different \BibTeX\ files and styles. Note that you have
547 % to specify the |\bibliographystyle*| \emph{before} the corresponding
548 % section.
549 % %
550 % \begin{verbatim}
551 % \documentclass{article}
552 % \usepackage{bibunits}
553 %
554 % \let\stdthebibliography\thebibliography
555 % \renewcommand{\thebibliography}{%
556 % \let\section\subsection
557 % \stdthebibliography}
558 %
559 % \begin{document}
560 % \bibliographyunit[\section]
561 % \bibliographystyle*{plain}
562 %
563 % \section{First section}
564 % some text \cite{lamport:1994} more text more citations
565 % \putbib[texlit]
566 % some text between the units
567 % \bibliographystyle*{abbrv}
568 % \section{Second and last section}
569 % some text \cite{gnu:1998} more text more citations
570 % \putbib[lit]
571 % \end{document}
572 % \end{verbatim}
573 %
574 % You can also use the same \BibTeX\ file and style for all units.
575 % %
576 % \begin{verbatim}
577 % : same as in the previous example
578 %
579 % \begin{document}
580 % \bibliographyunit[\section]
581 % \bibliography*{texlit}
582 % \bibliographystyle*{plain}
583 %
584 % \section{First section}
585 % some text \cite{lamport:1994} more text more citations
586 % \putbib
587 % some text between the units
588 % \section{Second and last section}
589 % some text \cite{knuth:1991} more text more citations
590 % \putbib
591 % \end{document}
592 % \end{verbatim}
593 %
594 % In all four examples, one can specify a global
595 % bibliography and its style with the usual \LaTeX\ commands.
596 % Citations for the global bibliography are entered using |\cite| and
597 % |\nocite| commands while outside a unit or using |\cite*| and
598 % |\nocite*| while inside a unit. The starred forms generate citations
599 % also for the local unit. Thus it is not possible to generate
600 % citations \emph{only} for the global bibliography while inside a
601 % unit (which seems to be a reasonable restriction). Note that if
602 % |\bibliographyunit| is active, \emph{and} you use a global
603 % bibliography, \emph{and} you use the same \BibTeX\ file and style
604 % for all (local as well as global) bibliographies, \emph{then} the
605 % |\bibliography*| and |\bibliographystyle*| commands are not
606 % necessary. In this case proper defaults for the local bibliographies
607 % are specified by the commands
608 % |\bibliography| and |\bibliographystyle|, too. Note that a second
609 % run of \LaTeX\ is necessary before \BibTeX\ processing, in case that
610 % the global bibliography has its usual place at the end of the
611 % document.
612 %
613 %
614 %
615 %
616 % \section{Acknowledgments}
617 %
618 % The author thanks Jos\'e Alberto Fern\'andez for the coding of
619 % \package{bibunits} v1.0. Further, contributions from various people
620 % are gratefully acknowledged (in alphabetical order): Battista
621 % Benciolini for the patch to allow |putbib| to appear before the
622 % first occurrence of a cite within a bibunit; Jason Harrison for an
623 % alternative script to call \BibTeX\ for each local auxiliary file;
624 % Werner J\"urgens for the hint on how to suppress unwanted spaces;
625 % Andrew E.\ Schulman for an early version of the \package{natbib}
626 % compatibility patch; Stefan Ullrich for an early version of the
627 % \package{jurabib} compatibility patch (communicated by Jens Berger)
628 % and the \package{mparhack} compatibility patch. Finally, the author
629 % acknowledges the contributions of numerous people, whose questions,
630 % suggestions and bug reports have helped to improve \package{bibunits}.
631 %
632 %
633 % \StopEventually{}
634 %
635 %
636 %
637 %
638 % \section{The Macros}
639 %
640 % \begin{macrocode}
641 %<*package>
642 % \end{macrocode}
643 %
644 %
645 % \subsection{Allocation}
646 %
647 % \begin{macro}{\@bu@tempcnta}
648 % \changes{v2.1m}{2000/10/05}{Counter removed.}
649 %
650 % [Allocation of counter removed.]
651 % \end{macro}
652 %
653 %
654 %
655 % \subsection{Option handling}
656 %
657 %
658 % \begin{macro}{\iflabelstoglobalaux}
659 % \changes{v2.1c}{1999/11/24}{Add code for option processing and option
660 % \option{labelstoglobalaux}.}
661 %
662 % Define a new if to switch between global definition of labels
663 % within a bibliography and local labels (default). Global labels
664 % can be activated with option \option{labelstoglobalaux}.
665 % \begin{macrocode}
666 \newif\iflabelstoglobalaux \labelstoglobalauxfalse
667 \DeclareOption{labelstoglobalaux}{\labelstoglobalauxtrue}
668 % \end{macrocode}
669 % \end{macro}
670 %
671 %
672 % \begin{macro}{\ifglobalcitecopy}
673 % \changes{v2.1l}{2000/10/03}{Add code for option \option{globalcitecopy}.}
674 %
675 % Define a new if to switch between entering of cite commands
676 % within a bibunit also to the global bibliography or only to the local
677 % bibliography (default). Entering of cite commands also to the
678 % global bibliography can be activated with
679 % option \option{globalcitecopy}.
680 %
681 % \begin{macrocode}
682 \newif\ifglobalcitecopy
683 \globalcitecopyfalse
684 \DeclareOption{globalcitecopy}{\globalcitecopytrue}
685 % \end{macrocode}
686 % \end{macro}
687 %
688 %
689 % \noindent Finally, process all package options.
690 %
691 % \begin{macrocode}
692 \ProcessOptions
693 % \end{macrocode}
694 %
695 %
696 %
697 % \subsection{An auxiliary file for each bibunit is provided}
698 %
699 %
700 % \begin{macro}{\@bibunitaux}
701 % Define the file descriptor |\@bibunitaux| of the auxiliary file that is
702 % generated for each bibunit.
703 % \begin{macrocode}
704 \newwrite\@bibunitaux
705 % \end{macrocode}
706 % \end{macro}
707 %
708 %
709 % \begin{macro}{\@bibunitauxcnt}
710 % Define the counter for the bibunits and initialize it with zero.
711 % \begin{macrocode}
712 \newcount\@bibunitauxcnt \@bibunitauxcnt=0
713 % \end{macrocode}
714 % \end{macro}
715 %
716 %
717 % \begin{macro}{\@bibunitname}
718 % \changes{v1.0d}{1998/11/15}{New name
719 % \mbox{\texttt{bu}\string\meta{i}\texttt{.aux}} for the
720 % auxiliary files that are created for each bibunit.}
721 %
722 % The command |\@bibunitname| sets the basename of the auxiliary files
723 % that are created for each bibunit to |bu| (|bu| for
724 % |b|ib|u|nits), followed by the current number of the bibunit,
725 % |\the\@bibunitauxcnt|. (In version 1.0 of \package{bibunits} there
726 % was no such command, and the command sequence
727 % |\jobname.\the\@bibunitauxcnt| was directly used.)
728 % \begin{macrocode}
729 \def\@bibunitname{bu\the\@bibunitauxcnt}
730 % \end{macrocode}
731 % \end{macro}
732 %
733 %
734 %
735 % \subsection{New cite commands}
736 %
737 % The main idea is to save the old meaning of the command and then
738 % to redefine it. At the beginning of a bibunit, the new commands are
739 % activated, at the end of a bibunit, the old commands are restored.
740 %
741 % \begin{macro}{\if@localcite}
742 % \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to
743 % \macrott{@starredversion}.}
744 %
745 % Define a new if to store if a macro is evoked with or without a
746 % star. This is used by cite commands to switch between local and
747 % global cites, i.e., cites of references that occur in the local
748 % or also in the global bibliography. The is also a starred version
749 % of |\bibliopography| and |\bibliopographystyle| to enter
750 % default \BibTeX\ data files and styles for the bibunits only.
751 %
752 % \begin{macrocode}
753 \newif\if@starredversion
754 % \end{macrocode}
755 % \end{macro}
756 %
757 %
758 % \begin{macro}{\@localcitedefault}
759 % \changes{v2.1j}{2000/10/02}{Macro removed.}
760 %
761 % [Macro deleted.]
762 % \end{macro}
763 %
764 %
765 % \begin{macro}{\std@cite}
766 % \begin{macro}{\bu@cite}
767 % \changes{v2.0c}{1999/09/27}{Macro declared robust.}
768 % \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to
769 % \macrott{@starredversion} and switch false and true.}
770 %
771 % \begin{macrocode}
772 \let\std@cite\cite
773 \DeclareRobustCommand\bu@cite{%
774 \@ifstar
775 {\@starredversiontrue\std@cite}%
776 {\@starredversionfalse\std@cite}%
777 }
778 % \end{macrocode}
779 % \end{macro}
780 % \end{macro}
781 %
782 %
783 % \begin{macro}{\std@@citex}
784 % \begin{macro}{\bu@@citex}
785 % \changes{v2.0a}{1999/06/02}{\package{natbib} v6.5 compatibility.}
786 % \changes{v2.0b}{1999/07/06}{Implementation streamlined.}
787 % \changes{v2.0f}{1999/10/05}{\package{overcite} compatibility.}
788 % \changes{v2.0g}{1999/10/22}{\package{natbib} v7.0 compatibility.}
789 % \changes{v2.1b}{1999/11/24}{\macrott{leavevmode} added.}
790 % \changes{v2.1f}{2000/04/02}{\macrott{@startbibunitorrelax} added,
791 % definition of standard version for all \package{natbib} cite
792 % commands removed.}
793 % \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to
794 % \macrott{@starredversion} and switch if branches,
795 % delete \macrott{@localcitedefault}.}
796 % \changes{v2.1k}{2000/10/02}{For standard definition (without
797 % \package{bibunits} or \package{overcite}), replace direct
798 % writing to \macrott{@bibunitaux} by use of \macrott{std@nocite}.}
799 % \changes{v2.1l}{2000/10/03}{Handling of option
800 % \option{globalcitecopy} added.}
801 % \changes{v2.1n}{2000/10/08}{\package{jurabib} compatibility.}
802 %
803 % Define the \package{bibunits} macro |\bu@@citex| replacing the
804 % internal macro |\@citex|. Macro |\@citex| is evoked by the |\cite|
805 % and its various derivatives defined by other packages. Basically,
806 % |\bu@@citex| the following actions take place. The macro
807 % |\startbibunitorrelax| ensures that auxiliary files are created
808 % only for non-empty bibunits. The macro |\leavevmode| are added to
809 % fix a problem that occurs in some special situations when a
810 % |\paragraph| within a bibunit is immediately followed by a cite
811 % command, as explained below. Next, the standard version of
812 % |\@citex|, namely |\std@@citex| is evoked with |\@auxout| locally
813 % changed, so that citations are written to the local auxiliary
814 % file of each bibunit. Finally, if option \option{globalcitecopy}
815 % is active or the starred form of the cite command is evoked,
816 % i.e., |\if@starredversion| is true, citations are
817 % \emph{also} written to the global auxiliary file, so that
818 % citations appear in both the local as well as the global
819 % bibliography at the same time.
820 %
821 % After this general description, the use of |\leavevmode| is
822 % further detailed. The |\leavevmode| commands are added to fix a
823 % problem that occurs when a |\paragraph| within a bibunit is
824 % immediately followed by a cite command, and within |\paragraph|
825 % something is written to |\@auxout|, e.g., an entry for the table
826 % of contents or the index. In this cases, the entry go to the
827 % local auxiliary file of the corresponding bibunit instead of the
828 % standard auxiliary file |\@auxout|. The reason is that the
829 % argument of |\paragraph| is stored in an |\everypar|, which is
830 % evaluated later. In case of a cite command that immediately
831 % follows |\paragraph|, the evaluation occurs within the scope of
832 % the cite, where the |\@auxout| is let to the local auxiliary file
833 % of the corresponding bibunit. Consequently, the entry is written
834 % to the wrong, i.e., local, auxiliary file. We add an
835 % |\leavevmode| to evaluate |\everypar| before |\@auxout| is
836 % redefined. Alternatively, the typesetting of |\paragraph| in
837 % |\@xsect| of the \LaTeX\ kernel might be revised.
838 %
839 % Additional to the new standard definition of |\@citex|, different
840 % versions have to be defined depending other packages loaded,
841 % namely \package{natbib}, \package{overcite} and
842 % \package{jurabib}. These packages are mutually exclusive, with
843 % the priority as defined by their order in the previous sentence.
844 % That means, e.g., if you have chosen \package{natbib} together
845 % with \package{bibunits}, you cannot use \package{overcite} or
846 % \package{jurabib}.
847 %
848 % All definitions are done |\AtBeginDocument| so that packages
849 % loaded after \package{bibunits} can be discovered.
850 %
851 % \begin{macrocode}
852 \AtBeginDocument{%
853 % \end{macrocode}
854 %
855 % Several modifications and additions are necessary if package
856 % \package{natbib} is loaded: First macro |\NAT@set@cites| is used
857 % to invoke \package{natbib}'s cite commands. This is only
858 % necessary if these commands have not been set, i.e. in case
859 % \package{bibunits} is evoked before \package{natbib}, but does
860 % not do any harm otherwise. Second macro |\bu@@citex| is changed
861 % as described below, and the various versions of
862 % \package{natbib}'s cite commands are save in a |\std|\dots version.
863 %
864 % The definition of |\bu@@citex| is changed in the following ways:
865 % i) the |\let| of |\@auxout| is encapsulated using |\begingroup|
866 % and |\endgroup| instead of braces, since braces results in an
867 % error; ii) macro |\std@@citex| has two optional
868 % arguments instead of one; iii) the code of |\if@starredversion| is
869 % skipped in favor of the meaning of a starred cite in
870 % \package{natbib}, namely to force full listing of multiple
871 % authors.
872 %
873 % \begin{macrocode}
874 \@ifpackageloaded{natbib}%
875 {%
876 \NAT@set@cites \let\std@@citex\@citex
877 \def\bu@@citex[#1][#2]#3{%
878 \@startbibunitorrelax
879 \leavevmode
880 \begingroup\let\@auxout\@bibunitaux\std@@citex[#1][#2]{#3}\endgroup
881 \ifglobalcitecopy
882 \std@nocite{#3}%
883 \fi
884 }%
885 }%
886 % \end{macrocode}
887 %
888 % If \package{natbib} is not loaded, we check for
889 % \package{overcite}. In this case, an additional command
890 % |\@citew| has to be redefined which handles |\cite| without an
891 % argument. Further, an internal command of \package{overcite},
892 % namely |\@nocite| is used to write to the standard auxiliary file.
893 %
894 % \begin{macrocode}
895 {%
896 \@ifpackageloaded{overcite}%
897 {%
898 \let\std@@citew\@citew
899 \def\bu@@citew#1{%
900 \@startbibunitorrelax
901 \leavevmode
902 {\let\@auxout\@bibunitaux \std@@citew{#1}}%
903 \ifglobalcitecopy
904 \@nocite{#1}%
905 \else
906 \if@starredversion
907 \@nocite{#1}%
908 \fi
909 \fi
910 }
911 \let\std@@citex\@citex
912 \def\bu@@citex[#1]#2{%
913 \@startbibunitorrelax
914 \leavevmode
915 {\let\@auxout\@bibunitaux \std@@citex[#1]{#2}}%
916 \ifglobalcitecopy
917 \@nocite{#2}%
918 \else
919 \if@starredversion
920 \@nocite{#2}%
921 \fi
922 \fi
923 }
924 }%
925 % \end{macrocode}
926 %
927 % If neither \package{natbib} nor \package{overcite} are loaded, we
928 % check for \package{jurabib}. In this case, the definition of
929 % |\std@@citex| differs from the default version by a second
930 % optional argument, similar to \package{natbib}.
931 %
932 % \begin{macrocode}
933 {%
934 \@ifpackageloaded{jurabib}%
935 {%
936 \let\std@@citex\@citex
937 \def\bu@@citex[#1][#2]#3{%
938 \@startbibunitorrelax
939 \leavevmode
940 {\let\@auxout\@bibunitaux \std@@citex[#1][#2]{#3}}%
941 \ifglobalcitecopy
942 \std@nocite{#3}%
943 \else
944 \if@starredversion
945 \std@nocite{#3}%
946 \fi
947 \fi
948 }%
949 }%
950 % \end{macrocode}
951 %
952 % Finally, the default definition.
953 %
954 % \begin{macrocode}
955 {%
956 \let\std@@citex\@citex
957 \def\bu@@citex[#1]#2{%
958 \@startbibunitorrelax
959 \leavevmode
960 {\let\@auxout\@bibunitaux \std@@citex[#1]{#2}}%
961 \ifglobalcitecopy
962 \std@nocite{#2}%
963 \else
964 \if@starredversion
965 \std@nocite{#2}%
966 \fi
967 \fi
968 }%
969 }%
970 }%
971 }%
972 }%
973 % \end{macrocode}
974 % \end{macro}
975 % \end{macro}
976 %
977 %
978 % \begin{macro}{\std@nocite}
979 % \begin{macro}{\bu@nocite}
980 % \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to
981 % \macrott{@starredversion} and switch false and true.}
982 %
983 % \begin{macrocode}
984 \let\std@nocite\nocite
985 \def\bu@nocite{%
986 \@ifstar
987 {\@starredversiontrue\@bu@nocite}%
988 {\@starredversionfalse\@bu@nocite}%
989 }
990 % \end{macrocode}
991 % \end{macro}
992 % \end{macro}
993 %
994 %
995 % \begin{macro}{\@bu@nocite}
996 % \changes{v2.1f}{2000/04/02}{\macrott{@startbibunitorrelax} added.}
997 % \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to
998 % \macrott{@starredversion} and switch if branches,
999 % delete \macrott{@localcitedefault}.}
1000 % \changes{v2.1k}{2000/10/02}{Replace direct writing to
1001 % \macrott{@bibunitaux} by \macrott{std@nocite} within scope
1002 % of redefined \macrott{@auxout}, \macrott{@bsphack} and
1003 % \macrott{@esphack} removed.}
1004 % \changes{v2.1l}{2000/10/03}{Handling of option
1005 % \option{globalcitecopy} added.}
1006 %
1007 % \begin{macrocode}
1008 \def\@bu@nocite#1{%
1009 \@startbibunitorrelax
1010 {\let\@auxout\@bibunitaux \std@nocite{#1}}%
1011 \ifglobalcitecopy
1012 \std@nocite{#1}%
1013 \else
1014 \if@starredversion
1015 \std@nocite{#1}%
1016 \fi
1017 \fi
1018 }
1019 % \end{macrocode}
1020 % \end{macro}
1021 %
1022 %
1023 %
1024 % \subsection{New bibliography and bibliographystyle commands}
1025 %
1026 % \changes{v1.0e}{1998/11/30}{Global definition of bibunit data and style.}
1027 %
1028 % In this paragraph no general description is given, rather an
1029 % explanation why in the following two macros |\@bu@bibliography| and
1030 % |\@bu@bibliographystyle| the command |\gdef\bu@bibdata| and
1031 % |\gdef\bu@bibstyle| are written to the auxiliary file and are directly
1032 % executed, too. The execution through the auxiliary file has been left
1033 % for compatibility to older versions of \package{bibunits}: if you
1034 % also have a global bibliography, you can specify \BibTeX\ styles and
1035 % files for the global bibliography (using |\bibliography| and
1036 % |\bibliographystyle|, usually at the end of the document). In this
1037 % case, writing the execution of |\gdef| to the auxiliary file ensures
1038 % that in subsequent runs of \LaTeX defaults for the local
1039 % bibliographies are generated as well. Without this, the user would
1040 % have to explicitly specify \BibTeX\ files and styles for the local
1041 % bibliographies using the starred forms |\bibliography*| and
1042 % |\bibliographystyle*|. On the other hand, with the direct execution
1043 % of the |\gdef| commands, the starred forms specify defaults which can be
1044 % used already in the first run of \LaTeX\, if put before the first bibunit.
1045 %
1046 %
1047 %
1048 % \begin{macro}{\bu@bibdata}
1049 % Define data files store.
1050 % \begin{macrocode}
1051 \def\bu@bibdata{}
1052 % \end{macrocode}
1053 % \end{macro}
1054 %
1055 %
1056 % \begin{macro}{\orig@bibliography}
1057 % \begin{macro}{\bibliography}
1058 % \begin{macro}{\std@bibliography}
1059 % \changes{v2.1h}{2000/08/06}{New definition of
1060 % \macrott{bibliography} to open \texttt{bu.aux}, write to
1061 % \macrott{@mainaux} and close \texttt{bu.aux}.}
1062 %
1063 % If |\labelstoglobalaux| is false, define a new version of
1064 % |\bibliography| where the replacement text for the labels is
1065 % written to a new file |bu.aux|. This file is input at the
1066 % end of each bibunit to restore the global labels which are
1067 % overwritten if a global item is also cited within a bibunit.
1068 % Input of the main auxiliary file is not appropriate, because this
1069 % file contains additional material which should not be input more
1070 % than once, e.g., commands which generate entries for the table of
1071 % contents.
1072 %
1073 % The definition of |\std@bibliography| is used to define a
1074 % version of |\bibliography| with enhanced functionality
1075 % |\bu@bibliography|.
1076 %
1077 % \begin{macrocode}
1078 \AtBeginDocument{%
1079 \iflabelstoglobalaux
1080 \else
1081 \let\orig@bibliography\bibliography
1082 \def\bibliography#1{%
1083 \if@filesw
1084 \immediate\openout\@bibunitaux bu.aux
1085 \immediate\write\@mainaux{\string\@input{bu.aux}}%
1086 \fi
1087 \orig@bibliography{#1}%
1088 \if@filesw
1089 \immediate\closeout\@bibunitaux
1090 \fi
1091 }%
1092 \fi
1093 \let\std@bibliography\bibliography
1094 }
1095 % \end{macrocode}
1096 % \end{macro}
1097 % \end{macro}
1098 % \end{macro}
1099 %
1100 %
1101 % \begin{macro}{\bu@bibliography}
1102 % \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to
1103 % \macrott{@starredversion}.}
1104 %
1105 % \begin{macrocode}
1106 \def\bu@bibliography{%
1107 \@ifstar
1108 {\@starredversiontrue\@bu@bibliography}%
1109 {\@starredversionfalse\@bu@bibliography}%
1110 }
1111 % \end{macrocode}
1112 % \end{macro}
1113 %
1114 %
1115 % \begin{macro}{\@bu@bibliography}
1116 % \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to
1117 % \macrott{@starredversion}, delete \macrott{@localcitedefault}.}
1118 %
1119 % \begin{macrocode}
1120 \def\@bu@bibliography#1{%
1121 \if@filesw
1122 \immediate\write\@auxout{\string\gdef\string\bu@bibdata{#1}}%
1123 \fi
1124 \gdef\bu@bibdata{#1}%
1125 \if@starredversion
1126 \else
1127 \std@bibliography{#1}%
1128 \fi
1129 }
1130 % \end{macrocode}
1131 % \end{macro}
1132 %
1133 %
1134 % \begin{macro}{\bu@bibstyle}
1135 % Define style store.
1136 % \begin{macrocode}
1137 \def\bu@bibstyle{}
1138 % \end{macrocode}
1139 % \end{macro}
1140 %\
1141 %
1142 % \begin{macro}{\std@bibliographystyle}
1143 % \begin{macro}{\bu@bibliographystyle}
1144 % \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to
1145 % \macrott{@starredversion}.}
1146 %
1147 % \begin{macrocode}
1148 \let\std@bibliographystyle\bibliographystyle
1149 \def\bu@bibliographystyle{%
1150 \@ifstar
1151 {\@starredversiontrue\@bu@bibliographystyle}%
1152 {\@starredversionfalse\@bu@bibliographystyle}%
1153 }
1154 % \end{macrocode}
1155 % \end{macro}
1156 % \end{macro}
1157 %
1158 %
1159 % \begin{macro}{\@bu@bibliographystyle}
1160 % \changes{v2.1j}{2000/10/02}{Rename \macrott{@localcite} to
1161 % \macrott{@starredversion}, delete \macrott{@localcitedefault}.}
1162 %
1163 % \begin{macrocode}
1164 \def\@bu@bibliographystyle#1{%
1165 \if@filesw
1166 \immediate\write\@auxout{\string\gdef\string\bu@bibstyle{#1}}%
1167 \fi
1168 \gdef\bu@bibstyle{#1}%
1169 \if@starredversion
1170 \else
1171 \std@bibliographystyle{#1}%
1172 \fi
1173 }
1174 % \end{macrocode}
1175 % \end{macro}
1176 %
1177 %
1178 %
1179 % \subsection{Bibunits}
1180 %
1181 %
1182 % \subsubsection{Bibunits by an extra environment}
1183 %
1184 % The starting of a bibunit is a two-step process: in the first step
1185 % (macro |\bibunit|), all cite commands are redefined to trigger the
1186 % second step, namely the actual starting of a bibunit (macro
1187 % |\@startbibunit|). This may seem weird on the first sight, but has
1188 % the advantage that no auxiliary files are created if a bibunit
1189 % contains no |\cite|, |\cite*|, |\nocite| or |\nocite*| commands. To
1190 % handle citations of the same reference in different bibliographies,
1191 % the local auxiliary file is input at the beginning of each bibunit
1192 % (in macro |\@startbibunit|), and the replacement text is also
1193 % written to the \emph{local} auxiliary file (in macro |\@putbib|).
1194 %
1195 %
1196 % \begin{macro}{\bibunit}
1197 % \changes{v2.0g}{1999/10/22}{\package{natbib} v7.0 compatibility.}
1198 % \changes{v2.1f}{2000/04/02}{Evoking of \package{bibunits} version
1199 % of cite commands, let \macrott{@startbibunitorrelax} to
1200 % \macrott{@startbibunit} added.}
1201 %
1202 % At the beginning of a bibunit, all cite command are set to
1203 % their initializing versions, and |\@finishbibunit| can relax,
1204 % because currently no citation has appeared. Hence no local
1205 % auxiliary file has been opened for the current bibunit, which has to
1206 % be closed at the end of the bibunit.
1207 % \begin{macrocode}
1208 \def\bibunit{%
1209 \global\let\cite\bu@cite
1210 \global\let\@citex\bu@@citex
1211 \global\let\@citew\bu@@citew
1212 \global\let\nocite\bu@nocite
1213 \global\let\@startbibunitorrelax\@startbibunit
1214 \global\let\@finishbibunit\relax
1215 \@ifnextchar[{\@bibunitx}{\@bibunitx[\bu@bibstyle]}%
1216 }
1217 % \end{macrocode}
1218 % \end{macro}
1219 %
1220 %
1221 % \begin{macro}{\@bibunitx}
1222 % If the current bibunit has an extra bibstyle, it is saved in
1223 % |\@localbibstyle|. (In version 1.0a |\bibstyle| command has been
1224 % directly written to the local auxiliary file. This is now done in
1225 % |\@startbibunit|.)
1226 % \begin{macrocode}
1227 \def\@bibunitx[#1]{\gdef\@localbibstyle{#1}}
1228 % \end{macrocode}
1229 % \end{macro}
1230 %
1231 %
1232 % \begin{macro}{\endbibunit}
1233 % \changes{v2.0f}{1999/10/05}{\package{overcite} compatibility.}
1234 % \changes{v2.0g}{1999/10/22}{\package{natbib} v7.0 compatibility.}
1235 % \changes{v2.1f}{2000/04/02}{Restoration of standard versions of
1236 % \package{natbib} cite commands removed.}
1237 % \changes{v2.1h}{2000/08/06}{Input \texttt{bu.aux}.}
1238 % \changes{v2.1o}{2000/10/09}{Use \macrott{@input} instead of
1239 % \macrott{@input@} for reading \texttt{bu.aux}.}
1240 %
1241 % At the end of the bibunit, all cite commands are restored to
1242 % their former meaning (|\@citew| is used by package
1243 % \package{overcite}). Also the local auxiliary file is closed if
1244 % it has been opened. Finally, the replacement text for the global
1245 % citation labels (if exists) are restored using |\@input|.
1246 % \begin{macrocode}
1247 \def\endbibunit{%
1248 \global\let\cite\std@cite
1249 \global\let\@citex\std@@citex
1250 \global\let\@citew\std@@citew
1251 \global\let\nocite\std@nocite
1252 \@finishbibunit
1253 \@input{bu.aux}%
1254 }
1255 % \end{macrocode}
1256 % \end{macro}
1257 %
1258 %
1259 % \begin{macro}{\@startbibunit}
1260 % \changes{v2.0f}{1999/10/05}{\package{overcite} compatibility.}
1261 % \changes{v2.0g}{1999/10/22}{\package{natbib} v7.0 compatibility.}
1262 % \changes{v2.1d}{2000/01/27}{Remove enclosing braces around input
1263 % of local auxiliary file and restore catcodes and endlinechar.}
1264 % \changes{v2.1e}{2000/03/28}{Change catcode of `:'.}
1265 % \changes{v2.1f}{2000/04/02}{Evoking of \package{bibunit} version
1266 % of cite commands moved to \macrott{bibunit}, restoration of
1267 % standard versions of \package{natbib} cite commands removed,
1268 % let \macrott{@startbibunitorrelax} to \macrott{relax}.
1269 % added.}
1270 % \changes{v2.1m}{2000/10/05}{Change of catcode of `:' removed;
1271 % encapsulate setting of \macrott{endlinechar} by braces.}
1272 %
1273 % This command does all the necessary initialization for a bibunit:
1274 % New versions of the cite commands are activated (|\@citew| is
1275 % used by package \package{overcite}), the macro |\@finishbibunit|
1276 % which is called by |\endbibunit| is let to close the local
1277 % auxiliary file, the number of the bibunits is incremented. Most
1278 % important, the local auxiliary file is read, so that citations of
1279 % the same reference in different bibliographies are handled
1280 % correctly for numerical citation schemes. Finally, the bibstyle
1281 % is written to the local auxiliary file.
1282 % \begin{macrocode}
1283 \def\@startbibunit{%
1284 \global\let\@startbibunitorrelax\relax
1285 \global\let\@finishbibunit\@finishstartedbibunit
1286 \global\advance\@bibunitauxcnt 1
1287 \if@filesw
1288 % \end{macrocode}
1289 % Input the local auxiliary file and prevent the creation of
1290 % unwanted spaces by setting |\endlinechar-1| (|\catcode`\^^M=9|
1291 % would also work here).
1292 % \begin{macrocode}
1293 {\endlinechar-1
1294 \@input{\@bibunitname.aux}}%
1295 \immediate\openout\@bibunitaux\@bibunitname.aux
1296 \immediate\write\@bibunitaux{\string\bibstyle{\@localbibstyle}}%
1297 \fi
1298 }
1299 % \end{macrocode}
1300 % \end{macro}
1301 %
1302 %
1303 % \noindent When bibunits are specified by chapters or sections, a new
1304 % chapter or section marks both the end of the old and the start of the
1305 % new bibunit by calling |\endbibunit|. For the first chapter or section,
1306 % the command |\@finishbibunit| has to be defined (to do nothing),
1307 % which is done here.
1308 % \begin{macrocode}
1309 \let\@finishbibunit\relax
1310 % \end{macrocode}
1311 %
1312 %
1313 % \begin{macro}{\@finishstartedbibunit}
1314 % Close the local auxiliary file.
1315 % \begin{macrocode}
1316 \def\@finishstartedbibunit{%
1317 \if@filesw
1318 \immediate\closeout\@bibunitaux
1319 \fi
1320 }
1321 % \end{macrocode}
1322 % \end{macro}
1323 %
1324 %
1325 % \subsubsection{Bibunits by chapters or sections}
1326 %
1327 % |\chapter| or |\section| substituting definition.
1328 %
1329 % \begin{macro}{\old@bibunit}
1330 % \begin{macro}{\@bibunit}
1331 % \begin{macro}{\@endbibunit}
1332 % \begin{macrocode}
1333 \let\old@bibunit\@gobble
1334 \def\@bibunit{\endbibunit\bibunit\old@bibunit}
1335 \def\@endbibunit{}
1336 % \end{macrocode}
1337 % \end{macro}
1338 % \end{macro}
1339 % \end{macro}
1340 %
1341 %
1342 % \begin{macro}{\bibliographyunit}
1343 % \begin{macrocode}
1344 \def\bibliographyunit{%
1345 \@endbibunit
1346 \@ifnextchar[{\@bibliographyunit}{%
1347 \global\let\old@bibunit\@gobble
1348 \global\let\bibliography\std@bibliography
1349 \global\let\bibliographystyle\std@bibliographystyle
1350 \endbibunit
1351 \gdef\@endbibunit{}}%
1352 }
1353 % \end{macrocode}
1354 % \end{macro}
1355 %
1356 %
1357 % \begin{macro}{\@bibliographyunit}
1358 % \begin{macrocode}
1359 \def\@bibliographyunit[#1]{%
1360 \global\let\bibliography\bu@bibliography
1361 \global\let\bibliographystyle\bu@bibliographystyle
1362 \global\let\old@bibunit#1
1363 \global\let#1\@bibunit
1364 \gdef\@endbibunit{\global\let#1\old@bibunit}%
1365 }
1366 % \end{macrocode}
1367 % \end{macro}
1368 %
1369 %
1370 %
1371 % \subsection{Insert a local bibliography}
1372 %
1373 % \begin{macro}{\putbib}
1374 % If the \BibTeX\ data file is given as an optional argument, evoke
1375 % |\@putbib| which uses this argument, otherwise call |\@putbib|
1376 % with the default \BibTeX\ data file stored in |\bu@bibdata|.
1377 %
1378 % \begin{macrocode}
1379 \def\putbib{\@ifnextchar[{\@putbib}{\@putbib[\bu@bibdata]}}
1380 % \end{macrocode}
1381 % \end{macro}
1382 %
1383 %
1384 % \begin{macro}{\@putbib}
1385 % \changes{v2.1a}{1999/11/15}{Set \macrott{temp@auxout} and activate
1386 % \macrott{bu@addtocontents}.}
1387 % \changes{v2.1c}{1999/11/24}{Change to respond to option
1388 % \option{labelstoglobalaux}.}
1389 % \changes{v2.1g}{2000/07/31}{Add activation of
1390 % \macrott{bu@bibitem} and \macrott{bu@lbibitem}, remove activation of
1391 % \macrott{bu@addtocontents} and redefinition of \macrott{@auxout}.}
1392 % \changes{v2.1h}{2000/08/07}{Remove code for \option{labelstoglobalaux}
1393 % and activation of \macrott{bu@bibitem} and
1394 % \macrott{bu@lbibitem}.}
1395 % \changes{v2.1i}{2000/09/30}{\macrott{@startbibunitorrelax} added.}
1396 % \changes{v2.1o}{2000/10/09}{Add local .bbl files to
1397 % \macrott{@filelist} by using \macrott{@input@} instead of
1398 % \macrott{@input}.}
1399 %
1400 % Similar to |\bibliography|, |\@putbib| writes the \BibTeX\ data
1401 % and |\@input|s the typeset bibliography |\@bibunitname.bbl|. Macro
1402 % |\@startbibunitorrelax| triggers a new bibunit and allows
1403 % |\putbib| to be issued before the first cite command within a
1404 % bibunit.
1405 %
1406 % \begin{macrocode}
1407 \def\@putbib[#1]{%
1408 \@startbibunitorrelax
1409 \if@filesw
1410 \immediate\write\@bibunitaux{\string\bibdata{#1}}%
1411 \fi
1412 \@input@{\@bibunitname.bbl}%
1413 }
1414 % \end{macrocode}
1415 % \end{macro}
1416 %
1417 %
1418 % \begin{macro}{\bu@addtocontents}
1419 % \changes{v2.1a}{1999/11/15}{Add macro.}
1420 % \changes{v2.1g}{2000/07/31}{Remove macro.}
1421 %
1422 % [Macro removed.]
1423 % \end{macro}
1424 %
1425 %
1426 % \noindent The package allows the same cited item to occur in more than one
1427 % bibliography. Therefore the text which actually replaces the |\cite|
1428 % has to be kept locally, too. This can be switched off using
1429 % \option{labelstoglobalaux}.
1430 %
1431 % The text which replaces the |\cite| is created by the |\bibitem|
1432 % commands in the |.bbl| file which is |\@input|ed in |\@putbib|. The
1433 % |\bibitem| macro invokes macros |\@lbibitem| or |\@bibitem| which
1434 % write to |\@auxout|. By default, i.e., without option
1435 % \option{labelstoglobalaux} these commands are replaced by
1436 % \package{bibunits} version to write to the local auxiliary file of the
1437 % bibunit. The former meaning of |\@auxout| is saved in |\temp@auxout|
1438 % to be restored afterwards.
1439 %
1440 % Note that some packages, like \package{mparhack} or \komascript\
1441 % classes like \class{scrartcl} with option \option{bibtotoc} also write
1442 % material to |\@auxout| while inside |\thebibliography| within the
1443 % |.bbl| file. Therefore, redefining |\@auxout| in |\putbib| would
1444 % result in erroneously writing this material to the local auxiliary
1445 % file. Therefore, only the commands which actually write, i.e.,
1446 % |\@bibitem| and |\@lbibitem|, are redefined to write to the local
1447 % auxiliary file.
1448 %
1449 % Note that the redefined command |\bibliography| which generates a global
1450 % bibliography uses the same mechanism to write the replacement text
1451 % for the cite commands to |bu.aux|.
1452 %
1453 %
1454 % \begin{macro}{\std@bibitem}
1455 % \begin{macro}{\std@lbibitem}
1456 % \begin{macro}{\@bibitem}
1457 % \begin{macro}{\@lbibitem}
1458 % \changes{v2.1g}{2000/07/31}{Add macros.}
1459 % \changes{v2.1h}{2000/08/07}{Direct redefinition of
1460 % \macrott{@bibitem} and \macrott{@lbibitem} instead of
1461 % definition of local \macrott{bu} versions, but only if
1462 % \macrott{labelstoglobalaux} is false. Setting of
1463 % \macrott{temp@auxout} added.}
1464 %
1465 % Define new versions of |\@bibitem| and |\@lbibitem| which write
1466 % to |\bibunitaux| instead of |\@auxout|.
1467 % Encapsulation with braces instead of the two |let|s results in
1468 % |\@noitemerr| for the \textsf{thebibliography} environment.
1469 % \begin{macrocode}
1470 \AtBeginDocument{%
1471 \iflabelstoglobalaux
1472 \else
1473 \let\std@bibitem\@bibitem
1474 \let\std@lbibitem\@lbibitem
1475 \def\@bibitem#1{%
1476 \let\temp@auxout\@auxout
1477 \let\@auxout\@bibunitaux
1478 \std@bibitem{#1}%
1479 \let\@auxout\temp@auxout
1480 }
1481 \def\@lbibitem[#1]#2{%
1482 \let\temp@auxout\@auxout
1483 \let\@auxout\@bibunitaux
1484 \std@lbibitem[#1]{#2}%
1485 \let\@auxout\temp@auxout
1486 }
1487 \fi
1488 }
1489 % \end{macrocode}
1490 % \end{macro}
1491 % \end{macro}
1492 % \end{macro}
1493 % \end{macro}
1494 %
1495 %
1496 %
1497 % \subsection{Allow commands to be used not only in preamble}
1498 %
1499 % \changes{v1.0f}{1998/12/29}{Remove \macrott{bibcite} from
1500 % the list of preamble commands.}
1501 %
1502 % To handle citations of the same cited item in more than one
1503 % bibliography, replacement text for the citation is written to the
1504 % local auxiliary file. In subsequent runs of \LaTeX, this file is
1505 % read at the beginning of the bibunit.
1506 %
1507 %
1508 % \begin{macro}{\remequivalent}
1509 % \begin{macro}{\plugh}
1510 % \begin{macro}{\hgulp}
1511 % The local auxiliary file contains |\bibcite| commands, which can be
1512 % used only in the preamble in some older version of \LaTeX. For
1513 % compatibility with these versions, macros to remove an item from
1514 % a list are provided (see the \TeX book, p.\ 380; the only change
1515 % is the separator |\do| instead of |\\|).
1516 % \begin{macrocode}
1517 \def\remequivalent#1\from#2{%
1518 \let\given=#1%
1519 \ifx#2\empty
1520 \else
1521 \edef#2{\expandafter\plugh#2\plugh}%
1522 \fi
1523 }
1524 \def\plugh\do#1#2{%
1525 \ifx#1\given
1526 \else
1527 \noexpand\do\noexpand#1%
1528 \fi
1529 \ifx#2\plugh
1530 \hgulp\fi\plugh#2%
1531 }
1532 \def\hgulp\fi\plugh\plugh{\fi}
1533 % \end{macrocode}
1534 % \end{macro}
1535 % \end{macro}
1536 % \end{macro}
1537 %
1538 %
1539 % Now we are ready to remove |\bibcite| from the |\@preamblecmds| list.
1540 % \begin{macrocode}
1541 \remequivalent\bibcite\from\@preamblecmds
1542 % \end{macrocode}
1543 %
1544 %
1545 % \medskip
1546 % The command |\bibcite| calls |\@newl@bel| to create new
1547 % labels. This is by default only allowed as a preamble command and
1548 % would cause a `Can be used only in preamble' warning. Instead of
1549 % removing |\@newl@bel| from the list of preamble command (like
1550 % |\bibcite|), we redefine |\bibcite| to directly call |\@namedef| and
1551 % issue no warning. We decided not to give even an info, because
1552 % multiple cited references should be perfectly normal to
1553 % \package{bibunits}. Similarly, we modify \package{natbib}'s
1554 % |\bibcite|.
1555 %
1556 %
1557 % \begin{macro}{\bibcite}
1558 % \changes{v2.0a}{1999/06/02}{\package{natbib} compatibility.}
1559 % \changes{v2.0d}{1999/09/27}{Implementation streamlined.}
1560 % \changes{v2.1d}{2000/01/27}{\macrott{@namedef} not defined
1561 % \macrott{global}.}
1562 % \changes{v2.1h}{2000/08/06}{\macrott{@namedef} again defined
1563 % \macrott{global}.}
1564 %
1565 % \begin{macrocode}
1566 \AtBeginDocument{%
1567 \@ifpackageloaded{natbib}%
1568 {\renewcommand\bibcite[2]{\global\@namedef{b@#1\@extra@binfo}{#2}}}%
1569 {\renewcommand\bibcite[2]{\global\@namedef{b@#1}{#2}}}%
1570 }
1571 % \end{macrocode}
1572 % \end{macro}
1573 %
1574 %
1575 %
1576 % \subsection{Package \package{babel} compatibility}
1577 %
1578 % \begin{macro}{\@input}
1579 % \begin{macro}{\std@@citex}
1580 % \begin{macro}{\bu@@citex}
1581 % \changes{v2.1m}{2000/10/05}{Redefinition of \macrott{std@@citex},
1582 % \macrott{@input} and, if \package{bibunits} is loaded, of
1583 % \macrott{bu@@citex}.}
1584 %
1585 % If \package{babel} with options \option{frenchb} is loaded, some
1586 % characters like the colon `:' are made active. Since a colon
1587 % frequently appears within a cite key, active characters have to
1588 % be switched off for various commands. This can be done using
1589 % |\bbl@redefine|.
1590 %
1591 % First, check if \package{babel} is loaded, by checking if |\bbl@redefine|
1592 % is defined. In this case, |\bbl@redefine| commands.
1593 % \begin{macrocode}
1594 \AtBeginDocument{%
1595 \@ifundefined{bbl@redefine}%
1596 {}%
1597 {%
1598 \bbl@redefine\@input#1{%
1599 \@safe@activestrue\org@@input{#1}\@safe@activesfalse}%
1600 \@ifpackageloaded{natbib}%
1601 {%
1602 \bbl@redefine\std@@citex[#1][#2]#3{%
1603 \@safe@activestrue\org@std@@citex[#1][#2]{#3}\@safe@activesfalse}%
1604 \bbl@redefine\bu@@citex[#1][#2]#3{%
1605 \@safe@activestrue\org@bu@@citex[#1][#2]{#3}\@safe@activesfalse}%
1606 }%
1607 {% natbib not loaded
1608 \bbl@redefine\std@@citex[#1]#2{%
1609 \@safe@activestrue\org@std@@citex[#1]{#2}\@safe@activesfalse}%
1610 }%
1611 }%
1612 }
1613 % \end{macrocode}
1614 % \end{macro}
1615 % \end{macro}
1616 % \end{macro}
1617 %
1618 %
1619 % \begin{macrocode}
1620 %</package>
1621 % \end{macrocode}
1622 %
1623 % \PrintIndex
1624 % \PrintChanges
1625 % \Finale
1626 %