diff options
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/source/latex/multibib/multibib.dtx | 1068 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/multibib/multibib.ins | 18 |
2 files changed, 1086 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/multibib/multibib.dtx b/Master/texmf-dist/source/latex/multibib/multibib.dtx new file mode 100644 index 00000000000..a4a387ce815 --- /dev/null +++ b/Master/texmf-dist/source/latex/multibib/multibib.dtx @@ -0,0 +1,1068 @@ +% \CheckSum{394} +% +% \iffalse +%% Package `multibib' to use with LaTeX2e. +%% Copyright (C) 2003 by Thorsten Hansen. All rights reserved. +%% +% +%<*dtx> + \ProvidesFile{multibib.dtx} +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{multibib} +%<driver>\ProvidesFile{multibib.drv} +% \fi +% \ProvidesFile{multibib.dtx} + [2004/01/28 v1.3 Multiple bibliographies for 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{multibib.dtx} +\end{document} +%</driver> +% \fi +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \newcommand{\class}[1]{\textsf{#1}} +% \newcommand{\option}[1]{\textsf{#1}} +% \newcommand{\komascript}{KOMA-\textsc{Script}} +% \newcommand{\package}[1]{\textsf{#1}} +% \newcommand{\macrott}[1]{\texttt{\symbol{'134}#1}} +% \renewcommand*\descriptionlabel[1]{\hspace\labelsep\option{#1}} +% +% ^^A +% ^^A A rule to separate figures from the text. +% ^^A (Modified code 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} +% +% \GetFileInfo{multibib.dtx} +% \title{The \textsf{multibib} 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 numbers suffixed with characters have not +% been released.} +% \def\levelchar{-} +% +% \changes{v1.0}{1999/07/27}{Initial version} +% \changes{v1.1}{1999/01/14}{Documentation.} +% \changes{v1.1a}{2001/10/06}{Equivalents of macros \macrott{citep} and +% \macrott{citet} added.} +% \changes{v1.1b}{2001/10/10}{Evoke \package{multibib}'s \macrott{@citex} +% variant not for standard \macrott{cite} +% commands.} +% \changes{v1.1c}{2001/10/16}{Equivalents of macros \macrott{citealp} and +% \macrott{citealt} added.} +% \changes{v1.1d}{2001/11/04}{Spurious letters occurring for bibstyle +% \textsf{alpha} removed.} +% \changes{v1.1e}{2001/11/04}{Additional definition of \macrott{refname} +% in \macrott{newcites} loop.} +% \changes{v1.2}{2003/03/24}{Documentation.} +% \changes{v1.2a}{2003/07/15}{General compatibility mechanism for packages +% which redefine \macrott{@citex}, motivated +% by compatibility to \package{cite} v4.0.} +% \changes{v1.2b}{2003/09/22}{General compatibility mechanism for packages +% which define their own cite commands, motivated by +% compatibility to \package{jurabib}.} +% \changes{v1.2c}{2004/01/23}{Streamline code.} +% \changes{v1.3}{2004/01/24}{Documentation.} +% +% +% +% +% \begin{abstract} +% The \package{multibib} package allows to create references to +% multiple bibliographies within one document. It thus provides a +% complementary functionality to packages like \package{bibunits} or +% \package{chapterbib}, which allow to create one bibliography for +% multiple, but different parts of the document. The package +% introduces the generic macro |\newcites| which generates +% user-defined citation and bibliography commands for each new +% bibliography in the document. The new commands can be used +% intuitively, since both syntax and semantics are similar to their +% standard \LaTeX\ equivalents. Each bibliography can have its +% individual style and \BibTeX\ data file(s). Citations to each +% bibliography are collected in a new auxiliary file to be processed +% by \BibTeX. The \package{multibib} package is compatible with +% \package{cite}, \package{inlinebib}, \package{jurabib} (to be +% loaded before \package{multibib}), \package{natbib}, +% \package{suthesis} and \komascript\ classes. +% \end{abstract} +% +% +% +% +% \section{Usage Notes} +% +% Suppose, you have to separate your citations into two bibliographies, +% one for primary literature and one for secondary literature. The +% \package{multibib} package defines the |\newcite| command which +% introduces a new new family of cite and bibliography commands. +% \begin{verbatim} +% \newcites{sec}{Secondary Literature} +% \end{verbatim} +% In this case the generic macro defines four new commands, +% suffixed by the first argument. +% \begin{verbatim} +% \citesec +% \nocitesec +% \bibliographystylesec +% \bibliographysec +% \end{verbatim} +% The second argument of |\newcites| provides the title of the corresponding +% bibliography. All these new commands accept the same parameters as +% their standard \LaTeX\ equivalents and behave analogous to.---In the +% example above, the bibliography for primary literature can be +% generated by \LaTeX's standard commands. When the document is +% processed, an auxiliary file |sec.aux| is generated, which needs to +% be compiled through \BibTeX. +% +% The tiny \verb|\newcites| command is not limited to one bibliography. +% In fact, you can generate as much bibliographies as you like (only +% limited by the maximum number of \TeX's output files, usually~16). +% In the following example, separate bibliographies are created for +% own articles, submitted articles, internal reports, and other work. +% \begin{verbatim} +% \newcites{own,submitted,internal}% +% {Own Work,% +% Submitted Work,% +% {Technical Reports, Master Theses and Ph.D. Theses}} +% \end{verbatim} +% Note that a title containing commas needs to be grouped. Again, the +% bibliography for other work is generated by \LaTeX's standard +% commands. +% +% \DescribeMacro{\newcites} +% After this introductory examples, let's look at the precise +% definition of |\newcites|. The command +% |\newcites|\marg{suffix\_list}\marg{heading\_list} defines a new +% family of commands for each suffix~\meta{s} in \meta{suffix\_list}, +% namely |\cite|\meta{s}, |\nocite|\meta{s}, +% |\bibliographystyle|\meta{s}, and |\bibliography|\meta{s} . The +% \meta{suffix\_list} is a comma separated list of letters, i.e, the +% same characters which are allowed as part of a \TeX\ command. The +% \meta{heading\_list} is a comma separated list of words, i.e, the +% same sort of input (including commands) that can be used as argument +% of, e.g., |\section|. The commands |\cite|\meta{s} and +% |\nocite|\meta{s} generate citations that appear in the +% corresponding bibliography which is generated by +% |\bibliography|\meta{s}. The title of this bibliography is defined +% by the entry \meta{h} in \meta{heading\_list} at the same position +% as \meta{s} in \meta{suffix\_list}. The individual style of the +% bibliography can be defined by |\bibliographystyle|\meta{s}. +% +% \DescribeMacro{\setbiblabelwidth} +% When using numerical reference schemes like, e.g., \textsf{plain}, +% the labels in the bibliography have sometimes the wrong width. In +% this case you can set the desired label width using +% |\setbiblabelwidth|\marg{number}, in the same fashion as you would +% specify the label width with |\thebibliography|\marg{number}. +% +% It is also possible to let \LaTeX\ do the job by using +% \package{multibib}'s variant \textsf{mbplain} instead of +% \textsf{plain} as bibliography style. The modification does not +% affect the formatting style but only internal values, such that +% \LaTeX\ can determine the right width. More precisely, +% \textsf{mbplain} sets the longest label to the number of entries in +% the bibliography, while \textsf{plain} takes the smallest number +% which has the same width as the number of entries. For example, if +% your bibliography has 29~entries, \textsf{plain} sets the label to +% 10 while \textsf{mbplain} sets the label to~29. This is done by +% modifying the function \texttt{longest.label.pass}. +% \begin{verbatim} +% FUNCTION {longest.label.pass} +% { number.label int.to.str$ 'label := +% number.label #1 + 'number.label := +% label width$ longest.label.width > +% label width$ longest.label.width = %% added in mbplain +% or %% added in mbplain +% { label 'longest.label := +% label width$ 'longest.label.width := +% } +% 'skip$ +% if$ +% } +% \end{verbatim} +% If you use other numerical styles than \textsf{plain}, you can +% customize your favorite style accordingly. +% +% +% +% \subsection{Package Options} +% \begin{description} +% \item[resetlabels] When using numerical reference schemes, +% start each bibliography with~`[1]'. Default is continuous numbering, +% such that labels are created unambiguously. +% \end{description} +% +% +% +% \subsection{\textnormal{\BibTeX} Processing} +% +% For each bibliography a corresponding auxiliary file \meta{s}|.aux| +% is generated, that needs to be compiled through \BibTeX. This can be +% done by the following bash-script. +% \begin{verbatim} +% #!/bin/bash +% for file in *.aux ; do +% bibtex `basename $file .aux` +% done +% \end{verbatim} +% +% +% +% \subsection{Limitations} +% +% \begin{itemize} +% \item When using numerical reference schemes and references to the +% same item appear in different bibliographies, the labels +% cannot be resolved properly. Rather, the replacement text +% (i.e, the number) is used which is defined in the auxiliary +% file read last. +% \item When using author-year reference schemes, entries with the +% same author and year combinations which appear in different +% bibliographies get the same label. +% In this case you have to manually add some hints to which +% bibliography the entry refers, e.g.,\\ +% |\cite[in primary literature]{Foo:1999a}| vs.\ \\ +% |\citesec[in secondary literature]{Foo:1999b}|.\\ +% You can also edit the |.bbl| files created by \BibTeX\ and +% add `a', `b',\dots\ to the labels, but your changes will +% be overwritten by subsequent \BibTeX\ runs. The +% differentiating letters `a', `b',\dots\ cannot be added +% automatically by \BibTeX\ since the entries appear in +% different auxiliary files. +% \item With \package{natbib}, you cannot use numerical and +% author-year reference schemes together. Typographically, this +% is regarded bad style anyway. +% \item For \package{jurabib} and \package{multibib}, the order of +% loading is important: \package{jurabib} must be loaded before +% \package{multibib}. +% \end{itemize} +% +% +% +% +% \section{Example} +% +% Let's now consider a complete example with two bibliographies, one +% for \TeX\ and \LaTeX\ references and one for Postscript references. +% For demonstration purposes, different styles are used for the two +% references, namely \textsf{alpha} for \TeX\ and \LaTeX\ references and +% \textsf{plain} for Postscript references. Typographically, different +% bibliography styles are regarded as bad and therefore should be +% avoided in real documents. The reference data are supposed to be +% stored in a common \BibTeX\ data file |lit.bib|. Note that the +% heading of the Postscript references is redefined with +% |\renewcommand{\refname}|. + +% \begin{figure}[h] +% \hspace*{-25mm}\begin{minipage}[t]{0.6\textwidth} +% \toprule +% {\let\small\footnotesize +% \begin{verbatim} +% \documentclass{article} +% \usepackage{multibib} +% \newcites{ltex}{\TeX\ and \LaTeX\ References} +% +% \begin{document} +% References to the \TeX book \citeltex{Knuth:1991} +% and to Lamport's \LaTeX\ book, which appears +% only in the references\nociteltex{Lamport:1994}. +% Finally a cite to a Postscript tutorial +% \cite{Adobe:1985}. +% +% \bibliographystyleltex{alpha} +% \bibliographyltex{lit} +% +% \renewcommand{\refname}{Postscript References} +% \bibliographystyle{plain} +% \bibliography{lit} +% +% \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 \cite{Knuth:1991} +% and to Lamport's \LaTeX\ book, which appears +% only in the references\nocite{Lamport:1994}. +% Finally a cite to a Postscript tutorial +% \cite{Adobe:1985}. +% {\let\section\subsubsection +% \renewcommand{\refname}{\TeX\ and \LaTeX\ References} +% \begin{thebibliography}{Lam94} +% \bibitem[Knu91]{Knuth:1991} +% Donald~E. Knuth. +% \newblock {\em The {\TeX} book}. +% \newblock Addison-Wesley, Reading, Massachusetts, 1991. +% \bibitem[Lam94]{Lamport:1994} +% Leslie Lamport. +% \newblock {\em {\LaTeX:} A Document Preparation System}. +% \newblock Addison-Wesley, Reading, Massachusetts, 2 edition, 1994. +% \end{thebibliography}} +% {\let\section\subsubsection +% \renewcommand{\refname}{Postscript References} +% \begin{thebibliography}{1} +% \bibitem{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{3.25mm} +% \bottomrule +% \end{minipage} +% \caption{Example input and output.} +% \end{figure} +% +% To process your document, three runs of \LaTeX\ and two runs of \BibTeX\ +% are required. +% +% \vbox{% +% \begin{verbatim} +% latex mydoc +% bibtex mydoc +% bibtex ltex +% latex mydoc +% latex mydoc +% \end{verbatim}} +% +% +% +% +% \section{Notes for Class and Package Writers} +% +% Packages such as \package{cite} or \package{natbib} which modify the +% internal macro |\@citex| called from |\cite| by, e.g., changing +% the number of arguments, and/or define new variants of |\cite|, such as +% \package{natbib}'s |\citep|, deserve a special handling to ensure +% combatibility to \package{multibib}. In the first case, the problem +% arise because \package{multibib}'s redefinition of |\@citex| to write to +% a new auxiliary file |\@newciteauxhandle| instead of writing to +% |\@auxout| is overwritten. In the second case, the problem arise +% because \package{multibib} is unaware of additional cite commands and +% thus cannot define the new variants. The problems can +% be solved by using the compatibility mechanisms +% supported by \package{multibib} as described in the following. +% +% +% +% \subsection{Packages which modify \macrott{@citex}} +% +% Packages which modify |\@citex| can be made compatible to +% \package{multibib} by making the following three changes to the code: +% \begin{enumerate} +% \item Add the following code: +% \begin{verbatim} +% \providecommand\@newciteauxhandle{\@auxout} +% \def\@restore@auxhandle{\gdef\@newciteauxhandle{\@auxout}} +% \AtBeginDocument{% +% \@ifundefined{newcites}{\global\let\@restore@auxhandle\relax}{}} +% \end{verbatim} +% The first line defines |\@newciteauxhandle| to the default value +% |\@auxout| if |\@newciteauxhandle| is not already defined. The +% second line defines macro |\@restoreauxhandle| which sets +% |\@newciteauxhandle| to its default value. The next two lines +% |\let| macro |\@restoreauxhandle| to |\relax| in case +% \package{multibib} is not loaded and |\newcites| is undefined. +% \item In the redefinitions of |\@citex| replace |\@auxout| by +% |\@newciteauxhandle|. +% \item At the end of the each |\@citex| redefinitions add the macro +% |\@restoreauxhandle|. +% \end{enumerate} +% At present, packages \package{cite} and \package{jurabib} use this +% combatibility mechanism. +% +% +% +% \subsection{Packages which define new cite commands} +% +% Packages which define new cite commands can add these commands using +% |\@mb@citenamelist|. The default definition, which +% already includes \package{natbib}'s cite variants, is given below. +% \begin{verbatim} +% \def\@mb@citenamelist{cite,citep,citet,citealp,citealt} +% \end{verbatim} +% A package which defines, e.g, a new cite command |\footcite| informs +% \package{multibib} about this command by defining +% \begin{verbatim} +% \def\@mb@citenamelist{cite,citep,citet,citealp,citealt,footcite} +% \end{verbatim} +% At present, package \package{jurabib} use this combatibility mechanism. +% +% +% +% \subsection{Advantages of the compatibility mechanism} +% +% Compared to a solution where all compatibility patching is done by +% \package{multibib}, such as is presently the case for +% \package{natbib}, the above solution has several advantages: +% \begin{enumerate} +% \item The mechanisms provides a general solution for several +% packages. Any new package can be made compatible with \package{multibib} +% without the need for a new release of \package{multibib}. +% \item Existing packages can change the number of arguments to +% |\@citex| or introduce new cite macros without the need to change +% \package{multibib}. +% \item If |\@citex| needs to read the next input character, this +% character is available and not masked by \package{multibib}'s |let|s +% which follow the |\@std@citex|. This is important for the +% \package{cite} package. +% \item More efficient code. A single |\let| in |\@restore@auxhandle| +% instead of four. +% \end{enumerate} +% +% +% +% +% \section{Brief Discussion of Related Packages} +% +% \paragraph{Similar packages.} The \package{bibtopic} package addresses the +% same issue as the present package, using a completely different +% approach. The user has to provide a separate \BibTeX\ data file +% |liti.bib| for each bibliography and can generate the corresponding +% bibliography within a |btSect| environment. +% +% \begin{verbatim} +% \begin{btSect}{liti} +% \btPrintCited +% \end{btSect} +% \end{verbatim} +% +% Using |\btPrintNotCited|, a complementary bibliography showing all +% entries not cited in the document can also be generated. +% Additionally, an environment |btunit| is defined to generate +% bibliographies for different units of the text, thus partly +% offering the functionality of packages like \package{bibunits} or +% \package{chapterbib}. Besides its powerful functionality, the +% \package{bibtopic} package has some drawbacks and restrictions: +% \begin{itemize} +% \item less intuitive user interface +% \item the user has to split his \BibTeX\ data files +% \item bibliography styles that put some material between the begin +% of\\ |thebibliography| and the first |\bibitem| deserve a +% special handling +% \item does not work with bibliography style |unsorted| +% \item and more, see Sec.~`Restrictions' of the \package{bibtopic} +% documentation +% \end{itemize} +% +% Finally, due to its large size (1059 lines) and implementation +% approach, processing is probably slower. In a nutshell, +% \package{bibtopic} does the following: for each bibliography, a +% |\citation{*}| command is written to a new, corresponding auxiliary +% file, such that \emph{all} entries of the \BibTeX\ data base are +% extracted. Then, by reimplementing the |\bibitem| command, all items +% which do not occur in a special list of labels, produced by the cite +% commands, are deleted. Obviously, doing part of \BibTeX's work +% requires some amount of memory and time (and programming skills, +% noteworthy |;-)|). +% +% +% \paragraph{Complementary packages.} The packages \package{bibunits} +% and \package{chapterbib} provide commands to generate multiple +% bibliographies, too. The main difference is, that with these +% packages a single bibliography is generated for multiple, but +% different parts of the text. Therefore, within a certain unit, i.e., +% part of the text, citations can only be made to a single, +% corresponding bibliography. On the other hand, with +% \package{multibib}, within the same (but single) part, citations can +% be generated for multiple bibliographies. +% +% \paragraph{Analogous packages.} The \package{multind} package allows +% multiple indexes. +% +% +% +% +% \section{Acknowledgments} +% +% The author thanks Donald Arseneau for suggesting the compatibility mechanism +% for packages which modify |\@citex|. Further, the author +% acknowledges the contributions of numerous people, in particular +% Jens Berger and Frank Mittelbach, whose suggestions and bug reports have +% helped to improve \package{multibib}. +% +% +% +% +% \StopEventually{\PrintIndex\PrintChanges} +% +% +% +% +% \section{The Macros} +% +% One paradigm with guided the development of the code was to use +% standard \LaTeX\ commands as much as possible, and to customize their +% behavior using |\let|. +% +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% +% \subsection{Option Handling} +% \changes{v1.0i}{2000/01/12}{New option \option{resetlabels}.} +% +% \begin{macro}{\ifcontinuouslabels} +% Define a new if to switch between continuous labeling of +% bibliographies (default) and start of labels with~`[1]'. The latter +% can be activated with option \option{resetlabels}. +% \begin{macrocode} +\newif\ifcontinuouslabels +\continuouslabelstrue +\DeclareOption{resetlabels}{\continuouslabelsfalse} +\ProcessOptions +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Preliminaries} +% +% \begin{macro}{\mylop} +% \begin{macro}{\mylopoff} +% Variation of |\lop|, using `|,|' as separator instead of `|\|' +% to extract the elements in the first argument of |\newcites| +% (cf.~The \TeX book, p. 378). +% \begin{macrocode} +\def\mylop#1\to#2{\expandafter\mylopoff#1\mylopoff#1#2} +\long\def\mylopoff#1,#2\mylopoff#3#4{\def#4{#1}\def#3{#2}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@newciteauxhandle} +% \changes{v1.1b}{2001/10/10}{Handle removed.} +% +% Define a new handle of the auxiliary file for +% all |\cite| and |\nocite| commands, standard as well as newly +% defined. For the standard commands, this handle is let to +% |\auxout|. Since version 1.1b the definition +% |\let\@newciteauxhandle\@auxout| is no longer needed since +% below we reset |\@citex| to its standard value after each call of +% |\mb@@citex|. +% \end{macro} +% +% +% \begin{macro}{\std@@citex} +% \begin{macro}{\mb@@citex} +% \changes{v1.0f}{2000/01/10}{Update to \package{natbib} v7.0: +% save \macrott{@auxout} before +% redefinition instead of encapsulation +% in braces.} +% \changes{v1.1b}{2001/10/10}{\macrott{global} setting of +% \macrott{@save@auxout}; setting of \macrott{newciteauxhandle} +% removed; instead, reset \macrott{citex} to its standard +% version.} +% \changes{v1.2a}{2003/07/15}{New definition of \macrott{mb@@citex} +% only if \macrott{@newciteauxhandle} is not already +% defined by compatible packages.} +% +% +% Definitions of |\mb@@citex| to replace |\@citex| in the definition of +% the various |cite| commands. The idea is to write to a specific file +% referred to |\@newciteauxhandle| instead of |\@auxout|. Below in the +% definition of the specific |\cite<s>| and |\nocite<s>| commands, +% |\@newciteauxhandle| is set to the new auxiliary files |<s>.aux|. If +% |\@newciteauxhandle| is already defined by compatible packages, simply +% |\let| macro |\mb@@citex| to |\@citex| +% +% If \package{natbib} is loaded, a variant of |\@citex| with an +% additional optional argument is needed. Macro |\NAT@set@cites| +% invokes \package{natbib}'s |\cite| and |\@citex| definitions. +% \begin{macrocode} +\AtBeginDocument{% + \@ifpackageloaded{natbib}{% + \NAT@set@cites + \let\std@@citex\@citex + \def\mb@@citex[#1][#2]#3{% + \global\let\@save@auxout\@auxout + \let\@auxout\@newciteauxhandle + \std@@citex[#1][#2]{#3}% + \let\@auxout\@save@auxout + \let\@citex\std@@citex}% + }{% else + \@ifundefined{@newciteauxhandle}{% not defined by compatible packages + \let\std@@citex\@citex + \def\mb@@citex[#1]#2{{% + \let\@auxout\@newciteauxhandle + \std@@citex[#1]{#2}}% + \let\@citex\std@@citex}% + }{\let\mb@@citex\@citex}% + }% +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@newusecounter} +% \begin{macro}{\newusecounter} +% Do not reset counter to zero at begin of bibliography. This +% generates continuous numbering of references through all new +% bibliographies to ensure that numerical references are created +% unambiguously. To reset the counter only for the \emph{first} +% bibliography, |\newusecounter| is initially let to |\usecounter|. +% Below, in the definition of the new bibliographies, +% |\newusecounter| is let to |\@newusecounter|. +% \begin{macrocode} +\def\@newusecounter#1{\@nmbrlisttrue\def\@listctr{#1}} +\let\newusecounter\usecounter +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\std@bibliography} +% \begin{macro}{\bibliography} +% \changes{v1.0a}{1999/07/27}{Continuous numbering also for +% \macrott{bibliography}.} +% \changes{v1.0i}{2000/01/12}{Change to respond to option +% \option{resetlabels}.} +% +% To ensure continuous numbering, the |\newusecounter| is +% redefined also for the standard |\bibliography|, same as for the +% new |\bibliography|\meta{s} macros. +% \begin{macrocode} +\let\std@bibliography\bibliography +\def\bibliography#1{% + \ifcontinuouslabels + \let\usecounter\newusecounter + \fi + \std@bibliography{#1}% + \ifcontinuouslabels + \global\let\newusecounter\@newusecounter + \fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\mb@biblabelwidth} +% \begin{macro}{\setbiblabelwidth} +% \changes{v1.0e}{1999/12/12}{New macro.} +% +% The macro |\setbiblabelwidth| explicitly sets the width of the +% labels in the bibliography. An internal counter +% |\mb@biblabelwidth| is introduced and a macro |\setbiblabelwidth| +% which simply assigns its argument to the new counter. The value +% of the counter is then used in \package{multibib}'s modification +% of |\thebibliography|. +% \begin{macrocode} +\newcount\mb@biblabelwidth +\newcommand\setbiblabelwidth[1]{\mb@biblabelwidth #1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\std@thebibliography} +% \begin{macro}{\thebibliography} +% \changes{v1.0b}{1999/07/30}{Correct label width for numerical +% reference schemes.} +% \changes{v1.0e}{1999/12/12}{Works with \macrott{setbiblabelwidth}.} +% \changes{v1.0i}{2000/01/14}{No change of label width for option +% \option{resetlabels}.} +% \changes{v1.0k}{1999/01/14}{\package{suthesis} compatibility.} +% +% The argument of |\thebibliography| determines the width of the +% labels in the bibliography. First it is checked if the parameter +% is a number. If it is not a number, we do not have to care about +% setting label widths and can simply call |\std@thebibliography|. +% Otherwise we check if the label width is not set explicitly, +% i.e., |\mb@biblabelwidth=0|. In this case the label width is determined +% as the the last label in the previous bibliography |\c@enumiv| +% plus the number of labels in the current bibliography |#1| +% (provided the bibliography style computes the values right, +% like \textsf{mbplain}). If the value is set explicitly +% by~|\mb@biblabelwidth|, this value is used and then reset to zero +% such that only the labels in the current bibliography are affected. +% +% \begin{macrocode} +\AtBeginDocument{% + \@ifpackageloaded{suthesis}% + {\def\thebibliography#1{% + \newpage + \addcontentsline{toc}{chapter}{\bibname}% + \@ldthebibliography{#1}}}% + {}% + \let\std@thebibliography\thebibliography + \def\thebibliography#1{% + \@isnumber{#1}% + {\ifnum\mb@biblabelwidth=0 + \@tempcnta\c@enumiv + \ifcontinuouslabels + \advance\@tempcnta#1% + \fi + \std@thebibliography{\@arabic\@tempcnta}% + \else + \std@thebibliography{\@arabic\mb@biblabelwidth}% + \global\mb@biblabelwidth 0 + \fi}% + {\std@thebibliography{#1}}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@isnumber} +% \changes{v1.0g}{2000/01/10}{Empty string is not handled as number.} +% \changes{v1.1d}{2001/01/04}{Execute \macrott{@scannumber} in +% \macrott{hbox}.} +% +% Macro |\@isnumber| behaves as follows: If |#1| is a number (which +% may contain blanks at arbitrary positions), |#2| is executed, +% else |#3|. +% +% \begin{macrocode} +\newcommand{\@isnumber}[3]{% + \def\argi{#1}% + \ifx\argi\empty + #3 + \else + \global\@tempswafalse + \setbox\@tempboxa=\hbox{\@scannumber#1\plugh}% + \if@tempswa#2\else#3\fi + \fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@scannumber} +% \changes{v1.1d}{2001/01/04}{Initialize \macrott{plugh} with +% \macrott{relax}; simply \macrott{relax} +% when the \macrott{testchar} is not a digit +% instead of \macrott{@gobbletillplugh}.} +% +% Macro |\@scannumber| evaluates the single characters +% of its argument. If all characters are digits or +% blanks,|\@scannumber| is recursively evoked until it finally +% reads |\plugh| which marks the end of the argument (in +% macro |\@isnumber|) and sets |\@tempswatrue| which is then used +% in |\@isnumber|. If the tested character is not a digit, the +% macro exits, leaving |\@tempswa| unchanged. +% +% \begin{macrocode} +\let\plugh\relax +\newcommand{\@scannumber}[1]{% + \let\testchar#1% + \ifx \testchar 0\let\next\@scannumber + \else\ifx \testchar 1\let\next\@scannumber + \else\ifx \testchar 2\let\next\@scannumber + \else\ifx \testchar 3\let\next\@scannumber + \else\ifx \testchar 4\let\next\@scannumber + \else\ifx \testchar 5\let\next\@scannumber + \else\ifx \testchar 6\let\next\@scannumber + \else\ifx \testchar 7\let\next\@scannumber + \else\ifx \testchar 8\let\next\@scannumber + \else\ifx \testchar 9\let\next\@scannumber + \else\ifx \testchar \plugh \let\next\relax \global\@tempswatrue + \else \let\next\relax + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@gobbletillplugh} +% \changes{v1.1d}{2001/01/04}{Macro removed.} +% +% Macro |\@gobbletillplug| gobbles all input up to (and including) +% |\plugh| by defining |\def\@gobbletillplugh#1\plugh{}|. Since +% version 1.1d, |\@scannumber| is evaluated in a |\hbox| and the +% gobbling is no longer needed. +% \end{macro} +% +% +% \begin{macro}{\mb@addtocontents} +% \changes{v1.0d}{1999/08/19}{Add bibliography name to table of contents.} +% +% Some styles like \package{suthesis} or \komascript\ classes like +% \class{scrartcl} with option \option{bibtotoc} redefine +% |\bibliography| such that the heading of the bibliography appears +% in the table of contents. Entries for the table of contents are +% generated by writing the appropriate information to |\@auxout|. +% Because |\@auxout| is locally redefined when the bibliography is +% read, entries go to the wrong file. Therefore, a macro +% |\mb@addtocontents| is introduced which writes to |\temp@auxout|. +% Below, in the definition of the new |\bibliography|\meta{s}, +% |\mb@addtocontents| replaces the standard |\addtocontents|, and +% |\temp@auxout| is set to the default |\@auxout|. +% \begin{macrocode} +\long\def\mb@addtocontents#1#2{% + \protected@write\temp@auxout + {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}% + {\string\@writefile{#1}{#2}}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\bibname} +% \changes{v1.0h}{2000/01/10}{Changed to evoke \macrott{refname} instead.} +% \changes{v1.0j}{2000/01/13}{New implementation: Check if +% \macrott{bibname} is undefined +% instead of checking if class +% \class{book} or \class{report} is loaded.} +% \changes{v1.1e}{2001/01/04}{Macro removed.} +% +% Package~\package{multibib} redefines the headings of the new +% bibliographies using |\refname|. Some classes like \class{book} and +% \class{report} use |\bibname| instead of |\refname|. Instead of +% changing the definition of |\bibname|, we simply define +% |\refname| in the same was as |\bibname| in the |newcites| loop below. +% \end{macro} +% +% +% \begin{macro}{\@mb@citenamelist} +% \changes{v1.2b}{2003/09/22}{Macro added.} +% +% Define list of cite commands to be processed within the +% |\newcites| loop below. If already defined by other packages, +% |\relax|. +% \begin{macrocode} +\@ifundefined{@mb@citenamelist}% + {\def\@mb@citenamelist{cite,citep,citet,citealp,citealt}}% + {\relax} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{The \texttt{newcites} loop} +% +% \begin{macro}{\newcites} +% Loop over all headings in \meta{heading\_list}. The current +% heading is stored in |\@newrefname|, the corresponding suffix is +% stored in |\@suffix|. +% \begin{macrocode} +\def\newcites#1#2{% + \def\@suffixlist{#1,}% + \@for\@newrefname:=#2\do{% + \mylop\@suffixlist\to\@suffix +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@refname<s>} +% Define the reference title |\protected|, such that the title can +% contain control sequences as, e.g., in the title `\LaTeX\ +% References'. +% \begin{macrocode} + \expandafter\protected@edef\csname refname\@suffix\endcsname + {\@newrefname}% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@auxout<s>} +% \begin{macro}{\@auxout<s>name} +% \changes{v1.0c}{1999/08/19}{\macrott{makeatletter} when input new +% auxiliary files.} +% +% Define new write. Input the auxiliary file if it exists before +% opening it, to read the replacement text for the |\cite| commands +% which is generated by |\bibcite|. Because some styles (like +% \package{inlinebib.sty}) write command names containing an |@| to +% the auxiliary files, |\makeatletter| is locally set. +% \begin{macrocode} + \if@filesw + \expandafter\newwrite\csname @auxout\@suffix\endcsname + \expandafter\edef\csname @auxout\@suffix name\endcsname{\@suffix}% + \begingroup + \makeatletter + \@input@{\csname @auxout\@suffix name\endcsname .aux}% + \endgroup + \immediate\openout\csname @auxout\@suffix\endcsname + \csname @auxout\@suffix name\endcsname .aux + \fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Define new |\cite| and |\nocite|. For |\nocite|, we simple let +% |\@auxout| to the new auxiliary file. For |\cite|, this +% approach does not work because |\cite| can have an optional +% argument, so we cannot enclose the redefinition of |\@auxout| in +% braces. We slightly modify |\@citex| (see above) to use a special +% handle, |\@newciteauxhandle|, which is let to the new auxiliary file. +% +% \begin{macro}{\cite<s>} +% \changes{v1.2b}{2003/09/22}{Loop over \macrott{@mb@citenamelist} added.} +% +% For each \meta{citename} in |\@mb@citenamelist|, define +% \package{multibib}'s new \meta{citename}\meta{s} commands. For +% example, if \meta{citename} := |cite| and if \meta{s} := |own|, a command +% |\citeown| is defined as: +% \begin{verbatim} +% \def\citeown{% +% \let\@citex\mb@@citex +% \let\@newciteauxhandle\@auxoutown +% \cite} +% \end{verbatim} +% \begin{macrocode} + \@for\@citename:=\@mb@citenamelist\do{% + \expandafter\edef\csname \@citename\@suffix\endcsname{% + \let\noexpand\@citex\noexpand\mb@@citex + \let\noexpand\@newciteauxhandle\csname @auxout\@suffix\endcsname + \noexpand\csname\@citename\endcsname}% + }% +% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\nocite<s>} +% \changes{v1.2c}{2004/01/23}{\macrott{let} \macrott{@citex} +% \macrott{mb@@citex} removed.} +% +% Define new |\nocite|\meta{s}, e.g., if \meta{s} := |own|, a +% command |\nociteown| is defined as: +% \begin{verbatim} +% \def\nociteown##1{{% +% \let\@auxout\@auxoutown +% \nocite{##1}}} +% \end{verbatim} +% \begin{macrocode} + \expandafter\edef\csname nocite\@suffix\endcsname##1{{% + \let\noexpand\@auxout\csname @auxout\@suffix\endcsname + \noexpand\nocite{##1}}}% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\bibliography<s>} +% \changes{v1.0i}{2000/01/12}{Remove setting of \macrott{usecounter} and +% \macrott{newusecounter} which is done +% in redefined \macrott{bibliography}.} +% \changes{v1.1e}{2001/01/04}{Definition of \macrott{bibname} analogously +% to \macrott{refname}.} +% +% Define new |\bibliography|\meta{s} equivalents. +% The standard |\bibliography| macro does +% two things: The bibdata file is written to the auxiliary file +% |\@auxout| and the |.bbl| file |\jobname.bbl| is inputed. For +% |\bibliography|\meta{s}, we thus let both |\@auxout| +% and |\jobname| refer to the new auxiliary file \meta{s}|.aux|. +% Since some styles and classes write the heading +% of the bibliography to the table of contents, the old meaning of +% |\@auxout| is saved in |\temp@auxout| and |\addtocontents| is locally +% replaced by \package{multibib}s variant |\mb@addtocontents| +% (defined above) which writes to |\temp@auxout| instead of +% |\auxout|. Further, the heading of the bibliography generated by +% |\refname| or |\bibname| depending on the class is set to the +% particular heading of |\bibliography|\meta{s}. After this +% redefinitions, the standard |\bibliography| can be evoked. +% Extra braces are needed to encapsulate the various |\let|s. +% \begin{macrocode} + \expandafter\edef\csname bibliography\@suffix\endcsname##1{{% + \let\noexpand\temp@auxout\noexpand\@auxout + \let\noexpand\addtocontents\noexpand\mb@addtocontents + \let\noexpand\@auxout\csname @auxout\@suffix\endcsname + \let\noexpand\jobname + \expandafter\noexpand\csname @auxout\@suffix name\endcsname + \let\noexpand\refname + \expandafter\noexpand\csname refname\@suffix\endcsname + \let\noexpand\bibname + \expandafter\noexpand\csname refname\@suffix\endcsname + \noexpand\bibliography{##1}% + }} +% \end{macrocode} +% \end{macro} +% +% \newpage +% +% \begin{macro}{\bibliographystyle<s>} +% Define new |\bibliographystyle|\meta{s} equivalents. +% \begin{macrocode} + \expandafter\edef\csname bibliographystyle\@suffix\endcsname##1{{% + \let\noexpand\@auxout\csname @auxout\@suffix\endcsname + \noexpand\bibliographystyle{##1}}}% +% \end{macrocode} +% \end{macro} +% +% +% Close loop and end macro. +% \begin{macrocode} + }% +} +% \end{macrocode} +% +% +% Finally, restrict the use of |\newcites| to the preamble such that +% the auxiliary files can be |\@input@|ed. +% \begin{macrocode} +\@onlypreamble\newcites +% \end{macrocode} +% +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% \PrintIndex +% \PrintChanges +% \Finale +% diff --git a/Master/texmf-dist/source/latex/multibib/multibib.ins b/Master/texmf-dist/source/latex/multibib/multibib.ins new file mode 100644 index 00000000000..4b8f4970182 --- /dev/null +++ b/Master/texmf-dist/source/latex/multibib/multibib.ins @@ -0,0 +1,18 @@ +\input docstrip + +\generate{\file{multibib.sty}{\from{multibib.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{* `multibib.sty'} +\Msg{*} +\Msg{* To produce the documentation run the .dtx file through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} + + +\endbatchfile |