diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/natbib |
Initial commit
Diffstat (limited to 'macros/latex/contrib/natbib')
l--------- | macros/latex/contrib/natbib/README | 1 | ||||
-rw-r--r-- | macros/latex/contrib/natbib/README.1st | 36 | ||||
-rw-r--r-- | macros/latex/contrib/natbib/README.v831b | 506 | ||||
-rw-r--r-- | macros/latex/contrib/natbib/abbrvnat.bst | 1436 | ||||
-rw-r--r-- | macros/latex/contrib/natbib/bibentry.dtx | 554 | ||||
-rw-r--r-- | macros/latex/contrib/natbib/bibentry.ins | 79 | ||||
-rw-r--r-- | macros/latex/contrib/natbib/natbib.dtx | 5620 | ||||
-rw-r--r-- | macros/latex/contrib/natbib/natbib.ins | 87 | ||||
-rw-r--r-- | macros/latex/contrib/natbib/natbib.pdf | bin | 0 -> 292843 bytes | |||
-rw-r--r-- | macros/latex/contrib/natbib/natnotes.pdf | bin | 0 -> 156615 bytes | |||
-rw-r--r-- | macros/latex/contrib/natbib/plainnat.bst | 1436 | ||||
-rw-r--r-- | macros/latex/contrib/natbib/unsrtnat.bst | 1322 |
12 files changed, 11077 insertions, 0 deletions
diff --git a/macros/latex/contrib/natbib/README b/macros/latex/contrib/natbib/README new file mode 120000 index 0000000000..b9c2d82277 --- /dev/null +++ b/macros/latex/contrib/natbib/README @@ -0,0 +1 @@ +README.1st
\ No newline at end of file diff --git a/macros/latex/contrib/natbib/README.1st b/macros/latex/contrib/natbib/README.1st new file mode 100644 index 0000000000..1ea739ee85 --- /dev/null +++ b/macros/latex/contrib/natbib/README.1st @@ -0,0 +1,36 @@ + What is NATBIB? + +It is a LaTeX (2e, with some support for 2.09) package to act as generalized +interface for standard and non-standard bibliographic style files (BibTeX). + +It is intended primarily to produce author-year style citations from a variety +of non-standard .bst outputs; it therefore replaces the special and individual +packages that go along with such .bst files: + apalike.sty for apalike.bst et al. + newapa.sty newapa.bst, + chicago.sty chicago.bst, named.bst et al. + harvard.sty agsm.bst, dcu.bst, kluwer.bst et al. + astron.sty astron.bst, apa.bst, humanbio.bst, et al. + authordate<n>.sty authordate<n>.bst, aaai-named.bst + +The above .bst files may also be used with natbib to produce author-year or +numerical citations, so that switching from author-year to numerical is only +a matter of selecting an option. + +The standard .bst files (plain et al) and other numerical citation .bst files +are also understood, but they can produce only numerical citations. +Replacement .bst files + plainnat.bst + abbrvnat.bst + unsrtnat.bst +are provided to produce the same formatting of the reference list as the +standard equivalent, but allowing both author-year and numerical citations. + +See my parallel custom-bib system for generating customized bst files. + +For installation instructions and more details, see README.vxx. + +Patrick W. Daly +Max-Planck-Institut f\"ur Sonnensystemforschung +D-37191 Katlenburg-Lindau, Germany +E-mail: daly@mps.mpg.de diff --git a/macros/latex/contrib/natbib/README.v831b b/macros/latex/contrib/natbib/README.v831b new file mode 100644 index 0000000000..ce9a73af2e --- /dev/null +++ b/macros/latex/contrib/natbib/README.v831b @@ -0,0 +1,506 @@ + NATBIB Package +Current Version: 8.31b from 2010/09/13 + +See list of changes below + +This is the natbib package for handling both author-year and numerical +BibTeX styles. + +Manifest:- The natbib package contains the following files: +~~~~~~~~~~ + natbib.dtx -- Documented source file that may be LaTeXed to get the + detailed description and/or coding documentation. + + May be docstripped with option `package,all' to get the + natbib.sty package file, or processed with natbib.ins. + + natbib.ins -- A docstrip batch job to extract natbib.sty and natnotes.tex + from the source file natbib.dtx. + Simply TeX or LaTeX this file. + + This file is embedded in natbib.dtx. If it is missing, then LaTeXing + natbib.dtx will extract it. + + plainnat.bst -- Replacements for plain.bst, abbrv.bst, unsrt.bst, the + abbrvnat.bst standard BibTeX bib style files. These replacements + unsrtnat.bst permit both numerical and author-year citations + + bibentry.dtx -- Documented source file for the bibentry package, defines + \bibentry{key} command that places the bibliography entry + in the text. Useful for descriptive bibliographies. + + bibentry.ins -- The installation file for bibentry. Just TeX or LaTeX it. + +Generation:- Simply run TeX or LaTeX on natbib.ins, which extracts +~~~~~~~~~~~~ natbib.sty from the documented source natbib.dtx. If + natbib.ins has been lost, it may be regenerated by + running LaTeX on natbib.dtx. Natbib.ins also extracts + the reference sheet source file, natnotes.tex. + + For the bibentry package, TeX or LaTeX bibentry.ins, + which extracts bibentry.sty. + +Documentation:- Run LaTeX on natbib.dtx or natbib.ltx. The latter may be +~~~~~~~~~~~~~~~ edited as needed to conform to local requirements (paper + size, duplex or not, with or without entire coding). + Alternatively, a ltxdoc.cfg file can contain local + configurations. + + Similarly for bibentry: LaTeX the bibentry.dtx file. + +Reference Sheet:- Run LaTeX on natnotes.tex (extracted from natbib.dtx when +~~~~~~~~~~~~~~~~~ natbib.ins was processed). This is a 5 page summary of + the main natbib features. + + +The package will accept BibTeX output in the forms: + \bibitem{key} (standard numerical format) + +or the following author-year formats: + \bibitem[Jones et al.(1990)]{key}... (native natbib style) + \bibitem[Jones et al.(1990)Jones, Baker, and Williams]{key}... + (extended natbib 5.3 style) + + \bibitem[Jones et al., 1990]{key}... (apalike style) + \bibitem[\protect\citeauthoryear{Jones, Baker, and Williams}{Jones + et al.}{1990}]{key}... (newapa or chicago styles) + \bibitem[\protect\citeauthoryear{Jones et al.}{1990}]{key}... (named style) + \bibitem[\protect\astroncite{Jones et al.}{1990}]{key}... (astron style) + \bibitem[\protect\citename{Jones et al., }1990]{key}... (authordate style) + \harvarditem[Jones et al.]{Jones, Baker, and Williams}{1990}{key}... + (harvard style) + +These are all the existing interfaces for author-year format that I could +find. Natbib.sty accepts them all, and converts them into its own system. + +Use \citet for in-text form and \citep for parenthetical citations: + \citet{key} ==>> Jones et al. (1990) (in-text form) + \citep{key} ==>> (Jones et al., 1990) (parenthetical form) + + \citep{key1,key2} ==>> (Jones et al., 1990, 1992) + (multiple citations; common authors suppressed) + \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) + \citep[see][]{key} ==>> (see Jones et al., 1990) + \citep[see][chap. 2]{key} ==>> (see Jones et al., 1990, chap. 2) + +All \cite's may also take a starred version to print the full +author list, if that is supported by the bib style file. + \citet*{key} ==>> Jones, Baker, and Williams (1990) + +Other citing commands + \citeauthor{key} ==>> Jones et al. + \citeauthor*{key} ==>> Jones, Baker, and Williams + \citeyear{key} ==>> 1990 + \citeyearpar{key} ==>> (1990) + +With numerical citations, + \citep{key} ==>> [23] like standard \cite command + \citet{key} ==>> Jones et al. [23] + +For a name like von Braun or della Robbia, coming at the start of a sentence, +use \Citet for Von Braun and Della Robbia. Also \Citep, \Citeauthor exist. + +Citation aliasing, + \defcitealias{key}{text} + \citetalias{key} ==>> text + \citepalias{key} ==>> (text) +(With the hyperref package, these will be proper links to the reference list) + +Punctuation may be altered with \bibpunct command (see comments and + examples in natbib.sty and natbib.dtx) + +Or may be specified with options to the \usepackage{natbib} command. + +Punctuation styles may be set for given .bst file and then invoked by the +\bibliographystyle command. This requires making a simple (and legitimate) +addition to natbib.sty, or creating a local configuration file natbib.cfg to +contain the additions. + +For full details, print out the documentation in natbib.dtx by LaTeXing it. + +------------------------------------------------------------------------- +List of changes + v8.31b Another compatibility fix: \bibAnnote and \bibAnnoteFile are provided only + with merging, so they do not conflict with alternative definitions that are + sometimes found in certain BibTeX styles. + + v8.31a Bug fixes by Arthur Ogawa, so that the new eliding and merging features + do not cause problems with non-REVTeX classes. + + v8.31 Bug fix: the merging features of v8.3 are supposed to be turned off by default + but this was not completely right. With this bug fix, the behaviour without merging + is compatible the earlier versions (<= 8.1). + + v8.3 Incorporate the new features from Arthur Ogawa (non-released 8.2) so that they + do not conflict with regular natbib usage. + Improve compatibility with babel, in particular so that it works right with + active characters in the citation keys + Fix bug with multiple superscripted citations, to get spacings, comma right + Correct problem with chapterbib package + Adjust location of optional notes so they are always inside the parentheses + (as stated in the documentation) + + v8.2 (by Arthur Ogawa) + (This version was never publically released; these features first appear in V8.3) + + Introduce package option [merge], providing the functionality of Thorsten Ohl's + mcite package. See the user documentation for details. + + If an @Article reference is merged back with another, there exists the possibility + of eliding (typical in APS and AIP journals): if the author matches, then it is + elided, if the author matches and the journal does, too, then both are elided. + If the author does not match, but the journal matches, the latter is replaced + by \textit{ibid.}. It is possible to modify these eliding rules, customizing natbib + to your requirements. + + It is possible to change the merge, sort, and compress options even after the + package loads, and even after \begin{document}. + + When sorting citations, the sort is now stable. + + It is now possible to automatically add punctuation between citations, like the word `and'. + + Robustness has been improved when first adopting the natbib package and when + terminating its use (removing the \usepackage{natbib} statement). + + Compatability with other packages has been improved, particularly any that + want to know if \chapter has been defined. + + The \citation command is written to the .aux file with its arguments in the + same order as in the user's \cite command, that is, before sorting is done. + The old way had the effect of resisting the user's efforts to change the order + of citations if sorting was in effect. + + The cite key may have a star and two optional arguments preceding it, as in: + \cite{*[<pre-text>][<post-text>]key}, where <pre-text> is prepended to the reference, + producing something like ``See, e.g., Bumstead, D. (1945)...'', and where <post-text> + is appended to the reference, producing something like, + ``... p. 42, and references therein.'' The star (*) signifies that merging is to be done. + + Various implementation changes; see the package documentation for details. + + v8.1 Replace some \edef with \protected@edef, requested by users of preview package + + v8.0 Add \setcitestyle to simplify changing citation punctuation; is to replace + \bibpunct, which is retained for compatibility. + + Citation style commands (\setcitestyle, \citestyle, \bibpunct) are no longer + limited to the preamble; in particular they may be issued in different chapters + with the chapterbib package; even the author--year or numerical mode can + be switched and the bibliography is adjusted accordingly. (This has long + been requested by several users.) The docstrip option 'nopreonly' is therefore + removed, since it is now always active. + + Support for LaTeX 2.09 is removed; I no longer can test it and it only + complicates the source file. + + Package option 'colon' always meant putting a semi-colon between multiple + citations. This seems odd to me, but I probably thought 'semicolon' was + too long. I now have 'semicolon' to be explicit, but 'colon' is still + retained (as semi-colon). + + v7.5 (Never released, it is the preliminary 8.0) + Superscript citations: if braces specified, they are also superscripted + in both in-text and parenthetical citations. Any optional notes are + printed before and after as regular text. + + Add \citenum{key} to print the number, even in author-year mode. And + without superscripting and without parentheses. This is so + superscripted citations can be referred to in-text as regular numbers. + + In-text numerical citations with notes: the notes are now outside the parentheses + as this appears more logical. For parenthetical citations, notes are still + inside. + + The indexing of citations now has the default format Author [num] in numerical mode. + Previously it was Author [date] in both. + + v7.4a Fix bug in the compression option that occurs with hyperref and dvips. + + v7.4 Fix so nonamebreak option works with numerical citations too. + + v7.3 Go over the manual documentation and update it for 2006 rather than 1993. + No changes to code. + + v7.2 Allow numerical cite compression without sorting (option compress) + Hyperref package no longer suppresses compression + Compatibility with citeref package + Superscript citations may have braces, defined in \bibpunct + + v7.1 Add warning when multiple citations with common authors and year + are missing distinguishing extra letter. + + Modify plainnat.bst et al to include new fields: + doi (Digital Object Identifier) + eid (Electronic Identifier) + The eid is the article sequence number used in place of page numbers + for the print version of electronic journals, such as Phys. Rev. + + v7.0b Fix superscript bug + + v7.0a Fix bug in \citenumfont so it works with \textit as well as \it + Fix bug with the index.sty package which caused vertical shifts + under certain circumstances. + + v7.0 Fix bug with \bibpunct and all the predefined citation styles + that use it; blank was missing after post-note punctuation. + + Add \citenumfont and \bibnumfmt to format the citation numbers and + numbers in the reference list, respectively. + + Support for authorless works: replace the author in \bibitem with and + code and leave the date blank, as + \bibitem[ABC98()]{wxyz98} + Then \citet{wxyz98} ==>> ABC98 + \citep{wxyz98) ==>> (ABC98) + ie, not only is the date left off, but the punctuation and (for + \citet) the braces as well. + + Most author-year bst files insert the text of the KEY field in place + of the author if there is no author or editor. The (revised) natbib + bst's do this too, but also leave off the date. Thus the KEY text + becomes the replacement for author-year. + + \Citet, \Citep, \Citealp, \Citealt, \Citeauthor capitalize first + letter of first author's name in case it begins with von or de and + comes at the start of a sentence. + + With amsbook, now uses \chapter* instead of erroneous \section*. + + v6.9a Fix bugs with babel 3.6t (earlier versions of babel will not work + well with this natbib version). Order of loading is unimportant. + + Add \bibpreamble to allow user to define a preamble to the list of + references. + + Fix bug that occurred when optional notes to \cite's began with a + command like \S. + + v6.9 The \makeindex can be issued before \usepackage{natbib} + + Add \defcitealias, \citetalias, \citepalias to define and print + some identifying code text for the citation: + \defcitealias{key}{TEXT} then \citepalias{key} => (TEXT) + + The character coming between the citation and following note is + specified by the optional argument to \bibpunct; this must now + include a space if that is wanted. The default is now {, } where it + was previously {,}. + + Copyright notices in all files (even .bst's) conform to LaTeX Project + Public Licence. + + v6.8c Exclude notes, punctuation, both braces from the hyperref link text. + + Add nonamebreak option to prevent line breaks within author names. + + v6.8b Add chapterbib compatibility for hyperref and backref packages + (in arrangement with Sebastian Rahtz) + + With hyperref, links are broken between author name and date, to + prevent some possible pdftex problems. + + v6.8a Fix some problems with redefinition of \@biblabel + + v6.8 Allow user to be able to redefine \@biblabel for numerical mode + + Fix bug with hyperref package; previously failed with \citep and + multiple citations with repeated authors + + Allow cites within cites, as \citep[cited in \citealp{xx}]{yy} + (previously these clashed and final brace was missing) + + \citealp and \citealt suppress parenthese in numerical mode too + + Add \citetext{..} to produce citations manually, with help + of \citealp, such as + \citetext{see \citealp{AA}, or better \citealp{BB}} + + v6.7 Option `longnamesfirst' causes first citation of any reference to use + the full author list. + + In numerical mode, \citet with multiple citations suppresses + repeated authors, Jones et al. [21, 22]. + + A bug is fixed that caused problems with the showkeys package and + its `final' option. + + A clash with babel's active characters is fixed up. + + A reference sheet is available, consisting (mainly) of selected text + from the main documentation. Source file is natnotes.tex, extracted + from natbib.dtx with option `notes'. + + v6.6 Options `sort' and `sort&compress' order multiple citations in one + \citep or \citet command to be in the sequence in which they appear + in the list of references; this is normally ordered alphabetically + and then by year. + + Fix functionality with showkeys and hyperref packages + + Fix \nocite so that warning messages are not always printed with + chapterbib package + + All \cite... commands coded from a basic one so that they all have the + same syntax: notes and multiple citations always possible, but may not + always be meaningful. + + Add \citeyearpar to print year in parentheses; add \citeauthor* to + be equivalent to \citefullauthor. + + Package showkeys must be loaded after natbib (this is not an improvement, + but seems unavoidable). + + v6.5 Made compatible with KOMA scripts by adding \bib@heading to the + definition of thebibliography environment + + change documentation to stress \citet and \citep instead of old + syntax with \cite and \cite[]; now both these commands can also + take optional arguments for notes, before and after ref. + + v6.4 Made compatible with the chapterbib package of Donald Arseneau + which allows multiple bibliographies in one document + + Contains modified coding from Arseneau's cite package to allow + numerical citations to be sorted and compressed + + Made compatible with the hyperref package of Sebastian Rahtz and + Yannis Haralambous, for use with HyperTeX + + Multiple superscript citations have no space between them + + v6.3 The package `showkeys' used to have some problems when loaded + before natbib; this is now repaired + + The supplied .bst files have a bug fixed so that the extra letters + added to the dates function properly; they are now added when the + abbreviated author list and date are the same for more than one + reference (previously the full author list and date determined this, + which is incorrect) + + With numerical citations, the extra letters are superfluous; these can + now be suppressed with the supplied .bst files + + v6.2 Adds \citet for textual citations in both author-year and numerical + modes. + + Adds \bibsep as a length that goes between lines of the reference list + Can be changed with \setlength + + Fixes the superscript style of numerical references so that the + numbers are the proper (smaller) size + + Fixes a clash with the classes amsart and amsbook + + v6.1 The LaTeX update of December 1995 contains some changes to internal + command which natbib has used. Natbib needs to be altered accordingly. + In fact, it has been made far more robust against any such future + interal changes, although not 100%. + + There are no changes to the user interface. + + V6.0 New method for parsing the author and year parts, which is now done + before writing the information to the auxiliary file. This allows + numerical citations to be used even with author-year bst files. + (Numerical bst files can NEVER generate author-year citations!) + Now provide replacements for standard BibTeX bst files so that + they may be used for both numerical and author-year. + + Note: the bib style file provided in previous releases (natbib.bst) + is no longer provided, since it only meant to be an example. It is now + replaced by plainnat.bst and others. + + Citation styles (punctuation, brackets, etc) can be selected in + various ways: an improved priority system has now been introduced. + For example, any punctuation selection through an option to + \usepackage has priority over any prestored citation style. + + \bibpunct can now take a 7th optional argument (at the start of + the list) for the punctuation that comes before a post-note. + + It is possible to have all citations and entries in the list of + references automatically entered in an index, either with the standard + makeidx package or the contributed index package of David M. Jones. + + V5.5: some fixed bugs + + Many internal names have been changed to recommended style, ie with + the prefix \NAT@... For example, \@citebegin and \@citeend are + now \NAT@open and \NAT@close (these contain the opening and closing + brackets). + + Where possible, \def has been replaced by \(re)newcommand. + + Selection of citation format (numerical, superscript, author-year) is + coded better; previously, if numerical were ever selected, it was + impossible to switch back to author-year. + +** As a result: ALL CITATION CUSTOMIZATIONS (\bibpunct, \citestyle) MUST +** BE ISSUED BEFORE \begin{document}!!!!! This differs from the +** situation in earlier versions, but is in fact much more logical. + + Add \citep{key} and \citep*{key} as shorthands for + \cite[]{key} and \cite*[]{key}, ie for parenthetical citations + (this was requested) + + Add \citealt{key} and \citealt*{key} that function like \cite{key} and + \cite*{key}, but without brackets. These are textual citations of + the form Jones et al. 1990. (Also a requested feature.) + + The amount of hanging indentation in the list of references can be + redefined via the length command \bibhang. Change with e.g. + \setlength{\bibhang}{2em} %Default is 1em + + V5.4: a few bugs fixed + + add superscript citation style to \bibpunct, as `s' (in place of + `n' for numerical or `a' for author-year; improve superscript coding + + add \citestyle command to be able to invoke a preprogrammed citation + style that is different from that given in \bibliographystyle + + for (Jones et al, 1994a; Jones et al, 1994b) print instead + (Jones et al, 1994a,b) + [up until now, it would have printed (Jones et al, 1994a, 1994b) ] + + V5.3: support the new release of harvard.sty, so that natbib will work with + those bib styles that are designed for it (agms,dcu,kluwer) This means + adding \harvardand, \harvardurl, and some others + + provide \citefullauthor to list all authors for those bib styles that + support this: harvard, chicago + + extend the native format of \bibitem to support full author citations + too; add starred form of \cite to print full author list, if present. + + fix up a bug that caused accents in citations (not references) to be + ignored. + + + V5.2: \citeauthor and \citeyear make auxiliary file entries so BibTeX + can see them; also, any font changes in the author (like {\it Smith}) + will be localized (in 5.0, the brackets were removed, so all following + text was italicized.) + + Internal definition of \cite made to be like that of LaTeX2e, so that + multiple citations may have spaces after commas, as \cite{a, b, c} + + A local configuration file natbib.cfg will be read in (2e only) that + may contain local \bibstyle@xxx commands. + + V5.1: pure LaTeX2e, not mixed as v5.0 was. Fixes up problems of font + commands in the citation labels (like {\em et al.} that caused + terrible problems and had a poor ad hoc solution. + +Changes from previous (4.x) versions: + \cite now takes two optional arguments for text before and after citation + \citeyear and \citeauthor have been added + Under LaTeX2e, punctuation can be selected with options in \usepackage + +------------------------------------------------------------------------- +2010 Sep 13 +Patrick W. Daly +Max-Planck-Institut f\"ur Sonnensystemforschung +(Max Planck Institute for Solar System Research) +D-37191 Katlenburg-Lindau, Germany +E-mail: daly@mps.mpg.de diff --git a/macros/latex/contrib/natbib/abbrvnat.bst b/macros/latex/contrib/natbib/abbrvnat.bst new file mode 100644 index 0000000000..6109cb7481 --- /dev/null +++ b/macros/latex/contrib/natbib/abbrvnat.bst @@ -0,0 +1,1436 @@ +%% File: `abbrvnat.bst' +%% A modification of `abbrv.bst' for use with natbib package +%% +%% Copyright 1993-2007 Patrick W Daly +%% Max-Planck-Institut f\"ur Sonnensystemforschung +%% Max-Planck-Str. 2 +%% D-37191 Katlenburg-Lindau +%% Germany +%% E-mail: daly@mps.mpg.de +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt; either +%% version 1 of the License, or any later version. +%% + % Version and source file information: + % \ProvidesFile{natbst.mbs}[2007/11/26 1.93 (PWD)] + % + % BibTeX `plainnat' family + % version 0.99b for BibTeX versions 0.99a or later, + % for LaTeX versions 2.09 and 2e. + % + % For use with the `natbib.sty' package; emulates the corresponding + % member of the `plain' family, but with author-year citations. + % + % With version 6.0 of `natbib.sty', it may also be used for numerical + % citations, while retaining the commands \citeauthor, \citefullauthor, + % and \citeyear to print the corresponding information. + % + % For version 7.0 of `natbib.sty', the KEY field replaces missing + % authors/editors, and the date is left blank in \bibitem. + % + % Includes field EID for the sequence/citation number of electronic journals + % which is used instead of page numbers. + % + % Includes fields ISBN and ISSN. + % + % Includes field URL for Internet addresses. + % + % Includes field DOI for Digital Object Idenfifiers. + % + % Works best with the url.sty package of Donald Arseneau. + % + % Works with identical authors and year are further sorted by + % citation key, to preserve any natural sequence. + % +ENTRY + { address + author + booktitle + chapter + doi + eid + edition + editor + howpublished + institution + isbn + issn + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + volume + year + } + {} + { label extra.label sort.label short.list } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +FUNCTION {format.isbn} +{ isbn empty$ + { "" } + { new.block "ISBN " isbn * } + if$ +} + +FUNCTION {format.issn} +{ issn empty$ + { "" } + { new.block "ISSN " issn * } + if$ +} + +FUNCTION {format.url} +{ url empty$ + { "" } + { new.block "URL \url{" url * "}" * } + if$ +} + +FUNCTION {format.doi} +{ doi empty$ + { "" } + { new.block "\doi{" doi * "}" * } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ } + if$ +} + +FUNCTION {format.full.names} +{'s := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}" format.name$ 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.full} +{ author empty$ + { editor empty$ + { "" } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.full} +{ author empty$ + { "" } + { author format.full.names } + if$ +} + +FUNCTION {editor.full} +{ editor empty$ + { "" } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.full + { type$ "proceedings" = + 'editor.full + 'author.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year duplicate$ empty$ + { "empty year in " cite$ * warning$ + pop$ "" } + 'skip$ + if$ + month empty$ + 'skip$ + { month + " " * swap$ * + } + if$ + extra.label * +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.eid} +{ eid empty$ + { "" } + { "art." eid tie.or.space.connect } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "\penalty0 (" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":\penalty0 " * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.vol.num.eid} +{ volume field.or.null + number empty$ + 'skip$ + { "\penalty0 (" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + eid empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.eid } + { ":\penalty0 " * eid * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { "In \emph{" journal * "}" * } + if$ + } + { "In " } + if$ + " \citet{" * crossref * "}" * +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + "In " + } + { "Volume" volume tie.or.space.connect + " of " * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { "\emph{" * series * "}" * } + if$ + } + 'skip$ + if$ + } + 'skip$ + if$ + " \citet{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { "In \emph{" booktitle * "}" * } + if$ + } + { "In " } + if$ + } + { "In " } + if$ + " \citet{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + eid empty$ + { format.vol.num.pages output } + { format.vol.num.eid output } + if$ + format.date "year" output.check + } + { format.article.crossref output.nonnull + eid empty$ + { format.pages output } + { format.eid output } + if$ + } + if$ + format.issn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + new.block + format.title "title" output.check + howpublished address new.block.checkb + howpublished output + address output + format.date output + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + new.block + format.btitle "title" output.check + organization address new.block.checkb + organization output + address output + format.edition output + format.date output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + format.url output + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished output + format.date output + format.issn output + format.url output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + format.url output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address output + format.date "year" output.check + new.sentence + organization output + publisher output + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + format.url output + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + note "note" output.check + format.date output + format.url output + fin.entry +} + +FUNCTION {default.type} { misc } + + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sept."} + +MACRO {oct} {"Oct."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dec."} + + + +MACRO {acmcs} {"ACM Comput. Surv."} + +MACRO {acta} {"Acta Inf."} + +MACRO {cacm} {"Commun. ACM"} + +MACRO {ibmjrd} {"IBM J. Res. Dev."} + +MACRO {ibmsj} {"IBM Syst.~J."} + +MACRO {ieeese} {"IEEE Trans. Softw. Eng."} + +MACRO {ieeetc} {"IEEE Trans. Comput."} + +MACRO {ieeetcad} + {"IEEE Trans. Comput.-Aided Design Integrated Circuits"} + +MACRO {ipl} {"Inf. Process. Lett."} + +MACRO {jacm} {"J.~ACM"} + +MACRO {jcss} {"J.~Comput. Syst. Sci."} + +MACRO {scp} {"Sci. Comput. Programming"} + +MACRO {sicomp} {"SIAM J. Comput."} + +MACRO {tocs} {"ACM Trans. Comput. Syst."} + +MACRO {tods} {"ACM Trans. Database Syst."} + +MACRO {tog} {"ACM Trans. Gr."} + +MACRO {toms} {"ACM Trans. Math. Softw."} + +MACRO {toois} {"ACM Trans. Office Inf. Syst."} + +MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."} + +MACRO {tcs} {"Theoretical Comput. Sci."} + + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.key.organization.label} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.organization.label} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.organization.label + { type$ "manual" = + 'author.key.organization.label + 'author.key.label + if$ + } + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { + s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { numnames #2 > nameptr #2 = and + { "zz" * year field.or.null * " " * } + 'skip$ + if$ + t sortify * + } + if$ + } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + + +FUNCTION {presort} +{ calc.label + label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + " " + * + year field.or.null sortify + * + " " + * + cite$ + * + #1 entry.max$ substring$ + 'sort.label := + sort.label * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label last.label next.extra } + +INTEGERS { longest.label.width last.extra.num number.label } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := + #0 'number.label := +} + +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {bib.sort.order} +{ sort.label 'sort.key$ := +} + +ITERATE {bib.sort.order} + +SORT + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\providecommand{\natexlab}[1]{#1}" + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\expandafter\ifx\csname urlstyle\endcsname\relax" + write$ newline$ + " \providecommand{\doi}[1]{doi: #1}\else" + write$ newline$ + " \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi" + write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/macros/latex/contrib/natbib/bibentry.dtx b/macros/latex/contrib/natbib/bibentry.dtx new file mode 100644 index 0000000000..cbf396d4b6 --- /dev/null +++ b/macros/latex/contrib/natbib/bibentry.dtx @@ -0,0 +1,554 @@ +% \iffalse THIS IS A META-COMMENT +%<*dtx> +\ProvidesFile +%======================================================================== + {BIBENTRY.DTX} +%======================================================================== +%</dtx> +%% Copyright 1997-2007 Patrick W Daly +%% Max-Planck-Institut f\"ur Sonnensystemforschung +%% Max-Planck-Str. 2 +%% D-37191 Katlenburg-Lindau +%% Germany +%% E-mail: daly@mps.mpg.de +% +% This program can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% +% This is a contributed file to the LaTeX2e system. +% ------------------------------------------------- +% This is a LaTeX package to all bibliography entries to be placed +% anywhere in text. +% Installation: +% LaTeX this file: creates docstrip installation file bibentry.ins +% AND the LaTeX documentation +% (La)TeX bibentry.ins: creates package file bibentry.sty, and optionally +% the documentation driver bibentry.drv +% (bibentry.ins and bibentry.drv may be edited as needed) +% Docstrip options available: +% package - to produce a (LaTeX2e) package .sty file +% driver - to produce a driver file to print the documentation +%-------------------------------------------------------------------------- +% *** Identify the package file:- +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{bibentry} +% +% *** Identify the driver file:- +%<driver>\NeedsTeXFormat{LaTeX2e} +%<driver>\ProvidesFile{bibentry.drv} +% +% *** The DATE, VERSION, and other INFO +%\fi +%\ProvidesFile{bibentry} + [2007/10/30 1.5 (PWD)] +% \changes{1.0}{1997 Jun 13}{Initial version} +% \changes{1.1}{1997 Nov 11}{Refine for use with \cs{bibliography}} +% \changes{1.1a}{1998 Mar 2}{Fix bug by using \cs{ifx} instead of \cs{if}} +% \changes{1.2}{1999 Feb 23}{Update copyright notice} +% \changes{1.3}{1999 Aug 26}{Works with \texttt{url} package} +% \changes{1.4}{2000 Jun 20}{Add \texttt{hyperref} compatibility} +% \changes{1.5}{2007 Oct 30}{Add \cs{doi} definition} +% +% \CheckSum{135} +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \iffalse +%<*install> +%^^A ============================================= +%^^A Here is the docstrip installation file +%^^A It is written on first LaTeX run if it +%^^A does not already exist +%^^A ============================================= +\begin{filecontents*}{bibentry.ins} +% File: bibentry.ins +% Copyright 1999,2000 Patrick W. Daly +% +% This file can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% +% It is an installation file for extracting package and driver +% files from the original source file. Simply process it under +% TeX or LaTeX. It works with Docstrip versions before and after +% December 1995. + +\def\batchfile{bibentry.ins} +\input docstrip + +\preamble +============================================= +IMPORTANT NOTICE: + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1 of the License, or any later version. + +This is a generated file. +It may not be distributed without the original source file \inFileName. + +Full documentation can be obtained by LaTeXing that original file. +Only a few abbreviated comments remain here to describe the usage. +============================================= +\endpreamble +\postamble + +<<<<< End of generated file <<<<<< +\endpostamble +\keepsilent + +% Docstrip before Dec 95 does not have \generate syntax, nor +% \declarepreamble. Must redefine them. The \generateFile called +% for each output file individually. +% Docstrip before Dec 96 cannot interprete multiline \if..\fi +% Thus for maximum compatibility, have only one-line conditionals + +\let\oldDS F\relax +\expandafter\ifx\csname generate\endcsname\relax \let\oldDS T\relax\fi +\if\oldDS T \def\declarepreamble#1{\preamble}\fi +\if\oldDS T \def\declarepostamble#1{\postamble}\fi +\if\oldDS T \generateFile{bibentry.sty}{f}{\from{bibentry.dtx}{package}} \fi + +\declarepreamble\driver +============================================ +This is the driver file to produce the LaTeX documentation +from the original source file \inFileName. + +Make changes to it as needed. (Never change the file \inFileName!) +============================================ +\endpreamble + +\declarepostamble\driverq + +End of documentation driver file. +\endpostamble + +\ifx\oldDS T \generateFile{bibentry.drv}{f}{\from{bibentry.dtx}{driver}}\fi + +\ifx\oldDS T \let\askforoverwritefalse\relax\def\generate#1{}\fi + +\askforoverwritefalse +\generate{\file{bibentry.sty}{\from{bibentry.dtx}{package}} + \file{bibentry.drv}{\usepreamble\driver\usepostamble\driverq + \from{bibentry.dtx}{driver}} + } + +\obeyspaces +\Msg{*******************************************}% +\Msg{* For documentation, process bibentry.dtx *}% +\Msg{* or the driver file bibentry.drv *}% +\Msg{*******************************************} +\end{filecontents*} +%</install> +%<*driver> +\documentclass{ltxdoc} +%<driver>%\documentclass[twoside]{ltxdoc} +%<driver>%\documentclass[a4paper]{ltxdoc} +%<driver>%\documentclass[twoside,a4paper]{ltxdoc} +\raggedbottom + + %** To include the detailed explanation of the coding, comment out + %** the next line +\OnlyDescription + + %** To produce a command index: add the following line for one run, + %** then run makeindex -s gind.ist bibentry + %** and reprocess, with or without this line (much faster without) +%<driver>% \EnableCrossrefs\CodelineIndex + + %** To produce a change history: add the following line for one run, + %** then run makeindex -s gglo.ist -o bibentry.gls bibentry.glo + %** and reprocess, with or without this line (faster without) +%<driver>% \RecordChanges + +\DisableCrossrefs %May stay; zapped by \EnableCrossrefs +\CodelineNumbered %May stay + +\begin{document} + \DocInput{bibentry.dtx} +\end{document} +%</driver> +%\fi +% +% \DoNotIndex{\begin,\CodelineIndex,\CodelineNumbered,\def,\DisableCrossrefs} +% \DoNotIndex{\DocInput,\documentclass,\EnableCrossrefs,\end,\GetFileInfo} +% \DoNotIndex{\NeedsTeXFormat,\OnlyDescription,\RecordChanges,\usepackage} +% \DoNotIndex{\ProvidesClass,\ProvidesPackage,\ProvidesFile,\RequirePackage} +% \DoNotIndex{\filename,\fileversion,\filedate,\let} +% \DoNotIndex{\@listctr,\@nameuse,\csname,\else,\endcsname,\expandafter} +% \DoNotIndex{\gdef,\global,\if,\item,\newcommand,\nobibliography} +% \DoNotIndex{\par,\providecommand,\relax,\renewcommand,\renewenvironment} +% \DoNotIndex{\stepcounter,\usecounter,\nocite,\fi} +% \DoNotIndex{\@fileswfalse,\@gobble,\@ifstar,\@unexpandable@protect} +% \DoNotIndex{\AtBeginDocument,\AtEndDocument,\begingroup,\endgroup} +% \DoNotIndex{\frenchspacing,\MessageBreak,\newif,\PackageWarningNoLine} +% \DoNotIndex{\protect,\string,\xdef,\ifx,\texttt,\@biblabel,\bibitem} +% +% \setcounter{IndexColumns}{2} +% \setlength{\IndexMin}{10cm} +% \setcounter{StandardModuleDepth}{1} +% +% \GetFileInfo{bibentry} +% +% \title{\bfseries A \LaTeX\ Package to Place Bibliography Entries in Text} +% +% \author{Patrick W. Daly} +% +% \date{This paper describes package \texttt{\filename}\\ +% version \fileversion{} from \filedate +% } +% +% \maketitle +% +% \pagestyle{myheadings} +% \markboth{P. W. Daly}{Bibliography Entries in Text} +% +%^^A In order to keep all marginal notes on the one (left) side: +%^^A (otherwise they switch sides disasterously with twoside option) +% \makeatletter \@mparswitchfalse \makeatother +% +%\begin{small}\begin{center}\textbf{Summary}\end{center} +% The stripped version of this file contains the following brief description: +%\iffalse +%<*package> +%\fi +% \begin{verbatim} + % Bibliography Entries in Text + % + % In place of \bibliography{database}, enter \nobibliography{database} + % No bibliography is written at this point, but afterwards, + % \bibentry{key} prints the bibliography entry for citation <key> + % (whereas \cite{key} prints the citation, not the bib entry) + % + % If \bibliography is also to be given, then issue the starred variant + % \nobibliography* (without argument). +% \end{verbatim} +%\iffalse + %----------------------------------------------------------- + % See documentation in the source .dtx file for more details. +%</package> +%\fi +%\end{small} +% +% \section{Introduction} +% This package allows one to be able to place bibliographic entries anywhere +% in the text. It is to be used to produce annotated bibliographies, such as +% \begin{quote} +% For an intoduction to this topic, see Jones, J.~R., Basics on this topic, +% {\it J.\ Last Resorts}, \textbf{13}, 234--254, 1994. For more advanced +% information, see \dots. +% \end{quote} +% +% The idea is that the full reference is used, not just the citation Jones +% [1994]. +% +% \section{Invoking the Package} +% The macros in this package are included in the main document +% with the |\usepackage| command of \LaTeXe, +% \begin{quote} +% |\documentclass[..]{...}|\\ +% |\usepackage{|\texttt{\filename}|}| +% \end{quote} +% +% \section{Usage} +% +% \newcommand\btx{\textsc{Bib}\TeX} +% This package must be used with \btx, not with a hand-written +% \texttt{thebibliography} environment. +% +% More precisely, there must be a \texttt{.bbl} file external to the \LaTeX\ +% file; whether this is written by hand or by \btx\ is unimportant. +% +% \DescribeMacro{\nobibliography} +% The bibliography entries are stored with the command +% |\nobibliography|\marg{bibfiles}, which is like the usual +% |\bibliography|\marg{bibfiles} except no bibliography is printed. The +% \texttt{.bbl} file is read in as usual but the \texttt{thebibliography} is +% redefined so that all the entries are stored, not printed. +% +% \DescribeMacro{\bibentry} +% The text of the entries may be printed with the command +% \begin{quote} +% |\bibentry|\marg{key} +% \end{quote} +% These commands may only be issued after |\nobibliography|, for otherwise +% the reference texts are not known. +% +% The final period of the original text will be missing, so that one can add +% punctuation as one pleases. +% +% Regular |\cite| (or the \texttt{natbib} versions) may be issued anywhere as +% usual. +% +% \DescribeMacro{\nobibliography*} +% If a regular list of references is to be given too, with the +% |\bibliography|\marg{bibfiles} command, issue the starred version +% |\nobibliography*| (without argument) in order to store the bib entry texts. +% This will load the same \texttt{.bbl} file as |\bibliography|, but will avoid +% messages from \btx\ about multiple |\bibdata| commands and warnings from +% \LaTeX\ about multiply defined citations. +% +% The processing procedure is as usual: +% \begin{enumerate} +% \item \LaTeX\ the file; +% \item Run \btx; +% \item \LaTeX\ the file twice. +% \end{enumerate} +% +% \noindent +% \textbf{Note:} it is highly recommended to make use of the \texttt{url} +% package, which will nicely format both url and doi addresses; in particular, +% they will break at convenient locations without a hyphen. +% +% \section{Caveats} +% +% The entries in the \texttt{.bbl} must be of the form +% \begin{quote} +% |\bibitem|\oarg{label}\marg{key}\\ +% \emph{Text of the reference entry.}\\[1ex] +% |\bibitem|\dots +% \end{quote} +% That is, there must be a new line after the \marg{key} (or at least a space) +% and a blank line before the next |\bibitem|. The final period in the text +% will be removed, if present, allowing one to place the |\bibentry| commands +% in mid-sentence. Of course, there may be other periods within the text that +% might look funny. +% +% The \texttt{\filename} package will work with \texttt{natbib} with its +% native |\bibitem| format, and with standard \LaTeX. Nothing else can be +% guaranteed. +% +% It will also work with Donald Arseneau's \texttt{url} package. This is +% highly recommended (almost obligatory) if the references contain Internet +% addresses (URLs) and any of my bibliography styles are being used. My styles +% pack the URL text into the |\url| command. Without the \texttt{url} package, +% this command defaults to |\texttt| which does a horrible job of printing URL +% addresses, especially if they contain special characters. +% +% The use of both |\nobibliography*| and |\bibliography| together is limited and +% perhaps unsatisfactory. There is only one \texttt{.bbl} file, and hence one +% list of references. Since |\nobibliography*| does not have its own list of +% database files, one cannot take the |\bibentry| citations from separate +% databases. Also, any |\bibentry| citation must appear in the list of +% references, something that one might reasonably not care for. (It must be +% in the \texttt{.bbl} file else its text cannot be stored for |\bibentry| +% use.) +% +% It would be better if |\nobibliography| and |\bibliography| could be used +% independently of each other, with different databases, different +% \texttt{.bbl} files. However, this involves enormous complications, with +% separate \texttt{.aux} files and naming problems for the \texttt{.bbl}s. +% +% \StopEventually{\PrintIndex\PrintChanges} +% +% \section{Options with \texttt{docstrip}} +% The source \texttt{.dtx} file is meant to be processed with +% \texttt{docstrip}, for which a number of options are available: +% \begin{description} +% \item[\ttfamily package] to produce a \texttt{.sty} package file with most +% comments removed; +% +% \item[\ttfamily driver] to produce a driver \texttt{.drv} file that will +% print out the documentation under \LaTeXe. The documentation cannot +% be printed under \LaTeX~2.09. +% +% \end{description} +% The source file \texttt{\filename.dtx} is itself a driver file and can +% be processed directly by \LaTeXe. +% +% \section{The Coding} +% This section presents and explains the actual coding of the macros. +% It is nested between |%<*package>| and |%</package>|, which +% are indicators to \texttt{docstrip} that this coding belongs to the package +% file. +% +% \begin{macro}{\nobibliography} +% \changes{1.1}{1997 Nov 11}{Add starred version; make changes local} +% The |\nobibliography| is used just as |\bibliography|; it locally redefines +% the \texttt{thebibliography} environment to do nothing, while |\bibitem| is +% redefined to save the ensuring entry text. Then |\bibliography| is called to +% input the |\jobname.bbl| file. +% +% The business with the counters is just for standard \LaTeX; \texttt{natbib} +% does not need it. +% +% The starred form is to be used when a true |\bibliography| command is also +% given. Thus we want to prevent writing duplicate |\bibdata| and |\bibcite| +% commands to the auxiliary file. Setting the |\ifBR@star| flag accomplishes +% this by turning off |\if@filesw| and |\BR@bibitem|. +% \begin{macrocode} +%<*package> +\newif\ifBR@star +\newcommand\nobibliography{\@ifstar{\BR@nobib{}}{\BR@nobib}} +\newcommand\BR@nobib[1]{% + \ifx\relax#1\relax\global\BR@startrue\else\global\BR@starfalse\fi + \begingroup + \ifBR@star\@fileswfalse\fi + \renewenvironment{thebibliography}[1]{% + \usecounter{enumiv}% + \renewcommand\item[1][]{% + \ifx\relax####1\relax\stepcounter\@listctr\fi}% + \ifBR@star \newcommand\BR@bibitem[2][]{}\else + \let\BR@bibitem=\bibitem\fi + \let\bibitem=\BR@b@bibitem}{}% + \let\@biblabel\@gobble + \bibliography{#1}\endgroup + \ifx\relax#1\relax\global\BR@startrue\else\global\BR@starfalse\fi} +% \end{macrocode} +% Note: |\BR@star| must be set once again at the end since |\bibliography| +% always sets it to \meta{false}. +% \end{macro} +% +% \begin{macro}{\BR@b@bibitem} +% The new |\bibitem|; test for optional argument, call the old |\bibitem| +% (stored as |\BR@bibitem|) and then call the macro to store the remaining +% text. The old |\bibitem| must be called so the |\cite| can work. +% +% In the case of the starred |\nobibliography|, |\BR@bibitem| is not the old +% |\bibitem|, but one that throws away its arguments. This prevents an entry +% being made to the auxiliary file, an entry that is made by the real +% |\bibliography| command. +% \begin{macrocode} +\newcommand\BR@b@bibitem[2][]{\ifx\relax#1\relax\BR@bibitem{#2}% + \else \BR@bibitem[#1]{#2}\fi \BR@c@bibitem{#2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BR@c@bibitem} +% \changes{1.1}{1997 Nov 11}{Remove need for reference to end with period} +% This macro stores all the text that follows up to ``space newpar'', removing a +% final period if present. It is assumed that a new line ($\equiv$space) comes +% between the |\bibitem| \marg{key} and the text, and that a blank line +% ($\equiv$|\par|) comes between references. These conditions are generally met +% by all bibliography styles. +% +% \changes{1.3}{1999 Aug 26}{Store with \cs{gdef} instead of \cs{xdef}} +% Originally I used |\xdef| to store the text, but this causes problems with +% the |\url| command of the \texttt{url} package. The simplest solution is to +% use |\gdef| instead so that |\url| is executed when the text is printed, +% not when it is stored. +% \begin{macrocode} +\def\BR@c@bibitem#1 #2 \par{{\let\protect\@unexpandable@protect + \expandafter \gdef\csname BR@r@#1\@extra@b@citeb\endcsname + {\BR@nodot#2\relax.\relax\relax}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BR@nodot} +% \changes{1.1}{1997 Nov 11}{Add macro} +% To remove a possible final period. This macro always adds a terminal +% |\relax|. +% \begin{macrocode} +\def\BR@nodot#1.\relax#2\relax{#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bibentry} +% \changes{1.4}{2000 Jun 20}{Add \texttt{hyperref} commands} +% The macro that prints the stored text. It also calls |\nocite| in order +% that the reference be entered in the \texttt{.aux} file for \btx\ +% processing. +% \begin{macrocode} +\newcommand\bibentry[1]{\nocite{#1}{\frenchspacing + \hyper@natanchorstart{#1\@extra@b@citeb}% + \@nameuse{BR@r@#1\@extra@b@citeb}\hyper@natanchorend}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@extra@b@citeb} +% This macro is provided to work with the \texttt{chapterbib} package. +% \begin{macrocode} +\providecommand\@extra@b@citeb{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hyper@natanchorstart} +% \changes{1.4}{2000 Jun 20}{Add default definition} +% \begin{macro}{\hyper@natanchorend} +% \changes{1.4}{2000 Jun 20}{Add default definition} +% Provide dummy definitions for when \texttt{hyperref} package not present. +% \begin{macrocode} +\providecommand\hyper@natanchorstart[1]{} +\providecommand\hyper@natanchorend{} +% \end{macrocode} +% \end{macro}\end{macro} +% \begin{macro}{\urlprefix} +% \changes{1.3}{1999 Aug 26}{Add macro} +% \begin{macro}{\url} +% \changes{1.3}{1999 Aug 26}{Add macro} +% My \texttt{bst} files that support URL addresses make use of commands +% |\url| and |\urlprefix|, which are given default definitions in the +% \texttt{bbl} file. However, these definitions are local to the +% \texttt{thebibliography} environment. Since the bibliography text is stored +% unexpanded (|\gdef| instead of |\xdef|) these default definitions are lost +% when the text is printed. Thus they must be provided in this package as well. +% +% Define |\url| after the preamble in case \texttt{url} is loaded +% after \texttt{\filename}. +% \begin{macrocode} +\AtBeginDocument{% + \providecommand*{\urlprefix}{URL } + \providecommand*{\url}[1]{\texttt{#1}} +} +% \end{macrocode} +% Note: it is highly recommended always to use the \texttt{url} package; this +% default for |\url| will not allow line breaks within the URL text and any +% special characters like |$ _ #| will create serious problems. +% \end{macro}\end{macro} +% +% \begin{macro}{bibliography} +% \changes{1.1}{1997 Nov 11}{Add warning for missing \cs{bibliography}} +% \changes{1.3}{1999 Aug 26}{Set flag via \cs{bibliography} +% not \cs{thebibliography}} +% Finally, test at the end of the document if |\nobibliography*| was used +% without a following |\bibliography| and issue a warning. Is this useful? +% Strictly speaking, the order could be interchanged and then a warning would +% be erroneously given. Or, one could produce the \texttt{.bbl} file and then +% remove the |\bibliography| command, and the |\bibentry| commands will still +% function. (Hence the warning is only that \btx\ will not process, not the +% |\bibentry| will not work.) Will there be problems with \texttt{chapterbib}? +% +% For all these reasons, this warning could be questionable. Keep it for now +% anyway. +% \begin{macrocode} +\AtBeginDocument{\let\BR@bib\bibliography + \def\bibliography{\global\BR@starfalse\BR@bib}} +\AtEndDocument{\ifBR@star\PackageWarningNoLine{bibentry} + {You have used \string\nobibliography* \MessageBreak + without a following \string\bibliography.\MessageBreak + You may not be able to run BibTeX}\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doi} +% \changes{1.5}{2007 Oct 30}{Add macro} +% The |\doi| command is used in the modern \texttt{.bst} files, and is in fact +% defined inside the |thebibliography| environment for these styles. However, +% that means, it is undefined outside where |\bibentry| is used. So it is +% necessary to provide a definition globally. +% \begin{macrocode} +\AtBeginDocument{\@ifpackageloaded{url} + {\providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}} + {\providecommand{\doi}[1]{doi: #1}}} +%</package> +% \end{macrocode} +% \end{macro} +% +% \Finale diff --git a/macros/latex/contrib/natbib/bibentry.ins b/macros/latex/contrib/natbib/bibentry.ins new file mode 100644 index 0000000000..8ee08ebeb0 --- /dev/null +++ b/macros/latex/contrib/natbib/bibentry.ins @@ -0,0 +1,79 @@ +% File: bibentry.ins +% Copyright 1999 Patrick W. Daly +% +% This file can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% +% It is an installation file for extracting package and driver +% files from the original source file. Simply process it under +% TeX or LaTeX. It works with Docstrip versions before and after +% December 1995. + +\def\batchfile{bibentry.ins} +\input docstrip + +\preamble +============================================= +IMPORTANT NOTICE: + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1 of the License, or any later version. + +This is a generated file. +It may not be distributed without the original source file \inFileName. + +Full documentation can be obtained by LaTeXing that original file. +Only a few abbreviated comments remain here to describe the usage. +============================================= +\endpreamble +\postamble + +<<<<< End of generated file <<<<<< +\endpostamble +\keepsilent + +% Docstrip before Dec 95 does not have \generate syntax, nor +% \declarepreamble. Must redefine them. The \generateFile called +% for each output file individually. +% Docstrip before Dec 96 cannot interprete multiline \if..\fi +% Thus for maximum compatibility, have only one-line conditionals + +\let\oldDS F\relax +\expandafter\ifx\csname generate\endcsname\relax \let\oldDS T\relax\fi +\if\oldDS T \def\declarepreamble#1{\preamble}\fi +\if\oldDS T \def\declarepostamble#1{\postamble}\fi +\if\oldDS T \generateFile{bibentry.sty}{f}{\from{bibentry.dtx}{package}} \fi + +\declarepreamble\driver +============================================ +This is the driver file to produce the LaTeX documentation +from the original source file \inFileName. + +Make changes to it as needed. (Never change the file \inFileName!) +============================================ +\endpreamble + +\declarepostamble\driverq + +End of documentation driver file. +\endpostamble + +\ifx\oldDS T \generateFile{bibentry.drv}{f}{\from{bibentry.dtx}{driver}}\fi + +\ifx\oldDS T \let\askforoverwritefalse\relax\def\generate#1{}\fi + +\askforoverwritefalse +\generate{\file{bibentry.sty}{\from{bibentry.dtx}{package}} + \file{bibentry.drv}{\usepreamble\driver\usepostamble\driverq + \from{bibentry.dtx}{driver}} + } + +\obeyspaces +\Msg{*******************************************}% +\Msg{* For documentation, process bibentry.dtx *}% +\Msg{* or the driver file bibentry.drv *}% +\Msg{*******************************************} diff --git a/macros/latex/contrib/natbib/natbib.dtx b/macros/latex/contrib/natbib/natbib.dtx new file mode 100644 index 0000000000..54978e1f36 --- /dev/null +++ b/macros/latex/contrib/natbib/natbib.dtx @@ -0,0 +1,5620 @@ +% \iffalse THIS IS A META-COMMENT +%<*dtx> +\ProvidesFile +%======================================================================== + {NATBIB.DTX} +%======================================================================== +%</dtx> +%% Copyright 1993-2010 Patrick W Daly +%% Max-Planck-Institut f\"ur Sonnensystemforschung +%% Max-Planck-Str. 2 +%% D-37191 Katlenburg-Lindau +%% Germany +%% E-mail: daly@mps.mpg.de +% +% This program can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% +% This is a contributed file to the LaTeX system. +% ------------------------------------------------- +% This is a LaTeX package to modify \cite and \thebibliography for author-year +% systems of bibliographic citation; will also work with +% numerical systems, allowing simplified style changes for them too. +% Installation: +% LaTeX this file: creates docstrip installation file natbib.ins +% AND the documentation +% (La)TeX natbib.ins: creates package file natbib.sty +% and optionally documentation driver natbib.ltx +% (natbib.ins may be edited as needed) +% Docstrip options available: +% package - to produce a package .sty file +% notes - to produce a reference sheet for natbib usage +% driver - to produce a driver file to print the documentation +% all - (with package) to include all author-year systems +% else individually with: +% apalike, newapa, chicago, harvard, authordate, astron +%-------------------------------------------------------------------------- +% +% *** Identify the package file:- +%<package>\NeedsTeXFormat{LaTeX2e}[1995/06/01] +% (Need LaTeX2e release 3 for option definition with single #) +%<package>\ProvidesPackage{natbib} +% +% *** Provide command to identify reference sheet (notes) +%<notes>\NeedsTeXFormat{LaTeX2e} +%<notes>\def\DescribesFile#1 [#2 #3 #4] +%<notes> {\def\filename{#1}\def\filedate{#2}\def\fileversion{#3}} +%<notes>\DescribesFile{natbib} +% +% *** Identify the driver file:- +%<driver>\NeedsTeXFormat{LaTeX2e} +%<driver>\ProvidesFile{natbib.ltx} +% +% *** The DATE, VERSION, and other INFO +%\fi +%\ProvidesFile{natbib} + [2010/09/13 8.31b (PWD, AO)] +% \changes{4.0}{1993 Aug 19}{First documented release} +% \changes{4.1}{1993 Oct 4}{Simplification of \cs{@citeapalk}} +% \changes{4.1a}{1993 Oct 14}{Add \texttt{rev} option for reversed comments +% in \cs{cite}} +% \changes{4.1b}{1993 Oct 18}{Add \cs{bibfont} to list definition =\cs{relax}} +% \changes{4.2}{1993 Oct 22}{Add coding for AGU, NLINPROC} +% \changes{4.2}{1993 Nov 20}{Add more coding for AGU} +% \changes{4.3a}{1994 Feb 24}{First additions for \LaTeXe} +% \changes{5.0}{1994 May 18}{Revised for \LaTeXe{} and 2.09} +% \changes{5.0}{1994 May 18}{Remove obsolete JGR, GRL coding} +% \changes{5.0}{1994 May 18}{Add \cs{citeauthor}, \cs{citeyear}} +% \changes{5.0}{1994 May 18}{Two optional texts for \cs{cite} so \texttt{rev} +% option obsolete} +% \changes{5.0}{1994 May 18}{\LaTeXe\ options to select punctuation} +% \changes{5.1}{1994 Jun 22}{Conform to first official release of \LaTeXe} +% \changes{5.1}{1994 Jun 22}{Separate \LaTeX\ and 2.09 files} +% \changes{5.1}{1994 Jun 22}{Put doc driver first} +% \changes{5.2}{1994 Aug 25}{Fix up 2.09 style to run in compatibility mode} +% \changes{5.2}{1994 Aug 25}{\cs{citeauthor}, \cs{citeyear} make BibTeX +% entry in aux file} +% \changes{5.2}{1994 Aug 25}{\cs{@citex} defined as in \LaTeXe} +% \changes{5.2}{1994 Aug 25}{Local config file \texttt{natbib.cfg} read in} +% \changes{5.3}{1994 Sep 13}{Add \cs{citefullauthor}, options \texttt{angle}, +% \texttt{curly}} +% \changes{5.3}{1994 Sep 19}{Add star version of \cs{cite} for full authors} +% \changes{5.3}{1994 Sep 26}{Fix accents in citations with proper definition +% of \cs{protect}} +% \changes{5.4}{1994 Nov 24}{Add space in \cs{@citex} for text cites} +% \changes{5.4}{1994 Nov 24}{Replace \cs{if@tempswa} by \cs{ifNAT@swa}} +% \changes{5.4}{1994 Nov 24}{Add superscript citation type to \cs{bibpunct}} +% \changes{5.4}{1994 Nov 24}{Add \cs{@citesuper}, fix up bugs in superscripts} +% \changes{5.4}{1994 Nov 24}{Define \cs{@citexnum} as in \LaTeXe} +% \changes{5.4}{1995 Feb 03}{Add \cs{citestyle} same as \cs{bibstyle}} +% \changes{5.4}{1995 Feb 08}{For repeated years and authors, print just letter} +% \changes{5.5}{1995 Mar 13}{Add \cs{bibhang} and command space in +% \cs{@cite}} +% \changes{5.5}{1995 Mar 16}{Add \cs{citealt} for citation with no +% parentheses} +% \changes{5.5}{1995 Mar 24}{Reorganize internal commands, using \cs{NAT@} +% prefixes} +% \changes{5.5}{1995 Mar 24}{Punctuation selection commands \cs{bibpunct}, +% \cs{citestyle} are now preamble only, whereas previously they had to +% come after the preamble} +% \changes{5.5}{1995 May 14}{Change names of punctuation commands to +% \cs{NAT@...}} +% \changes{6.0}{1995 Sep 4}{Allow numerical styles with author-year +% \texttt{bst} files} +% \changes{6.0}{1995 Sep 21}{Add automatic indexing of citations} +% \changes{6.0}{1995 Sep 29}{Accommodate \texttt{index} package} +% \changes{6.1}{1995 Nov 22}{Fixed for \LaTeXe\ \texttt{1995/12/01}} +% \changes{6.1}{1995 Dec 4}{Make more robust against changes to internals} +% \changes{6.1a}{1995 Dec 19}{Fix test for changed citations} +% \changes{6.2}{1996 Jan 10}{Replace all \cs{uppercase}} +% \changes{6.2}{1996 Jan 11}{Add \cs{citet}} +% \changes{6.2}{1996 Feb 2}{Fix superscript size} +% \changes{6.2}{1996 Mar 05}{Add length \cs{bibsep} for linespacing between +% references} +% \changes{6.2}{1996 Apr 15}{Fix clash with \texttt{amsart} and +% \texttt{amsbook}} +% \changes{6.3}{1996 Jun 10}{Allow \texttt{showkeys} to be loaded first} +% \changes{6.3}{1996 Jun 17}{Fix punctuation for \texttt{plainnat}} +% \changes{6.3}{1996 Jun 17}{Suppress extra labels with numericals} +% \changes{6.4}{1996 Jun 18}{Provide \cs{bibname} and \cs{refname}} +% \changes{6.4}{1996 Jun 27}{Change \texttt{nlinproc} option to \texttt{egs}} +% \changes{6.4}{1996 Sep 1}{Make compatible with \texttt{chapterbib.sty}} +% \changes{6.4}{1996 Sep 12}{Fix spacing for superscripts} +% \changes{6.4}{1996 Sep 12}{Extra letter printed with \cs{citeyear}} +% \changes{6.4}{1996 Sep 13}{Add compression and sorting of numerical citations} +% \changes{6.4}{1996 Oct 2}{Make compatible with \texttt{hyperref.sty}} +% \changes{6.5}{1996 Dec 11}{KOMA script compatibility} +% \changes{6.5}{1997 Jan 10}{For EGS, no blank line between references} +% \changes{6.5}{1997 Jan 30}{Recode notes so they work with \cs{citet} and +% \cs{citep}; change documentation to stress these commands over \cs{cite}} +% \changes{6.5}{1997 Feb 5}{Fix KOMA script properly} +% \changes{6.6}{1997 Apr 6}{Fix \cs{nocite} to work with \texttt{chapterbib}} +% \changes{6.6}{1997 May 26}{Let \cs{citealt} have full \cs{cite} syntax} +% \changes{6.6}{1997 Jun 4}{Add \cs{citeyearpar}} +% \changes{6.6}{1997 Jun 4}{Add sorting of author--year citations} +% \changes{6.6}{1997 Jun 12}{Add \cs{citealp} like \cs{citep} without parentheses} +% \changes{6.6}{1997 Jun 24}{Fix \texttt{showkeys} functionality} +% \changes{6.6}{1997 Jun 25}{Improve \texttt{hyperref} functionality} +% \changes{6.6}{1997 Jun 30}{Fix bug in \cs{NAT@citex}} +% \changes{6.7}{1997 Jul 14}{Add \texttt{longnamesfirst} option} +% \changes{6.7}{1997 Sep 12}{Fix interface with \texttt{showkeys}} +% \changes{6.7}{1997 Nov 10}{Fix interface with \texttt{babel}} +% \changes{6.7}{1997 Nov 11}{Add reference sheet extraction} +% \changes{6.8}{1997 Dec 1}{Permit \cs{@biblabel} to be user modified} +% \changes{6.8}{1998 Feb 19}{Fix hyperref bug in \cs{citep}} +% \changes{6.8a}{1998 Mar 6}{Correct wrong name for \texttt{longnamesfirst} +% in the documentation} +% \changes{6.8a}{1998 May 14}{\cs{@biblabel} only redefinable for numerical +% mode} +% \changes{6.8b}{1998 July 6}{Hyperref: to work with \texttt{chapterbib} and +% breaks links in textual citations} +% \changes{6.8c}{1998 July 14}{Hyperref: remove opening brace and notes from +% link} +% \changes{6.8d}{1998 Nov 23}{Fix bug in \texttt{super} option; suppress brackets} +% \changes{6.9}{1999 Jan 22}{Fix bug with \cs{makeindex}} +% \changes{6.9}{1999 Feb 23}{Update copyright notice} +% \changes{6.9}{1999 Mar 26}{Babel test made more general} +% \changes{7.0}{1999 May 7}{With empty year, act like \cs{citeauthor}} +% \changes{7.0}{1999 May 21}{Correct \cs{bibsection} for \texttt{amsbook}} +% \changes{7.0a}{2000 Jul 24}{Argument of \cs{citenumfont} always in braces} +% \changes{7.0b}{2002 Feb 27}{Fix bug with superscripts} +% \changes{7.1}{2003 June 6}{Add test for missing extra letter in multi-cites} +% \changes{7.2}{2006 Jan 12}{Allow \texttt{hyperref} with compression} +% \changes{7.2}{2006 Jan 12}{Add compression without sorting} +% \changes{7.2}{2006 Jan 12}{Add compatibility with \texttt{citeref} package} +% \changes{7.3}{2006 Mar 22}{Revise and update the manual documentation} +% \changes{7.4}{2006 Aug 18}{Add \cs{NAT@nmfmt} to names in \cs{NAT@test}} +% \changes{7.4a}{2006 Sep 6}{Fix bug with compress option and hyperref with dvips} +% \changes{7.5}{2007 Feb 2}{Add \cs{citenum} to print (non-superscripted) number} +% \changes{7.5}{2007 Feb 2}{Superscripted braces raised in textual citation too} +% \changes{7.5}{2007 Feb 2}{Change notes for textual numerical citations to be outside} +% \changes{8.0}{2007 Feb 2}{Allow changes in cite style, for chapterbib; remove \texttt{nopreonly} option} +% \changes{8.0}{2007 Feb 5}{Remove 2.09 support} +% \changes{8.0}{2007 Feb 5}{Remove subpackage option (and agu, egs options)} +% \changes{8.1}{2007 Oct 30}{Replace some \cs{edef}s with \cs{protected@edef}} +% \changes{8.2}{2008 Jan 10}{(AO)Introduce, for \texttt{merge} package option, +% \cs{NAT@bibitem@first@sw} and \cs{NAT@bibitem@label@sw}} +% \changes{8.2}{2008 Jan 10}{(AO) The sort algorithm had not been stable; fixed.}% +% \changes{8.2}{2008 Jan 10}{(AO) Various changes to \texttt{NAT@sort@cites} and friends}% +% \changes{8.2}{2008 Jun 26}{(AO) Employ \cs{NAT@ifcat@num} to make the test on \cs{NAT@num}}% +% \changes{8.2}{2008 Jun 26}{(AO) Use \cs{NAT@space}, \cs{NAT@spacechar}, and \cs{NAT@penalty} +% instead of explicit space and primitive penalty in \cs{NAT@idxtxt}, +% \cs{NAT@cite}, \cs{NAT@citenum}, \cs{NAT@citesuper}.}% +% \changes{8.2}{2008 Jun 28}{(AO) Introduce \cs{NAT@ifcat@num}, ensuring that the +% \cs{catcode} of the underscore is 8 at the time; +% use for tests on \cs{NAT@num} and \cs{NAT@last@num}.}% +% \changes{8.2}{2008 Jul 01}{(AO) Allow graceful transition away from the use of \texttt{natbib}}% +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{z@}: +% allow for tighter \cs{ifnum} comparisons.}% +% \changes{8.2}{2008 Jul 01}{(AO) Give \cs{NAT@split} a good argument, +% even when \cs{NAT@temp} is poorly constructed.}% +% \changes{8.2}{2008 Jul 01}{(AO) Provide a layer of abstraction to assignments +% to \cs{@citea}, using \cs{NAT@def@citea} and \cs{NAT@reset@citea}.}% +% \changes{8.2}{2008 Jul 01}{(AO) With our abstraction of \cs{@citea}; +% we use wrappers \cs{NAT@def@citea@box} and \cs{NAT@hyper@citea}. Also \cs{NAT@penalty} in place of an explicit \cs{penalty}.}% +% \changes{8.2}{2008 Jul 01}{(AO) Use \cs{NAT@hyper@} and \cs{NAT@hyper@citea} +% to wrap up the hyperlink calls in \cs{NAT@citexnum}, \cs{NAT@citex}, .}% +% \changes{8.2}{2008 Jul 02}{(AO) Add \cs{@ifxundefined}, a tool for testing a \cs{TeX} macro, +% and \cs{@ifnum}, a tool for testing numbers, like \cs{ifnum}.}% +% \changes{8.2}{2008 Jul 02}{(AO) Employ \cs{@ifxundefined}, instead of \cs{@ifundefined}, +% for use on \cs{@cprwrite}, \cs{@indexfile}, \cs{bbl@redefine}, \cs{chapter}, +% \cs{NAT@sectionbib}, and \cs{bib@heading}: the \cs{csname} being tested ought not to be altered as a side effect.}% +% \changes{8.2}{2008 Jul 02}{(AO) The value of \cs{NAT@sort} and \cs{NAT@cmprs} +% will be \cs{z@} or \cs{@ne}: something created by \cs{chardef}. This works better in \cs{ifnum} tests.}% +% \changes{8.2}{2008 Jul 12}{(AO) Do not write .aux file entries in \cs{NAT@citexnum} +% or \cs{NAT@citex}; do this in \cs{NAT@sort@cites} where the keys will be in the user's order.} +% \changes{8.2}{2008 Jul 13}{(AO) Allow optional arguments preceding cite key.} +% \changes{8.2}{2008 Jul 13}{(AO) Commented-out code has been made into a comment.} +% \changes{8.2}{2008 Jul 13}{(AO) Protect against case where \cs{NAT@num} is +% defined to be the same as \cs{@empty} (malformed \texttt{.aux} file).} +% \changes{8.3}{2008 Aug 28}{Refine the compatibility with babel} +% \changes{8.3}{2008 Sep 23}{Fix problem with spacing and raised commas for multiple superscripts} +% \changes{8.3}{2008 Nov 5}{Repair a number of bugs from AO's coding} +% \changes{8.3}{2008 Dec 8}{Put all comments inside braces with \cs{citet}, +% even for numerical (previously only for author--year)} +% \changes{8.3}{2009 Feb 2}{Include AO's last delta corrections} +% \changes{8.31}{2009 Jul 16}{Fix so when merge is 0, old syntax valid; backward compatibility} +% \changes{8.31a}{2009 Nov 07}{(AO) Fix punctuation bugs in merge code} +% \changes{8.31b}{2010 Sep 13}{Remove definitions of \cs{bibAnnote} and \cs{bibAnnoteFile} when merging not selected} +% +% \CheckSum{2884} +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \iffalse +%<*install> +%^^A ============================================= +%^^A Here is the docstrip installation file +%^^A It is written on first LaTeX run if it +%^^A does not already exist +%^^A ============================================= +\begin{filecontents*}{natbib.ins} +% File: natbib.ins +% Copyright 2009 Patrick W. Daly +% +% This is the natbib installation file for extracting package and driver +% files from the original source file. Simply process it under +% TeX or LaTeX. +% +% This installation works with docstrip 2.4 or later. + +\def\batchfile{natbib.ins} +\input docstrip + +\preamble +============================================= +IMPORTANT NOTICE: + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1 of the License, or any later version. + +This is a generated file. +It may not be distributed without the original source file \inFileName. + +Full documentation can be obtained by LaTeXing that original file. +Only a few abbreviated comments remain here to describe the usage. +============================================= +\endpreamble +\postamble + +<<<<< End of generated file <<<<<< +\endpostamble +\keepsilent + +\declarepreamble\refsheet +============================================= +IMPORTANT NOTICE: + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1 of the License, or any later version. + +This is a generated file. +It may not be distributed without the original source file \inFileName. + +This is a Reference Sheet for natbib. It consists of excerpts from the +original source file. + +For more details, LaTeX the source \inFileName. +============================================== +\endpreamble + +\declarepostamble\refsheetq + +End of Reference Sheet file + +\endpostamble + +\declarepreamble\driver +============================================ +This is the driver file to produce the LaTeX documentation +from the original source file \inFileName. + +Make changes to it as needed. (Never change the file \inFileName!) +============================================ +\endpreamble + +\declarepostamble\driverq + +End of documentation driver file. +\endpostamble + +\askforoverwritefalse +\generate{\file{natbib.sty}{\from{natbib.dtx}{package,all}} + \file{natnotes.tex}{\usepreamble\refsheet\usepostamble\refsheetq + \from{natbib.dtx}{notes}} + \file{natbib.ltx}{\usepreamble\driver\usepostamble\driverq + \from{natbib.dtx}{driver}} + } + +\obeyspaces +\Msg{*********************************************}% +\Msg{* For documentation, process natbib.dtx *}% +\Msg{* or the driver file natbib.ltx *}% +\Msg{* For reference sheet, process natnotes.tex *} +\Msg{*********************************************} +\end{filecontents*} +%</install> +%<*driver> +\documentclass{ltxdoc} +%<driver>%\documentclass[twoside]{ltxdoc} +%<driver>%\documentclass[a4paper]{ltxdoc} +%<driver>%\documentclass[twoside,a4paper]{ltxdoc} +\raggedbottom + + %** To include the detailed explanation of the coding, comment out + %** the next line +\OnlyDescription + + %** To produce a command index: add the following line for one run, + %** then run makeindex -s gind.ist natbib + %** and reprocess, with or without this line (much faster without) +%<driver>% \EnableCrossrefs\CodelineIndex + + %** To produce a change history: add the following line for one run, + %** then run makeindex -s gglo.ist -o natbib.gls natbib.glo + %** and reprocess, with or without this line (faster without) +%<driver>% \RecordChanges + +\DisableCrossrefs %May stay; zapped by \EnableCrossrefs +\CodelineNumbered %May stay + +\begin{document} + \DocInput{natbib.dtx} +\end{document} +%</driver> +%<*notes> +%^^A *************************** +%^^A Preamble to the Reference Sheet +%^^A *************************** +\documentclass{article} + +\setlength{\parindent}{0pt} +\setlength{\parskip}{1ex} +\setlength{\textwidth}{\paperwidth} +\addtolength{\textwidth}{-2in} +\setlength{\oddsidemargin}{0pt} +\setlength{\textheight}{\paperheight} + +\addtolength{\textheight}{-\headheight} +\addtolength{\textheight}{-\headsep} +\addtolength{\textheight}{-\footskip} +\addtolength{\textheight}{-2in} +\makeatletter +\def\@listI{\leftmargin\leftmargini + \topsep\z@ \parsep\parskip \itemsep\z@} +\let\@listi\@listI +\@listi +\makeatother +\newcommand{\head}[1]{\subsubsection*{#1}} + +\pagestyle{headings} +\markright{Reference sheet: \texttt{natbib}} + +\usepackage{shortvrb} +\MakeShortVerb{\|} + +\begin{document} +\thispagestyle{plain} + +%</notes> +%\fi +% +% \DoNotIndex{\begin,\CodelineIndex,\CodelineNumbered,\def,\DisableCrossrefs} +% \DoNotIndex{\DocInput,\documentclass,\EnableCrossrefs,\end,\GetFileInfo} +% \DoNotIndex{\NeedsTeXFormat,\OnlyDescription,\RecordChanges,\usepackage} +% \DoNotIndex{\ProvidesClass,\ProvidesPackage,\ProvidesFile,\RequirePackage} +% \DoNotIndex{\LoadClass,\PassOptionsToClass,\PassOptionsToPackage} +% \DoNotIndex{\DeclareOption,\CurrentOption,\ProcessOptions,\ExecuteOptions} +% \DoNotIndex{\AtEndOfClass,\AtEndOfPackage,\AtBeginDocument,\AtEndDocument} +% \DoNotIndex{\InputIfFileExists,\IfFileExists,\ClassError,\PackageError} +% \DoNotIndex{\ClassWarning,\PackageWarning,\ClassWarningNoLine} +% \DoNotIndex{\PackageWarningNoLine,\ClassInfo,\PackageInfo,\MessageBreak} +% \DoNotIndex{\space,\protect,\DeclareRobustCommand,\CheckCommand} +% \DoNotIndex{\newcommand,\renewcommand,\providecommand,\newenvironment} +% \DoNotIndex{\renewenvironment,\newif,\newlength,\newcounter,\setlength} +% \DoNotIndex{\setcounter,\if,\ifx,\ifcase,\ifnum,\ifdim,\else,\fi} +% \DoNotIndex{\texttt,\textbf,\textrm,\textsl,\textsc,\reset@font} +% \DoNotIndex{\textup,\textit,\textmd,\textsf,\emph,\futurelet} +% \DoNotIndex{\ttfamily,\rmfamily,\sffamily,\mdseries,\bfseries,\upshape} +% \DoNotIndex{\slshape,\scshape,\itshape,\em,\LaTeX,\LaTeXe} +% \DoNotIndex{\filename,\fileversion,\filedate,\let,\makeindex} +% \DoNotIndex{\@auxout,\@for,\@gobble,\@ifnextchar,\@m,\@mkboth,\@nil} +% \DoNotIndex{\@noitemerr,\@tempa,\@tempswafalse,\@tempswatrue,\@warning} +% \DoNotIndex{\advance,\arabic,\AtBeginDocument,\bf,\bibname,\chapter} +% \DoNotIndex{\citation,\clubpenalty,\CodelineNumbered,\csname} +% \DoNotIndex{\DisableCrossrefs,\do,\edef,\else,\endcsname,\endlist} +% \DoNotIndex{\expandafter,\fi,\gdef,\global,\hbox,\hfill,\hskip,\hspace} +% \DoNotIndex{\if,\if@filesw,\if@tempswa,\ifx,\immediate,\itemindent,\labelsep} +% \DoNotIndex{\labelwidth,\lastskip,\leftmargin,\list,\mbox,\newblock} +% \DoNotIndex{\newpage,\p@enumiv,\parindent,\penalty,\refname} +% \DoNotIndex{\relax,\section,\settowidth,\sfcode,\sloppy,\small,\string} +% \DoNotIndex{\theenumiv,\thepage,\unskip,\uppercase,\usecounter,\vskip} +% \DoNotIndex{\widowpenalty,\write,\xdef,\z@,\catcode,\ifnum,\the} +% \DoNotIndex{\.,\@empty,\@ifundefined,\@latex@warning,\@minus,\@plus,\ } +% \DoNotIndex{\document,\@namedef,\@listi,\markboth,\or,\p@} +% \DoNotIndex{\listparindent,\noexpand,\par,\parsep,\pb,\pbf,\pbfseries} +% \DoNotIndex{\pc,\pd,\pem,\pit,\pitshape,\pmdseries,\prm,\prmfamily,\psc} +% \DoNotIndex{\pscshape,\psf,\psffamily,\psl,\pslshape,\ptt,\pttfamily} +% \DoNotIndex{\pupshape,\@iden,\@firstofone,\@unexpandable@protect} +% \DoNotIndex{\&,\{,\},\bibitem,\bibindent,\if@draft,\typeout} +% \DoNotIndex{\@ifclassloaded,\@ifstar,\@onlypreamble,\@preamblecmds} +% \DoNotIndex{\addtolength,\endinput,\@bsphack,\begingroup,\@wrindex} +% \DoNotIndex{\@listctr,\bibname,\enddocument,\hfil,\ignorespaces,\item} +% \DoNotIndex{\NAT@temp,\refname,\stepcounter,\@ifpackageloaded} +% \DoNotIndex{\@gobbletwo,\index,\itemsep,\markright,\scriptsize} +% \DoNotIndex{\textsuperscript,\@undefined} +% \DoNotIndex{\@celt,\@cite@list,\@citea,\@citeb,\@compress@cite} +% \DoNotIndex{\@bsphack,\@esphack,\@h@ld,\@make@cite@list,\@ne} +% \DoNotIndex{\@sort@celt,\@tempcnta,\@tempcntb,\delimiter,\endgroup} +% \DoNotIndex{\ifcat,\m@ne,\number,\kern,\protected@edef} +% \DoNotIndex{\@markboth,\@mkboth,\nobreak,\SK@,\SK@@citex} +% \DoNotIndex{\SK@@label,\SK@@ref,SK@def,\SK@lbibitem} +% \DoNotIndex{\@nameuse,\@extra@b@citeb,\@tempb,\@tempc} +% +% \setcounter{IndexColumns}{2} +% \setlength{\IndexMin}{10cm} +% \setcounter{StandardModuleDepth}{1} +% +% \hyphenation{par-en-the-ti-cal} +% +% \GetFileInfo{natbib} +% +% \title{{\bfseries Natural Sciences Citations and References}\\ +% (Author--Year and Numerical Schemes)} +% +% \author{Patrick W. Daly\thanks{% +% The code for merged numerical bibliography entries, emulating the \texttt{mcite} package, +% has been commissioned by the American Physical Society and provided by Arthur Ogawa}} +% +% \date{This paper describes package \texttt{\filename}\\ +% version \fileversion{} from \filedate.} +% +% \maketitle +% +% \pagestyle{myheadings} +% \markboth{P. W. Daly}{NATURAL SCIENCES CITATIONS AND REFERENCES} +% +% \iffalse % The following lines belong to both the documentation and notes +%<*notes> +% \fi +\newcommand{\btx}{\textsc{Bib}\TeX} +\newcommand{\thestyle}{\texttt{\filename}} +% \iffalse % These lines belong only to the notes +\begin{center}{\bfseries\Large + Reference sheet for \thestyle\ usage}\\ + \large(Describing version \fileversion\ from \filedate) +\end{center} + +\begin{quote}\slshape +For a more detailed description of the \thestyle\ package, \LaTeX\ the +source file \thestyle\texttt{.dtx}. +\end{quote} +%</notes> +% \fi +% +%^^A In order to keep all marginal notes on the one (left) side: +%^^A (otherwise they switch sides disasterously with twoside option) +% \makeatletter \@mparswitchfalse \makeatother +% +% \begin{abstract} +% \iffalse % First line is Reference Sheet only, rest for both doc and Ref. Sheet +%<*notes> +\head{Overview} +% \fi +The \thestyle\ package is a reimplementation of the \LaTeX\ |\cite| command, +to work with both author--year and numerical citations. It is compatible with +the standard bibliographic style files, such as \texttt{plain.bst}, as well as +with those for \texttt{harvard}, \texttt{apalike}, \texttt{chicago}, +\texttt{astron}, \texttt{authordate}, and of course \thestyle. + +% \iffalse +%</notes> +% \fi +% In contrast to the packages listed above, the \thestyle{} package supports not +% only the various author--year bibliography styles, but also those for standard +% numerical citations. In fact, it can also produce numerical citations even +% with an author--year bibliographic style, something that permits easy +% switching between the two citation modes. To this end, replacements for the +% standard \LaTeX\ \texttt{.bst} files are also provided. +% +% It is possible to define the citation \emph{style} (type of brackets and +% punctuation between citations) and even to associate it with the name of +% the bibliographic style so that it is automatically activated. Citation +% styles can be defined for local \texttt{.bst} files by means of a +% configuration file \thestyle\texttt{.cfg}. +% +% It is compatible with the packages: \texttt{babel}, \texttt{index}, \texttt{citeref}, +% \texttt{showkeys}, \texttt{chapterbib}, \texttt{hyperref}, \texttt{koma} and +% with the classes \texttt{amsbook} and \texttt{amsart}. +% It can also emulate the sorting and compressing functions of the \texttt{cite} package +% as well as the multiple citation (and merging) functions of Thorsten Ohl's \texttt{mcite} package. +% (The \thestyle{} package, however, is not compatible with either \texttt{cite} or \texttt{mcite} themselves.) +% +% Note that the \texttt{citeref} package (for adding citation page numbers in the +% bibliography) must be loaded after \thestyle. (The \texttt{hyperref} package with +% the option \texttt{pagebackref} also provides this feature, but with hyperlinks.) +% +% The \thestyle\ package therefore acts as a single, flexible interface for +% most of the available bibliographic styles. +% +% \end{abstract} +% +% \newpage\tableofcontents\newpage +% +% \section{Introduction} +% +% The \thestyle{} package is an extension to \LaTeX\ to allow author--year +% citations along with numerical citations. Standard \LaTeX\ permits only +% numerical, whereas all extensions for author--year prior to the release of +% \thestyle{} in 1993 were limited to just that. Since they normally added new +% commands (as \thestyle{} does too), documents written with them could only be +% used with numerical citations after extensive editing. +% +% The \thestyle{} package has changed that; switching from author--year to +% numerical citations is a matter of an option, with no alterations to the +% source text. It has now become part of the standard \LaTeX\ installations, +% and is supported (demanded) by many journals. It is the citation package of +% choice by most of the \LaTeX\ community, mainly because of its flexibility +% and configurability. +% +% Like all packages, it is loaded in the document preamble, with possible options, +% with, e.g.\ +% \begin{quote} +% |\usepackage[sectionbib,square]{natbib}| +% \end{quote} +% The option \texttt{sectionbib} specifies that, when used with the package +% \texttt{chapterbib}, the bibliography will appear as a section at the end of +% each chapter (Section~\ref{sec:chapbib}). The \texttt{square} option says +% that references are to be enclosed in square bracket rather than round +% parentheses. See Section~\ref{sec:opts} for a complete list of options. +% +% The document text itself begins with, e.g. +% \begin{quote} +% \begin{verbatim} +% \begin{document} +% \bibliographystyle{plainnat} +% \end{verbatim} +% \end{quote} +% which specifies \texttt{plainnat} to be the bibliography style used by the +% \btx\ program that generates the actual bibliography from a database. The +% style \texttt{plainnat} is the \thestyle{} version of the standard \texttt{plain} +% (numerical only) style. See Section~\ref{sec:plainnat} for other styles, or +% search the installation for \texttt{.bst} files. +% +% The |\bibliographystyle| command can be given anywhere in the document, but +% it makes sense to add it at the start where it can be easily identified (and +% modified). +% +% To make a citation in the text, use +% \begin{quote} +% |\citep{jon90}| for a \emph{parenthetical} citation (Jones et al., +% 1990),\\ +% |\citet{jon90}| for a \emph{textual} one, as Jones et al. (1990). +% \end{quote} +% Both |\citep| and |\citet| are defined by \thestyle{} and are thus not +% standard. The standard \LaTeX\ command |\cite| should be avoided, because it +% behaves like |\citet| for author--year citations, but like |\citep| for +% numerical ones. There are many other commands for other special effects +% (Section~\ref{sec:excite}). +% +% In the above examples, \texttt{jon90} is the identifying key for the +% reference, as found in the \btx\ database, or in the \texttt{thebibliography} +% environment, Section~\ref{sec:bibitem}: +% \begin{quote} +% \begin{verbatim} +% \begin{thebibliography}{1} +% \bibitem[Jones et al.(1990)]{jon90} +% . . . . . +% \end{thebibliography} +% \end{verbatim} +% \end{quote} +% This environment prints the actual bibliography, and the |\bibitem| commands +% link the entries to the citations via the key, here \texttt{jon90}. The key +% may be perfectly arbitrary as long as it is unique. The text in square +% brackets contains the pieces of citation information, the authors \texttt{Jones et +% al.} and the year \texttt{1990}. Note that these are two pieces of text that +% may be packaged together in several different ways, depending on the citation +% command. In fact, if numerical citations are selected, they are (almost) +% ignored and only the sequence number is used as citation. +% +% The \texttt{thebibliography} environment can be made by hand, but it is +% better and safer to let \btx\ do it. For this, one needs the +% |\bibliographystyle| command already mentioned, and near the end of the +% document: +% \begin{quote} +% \begin{verbatim} +% \bibliography{mybib} +% \end{document} +% \end{verbatim} +% \end{quote} +% Here \texttt{mybib} is the root name of the \btx\ database file +% (\texttt{mybib.bib}) containing the data for the references needed in the +% document. +% +% The rest of this document presents all the gorey details about everything +% possible with \thestyle. +% +% \section{Using this Package}\label{sec:usage} +% +% \iffalse +%<*notes> +\head{Loading} +Load with |\usepackage[|\emph{options}|]{|\thestyle|}|. See list of +\emph{options} at the end. + +%</notes> +% \fi +% In this paper, I distinguish between the citation \emph{mode} (author--year +% or numerical) and citation \emph{style} (the type of punctuation used for +% citations). The citation style is something that is independent of the +% bibliography style and is not programmed in the \texttt{.bst} files. +% +% \subsection{New Bibliography Styles}\label{sec:plainnat} +% +% \iffalse +%<*notes> +\head{Replacement bibliography styles} +% \fi +I provide three new \texttt{.bst} files to replace the standard \LaTeX\ +numerical ones: +\begin{quote}\ttfamily + plainnat.bst \qquad abbrvnat.bst \qquad unsrtnat.bst +\end{quote} +% \iffalse +%</notes> +% \fi +% These produce reference lists in the same style as the corresponding +% standard \texttt{.bst} file, but work with \thestyle{}. The +% advantage is that they can be used in both numerical and author--year +% mode. +% +% These \texttt{.bst} files are not meant to be exhaustive by any means. Other +% style files conforming to the \thestyle{} format exist, or may be generated +% with my \texttt{custom-bib} (also known as \texttt{makebst}) program. +% +% +% \subsection{The Syntax of the \texttt{thebibliography}} +% \label{sec:bibitem} +% +% The information on the cited author names and year are given as part of the +% |\bibitem| commands within the \texttt{thebibliography} environment. The +% \thestyle{} package expects that information to be in a certain format, which +% is maintained by the above bibliography styles. (It will also be able to +% interpret formats used by some earlier packages, such as \texttt{harvard} and +% \texttt{chicago}.) If one wishes to bypass \btx, one must make up the +% \texttt{thebibliography} oneself, such that it conforms to \thestyle. +% +% This syntax looks as follows: +% \begin{quote} +% |\bibitem[Jones et al.(1990)]{jon90}...|\\[1ex] +% or alternatively\\[1ex] +% |\bibitem[Jones et al.(1990)Jones, Baker, |\\ +% \hspace*{2em}|and Williams]{jon90}...| +% \end{quote} +% The text in square brackets contains the pieces of citation texts, the short +% author list, \texttt{Jones et al.}, the year \texttt{1990}, and the optional long +% author list \texttt{Jones, Baker and Williams}. If the long list is missing, +% the short list will be used instead. The parentheses around the year are +% \emph{not} part of the text, but merely delimit the year from the author +% lists. Round parentheses must always be used, even if square brackets are +% wanted for the citations. And there must be no space before or after the year +% parentheses, else it will become part of the author list. +% +% \medskip\noindent +% \textbf{Note:} if any single |\bibitem| entry does not conform to a syntax that +% \thestyle{} understands, it switches stubbornly to numerical mode, since it +% otherwise has no idea what the author and year texts could be. +% +% \subsection{Basic Citation Commands} +% +% The \thestyle{} package can be used with bibliography styles that were +% intended for other, older packages, like \texttt{harvard}. However, +% the commands described in this and the next sections are defined by +% \thestyle{} and must be used even with those other bibliography styles. +% +% \DescribeMacro{\citet} +% \DescribeMacro{\citep} +% \iffalse +%<*notes> +\head{Basic commands} +% \fi +The \thestyle\ package has two basic citation commands, |\citet| and +|\citep| for \emph{textual} and \emph{parenthetical} citations, respectively. +There also exist the starred versions |\citet*| and |\citep*| that print +the full author list, and not just the abbreviated one. +All of these may take one or two optional arguments to add some text before +and after the citation. +\begin{quote} +\begin{tabular}{l@{\quad$\Rightarrow$\quad}l} + |\citet{jon90}| & Jones et al. (1990)\\ + |\citet[chap.~2]{jon90}| & Jones et al. (1990, chap.~2)\\[0.5ex] + |\citep{jon90}| & (Jones et al., 1990)\\ + |\citep[chap.~2]{jon90}| & (Jones et al., 1990, chap.~2)\\ + |\citep[see][]{jon90}| & (see Jones et al., 1990)\\ + |\citep[see][chap.~2]{jon90}| & (see Jones et al., 1990, chap.~2)\\[0.5ex] + |\citet*{jon90}| & Jones, Baker, and Williams (1990)\\ + |\citep*{jon90}| & (Jones, Baker, and Williams, 1990) +\end{tabular} +\end{quote} +% \iffalse +%</notes> +% \fi +% The starred versions can only list the full authors if the \texttt{.bst} +% file supports this feature; otherwise, the abbreviated list is printed. +% +% In standard \LaTeX, the |\cite| command can only take a single optional +% text for a note after the citation; here, a single optional text is a +% post-note, while two are the pre- and post-notes. To have only a pre-note, it +% is necessary to provide an empty post-note text, as shown above. +% +% More complex mixtures of text and citations can be generated with the +% all-purpose |\citetext| command in Section~\ref{sec:excite}. +% +% \iffalse +%<*notes> +\head{Multiple citations} +% \fi +Multiple citations may be made by including more than one +citation key in the |\cite| command argument. +% \textsl{If adjacent citations +% have the same author designation but different years, then the author +% names are not reprinted.} +\begin{quote} +\begin{tabular}{l@{\quad$\Rightarrow$\quad}l} + |\citet{jon90,jam91}| & Jones et al. (1990); James et al. (1991)\\ + |\citep{jon90,jam91}| & (Jones et al., 1990; James et al. 1991)\\ + |\citep{jon90,jon91}| & (Jones et al., 1990, 1991)\\ + |\citep{jon90a,jon90b}| & (Jones et al., 1990a,b) +\end{tabular} +\end{quote} + +% \iffalse +\head{Numerical mode} +% \fi +These examples are for author--year citation mode. In numerical mode, the +results are different. +\begin{quote} +\begin{tabular}{l@{\quad$\Rightarrow$\quad}l} + |\citet{jon90}| & Jones et al. [21]\\ + |\citet[chap.~2]{jon90}| & Jones et al. [21, chap.~2]\\[0.5ex] + |\citep{jon90}| & [21]\\ + |\citep[chap.~2]{jon90}| & [21, chap.~2]\\ + |\citep[see][]{jon90}| & [see 21]\\ + |\citep[see][chap.~2]{jon90}| & [see 21, chap.~2]\\[0.5ex] + |\citep{jon90a,jon90b}| & [21, 32] +\end{tabular} +\end{quote} +% \iffalse +%</notes> +% \fi +% The authors can only be listed if the \texttt{.bst} file supports +% author--year citations. The standard \texttt{.bst} files, such as +% \texttt{plain.bst} are numerical only and transfer no author--year +% information to \LaTeX. In this case, |\citet| prints ``\textbf{(author?)} +% [21].'' +% +% \DescribeMacro{\cite} +% In the original versions of \thestyle, the traditional |\cite| command was +% used for both textual and parenthetical citations. The presence of an empty +% optional text in square brackets signalled parenthetical. This syntax has been +% retained for compatibility, but is no longer encouraged. +% +% This means that |\cite| (without notes) is the same as |\citet| in +% author--year mode, whereas in numerical mode, it is the same as |\citep|. +% The starred version, as well as the one or two optional notes, may also be +% used. +% +% It is possible to have multiple citations sorted into the same sequence as +% they appear in the list of references, regardless of their order as +% arguments to the |\cite| commands. The option \texttt{sort} is required for +% this feature. See Section~\ref{sec:sort}. +% +% Some publishers require that the first citation of any given reference be +% given with the full author list, but that all subsequent ones with the +% abbreviated list. Include the option \texttt{longnamesfirst} to enable this for +% \thestyle. See Section~\ref{sec:long}. +% +% \subsection{Extended Citation Commands} +% \label{sec:excite} +% +% \DescribeMacro{\citealt} +% \DescribeMacro{\citealp} +% \DescribeMacro{\citetext} +% \DescribeMacro{\citenum} +% \iffalse +%<*notes> +\head{Suppressed parentheses} +% \fi +As an alternative form of citation, |\citealt| is the same as |\citet| but +\emph{without parentheses}. Similarly, |\citealp| is |\citep| without +parentheses. + +The |\citenum| command prints the citation number, without parentheses, even +in author--year mode, and without raising it in superscript mode. This is +intended to be able to refer to citation numbers without superscripting them. + +% Multiple references, notes, and the starred variants +% also exist for these, except for |\citenum|. +% +\begin{quote} +\begin{tabular}{l@{\quad$\Rightarrow$\quad}l} + |\citealt{jon90}| & Jones et al.\ 1990\\ + |\citealt*{jon90}| & Jones, Baker, and Williams 1990\\ + |\citealp{jon90}| & Jones et al., 1990\\ + |\citealp*{jon90}| & Jones, Baker, and Williams, 1990\\ + |\citealp{jon90,jam91}| & Jones et al., 1990; James et al., 1991\\ + |\citealp[pg.~32]{jon90}| & Jones et al., 1990, pg.~32\\ + |\citenum{jon90}| & 11\\ + |\citetext{priv.\ comm.}| & (priv.\ comm.) +\end{tabular} +\end{quote} +The |\citetext| command +allows arbitrary text to be placed in the current citation parentheses. +This may be used in combination with |\citealp|. +% For example, +% \begin{verbatim} +% \citetext{see \citealp{jon90}, or even better \citealp{jam91}} +% \end{verbatim} +% to produce (see Jones et al., 1990, or even better James et al., 1991). +% +% \iffalse +%</notes> +% \fi +% +% \DescribeMacro{\citeauthor} +% \DescribeMacro{\citeyear} +% \DescribeMacro{\citeyearpar} +% \DescribeMacro{\citefullauthor} +% \iffalse +%<*notes> +\head{Partial citations} +% \fi +In author--year schemes, it is sometimes desirable to be able to refer to +the authors without the year, or vice versa. This is provided with the +extra commands +\begin{quote} +\begin{tabular}{l@{\quad$\Rightarrow$\quad}l} + |\citeauthor{jon90}| & Jones et al.\\ + |\citeauthor*{jon90}| & Jones, Baker, and Williams\\ + |\citeyear{jon90}| & 1990\\ + |\citeyearpar{jon90}| & (1990) +\end{tabular} +\end{quote} +% \iffalse +%</notes> +% \fi +% There also exists a command |\citefullauthor| which is equivalent to +% |\citeauthor*|. +% +% If the full author information is missing, then |\citeauthor*| is +% the same as |\citeauthor|, printing only the abbreviated list. +% This also applies to the starred versions of |\citet| and |\citep|. +% +% If the author or year information is missing (as is the case with the +% standard \LaTeX{} \texttt{.bst} files), these commands issue a warning. +% +% \medskip\noindent +% \textbf{Note:} +% these commands may also be used with numerical +% citations, provided an author--year \texttt{.bst} file is being employed. +% +% \medskip\noindent +% \textbf{Note:} all |\cite..| commands have the same +% syntax, allowing multiple citations and up to two notes (there are, however, +% no starred |\citeyear| or |\citenum| variants). It does not really make much sense to add +% notes to |\citeyear| and |\citeauthor|, especially with multiple citations; +% however, this can be done, there will be no error message, but the results +% are sometimes strange. For example, in numerical mode, the notes are fully +% ignored, while in author--year mode, only the post-note is accepted. +% Multiple citations in |\citet| are also not recommended (nor are they in my +% opinion meaningful), but if they are used with notes, the pre-note will +% appear before each year, and the post-note only after the last year. These +% are admittedly bugs, but the effort to remove them is not justified by the +% questionable usefulness of these features. +% +% In summary, notes are only intended for |\citep| but they may also be used +% with |\citet| in author--year mode, with single citations. In any other +% situation, the results are unpredictable. +% +% \DescribeMacro{\Citet} +% \DescribeMacro{\Citep} +% \DescribeMacro{\Citealt} +% \DescribeMacro{\Citealp} +% \DescribeMacro{\Citeauthor} +% \subsection{Forcing Upper Cased Name} +% \iffalse +%<*notes> +\head{Forcing upper cased names} +% \fi +If the first author's name contains a \textsl{von} part, such as ``della +Robbia'', then |\citet{dRob98}| produces ``della Robbia (1998)'', even at the +beginning of a sentence. One can force the first letter to be in upper case +with the command |\Citet| instead. Other upper case commands also exist. +\begin{quote} +\begin{tabular}{rl@{\quad$\Rightarrow$\quad}l} + when & |\citet{dRob98}| & della Robbia (1998) \\ + then & |\Citet{dRob98}| & Della Robbia (1998) \\ + & |\Citep{dRob98}| & (Della Robbia, 1998) \\ + & |\Citealt{dRob98}| & Della Robbia 1998 \\ + & |\Citealp{dRob98}| & Della Robbia, 1998 \\ + & |\Citeauthor{dRob98}| & Della Robbia +\end{tabular} +\end{quote} +These commands also exist in starred versions for full author names. + +% \medskip\noindent +% \textbf{Note:} the coding for the upper casing commands is tricky and likely +% buggy. It operates on the names that are stored in the |\bibitem| entry, and +% works even if old style font commands are used; however, \LaTeXe\ commands will +% cause it to crash. Thus\\ +% \begin{tabular}[t]{ll} +% |\bibitem[{\it della Robbia}(1998)]{dRob98}| & is okay, but \\ +% |\bibitem[\textit{della Robbia}(1998)]{dRob98}| & crashes. +% \end{tabular} +% ^^A I hope to improve this situation in future. +% +% \iffalse +%</notes> +% \fi +% +% \subsection{Citation Aliasing} +% \DescribeMacro{\defcitealias} +% \DescribeMacro{\citetalias} +% \DescribeMacro{\citepalias} +% \iffalse +%<*notes> +\head{Citation aliasing} +% \fi +Sometimes one wants to refer to a reference with a special designation, +rather than by the authors, i.e. as Paper~I, Paper~II. Such aliases can be +defined and used, textual and/or parenthetical with: +\begin{quote} +\begin{tabular}{lcl} + |\defcitealias{jon90}{Paper~I}|\\ + |\citetalias{jon90}| & $\Rightarrow$ & Paper~I\\ + |\citepalias{jon90}| & $\Rightarrow$ & (Paper~I) +\end{tabular} +\end{quote} +These citation commands function much like |\citet| and |\citep|: they may +take multiple keys in the argument, may contain notes, and are marked as +hyperlinks. +% \iffalse +%</notes> +% \fi +% +% A warning is issued if the alias is used before it is defined, or if an alias +% is redefined for a given citation. No warning is issued if an alias is +% defined for a citation key that does not exist; the warning comes when it is +% used! +% +% See Section~\ref{sec:yearless} for an alternative means of citing with +% a code name. +% +% \subsection{Authorless and Yearless References}\label{sec:yearless} +% What does one do about references that do not have authors? This has long +% bothered me but I do have a suggestion. Standard \btx\ styles make use of a +% \texttt{KEY} field in the entries to be used for alphabetizing when the +% authors or editors are missing. The author--year styles go even further and +% insert the \texttt{KEY} field in place of the authors. One can imagine giving +% a code designation for the work at this point. For example, +% \begin{quote} +% \begin{verbatim} +% @MANUAL{handbk98, +% title = {Assembling Computers}, +% year = 1998, +% organization = {MacroHard Inc.}, +% key = "MH-MAN" +% } +% \end{verbatim} +% \end{quote} +% With \texttt{plain}, the key text \texttt{MH-MAN} is used only to order the +% reference, but with \texttt{plainnat} and other author--year styles, it is +% used in place of the authors. One can then refer to it as +% |\citeauthor{handbk98}| to get MH-MAN or as |\citetext{\citeauthor{handbk98}}| +% for (MH-MAN), a parenthetical citation. +% +% This can be greatly simplified if +% the bibliography style leaves the date blank in the |\bibitem| +% entry, as +% \begin{quote} +% |\bibitem[MH-MAN()]{handbk98}| +% \end{quote} +% for then \thestyle\ suppresses the date, preceding punctuation, and the +% braces for |\citet|. This means that |\citet| and |\citep| behave +% automatically like the two examples above. +% The date still may appear in the text of the reference. +% +% The \thestyle\ bibliography styles have been modified accordingly to omit +% the date from the |\bibitem| entry when missing authors and/or editors +% are replaced by key text. +% +% Similarly, if the year is missing, it will be left blank in the |\bibitem| +% entry; thus citing such a work will only produce the authors' names. +% +% \medskip\noindent +% \textbf{Note:} there are many other possibilities with this feature. One can +% even produce citations like those of the \texttt{alpha} bibliography style, +% by placing the citation code in place of the authors in the |\bibitem| entry +% and leaving the year blank. A second code (or maybe even the authors +% themselves) could be placed where the full author list normally appears, to +% be printed with the starred version of the |\cite| commands. For example, +% \begin{quote} +% |\bibitem[MH-MAN()MacroHard Inc.]{handbk98}| +% \end{quote} +% +% \subsection{Extra Features in the \texttt{plainnat} Family}\label{sec:url} +% +% The special \texttt{.bst} files for \thestyle\ mentioned in +% Section~\ref{sec:plainnat} have a number of extra fields compared to the +% original files: \\ +% \begin{tabular}{lp{10.5cm}} +% \texttt{ISBN} & for the ISBN number in books,\\ +% \texttt{ISSN} & for the ISSN number in periodicals,\\ +% \texttt{URL} & for the Internet address of online documents,\\ +% \texttt{DOI} & the \emph{Digital Object Identifier} now being used by many +% journals as a more robust alternative to URL,\\ +% \texttt{EID} & \emph{electronic ID}, a substitute for page numbers for online journals +% that also appear in print; also known as the \emph{sequence number} +% within the paper volume. +% \end{tabular}\\ +% +% Both the DOI and URL tend to be very long, causing ugly line breaks or +% sticking out into the margin. This can be avoided by loading the \texttt{url} +% package by Donald Arseneau, which allows text to be broken at punctuation +% marks without a hyphen. This package is automatically detected by \thestyle{} +% and appropriate commands redefined. URLs are printed in typewriter font, DOI +% in roman. Without the \texttt{url} package, these numbers are never broken. +% +% As pointed out in Section~\ref{sec:yearless}, the \texttt{KEY} field is +% treated differently by \texttt{plainnat} than in \texttt{plain}. Whereas the +% latter uses this field only to alphabetize entries without authors, +% \texttt{plainnat} actually inserts it in place of the author, both in the +% reference text and in the citation label (|\bibitem| entries). Furthermore, +% the year is left empty in |\bibitem| so that |\citep| prints only the +% ``author'' text, which is now the \texttt{KEY}. This should be some code +% designation for the work. +% +% \subsection{Selecting Citation Punctuation}\label{sec:bibpunct} +% +% \DescribeMacro{\setcitestyle} +% The above examples have been printed with the default citation style. +% It is possible to change this, as well as to select numerical or +% author--year mode, by means of the |\setcitestyle| command, which takes as argument +% a comma-separated list of keywords. (This command is new to version~8.) +% \iffalse +%<*notes> +\head{Selecting citation style and punctuation} +Use the command |\setcitestyle| with a list of comma-separated +keywords (without spaces) as argument. +% \fi +\begin{itemize} +\item + Citation mode: |authoryear| or |numbers| or |super| +% (corresponds to fourth argument of |\bibpunct|). + %^^A \ifNAT@numbers \ifNAT@super +\item + Braces: |round| or |square| or |open={|\emph{char}|},close={|\emph{char}|}| +% (corresponds to first and second arguments of |\bibpunct|). + %^^A \NAT@open \NAT@close +\item + Between citations: |semicolon| or |comma| or |citesep={|\emph{char}|}| +% (corresponds to third argument of |\bibpunct|). + %^^A \NAT@sep +\item + Between author and year: |aysep={|\emph{char}|}| +% (corresponds to fifth argument of |\bibpunct|). + %^^A \NAT@aysep +\item + Between years with common author: |yysep={|\emph{char}|}| +% (corresponds to sixth argument of |\bibpunct|). + %^^A \NAT@yrsep +\item + Text before post-note: |notesep={|\emph{text}|}| +% (corresponds to optional argument of |\bibpunct|). + %^^A \NAT@cmt +\end{itemize} +Defaults are |authoryear|, |round|, |comma|, |aysep={;}|, |yysep={,}|, +|notesep={, }| + +Example~1, |\setcitestyle{square,aysep={},yysep={;}}| changes the author--year +output of +\begin{quote} + |\citep{jon90,jon91,jam92}| +\end{quote} +into [Jones et al. 1990; 1991, James et al. 1992]. + +Example~2, |\setcitestyle{notesep={; },round,aysep={},yysep={;}}| changes the output of +\begin{quote} + |\citep[and references therein]{jon90}| +\end{quote} +into (Jones et al. 1990; and references therein). + +% \medskip\noindent +% \textbf{Note}: +% \begin{itemize} +% \item parameters not specified remain unchanged; +% \item the order of the keywords is unimportant; +% \item the punctuation between author and year applies only to author--year +% citations, not numerical; +% \item the |yysep| punctuation comes between years when multiple citations +% have the same, non-repeated authors; a space is always inserted +% as well; if the years too are same, the citation is printed as `2007a,b', +% without a space; to include a space, add it with |yysep={,~}|; +% \item for numerical citations with common authors, e.g, +% |\citet{jon90,jon91}| produces `Jones et al.\ [21, 22]' with the +% punctuation between the numbers; a space is automatically included for +% numbers, but not for superscripts. +% \item a single character does not really need to be in |{ }|, +% other than a comma; |yysep=;| is acceptable; +% \end{itemize} +% +% \DescribeMacro{\bibpunct} +% The older command for setting the citation style is |\bibpunct|, which +% takes one optional and six required arguments: +% \begin{enumerate} +% \item the opening bracket symbol, default = ( +% \item the closing bracket symbol, default = ) +% \item the punctuation between multiple citations, default = ; +% \item the letter `n' for numerical style, or `s' for numerical superscript +% style, any other letter for +% author--year, default = author--year; +% \item the punctuation that comes between the author names and the year +% \item the punctuation that comes between years or numbers when common author +% lists are suppressed (default = ,); +% \end{enumerate} +% +% The optional argument is the character preceding a post-note, default is a +% comma plus space. In redefining this character, one must include a space if +% one is wanted. +% +% The above |\setcitestyle| examples can be achieved with +% \begin{quote} +% |\bibpunct{[}{]}{,}{a}{}{;}| and\\ +% |\bibpunct[,~]{(}{)}{,}{a}{}{;}|. +% \end{quote} +% +% \iffalse +%</notes> +% \fi +% +% \subsection{Predefining a citation style}\label{sec:predef} +% +% \DescribeMacro{\bibstyle@xxx} +% \DescribeMacro{\citestyle} +% +% If a particular set of citation punctuations is commonly used, it is possible +% to store it in the local \thestyle\texttt{.cfg} and to recall it with +% |\citestyle{|\emph{name}|}|. The +% definition is done by creating a command |\bibstyle@|\emph{name}, which sets +% the desired citation style. +% +% For example, the American Geophysical Union (AGU) demands in its publications +% that citations be made with square brackets and separated by semi-colons. +% There is an \texttt{agu.bst} file to accomplish most of the formatting, but +% such punctuations are not included in it. Instead, \thestyle{} has the +% definition +% \begin{quote} +% |\newcommand{\bibstyle@agu}{\bibpunct{[}{]}{;}{a}{,}{,~}}| +% \end{quote} +% which allows this set to be selected with the command +% \begin{quote} +% |\citestyle{agu}| +% \end{quote} +% +% There is an additional feature to such predefined styles: \thestyle\ attempts +% to execute |\citestyle| at the beginning of the document +% with the name of the bibliography style, as given by +% the |\bibliographystyle| command (and stored in the \texttt{.aux} file). +% This means that a citation style can be +% directly associated with a \texttt{.bst} file. Such implicit styles are +% immediately overwritten by any explicit style specifications, such as package +% options, or by |\setcitestyle|, |\bibpunct|, or |\citestyle| commands. +% +% Predefined citation styles are contained within the \thestyle\ code for the +% following bibliography styles: +% \begin{description} +% \item[\texttt{plain}] etc. (the 4 base styles): square braces, numerical, commas +% \item[\texttt{plainnat}] etc.: square braces, author--year, commas +% \item[\texttt{agu}] (American Geophysical Union): square, author--year, semi-colon +% \item[\texttt{egu}] (European Geosciences Union): round, author--year, semi-colon +% \item[\texttt{agms, dcu, kluwer}] (Harvard set): round, author--year +% \item[\texttt{cospar}] (Committe on Space Research): slashes, numerical, comma +% \item[\texttt{nature}] (Journal \textsl{Nature}): superscripts +% \end{description} +% There are others but they are mainly for my personal convenience. The above +% represent most of the major variations and can be used as required. The +% automatic association with other bibliography styles can only be achieved by +% putting the definitions into the local \thestyle\texttt{.cfg}. +% +% Note that the predefinitions for |plain| and |plainnat| specify square +% braces, thus changing the normal \thestyle\ default of round parentheses. +% +% The style defining commands may contain more than just |\bibpunct| +% or |\setcitestyle|. +% Some numerical citation scheme require even more changes. For example, +% \textsl{Nature} not only uses superscripted numbers for +% citations, it also prints the numbers in the list of references without +% the normal square brackets. To +% accommodate this, \thestyle{} contains the style definition +% \begin{quote}\begin{verbatim} +% \newcommand{\bibstyle@nature}% +% {\bibpunct{}{}{,}{s}{}{\textsuperscript{,}}% +% \renewcommand\bibnumfmt[1]{##1.}} +% \end{verbatim} +% \end{quote} +% The redefined |\bibnumfmt| command specifies how the reference numbers +% are to be formatted in the list of references itself. +% +% \subsection{Priority of Style Commands}\label{sec:priority} +% The citation style (punctuation and mode) can be selected by means of the +% |\setcitestyle|, |\bibpunct|, |\citestyle| commands or via +% |\bibliographystyle{|\textit{bst}|}| with a predefined |\bibstyle@|\textit{bst}. +% They can also be selected by package options +% (Section~\ref{sec:opts}). What happens if there are several conflicting +% selections? +% +% The lowest priority is assigned to the |\bibliographystyle| +% command, since this is implicit and not transparent to the user. The +% package options have the next priority. Finally, any selection by +% |\setcitestyle|, +% |\bibpunct| and/or |\citestyle| overrides those of the other methods. +% +% \subsection{Other Formatting Options} +% +% \iffalse +%<*notes> +\head{Other formatting options} +% \fi +% +% \DescribeMacro{\bibsection} +% The list of references normally appears as a |\section*| or |\chapter*|, +% depending on the main class. If one wants to redesign one's own heading, +% say as a numbered section with |\section|, then |\bibsection| may be +% redefined by the user accordingly. +% +% \iffalse +Redefine |\bibsection| to the desired sectioning command for introducing +the list of references. This is normally |\section*| or |\chapter*|. + +% \fi +% +% \DescribeMacro{\bibpreamble} +% A preamble appearing after the |\bibsection| heading may be inserted before +% the actual list of references by redefining |\bibpreamble|. This will appear in +% the normal text font unless it contains font declarations. The +% |\bibfont| applies to the list of references, not to this preamble. +% +% \iffalse +Redefine |\bibpreamble| to be any text that is to be printed after the heading but +before the actual list of references. + +% \fi +% +% \DescribeMacro{\bibfont} +% The list of references is normally printed in the same font size and +% style as the main body. However, it is possible to redefine |\bibfont| +% to be font commands that are in effect within the \texttt{thebibliography} +% environment after any preamble. For example, +% \begin{quote} +% |\renewcommand{\bibfont}{\small}| +% \end{quote} +% \iffalse +Redefine |\bibfont| to be a font declaration, e.g.\ |\small| to apply to +the list of references. + +% \fi +% +% \DescribeMacro{\citenumfont} +% Numerical citations may be printed in a different font. Define |\citenumfont| +% to be a font declaration like |\itshape| or even a command taking arguments +% like |\textit|. +% \begin{quote} +% |\renewcommand{\citenumfont}[1]{\textit{#1}}| +% \end{quote} +% The above is better than |\itshape| since it automatically adds italic +% correction. +% \iffalse +Redefine |\citenumfont| to be a font declaration or command like |\itshape| +or |\textit|. + +% \fi +% +% \DescribeMacro{\bibnumfmt} +% The format of the numerical listing in the reference list may also be changed +% from the default [32] by redefining |\bibnumfmt|, for example +% \begin{quote} +% |\renewcommand{\bibnumfmt}[1]{\textbf{#1}:}| +% \end{quote} +% to achieve \textbf{32}: instead. +% \iffalse +Redefine |\bibnumfmt| as a command with an argument to format the numbers in +the list of references. The default definition is |[#1]|. + +% \fi +% +% \DescribeMacro{\bibhang} +% The list of references for author--year styles uses a hanging indentation +% format: the first line of each reference is flush left, the following lines +% are set with an indentation from the left margin. This indentation is 1~em +% by default but may be changed by redefining (with |\setlength|) the +% length parameter |\bibhang|. +% +% \iffalse +The indentation after the first line of each reference is given by +|\bibhang|; change this with the |\setlength| command. + +% \fi +% \DescribeMacro{\bibsep} +% The vertical spacing between references in the list, whether author--year +% or numerical, is controlled by the length |\bibsep|. If this is set to +% 0~pt, there is no extra line spacing between references. The default +% spacing depends on the font size selected in |\documentclass|, and is +% almost a full blank line. Change this by redefining |\bibsep| with +% |\setlength| command. +% +% \iffalse +The vertical spacing between references is set by |\bibsep|; change this with +the |\setlength| command. + +%</notes> +% \fi +% +% \subsection{Automatic Indexing of Citations} +% +% \DescribeMacro{\citeindextrue} +% \DescribeMacro{\citeindexfalse} +% \iffalse +%<*notes> +\head{Automatic indexing of citations} +% \fi +If one wishes to have the citations entered in the \texttt{.idx} indexing +file, it is only necessary to issue |\citeindextrue| at any point in the +document. All following |\cite| commands, of all variations, then insert +the corresponding entry to that file. With |\citeindexfalse|, these +entries will no longer be made. + +% \iffalse +%</notes> +% \fi +% The |\bibitem| commands in the \texttt{thebibliography} environment will +% also make index entries. If this is not desired, then issue +% |\citeindexfalse| before |\bibliography| or |\begin{thebibliography}|. +% +% Of course, |\makeindex| must also be issued in the preamble to activate +% indexing, as usual. Otherwise, no indexing is done at all. +% +% Make sure that the document has been processed at least twice after the +% last \btx\ run before running the \texttt{makeindex} program. +% +% \DescribeMacro{\NAT@idxtxt} +% The form of the index entries is set by the internal |\NAT@idxtxt|, which +% can be redefined by hackers if wanted (in the \thestyle\texttt{.cfg} file +% please). By default, it prints the short author list plus date or number in the +% current parenthesis style and citation mode. +% +% The \thestyle\ package can also be used with the \texttt{index} package of +% David~M. Jones. The order in which the packages are loaded is not +% important. +% +% \DescribeMacro{\citeindextype} +% In that package, multiple index lists may be made by means of a |\newindex| +% command. For example, it may be desirable to put all the citation indexing +% into a separate list. First that list must be initiated with, e.g., +% \begin{quote} +% |\newindex{cite}{ctx}{cnd}{List of Citations}| +% \end{quote} +% and then the automatic citation indexing associated with this list with the +% \thestyle\ command +% \begin{quote} +% |\renewcommand{\citeindextype}{cite}| +% \end{quote} +% See the documentation for \texttt{index.sty} for details. +% +% \subsection{Hyper\TeX\ Compatibility} +% The \thestyle\ package is compatible with the \texttt{hyperref} +% package of Sebastian Rahtz and Heiko Oberdiek. +% , for use with +% \LaTeX\ $\rightarrow$ HTML conversions, pdf\TeX, \texttt{pdfmark}. +% The compatibility is of a mutual nature: both packages contain +% coding that interact with that of the other. +% +% There is a special option to the \texttt{hyperref} package: \texttt{breaklinks} +% which allows the link text to be split over to the next +% line, avoiding many overfull line messages. By default, the link text is +% restricted to be on one line. For numerical citations, this may be desirable, +% but for author--year ones with long link texts, it is not. +% +% \subsection{Multiple Bibliographies in One Document}\label{sec:chapbib} +% +% \iffalse +%<*notes> +\head{Use with \texttt{chapterbib} package} +% \fi + +The \thestyle\ package is compatible with the \texttt{chapterbib} package +% of Donald Arseneau and Niel Kempson, +which makes it possible to have several bibliographies in one document. +% The usual application is to have bibliographies in each chapter of a book, +% especially if they have been written by different authors. +% +% The \texttt{chapterbib} package works in a very natural way for the +% author; only the editor who puts all the chapters together into one book +% has to do some extra work. + +The package makes use of the |\include| command, and each |\include|d file +has its own bibliography. +% For large books, it makes very good sense to take advantage of this feature +% in any case. +% +% To review the use of |\include|, recall that the main file +% \begin{verbatim} +% \documentclass{...} +% \includeonly{ch2} +% \begin{document} +% \include{ch1} +% \include{ch2} +% \include{ch3} +% \end{document} +% \end{verbatim} +% will process only the file \texttt{ch2.tex} as though the files +% \texttt{ch1.tex} and \texttt{ch3.tex} were also present. That is, all +% counters, especially the page and section numbers, as well as +% cross-referencing definitions, will function as if the whole document +% were processed. The trick is that each |\include|d file has it own +% \texttt{.aux} file containing these definitions, and they are all read +% in every time, even if the corresponding \texttt{.tex} file is not. The +% \texttt{.aux} files also contain the citation information for \btx, +% something that the \texttt{chapterbib} package exploits. +% +% If |\usepackage{chapterbib}| has been given, the keys in each |\cite| +% and |\bibitem| command are associated with the current |\include|d file +% and are distinguished from the identical key in a different file. Each of +% these files must contain its own |\bibliography| and |\bibliographystyle| +% commands. One processes \btx\ on each file separately before processing +% it under \LaTeX\ (at least twice). +% +% \subsubsection{Special Considerations for \thestyle\ and +% \texttt{chapterbib}} + +The order in which the \texttt{chapterbib} and \thestyle\ packages are loaded +is unimportant. + +The \texttt{chapterbib} package provides an option \texttt{sectionbib} +that puts the bibliography in a |\section*| instead of |\chapter*|, +something that makes sense if there is a bibliography in each chapter. +This option will not work when \thestyle\ is also loaded; instead, add +the option to \thestyle. +% (The \texttt{sectionbib} option can always be +% given, but it only has meaning for the \texttt{book} and \texttt{report} +% classes, or for classes derived from them.) + +Every |\include|d file must contain its own +|\bibliography| command where the bibliography is to appear. The database +files listed as arguments to this command can be different in each file, +of course. However, what is not so obvious, is that each file must also +contain a |\bibliographystyle| command, with possibly differing arguments. + +As of version~8.0, the citation style, including mode (author--year or +numerical) may also differ between chapters. The |\setcitestyle| command +% as well as |\bibpunct| and |\citestyle| +can be issued at any point in the document, in particular in different +chapters. +%(And this is the only time it would make sense to do so.) +% +% \iffalse +%</notes> +% \fi +% +% \subsection{Sorting and Compressing Numerical Citations} +% \label{sec:sort} +% +% Another package by Donald Arseneau, \texttt{cite.sty}, reimplements the +% entire (numerical) citation system such that one can control the +% punctuation and citation format, all of which is done by \thestyle\ as +% well. However, it also can sort and compress numerical citations, +% something that is required by some journals. +% +% What this means is that when multiple citations are given with a single +% |\cite| command, the normal order of the numbers is in the sequence +% given. This is usually a wild list of numbers, such as [4,2,8,3]. With +% the \texttt{cite} package, this list becomes [2--4,8]. +% +% It is impossible to make the \texttt{cite} and \thestyle\ packages +% compatible, since both reimplement |\cite| from scratch. Instead, I have +% taken over some of the coding from \texttt{cite.sty}, modifying it for +% \thestyle{}. This coding is activated by including one of the options +% \texttt{sort} or \texttt{sort\&compress} in the |\usepackage| command. +% +% For author--year citations, the option \texttt{sort} orders the citations in +% a single |\citep| or |\citet| command into the sequence in which they appear +% in the list of references. This is normally alphabetical first, year second. +% This should avoid citations of the type: ``James et~al.\ (1994b,a)''. For +% author--year mode, the \texttt{sort\&compress} option is identical to +% \texttt{sort}. +% +% \iffalse +%<*notes> +\head{Sorting and compressing citations} +Do not use the \texttt{cite} package with \thestyle; rather use one of the +options \texttt{sort}, \texttt{compress}, or \texttt{sort\&compress}. + +These also work with author--year citations, making multiple citations appear +in their order in the reference list. + +%</notes> +% \fi +% +% \subsection{Merged Numerical References} +% \label{sec:merge} + +% \iffalse +%<*notes> +\head{Merged Numerical References} +Do not use the \texttt{mcite} package with \thestyle; rather use the package option \texttt{merge}. + +%</notes> +% \fi +% \begin{quote} +% \textbf{Note:} the |merge| coding was contributed by +% Arthur Ogawa for the American Physical Society. +% \end{quote} +% +% Thorsten Ohl's \texttt{mcite} package cannot be used together with +% \thestyle. Instead, one must invoke the package option +% \texttt{merge} with the |\usepackage| statement. +% +% \iffalse +%<*notes> +% \fi + +With this option in effect, citation keys within a multiple |\citep| command +may contain a leading * that causes them to be merged in the bibliography +together with the previous citation as a single entry with a single reference +number. For example, |\citep{feynmann,*salam,*epr}| produces a single number, +and all three references are listed in the bibliography under one entry with +that number. +% +% Certain restrictions of Thorsten Ohl's \texttt{mcite} package are lifted: a * +% prefix can be used with any citation key, and Ohl's restrictions on syntax do +% not apply. +% +% An additional feature allows text to be inserted inside the bibliography entry: +% within the argument of \verb+\citep+, a cite key may be preceded by two optional arguements, e.g., +% \verb+\citep{[+\emph{pre}\verb+][+\emph{post}\verb+]+\emph{key}\verb+}+, +% where \emph{pre} represents text to be prepended to the reference (\verb+\bibitem+ content), +% with \emph{post} appended thereto. +% +% Thus it is possible for the user to mark up the document: +% \begin{verbatim} +% text \citep{*[{See, e.g., }][ for a simpler explanation]ablebaker} +% \end{verbatim} +% The above example illustrates the use of the star-form and both optional arguments. +% +% \medskip\noindent +% \textbf{Caution:} Because the comma (,) character is part of the syntax of \verb+\citep+, +% and because the bracket delimiters ([]) are mere text characters and not true delimiters (like the braces), +% you must enclose the optional argument in braces (\verb+{}+) if a comma is present in the +% argument (that goes for brackets, too, of course). + +The \texttt{elide} option also activates the merging features, but also sees +to it that common parts of the merged references (e.g., authors) are not +repeated but are written only once in the single bibliography entry. + +The \texttt{mcite} option turns off the merging and eliding features, but +allows the special syntax (the * and optional inserted texts) to be ignored. + +These functions are available only to numerical-mode citations, and only when +used parenthetically, similar to the restrictions on \texttt{sort} and +\texttt{compress}. + +They also require special \texttt{.bst} files, as provided for example by the +American Physical Society for their REV\TeX\ class. +% \iffalse +%</notes> +% \fi +% +% \subsection{Long Author List on First Citation}\label{sec:long} +% +% A feature that has often been requested by otherwise happy users of +% \thestyle\ is one that is found in the \texttt{harvard} package as +% standard: with the first citation of any reference, the full author list is +% printed, and afterwards only the abbreviated list. One can control this +% with |\citet*| for the first citation, and |\citet| or |\citep| thereafter. +% However, the automatic feature is very desired. +% +% This can be activated with the option +% \texttt{longnamesfirst}. +% +% \iffalse +%<*notes> +\head{Long author list on first citation} +Use option \texttt{longnamesfirst} to have first citation automatically give +the full list of authors. + +Suppress this for certain citations with |\shortcites{|\emph{key-list}|}|, +given before the first citation. + +%</notes> +% \fi +% +% \DescribeMacro{\shortcites} +% Some references have so many authors that you want to suppress the +% automatic long list only for them. In this case, issue +% \begin{quote} +% |\shortcites|\marg{key-list} +% \end{quote} +% before the first citations, and those included in \emph{key-list} will have +% a short list on their first citation. +% +% Full author lists can still be forced at any time with the starred +% variants. +% +% \section{Numerical Citations with Author--Year Styles}\label{sec:6.0} +% +% It is possible to produce numerical citations with any author-year +% \texttt{.bst} file, with minimal change to the text. The commands |\citet| +% and |\citep| will produce sensible results in both modes, without any special +% editing. Obviously, the opposite is not possible; a \texttt{.bst} file +% intended for numerical citation can never produce author--year citations, +% simply because the information is not transferred to the auxiliary file. +% +% \subsection{Selecting Numerical Mode} +% By default, \thestyle{} is in author--year mode. This can be changed by +% \begin{enumerate} +% \item selecting a numerical bibliography style with predefined +% citation style, defined either in the package or in the local +% configuration file; +% +% \item giving options \texttt{numbers} or \texttt{super} to the +% |\usepackage| command; +% +% \item issuing |\setcitestyle{numbers}|; +% +% \item issuing |\citestyle| with the name of a predefined numerical +% bibliography style (like \texttt{plain} and use it with \texttt{plainnat}). +% \end{enumerate} +% +% The \thestyle{} package will automatically switch to numerical mode if +% any one of the |\bibitem| entries fails to conform to the possible +% author--year formats. There is no way to override this, since such an +% entry would cause trouble in the author--year mode. +% +% There are certain special `numerical' styles, like that of the standard +% \texttt{alpha.bst}, which include a non-numerical label in place of the +% number, in the form +% \begin{quote} |\bibitem[ABC95]{able95}| \end{quote} +% As far as \thestyle\ is concerned, this label does not conform to the +% author--year possibilities and is therefore considered to be numerical. +% The citation mode switches to numerical, and |\cite{able95}| prints +% [ABC95]. +% +% See however, the end of Section~\ref{sec:yearless} for another possibility. +% The above result can be achieved with +% \begin{quote} |\bibitem[ABC95()]{able95}| \end{quote} +% +% \section{Local Configuration} +% It is possible to add a local configuration file +% \thestyle\texttt{.cfg}, which is read in, if it exists, at +% the end of the package. It may thus contain coding to supecede that in +% the package, although its main purpose is to allow the user to add his or her +% own |\bibstyle@|\textit{bst} definitions to couple citation punctuation +% with local bibliography styles or for use with |\citestyle|. +% +% \iffalse +%<*notes> +\head{Local configuration} +Any local recoding or definitions can be put in \thestyle\texttt{.cfg} which +is read in after the main package file. + +%</notes> +% \fi +% +% \section{Package Options}\label{sec:opts} +% When a package is loaded with |\usepackage|, one can add options to select +% different features, as +% \begin{quote} +% |\usepackage[|\emph{options}|]{|\thestyle|}| +% \end{quote} +% \iffalse +%<*notes> +\head{Options that can be added to \texttt{\char`\\ usepackage}} +% \fi +% The options available provide another means of specifying the +% punctuation for citations: +\begin{description} +\item[\ttfamily round] (default) for round parentheses; +\item[\ttfamily square] for square brackets; +\item[\ttfamily curly] for curly braces; +\item[\ttfamily angle] for angle brackets; +\item[\ttfamily semicolon] (default) to separate multiple citations with + semi-colons; +\item[\ttfamily colon] the same as \texttt{semicolon}, an earlier mistake in + terminology; +\item[\ttfamily comma] to use commas as separators; +\item[\ttfamily authoryear] (default) for author--year citations; +\item[\ttfamily numbers] for numerical citations; +\item[\ttfamily super] for superscripted numerical citations, as in + \textsl{Nature}; +\item[\ttfamily sort] orders multiple citations into the sequence in + which they appear in the list of references; +\item[\ttfamily sort\&compress] as \texttt{sort} but in addition multiple + numerical citations are compressed if possible (as 3--6, 15); +\item[\ttfamily compress] to compress without sorting, so compression only + occurs when the given citations would produce an ascending sequence of + numbers; +\item[\ttfamily longnamesfirst] makes the first citation of any reference + the equivalent of the starred variant (full author list) and subsequent + citations normal (abbreviated list); +\item[\ttfamily sectionbib] redefines |\thebibliography| to issue + |\section*| instead of |\chapter*|; valid only for classes with a + |\chapter| command; to be used with the \texttt{chapterbib} package; +\item[\ttfamily nonamebreak] keeps all the authors' names in a citation on + one line; causes overfull hboxes but helps with some \texttt{hyperref} + problems; +\item[\ttfamily merge] to allow the * prefix to the citation key, + and to merge such a citation's reference with that of the previous + citation; +\item[\ttfamily elide] to elide common elements of merged references, like + the authors or year; +\item[\ttfamily mcite] to recognize (and ignore) the merging syntax. +\end{description} +% The options \texttt{curly} and \texttt{angle} are not really serious; I only +% added them because that completes the normal list of bracket types. The only +% other citation possibilities I know have really encountered are solidus, e.g. /21/, +% or something like (Ref. 21). These must be set with |\setcitestyle{open={/},close={/}}|. +% \iffalse +%</notes> +% \fi +% +% The package options are overwritten by any explicit |\setcitestyle|, |\bibpunct|, +% or |\citestyle| commands. And both these commands and the package options +% turn off the automatic setting with |\bibliographystyle|, if effective. +% +% \section{Reference Sheet} +% +% A summary of the main points on using \thestyle\ can be obtained by +% \LaTeX{}ing the file \texttt{natnotes.tex}, which is extracted from the main +% source file \thestyle\texttt{.dtx} with the \texttt{docstrip} option +% \texttt{notes}. This is intended to act as a handy reference sheet. +% +% This file should be extracted automatically by the supplied installation file, +% \thestyle\texttt{.ins}. +% +%^^A The following is a summary that goes into the .sty file +%^^A It is not printed in the documentation, since the Reference Sheet exists +% \iffalse +%<*package> + % This package reimplements the LaTeX \cite command to be used for various + % citation styles, both author-year and numerical. It accepts BibTeX + % output intended for many other packages, and therefore acts as a + % general, all-purpose citation-style interface. + % + % With standard numerical .bst files, only numerical citations are + % possible. With an author-year .bst file, both numerical and + % author-year citations are possible. + % + % If author-year citations are selected, \bibitem must have one of the + % following forms: + % \bibitem[Jones et al.(1990)]{key}... + % \bibitem[Jones et al.(1990)Jones, Baker, and Williams]{key}... +%<*apalike|all> + % \bibitem[Jones et al., 1990]{key}... +%</apalike|all> +%<*newapa|chicago|all> + % \bibitem[\protect\citeauthoryear{Jones, Baker, and Williams}{Jones + % et al.}{1990}]{key}... + % \bibitem[\protect\citeauthoryear{Jones et al.}{1990}]{key}... +%</newapa|chicago|all> +%<*astron|all> + % \bibitem[\protect\astroncite{Jones et al.}{1990}]{key}... +%</astron|all> +%<*authordate|all> + % \bibitem[\protect\citename{Jones et al., }1990]{key}... +%</authordate|all> +%<*harvard|all> + % \harvarditem[Jones et al.]{Jones, Baker, and Williams}{1990}{key}... +%</harvard|all> + % + % This is either to be made up manually, or to be generated by an + % appropriate .bst file with BibTeX. + % Author-year mode || Numerical mode + % Then, \citet{key} ==>> Jones et al. (1990) || Jones et al. [21] + % \citep{key} ==>> (Jones et al., 1990) || [21] + % Multiple citations as normal: + % \citep{key1,key2} ==>> (Jones et al., 1990; Smith, 1989) || [21,24] + % or (Jones et al., 1990, 1991) || [21,24] + % or (Jones et al., 1990a,b) || [21,24] + % \cite{key} is the equivalent of \citet{key} in author-year mode + % and of \citep{key} in numerical mode + % Full author lists may be forced with \citet* or \citep*, e.g. + % \citep*{key} ==>> (Jones, Baker, and Williams, 1990) + % Optional notes as: + % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) + % \citep[e.g.,][]{key} ==>> (e.g., Jones et al., 1990) + % \citep[see][pg. 34]{key}==>> (see Jones et al., 1990, pg. 34) + % (Note: in standard LaTeX, only one note is allowed, after the ref. + % Here, one note is like the standard, two make pre- and post-notes.) + % \citealt{key} ==>> Jones et al. 1990 + % \citealt*{key} ==>> Jones, Baker, and Williams 1990 + % \citealp{key} ==>> Jones et al., 1990 + % \citealp*{key} ==>> Jones, Baker, and Williams, 1990 + % Additional citation possibilities (both author-year and numerical modes) + % \citeauthor{key} ==>> Jones et al. + % \citeauthor*{key} ==>> Jones, Baker, and Williams + % \citeyear{key} ==>> 1990 + % \citeyearpar{key} ==>> (1990) + % \citetext{priv. comm.} ==>> (priv. comm.) + % \citenum{key} ==>> 11 [non-superscripted] + % Note: full author lists depends on whether the bib style supports them; + % if not, the abbreviated list is printed even when full requested. + % + % For names like della Robbia at the start of a sentence, use + % \Citet{dRob98} ==>> Della Robbia (1998) + % \Citep{dRob98} ==>> (Della Robbia, 1998) + % \Citeauthor{dRob98} ==>> Della Robbia + % + % + % Citation aliasing is achieved with + % \defcitealias{key}{text} + % \citetalias{key} ==>> text + % \citepalias{key} ==>> (text) + % + % Defining the citation mode and punctual (citation style) + % \setcitestyle{<comma-separated list of keywords, same + % as the package options>} + % Example: \setcitestyle{square,semicolon} + % Alternatively: + % Use \bibpunct with 6 mandatory arguments: + % 1. opening bracket for citation + % 2. closing bracket + % 3. citation separator (for multiple citations in one \cite) + % 4. the letter n for numerical styles, s for superscripts + % else anything for author-year + % 5. punctuation between authors and date + % 6. punctuation between years (or numbers) when common authors missing + % One optional argument is the character coming before post-notes. It + % appears in square braces before all other arguments. May be left off. + % Example (and default) \bibpunct[, ]{(}{)}{;}{a}{,}{,} + % + % To make this automatic for a given bib style, named newbib, say, make + % a local configuration file, natbib.cfg, with the definition + % \newcommand{\bibstyle@newbib}{\bibpunct...} + % Then the \bibliographystyle{newbib} will cause \bibstyle@newbib to + % be called on THE NEXT LATEX RUN (via the aux file). + % + % Such preprogrammed definitions may be invoked anywhere in the text + % by calling \citestyle{newbib}. This is only useful if the style specified + % differs from that in \bibliographystyle. + % + % With \citeindextrue and \citeindexfalse, one can control whether the + % \cite commands make an automatic entry of the citation in the .idx + % indexing file. For this, \makeindex must also be given in the preamble. + % + % Package Options: (for selecting punctuation) + % round - round parentheses are used (default) + % square - square brackets are used [option] + % curly - curly braces are used {option} + % angle - angle brackets are used <option> + % semicolon - multiple citations separated by semi-colon (default) + % colon - same as semicolon, an earlier confusion + % comma - separated by comma + % authoryear - selects author-year citations (default) + % numbers- selects numerical citations + % super - numerical citations as superscripts + % sort - sorts multiple citations according to order in ref. list + % sort&compress - like sort, but also compresses numerical citations + % compress - compresses without sorting + % longnamesfirst - makes first citation full author list + % sectionbib - puts bibliography in a \section* instead of \chapter* + % merge - allows the citation key to have a * prefix, + % signifying to merge its reference with that of the previous citation. + % elide - if references are merged, repeated portions of later ones may be removed. + % mcite - recognizes and ignores the * prefix for merging. + % Punctuation so selected dominates over any predefined ones. + % Package options are called as, e.g. + % \usepackage[square,comma]{natbib} + % LaTeX the source file natbib.dtx to obtain more details + % or the file natnotes.tex for a brief reference sheet. + %----------------------------------------------------------- +%</package> +% \fi +% +% \section{Options with \texttt{docstrip}} +% The source \texttt{.dtx} file is meant to be processed with +% \texttt{docstrip}, for which a number of options are available: +% \begin{description} +% \item[\ttfamily all] includes all of the other interfaces; +% +% \item[\ttfamily apalike] allows interpretation of minimal \texttt{apalike} +% form of |\bibitem|; +% +% \item[\ttfamily newapa] allows |\citeauthoryear| to be in the optional +% argument of |\bibitem| along with the punctuation commands of +% \texttt{newapa.sty}; +% +% \item[\ttfamily chicago] is the same as \texttt{newapa}; +% +% \item[\ttfamily harvard] includes interpretation of |\harvarditem|; +% +% \item[\ttfamily astron] allows |\astroncite| to appear in the optional +% argument of |\bibitem|; +% +% \item[\ttfamily authordate] adds the syntax of the |\citename| command. +% +% \end{description} +% +% The remaining options are: +% \begin{description} +% \item[\ttfamily package] to produce a \texttt{.sty} package file with most +% comments removed; +% +% \item[\ttfamily notes] extracts a summary of usage to be used as a +% reference sheet; the resulting file is to be \LaTeX{}ed; +% +% \item[\ttfamily driver] to produce a driver \texttt{.ltx} file that will +% print out the documentation when \LaTeX'd. This file can be modified +% to produce various alternatives (page size, fonts, manual only, or with +% annotated code). The \thestyle\texttt{.dtx} file is itself such a driver +% but it should never, ever be edited by a user. +% +% \end{description} +% The source file \texttt{\filename.dtx} is itself a driver file and can +% be processed directly by \LaTeX. +% +% +% \section{Other Author--Year Solutions} +% \begin{quote}\slshape +% This section is of historical interest only. +% \end{quote} +% +% Before \thestyle{} was published in 1993, there were several other attempts +% to provide author--year citations, some of which inspired \thestyle. A few of +% these are still maintained and used, and for that reason, \thestyle{} has +% attempted to include their |\bibitem| syntaxes, to be compatible with those +% \texttt{.bst} files. +% +% Most of these `packages' are really \LaTeX~2.09 style files, so do not have +% features available with the modern \LaTeXe. +% +% \subsection{The \texttt{natsci.bst} Style} +% What gave me my first inspiration was Stephen Gildea's \texttt{natsci.bst} +% for use with his \texttt{agujgr.sty} file. This showed me that the problem +% was solvable. However, Gildea's formats |\bibitem| with just +% the abbreviated +% authors and year. Thus only parenthetical citations can be accommodated. +% +% The name \texttt{natsci} stands for \emph{natural sciences}, and it was this +% that led to the name \thestyle. (This is admittedly an ugly name, but it is +% now established and cannot be changed so easily.) +% +% \subsection{The \texttt{apalike.bst} Style} +% Oren Patashnik, the originator of \btx{} and the standard \texttt{.bst} +% files, has also worked on an author--year style, called \texttt{apalike.bst} +% with a corresponding \texttt{apalike.sty} to support it. Again, only the +% parenthetical citation is provided. Its functionality is identical to that +% of the \texttt{natsci} files. +% +% The form of the \texttt{thebibliography} entries in this system is +% \begin{quote} +% |\bibitem[Jones et al., 1990]{jon90}...| +% \end{quote} +% This is the most minimal form that can +% be given. I name it the \texttt{apalike} variant, after Patashnik's +% \texttt{apalike.bst} and \texttt{apalike.sty}. However, there could be many +% independent \texttt{.bst} files that follow this line, such as the +% \texttt{natsci} styles. +% +% The bibliography style files belonging to this group include: +% \begin{quote} +% \texttt{apalike}, \texttt{apalike2}, \texttt{cea}, \texttt{cell}, +% \texttt{jmb}, \texttt{phapalik}, \texttt{phppcf}, \texttt{phrmp} +% \end{quote} +% +% \subsection{The \texttt{newapa} Style} +% A major improvement was achieved with \texttt{newapa.bst} and the +% accompanying \texttt{newapa.sty} files by Stephen N. Spencer and Young U. +% Ryu. Under their system, three separate items of information are included +% in the |\bibitem| label, to be used as required. These are: the full +% author list, the abbreviated list, and the year. This is accomplished by +% means of a |\citeauthoryear| command included in the label, as +% \begin{quote} +% |\bibitem[\protect\citeauthoryear{Jones, Barker,|\\ +% | and Williams}{Jones et al.}{1990}]{jon90}...| +% \end{quote} +% Actually, this only illustrates the basic structure of |\citeauthoryear|; +% the \texttt{newapa} files go even further to replace some words and +% punctuation +% with commands. For example, the word `and' above is really +% |\betweenauthors|, something that must be defined in the \texttt{.sty} file. +% Of course, |\citeauthoryear| is also defined in that file. A +% number of different |\cite| commands are available to print out the +% citation with complete author list, with the short list, with or without +% the date, the textual or parenthetical form. +% +% Thus the |\citeauthoryear| entry in |\bibitem| is very flexible, +% permitting the style file to generate every citation form that one might +% want. It is used by a number of other styles, with corresponding +% \texttt{.sty} files. They all appear to have been inspired by +% \texttt{newapa.bst}, although they lack the extra punctuation commands. +% +% Bibliographic style files belonging to the \texttt{newapa} group include +% \begin{quote} +% \texttt{newapa}, \texttt{chicago}, \texttt{chicagoa}, \texttt{jas99}, +% \texttt{named} +% \end{quote} +% +% \noindent +% \textbf{Note:} the last of these, \texttt{named.bst}, uses |\citeauthoryear| in a +% slightly different manner, with only two arguments: the short list and +% year. +% +% \subsection{The Harvard Family} +% The same effect is achieved by a different approach in the Harvard family +% of bibliographic styles. Here a substitute for |\bibitem| is used, as +% \begin{quote} +% |\harvarditem[Jones et al.]{Jones, Baker, and|\\ +% | Williams}{1990}{jon90}...| +% \end{quote} +% The accompanying interface package file is called \texttt{harvard.sty} +% and is written by Peter Williams and Thorsten Schnier. It +% defines |\harvarditem| as well as the citation commands |\cite|, for +% parenthentical, and |\citeasnoun|, for textual citations. The first +% citation uses the long author list, following ones the shorter list, if +% it has been given in the optional argument to |\harvarditem|. +% +% Bibliography styles belonging to the Harvard family are +% \begin{quote} +% \texttt{agsm}, \texttt{dcu}, \texttt{kluwer} +% \end{quote} +% +% This package has been updated for \LaTeXe, with many additions to +% add flexibility. The result is a powerful interface that should meet most +% citation needs. (It does not suppress repeated authors, though, +% as \thestyle{} does.) +% +% \subsection{The Astronomy Style} +% Apparently realizing the limitations of his \texttt{apalike} system, Oren +% Patashnik went on to develop a `true' \texttt{apa} bibliographic style, +% making use of the method already employed by an astronomy journal. This +% is actually very similar to the \texttt{newapa} label but with only the +% short list of authors: +% \begin{quote} +% |\bibitem[\protect\astroncite{Jones et al.}{1990}]{jon90}|\\ +% | ...| +% \end{quote} +% It requires the package file \texttt{astron.sty} +% or any other style that defines |\astroncite| appropriately. +% +% Bibliographic styles belonging to the astronomy group are +% \begin{quote} +% \texttt{apa}, \texttt{astron}, \texttt{bbs}, \texttt{cbe}, +% \texttt{humanbio}, \texttt{humannat}, \texttt{jtb} +% \end{quote} +% +% This is as good as the |\citeauthoryear| command, although not as +% flexible since the full list of authors is missing. +% +% \subsection{The \texttt{authordate} Style} +% Finally, I also found some packages making use of a label command +% called |\citename| in the form +% \begin{quote} +% |\bibitem[\protect\citename{Jones et al., }1990]{jon90}|\\ +% | ...| +% \end{quote} +% +% This is not a good system since the author list and date are not cleanly +% separated as individual arguments, and since the punctuation is included +% in the label text. It is better to keep the punctuation fully removed, as +% part of the definitions in the \texttt{.sty} file, for complete flexibility. +% +% Bibliographic styles belonging to this group are +% \begin{quote} +% \texttt{authordate1}, \texttt{authordate2}, \texttt{authordate3}, +% \texttt{authordate4}, \texttt{aaai-named} +% \end{quote} +% with accompanying style file \texttt{authordate1-4.sty}. +% +% \iffalse +%<notes>\end{document} +% \fi +% +% \StopEventually{\PrintIndex\PrintChanges} +% +% \section{The Coding} +% This section presents and explains the actual coding of the macros. +% It is nested between |%<*package>| and |%</package>|, which +% are indicators to \texttt{docstrip} that this coding belongs to the package +% file. +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% With \LaTeX\ release from \texttt{1995/12/01}, |\cite| is made robust, +% something that I have adopted as well. +% +% Another change in the above release is that +% |\G@refundefinedtrue|\footnote{In fact, it was only proposed to be +% removed, but because several packages, including this one, were +% adversely affected, the name was retained for the new coding.} +% and the |\if@openbib| flag have been removed. +% New, more effective, and compact, coding has replaced them. Rather than +% relying on the kernel coding, I make \thestyle\ more +% self-reliant. +% +% \subsection{Prerequisites} +% +% \begin{macro}{\@ifxundefined} +% \begin{macro}{\@ifnum} +% \begin{macro}{\@ifx} +% \begin{macro}{\appdef} +% \changes{8.2}{2008 Jul 02}{(AO) Add \cs{@ifxundefined}, a tool for testing a +% \cs{TeX} macro, and \cs{@ifnum}, a tool for testing numbers, like \cs{ifnum}.} +% The test |\@ifxundefined| is similar syntactically to |\@ifundefined|, but +% its first argument is a control sequence name. +% +% A singular disadvantage of |\@ifundefined| is its side effect of +% changing the state of the effective control sequence name, if undefined, to |\relax|. +% In the usual usage of |\@ifundefined|, this does not have serious consequences, +% but it can, and |\@ifxundefined| avoids these. +% +% We also provide |\@ifnum|, a vehicle for |\ifnum| tests, but using the same +% Boolean algebra as, e.g., |\@ifundefined|, with its attendant advantages. +% Likewise, |\@ifx| is the analog to |\ifx|. +% +% \begin{macrocode} +\providecommand\@ifxundefined[1]{% + \ifx#1\@undefined\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi +}% +\providecommand\@ifnum[1]{% + \ifnum#1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi +}% +\providecommand\@ifx[1]{% + \ifx#1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi +}% +\providecommand\appdef[2]{% + \toks@\expandafter{#1}\@temptokena{#2}% + \edef#1{\the\toks@\the\@temptokena}% +}% +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +% +% \subsection{Test for Specific Journals} +% This package should not be loaded with the specific journal packages that +% already include it; it is superfluous and can lead to contradictions. +% \begin{macrocode} +\@ifclassloaded{agu2001}{\PackageError{natbib} + {The agu2001 class already includes natbib coding,\MessageBreak + so you should not add it explicitly} + {Type <Return> for now, but then later remove\MessageBreak + the command \protect\usepackage{natbib} from the document} + \endinput}{} +\@ifclassloaded{agutex}{\PackageError{natbib} + {The AGUTeX class already includes natbib coding,\MessageBreak + so you should not add it explicitly} + {Type <Return> for now, but then later remove\MessageBreak + the command \protect\usepackage{natbib} from the document} + \endinput}{} +\@ifclassloaded{aguplus}{\PackageError{natbib} + {The aguplus class already includes natbib coding,\MessageBreak + so you should not add it explicitly} + {Type <Return> for now, but then later remove\MessageBreak + the command \protect\usepackage{natbib} from the document} + \endinput}{} +\@ifclassloaded{nlinproc}{\PackageError{natbib} + {The nlinproc class already includes natbib coding,\MessageBreak + so you should not add it explicitly} + {Type <Return> for now, but then later remove\MessageBreak + the command \protect\usepackage{natbib} from the document} + \endinput}{} +\@ifclassloaded{egs}{\PackageError{natbib} + {The egs class already includes natbib coding,\MessageBreak + so you should not add it explicitly} + {Type <Return> for now, but then later remove\MessageBreak + the command \protect\usepackage{natbib} from the document} + \endinput}{} +\@ifclassloaded{egu}{\PackageError{natbib} + {The egu class already includes natbib coding,\MessageBreak + so you should not add it explicitly} + {Type <Return> for now, but then later remove\MessageBreak + the command \protect\usepackage{natbib} from the document} + \endinput}{} +% \end{macrocode} +% +% \subsection{Selecting Citation Punctuation and Other Modifications} +% \begin{macro}{\bibstyle@xxx} +% \changes{5.3}{1994 Sep 13}{Add \texttt{agsm} and \texttt{dcu} punctuation +% styles from \texttt{harvard} series} +% We begin by defining a number of punctuation styles for specific +% author--year \texttt{.bst} files that I use. +% They are placed here, near the beginning, so that another +% user can easily find them to add his own. Some comments remain in the +% stripped version too. +% \begin{macrocode} + % Define citation punctuation for some author-year styles + % One may add and delete at this point + % Or put additions into local configuration file natbib.cfg +\newcommand\bibstyle@chicago{\bibpunct{(}{)}{;}{a}{,}{,}} +\newcommand\bibstyle@named{\bibpunct{[}{]}{;}{a}{,}{,}} +\newcommand\bibstyle@agu{\bibpunct{[}{]}{;}{a}{,}{,~}}%Amer. Geophys. Union +\newcommand\bibstyle@copernicus{\bibpunct{(}{)}{;}{a}{,}{,}}%Copernicus Publications +\let\bibstyle@egu=\bibstyle@copernicus +\let\bibstyle@egs=\bibstyle@copernicus +%<*all|harvard> +\newcommand\bibstyle@agsm{\bibpunct{(}{)}{,}{a}{}{,}\gdef\harvardand{\&}} +\newcommand\bibstyle@kluwer{\bibpunct{(}{)}{,}{a}{}{,}\gdef\harvardand{\&}} +\newcommand\bibstyle@dcu{\bibpunct{(}{)}{;}{a}{;}{,}\gdef\harvardand{and}} +%</all|harvard> +% \end{macrocode} +% +% Here give the explicit punctuation for the specific journals; their +% coding need not contain the punctuation macros |\bibpunct| and +% |\bibstyle@xxx| since the punctuation is fixed for them. +% +% Activate citation sorting for the journals. +% \changes{6.8b}{1998 July 2}{Turn off sorting for AGU and EGS} +% \begin{macrocode} +\newcommand\bibstyle@aa{\bibpunct{(}{)}{;}{a}{}{,}} %Astronomy & Astrophysics +\newcommand\bibstyle@pass{\bibpunct{(}{)}{;}{a}{,}{,}}%Planet. & Space Sci +\newcommand\bibstyle@anngeo{\bibpunct{(}{)}{;}{a}{,}{,}}%Annales Geophysicae +\newcommand\bibstyle@nlinproc{\bibpunct{(}{)}{;}{a}{,}{,}}%Nonlin.Proc.Geophys. +% \end{macrocode} +% +% \changes{6.5}{1997 Jan 30}{Fix \texttt{esa} style for new note system} +% \changes{7.0}{1999 May 7}{Fix \texttt{esa} style again} +% Next, the same thing is done for some numerical styles. A major +% difference here is that the |\@biblabel| and |\@cite| commands must also +% be redefined in many cases. These redefinitions must be made with the +% |\gdef| (global definition) command. +% \begin{macrocode} + % Define citation punctuation for some numerical styles +\newcommand\bibstyle@cospar{\bibpunct{/}{/}{,}{n}{}{}% + \gdef\bibnumfmt##1{##1.}} +\newcommand\bibstyle@esa{\bibpunct{(Ref.~}{)}{,}{n}{}{}% + \gdef\bibnumfmt##1{##1.\hspace{1em}}} +\newcommand\bibstyle@nature{\bibpunct{}{}{,}{s}{}{\textsuperscript{,}}% + \gdef\bibnumfmt##1{##1.}} +% \end{macrocode} +% +% Finally, the standard \LaTeX{} (numerical) citation styles are included +% along with their \thestyle\ modifications (author--year). +% \begin{macrocode} + % The standard LaTeX styles +\newcommand\bibstyle@plain{\bibpunct{[}{]}{,}{n}{}{,}} +\let\bibstyle@alpha=\bibstyle@plain +\let\bibstyle@abbrv=\bibstyle@plain +\let\bibstyle@unsrt=\bibstyle@plain + % The author-year modifications of the standard styles +\newcommand\bibstyle@plainnat{\bibpunct{[}{]}{,}{a}{,}{,}} +\let\bibstyle@abbrvnat=\bibstyle@plainnat +\let\bibstyle@unsrtnat=\bibstyle@plainnat +% \end{macrocode} +% \end{macro} +% +% \subsection{Package Options} +% \begin{macro}{\ifNAT@numbers} +% \changes{5.5}{1995 Mar 21}{Add flag for switching between cite styles} +% \begin{macro}{\ifNAT@super} +% \changes{5.5}{1995 Mar 21}{Add flag for switching between cite styles} +% Two flags are used to keep track of the citation style. The flag +% |\ifNAT@numbers| is \meta{false} by default (author--year) and switches +% to \meta{true} for numerical citations. The flag |\ifNAT@super| indicates +% if the numerical citation is to be done with superscripts. +% +% Note that changing |\ifNAT@numbers| or |\ifNAT@super| +% in the body of the text +% will not alter the way the citations are processed; +% their values at the end of the preamble determine the citation style for the +% rest of the document. +% \begin{macrocode} +\newif\ifNAT@numbers \NAT@numbersfalse +\newif\ifNAT@super \NAT@superfalse +% \end{macrocode} +% \end{macro}\end{macro} +% +% \begin{macro}{\NAT@merge} +% \changes{8.2}{2008 Jan 10}{(AO)Introduce \texttt{merge} package option} +% The package option |merge| allows multiple references to be merged under a single number +% in the bibliography, inspired by Thorsten Ohl's |mcite| package for \LaTeX. +% New syntax for the |\cite| command: e.g., |\cite{latex,*latex-companion}|, +% where the * signifies that the \LaTeX\ Companion and \LaTeX, a Document Formatting Language +% appear in the bibliography under the same number. +% |merge| applies only to the numerical citation mode; it is inactive in author-year mode. +% It is by default turned off (|\NAT@merge|${}={}$|\z@|). +% If |\NAT@merge|${}>{}$|\@ne|, all features are turned on. +% If |\NAT@merge|${}={}$|\@ne|, then the * syntax is active, but the merging is not done. +% \begin{macrocode} +\let\NAT@merge\z@ +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareOption} +% \changes{5.0}{1994 May 18}{Add \LaTeXe{} options.} +% \changes{5.3}{1994 Sep 13}{Add options \texttt{angle} and \texttt{curly}} +% \changes{6.0}{1995 Sep 6}{Add option \texttt{bibstyle}} +% \changes{6.0}{1995 Sep 6}{Execute \texttt{nobibstyle} with all options} +% \changes{6.1}{1995 Nov 27}{Add option \texttt{openbib}} +% \changes{6.4}{1996 Sep 1}{Add option \texttt{sectionbib}} +% \changes{6.4}{1996 Sep 13}{Add option \texttt{sort}} +% \changes{6.7}{1997 Jul 14}{Add option \texttt{longnamesfirst}} +% \changes{6.8c}{1998 Jul 14}{Add option \texttt{nonamebreak}} +% \changes{8.0}{2007 Feb 6}{Add option \texttt{semicolon}, same as \texttt{colon}} +% We can define some options to be used with the |\usepackage| +% command that loads the \thestyle{} package. These are an additional means +% of specifying the citation punctuation and scheme. +% +% The standard option \texttt{openbib} is also defined here so that its +% behaviour is entirely under my control. Relying on the standard classes +% can lead to trouble. +% \changes{8.2}{2008 Jul 02}{(AO) The value of \cs{NAT@sort} and \cs{NAT@cmprs} +% will be \cs{z@} or \cs{@ne}: something created by \cs{chardef}. +% This works better in \cs{ifnum} tests.} +% \begin{macrocode} +\DeclareOption{numbers}{\NAT@numberstrue + \ExecuteOptions{square,comma,nobibstyle}} +\DeclareOption{super}{\NAT@supertrue\NAT@numberstrue + \renewcommand\NAT@open{}\renewcommand\NAT@close{} + \ExecuteOptions{nobibstyle}} +\DeclareOption{authoryear}{\NAT@numbersfalse + \ExecuteOptions{round,semicolon,bibstyle}} +\DeclareOption{round}{% + \renewcommand\NAT@open{(} \renewcommand\NAT@close{)} + \ExecuteOptions{nobibstyle}} +\DeclareOption{square}{% + \renewcommand\NAT@open{[} \renewcommand\NAT@close{]} + \ExecuteOptions{nobibstyle}} +\DeclareOption{angle}{% + \renewcommand\NAT@open{$<$} \renewcommand\NAT@close{$>$} + \ExecuteOptions{nobibstyle}} +\DeclareOption{curly}{% + \renewcommand\NAT@open{\{} \renewcommand\NAT@close{\}} + \ExecuteOptions{nobibstyle}} +\DeclareOption{comma}{\renewcommand\NAT@sep{,} + \ExecuteOptions{nobibstyle}} +\DeclareOption{semicolon}{\renewcommand\NAT@sep{;} + \ExecuteOptions{nobibstyle}} +\DeclareOption{colon}{\ExecuteOptions{semicolon}} +\DeclareOption{nobibstyle}{\let\bibstyle=\@gobble} +\DeclareOption{bibstyle}{\let\bibstyle=\@citestyle} +\newif\ifNAT@openbib \NAT@openbibfalse +\DeclareOption{openbib}{\NAT@openbibtrue} +\DeclareOption{sectionbib}{\def\NAT@sectionbib{on}} +\def\NAT@sort{\z@} +\def\NAT@cmprs{\z@} +\DeclareOption{sort}{\def\NAT@sort{\@ne}} +\DeclareOption{compress}{\def\NAT@cmprs{\@ne}} +\DeclareOption{sort&compress}{\def\NAT@sort{\@ne}\def\NAT@cmprs{\@ne}} +\DeclareOption{mcite}{\let\NAT@merge\@ne} +\DeclareOption{merge}{\@ifnum{\NAT@merge<\tw@}{\let\NAT@merge\tw@}{}} +\DeclareOption{elide}{\@ifnum{\NAT@merge<\thr@@}{\let\NAT@merge\thr@@}{}} +\@ifpackageloaded{cite}{\PackageWarningNoLine{natbib} + {The `cite' package should not be used\MessageBreak + with natbib. Use option `sort' instead}\ExecuteOptions{sort}}{} +\@ifpackageloaded{mcite}{\PackageWarningNoLine{natbib} + {The `mcite' package should not be used\MessageBreak + with natbib. Use option `merge' instead}\ExecuteOptions{merge}}{} +\@ifpackageloaded{citeref}{\PackageError{natbib} + {The `citeref' package must be loaded after natbib}% + {Move \protect\usepackage{citeref} to after \string\usepackage{natbib}}}{} +\newif\ifNAT@longnames\NAT@longnamesfalse +\DeclareOption{longnamesfirst}{\NAT@longnamestrue} +\DeclareOption{nonamebreak}{\def\NAT@nmfmt#1{\mbox{\NAT@up#1}}} +\def\NAT@nmfmt#1{{\NAT@up#1}} +% \end{macrocode} +% Before version~6.0, the punctuation options had the lowest priority, +% being overridden by any |\bibstyle@|\textit{bst} command. It was necessary +% to add the option \texttt{nobibstyle} to make them effective. Now this +% option is automatically executed whenever a punctuation option is chosen. +% The reason is that \texttt{nobibstyle} is either superfluous (no +% predefined citation style is present) or always necessary to make the +% other options meaningful. +% +% It seems to be better practice to make any explicit choices to have +% higher priority over implicit ones. +% +% The option \texttt{bibstyle} reactivates the predefined commands, just in +% case this is needed, as it is for the option \texttt{authoryear}. This +% leaves the predefined styles functioning, since it does not really +% determine the citation style, but rather establishes a default which may +% be overwritten by a prestored one. For this reason, this option must be +% defined very early so that any explicit punctuation options overwrite the +% defaults. (Options are executed in the order defined.) +% +% \end{macro} +% +% \subsection{Selecting Citation Punctuation and Other Modifications} +% \begin{macro}{\bibstyle} +% \changes{5.4}{1994 Nov 24}{Move \cs{ProcessOptions} to after definition +% of \cs{bibstyle}} +% The pre-defined punctuation styles are associated with particular +% \texttt{.bst} files. This is implemented by means of the standard +% |\bibliographystyle| command that specifies the name of the \texttt{.bst} +% file that is to be used by \btx. Some \LaTeX{} manuals erroneously state +% that this command must be issued prior to any |\cite| commands. If that +% were the case, the task of invoking the style definitions would be much +% easier, for they certainly must be issued before the first |\cite|. +% However, I have always called |\bibliographystyle| together with +% |\bibliography|, well after all |\cite| commands. +% +% In fact, all that |\bibliographystyle|\marg{bst} does is to write +% |\bibstyle|\marg{bst} to the auxiliary file. This file, and all its +% contents, will be read in at the beginning of the next \LaTeX{} run; to +% be precise, it is read in by |\begin{document}|. The command |\bibstyle| is +% then executed at that point on the next run. However, it is +% defined to do nothing more than to swallow up its argument! In other +% words, the combination |\bibliographystyle| and |\bibstyle| do absolutely +% nothing to the \LaTeX{} runs. In fact, |\bibstyle| is a command for +% \btx{} alone. +% +% I have taken advantage of this to redefine |\bibstyle| to execute the +% \texttt{bst}-specific definitions. This definition is made here before +% |\ExecuteOptions| so that options may make use of it; the option +% \texttt{nobibstyle} turns it off, for example. +% +% Coding note (AO): if the csname has not been defined, then executing it simply +% executes |\relax|, so the coding here could be considerably simplified: +% just execute |\csname| |bibstyle@||#1||\endcsname| whether defined or not. +% (Done, PWD) +% \begin{macrocode} +\renewcommand\bibstyle[1]{\csname bibstyle@#1\endcsname} +% \end{macrocode} +% This is executed only when the auxiliary file is read in, and that is +% when |\begin{document}| is issued. Thus this is well before any |\cite| +% commands. It is for this reason that any definitions in the +% |\bibstyle@xxx| commands must be global. +% +% A minor problem arises in that the auxiliary file is read in a second +% time, at the end of the run, to check whether any labels have changed. +% Sometimes, re-executing the |\bibstyle@xxx| command at this point +% produces error messages. To avoid this, |\bibstyle| is reset to its +% normal, do-nothing, definition after |\begin{document}|. +% +% (|\NAT@set@cites| must also be executed at the start of the document; +% this is added later when the macro is defined.) +% \begin{macrocode} +\AtBeginDocument{\global\let\bibstyle=\@gobble} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citestyle} +% \changes{5.4}{1995 Feb 03}{Add macro} +% \changes{5.5}{1995 Mar 24}{Make preamble only} +% To allow one to invoke preprogrammed punctuation styles that are +% different from the name of the bibliography style specified by +% |\bibliographystyle|, call |\citestyle| in the preamble. This then +% deactivates |\bibstyle| so that any preprogrammed punctuations become +% ineffective. +% +% This, and all other punctuation (citation style) declarations, may only +% be used in the preamble, as of version 5.5. (Previously they could only +% be used after the preamble, but the preamble is more logical.) +% \begin{macrocode} +\let\@citestyle\bibstyle +\newcommand\citestyle[1]{\@citestyle{#1}\let\bibstyle\@gobble} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bibpunct} +% \changes{5.4}{1994 Nov 24}{Add superscript style of citations} +% \changes{5.5}{1995 Mar 21}{Use flags to select citation style} +% \changes{5.5}{1995 Mar 24}{Make preamble only} +% \changes{6.0}{1995 Sep 6}{Sets \cs{bibstyle} to \cs{@gobble}} +% \changes{6.0}{1995 Sep 6}{Declare \cs{NAT@numbersfalse} before testing 4th +% argument} +% \changes{6.0}{1995 Sep 19}{Add optional argument for \cs{NAT@cmt}} +% \changes{7.0}{1999 May 7}{Add blank to default of first argument} +% Now |\bibpunct| is defined. It sets various punctuation commands equal to +% its arguments. It also switches to numerical style if that is specified +% by the fourth argument. This is done by setting the citation style +% flag |NAT@numbers| accordingly. The internal cite macros are later +% set to the style-dependent definitions by calling |\NAT@set@cites|. +% +% The fourth argument can also be \texttt{s} for superscript, which +% sets both the numerical and the |\NAT@super| flags. +% +% An optional argument has been added to determine the punctuation that +% precedes a trailing note. This makes the counting of mandatory arguments +% somewhat confused, since the fourth argument is now |#5|. +% +% \begin{macrocode} +\newcommand\bibpunct[7][, ]% + {\gdef\NAT@open{#2}\gdef\NAT@close{#3}\gdef + \NAT@sep{#4}\global\NAT@numbersfalse + \ifx #5n\global\NAT@numberstrue\global\NAT@superfalse + \else + \ifx #5s\global\NAT@numberstrue\global\NAT@supertrue + \fi\fi + \gdef\NAT@aysep{#6}\gdef\NAT@yrsep{#7}% + \gdef\NAT@cmt{#1}% + \NAT@@setcites + } +% \end{macrocode} +% The command turns off |\bibstyle| so that the predefined +% |\bibstyle@|\textit{bst} commands no longer work. Thus |\bibpunct| has +% priority over the predefined styles. +% \end{macro} +% +% \begin{macro}{\setcitestyle} +% \changes{8.0}{2007 Feb 2}{Add macro} +% A new command for setting the various parameters is added in version~8.0. +% This complements |\bibpunct| but will not replace it since it only sets +% selected parameters, while |\bibpunct| sets all at once, and is thus more +% appropriate for complete setting. This is better for changing just some +% parameters. +% +% The argument is a comma-separated list of keywords, many identical to the +% corresponding package options. However, others take an argument, as +% |yysep={;}| where the curly braces are unnecessary for a single character +% (except for a comma!) but they do not hurt. Spaces must not appear between +% entries, or they will be interpreted as part of the keyword. +% +% \begin{macrocode} +\newcommand\setcitestyle[1]{ + \@for\@tempa:=#1\do + {\def\@tempb{round}\ifx\@tempa\@tempb + \renewcommand\NAT@open{(}\renewcommand\NAT@close{)}\fi + \def\@tempb{square}\ifx\@tempa\@tempb + \renewcommand\NAT@open{[}\renewcommand\NAT@close{]}\fi + \def\@tempb{angle}\ifx\@tempa\@tempb + \renewcommand\NAT@open{$<$}\renewcommand\NAT@close{$>$}\fi + \def\@tempb{curly}\ifx\@tempa\@tempb + \renewcommand\NAT@open{\{}\renewcommand\NAT@close{\}}\fi + \def\@tempb{semicolon}\ifx\@tempa\@tempb + \renewcommand\NAT@sep{;}\fi + \def\@tempb{colon}\ifx\@tempa\@tempb + \renewcommand\NAT@sep{;}\fi + \def\@tempb{comma}\ifx\@tempa\@tempb + \renewcommand\NAT@sep{,}\fi + \def\@tempb{authoryear}\ifx\@tempa\@tempb + \NAT@numbersfalse\fi + \def\@tempb{numbers}\ifx\@tempa\@tempb + \NAT@numberstrue\NAT@superfalse\fi + \def\@tempb{super}\ifx\@tempa\@tempb + \NAT@numberstrue\NAT@supertrue\fi + \expandafter\NAT@find@eq\@tempa=\relax\@nil + \if\@tempc\relax\else + \expandafter\NAT@rem@eq\@tempc + \def\@tempb{open}\ifx\@tempa\@tempb + \xdef\NAT@open{\@tempc}\fi + \def\@tempb{close}\ifx\@tempa\@tempb + \xdef\NAT@close{\@tempc}\fi + \def\@tempb{aysep}\ifx\@tempa\@tempb + \xdef\NAT@aysep{\@tempc}\fi + \def\@tempb{yysep}\ifx\@tempa\@tempb + \xdef\NAT@yrsep{\@tempc}\fi + \def\@tempb{notesep}\ifx\@tempa\@tempb + \xdef\NAT@cmt{\@tempc}\fi + \def\@tempb{citesep}\ifx\@tempa\@tempb + \xdef\NAT@sep{\@tempc}\fi + \fi + }% + \NAT@@setcites +} + \def\NAT@find@eq#1=#2\@nil{\def\@tempa{#1}\def\@tempc{#2}} + \def\NAT@rem@eq#1={\def\@tempc{#1}} +% \end{macrocode} +% +% After the parameters are set, it is still necessary to issue |\NAT@set@cites| +% to get things right for author--year or numerical mode. This is issued +% at the end of the preamble, and not in the preamble. But if |\setcitestyle| is +% given after the preamble, we need it right away. So issue instead |\NAT@@setcites| +% which in the preamble only deactivates |\bibstyle|, but later becomes +% |\NAT@set@cites|. +% +% The idea is that if |\setcitestyle| is used in the preamble, it is global and +% the values should be not changed by the bibliography style definitions. But if +% issued in the text, as part of \texttt{chapterbib} processing, then automatic +% style changes with different |.bst| files per chapter could be useful. +% \begin{macrocode} + \def\NAT@@setcites{\global\let\bibstyle\@gobble} +\AtBeginDocument{\let\NAT@@setcites\NAT@set@cites} +% \end{macrocode} +% \end{macro} +% +% \subsection{Setting the Defaults} +% The defaults (punctuation and scheme type) are set with the +% |\ExecuteOptions| command. +% +% \begin{macro}{\NAT@open} +% \changes{5.5}{1995 May 14}{Renamed from \cs{@citebegin}} +% \begin{macro}{\NAT@close} +% \changes{5.5}{1995 May 14}{Renamed from \cs{@citeend}} +% \begin{macro}{\NAT@sep} +% \changes{5.5}{1995 May 14}{Renamed from \cs{@citesep}} +% \begin{macro}{\NAT@aysep} +% \changes{5.5}{1995 May 14}{Renamed from \cs{@auyrsep}} +% \begin{macro}{\NAT@yrsep} +% \changes{5.5}{1995 May 14}{Renamed from \cs{@yrsep}} +% \begin{macro}{\NAT@cmt} +% \changes{6.0}{1995 Sep 19}{Add macro} +% \changes{6.9}{1999 Feb 25}{Remove hardwired spaces after \cs{NAT@cmt}, +% adding them to default definition instead} +% The five punctuation characters for citations are the start and stop +% brackets, the character between multiple citations, the character between +% the authors and year (parenthetical only), and the character between +% adjacent years when the common author list is omitted. +% A sixth one has been added: the character preceding post-notes, +% including any possible space. +% Define their default values. +% \begin{macrocode} +\newcommand\NAT@open{(} \newcommand\NAT@close{)} +\newcommand\NAT@sep{;} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \changes{6.0}{1995 Sep 19}{Remove \cs{ExecuteOptions} since default +% style determined by definitions} +% The option \texttt{authoryear} was originally provided to serve as the +% default; hence its definition includes \texttt{bibstyle}. However, this +% is not necessary since all the appropriate parameters are set to these +% values anyway. (One could consider removing \texttt{bibstyle}.) +% \begin{macrocode} +%\ExecuteOptions{authoryear} +\ProcessOptions +\newcommand\NAT@aysep{,} \newcommand\NAT@yrsep{,} +\newcommand\NAT@cmt{, } +% \end{macrocode} +% +% \subsection{Internal Citing Macros} +% A number of internal macros (|\@citex|, |\@cite|, |\@biblabel|, and +% |\@bibsetup|) need to have different definitions for author--year and +% numerical schemes. They are defined here for the two different styles, +% with different names, and which ones become active depend on the citation +% style flags |\ifNAT@numbers| and |\ifNAT@super|. +% +% The coding for the journals always defines the internal macros directly +% as the author--year version, since they can never do any switching. +% +% \begin{macro}{\@cite} +% \changes{5.5}{1995 Mar 21}{Is \cs{let} equal to the numerical or +% author--year definition} +% \begin{macro}{\NAT@cite} +% \changes{4.2}{1993 Dec 2}{Reversed optional text no longer needs to include +% a trailing blank} +% \changes{5.0}{1994 May 18}{Add optional notes after as well as before +% citation.} +% \changes{5.5}{1995 Mar 13}{Add command space in place of space} +% \changes{5.5}{1995 Mar 13}{Use \cs{if}\cs{relax}\texttt{\#2}\cs{relax} +% in place of \cs{if}\texttt{\#2}\cs{@empty}} +% \changes{5.5}{1995 Mar 21}{Renamed from \cs{@cite}} +% \changes{6.6}{1997 May 26}{Use flag \cs{ifNAT@par} to suppress braces +% optionally} +% \changes{6.8}{1998 Feb 19}{Add \cs{endgroup} to terminate group} +% \changes{6.9a}{1999 Apr 20}{Change test for empty notes to asterix, not \cs{relax}} +% \begin{macro}{\NAT@citenum} +% \changes{5.0}{1994 May 18}{Add optional notes after as well as before +% citation.} +% \changes{5.5}{1995 Mar 13}{Add command space in place of space} +% \changes{5.5}{1995 Mar 13}{Use \cs{if}\cs{relax}\texttt{\#2}\cs{relax} +% in place of \cs{if}\texttt{\#2}\cs{@empty}} +% \changes{5.5}{1995 Mar 21}{Renamed from \cs{@citenum}} +% \changes{6.5}{1997 Jan 30}{Numericals always print notes if present, do not +% test for any flag first} +% \changes{6.6}{1997 May 27}{Can be textual or parenthetical} +% \changes{6.8}{1998 Feb 19}{Add \cs{endgroup} to terminate group} +% \changes{6.8}{1998 Feb 19}{Use \cs{NAT@@open} and \cs{NAT@@close} instead +% of \cs{NAT@open} and \cs{NAT@close}} +% \begin{macro}{\NAT@citesuper} +% \changes{5.4}{1994 Nov 24}{Add macro for superscripts} +% \changes{5.5}{1995 Mar 21}{Renamed from \cs{@citesuper}} +% \changes{5.5}{1995 Mar 27}{Prints post-note only if present} +% \changes{6.2}{1995 Feb 2}{Get superscript font size right; use +% \cs{textsuperscript}} +% \changes{6.6}{1997 Jun 4}{Modify for new \cs{NAT@citexnum}} +% \changes{6.8}{1998 Feb 19}{Add \cs{endgroup} to terminate group} +% \changes{7.0}{1999 May 7}{Add \cs{citenumfont} for numbers} +% \changes{7.0b}{2002 Feb 27}{Change \cs{hspace} to \cs{kern} to avoid line break} +% Define the internal |\@cite| commands that prints the assembled string of +% citation label texts, plus possible optional notes, before and after. The +% numerical version (now) the same, where previously (before 6.8) it used +% |\NAT@open| and |\NAT@close| so that braces were always present. (Keep the +% separate definitions anyway in case a difference should arise later.) In both +% cases, the notes are included (if present) only for parenthetical citations +% (|\ifNAT@swa| is \meta{true}) while for textual citations, they are printed +% by |\@citex|. The flag |\ifNAT@par| suppresses parentheses if \meta{false}, +% which is used with |\citealt|, |\citealp|, |\citeyear|, and |\citeauthor| +% (both numerical and author--year modes). +% +% \changes{7.2}{2006 Jan 12}{Allow braces around superscripted citation} +% \changes{7.5}{2007 Feb 2}{Superscripted citation prints both notes} +% \changes{7.5}{2007 Feb 2}{Superscripted braces are elevated with \cs{citet} too} +% The superscript citation before version 7.5 prints only the following note; +% with 7.5, this is changed to print both, but as part of the revised treatment +% of notes with textual numerical citations. +% +% Use the construction |\if*#2*| to test for empty note argument. Previously +% used |\relax| in place of |*| but then it turned out that if the text began +% with a robust command (like |\S|) the |\protect| command implicit here is +% equal to |\relax| so the condition is \meta{true}. Now any notes beginning +% with an asterix will give trouble. +% +% \changes{8.2}{2008 Jul 02}{(AO) Replace \cs{ } with \cs{NAT@spacechar} in four instances.} +% \begin{macrocode} +\newcommand\NAT@cite% + [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi + #1\if*#3*\else\NAT@cmt#3\fi\NAT@@close\else#1\fi\endgroup} +\newcommand\NAT@citenum% + [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi + #1\if*#3*\else\NAT@cmt#3\fi\NAT@@close\else#1\fi\endgroup} +\newcommand\NAT@citesuper[3]{\ifNAT@swa +\if*#2*\else#2\NAT@spacechar\fi +\unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close}% + \if*#3*\else\NAT@spacechar#3\fi\else #1\fi\endgroup} +\providecommand\textsuperscript[1]{\mbox{$^{\mbox{\scriptsize#1}}$}} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\NAT@ifcat@num} +% This ``trick with the catcode'' is Donald Arseneau's. +% Used in |\NAT@citexnum| and |\NAT@make@cite@list|, +% it determines if the argument really is a number. It will be a +% non-number if the optional argument to |\bibitem| does not conform to any +% of the allowed \thestyle\ syntaxes, such as if \texttt{alph.bst} is used. +% +% When the macro is defined, the |\catcode| of the underscore character ought to be 8. +% Once the definition is complete, the macro can be used, and the current \cs{catcode} value of +% underscore will then be irrelevant. +% +% \changes{8.2}{2008 Jun 28}{(AO) Introduce \cs{NAT@ifcat@num} and ensure that +% the \cs{catcode} of the underscore is 8 at the time.} +% \begin{macrocode} +\begingroup \catcode`\_=8 +\gdef\NAT@ifcat@num#1{% + \ifcat_\ifnum\z@<0#1_\else A\fi + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +}% +\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@citex} +% \changes{5.5}{1995 Mar 21}{Is \cs{let} equal to the numerical or +% author--year definition} +% \changes{6.1}{1995 Nov 22}{Use \cs{NAT@citeundefined}} +% \changes{6.6}{1997 May 17}{Add \cs{NAT@ctype} for author, year, or both} +% \begin{macro}{\NAT@citexnum} +% \changes{5.4}{1994 Nov 24}{Make like \LaTeXe{} definition instead of 2.09} +% \changes{5.5}{1995 Mar 21}{Renamed from \cs{@citexnum}} +% \changes{6.0}{1995 Sep 4}{Prints \cs{NAT@num} instead of \cs{b@citeb}} +% \changes{6.4}{1996 Sep 12}{Add \cs{NAT@space} for variable spacing between +% numericals and superscripts} +% \changes{6.4}{1996 Oct 2}{Add dummy macros for \texttt{hyperref.sty}} +% \changes{6.6}{1997 May 17}{Add \cs{NAT@ctype} for author, year, or number; +% can be textual or parethetical} +% \changes{6.6}{1997 Jun 3}{Re-write for sorting and compression} +% \changes{6.6}{1997 Jun 25}{Improve \texttt{hyperref} support} +% \changes{6.7}{1997 Jul 14}{Suppress repeated authors with numerical +% \cs{citet}} +% \changes{6.7}{1997 Jul 16}{Add \cs{ifNAT@longnames} test} +% The original definition of |\@citex| is used as basis for |\NAT@citexnum|, +% the version for numerical citations. What it does is to write a +% |\citation| command to the auxiliary file (for \btx), and then parses the +% second argument, the list of citation keys. These keys have to be decoded +% into the actual label text contained in |\b@|\emph{key} (a number or +% author--year), and put together as the argument of |\@cite|. +% +% For a textual citation (|\ifNAT@swa| \meta{false}), the authors are printed +% and then the number in parentheses. For multiple citations (silly thing) each +% number is in separate parentheses preceded by authors. +% As of version 7.5, notes with textual (numerical) citations are outside the +% parentheses, so they are really part of the main text. +% +% The temporary command |\@citeb| takes on the value of each of the keys in +% turn; +% |\@citea| is prepended to a production and forms the separator between multiple citations, +% initially set to |\@empty|, +% becoming |\NAT@sep| plus line-break suppression afterwards. +% The |\@firstofone| macro removes any leading blanks in +% |\@citeb|, making |\cite{key1, key2}| possible. If |\b@|\emph{key} is +% not defined (as on the first run, for example), a warning is printed, and +% a question mark inserted. Finally, the decoded label text is placed into +% an |\hbox| to prevent it from being split. +% +% As of version 6.0, the numerical label text is to be found in |\NAT@num|, +% whereas previously it was the entire label, |\b@|\emph{key}. +% +% Note that here, and in later coding, internal names beginning with +% |\@cite..| are employed; these names are used in the original \LaTeX{} +% coding for the same functions. Therefore, if there are other packages +% that have name conflicts with \thestyle, they will also have conflicts with +% standard \LaTeX\ too. +% +% The value of |\NAT@ctype| controls whether number (0), author (1), year (2), or +% cite alias (3) is output by this macro. +% +% For compatibility with the \texttt{chapterbib} package of Donald Arseneau, +% add |\@extra@b@citeb| to the cite key; this contains the number of the +% included file in order to distinguish the same citation in separate files +% which then belong to different bibliography listings. +% +% The list of citation keys is in |#3|; this is sorted by |\NAT@sort@cites| +% and returned in |\NAT@cite@list|. If sorting is turned off, this list is +% the same as the input. If compression of numerical lists is active +% (|NAT@cmprs|=1) only the parenthetical output is affected. +% +% ^^A === Note (PWD): remove the following comment by AO from the printed output. +% ^^A Note (AO): an arguable misfeature of |\NAT@citexnum| is that it resists the user reordering +% ^^A the references: if the first citation to several references occurs within +% ^^A the argument of |\NAT@citexnum|, and if |\NAT@sort| is turned on, then +% ^^A the numbering of the references involved will not change even if their order +% ^^A is changed in the argument of the macro. The procedure |\NAT@citex| works likewise. +% +% \changes{7.2}{2006 Jan 12}{Add \texttt{citeref} support} +% \changes{8.1}{2007 Oct 30}{Add \cs{@empty} after \cs{@citeb}, as now in standard \LaTeX} +% \changes{8.2}{2008 Jun 28}{(AO) Use \cs{NAT@ifcat@num} instead of unrolling.} +% \changes{8.2}{2008 Jul 01}{(AO) Provide a layer of abstraction to assignments +% to \cs{@citea}; here, this means using \cs{NAT@reset@citea}.} +% \changes{8.2}{2008 Jul 02}{(AO) Employ \cs{@ifxundefined} for use on \cs{@cprwrite}.} +% \changes{8.2}{2008 Jul 01}{(AO) Perform the \cs{ifnum} test on \cs{NAT@ctype} against +% \cs{z@}: \TeX\ finishes parsing the number and does the comparison earlier.} +% \changes{8.2}{2008 Jul 02}{(AO) Use \cs{@ifxundefined}, instead of \cs{@ifundefined}, on \cs{@cprwrite}.} +% \changes{8.2}{2008 Jul 01}{(AO) Use \cs{NAT@hyper@} to wrap up the hyperlink calls.} +% \changes{8.2}{2008 Jul 12}{(AO) Do not write .aux file entries in \cs{NAT@citexnum} +% or \cs{NAT@citex}; do this in \cs{NAT@sort@cites} where the keys will be in the user's order.} +% \begin{macrocode} +\providecommand\@firstofone[1]{#1} +\newcommand\NAT@citexnum{} +\def\NAT@citexnum[#1][#2]#3{% + \NAT@reset@parser + \NAT@sort@cites{#3}% + \NAT@reset@citea + \@cite{\def\NAT@num{-1}\let\NAT@last@yr\relax\let\NAT@nm\@empty + \@for\@citeb:=\NAT@cite@list\do + {\@safe@activestrue + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \@safe@activesfalse + \@ifundefined{b@\@citeb\@extra@b@citeb}{% + {\reset@font\bfseries?} + \NAT@citeundefined\PackageWarning{natbib}% + {Citation `\@citeb' on page \thepage \space undefined}}% + {\let\NAT@last@num\NAT@num\let\NAT@last@nm\NAT@nm + \NAT@parse{\@citeb}% + \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{% + \let\NAT@name=\NAT@all@names + \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}% + \fi + \ifNAT@full\let\NAT@nm\NAT@all@names\else + \let\NAT@nm\NAT@name\fi +% \end{macrocode} +% For compression of numerical citations, we need to save the last number; +% use |\NAT@last@num| for this purpose. Use |\NAT@last@nm| to save last +% names to check for repetitions. +% +% For parenthetical (\LaTeX\ standard) produce only the number (exception: +% year is allowed for |\citeyearpar|, but without sorting); any notes are +% added in the |\@cite| macro. For textual, print the authors and then the +% number in parentheses. This is done for each citation of a multiple set, +% unlike the parenthetical version where all citations appear in a single pair +% of parentheses. +% +% The hyperlink start and end are to bracket only the number; however, if +% only the authors or only the year are printed, then these are bracketed. +% With compression, only the first and last numbers in the range have a +% hyperlink (but the targets of the missing numbers lie between those two). +% \changes{7.2}{2006 Jan 12}{Separate compression and sorting flags so they +% can be used independently} +% \changes{7.2}{2006 Jan 12}{Add hyperlinks to compressed cites} +% \changes{7.4a}{2006 Sep 06}{Add \cs{noexpand} to \cs{hyper@natlinkend}} +% \changes{8.1}{2007 Oct 30}{Change \cs{edef} to \cs{protected@edef}} +% +% The code for parenthetical citations starts here. +% \begin{macrocode} + \ifNAT@swa +% \end{macrocode} +% This portion comprises the code for year- and alias-type citations. +% \changes{8.2}{2008 Jul 01}{(AO) Perform the \cs{ifnum} test on \cs{NAT@ctype} +% against \cs{@ne}, resp. \cs{tw@}: no need to use \cs{relax}; +% \TeX\ finishes parsing the number and does the comparison earlier.} +% \changes{8.2}{2008 Jul 01}{(AO) Use \cs{NAT@hyper@} to wrap up the hyperlink calls.} +% \begin{macrocode} + \@ifnum{\NAT@ctype>\@ne}{% + \@citea + \NAT@hyper@{\@ifnum{\NAT@ctype=\tw@}{\NAT@test{\NAT@ctype}}{\NAT@alias}}% + }{% +% \end{macrocode} +% Here begins the code for the cases where |\NAT@ctype|${}\le{}$|1|, covering author and number citations. +% We start off with the code for compressed citations. +% +% The number of the current citation |\NAT@num| has been calculated by |\NAT@parse|. +% We also have state variables |\NAT@last@num| and |\NAT@last@yr|. +% |\NAT@last@num| represents |\NAT@num|'s value last time through this loop, $-1$ initially. +% |\NAT@last@yr| contains the production for the last citation, in case it requires deferring +% (if the last citation is to be compressed away, |\NAT@last@yr| will be clobbered by the current citation). +% +% We next determine if |\NAT@num| and |\NAT@last@num| are each numerical values. +% If |\NAT@num| is numerical, |\NAT@nm| is set to its value, to $-2$ if not. +% If |\NAT@last@num| is numerical, +% the counter |\@tempcnta| is set to its value, to $-1$ if not. +% +% Note (AO): the catcode of the |_| token stored in the macro's replacement +% part will be assigned at the time the macro definition is read in. +% Therefore, this macro, like |\NAT@make@cite@list|, needs to be defined accordingly. +% At the same time, the group created below along with +% the catcode assignment and global assignments, are all unnecessary. +% \changes{8.2}{2008 Jul 01}{(AO) Use \cs{NAT@ifcat@num} instead of unrolling the code in the macro. Global assignments are no longer necessary (which is good, since we are using \cs{@tempcnta}).} +% \changes{8.2}{2008 Jul 01}{(AO) Perform the \cs{@ifnum} test on \cs{NAT@cmprs} against \cs{z@}; \TeX\ finishes parsing the number and does the comparison earlier in the expansion.} +% \begin{macrocode} + \@ifnum{\NAT@cmprs>\z@}{% + \NAT@ifcat@num\NAT@num + {\let\NAT@nm=\NAT@num}% + {\def\NAT@nm{-2}}% + \NAT@ifcat@num\NAT@last@num + {\@tempcnta=\NAT@last@num\relax}% + {\@tempcnta\m@ne}% +% \end{macrocode} +% We enumerate the states in which we can arrive here. +% \begin{enumerate} +% \item[1] First citation in the list. +% \item[2] Second citation, and consecutive to the first, beginning an elision run. +% \item[3] Third or later, and consecutive to the previous, extending the run. +% \item[4] Second or later, but not consecutive to the previous, breaking the run. +% \item[5] Second or later, and duplicates the previous. Run or no, this one should be suppressed. +% \end{enumerate} +% Each of these cases is handled by its own part of the following code. +% +% \changes{8.2}{2008 Jan 10}{(AO)Introduce \texttt{merge} package option} +% The following section handles case (5). +% With the |merge| option in effect, we do nothing (this merges the current citation with the previous). +% Without, we do the same as cases (1) and (4) below. +% \begin{macrocode} + \@ifnum{\NAT@nm=\@tempcnta}{% + \@ifnum{\NAT@merge>\@ne}{}{\NAT@last@yr@mbox}% + }{% +% \end{macrocode} +% The following section handles cases (2) and (3). The value of |\NAT@last@yr| gets clobbered, +% which does the compressing. The citation stored in |\NAT@last@yr| will be the same except +% for the delimiter: the en-dash is used when there was an actual citation elided. +% \begin{macrocode} + \advance\@tempcnta by\@ne + \@ifnum{\NAT@nm=\@tempcnta}{% + \ifx\NAT@last@yr\relax + \def@NAT@last@yr{\@citea}% + \else + \def@NAT@last@yr{--\NAT@penalty}% + \fi + }{% +% \end{macrocode} +% The following section handles cases (1) and (4). +% |\NAT@last@yr| is expanded (actually producing something in case (4)), +% the current citation is produced, and |\NAT@last@yr| is re-initialized. +% \begin{macrocode} + \NAT@last@yr@mbox + }% + }% +% \end{macrocode} +% The code for compressed citations is complete. +% \begin{macrocode} + }{% +% \end{macrocode} +% The following code is executed when compression is turned off. +% We merge duplicates if |merge| is in effect. +% \begin{macrocode} + \@tempswatrue + \@ifnum{\NAT@merge>\@ne}{\@ifnum{\NAT@last@num=\NAT@num\relax}{\@tempswafalse}{}}{}% + \if@tempswa\NAT@citea@mbox\fi + }% + }% +% \end{macrocode} +% The code for author- and number-type citations is complete; +% we conclue the code for parenthetical citations. +% +% Ensure that proper punctuation appears before the second and following entries. +% \changes{8.2}{2008 Jul 01}{(AO) Provide a layer of abstraction to assignments to \cs{@citea}; +% here, this means using \cs{NAT@def@citea}.} +% \begin{macrocode} + \NAT@def@citea +% \end{macrocode} +% Here ends the portion relating to parenthetical citations. +% \begin{macrocode} + \else +% \end{macrocode} +% Here commences the code for textual citations. +% Note that compression (|\NAT@cmprs|) and merging (|\NAT@merge|) +% do not apply to such citations. +% +% \changes{7.5}{2007 Feb 2}{Textual numerical cites print notes outside brackets} +% \changes{8.2}{2008 Jul 01}{(AO) With our abstraction of \cs{@citea}; +% we use wrappers \cs{NAT@def@citea@box} and \cs{NAT@hyper@citea}. +% Also \cs{NAT@penalty} in place of an explicit \cs{penalty}.} +% \changes{8.3}{2008 Sep 23}{Insert small space before \cs{NAT@@open}; this is +% simultaneously removed from superscript version of \cs{NAT@mbox}} +% \changes{8.3}{2008 Dec 5}{Use \cs{NAT@super@kern} for small spacing with +% superscripts only; else is \cs{relax}} +% For textual citations, test what the output is to be (number, year, +% author) and also test for comments. +% \changes{8.3}{2008 Dec 8}{Move \cs{NAT@@close} so post-comment inside braces} +% \begin{macrocode} + \ifcase\NAT@ctype + \ifx\NAT@last@nm\NAT@nm \NAT@yrsep\NAT@penalty\NAT@space\else + \@citea \NAT@test{\@ne}\NAT@spacechar\NAT@mbox{\NAT@super@kern\NAT@@open}% + \fi + \if*#1*\else#1\NAT@spacechar\fi + \NAT@mbox{\NAT@hyper@{{\citenumfont{\NAT@num}}}}% + \NAT@def@citea@box + \or + \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}% + \or + \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}% + \or + \NAT@hyper@citea@space\NAT@alias + \fi + \fi +% \end{macrocode} +% The code for textual citations is complete, along with the |\ifNAT@swa| started far above. +% +% Here ends the false branch of |\@ifundefined{b@\@citeb\@extra@b@citeb}|. +% \begin{macrocode} + }% +% \end{macrocode} +% Here ends the |\@for| loop. +% \begin{macrocode} + }% +% \end{macrocode} +% Clean up: the deferred portion from a possible parenthetical (|\NAT@last@yr|) citation. +% \begin{macrocode} + \@ifnum{\NAT@cmprs>\z@}{\NAT@last@yr}{}% +% \end{macrocode} +% More cleanup: the closing delimiter for textual (|\NAT@mbox|) citations is executed. +% \changes{8.2}{2008 Jan 10}{(AO)Introduce \texttt{merge} package option} +% (AO) I changed the |\ifnum| comparison to halt the parsing of the number earlier: +% otherwise \TeX\ would parse all the way to the |*| before calculating the |\ifnum| comparison. +% This feature of \TeX's scanner can cause difficult-to-understand problems. +% \changes{8.3}{2008 Dec 8}{Move \cs{NAT@@close} so post-comment inside braces} +% \begin{macrocode} + \ifNAT@swa\else + \@ifnum{\NAT@ctype=\z@}{% + \if*#2*\else\NAT@cmt#2\fi + }{}% + \NAT@mbox{\NAT@@close}% + \fi + }{#1}{#2}% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NAT@citea@mbox} +% \changes{8.2}{2008 Jan 10}{(AO)Introduce \texttt{merge} package option} +% \begin{macro}{\NAT@hyper@} +% \begin{macro}{\NAT@last@yr@mbox} +% \begin{macro}{\def@NAT@last@yr} +% \begin{macro}{\NAT@hyper@citea} +% \begin{macro}{\NAT@hyper@citea@space} +% Here we provide wrapper procedures for use in |\NAT@citexnum|. +% The |\NAT@citea@mbox| macro produces the citation itself preceded by appropriate punctuation, +% while |\def@NAT@last@yr| defines a macro |\NAT@last@yr| which, when expanded, produces the same thing. +% The procedure |\NAT@hyper@| is shorthand for a common hyperlink idiom involving +% the pair |\hyper@natlinkstart| and |\hyper@natlinkend|. +% Finally, |\NAT@last@yr@mbox| produces two citations: the first by expanding |\NAT@last@yr| (which it resets), +% the second by executing |\NAT@citea@mbox|. +% \begin{macrocode} +\def\NAT@citea@mbox{% + \@citea\mbox{\NAT@hyper@{{\citenumfont{\NAT@num}}}}% +}% +\def\NAT@hyper@#1{% + \hyper@natlinkstart{\@citeb\@extra@b@citeb}#1\hyper@natlinkend +}% +\def\NAT@hyper@citea#1{% + \@citea + \NAT@hyper@{#1}% + \NAT@def@citea +}% +\def\NAT@hyper@citea@space#1{% + \@citea + \NAT@hyper@{#1}% + \NAT@def@citea@space +}% +\def\def@NAT@last@yr#1{% + \protected@edef\NAT@last@yr{% + #1% + \noexpand\mbox{% + \noexpand\hyper@natlinkstart{\@citeb\@extra@b@citeb}% + {\noexpand\citenumfont{\NAT@num}}% + \noexpand\hyper@natlinkend + }% + }% +}% +\def\NAT@last@yr@mbox{% + \NAT@last@yr\let\NAT@last@yr\relax + \NAT@citea@mbox +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\NAT@test} +% \changes{6.6}{1997 May 29}{Add macro} +% \changes{7.4}{2006 Aug 18}{Fix bug by adding \cs{NAT@nmfmt}} +% \changes{8.2}{2008 Jul 16}{(AO) Perform tests on first argument using \cs{@ifnum}: that argument is always \cs{NAT@ctype} or one of its possible values.} +% \changes{8.2}{2008 Jul 16}{(AO) Use \cs{begingroup} instead of \cs{bgroup} for pushing \TeX's context stack.} +% \changes{8.3}{2008 Dec 4}{Remove the \cs{NAT@nmfmt} from name test; cannot see how it could help; only hinders} +% For numerical mode, need to test if there really is a name or date; if a +% numerical \texttt{.bst} file is being used, there will not be any names or +% dates. This macro tests and writes |\NAT@nm| or |\NAT@date| according to +% its argument being 1 or 2. +% \begin{macrocode} +\newcommand\NAT@test[1]{% + \@ifnum{#1=\@ne}{% + \ifx\NAT@nm\NAT@noname + \begingroup\reset@font\bfseries(author?)\endgroup + \PackageWarning{natbib}{% + Author undefined for citation`\@citeb' \MessageBreak on page \thepage% + }% + \else \NAT@nm + \fi + }{% + \if\relax\NAT@date\relax + \begingroup\reset@font\bfseries(year?)\endgroup + \PackageWarning{natbib}{% + Year undefined for citation`\@citeb' \MessageBreak on page \thepage% + }% + \else \NAT@date + \fi + }% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citenumfont} +% \changes{7.0}{1999 May 7}{Add macro to format numerical citations} +% \changes{8.3}{2008 Nov 19}{Initialize as \cs{@empty} not \cs{relax}} +% To set the numerical citations in a different font, redefine |\citenumfont|. +% \begin{macrocode} +\let\citenumfont=\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NAT@citex} +% \changes{5.2}{1994 Aug 25}{Make like \LaTeXe{} definition instead of 2.09} +% \changes{5.4}{1994 Nov 24}{Change space to command space for text cites} +% \changes{5.4}{1995 Feb 6}{Add test for adjacent citations having equal +% authors and years} +% \changes{5.5}{1995 Mar 21}{Renamed from \cs{@citex}} +% \changes{6.0}{1995 Sep 21}{Move \cs{ifNAT@full} test from +% \cs{NAT@parse} to here} +% \changes{6.4}{1996 Oct 2}{Add dummy macros for \texttt{hyperref.sty}} +% \changes{6.6}{1997 Jun 3}{Add sorting of citations} +% \changes{6.7}{1997 Jul 16}{Add \cs{ifNAT@longnames} test} +% \changes{7.0}{1999 May 7}{Suppress years when empty} +% The author--year version of |\@citex| is now defined. It wants the authors +% and year for each decoded label text to be separated into |\NAT@nm| and +% |\NAT@date|. This is done by the routine |\NAT@parse|. The names of the +% authors in the previous key are stored in |\NAT@last@nm|, and if that is the +% same as the current names, it is not printed again. The output citation text +% is not put into an |\hbox| since line division may occur within the +% author--year citation. The output is formatted differently for parenthetical +% (|\NAT@swa| \meta{true}) and textual (|\NAT@swa| \meta{false}) cases. +% +% The citation keys are in |#3|; these are sorted by |\NAT@sort@cites| and +% stored in |\NAT@cite@list|. If sorting is turned off, this list is the same +% as the original one. +% +% |\NAT@nm| will contain either |\NAT@name| or |\NAT@all@names| depending +% on the state of |\ifNAT@full|. +% +% With the option \texttt{longnamesfirst}, the flag |\ifNAT@longnames| is +% set; this makes the first citation of any reference use the long list of +% names. The flag |\bv@|\meta{key} is defined after the first citation so +% that short lists are used afterwards. +% +% When the year (|\NAT@date|) is empty, no year is printed, nor is the +% preceding punctuation there; for textual citations, the brackets are also +% suppressed. This is to allow to citations with a code designation without a +% year. +% +% The command |\@cprwrite| is defined in the \texttt{citeref} package. +% \changes{7.2}{2006 Jan 12}{Add \texttt{citeref} support} +% \changes{8.1}{2007 Oct 30}{Add \cs{@empty} after \cs{@citeb}, as now in standard \LaTeX} +% \changes{8.2}{2008 Jul 01}{(AO) Provide a layer of abstraction to assignments to \cs{@citea}; +% here, this means using \cs{NAT@reset@citea}.} +% \changes{8.2}{2008 Jul 02}{(AO) Employ \cs{@ifxundefined} for use on \cs{@cprwrite}.} +% \changes{8.3}{2008 Aug 27}{Add \cs{@safe@activesfalse} for babel compatibility} +% \changes{8.2}{2008 Jul 12}{(AO) Do not write .aux file entries in \cs{NAT@citexnum} or \cs{NAT@citex}; +% do this in \cs{NAT@sort@cites} where the keys will be in the user's order.} +% \begin{macrocode} +\newcommand\NAT@citex{} +\def\NAT@citex% + [#1][#2]#3{% + \NAT@reset@parser + \NAT@sort@cites{#3}% + \NAT@reset@citea + \@cite{\let\NAT@nm\@empty\let\NAT@year\@empty + \@for\@citeb:=\NAT@cite@list\do + {\@safe@activestrue + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \@safe@activesfalse +% \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}% Move to \NAT@sort@cites +% \@ifxundefined\@cprwrite{}{\expandafter\@cprwrite\@citeb=}% Move to \NAT@cite@list@append +% \fi + \@ifundefined{b@\@citeb\@extra@b@citeb}{\@citea% + {\reset@font\bfseries ?}\NAT@citeundefined + \PackageWarning{natbib}% + {Citation `\@citeb' on page \thepage \space undefined}\def\NAT@date{}}% + {\let\NAT@last@nm=\NAT@nm\let\NAT@last@yr=\NAT@year + \NAT@parse{\@citeb}% + \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{% + \let\NAT@name=\NAT@all@names + \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}% + \fi + \ifNAT@full\let\NAT@nm\NAT@all@names\else + \let\NAT@nm\NAT@name\fi +% \end{macrocode} +% Begin parenthetical citation. Check if author names the same as in the +% previous citation, and if so, also check if the years are the same. +% \changes{5.4}{1995 Feb 8}{Add \cs{unskip} to avoid double spacing +% between years} +% \changes{6.5}{1997 Jan 30}{Add optional notes for textual citations} +% If so, citations are printed `1994a,b'; if a space is wanted between +% the letters, as `1994a,~b', then give |\NAT@yrsep| as |{,~}|. For this +% reason, the |\unskip| is needed when the space between years is printed +% to avoid two spaces. +% +% \changes{6.6}{1997 May 17}{Add \cs{NAT@ctype} for author, year, or both} +% This macro is to be used to define |\citep|, |\citet|, |\citeyear|, and +% |\citeauthor|, controlled by various flags. The |\NAT@ctype| is a number +% equal to 0 for author and year, 1 for author only, 2 for year only. +% \changes{6.9}{1999 Jan 22}{Add citation alias feature} +% A value of 3 is for the citation alias defined by |\defcitealias|. +% +% \changes{6.6}{1997 Jun 25}{Improve \texttt{hyperref} support} +% \changes{6.6}{1997 Jun 30}{Add missing \cs{NAT@close} to \cs{@citea}} +% \changes{6.7}{1997 Jul 14}{Put hyperlink brackets snuggly around +% \cs{NAT@exlab} and \cs{NAT@date}} +% \changes{6.8}{1998 Feb 19}{Remove superfluous \cs{hyper@natlinkstart}} +% \changes{6.8b}{1998 July 2}{Add \cs{hyper@natlinkbreak}} +% \changes{6.8c}{1998 July 14}{Remove opening brace and notes from link} +% \changes{6.8c}{1998 July 14}{Add \cs{NAT@nmfmt}} +% The hyperlinks are to bracket each reference completely, or at least that +% part that is present. The author names and year are made into separate links +% with the help of |\hyper@natlinkbreak|. Excluded from the link are +% punctuation and space between names and year, as well as notes and braces. +% Everything to be excluded is put into the first argument of |\hyper@natlinkbreak|. +% (This needs \texttt{hyperref.sty} version~6.32.) +% +% Another aid to keeping links on one page is the |\NAT@nmfmt| function for +% formatting names: normally this is nothing, but with the \texttt{nonamebreak} +% option, it becomes |\mbox|. This was a special request. +% +% \changes{7.1}{2003 June 6}{Add test for missing letter with multiple cites} +% \changes{8.2}{2008 Jul 01}{(AO) Use \cs{NAT@hyper@} to wrap up the hyperlink calls in seven instances.} +% \changes{8.2}{2008 Jul 01}{(AO) Provide a layer of abstraction to assignments to \cs{@citea}; +% here, this means using \cs{NAT@def@citea}.} +% Add a test for a missing extra letter in multiple citations. This can happen +% with the \texttt{chicago} style, for example. Pointed out by Frank Mittelbach. +% \begin{macrocode} + \ifNAT@swa\ifcase\NAT@ctype + \if\relax\NAT@date\relax + \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}\NAT@date}% + \else + \ifx\NAT@last@nm\NAT@nm\NAT@yrsep + \ifx\NAT@last@yr\NAT@year + \def\NAT@temp{{?}}% + \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}% + {Multiple citation on page \thepage: same authors and + year\MessageBreak without distinguishing extra + letter,\MessageBreak appears as question mark}\fi + \NAT@hyper@{\NAT@exlab}% + \else\unskip\NAT@spacechar + \NAT@hyper@{\NAT@date}% + \fi + \else + \@citea\NAT@hyper@{% + \NAT@nmfmt{\NAT@nm}% + \hyper@natlinkbreak{% + \NAT@aysep\NAT@spacechar}{\@citeb\@extra@b@citeb + }% + \NAT@date + }% + \fi + \fi + \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% + \or\@citea\NAT@hyper@{\NAT@date}% + \or\@citea\NAT@hyper@{\NAT@alias}% + \fi \NAT@def@citea +% \end{macrocode} +% Begin textual citation. Do same checks for repeated names and years. +% Optional notes are added here, not in |\NAT@cite|, which means for +% multiple citations, each one will receive the notes in the year part. +% (Pre-notes are questionable for this, but include them anyway.) +% \changes{6.6}{1997 July 5}{Fix closing brace bug} +% \changes{8.2}{2008 Jul 01}{(AO) Use \cs{NAT@hyper@} to wrap up the hyperlink calls in four instances.} +% \begin{macrocode} + \else + \ifcase\NAT@ctype + \if\relax\NAT@date\relax + \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% + \else + \ifx\NAT@last@nm\NAT@nm\NAT@yrsep + \ifx\NAT@last@yr\NAT@year + \def\NAT@temp{{?}}% + \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}% + {Multiple citation on page \thepage: same authors and + year\MessageBreak without distinguishing extra + letter,\MessageBreak appears as question mark}\fi + \NAT@hyper@{\NAT@exlab}% + \else + \unskip\NAT@spacechar + \NAT@hyper@{\NAT@date}% + \fi + \else + \@citea\NAT@hyper@{% + \NAT@nmfmt{\NAT@nm}% + \hyper@natlinkbreak{\NAT@spacechar\NAT@@open\if*#1*\else#1\NAT@spacechar\fi}% + {\@citeb\@extra@b@citeb}% + \NAT@date + }% + \fi + \fi + \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% + \or\@citea\NAT@hyper@{\NAT@date}% + \or\@citea\NAT@hyper@{\NAT@alias}% + \fi + \if\relax\NAT@date\relax + \NAT@def@citea + \else + \NAT@def@citea@close + \fi + \fi + }}\ifNAT@swa\else\if*#2*\else\NAT@cmt#2\fi + \if\relax\NAT@date\relax\else\NAT@@close\fi\fi}{#1}{#2}} +% \end{macrocode} +% +% \end{macro}\end{macro} +% +% \begin{macro}{\NAT@spacechar} +% \begin{macro}{\NAT@separator} +% \changes{8.3}{2008 Sep 23}{Remove \cs{NAT@space} from definition; +% add explicitly elsewhere} +% \begin{macro}{\NAT@reset@citea} +% \begin{macro}{\NAT@def@citea} +% \begin{macro}{\NAT@def@citea@space} +% \changes{8.3}{2008 Dec 5}{Add macro} +% \begin{macro}{\NAT@def@citea@close} +% \begin{macro}{\NAT@def@citea@box} +% \changes{8.3}{2008 Sep 23}{Fix for better spacing and separations with superscripts} +% We introduce |\NAT@spacechar|, which takes the place of the space character in all +% productions. Note that the macro |\NAT@space| is variable: it is the space character +% except for superscript citations, where it becomes |\relax|. This is to suppress +% spacing between superscripted citations. +% +% The macro |\NAT@separator| is the commonly employed separator between citations. +% +% The procedures |\NAT@reset@citea|, |\NAT@def@citea|, and |\NAT@def@citea@close| +% manage the |\@citea| macro for |\NAT@citex|, +% while |\NAT@def@citea@box| acts only for |\NAT@citexnum| in textual mode. +% Any assignment to |\@citea| is done by one of these procedures. +% +% Note that |\NAT@def@citea@box| uses the fixed |\NAT@spacechar|; this allows +% a space to appear between multiple superscripted citations that appear with the author +% names, whereas multiple superscripts (either for repeated authors or no authors) +% have no space between them. +% +% And |\NAT@def@citea| sets the variable |\NAT@space| between citations, while +% |\NAT@def@citea@space| uses the fixed space. This is employed with |\citet| +% in numerical mode, for author, year, alias only. It makes a difference for +% superscripts, allowing space to appear between such multiples. +% +% An extension to \thestyle\ could change these procedures to effect more sophisticated +% behaviour of the punctuation between textual citations. +% \begin{macrocode} +\def\NAT@spacechar{\ }% +\def\NAT@separator{\NAT@sep\NAT@penalty}% +\def\NAT@reset@citea{\c@NAT@ctr\@ne\let\@citea\@empty}% +\def\NAT@def@citea{\def\@citea{\NAT@separator\NAT@space}}% +\def\NAT@def@citea@space{\def\@citea{\NAT@separator\NAT@spacechar}}% +\def\NAT@def@citea@close{\def\@citea{\NAT@@close\NAT@separator\NAT@space}}% +\def\NAT@def@citea@box{\def\@citea{\NAT@mbox{\NAT@@close}\NAT@separator\NAT@spacechar}}% +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\NAT@@open} +% \changes{6.6}{1997 May 26}{Add macro} +% \begin{macro}{\NAT@@close} +% \changes{6.6}{1997 May 26}{Add macro} +% To allow the opening and closing braces to be suppressed for |\citealt|, use +% the flag |\ifNAT@par| in these macros. This only applies for author--year +% mode. +% \begin{macrocode} +\newif\ifNAT@par \NAT@partrue +\newcommand\NAT@@open{\ifNAT@par\NAT@open\fi} +\newcommand\NAT@@close{\ifNAT@par\NAT@close\fi} +% \end{macrocode} +% \end{macro}\end{macro} +% +% \begin{macro}{\NAT@alias} +% \changes{6.9}{1999 Jan 22}{Add macro} +% When |\NAT@ctype| is 3, the citation alias previously defined with +% |\defcitealias| is printed as the citation. +% \begin{macrocode} +\newcommand\NAT@alias{\@ifundefined{al@\@citeb\@extra@b@citeb}{% + {\reset@font\bfseries(alias?)}\PackageWarning{natbib} + {Alias undefined for citation `\@citeb' + \MessageBreak on page \thepage}}{\@nameuse{al@\@citeb\@extra@b@citeb}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NAT@up} +% \changes{7.0}{1999 May 10}{Add macro} +% \begin{macro}{\NAT@Up} +% \changes{7.0}{1999 May 10}{Add macro} +% If a textual citation comes at the beginning of a sentence, and the first +% author's name is with a von part, we want to be able to capitalize it. The +% function |\NAT@up| precedes all names and is normally |\relax|, but can be +% set to |\NAT@Up|, which capitalizes the first letter encountered. This even +% works with old style font commands like |{\it van Burg}| but not with NFSS +% commands like |\textit{van Burg}|. This is for use with the |\Citet| +% command. +% \begin{macrocode} +\let\NAT@up\relax +\newcommand\NAT@Up[1]{{\let\protect\@unexpandable@protect\let~\relax + \expandafter\NAT@deftemp#1}\expandafter\NAT@UP\NAT@temp} +\newcommand\NAT@deftemp[1]{\xdef\NAT@temp{#1}} +\newcommand\NAT@UP[1]{\let\@tempa\NAT@UP\ifcat a#1\MakeUppercase{#1}% + \let\@tempa\relax\else#1\fi\@tempa} +% \end{macrocode} +% \end{macro}\end{macro} +% +% \begin{macro}{\shortcites} +% \changes{6.7}{1997 Jul 16}{Add macro} +% In order to force selected citations to use short author lists even when +% the |\ifNAT@longnames| flag is set, call this macro with a list of keys as +% argument. It then defines the |\bv@| flags so that these citations do not +% appear as `virginal'. +% \begin{macrocode} +\newcommand\shortcites[1]{% + \@bsphack\@for\@citeb:=#1\do + {\@safe@activestrue + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \@safe@activesfalse + \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}\@esphack} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@biblabel} +% \changes{5.5}{1995 Mar 21}{Is \cs{let} equal to the numerical or +% author--year definition} +% \changes{6.8}{1997 Dec 1}{Undefine original \cs{@biblabel}} +% \begin{macro}{\NAT@biblabel} +% \changes{5.5}{1995 Mar 21}{Renamed from \cs{@biblabel}} +% \begin{macro}{\NAT@biblabelnum} +% \changes{5.5}{1995 Mar 21}{Renamed from \cs{@biblabelnum}} +% \begin{macro}{\bibnumfmt} +% \changes{7.0}{1999 May 7}{Add macro} +% Similarly for the |\@biblabel| command, that is used to format the +% citation label in the list of references, define the author--year +% and the numerical versions. For the former, no labels are +% printed in the list of references. +% +% Suggestion by Donald Arseneau: undefined |\@biblabel| and have it set +% to the predefined variants only if it is still undefined. This allows +% users to redefine it themselves in the preamble using the standard +% name. (They could redefine the |\NAT@biblabel|s but Arseneau figures +% they should be able use the standard name too.) +% +% And to simplify things for people who do not know about |\makeatletter|, +% define |\NAT@biblabelnum| in terms of |\bibnumfmt|. One can still +% redefine |\@biblabel| or even |\NAT@biblabelnum| if one wishes. +% +% As of version~8.0, with support for different citation modes in different +% chapters using |chapterbib|, do it by providing a standard |\@biblabel| +% (in case the class does not have it, or has redefined it) +% and letting |\bibnumfmt| be that definition at document begin, unless +% the user has already gone and defined |\bibnumfmt| himself. +% +% \begin{macrocode} +\newcommand\NAT@biblabel[1]{\hfill} +\newcommand\NAT@biblabelnum[1]{\bibnumfmt{#1}} +\let\bibnumfmt\@empty +\providecommand\@biblabel[1]{[#1]} +\AtBeginDocument{\ifx\bibnumfmt\@empty\let\bibnumfmt\@biblabel\fi} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\@bibsetup} +% \changes{5.5}{1995 Mar 21}{Is \cs{let} equal to the numerical or +% author--year definition} +% \begin{macro}{\NAT@bibsetup} +% \changes{5.5}{1995 Mar 13}{Add \cs{bibhang} for variable hanging +% indentation} +% \changes{5.5}{1995 Mar 21}{Renamed from \cs{@bibsetup}} +% \begin{macro}{\NAT@bibsetnum} +% \changes{5.1}{1994 Jun 22}{Add \cmd{\if@openbib} as in \LaTeXe} +% \changes{5.5}{1995 Mar 21}{Renamed from \cs{@bibsetnum}} +% \changes{6.1}{1995 Nov 22}{Use \cs{ifNAT@openbib}} +% \changes{6.2}{1996 Mar 05}{Add \cs{bibsep} for linespacing between +% references} +% \changes{6.5}{1997 Jan 10}{Set \cs{bibsep} to 0 for EGS} +% \changes{8.0}{2007 Feb 5}{Remove EGS, AGU stuff} +% The macro |\@bibsetup| is called by |\thebibliography| and contains any +% coding for formatting the list of references that may be different for +% numerical and author--year schemes. For numerical citations, the +% |\labelwidth| must be set to the size of the longest label (the argument +% of |\thebibliography|), and the |\leftmargin| adjusted accordingly. For +% author--year, there are no labels, so |\labelwidth| is zero, all lines +% after the first are indented by 1~em. +% +% \begin{macrocode} +\newcommand\NAT@bibsetnum[1]{\settowidth\labelwidth{\@biblabel{#1}}% + \setlength{\leftmargin}{\labelwidth}\addtolength{\leftmargin}{\labelsep}% + \setlength{\itemsep}{\bibsep}\setlength{\parsep}{\z@}% + \ifNAT@openbib + \addtolength{\leftmargin}{\bibindent}% + \setlength{\itemindent}{-\bibindent}% + \setlength{\listparindent}{\itemindent}% + \setlength{\parsep}{0pt}% + \fi +} +\newlength{\bibhang} +\setlength{\bibhang}{1em} +% \end{macrocode} +% +% The length |\bibsep| is to be the spacing between listed references. +% This is normally the regular line spacing between |\item|s in a +% \texttt{list} environment, which is |\itemsep| + |\parsep|. These are set +% by |\@listi|. Therefore, in order to set |\bibsep| to the default value, +% call |\@listi| locally and globally set it. +% +% \begin{macrocode} +\newlength{\bibsep} + {\@listi \global\bibsep\itemsep \global\advance\bibsep by\parsep} + +\newcommand\NAT@bibsetup% + [1]{\setlength{\leftmargin}{\bibhang}\setlength{\itemindent}{-\leftmargin}% + \setlength{\itemsep}{\bibsep}\setlength{\parsep}{\z@}} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\NAT@set@cites} +% \changes{5.5}{1995 Mar 21}{New macro to set the internal macros to +% numerical or author--year} +% \changes{6.3}{1996 Jun 17}{Add \cs{natexlab}} +% \changes{6.4}{1996 Sep 12}{Remove \cs{global} from definitions and \cs{let}} +% \changes{6.4}{1996 Sep 12}{Define \cs{NAT@space} differently for +% numericals and superscripts} +% \changes{6.6}{1997 Jun 4}{Define \cs{NAT@mbox} for superscripts} +% \changes{6.8}{1997 Dec 1}{Allow user redefinition of \cs{@biblabel}} +% \changes{6.8a}{1998 May 14}{\cs{@biblabel} redefined only for numericals} +% \changes{7.5}{2007 Feb 2}{Saving user definitions of \cs{@biblabel} done differently} +% \changes{7.5}{2007 Feb 2}{\cs{NAT@idxtxt} defaults to appropriate style in numerical mode} +% \changes{8.2}{2008 Jun 26}{(AO) use \cs{NAT@space} and \cs{NAT@penalty} for +% author-year citation style as well as in \cs{NAT@citexnum}} +% \changes{8.2}{2008 Jul 02}{(AO) use \cs{NAT@spacechar} in \cs{NAT@idxtxt}} +% \changes{8.3}{2008 Sep 23}{Remove small space before \cs{textsuperscript} in +% superscript version of \cs{NAT@mbox}} +% \changes{8.3}{2008 Dec 5}{Define \cs{NAT@super@kern} for small spacing with superscripts} +% The four internal macros that have different definitions depending on the +% citation style have been defined with different names; now set the macros +% to be executed to that set that is actually wanted. This is determined by +% the flags |\ifNAT@numbers| and |\ifNAT@super|. The setting command +% |\NAT@set@cites| is executed by |\begin{document}|, after which point, +% the citation style should be frozen. +% +% The command |\natexlab| is used in the \texttt{.bst} files to enclose the +% extra labels (the letters added to the dates); these are to be suppressed +% for numerical citations. +% \begin{macrocode} +\newcommand\NAT@set@cites{% + \ifNAT@numbers + \ifNAT@super \let\@cite\NAT@citesuper + \def\NAT@mbox##1{\unskip\nobreak\textsuperscript{##1}}% + \let\citeyearpar=\citeyear + \let\NAT@space\relax + \def\NAT@super@kern{\kern\p@}% + \else + \let\NAT@mbox=\mbox + \let\@cite\NAT@citenum + \let\NAT@space\NAT@spacechar + \let\NAT@super@kern\relax + \fi + \let\@citex\NAT@citexnum + \let\@biblabel\NAT@biblabelnum + \let\@bibsetup\NAT@bibsetnum + \renewcommand\NAT@idxtxt{\NAT@name\NAT@spacechar\NAT@open\NAT@num\NAT@close}% + \def\natexlab##1{}% + \def\NAT@penalty{\penalty\@m}% + \else + \let\@cite\NAT@cite + \let\@citex\NAT@citex + \let\@biblabel\NAT@biblabel + \let\@bibsetup\NAT@bibsetup + \let\NAT@space\NAT@spacechar + \let\NAT@penalty\@empty + \renewcommand\NAT@idxtxt{\NAT@name\NAT@spacechar\NAT@open\NAT@date\NAT@close}% + \def\natexlab##1{##1}% + \fi} +\AtBeginDocument{\NAT@set@cites} +% \end{macrocode} +% \end{macro} +% +% \changes{6.5}{1997 Jan 30}{Add \texttt{showkeys} coding for \cs{@citex}} +% Since |\citep|, |\citet|, and |\citealt| are all ultimately defined in +% terms of the |\@citex| command, the best way to get the \texttt{showkeys} +% package to handle these is to let it accommodate only |\@citex|. David +% Carlisle has allowed for \thestyle, but only for |\cite| with variable number +% of arguments, |\citeauthor|, |\citefullauthor|, and |\citeyear|. Add the +% necessary coding at the beginning, after we know if \texttt{showkeys} +% has been loaded or not, and |\@citex| has its final definition. +% +% \changes{6.6}{1997 May 27}{Allow \texttt{notcite} option with +% \texttt{showkeys} package; turn off special coding} +% Paradoxically, with version~6.6 it is necessary to remove the special coding +% in \texttt{showkeys} for \thestyle. Now all |\cite..| commands are defined in +% terms of |\@citex|, so that is sufficient, and the special coding is now +% incorrect. This means resetting special coding for |\citeauthor|, +% |\citefullauthor|, |\citeyear|. Alternatively, define |\HAR@checkdef| +% which then also skips special \thestyle\ coding. It is just a question of +% which package is loaded first. +% +% There is no point asking Carlisle to add |\@citex| to \texttt{showkeys} +% because \thestyle\ fixes this macro with |\begin{document}|; thus +% \texttt{showkeys} would have to be loaded \emph{after} \thestyle. By +% including the recoding of |\@citex| here, it is not dependent on the order of +% the two packages. +% +% \changes{6.7}{1997 Sep 12}{Replace \cs{@ifpackageloaded} for +% \texttt{showkeys}} +% If the \texttt{showkeys} package is loaded with option \texttt{final}, its +% coding is not loaded. This is meant to shutoff the package after the draft +% version. However, \thestyle\ (version~6.6 and earlier) was confused by this, +% because it only tested if the package was loaded, not if its coding was active. +% Version~6.7 no longer uses |\@ifpackageloaded{showkeys}| for this test, but +% tests if |\SK@def| exists (suggestion by David Carlisle).\label{SKdef} +% +% \begin{macrocode} +\AtBeginDocument{\ifx\SK@def\@undefined\else +\ifx\SK@cite\@empty\else + \SK@def\@citex[#1][#2]#3{\SK@\SK@@ref{#3}\SK@@citex[#1][#2]{#3}}\fi +\ifx\SK@citeauthor\@undefined\def\HAR@checkdef{}\else + \let\citeauthor\SK@citeauthor + \let\citefullauthor\SK@citefullauthor + \let\citeyear\SK@citeyear\fi +\fi} +% \end{macrocode} +% +% \changes{7.2}{2006 Jan 12}{Previously \texttt{hyperref} would turn off compression; now allow this} +% \changes{8.2}{2008 Jul 13}{(AO) Commented-out code has been made into a comment.} +% With the \texttt{hyperref} package, compression of numerical citations +% was turned off in earlier versions. As of 7.2, remove this constraint, and +% make the first and last numbers in the compressed range into links. +% \begin{verbatim} +% \AtBeginDocument{\@ifpackageloaded{hyperref}{% +% \ifnum\NAT@sort=\tw@\def\NAT@sort{\@ne}\fi}{}} +% \end{verbatim} +% +% \subsection{The Citations} +% +% \begin{macro}{\citet} +% \changes{6.2}{1996 Jan 11}{Add macro for textual cite in numerical mode} +% \changes{6.5}{1997 Jan 30}{Make this standard textual citation, with notes} +% \changes{6.6}{1997 May 26}{Define with \cs{ifNAT@par} on} +% \changes{6.6}{1997 May 27}{Redefine for new coding of \cs{@citex}} +% \changes{6.8}{1998 Feb 19}{Place inside a group} +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{z@}: allow for tighter \cs{ifnum} comparisons.} +% Textual citations are made with the |\citet| command, which has a starred +% form for full authors, and may have one or two optional arguments for notes. +% +% This command is equivalent to the older syntex |\cite|\marg{key} without +% optional arguments, at least in author--year mode. In numerical mode, +% it prints the authors and then the numerical reference, whereas |\cite| +% will only print the number. This simplifies the switching between the two +% modes with minimal changes in text. One wants to replace ``as shown by Jones +% et~al.\ (1990)'' with ``as shown by Jones et~al.\ [21]''; with |\cite|, +% one would get ``as shown by [21]''. +% +% This is such a practical idea, that I have decided to make it the standard +% means of textual citing. It now even allows optional notes in textual cites, +% something that I have been asked to provide, and which is impossible under +% the old syntex with |\cite|. +% +% Note that the flag |\ifNAT@swa| determines if the citation is textual or +% parenthetical, and |\ifNAT@full| whether abbreviated or full author names +% are to be printed. +% The flag |\ifNAT@par| enables the opening and closing parentheses; this is +% used only to suppress these for |\citealt| below. +% +% The flag |\NAT@ctype| controls what |\@citex| actually outputs: author and +% year (0), author only (1), year only (2). (For numerical mode, 0 yields +% author [number].) +% +% All the citation commands are placed inside a group; they start +% with |\begingroup|, with the corresponding |\endgroup| added to +% the |\@cite| command. This localizes the flag settings so that cites may +% be contained with cites, as +% \begin{quote} +% |\citep[cited in \citealp{xx}]{yy}| +% \end{quote} +% (Without the localization, the |\citealp| turns off the brackets before +% |\citep| comes to an end.) +% \begin{macrocode} +\newif\ifNAT@full\NAT@fullfalse +\newif\ifNAT@swa +\DeclareRobustCommand\citet + {\begingroup\NAT@swafalse\let\NAT@ctype\z@\NAT@partrue + \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +\newcommand\NAT@citetp{\@ifnextchar[{\NAT@@citetp}{\NAT@@citetp[]}} +\newcommand\NAT@@citetp{} +\def\NAT@@citetp[#1]{\@ifnextchar[{\@citex[#1]}{\@citex[][#1]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citep} +% \changes{5.5}{1995 Mar 27}{Add macro as shorthand for \cs{cite[]}} +% \changes{6.5}{1997 Jan 30}{Make this standard parenthetical citation, +% with notes} +% \changes{6.6}{1997 May 26}{Define with \cs{ifNAT@par} on} +% \changes{6.6}{1997 May 27}{Redefine for new coding of \cs{@citex}} +% \changes{6.8}{1998 Feb 19}{Place inside a group} +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{z@}: allow for tighter \cs{ifnum} comparisons.} +% Parenthetical citations are made with the |\citep| command, which has a +% starred form for full authors, and may have one or two optional arguments for +% notes. +% +% This command was originally added by special request to be a simplification +% for |\cite[]|\marg{key}, and I added it grudgingly. After I reprogrammed +% \thestyle\ to handle author--year and numerical citations with the same +% \texttt{.bst} file, I needed to add the |\citet| command, and this one +% became an obvious companion for parenthetical citations. I have now altered +% its coding to be the standard, being fully equivalent in functionality +% to the older syntax |\cite|\oarg{pre}\oarg{post}\marg{key}. +% \begin{macrocode} +\DeclareRobustCommand\citep + {\begingroup\NAT@swatrue\let\NAT@ctype\z@\NAT@partrue + \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cite} +% \changes{5.0}{1994 May 18}{Add a second optional argument.} +% \changes{5.3}{1994 Sep 19}{Add starred version to print full author list.} +% \changes{5.4}{1994 Nov 24}{Replace \cmd{\if@tempswa} with \cmd{\ifNAT@swa}.} +% \changes{6.5}{1997 Jan 30}{Declare obsolete, retained for compatibility} +% \changes{6.6}{1997 May 27}{Redefine for new coding of \cs{@citex}} +% \changes{6.8}{1998 Feb 19}{Place inside a group} +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{z@}: allow for tighter \cs{ifnum} comparisons.} +% The |\cite| command was originally used to produce both textual and +% parenthetical citations; with an option argument, even an empty one, +% the citation was parenthical. I now recommend the use of |\citet| and +% |\citep| instead, retaining |\cite| only for compatibility. +% +% In numerical mode, it must be parenthetical (|ifNAT@swa| \meta{true}) both +% with and without notes, so that it emulates the standard \LaTeX\ usage. In +% author--year mode, this flag depends on presence or absence of notes. +% \begin{macrocode} +\DeclareRobustCommand\cite + {\begingroup\let\NAT@ctype\z@\NAT@partrue\NAT@swatrue + \@ifstar{\NAT@fulltrue\NAT@cites}{\NAT@fullfalse\NAT@cites}} +\newcommand\NAT@cites{\@ifnextchar [{\NAT@@citetp}{% + \ifNAT@numbers\else + \NAT@swafalse + \fi + \NAT@@citetp[]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citealt} +% \changes{5.5}{1995 Mar 16}{Add macro} +% \changes{6.5}{1997 Jan 30}{Uses \cs{citet} instead of \cs{cite}} +% \changes{6.6}{1997 May 26}{Define as \cs{citet} but with \cs{NAT@par} off} +% \changes{6.8}{1998 Feb 19}{Place inside a group} +% \changes{7.0}{1999 May 21}{Include in subpack} +% \begin{macro}{\citealp} +% \changes{6.6}{1997 Jun 23}{Add macro, like \cs{citep} without parentheses} +% \changes{6.8}{1998 Feb 19}{Place inside a group} +% \changes{7.0}{1999 May 21}{Include in subpack} +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{z@}: allow for tighter \cs{ifnum} comparisons.} +% An alternative form of citation is one in which the parentheses are not +% printed. This was originally requested by Alexander Holt, who wanted it to be +% the same as |\citet| but without any braces; since then James Bednar has asked +% that it behave exactly as the other |\cite|\emph{xxx}, including notes, to +% allow easy switching between the two possibilities. It is now defined with the +% help of the flags |\ifNAT@swa| and |\ifNAT@par| to be the same as |\citet|; +% to accommodate the more sensible |\citep| without parentheses, I now provide +% |\citealp|. +% +% I can see using |\citealp| where one wants to construct a complex +% parenthetical reference by hand, explicitly adding the braces. Thus +% it makes sense to have this feature work in numerical mode too. +% As of version~6.8, this is possible. The two macros |\NAT@cite| and +% |\NAT@citenum| are identical, but kept anyway just in case a difference +% should be added later. +% \begin{macrocode} +\DeclareRobustCommand\citealt + {\begingroup\NAT@swafalse\let\NAT@ctype\z@\NAT@parfalse + \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +\DeclareRobustCommand\citealp + {\begingroup\NAT@swatrue\let\NAT@ctype\z@\NAT@parfalse + \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +% \end{macrocode} +% \end{macro}\end{macro} +% +% \begin{macro}{\citenum} +% \changes{7.5}{2007 Feb 2}{Add macro to print citation number number} +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{z@}: allow for tighter \cs{ifnum} comparisons.} +% With version~7.5, |\citenum| is a new feature: it prints the citation number +% just like |\citealp| but without authors, and without raising it in superscript +% mode. This was requested by Antony Stone who +% wants to be able to refer to a reference number without having it raised. +% +% It should also work in author--year mode, but would be silly. +% +% \begin{macrocode} +\DeclareRobustCommand\citenum + {\begingroup + \NAT@swatrue\let\NAT@ctype\z@\NAT@parfalse\let\textsuperscript\NAT@spacechar + \NAT@citexnum[][]} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citeauthor} +% \changes{5.0}{1994 May 18}{Add means to cite authors only.} +% \changes{5.2}{1994 Aug 25}{Enclose \cs{@citenm} in braces.} +% \changes{5.2}{1994 Aug 25}{Add auxiliary file entry.} +% \changes{6.0}{1995 Sep 4}{Check for empty author} +% \changes{6.4}{1996 Oct 2}{Add dummy macros for \texttt{hyperref.sty}} +% \changes{6.6}{1997 May 27}{Define with \cs{@citex} and \cs{NAT@ctype}} +% \changes{6.8}{1998 Feb 19}{Place inside a group} +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{@ne}: allow for tighter \cs{ifnum} comparisons.} +% In order to refer to the authors without year or number, provide +% |\citeauthor| and |\citeauthor*|; for historical reasons, keep +% |\citefullauthor|. +% \begin{macrocode} +\DeclareRobustCommand\citeauthor + {\begingroup\NAT@swafalse\let\NAT@ctype\@ne\NAT@parfalse + \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Citet} +% \changes{7.0}{1999 May 10}{Add macro} +% \begin{macro}{\Citep} +% \changes{7.0}{1999 May 10}{Add macro} +% \begin{macro}{\Citealt} +% \changes{7.0}{1999 May 10}{Add macro} +% \begin{macro}{\Citealp} +% \changes{7.0}{1999 May 10}{Add macro} +% \begin{macro}{\Citeauthor} +% \changes{7.0}{1999 May 10}{Add macro} +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{z@} (resp. \cs{@ne}): allow for tighter \cs{ifnum} comparisons.} +% When a textual citation occurs at the beginning of a sentence and the first +% name is something like ``de la Maire'', it needs to be capitalized. This is +% done with the |\NAT@up| command that is redefined to be |\NAT@Up|. +% +% Provide other variations too for completeness. If I do not, someone will +% eventually ask for it, so do it now. +% \begin{macrocode} +\DeclareRobustCommand\Citet + {\begingroup\NAT@swafalse\let\NAT@ctype\z@\NAT@partrue + \let\NAT@up\NAT@Up + \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +\DeclareRobustCommand\Citep + {\begingroup\NAT@swatrue\let\NAT@ctype\z@\NAT@partrue + \let\NAT@up\NAT@Up + \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +\DeclareRobustCommand\Citealt + {\begingroup\NAT@swafalse\let\NAT@ctype\z@\NAT@parfalse + \let\NAT@up\NAT@Up + \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +\DeclareRobustCommand\Citealp + {\begingroup\NAT@swatrue\let\NAT@ctype\z@\NAT@parfalse + \let\NAT@up\NAT@Up + \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +\DeclareRobustCommand\Citeauthor + {\begingroup\NAT@swafalse\let\NAT@ctype\@ne\NAT@parfalse + \let\NAT@up\NAT@Up + \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\citeyear} +% \changes{5.0}{1994 May 18}{Add means to cite year only.} +% \changes{5.2}{1994 Aug 25}{Add auxiliary file entry.} +% \changes{6.0}{1995 Sep 4}{Check for empty year} +% \changes{6.4}{1996 Sep 12}{Extra letter also printed with year number} +% \changes{6.4}{1996 Oct 2}{Add dummy macros for \texttt{hyperref.sty}} +% \changes{6.6}{1997 May 27}{Define with \cs{@citex} and \cs{NAT@ctype}} +% \changes{6.8}{1998 Feb 19}{Place inside a group} +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{tw@}: allow for tighter \cs{ifnum} comparisons.} +% Similarly for the year only. +% \begin{macrocode} +\DeclareRobustCommand\citeyear + {\begingroup\NAT@swafalse\let\NAT@ctype\tw@\NAT@parfalse\NAT@citetp} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citeyearpar} +% \changes{6.6}{1997 May 17}{Add macro} +% \changes{6.8}{1998 Feb 19}{Place inside a group} +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{tw@}: allow for tighter \cs{ifnum} comparisons.} +% I have often been asked for a version of |\citeyear| in parentheses. +% \begin{macrocode} +\DeclareRobustCommand\citeyearpar + {\begingroup\NAT@swatrue\let\NAT@ctype\tw@\NAT@partrue\NAT@citetp} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citetext} +% \changes{6.8}{1998 Feb 19}{Add macro} +% To place any arbitrary text inside the citation braces, use |\citetext|. +% This can be used to advantage with |\citealp|. It also makes |\citeyearpar| +% unnecessary. +% \begin{macrocode} +\newcommand\citetext[1]{\NAT@open#1\NAT@close} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citefullauthor} +% \changes{5.3}{1994 Sep 13}{Add macro for those bib styles with full author +% list available} +% \changes{6.0}{1995 Sep 4}{Check for empty author} +% \changes{6.4}{1996 Oct 2}{Add dummy macros for \texttt{hyperref.sty}} +% \changes{6.6}{1997 May 27}{Define with \cs{citeauthor*}} +% Some of the author--year bibliography styles supported here (\texttt{harvard} +% and \texttt{newapa}) allow a citation with the full author list, because +% they have the necessary information in the |\bibitem| entry. With +% version~5.3, I change the native form of this entry to allow +% full authors too. +% +% This is now defined in terms of the starred version of |\citeauthor|. It is +% really only kept for compatibility reasons. +% \begin{macrocode} +\DeclareRobustCommand\citefullauthor + {\citeauthor*} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\defcitealias} +% \changes{6.9}{1999 Jan 22}{Add macro} +% \begin{macro}{\citetalias} +% \changes{6.9}{1999 Jan 22}{Add macro} +% \begin{macro}{\citepalias} +% \changes{6.9}{1999 Jan 22}{Add macro} +% \changes{8.2}{2008 Jul 01}{(AO) Assign \cs{NAT@ctype} with \cs{let} \cs{thr@@}: allow for tighter \cs{ifnum} comparisons.} +% An alias is an alternative designation for a reference, something like [ABG] +% in place of [Alpher, Bethe, Gamow, 1980]. The alias is defined with +% |\defcitealias| and used with |\citetalias| and |\citepalias|. +% This is controlled with +% |\NAT@ctype| set to 3. +% +% The advantage over simply typing in the alias name is that hyperlinks and +% indexing can be achieved. +% \begin{macrocode} +\newcommand\defcitealias[2]{% + \@ifundefined{al@#1\@extra@b@citeb}{} + {\PackageWarning{natbib}{Overwriting existing alias for citation #1}} + \@namedef{al@#1\@extra@b@citeb}{#2}} +\DeclareRobustCommand\citetalias{\begingroup + \NAT@swafalse\let\NAT@ctype\thr@@\NAT@parfalse\NAT@citetp} +\DeclareRobustCommand\citepalias{\begingroup + \NAT@swatrue\let\NAT@ctype\thr@@\NAT@partrue\NAT@citetp} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\nocite} +% \changes{6.6}{1997 Apr 6}{Revise standard macro} +% In \LaTeXe, the |\nocite| command issues a warning if the citations are not +% defined. This is a check to see that they really are entered into the list +% of references. However, the |\@extra@b@citeb| addition for the +% \texttt{chapterbib} package is not allowed for, and hence the standard +% command will never recognize the citations as being defined. Modify the +% macro accordingly. Check for |*| citation, in which case, give no warning. +% \begin{macrocode} +\renewcommand\nocite[1]{\@bsphack + \@for\@citeb:=#1\do{% + \@safe@activestrue + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \@safe@activesfalse + \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi + \if*\@citeb\else + \@ifundefined{b@\@citeb\@extra@b@citeb}{% + \NAT@citeundefined \PackageWarning{natbib}% + {Citation `\@citeb' undefined}}{}\fi}% + \@esphack} +% \end{macrocode} +% \end{macro} +% +% \subsection{Parsing the Author--Year Entries} +% \begin{macro}{\NAT@parse} +% \changes{5.0}{1994 May 18}{Add parsing command, with additional +% font and sub-accent commands relaxed} +% \changes{5.1}{1994 Jun 22}{For \LaTeXe{} of \texttt{1994/06/01}, +% can protect font and sub-accents much better} +% \changes{5.2}{1994 Aug 24}{2.09 version to run in compatibility mode} +% \changes{5.3}{1994 Sep 13}{Add full author list} +% \changes{5.3}{1994 Sep 19}{Support starred version of \cs{cite} for full +% author list} +% \changes{5.3}{1994 Sep 26}{Use \cs{@unexpandable@protect} in place of +% \cs{noexpand}} +% \changes{5.4}{1995 Feb 6}{Call \cs{@parse@date} to split date into year and +% extra label} +% \changes{5.5}{1995 May 18}{Rename from \cs{@cite@parse}} +% \changes{6.0}{1995 Sep 4}{Remove \cs{relax} from expanded \cs{@tempa} +% definition; no longer needed under new system} +% \changes{6.0}{1995 Sep 21}{Prevent expansion of forced space (tilde)} +% \changes{6.7}{1997 Nov 10}{Deactive \texttt{babel}'s \cs{active@prefix}} +% The |\bibcite| commands in the auxiliary file associate the numerical and +% author--year information with the |\bibitem| key, which is the argument to +% |\NAT@parse|. As of version~6.0, the information is stored in +% |\b@|\emph{key} for each citation, as four separate items. +% \begin{quote}\begin{tabular}{lll} +% 1. & |\NAT@num| & sequence number or non-author--year label \\ +% 2. & |\NAT@date| & year, with possible extra label \\ +% 3. & |\NAT@name| & short author list \\ +% 4. & |\NAT@all@names| & long author list (optional) +% \end{tabular}\end{quote} +% In order to define each of the above commands as the appropriate item, it +% is first necessary to expand |\b@|\emph{key} into a temporary command +% |\NAT@temp|, which is then used as the argument of |\NAT@split|, which +% makes the individual assignments. +% +% When the |\bibcite| command has been written by standard LaTeX, its second argument +% will consist of a number instead of what \thestyle\ expects (four brace-delimited things). +% One must not assume that things are as we would like. +% \changes{8.2}{2008 Jul 01}{(AO) Give \cs{NAT@split} a good argument, even when \cs{NAT@temp} is poorly constructed.}% +% \changes{8.2}{2008 Jul 16}{(AO) Avoid global definition of \cs{NAT@temp}}% +% \changes{8.2}{2008 Sep 12}{(AO) Change pattern part of \cs{NAT@split} to avoid problems with standard .aux files.}% +% \begin{macrocode} +\newcommand\NAT@parse[1]{% + \begingroup + \let\protect=\@unexpandable@protect + \let~\relax + \let\active@prefix=\@gobble + \edef\NAT@temp{\csname b@#1\@extra@b@citeb\endcsname}% + \aftergroup\NAT@split + \expandafter + \endgroup + \NAT@temp{}{}{}{}{}@@% + \expandafter\NAT@parse@date\NAT@date??????@@% + \ifciteindex\NAT@index\fi +}% +% \end{macrocode} +% +% The |\active@prefix| command appearing in \texttt{babel} causes problems +% at this point, so deactivate it. +% +% The automatic indexing of citations (|\NAT@index|) is described in +% Section~\ref{sec:idx}. +% +% \end{macro} +% +% \begin{macro}{\NAT@split} +% \changes{5.3}{1994 Sep 13}{Changed to support full author list} +% \changes{5.5}{1995 May 14}{Fix coding slightly} +% \changes{5.5}{1995 May 18}{Renamed from \cs{@citez}} +% \changes{6.0}{1995 Sep 4}{Recode for new \cs{bibcite} structure} +% \changes{8.2}{2008 Jul 13}{(AO) Protect against case where \cs{NAT@num} is defined to be the same as \cs{@empty} (malformed \texttt{.aux} file).} +% \changes{8.2}{2008 Jul 16}{(AO) Arrange to restore original state (in case \cs{cite} argument is empty).}% +% \changes{8.2}{2008 Sep 12}{(AO) Change pattern part of \cs{NAT@split} to avoid problems with standard .aux files.}% +% The actual assignments of the author--year and numerical label texts to +% the corresponding commands is carried out by |\NAT@split|. If the long +% author list is missing (argument |#4|), it is set equal to the short +% list. +% +% Query (AO): why are these assignments |\global|? I would not think it necessary. +% \begin{macrocode} +\def\NAT@split#1#2#3#4#5@@{% + \gdef\NAT@num{#1}\gdef\NAT@name{#3}\gdef\NAT@date{#2}% + \gdef\NAT@all@names{#4}% + \ifx\NAT@num\@empty\gdef\NAT@num{0}\fi + \ifx\NAT@noname\NAT@all@names \gdef\NAT@all@names{#3}\fi +}% +\def\NAT@reset@parser{% + \global\let\NAT@num\@empty + \global\let\NAT@name\@empty + \global\let\NAT@date\@empty + \global\let\NAT@all@names\@empty +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NAT@parse@date} +% \changes{5.4}{1995 Feb 6}{Add macro to split date into year and extra label} +% \changes{5.5}{1995 Mar 24}{Put extra label in braces to localize any font +% changes} +% \changes{5.5}{1995 May 18}{Rename from \cs{@parse@date}} +% With version 5.4, add the macro |\NAT@parse@date| that splits the date up +% into year and extra label, putting them into |\NAT@year| and |\NAT@exlab|. +% This is used to test if authors and years are equal for two adjacent +% citations, in which case, only the extra label is printed. The +% macro searches the first 4 characters of the date for a letter +% (|\catcode|=11) which then becomes the extra label. If there are only +% numerals in the first 4 positions (more precisely, non-letters), the 5th +% character is taken as extra label. If there is none, this will be a +% question mark. +% \begin{macrocode} +\newcommand\NAT@parse@date{} +\def\NAT@parse@date#1#2#3#4#5#6@@{% + \ifnum\the\catcode`#1=11\def\NAT@year{}\def\NAT@exlab{#1}\else + \ifnum\the\catcode`#2=11\def\NAT@year{#1}\def\NAT@exlab{#2}\else + \ifnum\the\catcode`#3=11\def\NAT@year{#1#2}\def\NAT@exlab{#3}\else + \ifnum\the\catcode`#4=11\def\NAT@year{#1#2#3}\def\NAT@exlab{#4}\else + \def\NAT@year{#1#2#3#4}\def\NAT@exlab{{#5}}\fi\fi\fi\fi} +% \end{macrocode} +% \end{macro} +% +% \subsection{Automatic Index Entries for Citations}\label{sec:idx} +% +% \begin{macro}{\NAT@idxtxt} +% \changes{6.0}{1995 Sep 21}{Add macro} +% \begin{macro}{\NAT@index} +% \changes{6.0}{1995 Sep 21}{Add macro} +% \changes{6.9}{1999 Jan 22}{Allow \cs{makeindex} to be issued before package +% loaded} +% \changes{8.2}{2008 Jul 02}{(AO) Replace \cs{ } with \cs{NAT@spacechar} in \cs{NAT@idxtxt}.} +% To make an entry in the index for every citation, I have added +% |\NAT@index| to the |\NAT@parse| command. This will do nothing unless +% |\makeindex| has been issued in the preamble, in which case it writes the +% citation information to the \texttt{.idx} file by means of the standard +% \LaTeX\ internal |\@wrindex| (which contains the closing |\endgroup\@esphack|). +% The actual format of the citation +% information is contained in |\NAT@idxtxt| which a user may redefine if +% needed. +% \begin{macrocode} +\newcommand\NAT@index{} +\let\NAT@makeindex=\makeindex +\renewcommand\makeindex{\NAT@makeindex + \renewcommand\NAT@index{\@bsphack\begingroup + \def~{\string~}\@wrindex{\NAT@idxtxt}}} +\newcommand\NAT@idxtxt{\NAT@name\NAT@spacechar\NAT@open\NAT@date\NAT@close} +% \end{macrocode} +% If |\makeindex| has already been issued before \thestyle\ is loaded, it +% does not contain these extra features. Thus issue it once more, but only with +% the extra features. +% \changes{8.2}{2008 Jul 02}{(AO) Employ \cs{@ifxundefined} for use on \cs{@indexfile}.} +% \begin{macrocode} +\@ifxundefined\@indexfile{}{\let\NAT@makeindex\relax\makeindex} +% \end{macrocode} +% \end{macro}\end{macro} +% \begin{macro}{\ifciteindex} +% \changes{6.0}{1995 Sep 21}{Add flag} +% The switch for activating automatic citation indexing is defined here. +% \begin{macrocode} +\newif\ifciteindex \citeindexfalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citeindextype} +% \changes{6.0}{1995 Sep 29}{Add macro} +% \begin{macro}{\NAT@index@alt} +% \changes{6.0}{1995 Sep 29}{Add macro} +% \changes{7.0a}{2000 Jul 24}{Add \cs{mbox} to prevent vertical shifts} +% The above coding will not work with the package \texttt{index.sty} by +% David~M. Jones. For that package, an alternative definition of |\NAT@index| +% is needed which is activated at the beginning of the document if +% \texttt{index} has been loaded. It thus does not matter in which order +% \thestyle\ or \texttt{index} are loaded. +% +% With the \texttt{index} package, it is possible to have several index +% files, defined by a |\newindex| command that associates a name with two +% file extensions. By default, the name \texttt{default} is associated with +% \texttt{.idx} and \texttt{.ind}. To make the automatic index entries go to +% a different set, redefine |\citeindextype|. +% +% \changes{8.3}{2008 Dec 03}{Remove \cs{mbox} from \cs{NAT@exp}} +% There used to be an +% |\mbox{}| before |\index| below which apparently ``prevents vertical shifts when the +% |\cite| command comes at the beginning of a tabular column.'' +% However, it also causes crashes when listing the bibliography because it comes +% before the first |\item| command. Removed. +% +% \begin{macrocode} +\newcommand\citeindextype{default} +\newcommand\NAT@index@alt{{\let\protect=\noexpand\let~\relax + \xdef\NAT@temp{\NAT@idxtxt}}\expandafter\NAT@exp\NAT@temp\@nil} +\newcommand\NAT@exp{} +\def\NAT@exp#1\@nil{\index[\citeindextype]{#1}} + +\AtBeginDocument{% +\@ifpackageloaded{index}{\let\NAT@index=\NAT@index@alt}{}} +% \end{macrocode} +% \end{macro}\end{macro} +% +% \subsection{Writing the Entries to the Auxiliary File} +% +% \noindent(New to version 6.0.) +% +% The author--year information is transferred from the \btx{} database to +% the document via |\bibitem| commands in the |thebibliography| +% environment. Standard \LaTeX\ simply assigns a running number to these +% entries, and writes that number with the citation key to the auxiliary +% file. For author--year citations, the author list and year must be written +% somehow to the auxiliary file. The form for this is to be +% \begin{quote} +% |\bibcite|\marg{key}|{|\marg{num}\marg{year}\marg{short}\marg{long}|}| +% \end{quote} +% This is the same form as in standard \LaTeX, except that the second +% argument becomes a set of 4 items. Here \emph{num} is the sequential +% number that is to be used if a numerical style is selected, \emph{short} +% is the abbreviate author list (Jones et al.), \emph{long} the full author +% list. +% +% The author--year information is contained in the optional argument to +% |\bibitem|, but just how it is formatted depends on the system used. The +% native \thestyle\ syntax is +% \begin{quote} +% |\bibitem[|\emph{short}|(|\emph{year}|)|\emph{long}|]|\marg{key} +% \end{quote} +% while the \texttt{chicago} system is +% \begin{quote} +% |\bibitem[\protect\citeauthoryear|\marg{long}\marg{short}\marg{year}|]|% +% \marg{key} +% \end{quote} +% +% \begin{macro}{\NAT@ifcmd} +% \changes{6.0}{1995 Sep 4}{Add macro} +% \begin{macro}{\NAT@ifxcmd} +% \changes{6.0}{1995 Sep 4}{Add macro} +% It is necessary to process the optional argument by first testing if it +% contains a command, and if so, to execute that command. Otherwise, insert +% our own command to process the following text. +% \begin{macrocode} +\newcommand\NAT@ifcmd{\futurelet\NAT@temp\NAT@ifxcmd} +\newcommand\NAT@ifxcmd{\ifx\NAT@temp\relax\else\expandafter\NAT@bare\fi} +% \end{macrocode} +% This actually only tests if the next token expands to |\relax|, which is +% what |\protect| will be at this point. If so, just procede: the command +% itself follows. Otherwise, insert |\NAT@bare|. (Note, we must also define +% the possible commands like |\citeauthoryear| to do what we want.) +% \end{macro}\end{macro} +% +% \begin{macro}{\NAT@bare} +% \changes{6.0}{1995 Sep 4}{Add macro} +% \changes{6.6}{1997 Jun 4}{The \cs{stepcounter} made always present} +% The command that is inserted if none is present must parse the native +% syntax for the author--year information. The template is somewhat complex +% because it must be able to test if there are no parentheses at all, in +% which case it activates the alternative, |\NAT@apalk| for the +% \texttt{apalike} syntax. When |\NAT@ifcmd| is invoked, it adds +% |(@)(@)\@nil| in order to provide the full template of |\NAT@bare|; if the +% argument itself contains no text in parentheses (not \thestyle{} +% syntax) then |#2| will be |@|; otherwise, |#4| catches the extra +% parentheses. +% +% Using |(@)| instead of the earlier |()| (pre~7.0) allows empty years to be +% given. Empty years are now permitted for citations with a code designation +% in place of the authors. Troubles will now occur if the year begins with +% |@|. +% \begin{macrocode} +\def\NAT@bare#1(#2)#3(@)#4\@nil#5{% +%<*all|apalike|authordate> + \if @#2 + \expandafter\NAT@apalk#1, , \@nil{#5}% + \else +%</all|apalike|authordate> + \NAT@wrout{\the\c@NAT@ctr}{#2}{#1}{#3}{#5}% +%<all|apalike|authordate>\fi +} +% \end{macrocode} +% The |NAT@ctr| above contains the designation of whatever counter is +% selected in the list environment for the \texttt{thebibliography}; it is +% the sequential counter for the entries. +% \end{macro} +% +% \begin{macro}{\NAT@wrout} +% \changes{6.0}{1995 Sep 4}{Add macro} +% \begin{macro}{\NAT@noname} +% \changes{6.0}{1995 Sep 6}{Add macro} +% \changes{6.0}{1995 Sep 21}{Prevent expansion of forced space (tilde)} +% Write the information to the auxiliary file as two arguments to |\bibcite|. +% +% \medskip\noindent +% Note: the 5 arguments are: counter, year, short list, long list, key. +% The two author lists are written enclosed in braces to make sure any +% font commands are kept local. Otherwise, one level of braces disappears for +% authors like |{\em Jones}|. +% +% To test later for the absence of names, define |\NAT@noname| here. +% Define it with |\def|, otherwise it will be `long' and will not test +% correctly with |\NAT@all@names| which is defined with |\gdef|. +% \begin{macrocode} +\newcommand\NAT@wrout[5]{% +\if@filesw + {\let\protect\noexpand\let~\relax + \immediate + \write\@auxout{\string\bibcite{#5}{{#1}{#2}{{#3}}{{#4}}}}}\fi +\ignorespaces} +\def\NAT@noname{{}} +% \end{macrocode} +% \end{macro}\end{macro} +% +% \begin{macro}{\bibitem} +% \changes{6.0}{1995 Sep 4}{Recode from standard} +% \begin{macro}{\@lbibitem} +% \changes{6.0}{1995 Sep 4}{Recode from standard} +% \changes{6.4}{1996 Oct 2}{Add dummy macros for \texttt{hyperref.sty}} +% The above commands are initiated with |\NAT@ifcmd| which decides whether +% |\NAT@bare| or one of the other commands is to be executed on the +% following arguments. It is actually |\@lbibitem| that calls |\NAT@ifcmd|, +% which in turn is invoked by the user command |\bibitem|. +% +% If |\bibitem| has no optional argument, then we have a numerical citation +% style, which is to be forced by setting |\NAT@stdbst|. Put the sequential +% counter value in as the argument to |\@lbibitem| which is then treated as +% a non-author--year label. +% \begin{macrocode} +\renewcommand\bibitem{\@ifnextchar[{\@lbibitem}{\@lbibitem[]}}% +% \end{macrocode} +% Write the label with |\item| in the bibliography listing with the current +% value of |\NAT@num|, if it exists. This will either be the sequential +% number or whatever non-author--year text that was given as a special +% `numerical'. Since |\@biblabel| outputs only in numerical mode, this +% label vanishes for author--year mode. +% +% Finally invoke |\NAT@ifcmd| with the funny template to activate +% |\NAT@bare| or some alternative. +% +% \changes{6.8b}{1998 July 6}{To work with \texttt{chapterbib} and +% \texttt{backref}} +% \changes{8.2}{2008 Jan 10}{(AO) +% Introduce, for \texttt{merge} package option, \cs{NAT@bibitem@first@sw}} +% The \texttt{hyperref} package can call the \texttt{backref} package which +% do not work with the \texttt{chapterbib} package. I have arranged with +% Sebastian Rahtz to add the compatibility via \thestyle. Thus I add a fix to +% include the |\@extra@b@citeb| suffix to the |\br@#2| commands called by +% \texttt{backref}. +% +% The optional arguments to the cite key have the effect of giving a meaning +% to the |\BibitemOpen| and |\BibitemShut| control sequence names. +% \begin{macrocode} +\let\NAT@bibitem@first@sw\@secondoftwo +\def\@lbibitem[#1]#2{% + \if\relax\@extra@b@citeb\relax\else + \@ifundefined{br@#2\@extra@b@citeb}{}{% + \@namedef{br@#2}{\@nameuse{br@#2\@extra@b@citeb}}% + }% + \fi + \@ifundefined{b@#2\@extra@b@citeb}{% + \def\NAT@num{}% + }{% + \NAT@parse{#2}% + }% + \def\NAT@tmp{#1}% +% \end{macrocode} +% \changes{8.2}{2008 Jul 13}{(AO) Allow optional arguments preceding cite key.} +% We give meanings to \cs{bibitemOpen} and \cs{bibitemShut}; +% the default is \verb+\relax+. Special .bst files take care of inserting markup into +% the .bbl file. There, each \cs{bibitem} begins with \cs{BibitemOpen} and +% ends with \cs{BibitemShut}. +% \begin{macrocode} + \expandafter\let\expandafter\bibitemOpen\csname NAT@b@open@#2\endcsname + \expandafter\let\expandafter\bibitemShut\csname NAT@b@shut@#2\endcsname +% \end{macrocode} +% \changes{8.2}{2008 Jan 10}{(AO)Introduce \texttt{merge} package option} +% (AO) If this reference's |\cite| had been marked with a *, +% then it is to be merged into the previous reference, +% but only if this is not the first \verb+\bibitem+. +% +% We do Boolean algebra: if |\NAT@merge| > 1, and +% if this is not the first |\bibitem|, and +% if this citation key was starred, then +% perform the action delimited by the second set of braces below, otherwise the first set. +% \begin{macrocode} + \@ifnum{\NAT@merge>\@ne}{% + \NAT@bibitem@first@sw{% + \@firstoftwo + }{% + \@ifundefined{NAT@b*@#2}{% + \@firstoftwo + }{% + \expandafter\def\expandafter\NAT@num\expandafter{\the\c@NAT@ctr}% + \@secondoftwo + }% + }% + }{% + \@firstoftwo + }% +% \end{macrocode} +% The first set of braces will be executed (format an |\item|) unless the above test was satisfied. +% \changes{8.3}{2008 Nov 5}{(PWD) Correct code for when label is ok} +% \changes{8.3}{2008 Nov 5}{(PWD) Move incrementing of counter} +% \begin{macrocode} + {% + \global\advance\c@NAT@ctr\@ne + \@ifx{\NAT@tmp\@empty}{\@firstoftwo}{% + \@secondoftwo + }% + {% + \expandafter\def\expandafter\NAT@num\expandafter{\the\c@NAT@ctr}% + \global\NAT@stdbsttrue + }{}% + \bibitem@fin + \item[\hfil\NAT@anchor{#2}{\NAT@num}]% + \global\let\NAT@bibitem@first@sw\@secondoftwo + \NAT@bibitem@init + }% +% \end{macrocode} +% The second set of braces, executed when the test is satisfied. This does the +% merging with the previous entry. +% \begin{macrocode} + {% + \NAT@anchor{#2}{}% + \NAT@bibitem@cont + \bibitem@fin + }% +% \end{macrocode} +% If working on an author-year styled entry, +% we tail out with |\NAT@ifcmd|, which subjects our arguments to further processing. +% Otherwise, we write out a very simple |\bibcite| command to the .aux file. +% \begin{macrocode} + \@ifx{\NAT@tmp\@empty}{% + \NAT@wrout{\the\c@NAT@ctr}{}{}{}{#2}% + }{% + \expandafter\NAT@ifcmd\NAT@tmp(@)(@)\@nil{#2}% + }% +}% +% \end{macrocode} +% +% Note: in standard \LaTeX, the sequential list counter is printed directly +% with |\item|, and then written to the auxiliary file so that |\cite| can +% refer to it on the next run. Here, |\item| prints exactly the same thing +% as |\cite| on the current run, if we are in numerical mode, otherwise +% nothing. +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bibitem@fin} +% \begin{macro}{\NAT@bibitem@init} +% \begin{macro}{\NAT@bibitem@cont} +% The procedure \cs{bibitem@fin}, a dispatcher based on \cs{@bibstop}, +% completes the processing of the previous \cs{bibitem}, +% producing the needed punctuation. +% The other procedures are hooks, +% \cs{NAT@bibitem@init} executed if we are calling \cs{item}, +% and \cs{NAT@bibitem@cont} if we are not. +% \changes{8.31a}{2009 Nov 07}{(AO) Fix punctuation bugs in merge code} +% \begin{macrocode} +\def\bibitem@fin{% + \@ifxundefined\@bibstop{}{\csname bibitem@\@bibstop\endcsname}% +}% +\def\NAT@bibitem@init{% + \let\@bibstop\@undefined +}% +\def\NAT@bibitem@cont{% + \let\bibitem@Stop\bibitemContinue + \let\bibitem@NoStop\bibitemContinue +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\BibitemOpen} +% \begin{macro}{\BibitemShut} +% \begin{macro}{\bibitemStop} +% \begin{macro}{\bibitemNoStop} +% \begin{macro}{\bibitemContinue} +% The markup that the special .bst puts into the .bbl file delimits each entry with +% \cs{BibitemOpen} and \cs{BibitemShut}, thereby giving us the means +% to insert text at the beginning and end of the entry. +% The latter command takes an argument, allowing Bib\TeX\ to tell us +% if the entry ended with a stop (period) or not. +% These punctuation procedures are defined here: +% \cs{bibitemStop} in the case where the entry ended with a stop, +% \cs{bibitemNoStop} if no stop, +% and the alternative \cs{bibitemContinue} if we are continuing the previous item. +% The latter two also assign the \cs{spacefactor} explicitly: we are at the end of +% a sentence. +% \changes{8.31a}{2009 Nov 07}{(AO) Fix punctuation bugs in merge code} +% \begin{macrocode} +\def\BibitemOpen{% + \bibitemOpen +}% +\def\BibitemShut#1{% + \def\@bibstop{#1}% + \let\bibitem@Stop\bibitemStop + \let\bibitem@NoStop\bibitemNoStop + \@ifx{\bibitemShut\relax}{\let\@bibitemShut\@empty}{% + \expandafter\def\expandafter\@bibitemShut\expandafter{\bibitemShut}% + }% +}% +\def\@bibitemShut{}% +\def\bibitemStop{\@bibitemShut}% +\def\bibitemNoStop{% + \@ifx{\@empty\@bibitemShut}{.\spacefactor\@mmm\space}{\@bibitemShut}% +}% +\def\bibitemContinue{% + \@ifx{\@empty\@bibitemShut}{;\spacefactor\@mmm\space}{\@bibitemShut}% +}% +\mathchardef\@mmm=3000 % +\let\bibitemOpen\relax +\let\bibitemShut\relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bibAnnote} +% \changes{8.31b}{2010 Sep 13}{Activate macro only with merging} +% \begin{macro}{\bibAnnoteFile} +% \changes{8.31b}{2010 Sep 13}{Activate macro only with merging} +% To avoid conflicts with other definitions of these macros, they are ``provided'' +% only when merging is selected. +% \begin{macrocode} +\@ifnum{\NAT@merge>\@ne}{% +\providecommand{\bibAnnote}[3]{% + \BibitemShut{#1}% + \def\@tempa{#3}\@ifx{\@tempa\@empty}{}{% + \begin{quotation}\noindent + \textsc{Key:}\ #2\\\textsc{Annotation:}\ \@tempa + \end{quotation}% + }% + \ignorespaces +}% +\providecommand{\bibAnnoteFile}[2]{% + \IfFileExists{#2}{% + \bibAnnote{#1}{#2}{\input{#2}}% + }{% + \bibAnnote{#1}{#2}{}% + }% +}% +}{}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bibfield} +% \begin{macro}{\@bibfield} +% \begin{macro}{\bibinfo} +% We provide a facility for handling the |\bibfield| markup in the .bbl file +% (that markup is generated by custom-bib styles that enable the \texttt{bibfield} guard code). +% The default semantics is to remember the content of the second argument so that it +% can be compared to the next instance of this class of |\bibfield| command. +% (In the case where references are being merged, that is, if |\NAT@merge| \(> 1\), +% and the present bib entry's key has been starred (*)). +% +% The outcome of comparing, say, the author field, is to execute one of two procedures, +% |\@bib@Xauthor| or |\@bib@Yauthor| with the content as the argument. +% +% If no special features have been enabled, these two procedures just |\relax| out, and the +% content is processed as usual. +% +% And if |elide| semantics are turned off, we do |\@secondoftwo|, which is the custom-bib default. +% +% Note that we take special measures when constructing the replacement part of the \TeX\ +% macro |\@tempa| (this will be remembered as the effective value of the field). +% If a |\Doi| markup command is encountered, we wish to ignore its first argument +% (which will be unique to the particular reference). +% +% We also define here the utility |\bibinfo| markup command of custom-bib +% (this markup is enabled by the \texttt{bibinfo} guard code). +% The procedure is a straightforward dispatcher to a macro whose name is +% based on the first argument to |\bibinfo|. For instance, |\bibinfo| |{foo}| +% will execute a procedure named |\bibinfo@X@foo|. +% If that name is undefined, the second argument of |\bibinfo| is simply expanded as is. +% If defined, the procedure should take a single argument, just like |\@firstofone| does. +% \begin{macrocode} +\def\bibfield{\@ifnum{\NAT@merge>\tw@}{\@bibfield}{\@secondoftwo}}% +\def\@bibfield#1#2{% + \begingroup + \let\Doi\@gobble + \let\bibinfo\relax + \let\restore@protect\@empty + \protected@edef\@tempa{#2}% + \aftergroup\def\aftergroup\@tempa + \expandafter\endgroup\expandafter{\@tempa}% + \expandafter\@ifx\expandafter{\csname @bib#1\endcsname\@tempa}{% + \expandafter\let\expandafter\@tempa\csname @bib@X#1\endcsname + }{% + \expandafter\let\csname @bib#1\endcsname\@tempa + \expandafter\let\expandafter\@tempa\csname @bib@Y#1\endcsname + }% + \@ifx{\@tempa\relax}{\let\@tempa\@firstofone}{}% + \@tempa{#2}% +}% +\def\bibinfo#1{% + \expandafter\let\expandafter\@tempa\csname bibinfo@X@#1\endcsname + \@ifx{\@tempa\relax}{\@firstofone}{\@tempa}% +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\NAT@bibitem@init} +% \begin{macro}{\@bib@Xauthor} +% \begin{macro}{\@bib@Xjournal} +% \begin{macro}{\@bibibid@} +% We now implement a scheme (just one out of many possible ones) for eliding repeated fields. +% +% If the author field matches, then that portion is elided, and if +% in addition the journal field matches, that portion is also elided. +% If the journal field matches and the author field does not, +% then the journal is replaced with \textit{ibid.} +% +% How it works: +% when the journal is processed by |\bibfield|, one of three possibilities will be at hand: +% \begin{enumerate} +% \item +% (the \texttt{journal} does not match) +% Here, the procedure |\@bib@Yjournal| is executed, but this control sequence name is undefined, +% so the second argument is expanded in place. +% \item +% (\texttt{journal} matchs but \texttt{author} does not) +% Here, |\bibinfo@X@journal| is set to |\@bib@Z@journal|, and the latter has its +% default meaning: +% the second argument of |\bibinfo| is replaced by \textit{ibid.}, +% \item +% (The \texttt{journal} matches and \texttt{author} also matches) +% In this case, |\bibinfo@X@journal| will be the same as |\@bib@Z@journal|, +% which has been set to |\@gobble|, +% so the second argument of |\bibinfo| is replaced by nothing. +% \end{enumerate} +% +% Adopters of \thestyle\ have the option of creating their own scheme +% and can even remove the present scheme by doing +% |\let| |\@bib@Xauthor| |\@undefined| and |\let| |\@bib@Xjournal| |\@undefined|. +% \begin{macrocode} +\def\@bib@Xauthor#1{\let\@bib@Xjournal\@gobble}% +\def\@bib@Xjournal#1{\begingroup\let\bibinfo@X@journal\@bib@Z@journal#1\endgroup}% +\def\@bibibid@#1{\textit{ibid}.}% +\appdef\NAT@bibitem@init{% + \let\@bibauthor \@empty + \let\@bibjournal \@empty + \let\@bib@Z@journal\@bibibid@ +}% +% \end{macrocode} +% +% Let us illustrate how eliding might be extended to the \texttt{year}. +% Two things need to be done: +% 1) define \cs{@bib@Xyear} to be \cs{@gobble}, and +% 2) append to \cs{NAT@bibitem@init} the code |\let| |\@bibyear| |\@empty|, thus: +% \begin{verbatim} +% \let\@bib@Xyear\@gobble +% \appdef\NAT@bibitem@init{\let\@bibyear\@empty}% +% \end{verbatim} +% However, the above fails to take into account what should happen if +% the year matches but the journal or author do not. +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\SK@lbibitem} +% \changes{6.3}{1996 Jun 10}{Include \texttt{showkeys} coding if already +% loaded} +% \changes{6.4}{1996 Jun 27}{Remove from 2.09 coding} +% \changes{6.7}{1997 Sep 12}{Test for existence of \cs{SK@lbibitem}} +% If the \texttt{showkeys} package has already been loaded, the revised +% version of |\@lbibitem| will not have been saved. In this case, rerun some +% of the coding from that package. (If \texttt{showkeys} is loaded after +% \thestyle, there is no problem.) +% +% Do not test if \texttt{showkeys} is loaded, but rather if |\SK@lbibitem| +% is defined. See comment on \texttt{showkeys} with option \texttt{final} +% on page~\pageref{SKdef}. +% +% \begin{macrocode} +\ifx\SK@lbibitem\@undefined\else + \let\SK@lbibitem\@lbibitem + \def\@lbibitem[#1]#2{% + \SK@lbibitem[#1]{#2}\SK@\SK@@label{#2}\ignorespaces}\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifNAT@stdbst} +% \changes{6.0}{1995 Sep 4}{Add flag} +% \changes{8.3}{2008 Nov 5}{Change autoswitch to numerical mode to include an error message} +% If any non-author--year |\bibitem|s have been issued, then force +% numerical mode, since the author--year |\bibitem|s can handle this, but +% the numerical ones cannot work in author--year mode. +% Do this by setting |\NAT@stdbsttrue| when this is discovered (in |\@lbibitem|) +% and use this flag to write |\NAT@force@numbers| into the aux file. +% +% \begin{macrocode} +\newif\ifNAT@stdbst \NAT@stdbstfalse + +\AtEndDocument{% + \ifNAT@stdbst\if@filesw + \immediate\write\@auxout{% + \string\providecommand\string\NAT@force@numbers{}% + \string\NAT@force@numbers + }% + \fi\fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NAT@force@numbers} +% \changes{8.3}{2008 Nov 5}{Add command to issue error message when numerical mode forced} +% This is written to the aux file when author--year citation cannot be supported. +% It is executed when the aux file is read in at the start of the next +% run. It prints an error message (warning is not enough, it may be ignored) +% and sets the numerical flag. +% \begin{macrocode} +\newcommand\NAT@force@numbers{% + \ifNAT@numbers\else + \PackageError{natbib}{Bibliography not compatible with author-year + citations.\MessageBreak + Press <return> to continue in numerical citation style} + {Check the bibliography entries for non-compliant syntax,\MessageBreak + or select author-year BibTeX style, e.g. plainnat}% + \global\NAT@numberstrue\fi} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bibcite} +% \changes{6.1}{1995 Dec 5}{Add own coding for this macro} +% \changes{6.1a}{1995 Dec 19}{Add own test for changed citations} +% Not wanting to rely on the coding for |\bibcite| in the kernel, I define +% it myself. It is not enough just to `provide' it, for it must do the +% right thing: write a label named |\b@|\emph{key}. The \LaTeX3 boys +% might decide to keep the command, but have it store the citations with +% a different prefix. +% +% (I outsmarted myself here again. The test for changed citations and +% references involves reading in the auxiliary file with revised +% definitions for |\label| and |\bibcite|. The December~1995 release does +% this via a generalized labelling command |\@newl@bel|. As a result, I +% must add this test myself. Not so bad, because the warning comes from +% \thestyle\ and explicitly refers to citations instead of just +% `references'.) +% \begin{macrocode} +\providecommand\bibcite{} +\renewcommand\bibcite[2]{% + \@ifundefined{b@#1\@extra@binfo}{\relax}{% + \NAT@citemultiple + \PackageWarningNoLine{natbib}{Citation `#1' multiply defined}% + }% + \global\@namedef{b@#1\@extra@binfo}{#2}% +}% +\AtEndDocument{\NAT@swatrue\let\bibcite\NAT@testdef} +\newcommand\NAT@testdef[2]{% + \def\NAT@temp{#2}% + \expandafter \ifx \csname b@#1\@extra@binfo\endcsname\NAT@temp + \else + \ifNAT@swa \NAT@swafalse + \PackageWarningNoLine{natbib}{% + Citation(s) may have changed.\MessageBreak + Rerun to get citations correct% + }% + \fi + \fi +}% +% \end{macrocode} +% \end{macro} +% +% \subsection{Other Author--Year Schemes} +% \begin{macro}{\NAT@apalk} +% \changes{4.1}{1993 Oct 4}{Simplify by using comma-space as separator} +% \changes{5.3}{1994 Sep 13}{Full author list equals short list} +% \changes{5.5}{1995 May 18}{Renamed from \cs{@citeapalk}} +% \changes{6.0}{1995 Sep 4}{Recoded for version~6.0} +% \changes{8.3}{2008 Dec 3}{Remove additional increments of numerical counter} +% If the argument of |\bibitem| contains no command, and if it does not +% conform to the \thestyle{} syntax, then try the \texttt{apalike} +% syntax (\emph{short}\texttt{, }\emph{year}). This has a funny template +% too in order to test for different syntax, which is indicated when |#2| +% is empty. In this case, give up trying to fit it to author--year formats, +% and go over to `numerical' with a special label. Set the flag +% |\NAT@stdbst| to mark this. This forces a numerical citation style. +% \begin{macrocode} +%<*all|apalike|authordate> +\newcommand\NAT@apalk{} +\def\NAT@apalk#1, #2, #3\@nil#4{% + \if\relax#2\relax + \global\NAT@stdbsttrue + \NAT@wrout{#1}{}{}{}{#4}% + \else + \NAT@wrout{\the\c@NAT@ctr}{#2}{#1}{}{#4}% + \fi +}% +%</all|apalike|authordate> +% \end{macrocode} +% Note: the |NAT@ctr| is stepped here and everywhere else it is used, +% except when a special `numerical' label is being used. This conforms to +% standard \LaTeX\ which only increments the counter for pure numerical +% labels, without an optional argument to |\bibitem|. +% \end{macro} +% +% The other schemes of citation labelling may also be accommodated, more +% easily than \texttt{apalike}. It is just necessary to define the particular +% commands, like |\citeauthoryear| to write the arguments to the +% auxiliary file in the required. These commands are detected by +% |\NAT@ifcmd| and simply left to be executed. +% +% The only complication is that |\citeauthoryear| may be given with two or +% three arguments. This is accommodated by testing the |#3| and changing +% the form of the write command accordingly. +% +% The form of the template is the same as for |\NAT@bare|, since this +% command is inserted in its place and must therefore conform to its +% syntax. +% +% \begin{macro}{\citeauthoryear} +% \changes{5.3}{1994 Sep 13}{Allow full authors in citation} +% \changes{6.0}{1995 Sep 4}{Recode for version 6.0} +% \changes{8.3}{2008 Dec 3}{Remove additional increments of numerical counter} +% For \texttt{newapa.bst} itself, the commands |\citestarts|, |\citeends|, +% as well as |\betweenauthors| must be defined; for others in this group, +% these commands are not needed. +% \begin{macrocode} +%<*newapa|chicago|all> +\newcommand\citeauthoryear{} +\def\citeauthoryear#1#2#3(@)(@)\@nil#4{% + \if\relax#3\relax + \NAT@wrout{\the\c@NAT@ctr}{#2}{#1}{}{#4}% + \else + \NAT@wrout{\the\c@NAT@ctr}{#3}{#2}{#1}{#4}% + \fi +}% +\newcommand\citestarts{\NAT@open}% +\newcommand\citeends{\NAT@close}% +\newcommand\betweenauthors{and}% +%</newapa|chicago|all> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\astroncite} +% \changes{6.0}{1995 Sep 4}{Recode for version 6.0} +% \changes{8.3}{2008 Dec 3}{Remove additional increments of numerical counter} +% The |\astroncite| command must similarly conform to |\NAT@bare| syntax +% and put its arguments into the auxiliary file in the correct order. +% \begin{macrocode} +%<*astron|all> +\newcommand\astroncite{} +\def\astroncite#1#2(@)(@)\@nil#3{% + \NAT@wrout{\the\c@NAT@ctr}{#2}{#1}{}{#3}% +}% +%</astron|all> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citename} +% \changes{6.0}{1995 Sep 4}{Recode for version 6.0} +% The |\citename| command just converts its arguments to the |\NAT@apalk| +% syntax, since its first argument should end in \verb*!, ! as for +% \texttt{apalike}. By making use of |\NAT@apalk| here, it is also possible +% to check for non-conformity of the syntax. +% \begin{macrocode} +%<*authordate|all> +\newcommand\citename{} +\def\citename#1#2(@)(@)\@nil#3{\expandafter\NAT@apalk#1#2, \@nil{#3}} +%</authordate|all> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\harvarditem} +% \changes{5.3}{1994 Sep 13}{Allow full authors in citation} +% \changes{5.5}{1995 May 18}{Defined in \LaTeXe\ terms} +% The Harvard family is allowed for simply by defining |\harvarditem| in +% terms of |\bibitem| with the \thestyle{} form. +% +% The |\harvarditem| must allow for the optional argument, which is +% the short author list. Use the short list in |\bibitem| if it is there, +% otherwise the long list must be taken. +% +% \begin{macrocode} +%<*harvard|all> +\newcommand\harvarditem[4][]{% + \if\relax#1\relax + \bibitem[#2(#3)]{#4}% + \else + \bibitem[#1(#3)#2]{#4}% + \fi +}% +% \end{macrocode} +% The command |\citeasnoun| must be defined since \texttt{harvard.bst} +% can add it for cross-referencing. +% \end{macro} +% +% \begin{macro}{\harvardleft} +% \changes{5.3}{1994 Sep 13}{Add macro} +% \begin{macro}{\harvardright} +% \changes{5.3}{1994 Sep 13}{Add macro} +% \begin{macro}{\harvardyearleft} +% \changes{5.3}{1994 Sep 13}{Add macro} +% \begin{macro}{\harvardyearright} +% \changes{5.3}{1994 Sep 13}{Add macro} +% \begin{macro}{\harvardand} +% \changes{5.3}{1994 Sep 13}{Add macro} +% \begin{macro}{\harvardurl} +% \changes{5.3}{1994 Sep 13}{Add macro} +% \changes{6.7}{1997 Jul 15}{Fix macro, use only one \texttt{\#}} +% The \texttt{harvard} package has been updated for \LaTeXe, and includes +% some new punctuation commands in the accompanying \texttt{bst} files. +% (Maybe they were always there and I overlooked them.) In order for +% \thestyle{} to work with these, it needs to define them. The |left| and +% |right| commands have equivalents already; |\harvardurl| is defined +% as in \texttt{harvard.sty}. It is necessary to define |\harvardand| +% conditionally, and only later, in case it has already been set to +% something else by a |\bibstyle@xxx| (e.g., \texttt{agsm} sets it +% to |\&|.) +% \begin{macrocode} +\newcommand\harvardleft{\NAT@open} +\newcommand\harvardright{\NAT@close} +\newcommand\harvardyearleft{\NAT@open} +\newcommand\harvardyearright{\NAT@close} +\AtBeginDocument{\providecommand{\harvardand}{and}} +\newcommand\harvardurl[1]{\textbf{URL:} \textit{#1}} +%</harvard|all> +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% +% \subsection{The Bibliography Listing} +% Changes must be made to the \texttt{thebibliography} environment for +% author--year citations. This is done by defining the environment with the +% features common to both schemes, and then by invoking |\@bibsetup|, which +% is either the author--year or numerical version. +% +% \begin{macro}{\bibsection} +% \changes{4.2}{1993 Oct 22}{Make specific for JGR, GRL, NLINPROC} +% \changes{5.5}{1995 May 18}{Use \cs{renewcommand}} +% \changes{6.2}{1996 Apr 15}{Modified for \texttt{amsart} and \texttt{amsbook}} +% \changes{6.4}{1996 Sep 1}{Modified for \texttt{sectionbib} option} +% \changes{6.5}{1997 Feb 5}{Allow for \cs{bib@headings} in KOMA scripts} +% \changes{7.0}{1999 May 21}{Use \cs{chapter*} for \texttt{amsbook}} +% First, |\bibsection| is defined according to the main style: if chapters +% exist, then the bibliography is a numberless chapter, otherwise a +% numberless section. For the specific journals, |\bibsection| takes on +% special definitions. +% +% Since the AMS classes \texttt{amsart} and \texttt{amsbook} redefine +% |\section*| in a way that is incompatible with the way it is used in +% the \texttt{bibliographystyle} environment, it is necessary to remove the +% |\@mkboth| from the section title. Since these classes do not use this +% command at this point, there is no loss of functionality. +% +% The packages of the KOMA scripts make use of |\bib@heading| which functions +% much like |\bibsection|. If it is defined, let |\bibsection| be equal to it. +% \changes{8.2}{2008 Jul 02}{(AO) Employ \cs{@ifxundefined} for use on \cs{chapter}, \cs{NAT@sectionbib}, and \cs{bib@heading}.} +% \changes{8.3}{2008 Dec 5}{Restore \cs{@ifundefined} for \cs{chapter}, because of +% clashes with \texttt{chapterbib} package which also does this test} +% \begin{macrocode} +\providecommand\bibsection{} +\@ifundefined{chapter}{% + \renewcommand\bibsection{% + \section*{\refname\@mkboth{\MakeUppercase{\refname}}{\MakeUppercase{\refname}}}% + }% +}{% + \@ifxundefined\NAT@sectionbib{% + \renewcommand\bibsection{% + \chapter*{\bibname\@mkboth{\MakeUppercase{\bibname}}{\MakeUppercase{\bibname}}}% + }% + }{% + \renewcommand\bibsection{% + \section*{\bibname\ifx\@mkboth\@gobbletwo\else\markright{\MakeUppercase{\bibname}}\fi}% + }% + }% +}% +\@ifclassloaded{amsart}{\renewcommand\bibsection{\section*{\refname}}}{}% +\@ifclassloaded{amsbook}{\renewcommand\bibsection{\chapter*{\bibname}}}{}% +\@ifxundefined\bib@heading{}{\let\bibsection\bib@heading}% +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{thebibliography} +% \changes{4.1b}{1993 Oct 18}{Add \cmd{\bibfont}, defaulted +% to \cmd{\relax}} +% \changes{4.2}{1993 Oct 22}{Add coding for JGR, GRL, NLINPROC} +% \changes{4.2}{1993 Nov 20}{Remove coding for AGU, since AGU-supplied +% coding is adequate but different} +% \changes{5.1}{1994 Jun 22}{Put \cmd{\bibfont} at start so \cmd{\list} +% uses list parameters appropriate for the font size} +% \changes{5.1}{1994 Jun 22}{Add \cmd{\if@openbib} as in \LaTeXe} +% \changes{5.5}{1995 Mar 27}{Add special cross-ref citations for compatibility +% with \texttt{harvard}, \texttt{chicago}, and \texttt{named}} +% \changes{6.1}{1995 Nov 22}{Replace \cs{if@openbib} with \cs{ifNAT@openbib}} +% \changes{6.1}{1995 Dec 4}{Replace counter \texttt{enumiv} with +% \texttt{NAT@ctr} and refer to it explicitly, not with \cs{@listctr}} +% \changes{6.1}{1995 Dec 4}{Use \cs{PackageWarning} for empty +% bibliography} +% \changes{6.9a}{1999 Apr 20}{Add \cs{bibpreamble}} +% +% The \texttt{thebibliography} environment is defined much as normal, except +% that |\bibsetup| contains the special features for numerical or +% author--year styles. The command |\bibfont| permits permits different +% font sizes or styles to be used in the list. For example, for +% \textsl{Nonlinear Processes} it is |\small|. This means |\bibfont| must +% be issued before the |\list| command, since the list parameters depend +% on the current font size. For \textsl{AGU}, the whole +% |\thebibliography| is left off, since the AGU-supplied coding will +% do. It is only necessary to add |\noappendix| to the AGU coding. +% +% I have replaced |\if@openbib| with |\ifNAT@openbib| in order to be +% independent of the standard classes; this flag disappeared with the +% December~1995 release of \LaTeX, so I do it myself just to be sure. +% +% At the same time, +% I have also decided to use my own counter |NAT@ctr| for the numericals; +% previously I used |enumiv| as in the standard, and refered to it +% elsewhere with |\@listctr|, but now I refer to it explicitly. This is to +% avoid trouble if |\@listctr| should ever disappear. (The value of +% |\@listctr| is set by |\usecounter|.) +% +% \changes{8.2}{2008 Jan 10}{(AO)Introduce \texttt{merge} package option} +% We need to keep track of our state within the bibliography's list: +% |\NAT@bibitem@first@sw| will be true before the first |\item| command +% is executed, false thereafter. +% \begin{macrocode} +\newcounter{NAT@ctr} +\renewenvironment{thebibliography}[1]{% + \bibsection + \parindent\z@ + \bibpreamble + \bibfont + \list{\@biblabel{\the\c@NAT@ctr}}{\@bibsetup{#1}\global\c@NAT@ctr\z@}% + \ifNAT@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000 + \sfcode`\.\@m + \let\NAT@bibitem@first@sw\@firstoftwo +% \end{macrocode} +% The files \texttt{chicago.bst} and \texttt{named.bst} can add the +% commands |\citeN| and |\shortcite| respectively to the \texttt{.bbl} +% files, for cross-referencing. Similarly, \texttt{harvard.bst} can add +% |\citeasnoun|. These commands must therefore be accommodated, +% as least within the |thebibliography| environment. +% \begin{macrocode} +%<newapa|chicago|all> \let\citeN\cite \let\shortcite\cite +%<harvard|all> \let\citeasnoun\cite +}{% + \bibitem@fin + \bibpostamble + \def\@noitemerr{% + \PackageWarning{natbib}{Empty `thebibliography' environment}% + }% + \endlist + \bibcleanup +}% +\let\bibfont\@empty +\let\bibpreamble\@empty +\let\bibpostamble\@empty +\def\bibcleanup{\vskip-\lastskip}% +% \end{macrocode} +% \end{environment} +% +% \subsection{Compatibility Commands} +% \begin{macro}{\reset@font} +% \begin{macro}{\refname} +% \changes{6.4}{1996 Jun 18}{Provide name with \LaTeXe\ too} +% \begin{macro}{\bibname} +% \changes{6.4}{1996 Jun 18}{Provide name with \LaTeXe\ too} +% For older implementations of \LaTeX~2.09 (before December, 1991) the +% |\reset@font| command does not exist. It is defined to be |\relax| under +% normal \LaTeX{}, but does more under NFSS. In case it is not defined, add +% it here. The naming commands |\bibname| and |\refname| are similarly +% unknown for this old \LaTeX. They are sometimes even unknown in non-standard +% classes that are used in place of \texttt{article}, \texttt{report}, and +% \texttt{book}. +% \begin{macrocode} +\providecommand\reset@font{\relax} +\providecommand\bibname{Bibliography} +\providecommand\refname{References} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\NAT@citeundefined} +% \changes{6.1}{1995 Nov 22}{Add macro} +% The December~1995 release of \LaTeX\ considered renaming the command +% |\G@refundefinedtrue| for flagging undefined references. However, since a +% number of packages, including \thestyle, were affected, it was decided to +% retain the old name for the new coding. I had already decided to go for +% an independent coding, which does exactly the same thing. +% \begin{macrocode} +\newcommand\NAT@citeundefined{\gdef \NAT@undefined {% + \PackageWarningNoLine{natbib}{There were undefined citations}}} +\let \NAT@undefined \relax +% \end{macrocode} +% \end{macro} +% \begin{macro}{\NAT@citemultiple} +% \changes{6.1}{1995 Dec 6}{Add macro} +% Add the warning about multiply-defined citations, as part of the +% do-it-yourself |\bibcite| definition. +% \begin{macrocode} +\newcommand\NAT@citemultiple{\gdef \NAT@multiple {% + \PackageWarningNoLine{natbib}{There were multiply defined citations}}} +\let \NAT@multiple \relax +\AtEndDocument{\NAT@undefined\NAT@multiple} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@mkboth} +% \changes{6.1}{1995 Dec 4}{Provide macro in case it is removed from +% kernel} +% Having been burned by the December~1995 update on several internal +% commands, I have decided to make \thestyle\ as independent as +% possible, or at least to avoid it crashing when internals are changed or +% disappear in future. The |\@mkboth| is used in the bibliography listing, +% and is the same as |\makeboth| with \texttt{headings} pagestyle. Provide +% a dummy in case it disappears. If the kernel should use a different +% command in future, the headings will not function, but at least there +% will be no crash. (Also needed for very old versions of \LaTeX~2.09.) +% \begin{macrocode} +\providecommand\@mkboth[2]{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MakeUppercase} +% \changes{6.1}{1995 Dec 4}{Provide compatibility for older versions} +% The |\MakeUppercase| command replaces |\uppercase| in \LaTeXe\ of +% June~1995. Provide it for earlier versions. +% \begin{macrocode} +\providecommand\MakeUppercase{\uppercase} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@extra@b@citeb} +% \changes{6.4}{1996 Sep 1}{Add macro for \texttt{chapterbib.sty}} +% \begin{macro}{\@extra@binfo} +% \changes{6.4}{1996 Sep 1}{Add macro for \texttt{chapterbib.sty}} +% Two commands used by the \texttt{chapterbib} package, but which must +% be defined to be nothing for use without that package. Do not |\let| them +% be |\relax|, for that package checks if they exist (i.e., not |\relax|) +% and redefines things like |\@citex|, which we do not want to have happen. +% The necessary redefinitions are already included in \thestyle. +% \begin{macrocode} +\providecommand{\@extra@b@citeb}{} +\gdef\@extra@binfo{} +% \end{macrocode} +% \end{macro}\end{macro} +% +% \begin{macro}{\NAT@anchor} +% A general hypertext tool, \cs{NAT@anchor}, is defined right here. +% \begin{macro}{\hyper@natanchorstart} +% \changes{6.4}{1996 Oct 2}{Provide macro for \texttt{hyperref} package} +% \begin{macro}{\hyper@natanchorend} +% \changes{6.4}{1996 Oct 2}{Provide macro for \texttt{hyperref} package} +% \begin{macro}{\hyper@natlinkstart} +% \changes{6.4}{1996 Oct 2}{Provide macro for \texttt{hyperref} package} +% \begin{macro}{\hyper@natlinkend} +% \changes{6.4}{1996 Oct 2}{Provide macro for \texttt{hyperref} package} +% \begin{macro}{\hyper@natlinkbreak} +% \changes{6.8b}{1998 July 2}{Provide macro for \texttt{hyperref} package} +% The \texttt{hyperref} package of Sebastian Rahtz and Yannis Haralambous +% defines these macros to +% make hypertext links and references. Without that package, these macros +% must be turned off. The order of loading \thestyle\ and \texttt{hyperref} +% should not be important even though it is recommended that +% \texttt{hyperref} be loaded last. +% +% The \texttt{hyperref} package does not work with \texttt{chapterbib}, but I +% have arranged with Sebastian Rahtz to add the necessary suffixes via +% \thestyle. This involves adding |\@extra@b@citeb| to all calls to +% |\hyper@natlinkstart| and |\hyper@natanchorstart|. To get \texttt{backref} to +% work, I needed to add a hack to my |\@lbibitem|. +% +% The |\hyper@natlinkbreak| to designed to break links between the names and +% date, avoiding some possible problems when links go over a page. +% +% \begin{macrocode} +\def\NAT@anchor#1#2{% + \hyper@natanchorstart{#1\@extra@b@citeb}% + \def\@tempa{#2}\@ifx{\@tempa\@empty}{}{\@biblabel{#2}}% + \hyper@natanchorend +}% +\providecommand\hyper@natanchorstart[1]{}% +\providecommand\hyper@natanchorend{}% +\providecommand\hyper@natlinkstart[1]{}% +\providecommand\hyper@natlinkend{}% +\providecommand\hyper@natlinkbreak[2]{#1}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \changes{6.7}{1997 Nov 10}{Accommodate \texttt{babel}'s redefinitions} +% \changes{6.9}{1999 Feb 26}{Include \texttt{babel} accommodation with +% \texttt{subpack}} +% \changes{6.9a}{1999 Apr 20}{Fixes for \texttt{babel} 3.6t} +% \changes{8.3}{2008 Aug 28}{Redo the \texttt{babel} accommodations} +% The \texttt{babel} bundle redefines several internal commands in order to +% handle special active characters required by some languages. +% The purpose of these redefinitions is to allow special active characters +% to appear in the citation keys; one good example is the colon which +% becomes active with the \texttt{french} option. +% The redefined commands are: |\@bibitem|, |\nocite|, |\bibcite|, and |\@citex|. +% The first is not used at all by \thestyle, which uses only |\@lbibitem| instead. +% +% But \texttt{babel} does special things for \thestyle: the |\bibcite| definition is left +% unchanged, and |\@citex| is changed to account for the different syntax under +% \thestyle. However, the way \texttt{babel} alters the \thestyle\ |\@citex| +% relies on \thestyle\ doing the same thing; this is to make the order of loading the +% packages unimportant. It is rather confusing situation. +% +% As of version~8.3 of \thestyle, we do things better. The necessary switches +% |\@safe@activestrue| and |\@safe@activesfalse| are put around all expansions +% of the citation keys, making the \thestyle\ commands immediately compatible +% with \texttt{babel}; no redefinitions are necessary. However, since \texttt{babel} +% (at least up to version 3.8l of 2008/03/16) redefines |\@citex| in a way that +% relies on \thestyle\ having already done it too (more precisely, it relies +% on \thestyle\ having already defined |\org@@citex| as the original +% definition) this step must be preserved in \thestyle. It does no harm. +% +% It is also necessary to define dummy |\@safe@actives...| in case \texttt{babel} +% is not included. Do this when \thestyle\ is loaded, not at |\begin{doc}|; +% \texttt{babel} overwrites with |\def| so order with \thestyle\ is not important; +% however, \texttt{chapterbib} issues |\nocite{*}| when loaded, and this causes +% problems if these are not already defined. +% +% \changes{8.2}{2008 Jul 02}{(AO) Employ \cs{@ifxundefined} for use on \cs{bbl@redefine}.} +% +% \begin{macrocode} +\AtBeginDocument{% + \@ifpackageloaded{babel}{% + \let\org@@citex\@citex}{}} +\providecommand\@safe@activestrue{}% +\providecommand\@safe@activesfalse{}% + +% \end{macrocode} +% +% \subsection{Sorting, Compressing, and Merging of Numbers} +% The \texttt{cite} and (obsolete) \texttt{citesort} packages by Donald +% Arseneau provide the coding for printing multiple citation numbers in +% ascending order, and with a range where applicable. That is, if the +% normal result of |\cite{..}| with several keys were [5, 3, 8, 4], the new +% result would be [3--5, 8]. +% +% Since \texttt{cite.sty} totally reimplements the citation commands (as +% does \thestyle) it is not possible to make the two compatible. Instead, I +% have removed the necessary coding from \texttt{cite.sty}, converted it to +% \thestyle\ format, and added it here. +% +% Originally I borrowed the coding from the \texttt{cite.sty} package, but for +% version~6.6, I have adapted the coding so that it orders the citation keys +% according to the sequence in the reference list. This now works for both +% numerical and author--year modes. The sorting is activated by the options +% \texttt{sort} and \texttt{sort\&compress}. +% +% \begin{macro}{\NAT@sort@cites} +% \changes{8.2}{2008 Jan 10}{(AO)Various changes to \texttt{NAT@sort@cites} and friends} +% \changes{8.2}{2008 Jul 12}{(AO) Do not write .aux file entries in \cs{NAT@citexnum} or \cs{NAT@citex}; +% do this in \cs{NAT@sort@cites} where the keys will be in the user's order.} +% +% |\NAT@sort@cites| has been taken over so that we can preprocess the +% citation keys with |\NAT@star@cite|, +% where |\NAT@cite@list| is created as a side effect. +% Afterwards, if |\NAT@sort| is greater than zero, the list is sorted with |\NAT@sort@cites@|. +% +% \begin{macrocode} +\newcommand\NAT@sort@cites[1]{% + \let\NAT@cite@list\@empty + \@for\@citeb:=#1\do{\expandafter\NAT@star@cite\@citeb\@@}% + \if@filesw + \expandafter\immediate\expandafter\write\expandafter\@auxout + \expandafter{\expandafter\string\expandafter\citation\expandafter{\NAT@cite@list}}% + \fi + \@ifnum{\NAT@sort>\z@}{% + \expandafter\NAT@sort@cites@\expandafter{\NAT@cite@list}% + }{}% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NAT@star@cite} +% \begin{macro}{\NAT@star@cite@star} +% \begin{macro}{\NAT@star@cite@nostar} +% \begin{macro}{\NAT@star@cite@pre} +% \begin{macro}{\NAT@star@cite@post} +% \changes{8.2}{2008 Jan 10}{(AO)Various changes to \texttt{NAT@sort@cites} and friends} +% \begin{macro}{\NAT@star@cite@noextension} +% \changes{8.31}{2009 Jul 16}{Add macro for backward compatibility} +% +% With package option |merge| in effect, +% the |\NAT@star@cite| procedure determines if the optional * character +% has been prepended to the citation key, and strips it. +% (If so, we define a macro that later (in |thebibliography|) flags this fact, +% allowing us to merge that reference back with the previous reference, under +% a single number.) +% The citation key is then appended to |\NAT@cite@list|. +% +% If |\NAT@merge|\({}=1\), the only processing done: +% the * is recognized as part of the |merge| syntax. +% +% \textbf{Caveat:} the citation key is chosen by the user, and there is no rule saying +% that the * character must not appear in the key. So, if the user has chosen a key +% that begins with the * character, she will get unexpected results +% (undefined citation, for one). +% The best we can do for her is allow the user to turn off this processing step, +% which they will want to do if they are being confounded: remove the |merge| package option. +% +% A problem arises when keys are being sorted, because a key marked with a * could conceivably +% move away from the key it was intended to be merged with. +% The solution is for the user to proceed by deliberate steps: +% first, select all the references and citations with sorting turned off |\NAT@sort|${}=0$, +% then, second, turn on sorting and merge together. +% +% \changes{8.2}{2008 Jul 13}{(AO) Allow optional arguments preceding cite key.} +% A second syntactical extension provided by \thestyle\ pertains to the key itself: +% within the argument of \verb+\cite+, a cite key may be preceded by two optional arguements, e.g., +% \verb+\cite[+\emph{pre}\verb+]+\verb+[+\emph{post}\verb+]{+\emph{key}\verb+}+, +% where \emph{pre} represents text to be prepended to the reference (\verb+\bibitem+ content), +% with \emph{post} appended thereto. +% +% Thus it is possible for the user to mark up the document: +% \begin{verbatim} +% text \cite{*[{See, e.g., }][ for a facile explanation]ablebaker} +% \end{verbatim} +% The above example illustrates the use of the star-form and both optional arguments. +% +% \textbf{Caveat:} Because the comma (,) character is part of the syntax of \verb+\cite+, +% and because the bracket delimiters ([]) are not first-class delimiters in the eyes of \TeX, +% you must enclose the optional argument in braces (\verb+{}+) if a comma is present in the +% argument (that goes for brackets, too, of course). +% +% The six procedures defined here are solely for the purpose of parsing the star (*) and +% the two optional arguments, followed by the usual cite key. +% +% The |NAT@star@cite@noextension| is used when no merging is wanted; this ensures +% that the old syntax for citations is followed, ie ensures backward compatibility. +% \begin{macrocode} +\def\NAT@star@cite{% + \let\NAT@star@sw\@secondoftwo + \@ifnum{\NAT@merge>\z@}{% + \@ifnextchar*{% + \let\NAT@star@sw\@firstoftwo + \NAT@star@cite@star + }{% + \NAT@star@cite@nostar + }% + }{% + \NAT@star@cite@noextension + }% +}% +\def\NAT@star@cite@star*{% + \NAT@star@cite@nostar +}% +\def\NAT@star@cite@nostar{% + \let\nat@keyopt@open\@empty + \let\nat@keyopt@shut\@empty + \@ifnextchar[{\NAT@star@cite@pre}{\NAT@star@cite@pre[]}% +}% +\def\NAT@star@cite@pre[#1]{% + \def\nat@keyopt@open{#1}% + \@ifnextchar[{\NAT@star@cite@post}{\NAT@star@cite@post[]}% +}% +\def\NAT@star@cite@post[#1]#2\@@{% + \def\nat@keyopt@shut{#1}% + \NAT@star@sw{\expandafter\global\expandafter\let\csname NAT@b*@#2\endcsname\@empty}{}% + \NAT@cite@list@append{#2}% +}% +\def\NAT@star@cite@noextension#1\@@{% + \let\nat@keyopt@open\@empty + \let\nat@keyopt@shut\@empty + \NAT@cite@list@append{#1}% +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\NAT@cite@list@append} +% |\NAT@cite@list@append{bar}| +% appends |bar| to the replacement part of |\NAT@cite@list| (without any expansion of |bar|). +% We separate the entries with a comma (,). +% +% \begin{macrocode} +\def\NAT@cite@list@append#1{% + \edef\@citeb{\@firstofone#1\@empty}% + \if@filesw\@ifxundefined\@cprwrite{}{\expandafter\@cprwrite\@citeb=}\fi + \if\relax\nat@keyopt@open\relax\else + \global\expandafter\let\csname NAT@b@open@\@citeb\endcsname\nat@keyopt@open + \fi + \if\relax\nat@keyopt@shut\relax\else + \global\expandafter\let\csname NAT@b@shut@\@citeb\endcsname\nat@keyopt@shut + \fi + \toks@\expandafter{\NAT@cite@list}% + \ifx\NAT@cite@list\@empty + \@temptokena\expandafter{\@citeb}% + \else + \@temptokena\expandafter{\expandafter,\@citeb}% + \fi + \edef\NAT@cite@list{\the\toks@\the\@temptokena}% +}% +% \end{macrocode} +% Now that we have |\NAT@appdef|, it would be beneficial to apply it to +% the workings of |\NAT@sort@cites@| and |\NAT@make@cite@list|: +% a whole lot of those nasty |\protected@edef|s would evaporate! +% \end{macro} +% +% \begin{macro}{\NAT@sort@cites@} +% \changes{6.4}{1996 Oct 11}{Add coding from \texttt{cite.sty}} +% \changes{6.6}{1997 Jun 3}{Redo to sort cite keys; works with author--year +% mode} +% This feature is not provided for with \LaTeX~2.09. It does exist in the +% journal subpackages, being selected by setting |\NAT@sort| accordingly: 0 +% for no sorting; 1 for sorting; compression (numerical mode only) is +% controlled with |\NAT@cmprs| being 0 (off) and 1 (on). +% +% The macro |\NAT@sort@cites@| places the reordered list of citation keys (the +% argument to |\cite|\textit{xxx}) in |\NAT@cite@list|. If sorting is turned +% off, this list is the same as the input. +% +% A sorted list of the citation numbers (|\NAT@num@list|) is made up following +% Arseneau's procedure; from that the citation keys are placed in +% |\NAT@cite@list| in the same order. If there are any non-numerical values of +% |\NAT@num|, these are added to |\NAT@nonsort@list|, which is appended at the +% end to the main list. Finally, the trailing comma is removed with +% |\NAT@xcom|. +% +% Algorithm note (AO): aside from an optimization for inserting a trailing key, +% the sort algorithm performs a linear search through the +% partial list of sorted keys each time a new key is inserted, thereby +% executing $O(n^2)$ key comparisons for an $n$-key list. +% +% \changes{8.2}{2008 Jan 10}{(AO)Various changes to \texttt{NAT@sort@cites} and friends} +% \changes{8.2}{2008 Jan 10}{(AO) The sort algorithm had not been stable; fixed.} +% \changes{8.2}{2008 Jul 16}{(AO) Protect against empty argument.} +% This procedure used to be known as |\NAT@sort@cites|. +% It is now called by |\NAT@sort@cites| if |\NAT@sort| is positive. +% Note that compiling |\NAT@cite@list| has already been taken care of by |\NAT@star@cite|. +% We are using the Plain \TeX\ count register |\count@| to calculate how many citations +% there will be (but we do not get the right answer if \texttt{compress} is in effect). +% +% \begin{macrocode} +\newcommand\NAT@sort@cites@[1]{% + \count@\z@ + \@tempcntb\m@ne + \let\@celt\delimiter + \def\NAT@num@list{}% + \let\NAT@cite@list\@empty + \let\NAT@nonsort@list\@empty + \@for \@citeb:=#1\do{\NAT@make@cite@list}% + \ifx\NAT@nonsort@list\@empty\else + \protected@edef\NAT@cite@list{\NAT@cite@list\NAT@nonsort@list}% + \fi + \ifx\NAT@cite@list\@empty\else + \protected@edef\NAT@cite@list{\expandafter\NAT@xcom\NAT@cite@list @@}% + \fi +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NAT@make@cite@list} +% Work by side effect: add to \cmd\NAT@cite@list\ or \cmd\NAT@nonsort@list. +% This is essentially Arseneau's coding, with some renaming and the addition +% of |\NAT@cite@list| for the citation keys. The trick |\NAT@ifcat@num| does is his: +% it determines if |\NAT@num| is really a number. This is a +% non-number if the optional argument to |\bibitem| does not conform to any +% of the allowed \thestyle\ syntaxes, such as if \texttt{alph.bst} is used. +% +% Note that in the expanded definitions of |\NAT@num@list|, the token |\celt| remains unexpanded. +% +% \changes{8.2}{2008 Jan 10}{(AO)Various changes to \texttt{NAT@sort@cites} and friends} +% \changes{8.2}{2008 Jun 26}{(AO)Employ \cs{NAT@ifcat@num} to make the test on \cs{NAT@num}} +% Made the sort a stable sort. +% \begin{macrocode} +\def\NAT@make@cite@list{% + \advance\count@\@ne + \@safe@activestrue + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \@safe@activesfalse + \@ifundefined{b@\@citeb\@extra@b@citeb}% + {\def\NAT@num{A}}% + {\NAT@parse{\@citeb}}% + \NAT@ifcat@num\NAT@num + {\@tempcnta\NAT@num \relax +% \end{macrocode} +% If less than the highest number so far, +% process the numerical list to insert number and citation key. +% \begin{macrocode} + \@ifnum{\@tempcnta<\@tempcntb}{% + \let\NAT@@cite@list=\NAT@cite@list + \let\NAT@cite@list\@empty + \begingroup\let\@celt=\NAT@celt\NAT@num@list\endgroup + \protected@edef\NAT@num@list{% + \expandafter\NAT@num@celt \NAT@num@list \@gobble @% + }% +% \end{macrocode} +% Else append. Stable sort is achieved when a duplicate high value appears. +% \begin{macrocode} + }{% + \protected@edef\NAT@num@list{\NAT@num@list \@celt{\NAT@num}}% + \protected@edef\NAT@cite@list{\NAT@cite@list\@citeb,}% + \@tempcntb\@tempcnta + }% +% \end{macrocode} +% If not a number, add it to |\NAT@nonsort@list|. +% \begin{macrocode} + }% + {\protected@edef\NAT@nonsort@list{\NAT@nonsort@list\@citeb,}}% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NAT@celt} +% Possibly insert a new key into the current position in the key list |\NAT@cite@list|. +% \changes{8.2}{2008 Jan 10}{(AO)Various changes to \texttt{NAT@sort@cites} and friends} +% Made the sort a stable sort. +% +% This procedure is run against each successive position in the key list |\NAT@num@list|, +% initially with |\NAT@cite@list| empty and |\NAT@@cite@list| holding the original key list. +% +% \begin{macrocode} +\def\NAT@celt#1{% +% \end{macrocode} +% If the new key is lower than the current key, then insert the key. +% The assignment |\let\@celt| has the effect of traversing the remained of the list with a no-op. +% \begin{macrocode} + \@ifnum{#1>\@tempcnta}{% + \xdef\NAT@cite@list{\NAT@cite@list\@citeb,\NAT@@cite@list}% + \let\@celt\@gobble +% \end{macrocode} +% Pop |\NAT@@cite@list|, appending to |\NAT@cite@list|, and continue the traversal of the list. +% \begin{macrocode} + }{% + \expandafter\def@NAT@cite@lists\NAT@@cite@list\@@ + }% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NAT@num@celt} +% Insert a new number into the number list. +% The trio of |\expandafter|s result in |\NAT@num@celt| tailing on, thus forming a loop. +% \changes{8.2}{2008 Jan 10}{(AO)Various changes to \texttt{NAT@sort@cites} and friends} +% Made the sort a stable sort. +% \begin{macrocode} +\def\NAT@num@celt#1#2{% + \ifx#1\@celt + \@ifnum{#2>\@tempcnta}{% + \@celt{\number\@tempcnta}% + \@celt{#2}% + }{% + \@celt{#2}% + \expandafter\NAT@num@celt + }% + \fi +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\def@NAT@cite@lists} +% \begin{macro}{\NAT@nextc} +% \begin{macro}{\NAT@restc} +% \begin{macro}{\NAT@xcom} +% The procedure |\def@NAT@cite@lists| effectively +% removes the first element of |\NAT@@cite@list| and appends it to |\NAT@cite@list|. +% The macros |\NAT@nextc| and |\NAT@restc| return the next entry in the list, and the +% rest of the list without the first entry, respectively. +% (AO: in lisp terminology, |\NAT@nextc| is car, |\NAT@restc| is cdr.) +% \begin{macrocode} +\def\def@NAT@cite@lists#1,#2\@@{% + \xdef\NAT@cite@list{\NAT@cite@list#1,}% + \xdef\NAT@@cite@list{#2}% +}% +\def\NAT@nextc#1,#2@@{#1,} +\def\NAT@restc#1,#2{#2} +\def\NAT@xcom#1,@@{#1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Local Configuration} +% \changes{5.2}{1994 Aug 25}{Add reading in of \texttt{natbib.cfg}} +% \changes{5.5}{1995 Mar 21}{Local configuration read in at end} +% To accommodate local additional |\bibstyle@| definitions, +% or any other modifications to the coding, read in +% configuration file \texttt{natbib.cfg} if it exists. +% \begin{macrocode} +\InputIfFileExists{natbib.cfg} + {\typeout{Local config file natbib.cfg used}}{} +%</package> +% \end{macrocode} +% +% \Finale diff --git a/macros/latex/contrib/natbib/natbib.ins b/macros/latex/contrib/natbib/natbib.ins new file mode 100644 index 0000000000..bba3026fc8 --- /dev/null +++ b/macros/latex/contrib/natbib/natbib.ins @@ -0,0 +1,87 @@ +% File: natbib.ins +% Copyright 2009 Patrick W. Daly +% +% This is the natbib installation file for extracting package and driver +% files from the original source file. Simply process it under +% TeX or LaTeX. +% +% This installation works with docstrip 2.4 or later. + +\def\batchfile{natbib.ins} +\input docstrip + +\preamble +============================================= +IMPORTANT NOTICE: + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1 of the License, or any later version. + +This is a generated file. +It may not be distributed without the original source file \inFileName. + +Full documentation can be obtained by LaTeXing that original file. +Only a few abbreviated comments remain here to describe the usage. +============================================= +\endpreamble +\postamble + +<<<<< End of generated file <<<<<< +\endpostamble +\keepsilent + +\declarepreamble\refsheet +============================================= +IMPORTANT NOTICE: + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1 of the License, or any later version. + +This is a generated file. +It may not be distributed without the original source file \inFileName. + +This is a Reference Sheet for natbib. It consists of excerpts from the +original source file. + +For more details, LaTeX the source \inFileName. +============================================== +\endpreamble + +\declarepostamble\refsheetq + +End of Reference Sheet file + +\endpostamble + +\declarepreamble\driver +============================================ +This is the driver file to produce the LaTeX documentation +from the original source file \inFileName. + +Make changes to it as needed. (Never change the file \inFileName!) +============================================ +\endpreamble + +\declarepostamble\driverq + +End of documentation driver file. +\endpostamble + +\askforoverwritefalse +\generate{\file{natbib.sty}{\from{natbib.dtx}{package,all}} + \file{natnotes.tex}{\usepreamble\refsheet\usepostamble\refsheetq + \from{natbib.dtx}{notes}} + \file{natbib.ltx}{\usepreamble\driver\usepostamble\driverq + \from{natbib.dtx}{driver}} + } + +\obeyspaces +\Msg{*********************************************}% +\Msg{* For documentation, process natbib.dtx *}% +\Msg{* or the driver file natbib.ltx *}% +\Msg{* For reference sheet, process natnotes.tex *} +\Msg{*********************************************} diff --git a/macros/latex/contrib/natbib/natbib.pdf b/macros/latex/contrib/natbib/natbib.pdf Binary files differnew file mode 100644 index 0000000000..b23b0ad3b8 --- /dev/null +++ b/macros/latex/contrib/natbib/natbib.pdf diff --git a/macros/latex/contrib/natbib/natnotes.pdf b/macros/latex/contrib/natbib/natnotes.pdf Binary files differnew file mode 100644 index 0000000000..ad36e11059 --- /dev/null +++ b/macros/latex/contrib/natbib/natnotes.pdf diff --git a/macros/latex/contrib/natbib/plainnat.bst b/macros/latex/contrib/natbib/plainnat.bst new file mode 100644 index 0000000000..4746cf13f7 --- /dev/null +++ b/macros/latex/contrib/natbib/plainnat.bst @@ -0,0 +1,1436 @@ +%% File: `plainnat.bst' +%% A modification of `plain.bst' for use with natbib package +%% +%% Copyright 1993-2007 Patrick W Daly +%% Max-Planck-Institut f\"ur Sonnensystemforschung +%% Max-Planck-Str. 2 +%% D-37191 Katlenburg-Lindau +%% Germany +%% E-mail: daly@mps.mpg.de +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt; either +%% version 1 of the License, or any later version. +%% + % Version and source file information: + % \ProvidesFile{natbst.mbs}[2007/11/26 1.93 (PWD)] + % + % BibTeX `plainnat' family + % version 0.99b for BibTeX versions 0.99a or later, + % for LaTeX versions 2.09 and 2e. + % + % For use with the `natbib.sty' package; emulates the corresponding + % member of the `plain' family, but with author-year citations. + % + % With version 6.0 of `natbib.sty', it may also be used for numerical + % citations, while retaining the commands \citeauthor, \citefullauthor, + % and \citeyear to print the corresponding information. + % + % For version 7.0 of `natbib.sty', the KEY field replaces missing + % authors/editors, and the date is left blank in \bibitem. + % + % Includes field EID for the sequence/citation number of electronic journals + % which is used instead of page numbers. + % + % Includes fields ISBN and ISSN. + % + % Includes field URL for Internet addresses. + % + % Includes field DOI for Digital Object Idenfifiers. + % + % Works best with the url.sty package of Donald Arseneau. + % + % Works with identical authors and year are further sorted by + % citation key, to preserve any natural sequence. + % +ENTRY + { address + author + booktitle + chapter + doi + eid + edition + editor + howpublished + institution + isbn + issn + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + volume + year + } + {} + { label extra.label sort.label short.list } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +FUNCTION {format.isbn} +{ isbn empty$ + { "" } + { new.block "ISBN " isbn * } + if$ +} + +FUNCTION {format.issn} +{ issn empty$ + { "" } + { new.block "ISSN " issn * } + if$ +} + +FUNCTION {format.url} +{ url empty$ + { "" } + { new.block "URL \url{" url * "}" * } + if$ +} + +FUNCTION {format.doi} +{ doi empty$ + { "" } + { new.block "\doi{" doi * "}" * } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ } + if$ +} + +FUNCTION {format.full.names} +{'s := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}" format.name$ 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.full} +{ author empty$ + { editor empty$ + { "" } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.full} +{ author empty$ + { "" } + { author format.full.names } + if$ +} + +FUNCTION {editor.full} +{ editor empty$ + { "" } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.full + { type$ "proceedings" = + 'editor.full + 'author.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year duplicate$ empty$ + { "empty year in " cite$ * warning$ + pop$ "" } + 'skip$ + if$ + month empty$ + 'skip$ + { month + " " * swap$ * + } + if$ + extra.label * +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.eid} +{ eid empty$ + { "" } + { "art." eid tie.or.space.connect } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "\penalty0 (" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":\penalty0 " * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.vol.num.eid} +{ volume field.or.null + number empty$ + 'skip$ + { "\penalty0 (" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + eid empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.eid } + { ":\penalty0 " * eid * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { "In \emph{" journal * "}" * } + if$ + } + { "In " } + if$ + " \citet{" * crossref * "}" * +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + "In " + } + { "Volume" volume tie.or.space.connect + " of " * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { "\emph{" * series * "}" * } + if$ + } + 'skip$ + if$ + } + 'skip$ + if$ + " \citet{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { "In \emph{" booktitle * "}" * } + if$ + } + { "In " } + if$ + } + { "In " } + if$ + " \citet{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + eid empty$ + { format.vol.num.pages output } + { format.vol.num.eid output } + if$ + format.date "year" output.check + } + { format.article.crossref output.nonnull + eid empty$ + { format.pages output } + { format.eid output } + if$ + } + if$ + format.issn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + new.block + format.title "title" output.check + howpublished address new.block.checkb + howpublished output + address output + format.date output + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + new.block + format.btitle "title" output.check + organization address new.block.checkb + organization output + address output + format.edition output + format.date output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + format.url output + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished output + format.date output + format.issn output + format.url output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + format.url output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address output + format.date "year" output.check + new.sentence + organization output + publisher output + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + format.url output + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + note "note" output.check + format.date output + format.url output + fin.entry +} + +FUNCTION {default.type} { misc } + + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + + + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.key.organization.label} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.organization.label} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.organization.label + { type$ "manual" = + 'author.key.organization.label + 'author.key.label + if$ + } + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { numnames #2 > nameptr #2 = and + { "zz" * year field.or.null * " " * } + 'skip$ + if$ + t sortify * + } + if$ + } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + + +FUNCTION {presort} +{ calc.label + label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + " " + * + year field.or.null sortify + * + " " + * + cite$ + * + #1 entry.max$ substring$ + 'sort.label := + sort.label * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label last.label next.extra } + +INTEGERS { longest.label.width last.extra.num number.label } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := + #0 'number.label := +} + +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {bib.sort.order} +{ sort.label 'sort.key$ := +} + +ITERATE {bib.sort.order} + +SORT + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\providecommand{\natexlab}[1]{#1}" + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\expandafter\ifx\csname urlstyle\endcsname\relax" + write$ newline$ + " \providecommand{\doi}[1]{doi: #1}\else" + write$ newline$ + " \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi" + write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/macros/latex/contrib/natbib/unsrtnat.bst b/macros/latex/contrib/natbib/unsrtnat.bst new file mode 100644 index 0000000000..5d82d41fc4 --- /dev/null +++ b/macros/latex/contrib/natbib/unsrtnat.bst @@ -0,0 +1,1322 @@ +%% File: `unsrtnat.bst' +%% A modification of `unsrt.bst' for use with natbib package +%% +%% Copyright 1993-2007 Patrick W Daly +%% Max-Planck-Institut f\"ur Sonnensystemforschung +%% Max-Planck-Str. 2 +%% D-37191 Katlenburg-Lindau +%% Germany +%% E-mail: daly@mps.mpg.de +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt; either +%% version 1 of the License, or any later version. +%% + % Version and source file information: + % \ProvidesFile{natbst.mbs}[2007/11/26 1.93 (PWD)] + % + % BibTeX `plainnat' family + % version 0.99b for BibTeX versions 0.99a or later, + % for LaTeX versions 2.09 and 2e. + % + % For use with the `natbib.sty' package; emulates the corresponding + % member of the `plain' family, but with author-year citations. + % + % With version 6.0 of `natbib.sty', it may also be used for numerical + % citations, while retaining the commands \citeauthor, \citefullauthor, + % and \citeyear to print the corresponding information. + % + % For version 7.0 of `natbib.sty', the KEY field replaces missing + % authors/editors, and the date is left blank in \bibitem. + % + % Includes field EID for the sequence/citation number of electronic journals + % which is used instead of page numbers. + % + % Includes fields ISBN and ISSN. + % + % Includes field URL for Internet addresses. + % + % Includes field DOI for Digital Object Idenfifiers. + % + % Works best with the url.sty package of Donald Arseneau. + % + % Works with identical authors and year are further sorted by + % title text, as in the standard plain.bst etc. + % +ENTRY + { address + author + booktitle + chapter + doi + eid + edition + editor + howpublished + institution + isbn + issn + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + volume + year + } + {} + { label extra.label sort.label short.list } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +FUNCTION {format.isbn} +{ isbn empty$ + { "" } + { new.block "ISBN " isbn * } + if$ +} + +FUNCTION {format.issn} +{ issn empty$ + { "" } + { new.block "ISSN " issn * } + if$ +} + +FUNCTION {format.url} +{ url empty$ + { "" } + { new.block "URL \url{" url * "}" * } + if$ +} + +FUNCTION {format.doi} +{ doi empty$ + { "" } + { new.block "\doi{" doi * "}" * } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ } + if$ +} + +FUNCTION {format.full.names} +{'s := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}" format.name$ 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.full} +{ author empty$ + { editor empty$ + { "" } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.full} +{ author empty$ + { "" } + { author format.full.names } + if$ +} + +FUNCTION {editor.full} +{ editor empty$ + { "" } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.full + { type$ "proceedings" = + 'editor.full + 'author.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year duplicate$ empty$ + { "empty year in " cite$ * warning$ + pop$ "" } + 'skip$ + if$ + month empty$ + 'skip$ + { month + " " * swap$ * + } + if$ + extra.label * +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.eid} +{ eid empty$ + { "" } + { "art." eid tie.or.space.connect } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "\penalty0 (" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":\penalty0 " * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.vol.num.eid} +{ volume field.or.null + number empty$ + 'skip$ + { "\penalty0 (" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + eid empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.eid } + { ":\penalty0 " * eid * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { "In \emph{" journal * "}" * } + if$ + } + { "In " } + if$ + " \citet{" * crossref * "}" * +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + "In " + } + { "Volume" volume tie.or.space.connect + " of " * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { "\emph{" * series * "}" * } + if$ + } + 'skip$ + if$ + } + 'skip$ + if$ + " \citet{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { "In \emph{" booktitle * "}" * } + if$ + } + { "In " } + if$ + } + { "In " } + if$ + " \citet{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + eid empty$ + { format.vol.num.pages output } + { format.vol.num.eid output } + if$ + format.date "year" output.check + } + { format.article.crossref output.nonnull + eid empty$ + { format.pages output } + { format.eid output } + if$ + } + if$ + format.issn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + new.block + format.title "title" output.check + howpublished address new.block.checkb + howpublished output + address output + format.date output + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + new.block + format.btitle "title" output.check + organization address new.block.checkb + organization output + address output + format.edition output + format.date output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + format.url output + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished output + format.date output + format.issn output + format.url output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + format.url output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address output + format.date "year" output.check + new.sentence + organization output + publisher output + format.isbn output + format.doi output + format.url output + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + format.url output + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + note "note" output.check + format.date output + format.url output + fin.entry +} + +FUNCTION {default.type} { misc } + + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + + + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.key.organization.label} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.organization.label} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.organization.label + { type$ "manual" = + 'author.key.organization.label + 'author.key.label + if$ + } + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +INTEGERS { seq.num } + +FUNCTION {init.seq} +{ #0 'seq.num :=} + +EXECUTE {init.seq} + +FUNCTION {int.to.fix} +{ "000000000" swap$ int.to.str$ * + #-1 #10 substring$ +} + + +FUNCTION {presort} +{ calc.label + label sortify + " " + * + seq.num #1 + 'seq.num := + seq.num int.to.fix + 'sort.label := + sort.label * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label last.label next.extra } + +INTEGERS { longest.label.width last.extra.num number.label } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := + #0 'number.label := +} + +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {bib.sort.order} +{ sort.label 'sort.key$ := +} + +ITERATE {bib.sort.order} + +SORT + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\providecommand{\natexlab}[1]{#1}" + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\expandafter\ifx\csname urlstyle\endcsname\relax" + write$ newline$ + " \providecommand{\doi}[1]{doi: #1}\else" + write$ newline$ + " \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi" + write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} |