summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/custom-bib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/custom-bib
Initial commit
Diffstat (limited to 'macros/latex/contrib/custom-bib')
-rw-r--r--macros/latex/contrib/custom-bib/README556
-rw-r--r--macros/latex/contrib/custom-bib/catalan.mbs324
-rw-r--r--macros/latex/contrib/custom-bib/dansk.mbs315
-rw-r--r--macros/latex/contrib/custom-bib/dutch.mbs326
-rw-r--r--macros/latex/contrib/custom-bib/english.mbs359
-rw-r--r--macros/latex/contrib/custom-bib/esperant.mbs310
-rw-r--r--macros/latex/contrib/custom-bib/finnish.mbs301
-rw-r--r--macros/latex/contrib/custom-bib/french.mbs312
-rw-r--r--macros/latex/contrib/custom-bib/geojour.mbs404
-rw-r--r--macros/latex/contrib/custom-bib/german.mbs335
-rw-r--r--macros/latex/contrib/custom-bib/italian.mbs308
-rw-r--r--macros/latex/contrib/custom-bib/makebst.dtx1247
-rw-r--r--macros/latex/contrib/custom-bib/makebst.ins62
-rw-r--r--macros/latex/contrib/custom-bib/makebst.pdfbin0 -> 325370 bytes
-rw-r--r--macros/latex/contrib/custom-bib/makebst.tex310
-rw-r--r--macros/latex/contrib/custom-bib/merlin.mbs9446
-rw-r--r--macros/latex/contrib/custom-bib/merlin.pdfbin0 -> 389369 bytes
-rw-r--r--macros/latex/contrib/custom-bib/norsk.mbs316
-rw-r--r--macros/latex/contrib/custom-bib/photjour.mbs227
-rw-r--r--macros/latex/contrib/custom-bib/physjour.mbs398
-rw-r--r--macros/latex/contrib/custom-bib/polski.mbs348
-rw-r--r--macros/latex/contrib/custom-bib/portuges.mbs316
-rw-r--r--macros/latex/contrib/custom-bib/readme.mkb556
-rw-r--r--macros/latex/contrib/custom-bib/shorthnd.ins173
-rw-r--r--macros/latex/contrib/custom-bib/shorthnd.tex415
-rw-r--r--macros/latex/contrib/custom-bib/slovene.mbs311
-rw-r--r--macros/latex/contrib/custom-bib/spanish.mbs317
-rw-r--r--macros/latex/contrib/custom-bib/suppjour.mbs231
-rw-r--r--macros/latex/contrib/custom-bib/svenska.mbs304
29 files changed, 18827 insertions, 0 deletions
diff --git a/macros/latex/contrib/custom-bib/README b/macros/latex/contrib/custom-bib/README
new file mode 100644
index 0000000000..04aa0bc49f
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/README
@@ -0,0 +1,556 @@
+ CUSTOM-BIB Package
+
+**** INFO ******
+(Work on version 4.x has been supported by the American Physical Society)
+
+Current version is 4.33
+*****************
+See list of changes below
+*****************
+
+This is the custom-bib package for generating customized BibTeX bibliography
+styles from a generic file by means of the docstrip program that is part of
+the LaTeX2e installation.
+
+****************************************************************************
+
+To use/install the package:
+
+0. (optional, for hackers) LaTeX makebst.dtx to get the documentation;
+ This also extracts makebst.ins from makebst.dtx, if it does not already
+ exist.
+1. Run TeX (or LaTeX) on makebst.ins (--> makebst.tex)
+2. Run TeX (or LaTeX) on makebst.tex to start customizing
+ your own .bst file. Select merlin as the master file (default) when
+ asked. (I have other master files for my own purposes.)
+3. Answer the questions that then arise; for merlin, you will also be asked
+ which language support file you want (default is merlin itself, meaning
+ English or the pseudo-language Babel). You will also be asked if you want
+ to add a file defining short-hand designations for various journals; such
+ files are included (physjour.mbs, geojour.mbs, photjour.mbs) for physics
+ geophysics, and optics journals, but you could create your own.
+4. The menus that appear may not be informative enough for you. More
+ information can be obtained by reading the documentation (on the options)
+ contained in the .mbs files themselves. This documentation can be printed
+ out by running LaTeX on the .mbs files.
+5. The makebst program only produces a docstrip batch job to generate the .bst
+ file. The last question it asks is whether that job should be run right
+ away. You can always run it again yourself by running TeX or LaTeX on
+ this .dbj file. (The .dbj file can also be manually edited if you want to
+ play around with the various options it includes.)
+
+****************************************************************************
+
+The package contains the following files:
+ merlin.mbs -- A master BibTeX style file for producing customized
+ styles (numerical or author-year) with docstrip. It is
+ self-documenting: simply latex it to produce its
+ description.
+
+ english.mbs -- A sample language support file for English, to act as a
+ model for hacking others.
+
+ catalan.mbs -- A language support file for Catalan
+ dansk.mbs -- A language support file for Danish
+ dutch.mbs -- A language support file for Dutch
+ esperant.mbs -- A language support file for Esperanto
+ finnish.mbs -- A language support file for Finnish
+ french.mbs -- A language support file for French
+ german.mbs -- A language support file for German
+ italian.mbs -- A language support file for Italian
+ norsk.mbs -- A language support file for Norwegian
+ polski.mbs -- A language support file for Polish
+ portuges.mbs -- A language support file for Portuguese
+ slovene.mbs -- A language support file for Slovene
+ spanish.mbs -- A language support file for Spanish
+ svenska.mbs -- A language support file for Swedish
+(Further contributions and corrections are welcome)
+
+ physjour.mbs -- A support file to add the names of common Physics journals
+ in shorthand form, for example `pr' for Physical Review, or
+ Phys. Rev., depending on whether abbreviations are chosen.
+
+ photjour.mbs -- A contributed file containing names of optics journals
+
+ geojour.mbs -- A contributed file containing names of geophysics journals
+ suppjour.mbs -- A contributed file containing further journal names
+
+(Contributions for other fields are welcome)
+
+ shorthnd.ins -- (La)TeX this file to obtain shorthnd.tex, which when
+ LaTeX'ed lists all the shorthands and journal names
+
+The .mbs files can only be used effectively with the makebst `program', which
+is included in documented source form.
+
+ makebst.dtx -- the documented source file; LaTeXing this file produces
+ the manual and optionally a documentation of the coding.
+ Requires ltxdoc class from the LaTeX2e distribution.
+
+ This is version 4.0; necessary with merlin 4.00, but
+ works with older versions of merlin.
+
+ makebst.ins -- a docstrip batch job to extract from makebst.dtx the
+ program file makebst.tex. (This file is actually included
+ within makebst.dtx; it is extracted when the .dtx file is
+ processed under LaTeX2e.)
+
+****************************************************************************
+
+HISTORY AND DEVELOPMENT:-
+Many authors are frustrated at the wide range of bibliographic styles demanded
+by journals and publishers, and at the limited number available with standard
+LaTeX and BibTeX. This is not the fault of the latter, but rather of the lack
+of any bibliographic standards in the English language. Often the differences
+are so trivial (comma or colon, date in brackets or parentheses). The normal
+user does not want to tackle the task of making up his own .bst file (no
+normal human would!)
+
+For this reason, I set out to produce a generic .bst file that could have
+features and options selected by means of the docstrip program.
+I found over 50 different *.bst files and compared their outputs just for
+article: they were all different. They served as part of my input as to which
+features were needed. I knew of a few extra that were not covered by these 50.
+
+I also discovered XBTXBST.DOC, a minor modification of Patashnik's BTXBST.DOC,
+as well as a file PHYSICS.BST, all of which are meant to do precisely what I
+had set up to accomplish. However, they make use of the C Preprocessor
+language. It is really a simple matter to convert the preprocessor commands
+into docstrip equivalents.
+
+Nevertheless, none of these really met all of my needs, so I continued to
+develop GENBST.mbs (GENeric-BibST.MasterBibSt). It soon became obvious that the
+sheer number of options necessary made any kind of customizing a difficult
+chore. Hence, the next step: the program MAKEBST takes menu information from
+the selected .mbs file and presents the user with descriptive choices as
+menus. From the answers, it writes a docstrip batch job (extension .dbj) which
+when TeX'ed, creates the desired .bst file out of the .mbs one. The .dbj file
+may even be hand edited if one wants to alter only one or two options.
+
+Since I first released this system in November 1993, I have received many
+suggestions and requests for additions. I have tried to incorporate as many as
+possible, but often the task is too complicated and I have to leave them out.
+
+The second version of GENBST.mbs allowed other languages to be used. However,
+since the method had considerable overhead per language, I was unsatified with
+it. A parallel version called BABEL.mbs (which was really GENBST.mbs version
+2) has been available for some time, supporting English, French, German, and
+Esperanto, as well as a generic language called Babel.
+
+I then modified MAKEBST to allow more than one .mbs file to be used as
+input for any given .bst output. This means that the language support can be
+contained in separate files, one per language, and does not need to burden the
+main file. The next issue of this main file, version 3, was renamed
+MERLIN.mbs, to emphasize its magical powers.
+
+Version 3 continued to grow as more suggestions and requests were
+contributed. Further language files were offered to me, as well as lists of
+prerecorded journal names. The number of options had grown to roughly 200,
+including the defaults.
+
+The American Physical Society then decided it would like a number of new
+features for its REVTeX package, mainly to support electronic publishing.
+David Carlisle, Mark Doyle, and Arthur Ogawa made up a variant on merlin.mbs
+for this purpose, which I then integrated into the "official" one. Thus was
+born version 4.00 of MERLIN.mbs.
+
+NOTE ON AUTHOR-YEAR CITATIONS:-
+Author-year style citations are not supported by standard LaTeX and BibTeX.
+However, there exist a large number of bib styles for this, all of which need
+some interface package to run properly. There are (at least) 7 different such
+interfaces, including the one I invented for the NATBIB package. If one
+selects author-year style, then one is asked which interface is to be
+used. (Incidentally NATBIB is capable of interpreting all of them.)
+
+LIST OF ALL OPTIONS IN THE DBJ FILE
+The makebst program writes to the .dbj file all the docstrip options that were
+offered in the interactive session with the unselected ones commented out.
+This makes editing afterwards much easier. Often one wants to experiment with
+some of these options, but only wants to run the makebst program once.
+
+This feature (suggested by Frank Mittelbach) is available when the
+makebst.tex file is extracted from makebst.dtx with the `optlist' option;
+without it, only the selected options are listed in the .dbj file.
+Edit the makebst.ins file accordingly; by default, this feature is included.
+
+With version 4, one may select a verbose listing during run time, writing
+more details into the .dbj file, including all possible options, even those
+not offered.
+
+ALLOW MULTIPLE INPUT .MBS FILES
+The .dbj file is so constructed that more than one input .mbs file may be
+read for a single output .bst file. The main .mbs file must have its menu
+coding arranged to take advantage of this, something that merlin.mbs does.
+(The older genbst.mbs and babel.mbs did not have this feature.)
+
+NEW FEATURES OF MERLIN.MBS since genbst.mbs 1.7 and babel 2.5
+Names formatting: can also have reversed full names, as Smith, John George
+ (previously reversed names could only be initials)
+ John George Smith
+ Smith, John George (v3.1)
+ J. G. Smith
+ Smith, J. G.
+ (AGU style: first name reversed, rest normal, all with initials)
+ (AGU style but with full names, not initials) (v3.82)
+ Smith, J G
+ Smith, JG (v3.1)
+ Smith J G (v3.2)
+
+Editors' names (in collections) for surname-first styles, may now be formatted
+ exactly as the authors'. (Previously these would never be reversed.)
+
+ Also possible to have
+ In: B. G. Jones, editor, Booktitle [default]
+ In: B. G. Jones, (editor), Booktitle
+ In: B. G. Jones, (editor) Booktitle
+ In: B. G. Jones (editor) Booktitle
+ In: Booktitle, edited by B. G. Jones
+ In: Booktitle (edited by B. G. Jones)
+ In: Booktitle, (edited by B. G. Jones)
+ In: Booktitle, editor B. G. Jones
+ In: Booktitle, (editor) B. G. Jones
+ In: Booktitle (editor B. G. Jones)
+ In: Booktitle, (editor B. G. Jones)
+ In: Booktitle, B. G. Jones, editor
+ In: Booktitle (B. G. Jones, editor)
+
+ISBN and ISSN numbers can optionally be included, if present in database
+
+Volume, number has more possibilities: for volume=34, number=2:
+ 34(2) 34 (2) 34, 2 34, no. 2 34, #2 34 34(1997)
+(Last example: the year in parentheses in place of the number)
+
+The following page number can be separated by colon, colon space,
+ semi-colon and space, comma and space, or space only
+
+Or even vol. 34 (1994) 2, pp. 234-254 (v3.81)
+
+Date: year coming just after authors may have colon and space following
+ date may appear as `1994 Jul', with or without a dot (v3.2)
+ date may be part of journal specification, something that is common
+ in medical journals (v3.2)
+
+Journal names: the periods in abbreviations may be removed, so Phys. Rev.
+ becomes Phys Rev (no change to database necessary)
+
+Author names in citations and list of references may be independently set
+ in italic, small caps, or bold. Optionally, first names can be in a
+ different font from the surnames.
+
+The mininum number of authors' names before et al. has been raised from
+ 6 to 99 (v3.87)
+
+The page numbers in edited works can have `pages' or `pp' suppressed (v3.2)
+
+It is possible to have the names sorted by ignoring the `von' part, so that
+ della Robbia comes after Rabin (v3.2)
+
+Publisher's address may come before name, as New York: New Press
+ (required by some psychology journals) (v3.3)
+
+Publisher's address may come before the chapter/page information (v3.81)
+
+Number/series can come just before publisher/organization (v3.88)
+
+URL support for online documents (v3.97)
+
+HTML output added, experimental (v3.88)
+
+Refinements added to version 3.3:
+ - the extra labels added to years (as 1995a) are grouped in braces
+ to avoid some problems with natbib when this extra label is more than
+ one letter
+
+ - when full author lists may be optional (for harvard and natbib formats)
+ they are no longer included if they are identical to the short
+ author list
+
+Refinements added to version 3.4:
+ - journals can have date between volume and pages, as
+ J. Geophys. Res. {\bf 34} (1994) 333-338
+ - author block can be terminated with colon
+ - if cited authors are in bold, italic, or small caps, then the word
+ `and' can be in the regular text font, not in the author font.
+
+Refinements added to version 3.5:
+ - Technical Reports can have titles treated like books (default=article)
+ - can sort by year then authors
+ - can include more than one file with prestored journal names
+ - bug fixed for limited number of authors: sort only on those present
+ - the `named' format for \bibitem now included.
+
+Refinements added to version 3.6:
+ - blocks can be separated by colons as well as commas or periods
+ - name of journal can be in normal font, not only italic
+ - pages in books may be in parentheses
+ - can have `number' as part of page specification: 34, (2)234-(2)254
+ - date may be bold
+ - if authors in list have special font, then `and' and/or `et al.'
+ may be normal font
+
+Refinements added to version 3.7:
+ - an option to allow authors to be separated by semi-colons instead of
+ by commas
+ - fix bug in the option that removes periods from journal names when
+ italicized
+
+Refinements added to version 3.8:
+ - fix a bug with titles in quotes
+ - an option allows ALPHA style citations, of the form ABD90. This
+ is essentially a numerical system with some text replacing the number.
+ - publishers and address can appear in parentheses
+ - punctuation between `blocks' can be suppressed, space only
+ - ordering reference list by year is possible for author-year as well as
+ numerical modes
+ - can put date between volume and number
+ - can add `pages' or `pp' to articles
+ - cited names in a special font can have the `and' in regular font:
+ previously this meant \rm, but now, with NFSS, only the one attribute is
+ reset; thus \textbf{\cite{james93}} yields
+ \textbf{\textsc{James {\upshape and} Johns}, [1993]}
+ so that `and' will be bold non-sc. (Actually, bold small caps does not
+ exist in the CM fonts, so a substitution will be made.)
+
+Refinements added to version 3.81:
+ - when used with natbib 6.3, the extra letters added to the dates in
+ author-year citations (Jones et al, 1994a) are suppressed in the reference
+ list when numerical citations are used instead. These letters are
+ superfluous in this case and so should not be present.
+ - For incollections, the word `in' can be left off.
+ - Publisher can be placed before chapter/page information
+ - dates can be followed by periods even when block punctuation is comma
+
+ - The .mbs files with prestored journal names have been rationalized, to
+ remove duplications (or shorthands) and to organize the journal types
+ better. Some journals were present several times under different
+ shorthands (Phys. Rev. is both pr and physrev); these multiple shorthands
+ have been retained for consistency. Duplications of journal AND shorthand
+ have been removed. One shorthand clash: jas was both Journal of Applied
+ Spectroscopy and Journal of the Atmospheric Sciences; the former has been
+ altered to jasp.
+ - A file shorthnd.ins is included to assist listing the journal shorthands
+
+ - Option yr-com to allow comma before the date.
+ - Option pub-date to put publisher and date in parentheses (Nature style)
+ - Some internal improvements
+
+Refinements added to version 3.82:
+ - Page numbers can come at end before notes
+ - Fix up bug with quoted titles when title missing
+ - Fix up bug that left off extra date labels for plain dates with no brackets
+ or special punctuation
+ - Fix up bug that put punctuation before publishers in paretheses
+ - Add option to allow full names, with only first author reversed
+
+Refinements added to version 3.83:
+ - Edited works can be either Names (eds.), Booktitle
+ or Names, (eds.) Booktitle
+ Previously only the first version was possible. (There are several other
+ possibilities too.)
+ - If commas selected as punctuation between blocks, one can still have a
+ period coming before any file note.
+ - With repeated authors/editors for adjacent references, the repeated names
+ can be replaced by a long dash.
+ - \BIBand made robust, otherwise it does not really work.
+
+Refinements added to version 3.84:
+ - large page numbers can be separated by comma, space, period,
+ as 10,345. No provision for 7 digit numbers
+ - emphasis can also be underlining; bad policy, since underlining belongs
+ to the days of the typewriter, and in LaTeX, \underline command cannot
+ be broken across lines. Loading the ulem package by Donald Arseneau
+ solves this problem.
+ - titles can be in <<guillemots>> (best with T1 encoding, but poor man's
+ OT1 also provided; must have LaTeX2e)
+ - titles of proceedings and collections can be in quotes if article
+ titles in quotes
+ - can add year to journal volume in parentheses as vol(year) and still
+ format year for books differently.
+ - full natbib form of \bibitem resistent against square brackets in names
+ or date.
+
+Refinements added to version 3.85:
+ - add option to allow junior part of name of appear in citations
+ - options for specifying fonts for names: may apply only to the surnames
+ if wished, and not to the entire name. User-defined font commands
+ \bibnamefont, \bibfnamefont, and \citenamefont may be used too,
+ where the names are used as a single argument.
+
+Refinements added to version 3.86:
+ - suppress ISBN number for certain crossrefs
+ - fix bug with limited number of authors when mininum is 6
+ - add option for comma between year and pages
+ - restrict \natexlab to natbib styles
+
+Refinements added to version 3.87:
+ - Limited number of authors can be as many as 99 (previously 6)
+ - Add language field, to switch hyphenation patterns for titles
+ - Add url field for all entries
+ - Add annote field
+ - Months may be suppressed for numerical mode
+ - et~al. is no longer hardwired; dutch.mbs allows variations on et~al.
+
+Refinements added to version 3.88:
+ - Copyright notices conform to LaTeX Project Public Licence
+ - HTML coding can replace the LaTeX pre- and postamble and font commands;
+ intended for Web listings of complete databases; LaTeX special symbol
+ remain; works only if one selects numerical, not author-year citations.
+ - complex coding to convert edition numbers to (multilingual) text and vice
+ versa can be removed, saving considerable memory requirements and
+ possibly preventing memory overflow
+ - by default, number and series for inproceedings and incollection can only
+ be used as "Complete Works" (series only) or "Number 3 in Complete Works"
+ (number and series). With number only, a warning is issued. New option
+ allows number to be a document code number, like REP-01/1998-ab; without
+ series, this number is printed bare, without the word "Number", but if
+ both number and series are present, the default text "Number .. in .." is
+ reinstated.
+ - another option allows the number/series to be prepended to the publisher
+ and/or organization name.
+ - more options to format editors in inproceedings and incollection
+ - option to allow the total number of pages in books to be listed; for
+ this, the pages field must be given for the entry, a field that is
+ normally ignored for books.
+ - book titles may be set in upright typeface (default is italic)
+ - a slash may be used in place of comma or semi-colon between authors
+ - journal names may be preceded by `in' as for incollections
+
+Refinements added to version 3.89:
+ - for use with natbib 7.0:
+ when author/editor empty, the key field is used in place of author,
+ but what is new is the option that the year is then left blank
+ in the \bibitem entry. This allows natbib (7.0) to print only the
+ key without any year punctuation.
+ also optional, if the year itself is missing, it is left blank instead
+ of being set to ????.
+ - fix a bug that caused the citation font to be missing at times
+
+Refinements added to version 4.00:
+ - Entire code reorganized and rationalized (by Arthur Ogawa).
+ - For REVTeX, new fields collaboration, eid, eprint, archive, numpages
+ - Option for tagging all entries in the bibliography with \bibinfo marker.
+ Thus the pages might appear as \bibinfo{pages}{345--350} which prints
+ only the page numbers, but allows other programs to parse the entries.
+ (Contribution by David Carlisle.)
+ - For reversed author names, the junior part can appear either as
+ Smith, Jr., John (previously the only possibility) or
+ Smith, John, Jr.
+ (For some reason, the AGU options that reverse only the leading name in
+ an author list always used this latter form.)
+ - When surnames and first names are in different fonts, the junior part is
+ now in the same font as the first name. Previously, it varied.
+ - When abbreviated months or journal names are to be dotless, only the
+ dots are removed. Previously all non-alphanumeric characters were
+ removed, causing problems with accents in other languages.
+ - When author initials are to be dotless, the dot is also removed from
+ the junior part.
+ - Journal abbreviations in physjour.mbs may be those used in astronomy
+ journals, e.g. ApJ for Astrophysical Journal, (aka Astrophys. J.)
+
+Refinements added to version 4.01
+ - a bug with the bibinfo tag caused titles not be be case-changed; fixed
+ - technical report numbers were not tagged with bibinfo; fixed
+ - option added to let the word `in' be in italics.
+
+Refinements added to version 4.02
+ - some bugs fixed:
+ In: with articles no longer has comma added
+ bold dates work when date and publisher together
+ typo alfph removed
+
+Refinements added to version 4.03
+ - bug fixes
+ - add definition of \natexlab to aux file for harvard styles
+ - add option thtit-x to suppress thesis titles
+ - add option seq-yrr to order by descending years (latest first)
+ - Updates to french.mbs, dansk.mbs
+ - Fix misprint in physjour.mbs
+
+
+Refinements added to version 4.04:
+ - addition of slovene.mbs for Slovenian language.
+ - additional journal in geojour.mbs
+
+Refinement added to version 4.05:
+ - fix all language files for a bug in suppression of page numbers
+ - fix bug in merlin.mbs in inproceedings with pp-last plus dt-beg|dt-end
+
+Refinement added to version 4.06:
+ - options for doubled or trebled dashes for repeated authors
+
+Refinements added to version 4.10
+ - add doi and eid fields
+ Both of these are for electronic journals. The DOI number is a
+ universal reference to the electronic location, more robust than
+ URLs. Electronic journals do not have page numbers, and use a
+ sequence number (called here EID for electronic identifier) to find
+ the printed version. The doi field is optional, the eid will always
+ be included in the bst file. However, it is still optional within
+ any bib file. If present, it appears in place of the page number.
+
+Refinements added to version 4.11
+ - fix up doi output to be official style, no blank between doi: and number
+ - add options ser-vol and ser-ed
+
+Refinements added to version 4.12
+ - add plntx so bbl output will work with Plain TeX (and LaTeX 2.09)
+ (the option nfss must also NOT be given, else font commands are LaTeX2e)
+
+Bug fix version 4.12a
+ - merlin.mbs and all language files needed fixing because the comma between
+ options was inserted in the wrong place for external language files
+
+Refinements added to version 4.13
+ - fix a bug in inbook and incollection that suppressed chapter under
+ certain conditions
+ - add option to put a colon after article and/or book titles
+ - add option to format names as Jones, AB (the comma was
+ previously not possible)
+
+Refinements added to version 4.14
+ - add option to format names as Jones, A.B. (comma, no spaces in initials)
+ - add option to suppress comma before et al in reference list.
+
+Refinements added to version 4.15
+ - add option to allow new type: presentation. This is for conference talks which are
+ not otherwise published. Requires author, title, month, year, organization, address;
+ may also have key (= author number for the speaker, this name is highlighted),
+ type = oral or poster etc
+
+Refinements added to version 4.16
+ - fix minor bug in proceedings, that suppressed number and series under circumstance.
+
+Refinements added to version 4.20
+ - add option to allow citation to have more than one author before et al. added.
+ - add option to allow truncation for more than two, three, four, or five authors.
+
+Refinements added to version 4.21
+ - remove.dots function modified as suggested by Joseph A. Wright [joseph.wright@morningstar2.co.uk]
+ to retain the dot accent \.
+
+Refinements added to version 4.22
+ - extra labels in author-year citations can now handle more than 26 entries of same author and year.
+ It now goes from a..z, aa, ab, .., az, ba ,..., zz. After that, it will crash.
+ Code provided by Joseph A. Wright.
+
+Refinements added to version 4.30
+ - a bug fixed when ordering by label and the author list was truncated to a maximum number.
+ - number of authors in citations can be up to six instead of five.
+ - add option to sort authors by surname only, ignoring initials and first names.
+ - minor bugs repaired
+
+Refinements added to version 4.31
+ - let the options for punctuation before the date (yr-com, yr-col, yr-per) also work with harvard option harnm.
+
+Refinements added to version 4.32
+ - fix bug in proceedings with numerical citations when the numser option NOT selected.
+
+Refinements added to version 4.33
+ - fix a bug that appeared with remove.dots macro.
+ - fix a bug so that pub-xc (comma suppression with publisher date) works for numerical citations too
+
+Nov 18, 2011
+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/custom-bib/catalan.mbs b/macros/latex/contrib/custom-bib/catalan.mbs
new file mode 100644
index 0000000000..f561d1d043
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/catalan.mbs
@@ -0,0 +1,324 @@
+%\iffalse THIS IS A META COMMENT
+% File: catalan.mbs
+% Copyright 1997-1999 Patrick W Daly
+% Max-Planck-Institut f\"ur Sonnensystemforschung
+% Max-Planck-Str. 2
+% D-37191 Katlenburg-Lindau
+% Germany
+% E-mail: daly@mps.mpg.de
+%
+% Copyright 1997, 1998 Robert Fuster
+% Departament de Matem\`atica Aplicada
+% Universitat Polit\`ecnica de Val\`encia
+% E-46071 Val\`encia
+% Spain
+% E-mail: rfuster@mat.upv.es
+%
+% 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: CATALAN
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+%\fi
+ %-------------------------------------------------------------------
+ % Begin module: catalan.mbs
+ % \ProvidesFile{catalan.mbs}[2003/11/06 4.2 (PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{catalan.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{2.0}{1998 May 17}{Initial version}
+% \changes{2.1}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{2.2}{1999 Feb 1}{Add option \texttt{xedn}}
+% \changes{2.2}{1999 Feb 24}{Update copyright notice}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.0a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{R. Fuster}{Catalan Bibliographies}
+%
+% \title{{\bfseries Catalan Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly and Robert Fuster}
+%
+% \GetFileInfo{catalan.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Catalan\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for CATALAN}
+\wr{\spsp\spsp catalan,\pc: Catalan language}
+
+\beginoptiongroup{ABBREVIATE WORD `PAGINES':}{}
+\optdef{*}{}{`P\string`agina(es)'}{(no abbreviation)}
+\optdef{a}{ps}{`P\string`agina' abbreviated}{as p.}
+\optdef{b}{pag}{`P\string`agina' abbreviated}{as p\string`ag.}
+\optdef{x}{ppx}{`P\string`agina' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `EDITOR':}{}
+\optdef{*}{}{`editor(s)'}{(no abbreviation)}
+\optdef{a}{ed}{`editor' abbreviated}{as ed.}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE `MONTHS'::}{}
+\optdef{*}{}{No abbreviations}{of gener, febrer, etcetera}
+\optdef{a}{mab}{Abbreviations}{of months, as in abbrev.bst}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of Volum, Edici'o, Cap'itol}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{nom}{Write out editions}{as primera, segona, tercera, etc}
+\optdef{a}{}{Numerical editions}{as 1a, 2a, 3a, etc}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is CATALAN
+FUNCTION {bbl.and}
+{ "i"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "editors" }
+%<ed>{ "eds." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "editor" }
+%<ed>{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "editat per" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "edici\'o" }
+%<abr>{ "ed." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "volum" }
+%<abr>{ "vol." }
+
+FUNCTION {bbl.of}
+{ "de" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "n\'umero" }
+%<abr>{ "n\'um." }
+
+FUNCTION {bbl.nr}
+{ "n." }
+
+FUNCTION {bbl.in}
+{ "dins" }
+
+FUNCTION {bbl.pages}
+%<!ps&!pag>{ "p\`agines" }
+%<pag>{ "p\`ags." }
+%<ps>{ "ps." }
+%<!ps&!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!ps&!pag>{ "p\`agina" }
+%<pag>{ "p\`ag." }
+%<ps>{ "p." }
+%<!ps&!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "p\`agines" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "cap\'{\i}tol" }
+%<abr>{ "cap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Report t{\`e}cnic" }
+%<abr>{ "Rep. T{\`e}c." }
+
+FUNCTION {bbl.mthesis}
+{ "Projecte F. de Carrera o Tesina de L." }
+
+FUNCTION {bbl.phdthesis}
+{ "Tesi Doctoral" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!nom>{ "1a" }
+%<nom>{ "primera" }
+
+FUNCTION {bbl.second}
+%<!nom>{ "2a" }
+%<nom>{ "segona" }
+
+FUNCTION {bbl.third}
+%<!nom>{ "3a" }
+%<nom>{ "tercera" }
+
+FUNCTION {bbl.fourth}
+%<!nom>{ "4a" }
+%<nom>{ "quarta" }
+
+FUNCTION {bbl.fifth}
+%<!nom>{ "5a" }
+%<nom>{ "cinquena" }
+
+FUNCTION {bbl.th}
+{ "a" }
+
+%</!xedn>
+%<*!mab>
+MACRO {jan} {"gener"}
+
+MACRO {feb} {"febrer"}
+
+MACRO {mar} {"mar\c{c}"}
+
+MACRO {apr} {"abril"}
+
+MACRO {may} {"maig"}
+
+MACRO {jun} {"juny"}
+
+MACRO {jul} {"juliol"}
+
+MACRO {aug} {"agost"}
+
+MACRO {sep} {"setembre"}
+
+MACRO {oct} {"octubre"}
+
+MACRO {nov} {"novembre"}
+
+MACRO {dec} {"desembre"}
+
+%</!mab>
+%<*mab>
+MACRO {jan} {"gen."}
+
+MACRO {feb} {"feb."}
+
+MACRO {mar} {"mar\c{c}"}
+
+MACRO {apr} {"abr."}
+
+MACRO {may} {"maig"}
+
+MACRO {jun} {"juny"}
+
+MACRO {jul} {"jul."}
+
+MACRO {aug} {"ag."}
+
+MACRO {sep} {"set."}
+
+MACRO {oct} {"oct."}
+
+MACRO {nov} {"nov."}
+
+MACRO {dec} {"des."}
+
+%</mab>
+%</!options&!driver>
+ % End module: catalan.mbs
+ % \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/dansk.mbs b/macros/latex/contrib/custom-bib/dansk.mbs
new file mode 100644
index 0000000000..11b19795d0
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/dansk.mbs
@@ -0,0 +1,315 @@
+%\iffalse THIS IS A META COMMENT
+% File: dansk.mbs
+% Copyright 1995-1999 Patrick W Daly
+% Max-Planck-Institut f\"ur Sonnensystemforschung
+% Max-Planck-Str. 2
+% D-37191 Katlenburg-Lindau
+% Germany
+% E-mail: daly@mps.mpg.de
+%
+% Copyright (C) 1999, Brian Elmegaard
+% Department of Energy Engineering, Technical University of Denmark
+% Nils Koppels Alle
+% DK-2800 Lyngby
+%
+% E-mail: brian.elmegaard@et.dtu.dk
+%
+% 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: DANISH
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{norsk.mbs}[2004/05/06 4.2a (RL/PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{dansk.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1999 Nov 8}{Submitted to PWD by BE}
+% \changes{4.0}{1999 Nov 10}{Converted for merlin 4.0}
+% \changes{4.1}{2001 Jan 9}{Included corrections from Thomas Martin
+% \changes{4.1a}{2002 Oct 18}{Fix bug in page number suppression}
+% Widmann BE}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+% \changes{4.2a}{2004 May 6}{Add missing backslash in a menu text}
+%
+% \markboth{Brian Elmegaard}{Danish bibliographies}
+%
+% \title{{\bfseries Danish Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly and Brian Elmegaard}
+%
+% \GetFileInfo{dansk.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Dansk\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for DANSK}
+\wr{\spsp\spsp dansk,\pc: Danish language}
+
+\beginoptiongroup{ABBREVIATE WORD `PAGES':}{}
+\optdef{*}{}{`Side(r)'}{(no abbreviation)}
+\optdef{a}{pp}{`Side' abbreviated}{as s. or pp.}
+\optdef{x}{ppx}{`Side' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `EDITORS':}{}
+\optdef{*}{}{`Redakt{\string\o}r(er)'}{(no abbreviation)}
+\optdef{a}{ed}{`Redakt{\string\o}r' abbreviated}{as red.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of bind, udgave, kapitel, osv.}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as f{\string\o}rste, anden, tredje, osv}
+\optdef{n}{ord}{Numerical editions}{as 1., 2., 3., osv}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is DANSK
+
+FUNCTION {bbl.and}
+{ "og"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "redakt{\o}rer" }
+%<ed>{ "red." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "redakt{\o}r" }
+%<ed>{ "red." }
+
+FUNCTION {bbl.edby}
+{ "redigeret af" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "udgave" }
+%<abr>{ "udg." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "bind" }
+%<abr>{ "bd." }
+
+FUNCTION {bbl.of}
+{ "af" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "nummer" }
+%<abr>{ "nr." }
+
+FUNCTION {bbl.nr}
+{ "nr." }
+
+FUNCTION {bbl.in}
+{ "i" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "sider" }
+%<pp>{ "pp." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "side" }
+%<pp>{ "s." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "sider" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "kapitel" }
+%<abr>{ "kap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Teknisk rapport" }
+%<abr>{ "Tekn. rap." }
+
+FUNCTION {bbl.mthesis}
+{ "Speciale" }
+
+FUNCTION {bbl.phdthesis}
+{ "ph.d.-afhandling" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "F{\o}rste" }
+%<ord>{ "1." }
+
+FUNCTION {bbl.second}
+%<!ord>{ "Anden" }
+%<ord>{ "2." }
+
+FUNCTION {bbl.third}
+%<!ord>{ "Tredje" }
+%<ord>{ "3." }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "Fjerde" }
+%<ord>{ "4." }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "Femte" }
+%<ord>{ "5." }
+
+FUNCTION {bbl.th}
+{ "." }
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"Januar"}
+
+MACRO {feb} {"Februar"}
+
+MACRO {mar} {"Marts"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"Maj"}
+
+MACRO {jun} {"Juni"}
+
+MACRO {jul} {"Juli"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"Oktober"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"Maj"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Okt."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+%</abr>
+%</!options&!driver>
+ % End module: dansk.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/dutch.mbs b/macros/latex/contrib/custom-bib/dutch.mbs
new file mode 100644
index 0000000000..2923d33aab
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/dutch.mbs
@@ -0,0 +1,326 @@
+%\iffalse THIS IS A META COMMENT
+% File: dutch.mbs
+% Copyright 1997-1999 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: DUTCH
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{dutch.mbs}[2003/11/06 4.2 (PWD/MG)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{dutch.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1997 Oct 30}{Initial version}
+% \changes{1.2}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{1.3}{1999 Feb 1}{Add option \texttt{xedn}}
+% \changes{1.3}{1999 Feb 24}{Update copyright notice}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.0a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly and M. Gelderman}{Dutch Bibliographies}
+%
+% \title{{\bfseries Dutch Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly and Maarten Gelderman}
+%
+% \GetFileInfo{dutch.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Dutch\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for DUTCH}
+\wr{\spsp\spsp dutch,\pc: Dutch language}
+
+\beginoptiongroup{ABBREVIATE WORD `PAGINA':}{}
+\optdef{*}{}{`Pagina'}{(no abbreviation)}
+\optdef{a}{pp}{`Pagina' abbreviated}{as pag.}
+\optdef{x}{ppx}{`Pagina' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `REDACTIE':}{}
+\optdef{*}{}{`Redactie'}{(no abbreviation)}
+\optdef{a}{ed}{`Redactie' abbreviated}{as red.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of volume, uitgave, hoofdstuk, etc}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as eerste, tweede, derde, etc}
+\optdef{n}{ord}{Numerical editions}{as 1e, 2e, 3e, etc}
+\getans
+\endoptiongroup
+\beginoptiongroup{ET AL.}{}
+\optdef{*}{}{Et al}{as et al}
+\optdef{a}{enan}{Et al as en anderen}{}
+\optdef{e}{ea}{Et al as e.a}{}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is DUTCH
+FUNCTION {bbl.and}
+{ "en" }
+
+FUNCTION {bbl.etal}
+%<!enan&!ea>{ "et~al." }
+%<enan>{ "en anderen" }
+%<ea>{ "e.a." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "redactie" }
+%<ed>{ "red." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "redactie" }
+%<ed>{ "red." }
+
+FUNCTION {bbl.edby}
+{ "uitgegeven door" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "uitgave" }
+%<abr>{ "druk" }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "volume" }
+%<abr>{ "vol." }
+
+FUNCTION {bbl.of}
+{ "van" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "nummer" }
+%<abr>{ "nr." }
+
+FUNCTION {bbl.nr}
+{ "nr." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "pagina's" }
+%<pp>{ "pag." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "pagina" }
+%<pp>{ "pag." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "pagina's" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "hoofdstuk" }
+%<abr>{ "hfdst." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Technisch Rapport" }
+%<abr>{ "Tech. Rapp." }
+
+FUNCTION {bbl.mthesis}
+{ "scriptie" }
+
+FUNCTION {bbl.phdthesis}
+{ "proefschrift" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "eerste" }
+%<ord>{ "1e" }
+
+FUNCTION {bbl.second}
+%<!ord>{ "tweede" }
+%<ord>{ "2e" }
+
+FUNCTION {bbl.third}
+%<!ord>{ "derde" }
+%<ord>{ "3e" }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "vierde" }
+%<ord>{ "4e" }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "vijfde" }
+%<ord>{ "5e" }
+
+FUNCTION {bbl.st}
+{ "e" }
+
+FUNCTION {bbl.nd}
+{ "e" }
+
+FUNCTION {bbl.rd}
+{ "e" }
+
+FUNCTION {bbl.th}
+{ "e" }
+
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"Januari"}
+
+MACRO {feb} {"Februari"}
+
+MACRO {mar} {"Maart"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"Mei"}
+
+MACRO {jun} {"Juni"}
+
+MACRO {jul} {"Juli"}
+
+MACRO {aug} {"Augustus"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"Oktober"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mrt"}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"Mei"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Okt."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+%</abr>
+%</!options&!driver>
+ % End module: dutch.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/english.mbs b/macros/latex/contrib/custom-bib/english.mbs
new file mode 100644
index 0000000000..384c15459f
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/english.mbs
@@ -0,0 +1,359 @@
+%\iffalse THIS IS A META COMMENT
+% File: english.mbs
+% Copyright 1995-1999 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: ENGLISH
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{english.mbs}[2003/11/06 4.2 (PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{english.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1995 Mar 15}{Initial version}
+% \changes{1.1}{1995 May 4}{Do no abbreviate `edited by'}
+% \changes{1.2}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{1.3}{1999 Feb 1}{Make consistent with merlin 3.88}
+% \changes{1.3}{1999 Feb 24}{Update copyright notice}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly}{English Bibliographies}
+%
+% \title{{\bfseries English Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly}
+%
+% \GetFileInfo{english.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries English\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for ENGLISH}
+\wr{\spsp\spsp english,\pc: English language}
+
+\beginoptiongroup{ABBREVIATE WORD `PAGES'}{}
+\optdef{*}{}{`Page(s)'}{(no abbreviation)}
+\optdef{a}{pp}{`Page' abbreviated}{as p. or pp.}
+\optdef{x}{ppx}{`Page' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `EDITORS':}{}
+\optdef{*}{}{`Editor(s)'}{(no abbreviation)}
+\optdef{a}{ed}{`Editor' abbreviated}{as ed. or eds.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of volume, edition, chapter, etc}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATION FOR `EDITION'
+ (if abbreviating words)}
+ {\if\ans a*\fi}%
+\optdef{*}{}{`Edition' abbreviated as `edn'}{}
+\optdef{a}{ednx}{`Edition' abbreviated as `ed'}{}
+\getans
+\beginoptiongroup{MONTHS WITH DOTS:}{}
+\optdef{*}{}{Months with dots}{as Jan.}
+\optdef{x}{mth-bare}{Months without dots}{as Feb Mar}
+\getans
+\endoptiongroup
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as first, second, third, etc}
+\optdef{n}{ord}{Numerical editions}{as 1st, 2nd, 3rd, etc}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "editors" }
+%<ed>{ "eds." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "editor" }
+%<ed>{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "edition" }
+%<abr&!ednx>{ "edn." }
+%<abr&ednx>{ "ed." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "volume" }
+%<abr>{ "vol." }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "number" }
+%<abr>{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "pages" }
+%<pp>{ "pp." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "page" }
+%<pp>{ "p." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "pages" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "chapter" }
+%<abr>{ "chap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Technical Report" }
+%<abr>{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "First" }
+%<ord>{ "1st" }
+
+FUNCTION {bbl.second}
+%<!ord>{ "Second" }
+%<ord>{ "2nd" }
+
+FUNCTION {bbl.third}
+%<!ord>{ "Third" }
+%<ord>{ "3rd" }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "Fourth" }
+%<ord>{ "4th" }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "Fifth" }
+%<ord>{ "5th" }
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+% \end{macrocode}
+% This function adds English endings for ordinals 1, 2, 3. However, if
+% the second last digit is 1, then the ending is `th' for all last digits.
+% So far, all other languages included do not have this problem, and it is
+% sufficient to add the \textsl{th} equivalent. This might change with further
+% languages.
+%
+% \begin{macrocode}
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+ #-2 #1 substring$ "1" =
+ { bbl.th * }
+ { duplicate$ #-1 #1 substring$
+ duplicate$ "1" =
+ { pop$ bbl.st * }
+ { duplicate$ "2" =
+ { pop$ bbl.nd * }
+ { "3" =
+ { bbl.rd * }
+ { bbl.th * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%</!xedn>
+%<*!abr>
+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"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+%</abr>
+%</!options&!driver>
+ % End module: english.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/esperant.mbs b/macros/latex/contrib/custom-bib/esperant.mbs
new file mode 100644
index 0000000000..5d2c5d4e76
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/esperant.mbs
@@ -0,0 +1,310 @@
+%\iffalse THIS IS A META COMMENT
+% File: esperant.mbs
+% Copyright 1995-1999 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: ESPERANTO
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{esperant.mbs}[2003/11/06 4.2 (PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{esperant.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1995 Mar 15}{Initial version}
+% \changes{1.1}{1995 May 4}{Do no abbreviate `edited by'}
+% \changes{1.2}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{1.3}{1999 Feb 1}{Add option \texttt{xedn}}
+% \changes{1.3}{1999 Feb 24}{Update copyright notice}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.0a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly}{Esperanto Bibliographies}
+%
+% \title{{\bfseries Esperanto Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly}
+%
+% \GetFileInfo{esperant.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Esperanto\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for ESPERANTO}
+\wr{\spsp\spsp esperanto,\pc: Esperanto language}
+
+\beginoptiongroup{ABBREVIATE WORD `PAGES':}{}
+\optdef{*}{}{`Pa^go(j)'}{(no abbreviation)}
+\optdef{a}{pp}{`Pa^go' abbreviated}{as p. or pp.}
+\optdef{x}{ppx}{`Pa^goj' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `EDITORS':}{}
+\optdef{*}{}{`Redaktoro{j}'}{(no abbreviation)}
+\optdef{a}{ed}{`Redaktoro' abbreviated}{as red-o or red-oj}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of volumo, eldono, ^capitro, etc}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as unua, dua, tria, etc}
+\optdef{n}{ord}{Numerical editions}{as 1-a, 2-a, 3-a, etc}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is ESPERANTO
+FUNCTION {bbl.and}
+{ "kaj"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "redaktoroj" }
+%<ed>{ "red-oj" }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "redaktoro" }
+%<ed>{ "red-o" }
+
+FUNCTION {bbl.edby}
+{ "redaktita de" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "eldono" }
+%<abr>{ "eld-o" }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "volumo" }
+%<abr>{ "vol-o" }
+
+FUNCTION {bbl.of}
+{ "el" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "numero" }
+%<abr>{ "n-ro" }
+
+FUNCTION {bbl.nr}
+{ "n-ro" }
+
+FUNCTION {bbl.in}
+{ "en" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "pa\^goj" }
+%<pp>{ "pp." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "pa\^go" }
+%<pp>{ "p\^g" }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "pa\^goj" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "\^capitro" }
+%<abr>{ "\^cap-o" }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Teknica Raporto" }
+%<abr>{ "Tek-a Rap-o" }
+
+FUNCTION {bbl.mthesis}
+{ "Magistra tezo" }
+
+FUNCTION {bbl.phdthesis}
+{ "Doktora tezo" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "Unua" }
+%<ord>{ "1-a" }
+
+FUNCTION {bbl.second}
+%<!ord>{ "Dua" }
+%<ord>{ "2-a" }
+
+FUNCTION {bbl.third}
+%<!ord>{ "Tria" }
+%<ord>{ "3-a" }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "Kvara" }
+%<ord>{ "4-a" }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "Kvina" }
+%<ord>{ "5-a" }
+
+FUNCTION {bbl.th}
+{ "-a" }
+
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"januaro"}
+
+MACRO {feb} {"februaro"}
+
+MACRO {mar} {"marto"}
+
+MACRO {apr} {"aprilo"}
+
+MACRO {may} {"majo"}
+
+MACRO {jun} {"junio"}
+
+MACRO {jul} {"julio"}
+
+MACRO {aug} {"a\u{u}gusto"}
+
+MACRO {sep} {"septembro"}
+
+MACRO {oct} {"oktobro"}
+
+MACRO {nov} {"novembro"}
+
+MACRO {dec} {"decembro"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"jan."}
+
+MACRO {feb} {"feb."}
+
+MACRO {mar} {"mar."}
+
+MACRO {apr} {"apr."}
+
+MACRO {may} {"maj."}
+
+MACRO {jun} {"jun."}
+
+MACRO {jul} {"jul."}
+
+MACRO {aug} {"a\u{u}g."}
+
+MACRO {sep} {"sep."}
+
+MACRO {oct} {"okt."}
+
+MACRO {nov} {"nov."}
+
+MACRO {dec} {"dec."}
+
+%</abr>
+%</!options&!driver>
+ % End module: esperant.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/finnish.mbs b/macros/latex/contrib/custom-bib/finnish.mbs
new file mode 100644
index 0000000000..307067d357
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/finnish.mbs
@@ -0,0 +1,301 @@
+%\iffalse THIS IS A META COMMENT
+% File: finnish.mbs
+% Copyright 1995-1999 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: FINNISH
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{finnish.mbs}[2003/11/06 4.2 (PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{finnish.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1995 Mar 15}{Initial version}
+% \changes{1.1}{1995 May 4}{Do no abbreviate `edited by'}
+% \changes{1.1a}{1995 May 11}{Correct \texttt{bbl.phdthesis}}
+% \changes{1.2}{1995 Oct 25}{Remove \texttt{umlaut} option and \cs{qq},
+% replace with Raichle's trick}
+% \changes{1.3}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{1.4}{1999 Feb 1}{Add option \texttt{xedn}}
+% \changes{1.4}{1999 Feb 24}{Update copyright notice}
+% \changes{1.4a}{1999 Sep 14}{Fix typo in edition query}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.0a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly}{Finnish Bibliographies}
+%
+% \title{{\bfseries Finnish Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly}
+%
+% \GetFileInfo{finnish.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Finnish\end{quote}
+%
+% The translations for Finnish were supplied by
+% \begin{quote}\ttfamily "Niilo.Siljamo@Helsinki.FI"\end{quote}
+
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% Bernd Raichle points out that |\^^b| can be used in place of |\"|
+% within \btx{} code. One can thus replace |Nelj\^^b{a}s| with |Nelj\^^b{a}s|
+% and do away with the \texttt{umlaut} option.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for FINNISH}
+\wr{\spsp\spsp finnish,\pc: Finnish language}
+
+\beginoptiongroup{ABBREVIATE WORD `SIVUT':}{} % `Pages'
+\optdef{*}{}{`Sivu(t)'}{(no abbreviation)}
+\optdef{a}{pp}{`Sivu' abbreviated}{as s. or ss.}
+\optdef{x}{ppx}{`Sivu' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `TOIMITTAJAT':}{} % `Editors'
+\optdef{*}{}{`Toimittaja(t)'}{(no abbreviation)}
+\optdef{a}{ed}{`Toimittaja' abbreviated}{as toim.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of other words}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as emsimm\string\"ainen, toinen, etc}
+\optdef{n}{ord}{Numerical editions}{as 1., 2., etc}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is FINNISH
+FUNCTION {bbl.and}
+{ "ja"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "toimittajat" }
+%<ed>{ "toim." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "toimittaja" }
+%<ed>{ "toim." }
+
+FUNCTION {bbl.edby}
+{ "toimittanut" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "painos" }
+%<abr>{ "painos" }
+
+FUNCTION {bbl.volume}
+{ "osa" }
+
+FUNCTION {bbl.of}
+{ "sarjasta" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "numero" }
+%<abr>{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "teoksessa" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "sivut" }
+%<pp>{ "ss." }
+%<!pp&ppx>{ "" }
+
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "sivu" }
+%<pp>{ "s." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "sivut" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+{ "luku" }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Tekninen Raportti" }
+%<abr>{ "Tekn. Rap." }
+
+FUNCTION {bbl.mthesis}
+{ "pro gradu" }
+
+FUNCTION {bbl.phdthesis}
+{ "v\^^b{a}it\^^b{o}skirja" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "Ensimm\^^b{a}inen" }
+%<ord>{ "1." }
+
+FUNCTION {bbl.second}
+%<!ord>{ "Toinen" }
+%<ord>{ "2." }
+
+FUNCTION {bbl.third}
+%<!ord>{ "Kolmas" }
+%<ord>{ "3." }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "Nelj\^^b{a}s" }
+%<ord>{ "4." }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "Viides" }
+%<ord>{ "5." }
+
+FUNCTION {bbl.st}
+{ "." }
+
+FUNCTION {bbl.nd}
+{ "." }
+
+FUNCTION {bbl.rd}
+{ "." }
+
+FUNCTION {bbl.th}
+{ "." }
+
+%</!xedn>
+MACRO {jan} {"tammikuu"}
+
+MACRO {feb} {"helmikuu"}
+
+MACRO {mar} {"maaliskuu"}
+
+MACRO {apr} {"huhtikuu"}
+
+MACRO {may} {"toukokuu"}
+
+MACRO {jun} {"kes\^^b{a}kuu"}
+
+MACRO {jul} {"hein\^^b{a}kuu"}
+
+MACRO {aug} {"elokuu"}
+
+MACRO {sep} {"syyskuu"}
+
+MACRO {oct} {"lokakuu"}
+
+MACRO {nov} {"marraskuu"}
+
+MACRO {dec} {"joulukuu"}
+
+%</!options&!driver>
+ % End module: finnish.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/french.mbs b/macros/latex/contrib/custom-bib/french.mbs
new file mode 100644
index 0000000000..29065accb5
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/french.mbs
@@ -0,0 +1,312 @@
+%\iffalse THIS IS A META COMMENT
+% File: french.mbs
+% Copyright 1995-2002 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: FRENCH
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{french.mbs}[2003/11/06 4.2 (PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{french.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1995 Mar 15}{Initial version}
+% \changes{1.1}{1995 May 4}{Do no abbreviate `edited by'}
+% \changes{1.2}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{1.3}{1999 Feb 1}{Add option \texttt{xedn}}
+% \changes{1.3}{1999 Feb 24}{Update copyright notice}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.0a}{2001 Aug 28}{Correct r\'edacteur}
+% \changes{4.1}{2001 Jan 14}{Number of corrections by Olivier Dupuis}
+% \changes{4.1a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly}{French Bibliographies}
+%
+% \title{{\bfseries French Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly}
+%
+% \GetFileInfo{french.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries French\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for FRENCH}
+\wr{\spsp\spsp french,\pc: French language}
+
+\beginoptiongroup{ABBREVIATE WORD `PAGES':}{}
+\optdef{*}{}{`Page(s)'}{(no abbreviation)}
+\optdef{a}{pp}{`Page' abbreviated}{as p. or pp.}
+\optdef{x}{ppx}{`Page' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `REDACTEUR':}{}
+\optdef{*}{}{`R\string\'edacteur(s)'}{(no abbreviation)}
+\optdef{a}{ed}{`R\string\'edacteur' abbreviated}{as R\string\'ed.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of Tome, \string\'edition, chapitre}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as premi\string\`ere, deuxi\string\`eme,...}
+\optdef{n}{ord}{Numerical editions}{as 1re, 2e, 3e, etc}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is FRENCH
+FUNCTION {bbl.and}
+{ "et"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "r\'edacteurs" }
+%<ed>{ "r\'eds." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "r\'edacteur" }
+%<ed>{ "r\'ed." }
+
+FUNCTION {bbl.edby}
+{ "edit\'e par" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "\'edition" }
+%<abr>{ "\'ed." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "tome" }
+%<abr>{ "t." }
+
+FUNCTION {bbl.of}
+{ "de" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "num\'ero" }
+%<abr>{ "n\textsuperscript{o}\kern.2em\relax" }
+
+FUNCTION {bbl.nr}
+{ "n\textsuperscript{o}\kern.2em\relax" }
+
+FUNCTION {bbl.in}
+{ "dans" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "pages" }
+%<pp>{ "p." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "page" }
+%<pp>{ "p." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "pages" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "chapitre" }
+%<abr>{ "chap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Rapport technique" }
+%<abr>{ "Rap. tech." }
+
+FUNCTION {bbl.mthesis}
+{ "Th\`ese de ma\^itre" }
+
+FUNCTION {bbl.phdthesis}
+{ "Th\`ese de doctorat" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "Premi\`ere" }
+%<ord>{ "1$^{\mbox{\scriptsize re}}$" }
+
+FUNCTION {bbl.second}
+%<!ord>{ "Deuxi\`eme" }
+%<ord>{ "2$^{\mbox{\scriptsize e}}$" }
+
+FUNCTION {bbl.third}
+%<!ord>{ "Troisi\`eme" }
+%<ord>{ "3$^{\mbox{\scriptsize e}}$" }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "Quatri\`eme" }
+%<ord>{ "4$^{\mbox{\scriptsize e}}$" }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "Cinqui\`eme" }
+%<ord>{ "5$^{\mbox{\scriptsize e}}$" }
+
+FUNCTION {bbl.th}
+{ "$^{\mbox{\scriptsize e}}$" }
+
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"janvier"}
+
+MACRO {feb} {"f\'evrier"}
+
+MACRO {mar} {"mars"}
+
+MACRO {apr} {"avril"}
+
+MACRO {may} {"mai"}
+
+MACRO {jun} {"juin"}
+
+MACRO {jul} {"juillet"}
+
+MACRO {aug} {"ao\^ut"}
+
+MACRO {sep} {"septembre"}
+
+MACRO {oct} {"octobre"}
+
+MACRO {nov} {"novembre"}
+
+MACRO {dec} {"d\'ecembre"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"jan."}
+
+MACRO {feb} {"f\'ev."}
+
+MACRO {mar} {"mars"}
+
+MACRO {apr} {"avr."}
+
+MACRO {may} {"mai"}
+
+MACRO {jun} {"juin"}
+
+MACRO {jul} {"juil."}
+
+MACRO {aug} {"ao\^ut"}
+
+MACRO {sep} {"sept."}
+
+MACRO {oct} {"oct."}
+
+MACRO {nov} {"nov."}
+
+MACRO {dec} {"d\'ec."}
+
+%</abr>
+%</!options&!driver>
+ % End module: french.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/geojour.mbs b/macros/latex/contrib/custom-bib/geojour.mbs
new file mode 100644
index 0000000000..bf8519a543
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/geojour.mbs
@@ -0,0 +1,404 @@
+%\iffalse THIS IS A META COMMENT
+% File: physjour.mbs
+% Copyright 1994-1999 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Journal Definition File for Geophysics journals
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{geojour.mbs}[2002/07/10 2.0h (PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{geojour.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1996 Feb 2}{Initial version, contributed by N.S.}
+% \changes{1.1}{1996 Jun 20}{Additions/correction by Martin Dix}
+% \changes{2.0}{1996 Jun 26}{Reorganize with \texttt{physjour} and
+% \texttt{photjour}}
+% \changes{2.0a}{1997 May 26}{Correct grl abbreviation; add \texttt{pss}}
+% \changes{2.0b}{1997 Sep 15}{Replace umlaut with Raichle trick}
+% \changes{2.0c}{1998 Nov 25}{Add \texttt{pce} and \texttt{sp}}
+% \changes{2.0d}{1998 Dec 22}{Add \texttt{empl}, \texttt{ass}, \texttt{expa},
+% and \texttt{sgp}}
+% \changes{2.0e}{1999 Feb 24}{Update copyright notice}
+% \changes{2.0f}{1999 Oct 8}{Revise some journal abbreviations}
+% \changes{2.0g}{1999 Nov 16}{Get \texttt{pce} right}
+% \changes{2.0h}{2002 Jul 10}{Add \texttt{jastp}}
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly}{Geophysics Journal Names}
+%
+% \title{{\bfseries Geophysics Journal Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly}
+%
+% \GetFileInfo{geojour.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+%
+% This file adds a list of preprogrammed geophysics journal names to
+% bibliographic style files, in both full and abbreviated versions.
+% These defined journal names will be added to those in the main master
+% bibliography style file.
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains support for
+% external definition files.
+%
+% This file was contributed by
+% \begin{quote}
+% Niilo Siljamo, email \texttt{siljamo@rock.helsinki.fi}.
+% \end{quote}
+% with additions and corrections by
+% \begin{quote}
+% Martin Dix, email \texttt{mrd@dar.csiro.au}
+% \end{quote}
+%
+% Version 2.0: I go through all journal names, checking for conflicts and
+% duplications with \texttt{physjour.mbs} and \texttt{photjour.mbs}.
+% Optical and physical journals removed; geophysical journals included
+% from the others. Where one journal exists with multiple shorthands,
+% all versions are kept.
+%
+% Version 2.0a: correct abbreviation for GRL; introduce \texttt{pss} for
+% Planetary and Space Science, which for some wierd reason is keyed as
+% \texttt{pps}, which I leave for compatibility.
+%
+% Version 2.0b: Fixes a problem with umlauts acting as string terminator.
+%
+% Versions 2.0c,d: Add more journals.
+%
+% Version 2.0e: revise copyright notice to LPPL standard.
+%
+% Version 2.0f: revise journal abbreviations as suggested by Conrado
+% Badenas \texttt{Conrado.Badenas@uv.es}
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options>|
+% \dots\ |%</!options>| in order to exclude it if \dtx{} is used to
+% extract only the menu information.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JGEOPHYSICS JOURNAL NAMES:}
+\optdef{*}{}{Full geophysics journal names}{}
+\optdef{a}{jabr}{Abbreviate geophysics names}{for journals}
+\getans
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options>
+%<*jabr>
+MACRO {aisr} {"Adv. Space Res."}
+MACRO {ag} {"Ann. Geophys."}
+MACRO {anigeo} {"Ann. Geofis."}
+MACRO {angl} {"Ann. Glaciol."}
+MACRO {andmet} {"Ann. d. Meteor."}
+MACRO {andgeo} {"Ann. d. Geophys."}
+MACRO {andphy} {"Ann. Phys.-Paris"}
+MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."}
+MACRO {atph} {"Atm\'osphera"}
+MACRO {aao} {"Atmos. Ocean"}
+MACRO {ass}{"Astrophys. Space Sci."}
+MACRO {atenv} {"Atmos. Environ."}
+MACRO {aujag} {"Aust. J. Agr. Res."}
+MACRO {aumet} {"Aust. Meteorol. Mag."}
+MACRO {blmet} {"Bound.-Lay. Meteorol."}
+MACRO {bams} {"Bull. Amer. Meteorol. Soc."}
+MACRO {cch} {"Clim. Change"}
+MACRO {cdyn} {"Clim. Dynam."}
+MACRO {cbul} {"Climatol. Bull."}
+MACRO {cap} {"Contrib. Atmos. Phys."}
+MACRO {dsr} {"Deep-Sea Res."}
+MACRO {dhz} {"Dtsch. Hydrogr. Z."}
+MACRO {dao} {"Dynam. Atmos. Oceans"}
+MACRO {eco} {"Ecology"}
+MACRO {empl}{"Earth, Moon and Planets"}
+MACRO {envres} {"Environ. Res."}
+MACRO {envst} {"Environ. Sci. Technol."}
+MACRO {ecms} {"Estuarine Coastal Mar. Sci."}
+MACRO {expa}{"Exper. Astron."}
+MACRO {geoint} {"Geofis. Int."}
+MACRO {geopub} {"Geofys. Publ."}
+MACRO {geogeo} {"Geol. Geofiz."}
+MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."}
+MACRO {gfd} {"Geophys. Fluid Dyn."}
+MACRO {geomag} {"Geophys. Mag."}
+MACRO {georl} {"Geophys. Res. Lett."}
+MACRO {grl} {"Geophys. Res. Lett."}
+MACRO {ga} {"Geophysica"}
+MACRO {gs} {"Geophysics"}
+MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."}
+MACRO {ijawp} {"Int. J. Air Water Pollut."}
+MACRO {ijc} {"Int. J. Climatol."}
+MACRO {ijrs} {"Int. J. Remote Sens."}
+MACRO {jam} {"J. Appl. Meteorol."}
+MACRO {jaot} {"J. Atmos. Ocean. Technol."}
+MACRO {jatp} {"J. Atmos. Terr. Phys."}
+MACRO {jastp} {"J. Atmos. Solar-Terr. Phys."}
+MACRO {jce} {"J. Climate"}
+MACRO {jcam} {"J. Climate Appl. Meteor."}
+MACRO {jcm} {"J. Climate Meteor."}
+MACRO {jcy} {"J. Climatol."}
+MACRO {jgr} {"J. Geophys. Res."}
+MACRO {jga} {"J. Glaciol."}
+MACRO {jh} {"J. Hydrol."}
+MACRO {jmr} {"J. Mar. Res."}
+MACRO {jmrj} {"J. Meteor. Res. Japan"}
+MACRO {jm} {"J. Meteor."}
+MACRO {jpo} {"J. Phys. Oceanogr."}
+MACRO {jra} {"J. Rech. Atmos."}
+MACRO {jaes} {"J. Aeronaut. Sci."}
+MACRO {japca} {"J. Air Pollut. Control Assoc."}
+MACRO {jas} {"J. Atmos. Sci."}
+MACRO {jmts} {"J. Mar. Technol. Soc."}
+MACRO {jmsj} {"J. Meteorol. Soc. Japan"}
+MACRO {josj} {"J. Oceanogr. Soc. Japan"}
+MACRO {jwm} {"J. Wea. Mod."}
+MACRO {lao} {"Limnol. Oceanogr."}
+MACRO {mwl} {"Mar. Wea. Log"}
+MACRO {mau} {"Mausam"}
+MACRO {meteor} {"``Meteor'' Forschungsergeb."}
+MACRO {map} {"Meteorol. Atmos. Phys."}
+MACRO {metmag} {"Meteor. Mag."}
+MACRO {metmon} {"Meteor. Monogr."}
+MACRO {metrun} {"Meteor. Rundsch."}
+MACRO {metzeit} {"Meteor. Z."}
+MACRO {metgid} {"Meteor. Gidrol."}
+MACRO {mwr} {"Mon. Weather Rev."}
+MACRO {nwd} {"Natl. Weather Dig."}
+MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."}
+MACRO {npg} {"Nonlin. Proc. Geophys."}
+MACRO {om} {"Oceanogr. Meteorol."}
+MACRO {ocac} {"Oceanol. Acta"}
+MACRO {oceanus} {"Oceanus"}
+MACRO {paleoc} {"Paleoceanography"}
+MACRO {pce} {"Phys. Chem. Earth"}
+MACRO {pmg} {"Pap. Meteor. Geophys."}
+MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."}
+MACRO {physzeit} {"Phys. Z."}
+MACRO {pps} {"Planet. Space Sci."}
+MACRO {pss} {"Planet. Space Sci."}
+MACRO {pag} {"Pure Appl. Geophys."}
+MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."}
+MACRO {quatres} {"Quat. Res."}
+MACRO {rsci} {"Radio Sci."}
+MACRO {rse} {"Remote Sens. Environ."}
+MACRO {rgeo} {"Rev. Geophys."}
+MACRO {rgsp} {"Rev. Geophys. Space Phys."}
+MACRO {rdgeo} {"Rev. Geofis."}
+MACRO {revmeta} {"Rev. Meteorol."}
+MACRO {sgp}{"Surveys in Geophys."}
+MACRO {sp} {"Solar Phys."}
+MACRO {ssr} {"Space Sci. Rev."}
+MACRO {tellus} {"Tellus"}
+MACRO {tac} {"Theor. Appl. Climatol."}
+MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"}
+MACRO {wrr} {"Water Resour. Res."}
+MACRO {weather} {"Weather"}
+MACRO {wafc} {"Weather Forecast."}
+MACRO {ww} {"Weatherwise"}
+MACRO {wmob} {"WMO Bull."}
+MACRO {zeitmet} {"Z. Meteorol."}
+%</jabr>
+%<*!jabr>
+MACRO {aisr} {"Advances in Space Research"}
+MACRO {ag} {"Annales Geophysic\ae"}
+MACRO {anigeo} {"Annali di Geofisica"}
+MACRO {angl} {"Annals of Glaciology"}
+MACRO {andmet} {"Annalen der Meteorologie"}
+MACRO {andgeo} {"Annales de Geophysique"}
+MACRO {andphy} {"Annales de Physique"}
+MACRO {afmgb} {"Archiv f\^^b{u}r Meteorologie, Geophysik und Bioklimatologie"}
+MACRO {ass}{"Astrophysics and Space Science"}
+MACRO {atph} {"Atm\'osphera"}
+MACRO {aao} {"Atmosphere-Ocean"}
+MACRO {atenv} {"Atmospheric Environment"}
+MACRO {aujag} {"Australian Journal of Agricultural Research"}
+MACRO {aumet} {"Australian Meteorological Magazine"}
+MACRO {blmet} {"Boundary-Layer Meteorology"}
+MACRO {bams} {"Bulletin of the American Meteorological Society"}
+MACRO {cch} {"Climatic Change"}
+MACRO {cdyn} {"Climate Dynamics"}
+MACRO {cbul} {"Climatological Bulletin"}
+MACRO {cap} {"Contributions to Atmospheric Physics"}
+MACRO {dsr} {"Deep-Sea Research"}
+MACRO {dhz} {"Deutsche Hydrographische Zeitschrift"}
+MACRO {dao} {"Dynamics of Atmospheres and Oceans"}
+MACRO {eco} {"Ecology"}
+MACRO {empl}{"Earth, Moon and Planets"}
+MACRO {envres} {"Environmental Research"}
+MACRO {envst} {"Environmental Science and Technology"}
+MACRO {ecms} {"Estuarine and Coastal Marine Science"}
+MACRO {expa}{"Experimental Astronomy"}
+MACRO {geoint} {"Geofisica Internationale"}
+MACRO {geopub} {"Geofysiske Publikasjoner"}
+MACRO {geogeo} {"Geologiya i Geofizika"}
+MACRO {gafd} {"Geophysical and Astrophysical Fluid Dynamics"}
+MACRO {gfd} {"Geophysical Fluid Dynamics"}
+MACRO {geomag} {"Geophysical Magazine"}
+MACRO {georl} {"Geophysical Research Letters"}
+MACRO {grl} {"Geophysical Research Letters"}
+MACRO {ga} {"Geophysica"}
+MACRO {gs} {"Geophysics"}
+MACRO {ieeetap} {"IEEE Transactions on Antennas and Propagation"}
+MACRO {ijawp} {"International Journal of Air and Water Pollution"}
+MACRO {ijc} {"International Journal of Climatology"}
+MACRO {ijrs} {"International Journal of Remote Sensing"}
+MACRO {jam} {"Journal of Applied Meteorology"}
+MACRO {jaot} {"Journal of Atmospheric and Oceanic Technology"}
+MACRO {jatp} {"Journal of Atmospheric and Terrestrial Physics"}
+MACRO {jastp} {"Journal of Atmospheric and Solar-Terrestrial Physics"}
+MACRO {jce} {"Journal of Climate"}
+MACRO {jcam} {"Journal of Climate and Applied Meteorology"}
+MACRO {jcm} {"Journal of Climate Meteorology"}
+MACRO {jcy} {"journal of Climatology"}
+MACRO {jgr} {"Journal of Geophysical Research"}
+MACRO {jga} {"Journal of Glaciology"}
+MACRO {jh} {"Journal of Hydrology"}
+MACRO {jmr} {"Journal of Marine Research"}
+MACRO {jmrj} {"Journal of Meteorological Research, Japan"}
+MACRO {jm} {"Journal of Meteorology"}
+MACRO {jpo} {"Journal of Physical Oceanography"}
+MACRO {jra} {"Journal de Recherches Atmospheriques"}
+MACRO {jaes} {"Journal of the Aeronautical Sciences"}
+MACRO {japca} {"Journal of the Air Pollution Control Association"}
+MACRO {jas} {"Journal of the Atmospheric Sciences"}
+MACRO {jmts} {"Journal of the Marine Technology Society"}
+MACRO {jmsj} {"Journal of Meteorological Society of Japan"}
+MACRO {josj} {"Journal of the Oceanographical Society of Japan"}
+MACRO {jwm} {"Journal of Weather Modification"}
+MACRO {lao} {"Limnology and Oceanography"}
+MACRO {mwl} {"Mariners Weather Log"}
+MACRO {mau} {"Mausam"}
+MACRO {meteor} {"``Meteor'' Forschungsergebnisse"}
+MACRO {map} {"Meteorology and Atmospheric Physics"}
+MACRO {metmag} {"Meteorological Magazine"}
+MACRO {metmon} {"Meteorological Monographs"}
+MACRO {metrun} {"Meteorologische Rundschau"}
+MACRO {metzeit} {"Meteorologische Zeitschrift"}
+MACRO {metgid} {"Meteorologiya i Gidrologiya"}
+MACRO {mwr} {"Monthly Weather Review"}
+MACRO {nwd} {"National Weather Digest"}
+MACRO {nzjmfr} {"New Zealand Journal of Marine and Freshwater Research"}
+MACRO {npg} {"Nonlinear Processes in Geophysics"}
+MACRO {om} {"Oceanography and Meteorology"}
+MACRO {ocac} {"Oceanologica Acta"}
+MACRO {oceanus} {"Oceanus"}
+MACRO {paleoc} {"Paleoceanography"}
+MACRO {pce} {"Physics and Chemistry of the Earth"}
+MACRO {pmg} {"Papers in Meteorology and Geophysics"}
+MACRO {ppom} {"Papers in Physical Oceanography and Meteorology"}
+MACRO {physzeit} {"Physikalische Zeitschrift"}
+MACRO {pps} {"Planetary and Space Science"}
+MACRO {pss} {"Planetary and Space Science"}
+MACRO {pag} {"Pure and Applied Geophysics"}
+MACRO {qjrms} {"Quarterly Journal of the Royal Meteorological Society"}
+MACRO {quatres} {"Quaternary Research"}
+MACRO {rsci} {"Radio Science"}
+MACRO {rse} {"Remote Sensing of the Environment"}
+MACRO {rgeo} {"Reviews of Geophysics"}
+MACRO {rgsp} {"Reviews of Geophysics and Space Physics"}
+MACRO {rdgeo} {"Revista de Geofisica"}
+MACRO {revmeta} {"Revista Meteorologica"}
+MACRO {sgp}{"Surveys in Geophysics"}
+MACRO {sp} {"Solar Phys."}
+MACRO {ssr} {"Space Science Review"}
+MACRO {tellus} {"Tellus"}
+MACRO {tac} {"Theoretical and Applied Climatology"}
+MACRO {tagu} {"Transactions, American Geophysical Union (EOS)"}
+MACRO {wrr} {"Water Resources Research"}
+MACRO {weather} {"Weather"}
+MACRO {wafc} {"Weather and Forecasting"}
+MACRO {ww} {"Weatherwise"}
+MACRO {wmob} {"World Meteorological Organization Bulletin"}
+MACRO {zeitmet} {"Zeitschrift f\^^b{u}r Meteorologie"}
+%</!jabr>
+%</!options>
+ % End module: geojour.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/german.mbs b/macros/latex/contrib/custom-bib/german.mbs
new file mode 100644
index 0000000000..90cee2b64e
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/german.mbs
@@ -0,0 +1,335 @@
+%\iffalse THIS IS A META COMMENT
+% File: german.mbs
+% Copyright 1995-1999 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: GERMAN
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+%\fi
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{german.mbs}[2003/11/06 4.2 (PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{german.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1995 Mar 15}{Initial version}
+% \changes{1.1}{1995 May 4}{Do no abbreviate `edited by'}
+% \changes{1.2}{1995 Jun 7}{Revisions suggested by Sven Hartrumpf}
+% \changes{1.3}{1995 Aug 2}{Revisions suggested by Gerd Neugebauer,
+% dissertation option, `Techn. Ber.'}
+% \changes{1.3}{1995 Aug 2}{Techn. Ber. in braces to preserve case}
+% \changes{1.3a}{1995 Aug 3}{Herausgeber abbreviated as Hg, sing and plural}
+% \changes{1.4}{1995 Oct 25}{Remove \texttt{umlaut} option and \cs{qq},
+% replace with Raichle's trick}
+% \changes{1.5}{1995 Nov 2}{Some bugs removed}
+% \changes{1.6}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{1.7}{1999 Feb 1}{Add option \texttt{xedn}}
+% \changes{1.7}{1999 Feb 24}{Update copyright notice}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.0a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly}{German Bibliographies}
+%
+% \title{{\bfseries German Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly}
+%
+% \GetFileInfo{german.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries German\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% Some improvements to the translations have been contributed by
+% Sven Hartrumpf of the Universit\"at Koblenz-Landau.
+%
+% Bernd Raichle points out that |\^^b| can be used in place of |\"|
+% within \btx{} code. One can thus replace |M\qq{a}rz| with |M\^^b arz|
+% and do away with the \texttt{umlaut} option.
+%
+% Some bugs have been removed on the advice of Gerd Neugebauer, Universit\"at
+% Koblenz.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for GERMAN}
+\wr{\spsp\spsp german,\pc: German language}
+
+
+\beginoptiongroup{ABBREVIATE WORD `SEITEN':}{}
+\optdef{*}{}{`Seite(n)'}{(no abbreviation)}
+\optdef{a}{pp}{`Seite' abbreviated}{as S.}
+\optdef{x}{ppx}{`Seite' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `HERAUSGEBER':}{}
+\optdef{*}{}{`Herausgeber'}{(no abbreviation)}
+\optdef{a}{ed}{`Herausgeber' abbreviated}{as Hg.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of Band, Auflage, Kapitel}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as erste, zweite, dritte, etc}
+\optdef{n}{ord}{Numerical editions}{as 1., 2., 3., etc}
+\getans
+\endoptiongroup
+\beginoptiongroup{ALTERNATIVE FOR PHD THESIS:}{}
+\optdef{*}{ger-phd}{PhD as `Doktorarbeit}{}
+\optdef{d}{}{PhD as `Dissertation'}{}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is GERMAN
+FUNCTION {bbl.and}
+{ "und"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "Herausgeber" }
+%<ed>{ "Hg." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "Herausgeber" }
+%<ed>{ "Hg." }
+
+FUNCTION {bbl.edby}
+{ "herausgegeben von" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "Auf\/lage" }
+%<abr>{ "Aufl." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "Band" }
+%<abr>{ "Bd." }
+
+FUNCTION {bbl.of}
+{ "von" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "Nummer" }
+%<abr>{ "Nr." }
+
+FUNCTION {bbl.nr}
+{ "Nr." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "Seiten" }
+%<pp>{ "S." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "Seite" }
+%<pp>{ "S." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "Seiten" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "Kapitel" }
+%<abr>{ "Kap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "{Technischer Bericht}" }
+%<abr>{ "{Techn.\ Ber.}" }
+
+FUNCTION {bbl.mthesis}
+{ "Diplomarbeit" }
+
+FUNCTION {bbl.phdthesis}
+%<ger-phd>{ "Doktorarbeit" }
+%<!ger-phd>{ "Dissertation" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "Erste" }
+%<ord>{ "1." }
+
+FUNCTION {bbl.second}
+%<!ord>{ "Zweite" }
+%<ord>{ "2." }
+
+FUNCTION {bbl.third}
+%<!ord>{ "Dritte" }
+%<ord>{ "3." }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "Vierte" }
+%<ord>{ "4." }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "F\^^b{u}nfte" }
+%<ord>{ "5." }
+
+FUNCTION {bbl.th}
+{ "." }
+
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"Januar"}
+
+MACRO {feb} {"Februar"}
+
+MACRO {mar} {"M\^^b{a}rz"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"Mai"}
+
+MACRO {jun} {"Juni"}
+
+MACRO {jul} {"Juli"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"Oktober"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"Dezember"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Febr."}
+
+MACRO {mar} {"M\^^b{a}rz"}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"Mai"}
+
+MACRO {jun} {"Juni"}
+
+MACRO {jul} {"Juli"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Okt."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dez."}
+
+%</abr>
+%</!options&!driver>
+ % End module: german.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/italian.mbs b/macros/latex/contrib/custom-bib/italian.mbs
new file mode 100644
index 0000000000..214d6e1dbb
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/italian.mbs
@@ -0,0 +1,308 @@
+%\iffalse THIS IS A META COMMENT
+% File: italian.mbs
+% Copyright 1995-1999 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: ITALIAN
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{italian.mbs}[2003/11/06 4.2 (PWD/GP)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{italian.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.1}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{1.2}{1999 Feb 1}{Add option \texttt{xedn}}
+% \changes{1.2}{1999 Feb 24}{Update copyright notice}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.0a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{Giovanni Pensa}{Italian Bibliographies}
+%
+% \title{{\bfseries Italian Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly \and Giovanni Pensa}
+%
+% \GetFileInfo{italian.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Italian\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for ITALIAN}
+\wr{\spsp\spsp italian,\pc: Italian language}
+
+\beginoptiongroup{ABBREVIATE WORD `PAGINE':}{}
+\optdef{*}{}{`Pagina/e'}{(no abbreviation)}
+\optdef{a}{pp}{`Pagina' abbreviated}{as pag.}
+\optdef{x}{ppx}{`Pagina' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `CURATORI':}{}
+\optdef{*}{}{`Curatore/i'}{(no abbreviation)}
+\optdef{a}{ed}{`Curatore' abbreviated}{as cur.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of volume, edizione, capitolo, etc}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as prima, seconda, terza, etc}
+\optdef{n}{ord}{Numerical editions}{as 1a, 2a, 3a, etc}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is ITALIAN
+FUNCTION {bbl.and}
+{ "e" }
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "curatori" }
+%<ed>{ "cur." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "curatore" }
+%<ed>{ "cur." }
+
+FUNCTION {bbl.edby}
+{ "curato da" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "edizione" }
+%<abr>{ "ed." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "volume" }
+%<abr>{ "vol." }
+
+FUNCTION {bbl.of}
+{ "di" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "numero" }
+%<abr>{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "pagine" }
+%<pp>{ "pp." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "pagina" }
+%<pp>{ "p." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "pagine" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "capitolo" }
+%<abr>{ "cap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Rapporto Tecnico" }
+%<abr>{ "Rap. Tecn." }
+
+FUNCTION {bbl.mthesis}
+{ "Tesi di laurea" }
+
+FUNCTION {bbl.phdthesis}
+{ "Tesi di dottorato" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "Prima" }
+%<ord>{ "1a" }
+
+FUNCTION {bbl.second}
+%<!ord>{ "Seconda" }
+%<ord>{ "2a" }
+
+FUNCTION {bbl.third}
+%<!ord>{ "Terza" }
+%<ord>{ "3a" }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "Quarta" }
+%<ord>{ "4a" }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "Quinta" }
+%<ord>{ "5a" }
+
+FUNCTION {bbl.th}
+{ "a" }
+
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"gennaio"}
+
+MACRO {feb} {"febbraio"}
+
+MACRO {mar} {"marzo"}
+
+MACRO {apr} {"aprile"}
+
+MACRO {may} {"maggio"}
+
+MACRO {jun} {"giugno"}
+
+MACRO {jul} {"luglio"}
+
+MACRO {aug} {"agosto"}
+
+MACRO {sep} {"settembre"}
+
+MACRO {oct} {"ottobre"}
+
+MACRO {nov} {"novembre"}
+
+MACRO {dec} {"dicembre"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"gen."}
+
+MACRO {feb} {"feb."}
+
+MACRO {mar} {"mar."}
+
+MACRO {apr} {"apr."}
+
+MACRO {may} {"mag"}
+
+MACRO {jun} {"giu."}
+
+MACRO {jul} {"lug."}
+
+MACRO {aug} {"ago."}
+
+MACRO {sep} {"set."}
+
+MACRO {oct} {"ott."}
+
+MACRO {nov} {"nov."}
+
+MACRO {dec} {"dic."}
+
+%</abr>
+%</!options&!driver>
+ % End module: italian.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/makebst.dtx b/macros/latex/contrib/custom-bib/makebst.dtx
new file mode 100644
index 0000000000..66da71d6b1
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/makebst.dtx
@@ -0,0 +1,1247 @@
+%\iffalse
+%<*dtx>
+\ProvidesFile
+%========================================================================
+ {MAKEBST.DTX}
+%========================================================================
+%</dtx>
+%% Copyright 1993-2003 Patrick W Daly
+%% Max-Planck-Institut f\"ur Sonnensystemforschung
+%% Max-Planck-Str. 2
+%% D-37191 Katlenburg-Lindau
+%% Germany
+%% E-mail: daly@mps.mpg.de
+%%
+%% With additions by Arthur Ogawa
+%% E-mai: ogawa@teleport.com
+%%
+%% 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 (La)TeX program that generates docstrip batch jobs
+% that may be used to produce customized bibliographic style files.
+% Docstrip options available:
+% program - to generate the program file, makebst.tex
+% optlist - (with program) to list unused options in .dbj file
+% optverbose - (with program and optlist) to add verbose comments to .dbj file
+% driver - to produce a LaTeX2e driver file to print the documentation
+% Installation:
+% LaTeX this file: ==> docstrip installation file makebst.ins
+% AND the (LaTeX2e) documentation
+% (La)TeX makebst.ins: ==> `program' file makebst.tex
+% (makebst.ins may be edited as needed)
+%-------------------------------------------------------------------
+%<program>\def\ProvidesFile#1 [#2 #3 #4]{\def\filename{#1}%
+%<program> \def\fileversion{#3}\def\filedate{#2}}
+%<*program>
+%\fi
+ \ProvidesFile{makebst}
+ [2003/09/08 4.1 (PWD, AO)]
+%\iffalse
+% Here follows abbreviated usage description for the stripped version
+ % This file is to be run under TeX (or even LaTeX)
+ % It interactively asks questions about the bibliographic style file
+ % that you want to produce. When it is finished, it writes a docstrip
+ % driver file that produces that .bst file from the generic .mbs that
+ % you specified; optionally, it will call the docstrip run immediately.
+ % For details, read the documentation in the source file makebst.dtx.
+ %--------------------------------------------------------------------
+%</program>
+%\fi
+% \changes{1.0}{1993 Aug 17}{Initial version}
+% \changes{1.1}{1994 May 25}{Change extensions to avoid \LaTeXe\ conflicts}
+% \changes{2.0}{1994 Jul 01}{Update documentation to \LaTeXe}
+% \changes{2.1}{1994 Dec 29}{Add the \texttt{optlist} option}
+% \changes{2.1}{1995 Jan 2}{Read \texttt{.opt} file only exceptionally}
+% \changes{3.0}{1995 Mar 15}{Allow \texttt{.mbs} files more freedom, to
+% include other files, for example}
+% \changes{3.1}{1997 Apr 29}{Conform (optionally) to \texttt{docstrip} 2.4g}
+% \changes{3.2}{1999 Feb 24}{Update copyright notice}
+% \changes{4.0}{1999 Jul 20}{AO: show all choices in output file}
+% \changes{4.1}{2003 Sep 8}{PWD: Conform to \texttt{docstrip} 2.4}
+%
+% \CheckSum{698}
+% \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
+%^^A =============================================
+\begin{filecontents}{makebst.ins}
+% Simply TeX or LaTeX this file to extract various files from
+% the source file `makebst.dtx'
+
+% This installation file works with docstrip 2.4 or later.
+
+\input docstrip
+
+\preamble
+=============================================
+IMPORTANT NOTICE:
+This is a generated file.
+
+It is subject to the same copyright conditions (see below)
+as in the original file: \inFileName.
+It may not be distributed without \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
+\askforoverwritefalse
+
+\generate{\file{makebst.tex}{\from{makebst.dtx}{program,%
+% Three variants on makebst.tex; select following options.
+% 1. the .dbj file contains by default only the list of selected options
+% (Select none of the following)
+% 2. the .dbj file contains by default a list of all offered options,
+% with the non-selected ones commented out, add next option.
+ optlist,%
+% 3. as above but with full comments added for each option, add next option.
+% optverbose%
+}}}
+
+\preamble
+============================================
+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
+\postamble
+
+End of documentation driver file.
+\endpostamble
+
+\generate{\file{makebst.drv}{\from{makebst.dtx}{driver}}}
+\endbatchfile
+
+\obeyspaces
+\Msg{******************************************}%
+\Msg{* For documentation, process makebst.dtx *}%
+\Msg{* or the driver file makebst.drv *}%
+\Msg{******************************************}
+\end{filecontents}
+%</install>
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}
+\documentclass{ltxdoc}
+%<driver>%\EnableCrossrefs %Comment out when .ind file ready
+ \DisableCrossrefs %May stay; zapped by \EnableCrossrefs
+%<driver>%\RecordChanges %Comment out when .gls file ready
+%<driver>%\CodelineIndex %Comment out when .ind file ready
+ \CodelineNumbered %May stay
+%<driver>%\OnlyDescription
+\begin{document}
+ \DocInput{makebst.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{\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}
+% \DoNotIndex{\textup,\textit,\textmd,\textsf,\emph}
+% \DoNotIndex{\ttfamily,\rmfamily,\sffamily,\mdseries,\bfseries,\upshape}
+% \DoNotIndex{\slshape,\scshape,\itshape,\em,\LaTeX,\LaTeXe}
+% \DoNotIndex{\filename,\fileversion,\filedate,\let,\empty}
+% \DoNotIndex{\%,\(,\),\{,\},\@,\@@end,\^,\batchfile,\begingroup,\catcode}
+% \DoNotIndex{\closein,\closeout,\csname,\day,\divide,\edef,\endcsname}
+% \DoNotIndex{\endgroup,\endinput,\endpostamble,\endpreamble,\expandafter}
+% \DoNotIndex{\from,\gdef,\generateFile,\generate,\global,\hours,\ifeof,\immediate}
+% \DoNotIndex{\input,\keepsilent,\loop,\month,\multiply,\newcount}
+% \DoNotIndex{\newlinechar,\newread,\newwrite,\number,\openin,\openout}
+% \DoNotIndex{\or,\par,\postamble,\preamble,\read,\relax,\repeat,\string}
+% \DoNotIndex{\temp,\time,\undefined,\write,\year}
+% \DoNotIndex{\advance,\today,\minutes,\aftergroup,\askforoverwrite}
+% \DoNotIndex{\endbatchfile}
+%
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+% \setcounter{StandardModuleDepth}{1}
+%
+% \GetFileInfo{makebst}
+% \newcommand\theprog{\texttt{\filename}}
+%
+% \title{\bfseries Customizing Bibliographic Style Files}
+%
+% \author{Patrick W. Daly}
+%
+% \date{This paper describes program \theprog\\
+% version \fileversion{} from \filedate
+% \thanks{Work on \texttt{custom-bib}~4.00 was supported by the
+% American Physical Society}\\[1ex]
+% (including additions by Arthur Ogawa, \texttt{ogawa@teleport.com})
+% }
+%
+% \maketitle
+%
+%^^A In order to keep all marginal notes on the one (left) side:
+%^^A (otherwise they switch sides disastrously with twoside option)
+% \makeatletter \@mparswitchfalse \makeatother
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. DALY}{CUSTOMIZING BIBLIOGRAPHIES}
+%
+% \newcommand{\btx}{\textsc{Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \section{Introduction}
+% This \TeX{} program is meant to be used together with generic
+% bibliographic style files to produce customized \texttt{.bst} files for
+% running with \btx. The generic, or master file, can be processed by
+% \dtx{} with selected options to achieve the desired bibliographic
+% style. To this end, a \dtx{} batch job should be made up.
+% However, because of the large number of options available, an
+% interactive, dialogue system would be more convenient.
+%
+% This program, \theprog, accomplishes this goal.
+% It defines macros to establish such a \dtx{} batch job file, and
+% to organize a menu of options. The menu information is contained,
+% however, in the master file itself, since the two are intimately related.
+% Thus different master files with totally different option structures may
+% be accommodated.
+%
+% The batch job could in fact be made up with an editor without calling
+% \theprog, but this program does simplify the task.
+%
+% Incidentally, the \dtx{} run can only be carried out by means of
+% a batch job. Running \dtx{} interactively inserts default pre- and
+% postambles in the text, the latter including an |\endinput| command that
+% \btx{} will not understand.
+%
+% \section{The Master File}
+% The master file is a \btx{} bibliographic style file containing
+% alternative coding depending on \dtx{} options. The options are
+% selected when \dtx{} is run, either interactively or through a
+% batch job.
+%
+% Suppose that one of the options is called \texttt{xyz}. Then the following
+% alternatives are possible:
+% \begin{quote}
+% |%<xyz> | \em one line of coding
+% \end{quote}
+% \emph{includes} the single line of coding;
+% \begin{quote}
+% |%<!xyz> | \em one line of coding
+% \end{quote}
+% \emph{excludes} the single line;
+% \begin{quote}
+% |%<*xyz> | \\
+% \emph{several lines of coding}\\
+% |%</xyz> |
+% \end{quote}
+% \emph{includes} all the bracketed lines;
+% \begin{quote}
+% |%<*!xyz> | \\
+% \emph{several lines of coding}\\
+% |%</!xyz> |
+% \end{quote}
+% \emph{excludes} all the bracketed lines.
+%
+% Options may be logically combined: the symbol \verb!|! is a logical
+% \textsf{or}, |&| a logical \textsf{and}, |!| a logical \textsf{not};
+% parentheses \texttt{(} and \texttt{)} may be used to group options.
+%
+% \subsection{Using with \dtx}
+% (The \dtx\ command syntax shown here is that for version~2.4 and later,
+% released December, 1996.)
+%
+% In order to generate a true \btx{} style file with selected options from
+% the master file, it is necessary to run a \dtx{} batch job.
+% Suppose that the master file is named \texttt{master.mbs}, the
+% resulting \btx{} style file is to be \texttt{silly.bst}, and the batch job
+% file itself is called \texttt{silly.dbj}. To produce this with options, say,
+% \texttt{xyz} and \texttt{abc}, the batch job would look something like:
+% \begin{quote}\begin{verbatim}
+% \input docstrip
+%
+% \preamble
+% This is for Journal of Silly Results
+% \endpreamble
+%
+% \postamble
+% End of customized bst file
+% \endpostamble
+%
+% \keepsilent
+%
+% \askforoverwritefalse
+%
+% \generate{\file{silly.bst}{\from{master.mbs}{xyz,abc}}}
+% \endbatchfile
+% \end{verbatim}
+% \end{quote}
+% A preamble is not necessary, although it is advisable to include some
+% statement about the application of the bibliographic style. A postamble
+% \emph{is} vital, otherwise the default will add |\endinput| at the end
+% of the file, something that \btx{} will not understand. The |\keepsilent|
+% is optional and just suppresses \dtx{} output during processing.
+% Similarly the |\askforoverwritefalse| suppresses the warning that a file of
+% the same name is to be overwritten.
+%
+% \subsection{The Menu File}
+% This program, \theprog, simplifies the creation of the batch job file. To
+% do that, it needs information on the available options. This information
+% must be stored in a special format, in the master file itself.
+% Alternatively, that information may be extracted and stored in a file
+% with the same root name but extension \texttt{.opt}. \textsl{This feature
+% is not recommended since it can lead to inconsistencies!}
+% The format of the menu information is illustrated below in
+% Section~\ref{sec:menu}.
+%
+% In the master file, this information must be enclosed within \dtx{}
+% options |%<*options>| \dots\ |%</options>| and \emph{must} be ended by an
+% |\endoptions| command. It may also include any number of comments.
+% The rest of the file must be enclosed within |%<*!options>| \dots\
+% |%</!options>| to exclude it when the menu information is extracted
+% with \dtx.
+%
+% A sample menu in the master file to select one or none of options
+% \texttt{xyz} \emph{or} \texttt{zyx} would look thus:
+% \begin{quote}\begin{verbatim}
+% %<*options>
+% \mes{Select one of these}
+% \optdef{f}{xyz}{Option forword}{to do forward stuff}
+% \optdef{r}{zyx}{Option reverse}{to do reverse stuff}
+% \optdef{*}{}{None of the above}{}
+% \getans
+% \endoptions
+% %</options>
+% %<*!options>
+% . . . . . .
+% %</!options>
+% \end{verbatim}
+% \end{quote}
+% An explanation of these commands is to be found in Section~\ref{sec:menu}.
+%
+% The menu information may be extracted from the master file by means of
+% \dtx{} and stored in a file with extension \texttt{.opt}. If this
+% file is present, \theprog{} offers to read it instead of the master file,
+% although this is \emph{not} recommended, as explained above.
+%
+%
+% \section{The Program \protect\theprog}
+%
+% \subsection{Installing \protect\theprog}
+%
+% The \theprog\ program comes as a documented source file named
+% \theprog\texttt{.dtx}, which needs to be processed by \dtx\ to extract the
+% actual `program' file \theprog\texttt{.tex}. The easiest way to do this is
+% simply to process the installation batch file \theprog\texttt{.ins} with
+% \TeX\ or \LaTeX, as
+% \begin{quote}
+% \texttt{tex} \theprog\texttt{.ins}\\
+% \hspace*{2em} or\\
+% \texttt{latex} \theprog\texttt{.ins}
+% \end{quote}
+%
+% There are in fact three variants of \theprog\ that may be extracted: the
+% basic one lists by default only those options that have been selected; the
+% more refined one (and the default) lists all options offered with the
+% rejected ones commented out; the third version also adds more detailed
+% comments. Even in the first two versions, the user will be asked
+% interactively if s/he wants the additional features of the others.
+%
+% One can select the variant by editing \theprog\texttt{.ins}.
+%
+% Another choice that can be made is whether the \texttt{.dbj} files are to
+% conform to \dtx\ version~2.4 syntax or not. By default,
+% \theprog\texttt{.ins} tests the current version and automatically
+% configures \theprog\texttt{.tex} to write the correct syntax. This too may
+% be overridden by editing \theprog\texttt{.ins}. (Note that the older syntax
+% is still understood by the newer version of \dtx.)
+%
+% Reminder: the older syntax requires |\def\batchfile|\marg{filename} as
+% the first line in a \dtx\ batch job, where \emph{filename} is the name of
+% the batch file itself. The newer syntax does not need this line, but
+% requires |\endbatchfile| at the very end instead. The advantage of the new
+% syntax is that one can edit and rename such a file without having to change
+% its name in the first line. The old syntax leads to great frustration if
+% one forgets to change \emph{filename}.
+%
+% Another difference in the syntaxes (actually introduced in version~2.3 in
+% June, 1996) is the use of the command |\generate| instead of
+% |\generateFile|. Its advantage is that it permits multiple files to be
+% extracted in one pass, something that is not exploited at all by \theprog.
+%
+% \subsection{Running \protect\theprog}
+% This is actually a \TeX{} program, although it will also run under \LaTeX.
+% In that sense, it is like \dtx{} itself.
+% Thus run the program with (something like)
+% \begin{quote}
+% \texttt{tex} \theprog\\
+% \hspace*{2em} or\\
+% \texttt{latex} \theprog
+% \end{quote}
+%
+% The program first asks for the name of the master file. This is
+% the file containing all possible bibliographic style commands, with
+% \dtx{} options for selective output. A default name is offered, as well
+% as a default extension (\texttt{.mbs}).
+%
+% Next, the program asks for the name of the output file, the \texttt{.bst}
+% file. The extension here is optional, defaulting to \texttt{.bst}. This name
+% also determines the name of the batch job file, which will have the same
+% root name with the extension \texttt{.dbj}, for the \emph{\dtx{} batch job}.
+%
+% The actual interrogation then begins. All the information for the menus
+% is contained in the master bibliographic style file. The reason for this
+% is that the menu information must conform to the available options in the
+% master file, so it makes sense that one file should contain both. The
+% master file is only read up to the |\endoptions| command.
+%
+% Finally, the batch job file is closed, and the user is asked if it should
+% be run. If he does not take up this
+% offer, or if he later edits the batch job, then it may be run manually
+% with (something like)
+% \begin{quote}\texttt{tex} \emph{bstname}\texttt{.dbj}\end{quote}
+%
+%
+% \section{The Menu Information\label{sec:menu}}
+% The set of questions in the interrogation must fit the available
+% options in the master file. For this reason, the menu information is
+% contained in the master file itself. The program \theprog{} supplies the
+% macros that are used in the menu file to simplify writing and processing
+% menu information.
+%
+% \DescribeMacro{\mes}
+% To print a message to the terminal, use |\mes|\marg{text}. A new line
+% may be forced within \emph{text} by means of |^^J|.
+%
+% \DescribeMacro{\ask}
+% To interrogate the user for a response, use |\ask{\|\emph{com}|}|\marg{text},
+% which writes \emph{text} to the terminal, and puts the
+% response in the command |\|\emph{com}.
+%
+% \DescribeMacro{\optdef}
+% Almost all interrogations will consist of a list of mutually exclusive
+% options, one of which is the default. For each item in the list, one must
+% specify the keyboard response that is to select it, the actual name of
+% the \dtx{} option that realizes it, and two pieces of explanatory
+% text. For example,
+% \begin{quote}
+% |\optdef{a}{abr}{Abbreviations}{of such words}|
+% \end{quote}
+% means that \texttt{abr} is the true \dtx{} option name that is
+% selected by typing \texttt{a}. The two explanatory texts are written to the
+% terminal immediately as part of the menu, but only the first text is
+% echoed when the selection is made (for confirmation) and is also written
+% to the batch job file (as comment).
+%
+% The default option must have the response |*|.
+%
+% A menu is written to the terminal, first with a |\mes| command to state
+% the subject matter, and then with a sequence of |\optdef| statements,
+% each of which also writes the texts to the terminal.
+% \DescribeMacro{\getans}
+% The response is then read in and processed with |\getans|, which writes
+% the reply to the command |\ans| and writes the appropriate \dtx{}
+% option to the batch job file. If the response does not correspond to any
+% of those in the menu list, it is set to {\tt*}; if there is no {\tt*}
+% in the list, then |\ans| is set to the last entry. The command |\ans|
+% is still available afterwards for any extra testing that might be needed.
+%
+% An example menu appears as follows:
+% \begin{quote}\begin{verbatim}
+% \mes{^^JJOURNAL VOLUME NUMBER:}
+% \optdef{*}{}{Volume plain}{as vol(num)}
+% \optdef{i}{vol-it}{Volume italic}%
+% {as {\string\em\space vol}(num)}
+% \optdef{b}{vol-bf}{Volume bold}%
+% {as {\string\bf\space vol}(num)}
+% \optdef{d}{vol-2bf}{Volume and number bold}%
+% {as {\string\bf\space vol(num)}}
+% \getans
+% \end{verbatim}
+% \end{quote}
+%
+% \DescribeMacro{\beginoptiongroup}
+% Further structure for the interrogation is provided by the
+% |\beginoptiongroup| \dots |\endoptiongroup| sequence,
+% which should act as a container for the |\mes| \dots
+% |\optdef| \dots |\getans| commands described above.
+% For example:
+% \begin{quote}
+% \begin{verbatim}
+% \beginoptiongroup{JOURNAL VOLUME NUMBER:}{}
+% \optdef{*}{}{Volume plain}{as vol(num)}
+% \optdef{i}{vol-it}{Volume italic}%
+% {as {\string\em\space vol}(num)}
+% \optdef{b}{vol-bf}{Volume bold}%
+% {as {\string\bf\space vol}(num)}
+% \optdef{d}{vol-2bf}{Volume and number bold}%
+% {as {\string\bf\space vol(num)}}
+% \getans
+% \endoptiongroup
+% \end{verbatim}
+% \end{quote}
+% presents the same effect as the previous example.
+% The virtue of the option group is in providing a single markup for all
+% interrogations and having a consistent appearance in the generated file.
+%
+% This feature has been added with version~4.0 of \theprog.
+%
+%
+% \section{More Complex Batch Jobs}
+% Version 3.0 of \theprog{} allows the master file to define more
+% sophisticated batch jobs, such as additional master files with their own
+% options. This is made possible because the options are not written
+% directly in the |\generate| command, as in earlier versions, but to a
+% command |\MBopts|. The batch file then contains something like:
+% \begin{quote}
+% |\def\MBopts{\from|\marg{source.ext}|{%|\\
+% \hspace*{1em}\emph{lines from menu session}\\
+% | }}|\\
+% |\generate{\file|\marg{output.ext}|{\MBopts}}|
+% \end{quote}
+%
+% Normally the \emph{lines from menu session} contain just the \dtx{}
+% options. However, the master file could add other things to the
+% definition of |\MBopts|, even closing it and starting a new definition.
+% It just has to make sure that the braces are balanced.
+%
+% \DescribeMacro{\MBaskfile}
+% A number a macros are provided, which are used by \theprog{} itself, to
+% simplify making complex menus. To ask for the name of a file
+% interactively,
+% \begin{quote}
+% |\MBaskfile|\marg{Prompting text}\parg{root.ext}\marg{io}|\|\emph{fname}
+% \end{quote}
+% may be given, where \emph{root.ext} is the default name of the file,
+% \emph{io} is \texttt{i} (for input) if the file must already exist, and
+% |\|\emph{fname} is the command that receives the file name. The root name
+% will be in |\froot|, the extension in |\fext|.
+%
+% \DescribeMacro{\wr}
+% Text is written to the batch job file with
+% \begin{quote}
+% |\wr|\marg{text}
+% \end{quote}
+% Any commands in \emph{text} that are to be written literally must be
+% preceded by |\string|.
+%
+% \DescribeMacro{\MBswitch}
+% Since any braces in \emph{text} must be balanced, something special must
+% be done to permit them to be printed as normal characters. The command
+% |\MBswitch| accomplishes this; the parentheses \texttt{( )} replace |{ }|
+% as the delimiters. This should always be given within |\begingroup| \dots
+% |\endgroup|.
+%
+% As an example, suppose the master file contains only half the coding for
+% the \texttt{.bst} file, the other half being in one of several other
+% master files. We must prompt for this second file, include it for its
+% options, and make sure that |\MBopts| knows about it. The following code
+% in the master file will do this.
+% \begin{quote}
+% |\MBaskfile{Name of second master file}(aa.mbs)i\xfile|\\
+% |\begingroup\MBswitch|\\
+% |\wr(\string\MBopta})|\\
+% |\wr(\string\from{\xfile}{\string\MBoptb}})|\\
+% |\wr(\string\def\string\MBopta{\pc)|\\
+% |\endgroup|\\
+% \emph{regular menu information for first file}\\
+% |\begingroup\MBswitch|\\
+% |\wr(}\string\def\string\MBoptb{\pc)|\\
+% |\endgroup|\\
+% |\input\xfile\relax|\\
+% |\begingroup\MBswitch|\\
+% |\wr({\pc)|\\
+% |\endgroup|\\
+% |\endoptions|
+% \end{quote}
+%
+% The resulting \texttt{.dbj} file contains
+% \begin{quote}
+% |\def\MBopts{\from{first.mbs}{%|\\
+% |\MBopta}|\\
+% |\from{second.mbs}{\MBoptb}}|\\
+% |\def\MBopta{%|\\
+% \emph{first set of options}\\
+% |}\def\MBoptb{%|\\
+% \emph{second set of options}\\
+% |{%|\\
+% | }}|\\
+% |\generate{\file{sample.bst}{\MBopts}}|
+% \end{quote}
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \section{Coding}
+% This section presents and explains the actual coding of the macros.
+% It is nested between |%<*program>| and |%</program>|, which
+% are indicators to \dtx{} that this coding belongs to the program
+% file.
+%
+% \subsection{Preliminaries}
+% The first thing is to open up i/o devices for communicating with the
+% terminal and files. (Some of this has been borrowed from \dtx{}.)
+% The terminal input and output are |\ttyin| and |\ttyout|
+% respectively, while the output file if |\outfile|.
+% \begin{macrocode}
+%<*program>
+\newwrite\outfile
+\newread\ttyin
+\newread\infile
+\newwrite\ttyout
+% \end{macrocode}
+% \begin{macro}{\mes}\begin{macro}{\wr}\begin{macro}{\umes}
+% \changes{4.0}{1999 July 20}{AO: define \cs{umes}}
+% The commands for outputting text are defined: |\mes| writes to the
+% terminal, |\wr| writes it argument directly to the output file,
+% while |\umes| writes to the terminal and adds its argument as a comment
+% to the output file.
+% \begin{macrocode}
+\def\mes{\immediate\write\ttyout}
+\def\wr#1{\immediate\write\outfile{#1}}
+\def\umes#1{\mes{^^J#1}\wr{\pc#1}}%
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+%
+% To assist inserting new lines in the middle of text, define a newline
+% symbol.
+% \begin{macrocode}
+\newlinechar=`\^^J
+% \end{macrocode}
+%
+% \begin{macro}{\MBswitch}
+% \changes{3.0}{1995 Feb 5}{Add macro}
+% There are times when we need to write a line of code to the output file
+% with unbalanced braces in that line. (They are balanced in another line.)
+% Such lines are written with |\wr{...}|. If the braces in the argument are
+% not balanced, then there will be trouble. To get around this, change the
+% category codes of the braces to `other' and let parentheses take their
+% place.
+% \begin{macrocode}
+\def\MBswitch{\catcode`\{=12 \catcode`\}=12
+ \catcode`\(=1 \catcode`\)=2\relax}
+% \end{macrocode}
+% The way to employ this is as
+% \begin{quote}\begin{verbatim}
+% \begingroup\MBswitch
+% \wr(..{..)
+% \endgroup
+% \end{verbatim}
+% \end{quote}
+% \end{macro}
+%
+% \begin{macro}{\ask}
+% To get a response from the terminal, use |\ask|. However, there are some
+% complications here. If only carriage-return is pressed, then the response
+% command is equal to |\par|; for anything else, a typed-in text includes a
+% trailing blank. We must test for |\par| and remove the blank if it is
+% there.
+% \begin{macrocode}
+\def\defpar{\par}
+\def\remblk#1 @@{#1}
+\def\ask#1#2{\mes{#2}\read\ttyin to #1\ifx#1\defpar\def#1{}\else
+ \edef#1{\expandafter\remblk#1@@}\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\getroot}
+% \begin{macro}{\getext}
+% To parse the name of a file into root and extension, use commands
+% |\getroot| and |\getext|.
+% \begin{macrocode}
+\def\groot#1.#2@@{#1}
+\def\getroot#1{\expandafter\groot#1.@@}
+\def\gext#1.#2.#3@@{#2}
+\def\getext#1{\expandafter\gext#1..@@}
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\MBaskfile}
+% \changes{3.0}{1995 Feb 5}{Add macro to get a file name}
+% Several times it is necessary to ask for a file name interactively, and
+% maybe test if it exists. This might even be done in the \texttt{.mbs}
+% file, so provide a macro to simplify this task. The syntax is
+% \begin{quote}
+% |\MBaskfile|\marg{Prompting text}\parg{root.ext}\marg{io}|\|\emph{fname}
+% \end{quote}
+% where \emph{root.ext} is the default name for the file sought, and
+% |\|\emph{fname} is the command that contains the final file name. The
+% commands |\froot| and |\fext| will contain the root and extensions of the
+% file name, if they are needed for further parsing. If
+% \emph{io}=\texttt{i} (for input), then the resulting file must already
+% exist, else the macro loops again. If \emph{root} is blank, then only the
+% extension is given as default, but a file root name must be entered.
+% \begin{macrocode}
+\def\MBaskfile#1(#2.#3)#4#5{%
+\loop
+ \def\ans{#2.#3}
+\if!#2!
+ \if!#3!\ask{#5}{#1}\fi
+ \ask{#5}{#1 (default extension=#3)}\else
+ \ask{#5}{#1 (default=\ans)}
+\fi
+ \ifx#5\empty \edef#5{\ans}\fi
+ \edef\froot{\getroot#5}
+ \edef\fext{\getext#5}
+ \ifx\fext\empty \def\fext{#3}\fi
+ \edef#5{\froot.\fext}
+\if#4i
+ \def\temp{Cannot find file `#5'}
+ \openin\infile#5\relax
+ \ifeof\infile \def\ans{}\fi \closein\infile
+\else
+ \def\temp{There is no default}
+ \ifx\froot\empty \def\ans{}\fi
+\fi
+ \ifx\ans\empty \mes{*** \temp}
+\repeat}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pc}\begin{macro}{\pcpc}\begin{macro}{\spsp}
+% Now for some special commands to simplify outputting \% signs and double
+% spaces to the output file.
+% \begin{macrocode}
+{\catcode`\%=12
+ \gdef\pc{%}
+ \gdef\pcpc{%% }
+}
+\def\spsp{\space\space}
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\Now}
+% \changes{2.0}{1994 Jul 1}{Make \cmd{\today} output YYYY/MM/DD}
+% In order to date-and-time-stamp the resulting batch job file, we need
+% macros to produce the current date and time. (In \TeX{} there is no
+% |\today| command.)
+% \begin{macrocode}
+\newcount\hours
+\newcount\minutes
+\def\SetTime{\hours=\time
+ \global\divide\hours by 60
+ \minutes=\hours
+ \multiply\minutes by 60
+ \advance\minutes by-\time
+ \global\multiply\minutes by-1 }
+\SetTime
+\def\now{\number\hours:\ifnum\minutes<10 0\fi\number\minutes}
+\def\today{\number\year/\ifnum\month<10 0\fi\number\month
+ /\ifnum\day<10 0\fi\number\day}
+\def\Now{\today\space at \now}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Menu Macros}
+% \begin{macro}{\optdef}
+% \changes{4.0}{1999 July 20}{AO: save all of \cs{optdef}'s arguments}
+% For each menu, a general text is written with |\mes|, followed by a list
+% of available options. The information that will be needed is
+% \begin{enumerate}
+% \item the response letter to select the option,
+% \item the actual \dtx{} option name, as defined in the master
+% bibliographic style file,
+% \item a piece of text that is printed in the menu list, to be echoed
+% in confirmation of the choice, and also to be written to batch job file
+% as a comment,
+% \item a second piece of text that is only written to the menu, to enhance
+% the explanation.
+% \end{enumerate}
+% The true option name and the two pieces of text are stored as commands
+% prefixed by |\opt@|, |\txt@|, and |\cmt@| respectively, followed by the response
+% letter. Each option response letter is also stored in a list |\optlist|
+% which is initialized to empty. The commands
+% |\nxtopt| and |\rstopt| are used to extract the next and remaining
+% options from the list.
+% \begin{macrocode}
+\def\optdef#1#2#3#4{%
+ \expandafter\def\csname opt@#1\endcsname{#2}%
+ \expandafter\def\csname txt@#1\endcsname{#3}%
+ \expandafter\def\csname cmt@#1\endcsname{#4}%
+ \edef\optlist{\optlist#1,}%
+ \def\OptAns{#1}%
+ \mes{(#1) #3\space #4}%
+}
+\def\optlist{}
+\def\nxtopt#1,#2@@{#1} \def\rstopt#1,#2@@{#2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\getans}
+% \changes{2.1}{1994 Dec 29}{Allow for \texttt{optlist} option}
+% \changes{4.0}{1999 July 20}{AO: review \cs{optlist} forwards (FIFO)}
+% The user selection is read in with |\getans|, into the command |\ans|.
+% It then processes the response by first checking if there is an option
+% corresponding to it; if not, the response |\ans| is set to the default |*|.
+% If no star response exists, then it takes the last one entered as the default
+% response. It then calls |\wropt| to write the necessary \dtx{} option
+% and explanatory comment to the batch job file. Finally, it uses the
+% option list |\optlist| to clear all the |\opt@| commands. This last step
+% is necessary to avoid conflicts with previous menus: without it, a
+% response that is not in the current list might however exist from an
+% earlier menu.
+%
+% Note that prior to version~4.0 of this code, the |\optlist| was built
+% via head accretion and traversed from the head back, that is, in LIFO order.
+% As of version~4.0 it is processed in FIFO order.
+% This way, the comments in the |.dbj| file are in the same order as
+% the |\optdef| statements in the master file.
+% The flag character (to terminate parsing the |\optlist|) is now
+% a |%|$_{12}$, which cannot be entered as a response by the user, and is
+% appended to the list at the beginning of |\getans| processing.
+% \begin{macrocode}
+\newif\ifsw
+\def\getans{%
+ \edef\optlist{\optlist\pc,}%
+ \ask{\ans}{\spsp Select:}%
+ \expandafter\ifx\csname opt@\ans\endcsname\relax
+ \def\ans{*}%
+ \fi
+ \expandafter\ifx\csname opt@\ans\endcsname\relax
+ \let\ans\OptAns
+ \fi
+ \edef\ansx{\csname opt@\ans\endcsname}
+ \swtrue \loop
+ \edef\temp{\expandafter\nxtopt\optlist@@}%
+ \edef\optlist{\expandafter\rstopt\optlist@@}%
+ \if\temp\pc\swfalse\else
+ \if\temp\ans
+ \wropt\ans
+ \else
+ \ifoptlist\wrxopt\temp\fi
+ \fi
+ \expandafter\let\csname opt@\temp\endcsname\relax
+ \fi
+ \ifsw \repeat
+ \def\optlist{}%
+ \ifoptverbose
+ \wr{\pc------\string\ans=\ans (==\ansx)-------}%
+ \else
+ \ifoptlist
+ \wr{\pc--------------------}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% A special request from Frank Mittelbach asks if a list of unused options
+% cannot be added to the batch job file, to assist editing it by hand. In
+% this way, one knows what the \dtx{} options are immediately without having to
+% search for them in the \texttt{.mbs} documentation.
+%
+% This feature was added in version~2.1, but by means of a \dtx\ option, so it
+% could be turned off if necessary. Thus the extracted \theprog\texttt{.tex}
+% file produced either the full list or only the selected options. Here `full
+% list' means only those options that were offered. Any options that were
+% conditionally offered, depending on previous selections, could be missing.
+%
+% For version~4.0, Arthur Ogawa changed this so that the full option list is
+% switched on with the |\ifoptlist| flag, and not by an option at \dtx\
+% extraction time. He also added an |\ifoptverbose| flag to include even more
+% comments in the \texttt{.dtx} file. The user is asked at run time if s/he
+% wants to activate these features.
+%
+% Furthermore, one can use the |\beginoptiongroup| \dots |\endoptiongroup|
+% idiom to handle cases where options should be offered only contingent upon
+% some condition. By doing so, the unused options are still presented
+% as comments in the batch job file, along with a comment showing the
+% dependency and a matching comment showing the scope.
+%
+% Finally, there are still \dtx\ options \texttt{optlist} and
+% \texttt{optverbose} which produce \theprog\texttt{.tex} with the
+% corresponding flags already set, in which case the features are always
+% activated and the user interrogation is suppressed.
+%
+% \begin{macro}{\wropt}
+% \changes{2.1}{1994 Dec 29}{Change \cs{temp} to \cs{tempx}}
+% \changes{4.0}{1999 July 20}{AO: output the \cs{cmt@} part also;
+% build \cs{optlist} forwards (FIFO).}
+% The actual outputting of the option command to the batch job file is done
+% by |\wropt|. It tests if the option name is blank (a default in the
+% master bibliographic style, which need not be the menu default), writes
+% out the option name, if present, and adds the explanatory comment.
+% \begin{macrocode}
+\def\wropt#1{%
+ \edef\tempx{\csname opt@#1\endcsname}%
+ \if!\tempx!
+ \wr{\spsp\spsp\pc: (def)
+ \csname txt@#1\endcsname
+ \ifoptverbose\space\csname cmt@#1\endcsname\fi
+ }%
+ \else
+ \wr{\spsp\tempx,\pc:
+ \csname txt@#1\endcsname
+ \ifoptverbose\space\csname cmt@#1\endcsname\fi
+ }%
+ \fi
+ \mes{\spsp You have selected: \csname txt@#1\endcsname}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\wrxopt}
+% \changes{2.1}{1994 Dec 29}{Add macro}
+% \changes{4.0}{1999 July 20}{AO: output the \cs{cmt@} part also}
+% \changes{4.0}{1999 July 20}{AO: build \cs{optlist} forwards (FIFO)}
+% Writing the unused options to the batch job file is done with the |\wrxopt|
+% command, which is heavily controlled by the flags |\ifoptlist| and
+% |\ifoptverbose|.
+%
+% \begin{macrocode}
+\def\wrxopt#1{%
+ \edef\tempx{\csname opt@#1\endcsname}%
+ \if!\tempx!
+ \wr{\pc\space\spsp\pc: (def)
+ \csname txt@#1\endcsname
+ \ifoptverbose\space\csname cmt@#1\endcsname\fi
+ }%
+ \else
+ \wr{\pc\space\tempx,\pc:
+ \csname txt@#1\endcsname
+ \ifoptverbose\space\csname cmt@#1\endcsname\fi
+ }%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\beginoptiongroup}
+% \begin{macro}{\endoptiongroup}
+% One can structure the master file using the commands
+% |\beginoptiongroup| \dots |\endoptiongroup|.
+% The |\beginoptiongroup| command takes two arguments,
+% the prompt text and a control expression.
+% \begin{quote}
+% |\beginoptiongroup|\\
+% | {CITATION NUMBERS (if numerical references)}|\\
+% | {\ifnumerical*\fi}|\\
+% |\optdef{*}{}{arabic numbers}|\\
+% | {references are numbered 1, 2, 3, etc.}|\\
+% |\optdef{d}{d'nai}{d'nai numerals}|\\
+% | {references are numbered base-25}|\\
+% |\getans|\\
+% \emph{more commands and option groups}\\
+% |\endoptiongroup|\\
+% \end{quote}
+% In the above example, the master file has defined a |\newif| switch called
+% |\ifnumerical|, and now uses this flag to enable the processing encapsulated
+% within the option group: the control expression executes the active |*| command
+% if |\ifnumerical| is true. More complex expressions are possible; use plain
+% \TeX\ constructions to expand the star.
+%
+% The prompt text is output to the console and is also
+% recorded as a comment in the generated |.dbj| file.
+%
+% If the control expression executes the active |*|, then
+% the statements within the option group are executed as usual.
+% If false, then the |.dbj| file will simply contain a record of the options
+% that the user would have been able to chose from.
+% In effect, the interrogation never comes: all the options are unused and
+% are recorded (via |\wrxopt|) as comments.
+%
+% By this means, one can structure the |.dbj| file so that all options
+% are made visible, even if some of them would not be accessible because of
+% internal dependencies. The |.dbj| file will show as much detail about the menus
+% of the master file as is possible.
+%
+% To enable a common idiom, we have caused the value of |\ans| to persist
+% past the end of the option group. This means that one may safely test
+% the value of |\ans| after the |\endoptiongroup|.
+% If processing was turned off within
+% the option group, then the value of |\ans| is the untypeable |$|$_{12}$.
+%
+% If the second argument is either nil or is a star, then the option group
+% will be executed normally. Therefore you can employ this structure
+% for all the processing involving the commonly used idiom.
+% If the master file has statements like:
+% \begin{quote}
+% \begin{verbatim}
+%\mes{PROMPT:}
+%\optdef{*}{}{default}{extended comment}%
+%\optdef{a}{opt-a}{option a}{another extended comment}%
+%\optdef{b}{opt-b}{option b}{more extended comments}%
+%\getans
+%\if\ans a\whatever\fi
+% \end{verbatim}
+% \end{quote}
+% they should be converted to:
+% \begin{quote}
+% \begin{verbatim}
+%\beginoptiongroup{PROMPT:}{}
+%\optdef{*}{}{default}{extended comment}%
+%\optdef{a}{opt-a}{option a}{another extended comment}%
+%\optdef{b}{opt-b}{option b}{more extended comments}%
+%\getans
+%\endoptiongroup
+%\if\ans a\whatever\fi
+% \end{verbatim}
+% \end{quote}
+% The benefit of this syntax is a single markup for all interrogations
+% and a consistent appearance in the generated file.
+% \begin{macrocode}
+\def\beginoptiongroup#1{\begingroup\activatestar\OGcontinue{#1}}%
+\def\OGcontinue#1#2{%
+ \endgroup
+ \begingroup
+ \let\OGswitch\secondoftwo\def\tempa{#2}%
+ \ifx\tempa\empty\expandafter\firstoftwo\else\expandafter\secondoftwo\fi
+ {%
+ \activestar
+ }{%
+ \tempa
+ }%
+ \OGswitch{}{%
+ \let\wropt\wrxopt
+ \let\ask\nilans
+ \def\mes##1{}%
+ }%
+ \def\OGmessage{#1}%
+ \umes{\ifoptverbose<<\fi\OGmessage}%
+}
+\def\endoptiongroup{%
+ \ifoptverbose\umes{>>\OGmessage}\fi
+ \aftergroup\let\aftergroup\ans\expandafter
+ \endgroup
+ \ans
+}
+\def\activestar{\let\OGswitch\firstoftwo}
+\def\activatestar{\catcode`\*13\relax}
+{\activatestar\gdef*{\activestar}}
+\def\firstoftwo#1#2{#1}
+\def\secondoftwo#1#2{#2}
+{\catcode`\$=12\gdef\nilans#1#2{\def\ans{$}}}
+% \end{macrocode}
+%
+% For more examples of using option groups, see the file \texttt{merlin.mbs}.
+% \end{macro}\end{macro}
+%
+%
+% \subsection{Initial Messages}
+% The program can now start working. It first introduces itself and asks if
+% the user wants an explanation of how the menus work.
+% \begin{macrocode}
+\mes{***********************************^^J%
+ * This is Make Bibliography Style *^^J%
+ ***********************************^^J%
+ It makes up a docstrip batch job to produce^^J%
+ a customized .bst file for running with BibTeX}
+
+\ask{\yn}{Do you want a description of the usage? (NO)}
+
+\if!\yn!\else\if\yn n\else\if\yn N\else
+\mes{In the interactive dialogue that follows,^^J%
+ you will be presented with a series of menus.^^J%
+ In each case, one answer is the default, marked as (*),^^J%
+ and a mere carriage-return is sufficient to select it.^^J%
+ (If there is no * choice, then the default is the last choice.)^^J%
+ For the other choices, a letter is indicated^^J%
+ in brackets for selecting that option. If you select^^J%
+ a letter not in the list, default is taken.^^J^^J%
+ The final output is a file containing a batch job^^J%
+ which may be (La)TeXed to produce the desired BibTeX^^J%
+ bibliography style file. The batch job may be edited^^J%
+ to make minor changes, rather than running this program^^J%
+ once again.}
+\fi\fi\fi
+% \end{macrocode}
+%
+% Ask for the name of the master bibliographic style file,
+% suggesting a default name. Test if the file exist (argument \texttt{i}).
+% The name of the master file is split up into root and extension.
+% \changes{3.0}{1995 Mar 15}{Default master file now \texttt{merlin.mbs}}
+% \begin{macrocode}
+\MBaskfile{^^JEnter the name of the MASTER file}(merlin.mbs)i\mfile
+\let\mroot=\froot
+\let\mext=\fext
+% \end{macrocode}
+%
+% Originally, I intended the menu information to be in an \texttt{.opt}
+% file, but this is dangerous: that file may not be consistent with the
+% master. So now, issue a warning if an \texttt{.opt} file exists,
+% substituting it only if explicitly requested. (This is useful for me
+% when testing changes to \theprog{} and I only want a short menu.)
+% \begin{macrocode}
+\edef\temp{\mroot.opt}
+\openin\infile\temp\relax
+\let\mnext=\mext
+\ifeof\infile\else
+ \ask{\yn}{** Warning: a file `\temp' also exists^^J
+ \spsp Shall I read it for the menu information? (NO)^^J
+ \spsp (Answer `yes' only if you really know what you are doing)}
+\if\yn y\def\mnext{opt}\else\if\yn Y\def\mnext{opt}\fi\fi
+\mes{Menu information read from `\mroot.\mnext'}
+\fi
+\closein\infile
+% \end{macrocode}
+%
+% Next, the name of the output \texttt{.bst} file is asked for. Here there is
+% to be no default for the root part, although the extension defaults to
+% \texttt{.bst}.
+% \begin{macrocode}
+\MBaskfile{^^JName of the final OUTPUT .bst file?}(.bst)o\ofile
+\let\oroot=\froot
+\let\oext=\fext
+% \end{macrocode}
+%
+% A comment line of text is asked for. This will go into the preamble of
+% the final \texttt{.bst} file and should describe the nature of the
+% bibliographic style, i.e., for which journal(s) it is meant to apply.
+% \begin{macrocode}
+\ask{\ans}{^^JGive a comment line to include in the style file.^^J%
+ Something like for which journals it is applicable.}
+% \end{macrocode}
+%
+% \changes{1.1}{1994 May 25}{The \dtx{} driver has extension \texttt{.dbj}
+% instead of \texttt{.drv}}
+% The output batch job file is to have the same root name as the output
+% file, but with the extension \texttt{.dbj}, for \emph{\dtx{} batch job}.
+% This file is opened and the initial contents are written.
+% \begin{macrocode}
+\immediate\openout\outfile\oroot.dbj
+\wr{\pcpc Driver file to produce \oroot.\oext\space from \mroot.\mext}
+\wr{\pcpc Generated with \filename, version \fileversion\space (\filedate)}
+\wr{\pcpc Produced on \Now}
+\wr{\pcpc}
+\wr{\string\input\space docstrip}
+\wr{}
+\wr{\string\preamble}
+\wr{----------------------------------------}
+\wr{*** \ans\space ***}
+\wr{}
+\wr{\string\endpreamble}
+\wr{}
+\wr{\string\postamble}
+\wr{End of customized bst file}
+\wr{\string\endpostamble}
+\wr{}
+\wr{\string\keepsilent}
+\wr{}
+\wr{\string\askforoverwritefalse}
+% \end{macrocode}
+% \changes{3.0}{1995 Feb 5}{Options from master file written to control
+% sequence \cs{MBopts} instead of directly into \cs{generateFile}}
+% The options will be written to the output file during the interrogation
+% when the master file is input. These options are stored in |\MBopts|.
+%
+% Note: it is necessary to change the catagory codes of |{| and |}|
+% temporarily, and to find substitutes, so that mismatched curly braces
+% could be included in the output text. The same thing is done again at the
+% end to close the braces finally. This is done with |\MBswitch|.
+% \begin{macrocode}
+\begingroup\MBswitch
+\wr(\string\def\string\MBopts{\string\from{\mroot.\mext}{\pc)
+\endgroup
+% \end{macrocode}
+%
+% Now each selected option is written on a single line.
+%
+% \subsection{The Interrogation}
+% \changes{2.1}{1995 Jan 2}{Get menu info from master file, not \texttt{.opt}
+% file.}
+% The menu information is read in from the master file, or from a file
+% with extension \texttt{.opt}, but only if one has explicitly requested
+% this. (This is expert stuff; the \texttt{.opt} files should be avoided
+% since they might not be up-to-date. Previously they were the default,
+% but this has been changed in version~2.1 to avoid confusion.)
+% \begin{macrocode}
+\newif\ifoptlist
+%<optlist|optverbose>\optlisttrue
+\ifoptlist\else
+ \ask\yn{Do you want the unused option lines^^J%
+ \spsp to appear as comments in the output? (NO)}
+ \if!\yn!\else\if\yn n\else\if\yn N\else\optlisttrue\fi\fi\fi
+\fi
+\newif\ifoptverbose
+%<optverbose>\optverbosetrue
+\ifoptlist
+ \ifoptverbose\else
+ \ask\yn{Do you want verbose comments? (NO)}
+ \if!\yn!\else\if\yn n\else\if\yn N\else\optverbosetrue\fi\fi\fi
+ \fi
+\fi
+\edef\temp{\mroot.\mnext}
+\let\endoptions=\endinput
+\input\temp
+% \end{macrocode}
+% Note that it is necessary to equate |\endoptions| to |\endinput| in
+% case the master file is read in. An |\endinput| command in the master
+% file would interfere with the \dtx{} operation, but this indirect
+% method gets around that problem.
+%
+%
+% \section{Closing the Output File}
+% The output file is closed by writing the final line that closes the
+% braces that were opened at the beginning. To this end, the catagory codes
+% of |{| and |}| must be temporarily altered, as before.
+% \begin{macrocode}
+\begingroup\MBswitch
+\wr(\spsp}})
+\endgroup
+% \end{macrocode}
+%
+% Now write the line that processes the options stored in |\MBopts|.
+% The batch job file is finished and may be closed.
+% \begin{macrocode}
+\wr{\string\generate{\string\file{\oroot.\oext}{\string\MBopts}}}
+\wr{\string\endbatchfile}
+
+\immediate\closeout\outfile
+\mes{^^JFinished!!^^J%
+ Batch job written to file `\oroot.dbj'}
+% \end{macrocode}
+%
+% The batch job may now be run. It is only necessary to input the file.
+% However, the inputting should not occur with a group or within an |\if|
+% \dots\ |\fi| clause. Furthermore, under \LaTeX{}, the |\end| command causes
+% problems, because it has been redefined; the command |\@@end| contains the
+% original |\end|.
+% \begin{macrocode}
+\def\ofile{\oroot.dbj}
+\ask{\yn}{Shall I now run this batch job? (NO)}
+\def\temp{\relax}
+\if!\yn!\else\if\yn n\else\if\yn N\else
+\def\temp{\input\ofile}\fi\fi\fi
+{\catcode`\@=11 \ifx\@@end\undefined\else
+ \global\let\end=\@@end\fi}
+\temp
+\end
+%</program>
+% \end{macrocode}
+%
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/makebst.ins b/macros/latex/contrib/custom-bib/makebst.ins
new file mode 100644
index 0000000000..29e920d34f
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/makebst.ins
@@ -0,0 +1,62 @@
+%% LaTeX2e file `makebstx.ins'
+%% generated by the `filecontents' environment
+%% from source `makebst' on 2003/09/08.
+%%
+% Simply TeX or LaTeX this file to extract various files from
+% the source file `makebst.dtx'
+
+% This installation file works with docstrip 2.4 or later.
+
+\input docstrip
+
+\preamble
+=============================================
+IMPORTANT NOTICE:
+This is a generated file.
+
+It is subject to the same copyright conditions (see below)
+as in the original file: \inFileName.
+It may not be distributed without \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
+\askforoverwritefalse
+
+\generate{\file{makebst.tex}{\from{makebst.dtx}{program,%
+% Three variants on makebst.tex; select following options.
+% 1. the .dbj file contains by default only the list of selected options
+% (Select none of the following)
+% 2. the .dbj file contains by default a list of all offered options,
+% with the non-selected ones commented out, add next option.
+ optlist,%
+% 3. as above but with full comments added for each option, add next option.
+% optverbose%
+}}}
+
+\preamble
+============================================
+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
+\postamble
+
+End of documentation driver file.
+\endpostamble
+
+\generate{\file{makebst.drv}{\from{makebst.dtx}{driver}}}
+\endbatchfile
+
+\obeyspaces
+\Msg{******************************************}%
+\Msg{* For documentation, process makebst.dtx *}%
+\Msg{* or the driver file makebst.drv *}%
+\Msg{******************************************}
diff --git a/macros/latex/contrib/custom-bib/makebst.pdf b/macros/latex/contrib/custom-bib/makebst.pdf
new file mode 100644
index 0000000000..d30f6c1308
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/makebst.pdf
Binary files differ
diff --git a/macros/latex/contrib/custom-bib/makebst.tex b/macros/latex/contrib/custom-bib/makebst.tex
new file mode 100644
index 0000000000..c5ad0c1065
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/makebst.tex
@@ -0,0 +1,310 @@
+%%
+%% This is file `makebst.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% makebst.dtx (with options: `program,optlist,')
+%% =============================================
+%% IMPORTANT NOTICE:
+%% This is a generated file.
+%%
+%% It is subject to the same copyright conditions (see below)
+%% as in the original file: makebst.dtx.
+%% It may not be distributed without makebst.dtx.
+%%
+%% Full documentation can be obtained by LaTeXing that original file.
+%% Only a few abbreviated comments remain here to describe the usage.
+%% =============================================
+%% Copyright 1993-2003 Patrick W Daly
+%% Max-Planck-Institut f\"ur Sonnensystemforschung
+%% Max-Planck-Str. 2
+%% D-37191 Katlenburg-Lindau
+%% Germany
+%% E-mail: daly@mps.mpg.de
+%%
+%% With additions by Arthur Ogawa
+%% E-mai: ogawa@teleport.com
+%%
+%% 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.
+%% -------------------------------------------------
+\def\ProvidesFile#1 [#2 #3 #4]{\def\filename{#1}%
+ \def\fileversion{#3}\def\filedate{#2}}
+ \ProvidesFile{makebst}
+ [2003/09/08 4.1 (PWD, AO)]
+ % This file is to be run under TeX (or even LaTeX)
+ % It interactively asks questions about the bibliographic style file
+ % that you want to produce. When it is finished, it writes a docstrip
+ % driver file that produces that .bst file from the generic .mbs that
+ % you specified; optionally, it will call the docstrip run immediately.
+ % For details, read the documentation in the source file makebst.dtx.
+ %--------------------------------------------------------------------
+\newwrite\outfile
+\newread\ttyin
+\newread\infile
+\newwrite\ttyout
+\def\mes{\immediate\write\ttyout}
+\def\wr#1{\immediate\write\outfile{#1}}
+\def\umes#1{\mes{^^J#1}\wr{\pc#1}}%
+\newlinechar=`\^^J
+\def\MBswitch{\catcode`\{=12 \catcode`\}=12
+ \catcode`\(=1 \catcode`\)=2\relax}
+\def\defpar{\par}
+\def\remblk#1 @@{#1}
+\def\ask#1#2{\mes{#2}\read\ttyin to #1\ifx#1\defpar\def#1{}\else
+ \edef#1{\expandafter\remblk#1@@}\fi}
+\def\groot#1.#2@@{#1}
+\def\getroot#1{\expandafter\groot#1.@@}
+\def\gext#1.#2.#3@@{#2}
+\def\getext#1{\expandafter\gext#1..@@}
+\def\MBaskfile#1(#2.#3)#4#5{%
+\loop
+ \def\ans{#2.#3}
+\if!#2!
+ \if!#3!\ask{#5}{#1}\fi
+ \ask{#5}{#1 (default extension=#3)}\else
+ \ask{#5}{#1 (default=\ans)}
+\fi
+ \ifx#5\empty \edef#5{\ans}\fi
+ \edef\froot{\getroot#5}
+ \edef\fext{\getext#5}
+ \ifx\fext\empty \def\fext{#3}\fi
+ \edef#5{\froot.\fext}
+\if#4i
+ \def\temp{Cannot find file `#5'}
+ \openin\infile#5\relax
+ \ifeof\infile \def\ans{}\fi \closein\infile
+\else
+ \def\temp{There is no default}
+ \ifx\froot\empty \def\ans{}\fi
+\fi
+ \ifx\ans\empty \mes{*** \temp}
+\repeat}
+{\catcode`\%=12
+ \gdef\pc{%}
+ \gdef\pcpc{%% }
+}
+\def\spsp{\space\space}
+\newcount\hours
+\newcount\minutes
+\def\SetTime{\hours=\time
+ \global\divide\hours by 60
+ \minutes=\hours
+ \multiply\minutes by 60
+ \advance\minutes by-\time
+ \global\multiply\minutes by-1 }
+\SetTime
+\def\now{\number\hours:\ifnum\minutes<10 0\fi\number\minutes}
+\def\today{\number\year/\ifnum\month<10 0\fi\number\month
+ /\ifnum\day<10 0\fi\number\day}
+\def\Now{\today\space at \now}
+\def\optdef#1#2#3#4{%
+ \expandafter\def\csname opt@#1\endcsname{#2}%
+ \expandafter\def\csname txt@#1\endcsname{#3}%
+ \expandafter\def\csname cmt@#1\endcsname{#4}%
+ \edef\optlist{\optlist#1,}%
+ \def\OptAns{#1}%
+ \mes{(#1) #3\space #4}%
+}
+\def\optlist{}
+\def\nxtopt#1,#2@@{#1} \def\rstopt#1,#2@@{#2}
+\newif\ifsw
+\def\getans{%
+ \edef\optlist{\optlist\pc,}%
+ \ask{\ans}{\spsp Select:}%
+ \expandafter\ifx\csname opt@\ans\endcsname\relax
+ \def\ans{*}%
+ \fi
+ \expandafter\ifx\csname opt@\ans\endcsname\relax
+ \let\ans\OptAns
+ \fi
+ \edef\ansx{\csname opt@\ans\endcsname}
+ \swtrue \loop
+ \edef\temp{\expandafter\nxtopt\optlist@@}%
+ \edef\optlist{\expandafter\rstopt\optlist@@}%
+ \if\temp\pc\swfalse\else
+ \if\temp\ans
+ \wropt\ans
+ \else
+ \ifoptlist\wrxopt\temp\fi
+ \fi
+ \expandafter\let\csname opt@\temp\endcsname\relax
+ \fi
+ \ifsw \repeat
+ \def\optlist{}%
+ \ifoptverbose
+ \wr{\pc------\string\ans=\ans (==\ansx)-------}%
+ \else
+ \ifoptlist
+ \wr{\pc--------------------}%
+ \fi
+ \fi
+}
+\def\wropt#1{%
+ \edef\tempx{\csname opt@#1\endcsname}%
+ \if!\tempx!
+ \wr{\spsp\spsp\pc: (def)
+ \csname txt@#1\endcsname
+ \ifoptverbose\space\csname cmt@#1\endcsname\fi
+ }%
+ \else
+ \wr{\spsp\tempx,\pc:
+ \csname txt@#1\endcsname
+ \ifoptverbose\space\csname cmt@#1\endcsname\fi
+ }%
+ \fi
+ \mes{\spsp You have selected: \csname txt@#1\endcsname}%
+}
+\def\wrxopt#1{%
+ \edef\tempx{\csname opt@#1\endcsname}%
+ \if!\tempx!
+ \wr{\pc\space\spsp\pc: (def)
+ \csname txt@#1\endcsname
+ \ifoptverbose\space\csname cmt@#1\endcsname\fi
+ }%
+ \else
+ \wr{\pc\space\tempx,\pc:
+ \csname txt@#1\endcsname
+ \ifoptverbose\space\csname cmt@#1\endcsname\fi
+ }%
+ \fi
+}
+\def\beginoptiongroup#1{\begingroup\activatestar\OGcontinue{#1}}%
+\def\OGcontinue#1#2{%
+ \endgroup
+ \begingroup
+ \let\OGswitch\secondoftwo\def\tempa{#2}%
+ \ifx\tempa\empty\expandafter\firstoftwo\else\expandafter\secondoftwo\fi
+ {%
+ \activestar
+ }{%
+ \tempa
+ }%
+ \OGswitch{}{%
+ \let\wropt\wrxopt
+ \let\ask\nilans
+ \def\mes##1{}%
+ }%
+ \def\OGmessage{#1}%
+ \umes{\ifoptverbose<<\fi\OGmessage}%
+}
+\def\endoptiongroup{%
+ \ifoptverbose\umes{>>\OGmessage}\fi
+ \aftergroup\let\aftergroup\ans\expandafter
+ \endgroup
+ \ans
+}
+\def\activestar{\let\OGswitch\firstoftwo}
+\def\activatestar{\catcode`\*13\relax}
+{\activatestar\gdef*{\activestar}}
+\def\firstoftwo#1#2{#1}
+\def\secondoftwo#1#2{#2}
+{\catcode`\$=12\gdef\nilans#1#2{\def\ans{$}}}
+\mes{***********************************^^J%
+ * This is Make Bibliography Style *^^J%
+ ***********************************^^J%
+ It makes up a docstrip batch job to produce^^J%
+ a customized .bst file for running with BibTeX}
+
+\ask{\yn}{Do you want a description of the usage? (NO)}
+
+\if!\yn!\else\if\yn n\else\if\yn N\else
+\mes{In the interactive dialogue that follows,^^J%
+ you will be presented with a series of menus.^^J%
+ In each case, one answer is the default, marked as (*),^^J%
+ and a mere carriage-return is sufficient to select it.^^J%
+ (If there is no * choice, then the default is the last choice.)^^J%
+ For the other choices, a letter is indicated^^J%
+ in brackets for selecting that option. If you select^^J%
+ a letter not in the list, default is taken.^^J^^J%
+ The final output is a file containing a batch job^^J%
+ which may be (La)TeXed to produce the desired BibTeX^^J%
+ bibliography style file. The batch job may be edited^^J%
+ to make minor changes, rather than running this program^^J%
+ once again.}
+\fi\fi\fi
+\MBaskfile{^^JEnter the name of the MASTER file}(merlin.mbs)i\mfile
+\let\mroot=\froot
+\let\mext=\fext
+\edef\temp{\mroot.opt}
+\openin\infile\temp\relax
+\let\mnext=\mext
+\ifeof\infile\else
+ \ask{\yn}{** Warning: a file `\temp' also exists^^J
+ \spsp Shall I read it for the menu information? (NO)^^J
+ \spsp (Answer `yes' only if you really know what you are doing)}
+\if\yn y\def\mnext{opt}\else\if\yn Y\def\mnext{opt}\fi\fi
+\mes{Menu information read from `\mroot.\mnext'}
+\fi
+\closein\infile
+\MBaskfile{^^JName of the final OUTPUT .bst file?}(.bst)o\ofile
+\let\oroot=\froot
+\let\oext=\fext
+\ask{\ans}{^^JGive a comment line to include in the style file.^^J%
+ Something like for which journals it is applicable.}
+\immediate\openout\outfile\oroot.dbj
+\wr{\pcpc Driver file to produce \oroot.\oext\space from \mroot.\mext}
+\wr{\pcpc Generated with \filename, version \fileversion\space (\filedate)}
+\wr{\pcpc Produced on \Now}
+\wr{\pcpc}
+\wr{\string\input\space docstrip}
+\wr{}
+\wr{\string\preamble}
+\wr{----------------------------------------}
+\wr{*** \ans\space ***}
+\wr{}
+\wr{\string\endpreamble}
+\wr{}
+\wr{\string\postamble}
+\wr{End of customized bst file}
+\wr{\string\endpostamble}
+\wr{}
+\wr{\string\keepsilent}
+\wr{}
+\wr{\string\askforoverwritefalse}
+\begingroup\MBswitch
+\wr(\string\def\string\MBopts{\string\from{\mroot.\mext}{\pc)
+\endgroup
+\newif\ifoptlist
+\optlisttrue
+\ifoptlist\else
+ \ask\yn{Do you want the unused option lines^^J%
+ \spsp to appear as comments in the output? (NO)}
+ \if!\yn!\else\if\yn n\else\if\yn N\else\optlisttrue\fi\fi\fi
+\fi
+\newif\ifoptverbose
+\ifoptlist
+ \ifoptverbose\else
+ \ask\yn{Do you want verbose comments? (NO)}
+ \if!\yn!\else\if\yn n\else\if\yn N\else\optverbosetrue\fi\fi\fi
+ \fi
+\fi
+\edef\temp{\mroot.\mnext}
+\let\endoptions=\endinput
+\input\temp
+\begingroup\MBswitch
+\wr(\spsp}})
+\endgroup
+\wr{\string\generate{\string\file{\oroot.\oext}{\string\MBopts}}}
+\wr{\string\endbatchfile}
+
+\immediate\closeout\outfile
+\mes{^^JFinished!!^^J%
+ Batch job written to file `\oroot.dbj'}
+\def\ofile{\oroot.dbj}
+\ask{\yn}{Shall I now run this batch job? (NO)}
+\def\temp{\relax}
+\if!\yn!\else\if\yn n\else\if\yn N\else
+\def\temp{\input\ofile}\fi\fi\fi
+{\catcode`\@=11 \ifx\@@end\undefined\else
+ \global\let\end=\@@end\fi}
+\temp
+\end
+%% <<<<< End of generated file <<<<<<
+%%
+%% End of file `makebst.tex'.
diff --git a/macros/latex/contrib/custom-bib/merlin.mbs b/macros/latex/contrib/custom-bib/merlin.mbs
new file mode 100644
index 0000000000..e60196263e
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/merlin.mbs
@@ -0,0 +1,9446 @@
+%\iffalse THIS IS A META COMMENT -*- TeX -*- -*- DTX -*-
+% File: merlin.mbs
+%% Copyright 1994-2011 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% Master Bibliography Style
+% for customizing bibliographic style files (.bst)
+% with the help of docstrip.tex
+% and the auxiliary program makebst.tex
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file supports numerical and author-year citation styles
+% for natbib, harvard, astronom, authordate, apalike
+% It also supports languages other than English
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+% (Alternatively, extract documentation driver with option `driver')
+%====================================================================
+%
+%<*!tail>
+% (The following notice appears in bst files generated from this file)
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated 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.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+%\fi
+ % \ProvidesFile{merlin.mbs}[2011/11/18 4.33 (PWD, AO, DPC)]
+%\iffalse
+%</!tail>
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{merlin.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \CheckSum{517}
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1993 Aug 16}{Initial version}
+% \changes{2.0}{1994 Jan 31}{Add multilingual capabilities}
+% \changes{2.1--2.5}{1995 May 2}{Changes to \texttt{babel.mbs} parallel 1.3--1.7
+% in \texttt{genbst.mbs}}
+% \changes{1.3(2.1)}{1994 Jul 1}{Change documentation to \LaTeXe}
+% \changes{1.3(2.1)a}{1994 Sep 1}{Alter wording of article title capitalization
+% choice}
+% \changes{1.4(2.2)}{1994 Sep 5}{Add full author name possibilities}
+% \changes{1.4(2.2)}{1994 Sep 5}{Fix up some punctuations}
+% \changes{1.4(2.2)a}{1994 Sep 7}{Add possibility to put titles in quotes}
+% \changes{1.5(2.3)}{1994 Sep 15}{Accommodate new \texttt{harvard.sty}}
+% \changes{1.5(2.3)}{1994 Sep 15}{Add full names for \texttt{natbib} v5.3}
+% \changes{1.5(2.3)a}{1994 Oct 11}{Add option so year can contain any text}
+% \changes{1.5(2.3)b}{1995 Jan 18}{Allow edited by to be in parentheses}
+% \changes{1.5(2.3)b}{1995 Jan 18}{Allow (year) to have no punctuation
+% following}
+% \changes{1.5(2.3)c}{1995 Jan 20}{Journal volume numbers with more choice}
+% \changes{1.6(2.4)}{1995 Feb 2}{Date with no punctuation preceding it}
+% \changes{1.6(2.4)}{1995 Feb 2}{Editor names can be reversed like authors'}
+% \changes{1.6(2.4)}{1995 Feb 2}{Can abbreviate `edited by' to `ed(s).'}
+% \changes{1.6(2.4)}{1995 Feb 2}{Released version}
+% \changes{1.7(2.5)}{1995 Feb 9}{Add \texttt{seq-key} option}
+% \changes{3.0}{1995 Mar 15}{Becomes \texttt{merlin.mbs}, with language
+% support in additional files}
+% \changes{3.0}{1995 Feb 27}{Allow full author names to be reversed}
+% \changes{3.0}{1995 Mar 1}{Add \texttt{isbn} field option}
+% \changes{3.0}{1995 Mar 3}{Citation names can be bold or small caps}
+% \changes{3.0}{1995 Mar 8}{Colon and space may follow year}
+% \changes{3.0}{1995 Mar 15}{Names can be reversed, dotless intials}
+% \changes{3.0}{1995 Mar 17}{Volume, number can be followed by semi-colon}
+% \changes{3.0}{1995 Mar 20}{Allow word editor or ed to be in parentheses}
+% \changes{3.0}{1995 Mar 20}{Abbreviated journal names can have dots removed}
+% \changes{3.1}{1995 May 4}{Fix `edited by' so it is not abbreviated
+% automatically with `editor'}
+% \changes{3.1}{1995 May 6}{Re-do head/tail options to allow easy update of
+% older \texttt{.dbj} files}
+% \changes{3.2}{1995 May 19}{Minimum number of authors can be up to 6, not 5}
+% \changes{3.2}{1995 May 19}{Allow date as part of journal spec., for medical
+% journals}
+% \changes{3.2}{1995 May 19}{Suppress `pages' and `pp'}
+% \changes{3.2}{1995 May 19}{Allow date to be `1994 Jul', with or without dot}
+% \changes{3.2}{1995 Jun 7}{Authors as Jones C.T.}
+% \changes{3.2}{1995 Jun 16}{Sort without \emph{von} part}
+% \changes{3.2}{1995 Jul 31}{Release as version 3.2}
+% \changes{3.3}{1995 Aug 7}{Extra labels put in braces so they are treated
+% as one unit by natbib}
+% \changes{3.3}{1995 Aug 7}{Publisher's address can precede name}
+% \changes{3.3}{1995 Sep 4}{Add full authors only if different from short list}
+% \changes{3.4}{1995 Sep 5}{Add number of references as argument to
+% \texttt{thebibliography} environment}
+% \changes{3.4}{1995 Sep 28}{Fix placement of \texttt{bolden} in
+% \texttt{format.vol.num.pages}}
+% \changes{3.4}{1995 Sep 28}{Add possibility of date between volume and pages}
+% \changes{3.4}{1995 Sep 28}{Word `and' can be in normal font in citations}
+% \changes{3.5}{1995 Oct 4}{Tech Reports to have titles like books}
+% \changes{3.5}{1995 Oct 9}{Delimit \texttt{\char`\\harvardyearright} properly}
+% \changes{3.5}{1995 Oct 9}{Add option to sort by year (numerical only)}
+% \changes{3.5}{1995 Oct 12}{Allow multiple journal-name files}
+% \changes{3.5}{1995 Oct 16}{Allow months in dates even for author-year}
+% \changes{3.5}{1995 Oct 24}{Fix sorting bug for limited number of authors}
+% \changes{3.5}{1995 Oct 30}{Add \texttt{named} format for author--year cites}
+% \changes{3.6}{1995 Nov 2}{Blocks can be separated by semi-colons}
+% \changes{3.6}{1995 Nov 23}{Journal names in normal font}
+% \changes{3.6}{1995 Nov 23}{Volume subnumber added to pages}
+% \changes{3.6}{1995 Nov 24}{Book pages in parentheses}
+% \changes{3.6}{1995 Dec 7}{Put Jr at end for AGU author style}
+% \changes{3.6}{1995 Dec 7}{Put `and' in same font in list and citation}
+% \changes{3.6}{1996 Jan 30}{Allow `et al' to be in normal font}
+% \changes{3.6a}{1996 Feb 1}{Fix bugs with \texttt{xand} option}
+% \changes{3.7}{1996 Feb 2}{Fix small caps with NFSS}
+% \changes{3.7}{1996 Feb 5}{Fix clash of \texttt{emphasize} and
+% \texttt{purify\$}}
+% \changes{3.8}{1996 Feb 29}{Add \texttt{alpha}-type style}
+% \changes{3.8}{1996 Mar 1}{Style alpha is never unsorted}
+% \changes{3.8}{1996 Mar 12}{Allow blanks between blocks}
+% \changes{3.8}{1996 Mar 12}{Publisher in parentheses}
+% \changes{3.8}{1996 Mar 15}{Allow author-year to be sorted by year}
+% \changes{3.8}{1996 Mar 16}{Cited `and' resets only one attribute}
+% \changes{3.8}{1996 Mar 19}{Allow date to be between volume and number}
+% \changes{3.81}{1996 Jun 17}{Add \texttt{\char`\\natexlab} for \texttt{natbib} 6.3}
+% \changes{3.81}{1996 Jun 19}{Fix coding for adding `page' to journals}
+% \changes{3.81}{1996 Jun 19}{Add `volume' to journals}
+% \changes{3.81}{1996 Jun 19}{Remove word `in'}
+% \changes{3.81}{1996 Jun 19}{Place publisher before chapter/pages}
+% \changes{3.81}{1996 Jun 25}{Allow period after date}
+% \changes{3.81}{1996 Jun 26}{Commas between blocks, except for article titles
+% where period comes}
+% \changes{3.81}{1996 Sep 12}{Allow comma before date}
+% \changes{3.81}{1996 Sep 13}{Reorganize incollection organization and
+% publisher}
+% \changes{3.81}{1996 Sep 13}{Allow edition to come before publisher}
+% \changes{3.81}{1996 Sep 16}{Allow author--year to be in citation order}
+% \changes{3.81}{1996 Sep 16}{Publisher, address, date can all be in
+% parentheses}
+% \changes{3.81}{1996 Sep 18}{Remove extraneous hyphen before
+% \texttt{\char`\\getans}}
+% \changes{3.82}{1996 Nov 15}{Allow pages at end before notes}
+% \changes{3.82}{1996 Nov 15}{Fix bug with quoted titles when title missing}
+% \changes{3.82}{1996 Dec 16}{Fix bug that put comma before publisher in
+% parentheses}
+% \changes{3.82}{1996 Dec 16}{Allow AGU author style with full names}
+% \changes{3.83}{1997 Feb 5}{Allow dash for repeated authors, periods
+% before notes}
+% \changes{3.83}{1997 Apr 25}{Change case of first note word if mid-sentence}
+% \changes{3.84}{1997 Sep 16}{Option to break long page numbers}
+% \changes{3.84}{1997 Oct 20}{Option for titles in guillemets}
+% \changes{3.84}{1997 Oct 20}{Option to use underlining for emphasis}
+% \changes{3.84}{1997 Oct 30}{Reorganize options for year in journal spec}
+% \changes{3.84}{1997 Oct 30}{Multiple options in menu}
+% \changes{3.85}{1998 Feb 10}{Fonts for names: can exclude first names,
+% use-defined font allowed, improved coding for `and' and `et~al.'}
+% \changes{3.86}{1998 Feb 25}{Use \texttt{format.date} consistently in place
+% of \texttt{year} alone}
+% \changes{3.86}{1998 Feb 25}{Suppress ISBN number when certain crossrefs
+% are present}
+% \changes{3.86}{1998 Feb 25}{Add option for comma between year and pages}
+% \changes{3.86}{1998 Apr 20}{Bug with minimum 6 authors corrected}
+% \changes{3.87}{1998 Jul 23}{Add \texttt{url} field for all styles}
+% \changes{3.87}{1998 Jul 23}{Suppress months in numerical mode}
+% \changes{3.87}{1998 Jul 23}{Author limitation now 99}
+% \changes{3.87}{1998 Jul 23}{Add \texttt{annote} field and annotation}
+% \changes{3.87}{1998 Aug 17}{Add \texttt{issn} field}
+% \changes{3.87}{1998 Aug 17}{Correct spelling of `guillimet'}
+% \changes{3.87}{1998 Aug 17}{Make \textsl{et~al.} a variable \texttt{bbl.etal}}
+% \changes{3.87}{1998 Aug 17}{Add \texttt{language} field}
+% \changes{3.87h}{1998 Oct 16}{Add html output possibilities}
+% \changes{3.88}{1998 Nov 27}{Option to suppress edition conversion in English}
+% \changes{3.88}{1998 Dec 2}{Conf. booktitles are upright if book titles are}
+% \changes{3.88}{1998 Dec 2}{Various extra options for book pages,
+% inproceedings, mainly for MPG Jahrbuch}
+% \changes{3.88}{1998 Jan 13}{For html, newblock just adds period, no new line}
+% \changes{3.88}{1999 Feb 1}{Do edition suppression properly}
+% \changes{3.88}{1999 Feb 26}{Fix font handling of names}
+% \changes{3.88}{1999 Feb 26}{Test for multipages for word `page(s)' in journals}
+% \changes{3.89}{1999 May 12}{Missing years may be left blank, not just ????}
+% \changes{3.89}{1999 May 12}{When key replaces author, leave year blank}
+% \changes{3.89d1}{1999 Jul 20}{AO: %Arthur Ogawa (ogawa@teleport.com)
+% Add new entries: collaboration, eid, eprint, numpages, per option
+% \texttt{revdata}}
+% \changes{3.89d1}{1999 Jul 20}{AO: Add reference component tags (\texttt{bibinfo}
+% and friends)}
+% \changes{4.00}{1999 Sept 17}{PWD: incorporate AO's changes with moderations}
+% \changes{4.00}{2000 Jan 21}{PWD: add \texttt{archive} field}
+% \changes{4.01}{2000 May 4}{PWD: Fix improper \texttt{change.case\$} and
+% \texttt{bibinfo.check} ordering}
+% \changes{4.02}{2000 June 27}{Fix bug with `in' with articles}
+% \changes{4.03}{2002 Jan 14}{PWD: add \texttt{seq-yrr} for reversed year ordering}
+% \changes{4.03}{2002 Jan 14}{PWD: add \texttt{thtit-x} to suppress thesis titles}
+% \changes{4.03}{2002 Jan 14}{PWD: add line to define \texttt{natexlab} in aux file for harvard}
+% \changes{4.03}{2002 Jan 14}{PWD: bug fix when both \texttt{pp-last} and \texttt{dt-jnl} given}
+% \changes{4.04}{2002 Sep 13}{PWD: add support for Slovene/Slovenian language}
+% \changes{4.05}{2002 Oct 21}{PWD: bug fix in \texttt{inproceedings} with
+% \texttt{pp-last} and \texttt{dt-beg}}
+% \changes{4.06}{2003 Apr 2}{PWD: add \texttt{nmd-2} and \texttt{nmd-3} for use with \texttt{nmdash}}
+% \changes{4.10}{2003 May 28}{PWD: add DOI}
+% \changes{4.10}{2003 June 3}{PWD: use \texttt{\protect\bslash providecommand}
+% instead of \TeX\ commands, but provide \texttt{noprov} option to undo it.}
+% \changes{4.10}{2003 June 3}{PWD: make \texttt{eid} available not just for Rev\TeX}
+% \changes{4.10}{2003 June 11}{PWD: add \texttt{pg-pre} for total book pages location}
+% \changes{4.11}{2003 June 23}{PWD: fix DOI to have no space after colon}
+% \changes{4.11}{2003 June 23}{PWD: add options \texttt{ser-vol} and \texttt{ser-ed}}
+% \changes{4.11a}{2003 Aug 19}{PWD: fix bug with \texttt{ser-ed} option}
+% \changes{4.12}{2003 Sep 8}{PWD: rename \texttt{noprov} to \texttt{plntx} for Plain \TeX\ compatibility}
+% \changes{4.12a}{2003 Nov 6}{PWD: fix bug in which comma separators go on wrong side; change was
+% originally made in \texttt{makebst} but not in \texttt{merlin}}
+% \changes{4.13}{2004 Feb 9}{PWD: fix some bugs in \texttt{inbook} and \texttt{incollection}}
+% \changes{4.13}{2004 Feb 9}{PWD: add option \texttt{nm-rvcx}}
+% \changes{4.13}{2004 Feb 9}{PWD: add option \texttt{tit-col} for colon after titles}
+% \changes{4.14}{2005 Oct 17}{PWD: add option \texttt{nm-rvvc}, spaceless initials with comma}
+% \changes{4.14}{2005 Oct 17}{PWD: add option \texttt{etal-xc} to suppress comma before et al.}
+% \changes{4.15}{2006 Jan 4}{PWD: add option \texttt{pres} for conference talks, presentations}
+% \changes{4.16}{2006 Feb 15}{PWD: fix bug in \texttt{proceedings} that suppress number/series at times}
+% \changes{4.20}{2007 Apr 23}{PWD: add option to allow more than one author in cites before et al.}
+% \changes{4.20}{2007 Apr 24}{PWD: allow variable number of authors before truncating citation}
+% \changes{4.21}{2007 May 2}{PWD: reprogram \texttt{remove.dots} to retain dot accent}
+% \changes{4.22}{2007 Oct 10}{PWD: add code provided by Joseph Wright for 2-digit extra labels}
+% \changes{4.30}{2008 Aug 25}{PWD: fix bug in ordering with \texttt{seq-key} and truncated author lists}
+% \changes{4.30}{2008 Aug 25}{PWD: allow up to 6 authors with \texttt{mcite}}
+% \changes{4.30}{2008 Aug 27}{PWD: Fix bug for \texttt{nm-rvvc}, thanks to Ted Pavlic}
+% \changes{4.30}{2008 Aug 27}{PWD: Remove bibinfo encapsulation for DOI, treat like URL}
+% \changes{4.30}{2008 Aug 27}{PWD: Add option \texttt{url-doi} to make URL out of the DOI}
+% \changes{4.30}{2008 Oct 4}{PWD: Add option \texttt{xintls} to sort on surname only without initials}
+% \changes{4.31}{2011 Jan 10}{PWD: let the pre-date punctuation options \texttt{yr-com} etc. work with \texttt{harnm} too}
+% \changes{4.32}{2011 Mar 28}{PWD: Fix bug with \texttt{numser} in \texttt{proceedings}}
+% \changes{4.33}{2011 May 13}{PWD: Fix bug with \texttt{remove.dots} by declaring string \texttt{z}}
+% \changes{4.33}{2011 Nov 18}{PWD: Fix bug so that \texttt{pub-xc} works without \texttt{ay} too}
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly}{A General Master Bibliography Style}
+%
+% \title{{\bfseries A Master Bibliographic Style File}\\
+% for numerical, author--year, multilingual applications}
+%
+% \author{Patrick W. Daly}
+%
+% \GetFileInfo{merlin.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate
+% \thanks{Work on \texttt{custom-bib}~4.00 was supported by the
+% American Physical Society}}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% A problem facing users of \btx{} is that there is no standard for
+% formatting lists of references. Publishers and journals insist
+% on completely arbitrary placement of commas, colons, and ordering of
+% entries. Furthermore, author--year styles of citations are supported by
+% certain special \LaTeX{} packages, but each for only a very limited
+% number of bibliographic styles. Finally, most such style files are for
+% English only, and any adaptations to other languages must duplicate the
+% entire spectrum of such files.
+%
+% All of these obstacles are in principle easily overcome by simply
+% reprogramming \btx{} by means of an appropriate \emph{bibliographic style
+% file} (extension \texttt{.bst}). \btx{} is in fact extremely flexible;
+% unfortunately its programming language is very low-level, permitting only
+% the most basic of hacks for the normal user.
+%
+% The solution to this is a \emph{generic} or \emph{master bibliographic
+% style file} (extension \texttt{.mbs}) containing \dtx{} options for
+% alternative coding. By selecting the desired options, one can customize a
+% \texttt{.bst} file to one's needs.
+%
+% This file, \texttt{\filename}, is my latest version of a general-purpose
+% \texttt{.mbs} file to meet as many bibliographic needs as possible.
+% It was originally assembled from Oren Patashnik's standard files {\tt
+% plain.bst} and \texttt{unsrt.bst}, plus his non-standard file {\tt
+% apalike.bst}, a very basic author--year citation style.
+% It has since evolved extensively as I have added features found in
+% available \texttt{.bst} files, and those demanded by publishers or
+% suggested to me by many user/contributors.
+%
+% To produce a customized bibliographic style (\texttt{.bst}) file from this
+% master file, simply \TeX{} or \LaTeX{} the `program' \texttt{makebst.tex}.
+% When asked for the name of the master file, answer with
+% \begin{quote}\tt\filename\end{quote}
+% and then reply to the questions in the following menus. The last question
+% is whether you want to generate the \texttt{.bst} file right away.
+%
+% More details on this process and on the options available are to be found
+% in the rest of this article.
+%
+% \section{History of this File}
+%
+% Since the first release of this generic file, in November 1993, under the
+% name \texttt{genbst.mbs}, I have received innumerable
+% suggestions for additions, most of which I have tried to include. Often
+% this has resulted in reorganizing the coding, and adding new functions.
+% The resulting \texttt{.bst} files are now quite different from those of
+% Patashnik, although the underlying ideas are the same.
+%
+% A second version was released shortly afterwards that paralleled the first
+% one except that it included support for languages other than English.
+% That file was named \texttt{babel.mbs}, following the \texttt{babel}
+% system of Johannes Braams. Although I always viewed it as version 2 of
+% \texttt{genbst.mbs}, all additions to the one were also included in the
+% other. This of course was tedious and prone to error. I looked forward to
+% the day when \texttt{babel.mbs} would become the only supported version.
+% The reason I was reluctant to do that before was that the overhead per
+% language was fairly high, and I dreaded to think how large the file would
+% become when 20 or 30 languages were added.
+%
+% I then found a way to put the language definitions into separate files,
+% one per language. This means that new languages do not burden the basic
+% file, and that users need only keep those support files that might
+% interest him or her. New ones may also be made up locally by hacking an
+% existing language definition file. (The file \texttt{english.mbs} is
+% supplied only for this purpose.)
+%
+% For this reason, \texttt{\filename} was released as version~3 of
+% \texttt{genbst.mbs} and \texttt{babel.mbs}. In spite of the new name, it
+% should be regarded as their direct successor. Needless to say, this means
+% that the earlier two \texttt{.mbs} files will no longer be maintained.
+%
+% To include language support, all explicit English words like
+% \textsl{editor} and \textsl{chapter} have been replaced by functions
+% whose definitions may be altered in the resulting \texttt{.bst} file
+% (less desirable method) or which may be redefined by an external
+% language definition file (preferred method). Alternatively, one can select
+% the pseudo-language named \texttt{babel} which inserts \LaTeX{} commands
+% for the explicit words, the definitions of which must be
+% contained in a file called {\tt babelbst.tex}. Only the languages English
+% and \texttt{babel} are included internally to \texttt{\filename}; all
+% others are contained in external language definition files.
+%
+% Another new feature is the possibility of including a file containing
+% prestored shorthand designations for certain journal names. Such a file
+% is provided for physics journals, but others could be made up using this
+% one as a model. See Section~\ref{sec:jnames}.
+%
+% To take advantage of these external files, one must use
+% \texttt{makebst} version~3; \texttt{\filename} may still be used with
+% earlier versions, but without the external files.
+%
+% Version~4 arose out of a project by David Carlisle who created a variant
+% of \texttt{\filename} for REV\TeX\ and the American Physical Society with
+% the help of Mark Doyle of the APS. The main purpose was to add extra
+% fields (see page~\pageref{sec:revtex}) that were needed. Subsequently
+% Arthur Ogawa revised the code considerably, making it more rational,
+% fixing some bugs and adding some extra features.
+%
+% I was then asked to incorporate all these changes into the official
+% version of \texttt{\filename}. This required much debugging, since the
+% Ogawa's rationalization upset several of the delicate interplays between
+% various options. The result is version~4.0, the work on which has been
+% supported by the American Physical Society.
+%
+% Version~4.0 contains the REV\TeX\ extra fields and the
+% Carlisle-Doyle-Ogawa rewrites. An additional feature that derived from
+% Carlisle's work on REV\TeX\ is the tagging of the text entries in the
+% bibliography. This means the volume number is given as
+% |\bibinfo{volume}{5}|. Normally only the number 5 is printed, but another
+% program could use this to reconstruct the original database entries.
+%
+% Arthur Ogawa also added some features to \texttt{makebst} to provide a more
+% verbose protocol. As a result, version~4 of \texttt{\filename} can only be
+% used with version~4 of \texttt{makebst}. Older versions of \texttt{\filename}
+% will still function with the newer \texttt{makebst}. Also, \texttt{.dbj}
+% files created with older versions should still produce the same results with
+% \texttt{\filename}~4.
+%
+% \def\temp{merlin.mbs}\ifx\temp\filename
+% This file is now named after the legendary magician in the hope that it
+% can produce wonders by incanting the right magic formulas. However, one
+% should bear in mind that even Merlin was not omnipotent. It would be too
+% much to hope that all bibliographic wishes will be fulfilled quickly and
+% easily, but we shall try as best we can. Watch the wizardry at work!
+% \fi
+%
+% \section{About Master Bibliographic Style Files}
+%
+% For details about how master bibliography style files are to be
+% constructed, see the documentation on \texttt{makebst}. Here only a
+% rough overview is given.
+%
+% \subsection{The \dtx{} Program}
+% The \dtx{} program, written by Frank Mittelbach, is now a fundamental
+% part of the \LaTeXe{} installation. Its original purpose is to remove
+% comment lines from documented files, but has the secondary function of
+% selecting alternative lines of coding.
+%
+% A master \btx{} bibliographic style file is one that, when processed by
+% \dtx{} with selected options, produces a regular \btx{} \texttt{.bst}
+% file with the desired features.
+%
+% In this sense, \dtx{} functions something like a C preprocessor. In fact,
+% Oren Patashnik's original \texttt{.bst} files were all produced from a single
+% source file by means of the preprocessor. The advantage of \dtx{} is that
+% it is portable to all installations with \TeX.
+%
+% \subsection{The \dtx{} Batch Job}
+%
+% The \dtx{} program can be run either interactively, where the user must
+% answer questions via the keyboard, or by means of a batch job where all
+% the inputs are prepared in a file beforehand. For producing a \btx{}
+% style file from a master file, the batch job method is the only feasible
+% one, simply because of the large number of options available. (There is
+% another reason for employing a batch job: the interactive method adds an
+% |\endinput| command at the end, something that \btx{} will protest
+% about.)
+%
+% The batch job files in general do not have any particular extension but I
+% use \texttt{.dbj} for \emph{\dtx{} batch job}. These files are useful
+% because they document the options used to produce the \texttt{.bst} file,
+% and they may be edited to experiment with alternative options.
+%
+% \subsection{The \texttt{makebst} Program}
+%
+% It is possible to make up a batch job file by hand using the option
+% information listed in Section~\ref{sec:options}, but my accompanying
+% program \texttt{makebst} simplifies the task considerably. It reads menu
+% information in the master file itself in order to present the user with
+% an interactive list of choices, translating the answers into appropriate
+% options that are then written to a batch job file.
+%
+% To run it, simply process \texttt{makebst.tex} with \TeX\ or \LaTeX, and
+% answer the questions. The first of these is whether you want some
+% instructions or not, and the second is the name of the \texttt{.mbs} that
+% you want to use. The next query is about the name of the desired
+% \texttt{.bst} file (which will also be the root name of the batch job).
+% After that, all further questions come from menu information in the
+% master file.
+%
+% At the very end, \texttt{makebst} asks if it should run the batch job for
+% you. Isn't that a fine service?
+%
+% \section{Multilingual Adaptation}
+% The original \texttt{.bst} files from Oren Patashnik contain explicit
+% English words that are output into the final text. Since \LaTeX{} is
+% increasingly being used for other languages, and since the official
+% version since December 1991 also uses macros in place of explicit words,
+% it seems appropriate for \btx{} to follow suit.
+%
+% In this master bibliographic style file {\tt\filename}, all explicit
+% words have been replaced by functions: e.g., the word \textsl{editor} has
+% become the function \texttt{bbl.editor}. Depending on the language option
+% chosen, this function is defined to be the text {\tt"editor"},
+% {\tt"Redakteur"}, or {\tt"redacteur"}, for English, German, and French,
+% respectively.
+%
+% There is another special `language' called \texttt{babel} that instead inserts
+% the text |"\bbleditor{}"|; the definitions of these \LaTeX{} commands
+% must be in a separate file named \texttt{babelbst.tex} that is read in at
+% the start of the bibliography.
+%
+% Only English and \texttt{babel} are supported directly in
+% \texttt{\filename}; all other language definitions are contained in
+% separate definition files, e.g., \texttt{french.mbs}, \texttt{german.mbs}.
+%
+% The language selection is made during the \texttt{makebst} run, which
+% asks for the name of the language definition file as the first menu item. If
+% either English or \texttt{babel} is wanted, reply with the default, which
+% is \texttt{\filename} itself; otherwise give the name of the desired
+% language file.
+%
+% \begin{quote}\slshape
+% \textbf{Note:} the language definition files can only be used with
+% \texttt{makebst} version~3 or later, and
+%
+% with an external definition file, the \dtx{} run requires two passes
+% through \texttt{\filename}, doubling the processing time.
+% \end{quote}
+%
+% Apart from the language adaptation of the whole bibliography, there is also
+% the possibility of switching languages for individual references, so as to
+% hyphenate the title properly. This is done with the \texttt{language} field
+% and the \verb!\setlanguage! command.
+%
+% \subsection{Adding a New Language Definition File}
+%
+% To create a new language definition file, simply take one of the existing
+% ones, like \texttt{english.mbs}, and replace the explicit English words
+% with their translations. There are, however, a number of points that can
+% complicate this procedure.
+%
+% \begin{enumerate}
+% \item
+% Do not forget to change the documentation in the file, especially
+% version number, date, author.
+%
+% \item
+% There are option menus that need to be translated too. It might also be
+% desirable to add or remove options. In most cases, the options in the
+% language files involve possible abbreviations, like
+% \begin{quote}
+% \verb!\mes{^^JABBREVIATE WORD `PAGES':}!\\
+% \verb!\optdef{*}{}{`Page(s)'}{(no abbreviation)}!\\
+% \verb!\optdef{a}{pp}{`Page' abbreviated}{as p. or pp.}!\\
+% \verb!\getans!
+% \end{quote}
+%
+% In this example, the option \texttt{pp} appears later in the definition
+% \begin{quote}
+% \verb!FUNCTION {bbl.pages}!\\
+% \verb+%<!pp>{ "pages" }+\\
+% \verb!%<pp>{ "pp." }!
+% \end{quote}
+% This a \emph{local} option, that only affects the coding in the definition
+% file. It is possible to add more local options.
+%
+% \item
+% However, all options, whether activated by the main file or by the
+% definition file, apply to both. In other words, there really is no such
+% thing as a local option. In the above example, \texttt{pp} is only
+% local because it is never used in \texttt{\filename}.
+%
+% \item
+% Add the name of the language as an option, with
+% \begin{quote}
+% \verb!\mes{^^JOptions for ENGLISH}!\\
+% \verb!\wr{\spsp\spsp english,\pc: English language}!
+% \end{quote}
+% (This is how options are added without |\optdef| and |\getans|.) The
+% main file just might recognize it in order to take some
+% language-specific action. The least it should do is add a comment at
+% the start of the \texttt{.bst} file stating for which language it is to
+% be used.
+%
+% \item
+% There could be some problems with edition numbers due to language
+% dependent ways of treating ordinal numbers (1st, 2nd, 3rd in English;
+% 1$^{\mbox{\scriptsize re}}$, 2$^{\mbox{\scriptsize e}}$,
+% 3$^{\mbox{\scriptsize e}}$ in French; 1., 2., 3., in German). Some
+% accommodation already exists for the oddball language English, and
+% further hacking may be needed for others.
+%
+% \item
+% If there should be any need for a double-quote character in
+% the translations (German needs it for umlauts) then there is trouble
+% because the \btx{} strings do not allow it. Instead, use the command
+% |\qq|, as in the German word |F\qq{u}nfte| for {\sl F\"unfte} (fifth).
+% It is then vital to add the option \texttt{umlaut} with
+% \begin{quote}
+% \verb!\wr{\spsp\spsp umlaut,\pc: Activate umlaut command}!
+% \end{quote}
+%
+% Bernd Raichle points out that |\^^b| can be used in place of |\"|
+% within \btx{} code. One can thus replace |F\qq{u}nfte| with |F\^^b unfte|
+% and do away with the \texttt{umlaut} option.
+%
+% \end{enumerate}
+%
+% \subsection{Changing \texttt{babelbst.tex} for a New Language}
+%
+% Alternatively, a new language can be added by
+% modifying the file \texttt{babelbst.tex} and selecting the language {\tt
+% babel} for the \texttt{.bst} file. If this is the only language to be used,
+% then just change the English words in the definitions.
+%
+% However, some form of switching would be more desirable. With \TeX\
+% version 3, there is a |\language| parameter to control the hyphenation
+% patterns, and this could be used to select the correct language. For
+% example, if language 0 is English and language 1 German, then put the
+% English version of \texttt{babelbst.tex} into \texttt{englbst.tex} and the
+% German
+% version in \texttt{germbst.tex}. Then \texttt{babelbst.tex} could contain:
+% \begin{quote}\begin{verbatim}
+% \ifcase\language \input{englbst} \or \input{germbst}
+% \else \input{englbst} \fi
+% \end{verbatim}
+% \end{quote}
+%
+% This is of course installation dependent.
+%
+% \subsection{Extracting the Sample \texttt{babelbst.tex} File}
+%
+% A sample \texttt{babelbst.tex} (for English) is contained in this master
+% file. Extract it with \dtx{} and the option \texttt{bblbst}. It may be
+% edited (and possibly renamed) for other languages as needed.
+%
+% \subsection{Problem with Edition Numbers}
+% Something to note here is the ordinal numbers for editions. \btx{}
+% demands that the field \texttt{edition} be given in the database as a word
+% \textsl{First}, \textsl{Second}, etc., or as \textsl{1st}, \textsl{2nd},
+% etc. This is bad policy
+% because it is language dependent. So what I do is to test for the words
+% \textsl{first} through \textsl{fifth} (case independently) and replace them
+% with language-dependent equivalents. If the {\tt<ord>} option is selected,
+% these equivalents are ordinal numbers for that language. Any other words
+% cannot be interpreted and must be printed as is.
+%
+% However, if the \texttt{edition} is given as a number, with or without
+% following letters, then the numbers 1 through 5 are replaced by their
+% words; any higher numbers just have the ordinal ending (\textsl{th}
+% in English) added to them.
+%
+% These numbers are only used with the word \textsl{edition} or
+% its equivalent in other languages, so the translators need
+% to provide only the one gender, e.g., feminine for both German and
+% French.
+%
+%
+% \section{Prestoring Names of Journals}\label{sec:jnames}
+%
+% The standard \texttt{.bst} files contain the names of some 20 journals
+% in the field of computing, stored as macros for easy reference within the
+% database \texttt{.bib} files. For example, the \textsl{Journal of
+% Computer and System Sciences} can be referred to as \texttt{jcss}.
+% With the option \texttt{jabr} (for journal abbreviation) this same
+% shorthand produces \textsl{J.~Comput. Syst. Sci.}.
+%
+% Some \texttt{.bst} files for physics journals include additional journal
+% names, and it is conceivable that other faculties might wish to prepare
+% their own such lists, with each name present in a full or abbreviated
+% form. Such an external file can now be added with \texttt{\filename} and
+% \texttt{makebst} version~3.
+%
+% As a model, I supply a file \texttt{physjour.mbs} with the names of
+% physics journals which I have taken from other \texttt{.bst} files.
+% I also have a file \texttt{geojour.mbs} with the names of geophysics
+% journals, and a contributed file \texttt{photjour.mbs} containing names of
+% optics journals.
+%
+% In fact, version~3.5 can even include multiple journal-name files.
+% Thus one can decide whether to include both, one, or none of the above
+% files.
+%
+% \section{HTML Output}
+% There is an option \texttt{html} to create a \texttt{.bst} file producing
+% hypertext (HTML) output instead of the regular \LaTeX\ code. This is still
+% experimental. The resulting \btx\ output will still be a file with extension
+% \texttt{.bbl} and will contain the \LaTeX\ special characters, like |\"a| for
+% \"a. One must go over the output to convert such characters to the HTML
+% equivalents, and to remove curly braces. Only then can it be renamed
+% \texttt{.html}.
+%
+% Three possible lists are offered:
+% \begin{itemize}
+% \item a simple paragraph for each entry,
+% \item a numbered list,
+% \item a description list with the key as the label.
+% \end{itemize}
+%
+% \section{Updating Older \texttt{.dbj} Files}\label{sec:update}
+% If you have existing \texttt{.dbj} files for generating \texttt{.bst}
+% files from the older version \texttt{genbst.mbs}, these may be run with
+% \texttt{\filename} by simply changing the name of the source
+% \texttt{.mbs} file. For example, where the older \texttt{.dbj} file contains
+% the line
+% \begin{quote}
+% |\generateFile{mystyle.bst}{f}{\from{genbst.mbs}{%|
+% \end{quote}
+% edit the file so that \texttt{genbst.mbs} is replaced by
+% \texttt{\filename}. The resulting \texttt{mystyle.bst} file will then be
+% an updated version of the older one, containing all the same features.
+%
+% Version~4 of \texttt{\filename} can only be used with version~4 of
+% \texttt{makebst}, whereas older versions of \texttt{\filename} will still
+% function with the newer \texttt{makebst}. Also, \texttt{.dbj} files created
+% with older versions should still produce the same results with
+% \texttt{\filename}~4, albeit with different coding.
+%
+% \section{Acknowledgements}
+% I wish to thank all the people who have taken the trouble to send me
+% suggestions or special requests. Admittedly, it has been out of
+% self-interest on their part, since they had bibliographic needs to be
+% met. And I have often questioned the need for many of their demands. Yet,
+% that is part of the bibliographic jungle that I am trying to eliminate.
+% If I thought that bibliographies were arbitrarily formatted before I
+% started this project, I have more than sufficient confirmation since
+% then. The fault lies not with the poor contributors, but with the
+% publishers who cannot agree on a decent standard.
+%
+% I want to thank Frank Mittelbach, not only for creating \dtx{}
+% in the first place, but also for sending me his bibliographic requirements,
+% and for suggesting an improvement to \texttt{makebst}.
+%
+% David Carlisle has added the REV\TeX\ fields and |\bibinfo| tagging in a
+% special variant of \texttt{\filename}; Arthur Ogawa then incorporated
+% them into the main file, and overhauled much of the coding to make it
+% more legible and rational.
+%
+% I especially wish to thank Mark Doyle and the American Physical
+% Society for supporting the work on \texttt{custom-bib}~4.0.
+%
+% And finally, all of us must thank Oren Patashnik for providing \btx;
+% without its flexibility and programmability (in spite of the complexity
+% of the language) the master bibliographic styles would not be possible at
+% all.
+%
+% \section{The Options}\label{sec:options}
+% Here I present a list of all the \dtx{} options that are
+% available in this file {\tt\filename}.
+% The normal user can skip this section since he will probably make use
+% of the menus via \texttt{makebst}. These are described in
+% Section~\ref{sec:menu}. The menus provide much more informative prompts
+% than the heavily abbreviated option names listed here. In other words,
+% the options described in this section are meant for internal (programmer)
+% usage, while the normal interface for the user is the menus.
+%
+% I have tried to avoid
+% conflicts with mutually exclusive options by always letting one dominate if
+% more than one has been specified. Such options have the same prefix, such
+% as \texttt{nm-rev} and \texttt{nm-init}.
+% If one uses \texttt{makebst} to produce the
+% \dtx{} batch job, then it is impossible to give mutually
+% exclusive options unless one edits the batch file oneself afterwards.
+% (Anything is possible with computer freaks!)
+%
+% Most mutually exclusive options have the same prefix before the hyphen.
+%
+% \newenvironment{opt}{%
+% \begin{list}{}{\labelwidth2cm \leftmargin2.5cm \labelsep1em \rightmargin0pt
+% \def\makelabel##1{\ttfamily##1 \hfill}}}{\end{list}}
+% \textbf{Citation style:} whether or not a numerical or author--year system
+% is to be used.
+% \begin{opt}
+% \item[--] default is numerical, standard \LaTeX, as for {\tt
+% plain.bst}.\\
+% |\bibitem{key}...|
+% \item[cite] special for listing entire databases; the cite key is used
+% as the label so it may be listed.\\
+% |\bibitem[key]{key}...|
+% \item[ay] for author--year style of citations. Various forms of |\bibitem|
+% are provided under this option, to support different types
+% of \LaTeX{} styles for interfacing with the author--year system.
+% \item[alph] for \texttt{alpha.bst} style of citations; essentially numerical
+% but an abbreviation of the author names plus year is used as
+% the label. First three letters of single author, or first letters
+% of first three authors.
+% \item[alf-1] with \texttt{alph}, uses first three letters of first author's
+% name, regardless of how many authors.
+% \item[alf-f] with \texttt{alph}, uses first author's whole name.
+% \end{opt}
+%
+% For numerical style, one can select the HTML option, to output a
+% hypertext file instead of a \LaTeX\ one.
+%
+% \begin{opt}
+% \item[--] normal \LaTeX\ output;
+% \item[html] for HTML output, one reference per paragraph
+% \item[htlist] (with \texttt{html}) outputs to a numbered list;
+% \item[htdes] (with \texttt{html}) outputs description list, with the key.
+% \end{opt}
+%
+% If \texttt{ay} has been selected, then the type of author--year interface
+% is selectable. Some of these, like \texttt{natbib} and \texttt{harvard}
+% exist in two versions because of updates in these systems.
+% \begin{opt}
+% \item[--] default is the system I invented for my \texttt{natbib.sty}.\\
+% |\bibitem[author(year)]{key}...|
+% \item[nat] for extended format of \texttt{natbib.sty} version 5.3\\
+% |\bibitem[author(year)full author]{key}...|
+% \item[alk] for the \texttt{apalike.sty} of Oren Patashnik and related
+% systems\\
+% |\bibitem[author, year]{key}...|
+% \item[har] for the Harvard family of styles (with \texttt{harvard.sty}).\\
+% |\harvarditem[short]{long}{year}{key}...|
+% \item[harnm] for the extended Harvard family, containing some extra commands
+% used by \LaTeXe\ version 2.0.3 of \texttt{harvard.sty}
+% \item[ast] for astronomy family of styles (with \texttt{astron.sty}).\\
+% |\bibitem[\protect\astroncite{author}{year}]{key}...|
+% \item[cay] for the Chicago family of styles (with \texttt{chicago.sty}).\\
+% |\bibitem[\protect\citeauthoryear{long}{short}{year}]{key}...|
+% \item[nmd] for the `named' variant of Chicago (with \texttt{named.sty}).\\
+% |\bibitem[\protect\citeauthoryear{author}{year}]{key}...|
+% \item[cn] for the ``author--date'' group of styles (with {\tt
+% authordate1-4.sty})\\
+% |\bibitem[\protect\citename{author, }year]{key}...|
+% \end{opt}
+%
+% \textbf{Sequence:} the order in which the references are listed.
+% \begin{opt}
+% \item[--] default is alphabetical by all authors, date, title
+% \item[seq-yr] order by year (ascending), authors, title
+% \item[seq-yrr] order by year (descending), authors, title
+% \item[seq-no] sequence by citation order
+% \item[seq-lab] (author--year) by label, date, title (means that Daly
+% precedes Daly and Williams, precedes Daly et al.)
+% \item[seq-labc] (author--year) like \texttt{seq-lab} but the Daly et al.'s
+% come in citation order
+% \item[seq-key] (author--year) like \texttt{seq-lab} except that for
+% identical authors and year, the cite keyword is used
+% instead of the title or cite order
+% \item[xintls] (use with \texttt{seq-} options) to sort on surname only
+% without the initials or first names
+% \item[vonx] ignore \emph{von} part of name when ordering (default is
+% to consider \emph{von} as part of the whole surname)
+% \end{opt}
+% Note on the \texttt{seq-lab} option and it variants: it orders the list of
+% references by \emph{label}, which is what the |\cite| command prints. The
+% ordering rules are:
+% \begin{enumerate}
+% \item the first author, with name or initials (so P.~Daly is different from
+% E.~Daly)
+% \item by number of co-authors: single author, double author, multiple
+% authors
+% \item by year
+% \item by co-authors
+% \item by title
+% \end{enumerate}
+% Variations are: with \texttt{seq-key}, the last item becomes the \btx\ citation
+% keyword; with \texttt{seq-labc}, the co-author is still used for two-author
+% papers, but not for multiple authors, and the final criterion is the order of
+% citation in the document. These references will have identical labels (First
+% \emph{et~al}, year) and are distinguished by additional letters, which are
+% assigned in the order in which the first citations are made. The list of
+% references conforms to this order.
+%
+% With \texttt{xintls} as well, first names or initials are
+% ignored for sorting, so all Daly's are mixed together.
+%
+% \textbf{Language selection:} the translations of certain explicit words.
+% \begin{opt}
+% \item[--] default is English, for \textsl{and}, \textsl{chapter},
+% \textsl{editor}, etc.;
+% \item[babel] replace words with \LaTeX{} commands that are defined
+% in the file \texttt{babelbst.tex};
+% \item[lang] adds the \texttt{language} field for switching language
+% for one reference only by means of the \verb!\setlanguage!
+% command in \texttt{babel}.
+% \end{opt}
+%
+% If one of the external language definition files is used, then the name of
+% its language should be in the list of active options. Many other language
+% names are already included as options in this main file simply for the
+% purpose of adding a comment at the start of the \texttt{.bst} file.
+%
+% The \texttt{language} field is intended to allow the hyphenation patterns
+% to be switched temporarily so that titles can be set in the original
+% language.
+%
+% \textbf{Annotation:}
+% annotations are added either by means of the \texttt{annote} field, or
+% with a \texttt{.tex} file of the same name as the citation key.
+% \begin{opt}
+% \item[--] no annotations
+% \item[annote] annotations enabled, with \texttt{annote} field.
+% \end{opt}
+%
+% \textbf{Presentations:}
+% add a non-standard type to handle talks (presentations). This is similar to the
+% \texttt{inproceedings} but without \texttt{booktitle} and with the presenting
+% author in bold face. This author is specified by the \texttt{key} entry, which
+% is that author's position in the author list (1, 2, \dots). The type of presentation
+% (oral or poster) is specified by the entry \texttt{type}. The date without year is given
+% in \texttt{month}, which must be present.
+% \begin{opt}
+% \item[--] no presentations
+% \item[pres] include a \texttt{presentation} type
+% \item[pres-bf] (with \texttt{pres}) to put speaker in bold face
+% \item[pres-it] (with \texttt{pres}) to put speaker in italics
+% \item[pres-sc] (with \texttt{pres}) to put speaker in small caps
+% \end{opt}
+% Without any of the extra font options, the speaker's name is not highlighted.
+%
+% \textbf{Missing names:}
+% If the author and/or editor is missing, the standard \texttt{.bst} files
+% use the \texttt{key} field in place of the names for purposes of ordering the
+% entries.
+%
+% For author--year styles, the \texttt{key} field is even inserted in the
+% reference list and in the label in place of the authors. Optionally, one can
+% suppress the year in this case, which causes \texttt{natbib} (version~7)
+% to print only that key text as a code designation for the work.
+%
+% \begin{opt}
+% \item[--] year is inserted in the labels when \texttt{key} replaces authors
+% \item[keyxyr] year is left blank in this case
+% \end{opt}
+%
+% \textbf{Names formatting:} how initials and surnames are to be combined.
+% \begin{opt}
+% \item[--] default is full names, given names first
+% \item[nm-revf] full names, surname first
+% \item[nm-init] initials plus surname
+% \item[nm-rev] surname plus initials
+% \item[nm-rev1] surname plus initials (1st name only) then initials
+% plus surname
+% \item[nm-revv1] same as \texttt{nm-rev1} but with full names
+% \item[nm-rv] as \texttt{nm-rev}, but initials without dots
+% \item[nm-rvvc] as \texttt{nm-rev}, but initials without spaces
+% \item[nm-rvv] as \texttt{nm-rev}, but initials without spaces or comma
+% \item[nm-rvx] as \texttt{nm-rev}, but initials without dots or spaces
+% \item[nm-rvcx] as \texttt{nm-rvx}, but with comma after surname
+% \item[ed-rev] editors' names in collections are reversed the same as authors'
+% \item[ed-au] editors are formatted with same routine as authors; this
+% is an alias for \texttt{ed-rev}, which is kept only for
+% compatibility
+% \item[aunm-semi] a semi-colon is placed between author names instead of
+% a comma
+% \item[aunm-sl] a slash is placed between author names instead of a comma
+% \item[nmdash] repeated author/editor names replaced by dash
+% \item[nmd-2] with \texttt{nmdash}, uses 2 em dashes
+% \item[nmd-3] with \texttt{nmdash}, uses 3 em dashes
+% \item[jnrlab] include the junior part of name in citations (normally
+% appears only in reference listing)
+% \item[jnrlst] with one of the \texttt{nm-rev} type options, puts the
+% junior part last, after the (reversed) first name
+% \end{opt}
+%
+% \textbf{Number of names in bibliography:} normally all names listed (in reference list)
+% \begin{opt}
+% \item[nmlm] limit number of names
+% \item[x1...x90] (with \texttt{nmlm}) maximum number of names to appear;
+% for over 9, give the tens and units separately, as
+% \texttt{x20,x5} for 25
+% \item[m1...m90] (with \texttt{nmlm}) minimum number before \textsl{et al.}
+% written;
+% no check for consistency is taken; one \texttt{x} and
+% one \texttt{m} number must be given, and {\tt x}$\le${\tt m}
+% \end{opt}
+%
+% \textbf{Number of names in citation:} before \textsl{et al.}
+%
+% The default is to cite one or two names at most, but for three or more, to
+% cite only one name with \textsl{et~ al.}
+% \begin{opt}
+% \item[mcite] to change the default
+% \item[mct-1...mct-6] (with \texttt{mcite}) number of names preceding \textsl{et~al.}
+% \item[mct-x2...mct-x6] (with \texttt{mcite}) max number of authors without truncating
+% \end{opt}
+% The default is equivalent to \texttt{mct-1} and \texttt{mct-x2}.
+%
+% \textbf{Names font:} in the reference list
+% \begin{opt}
+% \item[--] default is names in normal typeface
+% \item[nmft] names are in some special font
+% \item[nmfted] editors' names in collections also get special fonts
+% \item[nmft-sc] names in small caps
+% \item[nmft-it] names in italics
+% \item[nmft-bf] names in bold
+% \item[nmft-def] names in user defined font |\bibnamefont{}|.
+% \item[nmand-rm] `and' in normal font, not same as authors'.
+% \item[fnm-rm] (with \texttt{nmft}) first names are in regular font
+% \item[fnm-def] (with \texttt{nmft}) first names are in user defined
+% font |\bibfnamefont{}|.
+% \item[--] first names are in same font as the surnames.
+% \end{opt}
+%
+% \textbf{Citation font:} what is written by the |\cite| command
+% \begin{opt}
+% \item[--] default is no special font
+% \item[lab-it] cited names in italics
+% \item[lab-sc] cited names in small caps
+% \item[lab-bf] cited names in bold face
+% \item[lab-def] cited names in user defined font |\bibnamefont{}|.
+% \item[and-rm] word `and' in cited names in normal font
+% \item[xlab-it] extra label (letter after year) in italics
+% \end{opt}
+%
+% \textbf{Block punctuation:} between logical sections (not mutually
+% exclusive)
+% \begin{opt}
+% \item[--] default is period after each logical section, including end
+% \item[blk-com] use commas, except at very end (changes \textsl{In} to
+% \textsl{in})
+% \item[blk-tit] like \texttt{blk-com} except period follows titles of
+% articles and books
+% \item[blk-tita] like \texttt{blk-com} except period follows article title
+% \item[tit-col] with \texttt{blk-tit} or \texttt{blk-tita}, for colon instead of period
+% \item[com-semi] with \texttt{blk-com}, uses semi-colon instead of comma
+% \item[com-blank] with \texttt{blk-com}, uses blanks instead of comma
+% \item[in-col] puts a colon after \textsl{In} or \textsl{in} for edited works
+% \item[in-it] puts word \textsl{in} in italics (may be used with
+% \texttt{in-col})
+% \item[in-x] suppresses the word \textsl{in} for edited works
+% \item[fin-bare] no punctuation at the very end
+% \item[au-col] puts a colon after the author/editor block
+% \item[blknt] puts period before note
+% \end{opt}
+%
+% \textbf{Date:} if missing
+%
+% \begin{opt}
+% \item[--] Missing date replaced by ???? (author--year)
+% \item[blkyear] Missing date left blank, even in label.
+% \end{opt}
+%
+% \textbf{Date:} position and enclosure
+%
+% \begin{opt}
+% \item[--] default is date at end, before notes; for author--year,
+% date consists only of year, no month
+% \item[dt-jnl] date at end as for default, except for journal articles
+% where it follows the journal name as part of specification
+% \item[dt-end] date goes after any notes
+% \item[dt-beg] date goes after authors' names
+% \item[yr-par] date in parentheses ()
+% \item[yr-brk] date in brackets []
+% \item[yr-com] date preceded by comma and space
+% \item[yr-col] date preceded by colon and space
+% \item[yr-per] date preceded by period and space
+% \item[yr-blk] date preceded by space
+% \item[dtrev] date as year month instead of month year
+% \item[dtbf] date bold face
+% \item[aymth] include month even for author-year
+% \item[xmth] suppress month for numerical mode
+% \item[yrp-x] suppresses punctuation following month, year when date
+% is just after authors
+% \item[yrp-col] adds colon and space after date when just after authors
+% \item[yrp-semi] adds semi-colon and space after date when just after authors
+% \item[yrp-per] adds period and space after date
+% \item[yrpp-xsp] removes blank following year punctuation
+% \item[note-yr] permits text (like ``in press'') in the \texttt{year} field
+% \end{opt}
+%
+% \textbf{Article in journal:} style of title, volume, pages
+% \begin{opt}
+% \item[--] default is: Title. \textit{Journal}, vol(num):p1--p2
+% \item[injnl] adds word \textsl{in} before journal name, same style as
+% for incollections
+% \item[volp-sp] as above, but with a space, vol(num):~p1--p2
+% \item[volp-semi] semi-colon instead of colon: vol(num);~p1--p2
+% \item[volp-com] comma and space instead of colon: vol(num),~p1--p2
+% \item[volp-blk] only space instead of colon: vol(num)~p1--p2
+% \item[vol-bf] volume in bold
+% \item[vol-it] volume in italics
+% \item[vol-2bf] volume and number bold
+% \item[vnum-x] no number for journals, only volume
+% \item[vnum-sp] space between, as vol (num)
+% \item[vnum-cm] replace vol(num) with vol, num
+% \item[vnum-nr] replace vol(num) with vol, no. num
+% \item[vnum-h] replace vol(num) with vol, \#num
+% \item[vnum-b] replace vol(num) with vol num
+% \item[jdt-v] year in parentheses attached to volume: vol(year) num
+% \item[jdt-vs] as above, with space: vol (year) num
+% \item[jdt-p] year precedes pages: vol(num), (year) p1--p2
+% \item[jdt-pc] as above, with comma: vol(num), (year), p1--p2
+% \item[jpg-1] only starting page given
+% \item[pgsep-c] page numbers over 10,000 have comma
+% \item[pgsep-s] page numbers over 10\,000 have space
+% \item[pgsep-p] page numbers over 10.000 have period
+% \item[jwdpg] include `page' or `pp' for articles
+% \item[jwdvol] include `volume' or `vol' for articles
+% \item[jnm-x] no punctuation after journal name
+% \item[tit-it] article title in italics
+% \item[tit-qq] article title in quotes
+% \item[bt-rm] booktitle in upright font, not italic (this will be issued
+% with \texttt{btit-rm} normally; separate options allow for
+% more control if wanted
+% \item[bt-qq] booktitle of incollection and inproceedings in quotes
+% \item[qt-s] (with \texttt{tit-qq}) single instead of double quotes
+% \item[qt-g] (with \texttt{tit-qq}) guillemets instead of quotes
+% \item[qx] (with \texttt{tit-qq}) comma outside quotes
+% \item[jtit-x] no article title (applies only to journals and
+% collections)
+% \item[atit-u] article title capitalized as in entry, default is
+% sentence capitalization (first word and words following
+% colons)
+% \item[jxper] abbreviated journal names have periods removed, as
+% `Phys Rev'
+% \item[jttl-rm] name of journal not in italics
+% \item[pp-last] pages appear at end, before any notes
+% \end{opt}
+%
+% \textbf{Number and series:} for collections and inproceedings
+%
+% This is a confusing issue. The standard wants to print something like
+% ``number 123 in Collected Works'', and issues a warning if there is a number
+% without a series. However, for many such works, there is an identification
+% number for the collection, such as ESA~SP-123. Giving this as the number
+% without a series results in ``number ESA~SP-123'' and a warning. Setting the
+% series to this code number produces desired results, but is illogical.
+%
+% Another problem is that this code number should often should appear just
+% before the publisher name,
+% whereas the standard places it elsewhere.
+%
+% \begin{opt}
+% \item[--] default, number must have series, \textsl{number} is printed
+% \item[num-xser] default behaviour if both number and series present, but if
+% only number is there, it is printed without the word \textsl{number} and
+% without a warning
+% \item[numser] moves the number/series to just before the publisher/organization
+% \item[ser-vol] for a book in a series with volume number, appears as ``\textit{Series-Name}, vol.~23''
+% rather than ``vol.~23 of \textit{Series-Name}''
+% \item[ser-ed] for incollection, inproceedings, the series and volume appear between
+% the booktitle and the editors
+% \end{opt}
+%
+%
+% \textbf{Thesis title:} formatted like a book or article
+% \begin{opt}
+% \item[--] default is like a book title
+% \item[thtit-a] titles of PhD and Master theses formatted like articles
+% \item[thtit-x] no thesis title
+% \end{opt}
+%
+% \textbf{Technical Report title:} formatted like book or article
+% \begin{opt}
+% \item[--] default is like an article title
+% \item[trtit-b] titles of technical reports formatted like books
+% \item[trnum-it] \textsl{technical report} and number italic
+% \end{opt}
+%
+% \textbf{Books:} title font style, pages, and address location
+% \begin{opt}
+% \item[--] default is italicized
+% \item[btit-rm] book title plain
+% \item[bkpg-par] pages in books places in parentheses
+% \item[bkpg-x] pages in books bare without word \textsl{pages}
+% \item[add-pub] publisher's address before name, colon separated
+% \item[pub-par] publisher and address in parentheses
+% \item[pub-date] publisher with address and date in parentheses
+% \item[pub-xc] with \texttt{pub-date}, suppresses comma before date
+% \item[pub-xpar] with \texttt{pub-date} to suppress parentheses
+% \item[pre-pub] publisher placed before chapter and page information
+% \item[pre-edn] edition before publisher
+% \item[pg-bk] add number of pages for books and booklets
+% \item[pg-pre] with \texttt{pg-bk}, total pages comes before publisher
+% \end{opt}
+%
+% \textbf{Abbreviations:} of various words, default is no abbreviations
+% \begin{opt}
+% \item[pp] abbreviate \textsl{page(s)} as \textsl{p.} and \textsl{pp.}
+% \item[ppx] no word \textsl{page(s)} or abbreviation
+% \item[ed] abbreviate \textsl{editor(s)} as \textsl{ed.} and
+% \textsl{eds.}
+% \item[ednx] abbreviates \textsl{edition} as \textsl{ed.} instead
+% of \textsl{edn.}
+% \item[abr] abbreviate \textsl{volume}, \textsl{edition},
+% \textsl{technical report}, etc.
+% \item[mth-bare] months abbreviated without dots
+% \item[jabr] abbreviate names of prestored journals
+% \item[ord] write edition numbers as 1st, 2nd, instead as words.
+% \item[xedn] suppress conversion of editions (for English) to avoid
+% overflowing some \btx\ installations
+% \end{opt}
+%
+% \textbf{Editor:} alternative for \emph{in edited} book, inbook, or proceedings.
+% \begin{opt}
+% \item[--] ``in \emph{names}, editors, \emph{title}''
+% \item[edpar] ``in \emph{names} (editors), \emph{title}''
+% \item[edparc] ``in \emph{names}, (editors) \emph{title}''
+% \item[edparxc] ``in \emph{names} (editors) \emph{title}''
+% \item[bkedcap] capitalizes ``Editor''
+% \end{opt}
+%
+% \textbf{Editor:} alternative for \emph{in edited} incollection or inproceedings.
+% If none of these are selected, they are treated the same as an edited book.
+% \begin{opt}
+% \item[--] ``in \emph{names}, editors, \emph{title}''
+% \item[edby] ``in \emph{title}, edited by \emph{names}''
+% \item[edby-par] ``in \emph{title} (edited by \emph{names})''
+% \item[edby-parc] ``in \emph{title}, (edited by \emph{names})''
+% \item[edcap] (with \texttt{edby-par}) capitalizes ``Edited by'' or
+% ``Editor''
+% \item[edbyx] (with \texttt{edby} or \texttt{edby-par}) replaces text
+% \textsl{edited by} by \textsl{editor(s)} before the names,
+% \item[edbyw] same as \texttt{edbyx} but with word \textsl{editor} only in
+% parentheses
+% \item[edbyy] (with \texttt{edby} or \texttt{edby-par}) replaces text
+% \textsl{edited by} by \textsl{editor(s)} after the names,
+% as ``in \emph{title}, \emph{names}, editors''.
+% \end{opt}
+%
+% \textbf{ISBN, ISSN numbers:} include or not
+% \begin{opt}
+% \item[--] default is no ISBN number, ignore this field,
+% \item[isbn] include an ISBN number as optional entry for books, booklets,
+% incollections, inproceedings
+% \item[issn] include an ISSN number for periodicals
+% \end{opt}
+%
+% \textbf{URL address:} include or not, and how
+% \begin{opt}
+% \item[--] ignore URL field,
+% \item[url] process URL field (needs one of next options too),
+% \item[url-blk] (with \texttt{url}) URL text as regular blocked item,
+% \item[url-nt] URL text treated as a note
+% \item[url-nl] URL text added as new line below reference (Harvard style)
+% \end{opt}
+%
+% \textbf{DOI number:} include or not
+% \begin{opt}
+% \item[--] default is not to include the Digital Object Identifier
+% \item[doi] include the DOI number
+% \item[agu-doi] (with \texttt{doi}) place DOI number AGU style, as part of page designation
+% \item[url-doi] (with \texttt{url} options) write DOI as a URL
+% \end{opt}
+% With the \texttt{url-doi} option, the DOI is formatted to be a URL, i.e. as
+% |//dx.doi.org/|\emph{doi}; if there is a URL entry as well, it is ignored.
+% If this option is given without the \texttt{url} options, it behaves like
+% \texttt{doi}.
+%
+% The \texttt{agu-doi} option is for the special usage of the American Geophysical Society.
+%
+% \textbf{REV\TeX\ data fields:} for use with \texttt{revtex.bst}.
+% \begin{opt}
+% \item[--] Do not include extra fields for REV\TeX
+% \item[revdata] Include fields \texttt{collaboration}, \texttt{eid},
+% \texttt{numpages} for REV\TeX.
+% \end{opt}
+%
+% \textbf{Eprint field:} used by REV\TeX\ but can be used on its own.
+% \begin{opt}
+% \item[--] Do not include \texttt{eprint} and \texttt{archive} fields
+% \item[eprint] Include \texttt{eprint} and \texttt{archive} fields.
+% \end{opt}
+%
+% \textbf{Reference component tagging:} apply structure to the |\bibitem| contents.
+% \begin{opt}
+% \item[--] no tagging.
+% \item[bibinfo] apply tags like |\bibinfo|, and |\eprint| to the fields of data
+% in the content of the |\bibitem| statement.
+% \end{opt}
+%
+% \textbf{Emphasis:} defines what `italicized' really means
+% \begin{opt}
+% \item[--] default is |\em| (can switch between |\it|
+% and |\rm|
+% \item[em-it] use |\it| instead (always italic)
+% \item[em-x] no emphasis
+% \item[em-ul] underline for emphasis (with or without \texttt{ulem})
+% \end{opt}
+%
+% \textbf{Special punctuation:}
+% \begin{opt}
+% \item[amper] use \& in place of \textsl{and}
+% \item[varand] use command |\BIBand| in place of \textsl{and}
+% \item[and-xcom] no comma before last \textsl{and} of an author list
+% (citations and references)
+% \item[and-com] add comma before \textsl{and} even for two authors (in list of
+% references)
+% \item[and-com-ed] the same as \texttt{and-com} but for editors in
+% collections
+% \item[xand] no \textsl{and} in an author list (references)
+% \item[etal-it] \textsl{et al.} in italics
+% \item[etal-rm] \textsl{et al.} in roman even if authors in different font
+% \item[etal-xc] no comma before \textit{et al.}
+% \end{opt}
+%
+% \textbf{Font commands:}
+% \begin{opt}
+% \item[--] use Plain \TeX\ (also \LaTeX~2.09) font commands
+% \item[nfss] use |\textbf|, |\textit|, |\emph| in place of |\bf|, |\it|,
+% and |\em|; only works then with \LaTeXe
+% \end{opt}
+%
+% \textbf{Plain \TeX\ compatibility:}
+% \begin{opt}
+% \item[--] use \LaTeXe\ commands for testing, redefining commands
+% \item[plntx] use \TeX\ for maximum compatibility
+% \end{opt}
+%
+%
+% \section{The Menu Information}\label{sec:menu}
+% Here I describe the options and menu information for this particular
+% master file \texttt{\filename}. To construct a \dtx{} driver file
+% to generate a desired \texttt{.bst} file, simply process \texttt{makebst.tex}
+% with \TeX\ or \LaTeX, and give
+% \begin{quote}\tt\filename\end{quote}
+% when prompted for the name of the master file. Then answer the questions
+% in the menus that follow. The menu information is extracted from here.
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between
+% \begin{quote}
+% |%<*!options&!driver&!bblbst>| \dots\ |</!options&!driver&!bblbst>|
+% \end{quote}
+% in order to exclude it if \dtx{} is used to
+% extract the menu information, the documentation driver, or the
+% \texttt{babelbst.tex} file.
+%
+% The main coding is divided into two sections, the \emph{head} and
+% \emph{tail}; in between come any external language or journal name
+% support files. The head part is marked with the \dtx{} guard option
+% |<!tail>| and the tail with |<!head>|. This roundabout means of doing
+% things makes it possible to process \texttt{\filename} with \texttt{.dbj}
+% files that were generated for the older \texttt{genbst.mbs} file by
+% simply changing the name of the source file as shown in
+% Section~\ref{sec:update}. If both \texttt{head} and \texttt{tail} (and
+% \texttt{exlang}) options are omitted, as they are in the older
+% \texttt{.dbj} files, \texttt{\filename} is processed completely in one
+% pass. To include external files, two passes are needed, one for each
+% part, with the external file(s) coming in between.
+%
+% Note too that if the internal language commands are taken (i.e., if
+% \texttt{exlang} option is not given) then the default language is
+% English, which is tested for as |<!babel>|. This too permits the simple
+% update of older \texttt{.dbj}, at least for English.
+%
+% \subsection*{Selecting Language}
+% Explicit words in the bibliography style, such as \textsl{and},
+% \textsl{editor}, etc.,
+% are represented by functions \texttt{bbl.and}, \texttt{bbl.editor}, and so on.
+% By default these functions translate to the normal English text, but
+% other languages are also possible.
+%
+% The definitions of these functions for other languages are contained in
+% external files. At this point, we can make use of features in
+% \texttt{makebst} (version~3.0 or later) to ask for the name of such a
+% definition file, and store it in |\cfile|. If no external file is
+% specified, then the internal definitions are taken, for which there are
+% two possibilities: English or \LaTeX{} commands (Babel).
+%
+% The commands |\MBswitch|, |\mes|, |\MBaskfile|, |\wr|, |\pc|, |\spsp| are
+% defined in \texttt{makebst.tex}.
+%
+% If |\MBswitch| does not exist, then the version of \texttt{makebst}
+% cannot support external files.
+%
+% \begin{macrocode}
+%<*options>
+\expandafter\ifx\csname beginoptiongroup\endcsname\relax
+ \mes{^^J******************^^J%
+ !!!!!! VERSION CLASH !!!!!!!!!^^J%
+ This mbs file requires makebst version 4.0 or more^^J%
+ You must update makebst to run it with this mbs file^^J%
+ No docstrip batch file can be produced on this run^^J%
+ ******************}
+ \let\temp\endinput\else\let\temp\relax\fi\temp
+
+\newif\ifnumerical
+\newif\ifmytemp
+\mes{<<< For more information about the meanings of^^J%
+ <<< the various options, see the section on ^^J%
+ <<< Menu Information in the .mbs file documentation.}
+
+\umes{EXTERNAL FILES:}
+\expandafter\ifx\csname MBswitch\endcsname\relax
+ \mes{^^J**************^^J%
+ Makebst version is less than 3.0^^J%
+ Cannot add external file for language definition^^J%
+ **************}
+ \umes{No included files.}%
+ \def\cfile{}\def\jfile{}%
+\else
+ \MBaskfile{^^JName of language definition file}(\mroot.\mext)i\cfile
+ \edef\ctemp{\mroot.\mext}
+ \ifx\ctemp\cfile\def\cfile{}\fi
+ \umes{Name of language file: \string\cfile=\cfile.}%
+% \end{macrocode}
+%
+% A second type of external file that can be added is one containing names
+% of journals that are to be prestored into the \texttt{.bst} file.
+% Several file names are allowed here, with the root names separated by
+% commas, and with the common extension added at the end. To assist later
+% parsing of the names, an additional comma is added before the extension.
+%
+% Note that in this case |\MBaskfile| treats the file(s) as output, i.e.,
+% it does not check if the file(s) actually exist.
+%
+% The macro |\Mgetnext| allows the root names to be extracted from the
+% list of file names.
+% \begin{macrocode}
+ \def\jfile{}
+ \ask{\yn}{^^JInclude file(s) for extra journal names? (NO)}
+ \mytempfalse
+ \if!\yn!\else\if\yn n\else\if\yn N\else\mytemptrue\fi\fi\fi
+ \ifmytemp
+ \MBaskfile{^^JFile to include}(physjour,geojour,photjour.mbs)o\jfile
+ \edef\jfile{\froot,.\fext}
+ \umes{Name of included files: \string\jfile=\jfile.}%
+ \else
+ \umes{No included files.}%
+ \fi
+\fi%MBswitch
+\def\Mgetnext#1,#2.#3??{\def\froot{#1}\def\Mrest{#2}\def\fext{#3}}
+% \end{macrocode}
+%
+% If no external files are specified, then both |\cfile| and |\jfile| are
+% empty. In this case, do \emph{not} set the options \texttt{head} and
+% \texttt{tail}, which control the \dtx{} passes through
+% \texttt{filename}. Now only one pass is made.
+%
+% If there is an external definition file, or if an external list of
+% journal names, then some extra text must be
+% written to fit in with that already written by \texttt{makebst}. This is
+% explained in that documentation. The |\MBswitch| command turns the curly
+% braces |{..}| into normal characters, and the parentheses |(..)| take on
+% their grouping functionality. This permits unbalances braces to be
+% written to the output file.
+%
+% \begin{macrocode}
+\if!\cfile\jfile!\else
+ \begingroup\MBswitch
+ \wr(\spsp head,\string\MBopta})
+ \if!\cfile!\else
+ \wr(\string\from{\cfile}{\string\MBopta})
+ \fi
+ \if!\jfile!\else
+ \let\jxfile\jfile
+ \loop
+% \end{macrocode}
+%
+% Parse the list of journal name files, adding a new |\from| for each one.
+%
+% \begin{macrocode}
+ \expandafter\Mgetnext\jxfile??
+ \wr(\string\from{\froot.\fext}{\string\MBopta})
+ \edef\jxfile(\Mrest.\fext)
+ \if!\Mrest!\def\Mtst(1)\else\def\Mtst()\fi
+ \if!\Mtst!
+ \repeat
+ \fi
+ \wr(\string\from{\mroot.\mext}{tail,\string\MBopta}})
+ \wr(\string\def\string\MBopta{\pc)
+ \endgroup
+\fi
+% \end{macrocode}
+%
+% Ask whether
+% explicit English words wanted or \LaTeX{} commands whose definitions are
+% to be found in the file \texttt{babelbst.tex}.
+%
+% \begin{macrocode}
+\beginoptiongroup{INTERNAL LANGUAGE SUPPORT
+ (if no external language file)}%
+ {\if!\cfile!\relax*\fi}%
+\optdef{*}{}{English}{words used explicitly}
+\optdef{b}{babel}{Babel}
+ {(words replaced by commands defined in babelbst.tex)}
+\getans
+\endoptiongroup
+\if!\cfile!\relax\else
+\wr{\spsp\spsp exlang,\pc: External language file}
+\fi
+% \end{macrocode}
+%
+% \subsection*{Author--year or numerical}
+% The first question is whether a numerical or author--year citation style
+% is to be used. If the latter, the supporting system is my {\tt
+% natbib.sty}, which expects |\bibitem| to have an optional argument
+% containing the short form of the authors, plus year in parentheses.
+% E.g.,
+% \begin{quote}
+% |\bibitem[Daly et al.(1990)]{key}...|
+% \end{quote}
+% There is now a newer version of \texttt{natbib.sty} (v5.3) that
+% supports an optional full author list too, as
+% \begin{quote}
+% |\bibitem[Daly et al.(1990)Daly, Keppler, and Williams]{key}...|
+% \end{quote}
+% Other systems are also supported, such as the Harvard family of
+% bibliography styles (with \texttt{harvard.sty}), which have entries in the
+% form
+% \begin{quote}
+% |\harvarditem[Daly et al.]{Daly, Keppler,|\\
+% | and Williams}{1990}{key}...|
+% \end{quote}
+% or the astronomy family (with \texttt{astron.sty}) with entries like
+% \begin{quote}
+% |\bibitem[\protect\astroncite{Daly et al.}{1990}]{key}...|
+% \end{quote}
+% or the Chicago family (with \texttt{chicago.sty}) with entries like
+% \begin{quote}
+% |\bibitem[\protect\citeautheryear{Daly, Keppler, and|\\
+% | Williams}{Daly et al.}{1990}]{key}...|
+% \end{quote}
+% or the `named' variant of Chicago (with \texttt{named.sty}) with entries like
+% \begin{quote}
+% |\bibitem[\protect\citeauthoryear{Daly et al.}{1990}]{key}...|
+% \end{quote}
+% or the so-called ``author--date'' group (with \texttt{authordate1-4.sty})
+% with entries of the form
+% \begin{quote}
+% |\bibitem[\protect\citename{Daly et al.}1990]{key}...|
+% \end{quote}
+% Finally, there is the \texttt{apalike} format of Oren Patashnik, for use
+% with \texttt{apalike.sty} that has entries of the form
+% \begin{quote}
+% |\bibitem[Daly et al., 1990]{key}...|
+% \end{quote}
+%
+% In addition to numerical or author--year citation styles, there is also a
+% \texttt{cite} style available in which the label is the same as the cite
+% key. This is for listing entire contents of databases with the cite key
+% visible.
+%
+% A flag |\ifnumerical| is established because some of the following menu
+% features depend on which system is to be used.
+%
+% The \texttt{alph} option produces labels as in \texttt{alpha.bst}; options
+% \texttt{alf-1} and \texttt{alf-f} modify these. Standard is: first three
+% letters of the single author (Dal90 for Daly, 1990) and first letters of
+% first three authors (DK90 for Daly and Kopka, 1990). Alternatives are first
+% three letters of the first author, no matter how many authors there are, and
+% full name of first author.
+% \begin{macrocode}
+\beginoptiongroup{STYLE OF CITATIONS:}{}
+\optdef{*}{}{Numerical}{as in standard LaTeX}
+\optdef{a}{ay}{Author-year}{with some non-standard interface}
+\optdef{b}{alph}{Alpha style, Jon90 or JWB90}{for single or multiple authors}
+\optdef{o}{alph,alf-1}{Alpha style, Jon90}{even for multiple authors}
+\optdef{f}{alph,alf-f}{Alpha style, Jones90}{(full name of first author)}
+\optdef{c}{cite}{Cite key}{(special for listing contents of bib file)}
+\getans
+\endoptiongroup
+\if\ans a\numericalfalse\else\numericaltrue\fi
+\if\ans b\mytempfalse \else\mytemptrue \fi
+\beginoptiongroup{HTML OUTPUT
+ (if non author-year citations)}
+ {\ifnumerical*\fi}
+\optdef{*}{}{Normal LaTeX}{output}
+\optdef{h}{html}{Hypertext}{output, in HTML code, in paragraphs}
+\optdef{n}{html,htlist}{Hypertext list}{with sequence numbers}
+\optdef{k}{html,htdes}{Hypertext with keys}{for viewing databases}
+\getans
+\endoptiongroup
+\beginoptiongroup{AUTHOR--YEAR SUPPORT SYSTEM
+ (if author-year citations)}
+ {\ifnumerical\else*\fi}
+\optdef{*}{nat}{Natbib}{for use with natbib v5.3 or later}
+\optdef{o}{}{Older Natbib}{without full authors citations}
+\optdef{l}{alk}{Apalike}{for use with apalike.sty}
+\optdef{h}{har}{Harvard}{system with harvard.sty}
+\optdef{a}{ast}{Astronomy}{system with astron.sty}
+\optdef{c}{cay}{Chicago}{system with chicago.sty}
+\optdef{n}{nmd}{Named}{system with named.sty}
+\optdef{d}{cn}{Author-date}{system with authordate1-4.sty}
+\getans
+% \end{macrocode}
+% The \texttt{harvard} family has been extended for \LaTeXe, and the new
+% \texttt{.bst} files allow the word \textsl{and} and the brackets around years
+% to be variable with commands. These features may be added too.
+% The URL field used to be exclusively part of Harvard, but now exists
+% independently of it too.
+%
+% \begin{macrocode}
+\beginoptiongroup{HARVARD EXTENSIONS INCLUDED
+ (if Harvard support selected)}
+ {\if\ans h*\fi}%
+\optdef{*}{harnm}{With Harvard extensions}{for LaTeX2e version of harvard.sty}
+\optdef{n}{}{Older Harvard}{style, for LaTeX 2.09}
+\getans
+\endoptiongroup
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Language switching}
+% A \texttt{language} field can be present to specify the original language of
+% the reference; with \verb!\setlanguge!, the hyphenation patterns are set for
+% setting the title in that language.
+% \begin{macrocode}
+\beginoptiongroup{LANGUAGE FIELD}{}
+\optdef{*}{}{No language field}{}
+\optdef{l}{lang}{Add language field}{to switch hyphenation patterns temporarily}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Annotations}
+% Annotations to a reference are additional information not normally printed
+% out in the list of references. They are used for listing databases.
+% The coding here was offered by Soren Dayton.
+% \begin{macrocode}
+\beginoptiongroup{ANNOTATIONS:}{}
+\optdef{*}{}{No annotations}{will be recognized}
+\optdef{a}{annote}{Annotations}{in annote field or in .tex file of citekey name}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Presentations}
+% Presentations are talks at meetings, oral or poster, that are not otherwise
+% published. The author making the presentation is indicated with the \texttt{key}
+% entry, which is the speaker's number within the author list. The font used
+% to highlight the speaker is either bold or italics, depending on the secondary
+% option, otherwise not highlighted.
+% \begin{macrocode}
+\beginoptiongroup{PRESENTATIONS:}{}
+\optdef{*}{}{Do not add presentation type}{for conference talks}
+\optdef{p}{pres}{Add presentation, speaker not highlighted}{}
+\optdef{b}{pres,pres-bf}{Presentation, speaker bold face}{}
+\optdef{i}{pres,pres-it}{Presentaion, speaker italic}{}
+\optdef{c}{pres,pres-sc}{Presentaion, speaker in small caps}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Ordering of the listed references}
+% Choices here depend on citation style. The default in both cases is
+% alphabetical order of all authors. For numerical style, one may also
+% choose an unsorted order, which means the order is the same as the original
+% citations. This corresponds to \texttt{unsrt.bst}. Order of citation is
+% also offered for author--year for \texttt{natbib}-type styles that can
+% also be used for numerical listings.
+%
+% Another possibility is to order first by year, then authors. This too only
+% makes sense for numerical citations. However, it is offered for author--year
+% in the event that a \texttt{natbib}-type style is used for numerical
+% listings.
+%
+% For the alpha style, the ordering is by label only, so no option is
+% offered here (|\ifnumerical| is \meta{true} and |\ifmytemp| is \meta{false}).
+%
+% For author--year, the second choice is by label. (The label is the
+% optional |\bibitem| argument, and is what is printed in place of the
+% |\cite| command.) With this option, all the papers with the same first
+% author are ordered so that the one-author papers come first, followed by
+% the two-author papers, followed by the multiple-author papers. This is a
+% more sensible system for author--year citations, and is demanded by some
+% journals (like JGR).
+%
+% One problem that can arise here is when two or more references have the
+% same set of authors and year; normally they are then ordered by the
+% title, ignoring initial words like \textsl{the} and \textsl{a}, with the
+% letters a, b,
+% c, \dots, added to the year. This can mean that a set of references with
+% a natural sequence will be put into a different order. An alternative is
+% to order them by the citation keyword instead of by title. This of course
+% assumes that the keywords in this case reflect that natural sequence.
+% \begin{macrocode}
+\let\ans\relax
+\beginoptiongroup{ORDERING OF REFERENCES
+ (if non-author/year and non-alph)}
+ {\ifnumerical\ifmytemp*\fi\fi}%
+\optdef{*}{}{Alphabetical}{by all authors}
+\optdef{c}{seq-no}{Citation order}{(unsorted, like unsrt.bst)}
+\optdef{d}{seq-yr}{Year ordered}{and then by authors}
+\optdef{r}{seq-yrr}{Reverse year ordered}{and then by authors}
+\getans
+\endoptiongroup
+%
+\beginoptiongroup{ORDERING OF REFERENCES
+ (if author-year citations)}
+ {\ifnumerical\else*\fi}%
+\optdef{*}{}{Alphabetical}{by all authors}
+\optdef{l}{seq-lab}{By label}%
+ {(Jones before Jones and James before Jones et al)}
+\optdef{m}{seq-labc}{By label and cite order}%
+ {(like above but all Jones et al ordered as cited)}
+\optdef{k}{seq-key}{By label and cite key}{instead of label and title, as above}
+\optdef{d}{seq-yr}{Year ordered}{and then by authors (for publication lists)}
+\optdef{r}{seq-yrr}{Reverse year ordered}{and then by authors (most recent first)}
+\optdef{c}{seq-no}{Citation order}{(unsorted, only meaningful for numericals)}
+\getans
+\endoptiongroup
+% \end{macrocode}
+% The standard \btx\ styles consider the \emph{von} part of the name to be a
+% fixed part of the surname. European usage tends to alphabetize ignoring these
+% honorifics.
+% \begin{macrocode}
+\beginoptiongroup{ORDER ON VON PART
+ (if not citation order)}
+ {\if\ans c\else*\fi}%
+\optdef{*}{}{Sort on von part}{(de la Maire before Defoe)}
+\optdef{x}{vonx}{Sort without von part}{(de la Maire after Mahone)}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% Sorting normally treats authors with the same surname but different initials
+% or first name separately; but a strict ordering by cite label would lump all
+% Smiths together.
+% \begin{macrocode}
+\beginoptiongroup{IGNORE FIRST NAMES (if author-year citations)}
+ {\ifnumerical\else*\fi}%
+\optdef{*}{}{Respect first names}{or initials, treat as different authors}
+\optdef{x}{xintls}{Sort on surname only}{and treat all Smiths as one}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Formatting author names}
+% The default is that the full names of the authors are listed, given names
+% first, unabbreviated. Of course, if only the initials have been given in
+% the \texttt{.bib} file, then that is all that can appear in the list. Other
+% possibilities are to use initials (even if full names in the \texttt{.bib}
+% file) either before or after the surnames. A specialty of the journals of
+% the American Geophysical Union is to have only the first name with
+% reversed initials.
+%
+% If the reference is part of a larger work with editors, then the editor
+% names appear later in the reference text, usually as ``edited by \dots''
+% or as ``\emph{names} (editors)''. In these cases, the editor names are
+% not usually reversed (surname first) even if the authors' names are.
+% An option is provided to format such editor names exactly as the authors'.
+% \begin{macrocode}
+\beginoptiongroup{AUTHOR NAMES:}{}
+\optdef{*}{ed-au}{Full, surname last}{(John Frederick Smith)}
+\optdef{f}{nm-revf}{Full, surname first}{(Smith, John Frederick)}
+\optdef{i}{nm-init,ed-au}{Initials + surname}{(J. F. Smith)}
+\optdef{r}{nm-rev}{Surname + initials}{(Smith, J. F.)}
+\optdef{s}{nm-rv}{Surname + dotless initials}{(Smith J F)}
+\optdef{w}{nm-rvvc}{Surname + comma + spaceless initials}{(Smith, J.F.)}
+\optdef{x}{nm-rvx}{Surname + pure initials}{(Smith JF)}
+\optdef{y}{nm-rvcx}{Surname + comma + pure initials}{(Smith, JF)}
+\optdef{z}{nm-rvv}{Surname + spaceless initials}{(Smith J.F.)}
+\optdef{a}{nm-rev1}{Only first name reversed, initials}%
+ {(AGU style: Smith, J. F., H. K. Jones)}
+\optdef{b}{nm-revv1}{First name reversed, with full names}%
+ {(Smith, John Fred, Harry Kab Jones)}
+\getans
+\endoptiongroup
+\mytempfalse
+\if\ans f\mytemptrue\fi
+\if\ans r\mytemptrue\fi
+\if\ans s\mytemptrue\fi
+\if\ans x\mytemptrue\fi
+\if\ans y\mytemptrue\fi
+\if\ans a\mytemptrue\fi
+\if\ans b\mytemptrue\fi
+\beginoptiongroup{EDITOR NAMES IN COLLECTIONS
+ (if author names reversed)}
+ {\ifmytemp*\fi}
+\if\ans r
+\optdef{*}{}{Editor names NOT reversed}{as edited by J. J. Smith}
+\fi
+\if\ans s
+\optdef{*}{}{Editor names NOT reversed}{as edited by J J Smith}
+\fi
+\if\ans a
+\optdef{*}{}{Editor names NOT reversed}{as edited by J. J. Smith}
+\fi
+\if\ans x
+\optdef{*}{}{Editor names NOT reversed}{as edited by JJ Smith}
+\fi
+\if\ans f
+\optdef{*}{}{Editor names NOT reversed}{as edited by John James Smith}
+\fi
+\if\ans y
+\optdef{*}{}{Editor names NOT reversed}{as edited by J.J. Smith}
+\fi
+\if\ans b
+\optdef{*}{}{Editor names NOT reversed}{as edited by John James Smith}
+\fi
+\optdef{r}{ed-rev}{Editor names reversed}{just like authors'}
+\getans
+\beginoptiongroup{POSITION OF JUNIOR
+ (if author names reversed)}
+ {}
+\optdef{*}{jnrlst}{Junior comes last}{as Smith, John, Jr.}
+\optdef{m}{}{Junior between}{as Smith, Jr., John}
+\getans
+\endoptiongroup
+\endoptiongroup
+
+\beginoptiongroup{JUNIOR PART IN THE CITATION
+ (if author-year citations)}
+ {\ifnumerical\else*\fi}%
+\optdef{*}{}{No `junior' part in the citations}{but in the ref listing}
+\optdef{j}{jnrlab}{`Junior' in citations}{as well as in ref listing}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{PUNCTUATION BETWEEN AUTHOR NAMES:}{}
+\optdef{*}{}{Author names separated by commas}{}
+\optdef{s}{aunm-semi}{Names separated by semi-colon}{}
+\optdef{h}{aunm-sl}{Names separated by slash}{/}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{ADJACENT REFERENCES WITH REPEATED NAMES:}{}
+\optdef{*}{}{Author/editor names always present}{}
+\optdef{d}{nmdash}{Repeated author/editor names replaced by dash}{}
+\optdef{2}{nmdash,nmd-2}{Repeated author/editor names replaced by 2 dashes}{}
+\optdef{3}{nmdash,nmd-3}{Repeated author/editor names replaced by 3 dashes}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Number of authors}
+% Normally the complete list of authors as given in the \texttt{.bib} file is
+% presented in the reference list. However, some journals prefer to limit
+% them to a maximum. If there are more than this maximum number of author
+% names, then a minimum number plus \textsl{et al.} are listed.
+%
+% Because no test for consistency of the numbers is carried out in the
+% \texttt{.bst} file itself (it might be possible, but I found it too complex),
+% this is done here.
+% \begin{macrocode}
+\beginoptiongroup{NUMBER OF AUTHORS IN BIBLIOGRAPHY:}{}
+\optdef{*}{}{All authors}{included in listing}
+\optdef{l}{nmlm}{Limited authors}{(et al replaces missing names)}
+\getans
+\endoptiongroup
+\if\ans l
+\loop
+ \ask{\num}{Maximum number of authors (1-99)}
+ \ifnum\num>99\relax
+ \mes{*** Must be between 1 and 99}
+\repeat
+\def\parsenum#1#2{\if#2\relax\wr{\spsp\spsp x#1,\pc: Maximum of #1\space authors}
+ \else\wr{\spsp\spsp x#10,x#2,\pc: Maximum of #1#2\space authors}\fi}
+\expandafter\parsenum\num\relax
+\mes{\spsp You have selected maximum \num\space authors}
+\edef\numx{\num}
+\loop
+ \ask{\num}{Minimum number (before et al given) (1-\numx)}
+ \ifnum\num>\numx
+ \mes{*** Must be between 1 and \numx}
+\repeat
+\def\parsenum#1#2{\if#2\relax\wr{\spsp\spsp m#1,\pc: Minimum of #1\space authors}
+ \else\wr{\spsp\spsp m#10,m#2,\pc: Minimum of #1#2\space authors}\fi}
+\expandafter\parsenum\num\relax
+\mes{\spsp You have selected minimum \num\space authors}
+\fi
+
+% \end{macrocode}
+%
+% Something that I finally add after being asked many times, is to allow for
+% more than one name in the citation before inserting \textsl{et~al.}
+% to allow more than 2 authors before truncating
+% \begin{macrocode}
+\beginoptiongroup{AUTHORS IN CITATIONS:}{}
+\optdef{*}{}{One author et al}{for three or more authors}
+\optdef{m}{mcite}{Some other truncation scheme}{}
+\getans
+\endoptiongroup
+\mytempfalse
+\if\ans m\mytemptrue\fi
+\beginoptiongroup{MAX AUTHORS BEFORE ET AL:
+ (if regular cite not selected)}
+ {\ifmytemp*\fi}%
+\optdef{*}{mct-1}{One et al}{}
+\optdef{2}{mct-2}{One, Two et al}{}
+\optdef{3}{mct-3}{One, Two, Three et al}{}
+\optdef{4}{mct-4}{One, Two, Three, Four et al}{}
+\optdef{5}{mct-5}{One, Two, Three, Four, Five et al}{}
+\optdef{6}{mct-6}{One, Two, Three, Four, Five, Six et al}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{MAX AUTHORS WITHOUT ET AL:
+ (if regular cite not selected)}
+ {\ifmytemp*\fi}%
+\optdef{*}{mct-x2}{Two authors without truncating}{}
+\optdef{3}{mct-x3}{Three authors}{without truncating}
+\optdef{4}{mct-x4}{Four authors}{without truncating}
+\optdef{5}{mct-x5}{Five authors}{without truncating}
+\optdef{6}{mct-x6}{Six authors}{without truncating}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Typeface of names}
+% The author names in the list of references normally appear in the current
+% typeface. This may be changed to small caps, bold, or italics.
+%
+% Alternatively, the surnames only can be formatted, with the first names in the
+% regular font. One can also specify that the words `and' and `et~al.'\ should be
+% in the regular font, or that `et~al.'\ be italic.
+%
+% Another possibility is that the names be put into a command |\bibnamefont{..}|,
+% which must be defined in the \LaTeX\ document. By default, this command does
+% not format its argument. There is also a |\bibfnamefont| command for the first
+% names, to be user-defined.
+%
+% Editor names in a collection or in a book will not normally have these
+% fonts applied to them; this may be additionally selected.
+%
+% \begin{macrocode}
+\beginoptiongroup{TYPEFACE FOR AUTHORS IN LIST OF REFERENCES:}{}
+\optdef{*}{}{Normal font for author names}{}
+\optdef{s}{nmft,nmft-sc}{Small caps authors}{(\string\sc)}
+\optdef{i}{nmft,nmft-it}{Italic authors}{(\string\it\space or \string\em)}
+\optdef{b}{nmft,nmft-bf}{Bold authors}{(\string\bf)}
+\optdef{u}{nmft,nmft-def}{User defined author font}{(\string\bibnamefont)}
+\getans
+\endoptiongroup
+\mytempfalse
+\if\ans i\mytemptrue\fi
+\if\ans s\mytemptrue\fi
+\if\ans b\mytemptrue\fi
+\if\ans u\mytemptrue\fi
+\beginoptiongroup{FONT FOR FIRST NAMES
+ (if non-default font for authors)}
+ {\ifmytemp*\fi}%
+\optdef{*}{}{First names same font as surnames}{}
+\optdef{r}{fnm-rm}{First names in normal font}{}
+\optdef{u}{fnm-def}{First names in user defined font}{(\string\bibfnamefont)}
+\getans
+\beginoptiongroup{EDITOR NAMES IN INCOLLECTION ETC:}{}
+\optdef{*}{}{Editors incollection normal font}{}
+\optdef{a}{nmfted}{Editors incollection like authors}{font}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{FONT FOR `AND' IN LIST:}{}
+\optdef{*}{}{`And' in author font}{(JONES AND JAMES)}
+\optdef{r}{nmand-rm}{`And' in normal font}{(JONES and JAMES)}
+\getans
+\endoptiongroup
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Names in Citation label}
+% This applies to author--year style only. The label is the text written
+% by the |\cite| command, and for author--year style, this is something like
+% `Daly et al.\ (1990b)'. One may select italics for the authors and for the
+% extra label attached to the year. The year always remains plain.
+%
+% This parallels the font selection for the names in the list of references
+% except that there no choice for the first names, since only surnames
+% are used in the labels. A user-defined |\citefontname| may also
+% be selected, but this \emph{must} be defined by the user since there
+% will be no default definition for it.
+%
+% If a font is selected for the cited authors, then the word `and' may be
+% optionally put in the normal font.
+%
+% It is not possible to select the type of brackets for the year, since
+% this is determined by the \LaTeX{} style option that manages the
+% author--year citations. This is not standard \LaTeX, so that there are a
+% number of private style files for achieving this.
+% \begin{macrocode}
+\beginoptiongroup{FONT OF CITATION LABELS IN TEXT
+ (if author-year citations)}
+ {\ifnumerical\else*\fi}%
+\optdef{*}{}{Cited authors plain}{as result of \string\cite\space command}
+\optdef{i}{lab,lab-it}{Cited authors italic}{}
+\optdef{s}{lab,lab-sc}{Cited authors small caps}{}
+\optdef{b}{lab,lab-bf}{Cited authors bold}{}
+\optdef{u}{lab,lab-def}{User defined citation font}{(\string\citenamefont)}
+\getans
+
+\mytempfalse
+\if\ans i\mytemptrue\fi
+\if\ans s\mytemptrue\fi
+\if\ans b\mytemptrue\fi
+\if\ans u\mytemptrue\fi
+\beginoptiongroup{FONT FOR `AND' IN CITATIONS
+ (if non-default font for citation lables)}
+ {\ifmytemp*\fi}%
+\optdef{*}{}{Cited `and' in author font}{}
+\optdef{r}{and-rm}{Cited `and' in normal font}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{FONT OF EXTRA LABEL
+ (The extra letter on the year)}{}
+\optdef{*}{}{Extra label plain}{}
+\optdef{i}{xlab-it}{Extra label italic}{}
+\getans
+\endoptiongroup
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Label for missing author names}
+%
+% If the author and/or editor is missing, the standard \texttt{.bst} files
+% use the \texttt{key} field in place of the names for purposes of ordering the
+% entries.
+%
+% For author--year styles, the \texttt{key} field is even inserted in the
+% reference list and in the label in place of the authors. Optionally, one can
+% suppress the year in this case, which causes \texttt{natbib} (version~7)
+% to print only that key text as a code designation for the work. Thus if
+% \texttt{KEY = "CS1-345"} and there are no authors, then |\citep| produces
+% (CS1-345) and |\citet| simply CS1-345. That is, they behave like
+% |\citeauthor|. If \texttt{natbib} did not recognize the blank year, one would
+% get (CS1-345, ) and CS1-345 (). (Earlier versions of \texttt{natbib} crash on
+% a blank year.)
+% \begin{macrocode}
+\beginoptiongroup{LABEL WHEN AUTHORS MISSING
+ (if author-year citations)}
+ {\ifnumerical\else*\fi}%
+\optdef{*}{keyxyr}{Year blank when KEY replaces missing author}{(for natbib 7.0)}
+\optdef{y}{}{Year included when KEY replaces missing author}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Missing date}
+% A missing date can be set to ???? or simply left blank. In the latter case,
+% \texttt{natbib} version~7 will print only the authors without any year
+% punctuation or brackets.
+%
+% \begin{macrocode}
+\beginoptiongroup{MISSING DATE
+ (if author-year citations)}
+ {\ifnumerical\else*\fi}%
+\optdef{*}{}{Missing date set to ????}{in label and text}
+\optdef{b}{blkyear}{Missing date left blank}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Position of date}
+% This applies to author--year style only. It makes sense to put the date
+% immediately after the author list, since the two items (author and year)
+% are the identifiers of the reference. Default position is at the
+% end of the references, before any notes. It is also possible to place
+% it even after the notes.
+%
+% Medical journals have a system where the date is part of the journal
+% specification, as Lancet 1994;45(2):34--40. Otherwise the date appears at
+% the end.
+% \begin{macrocode}
+\beginoptiongroup{DATE POSITION:}{}
+\optdef{*}{}{Date at end}{}
+\optdef{b}{dt-beg}{Date after authors}{}
+\optdef{j}{dt-jnl}{Date part of journal spec.}{(as 1994;45:34-40) else at end}
+\optdef{e}{dt-end}{Date at very end}{after any notes}
+\getans
+\endoptiongroup
+\if\ans b\mytemptrue\else\if\ans j\mytemptrue\else\mytempfalse\fi\fi
+% \end{macrocode}
+%
+% \subsection*{Format of date}
+% The year may be enclosed in parentheses, brackets, or preceded by a
+% colon. If none of these are selected, the date (month plus year) appears.
+% For author--year, the date normally consists only of the year, no month,
+% but this may be overridden.
+%
+% If the date comes just after the authors, then one might want special
+% punctuation following it, like a colon, or space only. The latter is
+% probably desirable if the date is brackets or parentheses.
+%
+% The date can even be put into bold face.
+% \begin{macrocode}
+\beginoptiongroup{DATE FORMAT
+ (if non author-year citations)}
+ {\ifnumerical*\fi}%
+\optdef{*}{}{Plain month and year}{without any brackets}
+\optdef{p}{yr-par}{Date in parentheses}{as (May 1993)}
+\optdef{b}{yr-brk}{Date in brackets}{as [May 1993]}
+\optdef{c}{yr-col}{Date preceded by colon}{as `: May 1993'}
+\optdef{d}{yr-per}{Date preceded by period}{as `. May 1993'}
+\optdef{m}{yr-com}{Date preceded by comma}{as `, May 1993'}
+\optdef{s}{yr-blk}{Date preceded by space}{only, as ` May 1993'}
+\getans
+\beginoptiongroup{SUPPRESS MONTH:}{}
+\optdef{*}{}{Date is month and year}{}
+\optdef{x}{xmth}{Date is year only}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{REVERSED DATE
+ (if including month)}
+ {\if\ans x\else*\fi}%
+\optdef{*}{}{Date as month year}{}
+\optdef{r}{dtrev}{Date as year month}{}
+\getans
+\endoptiongroup
+\endoptiongroup
+
+\beginoptiongroup{DATE FORMAT
+ (if author-year citations)}
+ {\ifnumerical\else*\fi}%
+\optdef{*}{}{Year plain}{without any brackets}
+\optdef{p}{yr-par}{Year in parentheses}{as (1993)}
+\optdef{b}{yr-brk}{Year in brackets}{as [1993]}
+\optdef{c}{yr-col}{Year preceded by colon}{as `: 1993'}
+\optdef{d}{yr-per}{Year preceded by period}{as `. 1993'}
+\optdef{m}{yr-com}{Date preceded by comma}{as `, 1993'}
+\optdef{s}{yr-blk}{Year preceded by space}{only, as ` 1993'}
+\getans
+\beginoptiongroup{INCLUDE MONTHS:}{}
+\optdef{*}{}{Date is year only}{without the month}
+\optdef{m}{aymth}{Include month in date}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{REVERSED DATE
+ (if including month)}
+ {\if\ans m*\fi}%
+\optdef{*}{}{Date as month year}{}
+\optdef{r}{dtrev}{Date as year month}{}
+\getans
+\endoptiongroup
+\endoptiongroup
+
+\beginoptiongroup{DATE PUNCTUATION
+ (if date not at end)}
+ {\ifmytemp*\fi}%
+\optdef{*}{}{Date with standard block punctuation}{(comma or period)}
+\optdef{c}{yrp-col}{Colon after date}{as 1994:}
+\optdef{s}{yrp-semi}{Semi-colon after date}{as 1994;}
+\optdef{p}{yrp-per}{Period after date}{even when blocks use commas}
+\optdef{x}{yrp-x}{No punct. after date}{}
+\getans
+\beginoptiongroup{BLANK AFTER DATE:}{}
+\optdef{*}{}{Space after date}{and punctuation}
+\optdef{x}{yrpp-xsp}{No space after date}{as 1994:45}
+\getans
+\endoptiongroup
+\endoptiongroup
+\beginoptiongroup{DATE FONT:}{}
+\optdef{*}{}{Date in normal font}{}
+\optdef{b}{dtbf}{Date in bold face}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% Normally in author--year citations, the \texttt{year} entry is truncated
+% to the last 4 characters, which should be the 4 digits of the year. Some
+% users have requested the possibility of suppressing this truncation so
+% that they may put text in the \texttt{year} field, such as ``in press.''
+% Another use for it is when years are given as ``1968--72''. Actually,
+% I have no idea why the year should be truncated at all.
+% \begin{macrocode}
+\beginoptiongroup{TRUNCATE YEAR
+ (if author-year citations)}
+ {\ifnumerical\else*\fi}%
+\optdef{*}{note-yr}{Year text full}{as 1990--1993 or `in press'}
+\optdef{t}{}{Year truncated}{to last 4 digits}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Article title in journal}
+% The title of an article in a journal or in a collection (a book, or
+% conference proceedings) may appear plain, in italics, within single
+% or double quotes or even in guillemets. The last is best with T1 coding; a
+% poor man's version for OT1 is provided; \LaTeXe\ is required in both cases.
+%
+% Furthermore, it may have sentence capitalization (first
+% word and word following colon) or be capitalized as in the \texttt{.bib} file
+% entry. That is why it is recommended to capitalize the entry text as it
+% should appear when fully capitalized, putting words that are always
+% capitalized in braces. Example:
+% \begin{quote}
+% |TITLE="The Results of the {Giotto} Mission"|
+% \end{quote}
+% which produces either ``The results of the Giotto mission'' or ``The
+% Results of the Giotto Mission'', depending on option.
+%
+% Additionally, the article titles may be fully suppressed.
+% \begin{macrocode}
+\beginoptiongroup{TITLE OF ARTICLE:}{}
+\optdef{*}{}{Title plain}{with no special font}
+\optdef{i}{tit-it}{Title italic}{(\string\em)}
+\optdef{q}{tit-qq,qt-s}{Title and punctuation in single quotes}{(`Title,' ..)}
+\optdef{d}{tit-qq}{Title and punctuation in double quotes}{(``Title,'' ..)}
+\optdef{g}{tit-qq,qt-g}{Title and punctuation in guillemets}{(<<Title,>> ..)}
+\optdef{x}{tit-qq,qt-s,qx}{Title in single quotes}{(`Title', ..)}
+\optdef{y}{tit-qq,qx}{Title in double quotes}{(``Title'', ..)}
+\optdef{z}{tit-qq,qt-g,qx}{Title in guillemets}{(<<Title>>, ..)}
+\getans
+\endoptiongroup
+\mytempfalse
+\if\ans q\mytemptrue\fi
+\if\ans d\mytemptrue\fi
+\if\ans g\mytemptrue\fi
+\if\ans x\mytemptrue\fi
+\if\ans y\mytemptrue\fi
+\if\ans z\mytemptrue\fi
+\beginoptiongroup{COLLECTION/PROCEEDINGS TITLES
+ (if quoted title)}
+ {\ifmytemp*\fi}%
+\optdef{*}{bt-qq}{Quote collection and proceedings titles}{too}
+\optdef{x}{}{Collection and proceedings titles not in quotes}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{CAPITALIZATION OF ARTICLE TITLE:}{}
+\optdef{*}{}{Sentence style}{(capitalize first word and those in braces)}
+\optdef{t}{atit-u}{Title style}{(just as in bib entry)}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{ARTICLE TITLE PRESENT:}{}
+\optdef{*}{}{Article title present}{in journals and proceedings}
+\optdef{x}{jtit-x}{No article title}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Journal names}
+% Abbreviated journal names normally contain periods; the periods may be
+% removed with this option. In fact, only letters, numbers, and spacing are
+% retained.
+% \begin{macrocode}
+\beginoptiongroup{JOURNAL NAMES:}{}
+\optdef{*}{}{Periods in journal names}{are retained, as `Phys. Rev.'}
+\optdef{x}{jxper}{Dotless journal names}{as `Phys Rev'}
+\getans
+\endoptiongroup
+% \end{macrocode}
+% Journal name is normally printed in italics; can be left in normal font.
+% \begin{macrocode}
+\beginoptiongroup{JOURNAL NAME FONT:}{}
+\optdef{*}{}{Journal name italics}{}
+\optdef{r}{jttl-rm}{Journal name normal}{font}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Title of Theses and Technical Reports}
+% The title of a these (PhD or Master's) is normally treated the same
+% as that of a book. Optionally, it may be formatted like that of
+% an article.
+%
+% The title of a technical report is normally treated the same as that
+% of an article. Optionally, it may be formatted like that of a book.
+%
+% \begin{macrocode}
+\beginoptiongroup{THESIS TITLE:}{}
+\optdef{*}{}{Thesis titles like books}{}
+\optdef{a}{thtit-a}{Thesis title like article}{}
+\optdef{x}{thtit-x}{No thesis title}{}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{TECHNICAL REPORT TITLE:}{}
+\optdef{*}{}{Tech. report title like articles}{}
+\optdef{b}{trtit-b}{Tech. report title like books}{}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{TECHNICAL REPORT NUMBER:}{}
+\optdef{*}{}{Tech. report and number plain}{as `Tech. Rep. 123'}
+\optdef{i}{trnum-it}{Tech. report and number italic}%
+ {as `{\string\it\space Tech. Rep. 123'}}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Journal reference}
+% Great diversity of opinion exists as to how a journal reference is to be
+% formatted. It consists of a volume, possibly a number, and page limits.
+% The number is really only necessary if the page numbers within one volume
+% start at 1 for each physical `number'. Since journals are often bound
+% together in one volume later, it makes more sense to number the pages
+% continuously through the whole volume.
+%
+% I am only aware of one journal that used to reset the pagination for each
+% `number', in which case the number was part of the page designation.
+% I had erroneously provided an option \texttt{vnum-pg} to achieve this, but I
+% now realize that instead, for this one journal, the database entries must
+% contain \texttt{pages="(2)33--2(55)"}. This option has been removed at
+% version 3.84.
+%
+% A number of styles for journal specifications are
+% \begin{quote}
+% \begin{tabular}{l@{\qquad}l}
+% 21(2):33--55 & 21, no.\ 2: 33--55\\
+% \textbf{21}(2):33--55 & \textbf{21}, \#2, 33--55\\
+% \textit{21}(2), 33--55 & \textit{21} (2); 33--55 \\
+% 21(2) (1995) 33--55 & 21(1995), 33-55\\
+% 21(2) 33--55 & vol.~21 (2), pp.~33--55
+% \end{tabular}
+% \end{quote}
+%
+% Here both start and stop page numbers have been given; often only the
+% start page is wanted.
+%
+% It is also possible to include the year as part of the journal specification,
+% in which case the year is always in parentheses, attached snugly or with space
+% to the volume, or preceding the pages.
+%
+% \begin{macrocode}
+\beginoptiongroup{JOURNAL VOLUME:}{}
+\optdef{*}{}{Volume plain}{as vol(num)}
+\optdef{i}{vol-it}{Volume italic}{as {\string\em\space vol}(num)}
+\optdef{b}{vol-bf}{Volume bold}{as {\string\bf\space vol}(num)}
+\optdef{d}{vol-2bf}{Volume and number bold}{as {\string\bf\space vol(num)}}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% The form of the `number' is also given: in parentheses, with `no.',
+% with \#, or omitted. The \texttt{vnum-b} option is meant to be used
+% with \texttt{jdt-v} and \texttt{jdt-vs} but could be used alone.
+% \begin{macrocode}
+\beginoptiongroup{JOURNAL VOL AND NUMBER:}{}
+\optdef{*}{}{Journal vol(num)}{as 34(2)}
+\optdef{s}{vnum-sp}{Journal vol (num)}{as 34 (2)}
+\optdef{c}{vnum-cm}{Journal vol, num}{as 34, 2}
+\optdef{n}{vnum-nr}{Journal vol, no. num}{as 34, no. 2}
+\optdef{h}{vnum-h}{Journal vol, \string\# number}{as 34, \string\#2}
+\optdef{b}{vnum-b}{Journal vol number}{as 34 2}
+\optdef{x}{vnum-x}{Journal vol, without number}{as 34}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{VOLUME PUNCTUATION:}{}
+\optdef{*}{}{Volume with colon}{as vol(num):ppp}
+\optdef{s}{volp-sp}{Volume with colon and space}{as vol(num): ppp}
+\optdef{h}{volp-semi}{Volume with semi-colon}{as vol(num); ppp}
+\optdef{c}{volp-com}{Volume with comma}{as vol(num), ppp}
+\optdef{b}{volp-blk}{Volume with blank}{as vol(num) ppp}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{YEAR IN JOURNAL SPECIFICATION:}{}
+\optdef{*}{}{Journal year like others}{as given by date position}
+\optdef{v}{jdt-v}{Journal vol(year)}{as 34(1995)}
+\optdef{s}{jdt-vs}{Journal vol (year)}{as 34 (1995)}
+\optdef{p}{jdt-p}{Year with pages}{as 34(2), (1995) 1345--1387}
+\optdef{c}{jdt-pc}{Year, comma, pages}{as 34(2), (1995), 1345--1387}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{PAGE NUMBERS:}{}
+\optdef{*}{}{Start and stop page numbers}{given}
+\optdef{f}{jpg-1}{Only start page number}{}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{LARGE PAGE NUMBERS:}{}
+\optdef{*}{}{No separators for large page numbers}{}
+\optdef{c}{pgsep-c}{Comma inserted over 9999}{as 11,234}
+\optdef{s}{pgsep-s}{Thin space inserted over 9999}{as 11 234}
+\optdef{p}{pgsep-p}{Period inserted over 9999}{as 11.234}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{WORD `PAGE' IN ARTICLES:}{}
+\optdef{*}{}{Article pages numbers only}{as 234-256}
+\optdef{p}{jwdpg}{Include `page' in articles}{as pp. 234--256}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% Some journals want page numbers at the end, even for books, proceedings, as
+% well as for journals.
+% \begin{macrocode}
+\beginoptiongroup{POSITION OF PAGES:}{}
+\optdef{*}{}{Pages given mid text}{as is normal}
+\optdef{e}{pp-last}{Pages at end}{but before any notes}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{WORD `VOLUME' IN ARTICLES:}{}
+\optdef{*}{}{Article volume as number only}{as 21}
+\optdef{p}{jwdvol}{Include `volume' in articles}{as vol. 21}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% Fiddle with the format and location of the number/series for collections and
+% inproceedings.
+% \begin{macrocode}
+\beginoptiongroup{NUMBER AND SERIES FOR COLLECTIONS:}{}
+\optdef{*}{num-xser}{Allows number without series}{and suppresses word "number"}
+\optdef{s}{}{Standard BibTeX}{as: "number 123 in Total Works"; error if number and no series}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{POSITION OF NUMBER AND SERIES:}{}
+\optdef{*}{}{After chapter and pages}{as in standard BibTeX}
+\optdef{t}{numser}{Just before publisher}{or organization}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% Fiddle with the format and location of series and volume with books and collections.
+% \begin{macrocode}
+\beginoptiongroup{VOLUME AND SERIES FOR BOOKS/COLLECTIONS:}{}
+\optdef{*}{}{Vol. 23 of Series}{as in standard BibTeX}
+\optdef{s}{ser-vol}{Series, vol. 23}{}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{POSITION OF VOLUME AND SERIES FOR INCOLLECTIONS:}{}
+\optdef{*}{}{Series and volume after the editors}{}
+\optdef{e}{ser-ed}{Series and volume after booktitle}{and before editors}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% It is possible to decide whether the journal name should be
+% separated from the following specifications with a blank or comma.
+% \begin{macrocode}
+\beginoptiongroup{JOURNAL NAME PUNCTUATION:}{}
+\optdef{*}{}{Comma after journal}{name}
+\optdef{x}{jnm-x}{Space after journal}{name}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Books}
+% The title of a book (as opposed to an article in a book or journal) is
+% normally italicized. This may be set to the regular font.
+%
+% The page numbers in books may be set in parentheses, as (pp.\ 345--350).
+% \begin{macrocode}
+\beginoptiongroup{BOOK TITLE:}{}
+\optdef{*}{}{Book title italic}{(\string\em)}
+\optdef{p}{btit-rm,bt-rm}{Book title plain}{(no font command)}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{PAGES IN BOOKS:}{}
+\optdef{*}{}{Pages in book plain}{as pp. 50-55}
+\optdef{p}{bkpg-par}{Pages in book in parentheses}{as (pp. 50-55)}
+\optdef{x}{bkpg-x}{Pages in book bare}{as 50-55}
+\getans
+\endoptiongroup
+\beginoptiongroup{TOTAL PAGES OF A BOOK:}{}
+\optdef{*}{}{Total book pages not printed}{}
+\optdef{p}{pg-bk}{For book: 345 pages}{or pp.}
+\optdef{a}{pg-bk,pg-pre}{Total book pages before publisher}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+% Some psychology journals wish to have the publisher's address preceding
+% the name, separated by colon, as
+% \begin{quote}New York: Wiley and Sons\end{quote}
+%
+% Some journals (e.g.\ Nature) put publisher in parentheses with date,
+% as (Wiley and Sons, New York, 1983). These normally put the date in
+% parentheses at the end anyway, so this is a merging of the two sets of
+% parentheses.
+% \begin{macrocode}
+\beginoptiongroup{PUBLISHER ADDRESS:}{}
+\optdef{*}{}{Publisher, address}{as Harcourt, New York}
+\optdef{a}{add-pub}{Address: Publisher}{as New York: Harcourt}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{PUBLISHER IN PARENTHESES:}{}
+\optdef{*}{}{Publisher as normal block}{without parentheses}
+\optdef{p}{pub-par}{Publisher in parentheses}{}
+\optdef{d}{pub-date}{Publisher and date in parentheses}{(Oxford, 1994)}
+\optdef{c}{pub-date,pub-xc}{Publisher and date in parentheses, no comma}{(Oxford 1994)}
+\optdef{f}{pub-date,pub-xpar}{Publisher and date without parentheses}{Oxford, 1994}
+\optdef{k}{pub-date,pub-xpar,pub-xc}{Publisher and date, no parentheses, no comma}{Oxford 1994}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{PUBLISHER POSITION:}{}
+\optdef{*}{}{Publisher after chapter, pages}{}
+\optdef{p}{pre-pub}{Publisher before chapter, pages}{}
+\optdef{e}{pre-edn}{Publisher after edition}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{ISBN, ISSN, DOI numbers}
+% Books normally possess an ISBN number. This may be included as an
+% optional entry for \texttt{book}, \texttt{inbook}, \texttt{booklet},
+% \texttt{incollection}, \texttt{proceedings}, \texttt{inproceedings}.
+% However, it should be suppressed for \texttt{inbook} etc.\ when
+% there is a crossref to another book with the ISBN number.
+%
+% Periodicals contain an ISSN number. Add this to \texttt{article}, or
+% course, but also to \texttt{inproceedings} and \texttt{proceedings}, since
+% they are sometimes printed in a periodical.
+%
+% Journal articles that appear online are given a DOI number, something more
+% robust than a URL that can change as machines are upgraded.
+% The American Geophysical Union (AGU) uses the DOI as part of the
+% page number substitution for electronic journals, placing the number
+% where the pages would normally appear.
+% \begin{macrocode}
+\beginoptiongroup{ISBN NUMBER:}{}
+\optdef{*}{isbn}{Include ISBN}{for books, booklets, etc.}
+\optdef{x}{}{No ISBN}{}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{ISSN NUMBER:}{}
+\optdef{*}{issn}{Include ISSN}{for periodicals}
+\optdef{x}{}{No ISSN}{}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{DOI NUMBER:}{}
+\optdef{*}{doi}{Include DOI}{as "doi: number"}
+\optdef{u}{url-doi}{Format DOI as URL //dx.doi.org/doi}{(must give url options!)}
+\optdef{a}{agu-doi,doi}{Insert DOI AGU style}{as part of page number}
+\optdef{x}{}{No DOI}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Editor of book without author}
+%
+% This is normally
+% \begin{quote}
+% J. K. James, editor
+% \end{quote}
+% but may also be
+% \begin{quote}
+% J. K. James, (editor)\\
+% J. K. James (editor),
+% \end{quote}
+% Alternatively, the word \textsl{editor} may be capitalized and/or
+% abbreviated.
+%
+% \begin{macrocode}
+\beginoptiongroup{`EDITOR' AFTER NAMES (EDITED BOOKS WITHOUT AUTHORS):}{}
+\optdef{*}{}{Word `editor' after name}{}
+\optdef{a}{edpar}{`Name (editor),'}{in parentheses, after name, comma after}
+\optdef{b}{edpar,bkedcap}{`Name (Editor),'}{as above, editor upper case}
+\optdef{c}{edparc}{`Name, (editor)'}{in parentheses, after name, comma between}
+\optdef{d}{edparc,bkedcap}{`Name, (Editor)'}{as above, editor upper case}
+\optdef{e}{edparxc}{`Name (editor)'}{in parentheses, after name, no commas}
+\optdef{f}{edparxc,bkedcap}{`Name (Editor)'}{as above, editor upper case}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Edited by}
+% For an article within an edited collection, the normal form is
+% \begin{quote}
+% In J. K. James, editor, \emph{Title of Collection} \dots
+% \end{quote}
+% Alternative forms are
+% \begin{quote}
+% In J. K. James (editor), \emph{Title} \dots\\
+% In \emph{Title}, edited by J. K. James \dots\\
+% In \emph{Title} (Edited by J. K. James) \dots
+% \end{quote}
+% If none of the \texttt{edby} variations is used, then the same system is
+% used as for edited books, i.e. \texttt{edpar} applies.
+% \begin{macrocode}
+\beginoptiongroup{EDITOR IN COLLECTIONS:}{}
+\optdef{*}{}{Same as for edited book}{(names before booktitle)}
+\optdef{b}{edby}{In booktitle, edited by .. }{(where .. is names)}
+\optdef{p}{edby-par}{In booktitle (edited by ..)}{}
+\optdef{c}{edby-parc}{In booktitle, (edited by ..)}{}
+\optdef{e}{edby,edbyx}{In booktitle, editor ..}{}
+\optdef{f}{edby,edbyw}{In booktitle, (editor) ..}{}
+\optdef{k}{edby-par,edbyx}{In booktitle (editor..)}{}
+\optdef{g}{edby-parc,edbyx}{In booktitle, (editor..)}{}
+\optdef{j}{edby,edbyy}{In booktitle, .., editor}{}
+\optdef{m}{edby-par,edbyy}{In booktitle (.., editor)}{}
+\getans
+\endoptiongroup
+\mytempfalse
+\if\ans p\mytemptrue\fi
+\if\ans k\mytemptrue\fi
+\if\ans c\mytemptrue\fi
+\if\ans f\mytemptrue\fi
+\beginoptiongroup{CAPITALIZE `EDITOR' OR `EDITED BY'
+ (if editor capitalizable)}
+ {\ifmytemp*\fi}%
+\optdef{*}{}{`(editor,..)' or `(edited by..)'}{in lower case}
+\optdef{c}{edcap}{`(Editor,..)' or `(Edited by..)'}{in upper case}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Block punctuation}
+% Blocks are logical sections of the reference specification, such as the
+% author block, the journal block, editor block, etc. These are normally
+% separated by periods, but alternatively a comma may be used. Another
+% choice is to use commas except after titles where a period is given.
+%
+% \LaTeX\ offers an \texttt{openbib} option, which means that the blocks
+% are not only new sentences, but new lines as well. This can only
+% function when the default option here is taken, for then the command
+% |\newblock| is placed between the blocks. This command is normally
+% defined to do nothing, but \LaTeX\ redefines it to issue a new line
+% when open bibliographies are wanted.
+% \begin{macrocode}
+\beginoptiongroup{PUNCTUATION BETWEEN SECTIONS (BLOCKS):}{}
+\optdef{*}{}{\string\newblock\space after blocks}
+ {(periods or new lines with openbib option)}
+\optdef{c}{blk-com}{Comma between blocks}{}
+\optdef{s}{blk-com,com-semi}{Semi-colon between blocks}{}
+\optdef{b}{blk-com,com-blank}{Blanks between blocks}{}
+\optdef{t}{blk-tit}{Period after titles of articles, books, etc}{else commas}
+\optdef{u}{blk-tit,tit-col}{Colon after titles of articles, books, etc}{else commas}
+\optdef{a}{blk-tita}{Period after titles of articles}{else commas}
+\optdef{d}{blk-tita,tit-col}{Colon after titles of articles}{else commas}
+\getans
+\endoptiongroup
+\mytempfalse
+\if\ans c\mytemptrue\fi
+\if\ans s\mytemptrue\fi
+\if\ans b\mytemptrue\fi
+\if\ans t\mytemptrue\fi
+\if\ans a\mytemptrue\fi
+\beginoptiongroup{PUNCTUATION BEFORE NOTES
+ (if not using \string\newblock)}
+ {\ifmytemp*\fi}%
+\optdef{*}{}{Notes have regular punctuation}{like all other blocks}
+\optdef{p}{blknt}{Notes preceded by period}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{PUNCTUATION AFTER AUTHORS:}{}
+\optdef{*}{}{Author block normal}{with regular block punctuation}
+\optdef{c}{au-col}{Author block with colon}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{\textsl{In} with colon}
+% When referring to works in a collection, one begins the block describing
+% that collection with \textsl{In}. Optionally, one may add a colon.
+% \begin{macrocode}
+\beginoptiongroup{PUNCTUATION AFTER `IN':}{}
+\optdef{*}{}{Space after `in'}{for incollection or inproceedings}
+\optdef{c}{in-col}{Colon after `in'}{(as `In: ...')}
+\optdef{i}{in-it}{Italic `in'}{and space}
+\optdef{d}{in-col,in-it}{Italic `in' and colon}{}
+\optdef{x}{in-x}{No word `in'}{for edited works}
+\getans
+\endoptiongroup
+\beginoptiongroup{`IN' WITH JOURNAL NAMES
+ (if using 'in' with collections)}
+ {\if\ans x\else*\fi}
+\optdef{*}{}{No `in' before journal name}{}
+\optdef{i}{injnl}{Add `in' before journal name}{in style for incollection}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Final punctuation}
+% The punctuation at the end of the reference is normally a period. This
+% may be suppressed.
+% \begin{macrocode}
+\beginoptiongroup{FINAL PUNCTUATION:}{}
+\optdef{*}{}{Period at very end}{of the listed reference}
+\optdef{x}{fin-bare}{No period at end}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Abbreviations}
+% A number of words may be abbreviated: pages, editors, volume, chapter,
+% and so on. The first two may be independently set to abbreviation, the
+% rest with a single option.
+%
+% Additionally, the edition numbers may be
+% output as words (first, second, etc.) or as numbers (1st, 2nd, etc.).
+% (Recall that the input in the \texttt{.bib} file is always as English
+% words.)
+% \begin{macrocode}
+\beginoptiongroup{ABBREVIATE WORD `PAGES'
+ (if not using external language file)}
+ {\if!\cfile!\relax*\fi}%
+\optdef{*}{}{`Page(s)'}{(no abbreviation)}
+\optdef{a}{pp}{`Page' abbreviated}{as p. or pp.}
+\optdef{x}{ppx}{`Page' omitted}{}
+\getans
+\beginoptiongroup{ABBREVIATE WORD `EDITORS':}{}
+\optdef{*}{}{`Editor(s)'}{(no abbreviation)}
+\optdef{a}{ed}{`Editor' abbreviated}{as ed. or eds.}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of volume, edition, chapter, etc}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATION FOR `EDITION'
+ (if abbreviating words)}
+ {\if\ans a*\fi}%
+\optdef{*}{}{`Edition' abbreviated as `edn'}{}
+\optdef{a}{ednx}{`Edition' abbreviated as `ed'}{}
+\getans
+\beginoptiongroup{MONTHS WITH DOTS:}{}
+\optdef{*}{}{Months with dots}{as Jan.}
+\optdef{x}{mth-bare}{Months without dots}{as Feb Mar}
+\getans
+\endoptiongroup
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as first, second, third, etc}
+\optdef{n}{ord}{Numerical editions}{as 1st, 2nd, 3rd, etc}
+\getans
+\endoptiongroup
+\endoptiongroup
+% \end{macrocode}
+%
+% The above choices about abbreviations are made only if the internal
+% languages are taken (English or \texttt{babel}). For an external language
+% definition file, these choices, along with possible other ones, are made
+% in the external file, which is read in at this point.
+% \begin{macrocode}
+\umes{Reading external language file \string\cfile=\cfile}%
+\if!\cfile!\relax\else
+ \input\cfile
+\fi
+% \end{macrocode}
+%
+% This file contains the standard set of stored journal names present in
+% the basic bibliography style files. If other files containing journal
+% names are to be included, they may only contain the options \texttt{jabr}
+% or \texttt{jaa} since these options are selected here. No option
+% menus from the journal-name files will be read in.
+% \begin{macrocode}
+\beginoptiongroup{STORED JOURNAL NAMES:}{}
+\optdef{*}{}{Full journal names}{for prestored journals}
+\optdef{a}{jabr}{Abbreviated journal names}{}
+\optdef{s}{jabr,jaa}{Abbreviated with astronomy shorthands}{like ApJ and AJ}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Variations on \textsl{and}}
+% It is possible to replace the word \textsl{and} with an ampersand \&, and to
+% specify whether a comma is to precede \textsl{and} in a list of more than two
+% names.
+%
+% A variable \textsl{and} may be provided for with the command |\BIBand|
+% in place of the word. In this case, the command must be defined in the
+% document file or some other package called. (This is intended for situations
+% where an ampersand is wanted in parenthetical citations, but the word in
+% textual ones.)
+%
+% \begin{macrocode}
+\beginoptiongroup{AMPERSAND:}{}
+\optdef{*}{}{Use word `and'}{in author lists}
+\optdef{a}{amper}{Use ampersand}{in place of `and'}
+\optdef{v}{varand}{Use \string\BIBand}{in place of `and'}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{COMMA BEFORE `AND':}{}
+\optdef{*}{}{Comma before `and'}{as `Tom, Dick, and Harry'}
+\optdef{n}{and-xcom}{No comma before `and'}{as `Tom, Dick and Harry'}
+\optdef{c}{and-com}{Comma even with 2 authors}{as `Tom, and Harry'}
+\getans
+\endoptiongroup
+\beginoptiongroup{COMMA BEFORE `AND' EVEN FOR COLLECTION EDITORS
+ (if using comma before `and' with authors)}
+ {\if\ans c*\fi}%
+\optdef{*}{and-com-ed}{Comma with 2 editors}{in collections}
+\optdef{x}{}{Two editors without comma}{as `Tom and Harry'}
+\getans
+\endoptiongroup
+\beginoptiongroup{NO `AND' IN REFERENCE LIST:}{}
+\optdef{*}{}{With `and'}{before last author in reference list}
+\optdef{x}{xand}{No `and'}{as `Tom, Dick, Harry'}
+\getans
+\endoptiongroup
+
+\beginoptiongroup{COMMA BEFORE `ET AL':}{}
+\optdef{*}{}{Comma before `et al'}{in reference list}
+\optdef{x}{etal-xc}{No comma before `et al'}{}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Font of \textsl{et al}}
+% One can chose that \textsl{et~al.}\ be put into italics.
+% Or, if the authors are in a different font from the regular one, the
+% \textsl{et~al.}\ can still be Roman.
+% \begin{macrocode}
+\beginoptiongroup{FONT OF `ET AL':}{}
+\optdef{*}{}{Plain et al}{}
+\optdef{i}{etal-it}{Italic et al}{}
+\optdef{r}{etal-rm}{Roman et al}{even when authors something else}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Additional Data Fields}\label{sec:revtex}
+% \changes{3.89d1}{1999 July 20}{AO: add the revdata option group}
+% The American Physical Society's REV\TeX\ package contains \btx\ support
+% with a \texttt{bst} file generated from a variant of
+% \texttt{\filename}. The extra fields are also available here.
+% \begin{itemize}
+% \item \textbf{collaboration}: A collaboration name associated with a
+% reference.
+% \item \textbf{eprint}: The e-print citation for the reference (Los Alamos
+% or otherwise). E-print numbers can be turned into hyperlinks to the
+% online article. The output is\\
+% \hspace*{2em}|\eprint{|\textit{eprint-spec}|}|
+% \item \textbf{archive}: is an optional argument for |\eprint|, as\\
+% \hspace*{2em}|\eprint[|\textit{archive-des}|]{|\textit{eprint-spec}|}|\\
+% The \textit{archive-des} is some code such as \texttt{arXiv} that is
+% translated to a base URL by a class or package file. The default definition
+% of |\eprint| ignores \textit{archive-des} and prints \textit{eprint-spec}
+% as a URL.
+% \item \textbf{url}: A URL associated with the reference. Can be turned
+% into a hyperlink.
+% \end{itemize}
+%
+% A collaboration appears as part of the author list and the other two
+% appear at the end of the citaton. The URL field can be selected
+% independently of this option.
+%
+% In addition there are new fields for journals like Phys.\ Rev.~D that
+% no longer use page numbers.
+% \begin{itemize}
+% \item \textbf{eid}: Electronic article identifier.
+% \item \textbf{numpages}: Number of pages in an article. For use in
+% conjunction with the \textbf{eid} field when page counts are
+% desired. Deprecated when submitting to Phys.\ Rev.
+%
+% The \texttt{eprint} (with \texttt{archive}) and \texttt{url} fields may be
+% included independently of the other REV\TeX\ fields.
+%
+% The \texttt{eid} field is now always included, although it is optional for
+% the bibliography entries. This electronic identifier is a replacement for the
+% page number in electronic journals: it is the sequence number in the printed
+% volume. If present, it will be used in place of the page number.
+%
+% \end{itemize}
+%
+% \begin{macrocode}
+\beginoptiongroup{ADDITIONAL REVTeX DATA FIELDS:}{}
+\optdef{*}{}{No additional fields}{for REVTeX}
+\optdef{r}{revdata,eprint,url,url-blk}{Include REVTeX data fields}
+ {collaboration, eid, eprint, archive, numpages, url}
+\getans
+\mytemptrue
+\if\ans r\mytempfalse\fi
+\beginoptiongroup{E-PRINT DATA FIELD:
+(without REVTeX fields)}
+{\ifmytemp*\fi}
+\optdef{*}{}{Do not include eprint field}{}
+\optdef{e}{eprint}{Include eprint and archive fields}{for electronic publications}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{URL address}
+% For electronic documents with an Internet address, add a URL entry.
+% Harvard already has this, but here it is done for all styles.
+% The URL text will be set with the \verb!\url! command in the \texttt{url}
+% package by Donald Arseneau. This package must be loaded for the command
+% to work right. It allows line breaks at punctuations. Otherwise,
+% \verb!\texttt! is used instead, with no line breaks. The URL text is preceded
+% by \verb!\urlprefix! which defaults to ``URL '' but may be redefined by the
+% user to be whatever s/he wants. The final space must be included.
+%
+% Note: selecting the REV\TeX\ fields automatically includes this, so the
+% offer only is made if REV\TeX\ has been rejected.
+%
+% \begin{macrocode}
+\beginoptiongroup{URL ADDRESS:
+(without REVTeX fields)}{\ifmytemp*\fi}
+\optdef{*}{}{No URL}{for electronic (Internet) documents}
+\optdef{u}{url,url-blk}{Include URL}{as regular item block}
+\optdef{n}{url,url-nt}{URL as note}{}
+\optdef{l}{url,url-nl}{URL on new line}{after rest of reference}
+\getans
+\endoptiongroup
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Reference Component Tagging}
+% \changes{3.89d1}{1999 July 20}{AO: add the bibinfo option group}
+% If reference component tagging is enabled, we
+% apply tags like |\bibinfo| and |\eprint| to the fields of data
+% in the content of the |\bibitem| statement. We also ensure that
+% these commands have a default meaning within the scope of the |thebibliography|
+% environment. The default definitions simply print the field and ignore the
+% tag. However, other programs or packages might make use of the tag
+% information to separate authors from title, for example.
+%
+% \begin{macrocode}
+\beginoptiongroup{REFERENCE COMPONENT TAGS:}{}
+\optdef{*}{}{No reference component tags}
+ {in the \string\bibitem\space entries}
+\optdef{b}{bibinfo}{Reference component tags}
+ {like \string\bibinfo\space in the content of \string\bibitem}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Define emphasis}
+% In everything that been mentioned so far, italicization should be
+% understood to mean `emphasize' in the \LaTeX{} sense. This means that the
+% command |\em| is used. This is not the same as |\it|, which is always
+% italics. Rather, with |\em|, the font style switches between |\rm| and
+% |\it| depending on the context. Here one may choose to true italics, or
+% to switch off italics altogether.
+% \begin{macrocode}
+\beginoptiongroup{EMPHASIS:
+ (affects all so-called italics)}{}
+\optdef{*}{}{Use emphasis}{ie, \string\em, allows font switching}
+\optdef{i}{em-it}{Use true italics}{ie, \string\it, absolute italics}
+\optdef{x}{em-x}{No italics}{at all}
+\optdef{u}{em-ul}{Underlining}{in place of italics, best with ulem package}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% \subsection*{Plain \TeX\ compatibility}
+% Bold face, italics, and emphasis are made with the \LaTeXe\ commands,
+% which makes them incompatible with the obsolete \LaTeX2.09, and with
+% Plain \TeX. There are also some extra testing for existing commands
+% that best work with \LaTeXe\ syntax.
+%
+% If the bibliography style file is to be fully compatible with Plain \TeX,
+% do not select the option \texttt{nfss} but do take \texttt{plntx}.
+% \begin{macrocode}
+\beginoptiongroup{COMPATIBILITY WITH PLAIN TEX:}{}
+\optdef{*}{nfss}{Use LaTeX commands}{which may not work with Plain TeX}
+\optdef{t}{plntx}{Use only Plain TeX}{commands for fonts and testing}
+\getans
+\endoptiongroup
+% \end{macrocode}
+%
+% Terminate the options list. If a language definition file has been called,
+% then we have a closing brace too many, so add another dummy opening brace.
+% \begin{macrocode}
+\if!\cfile\jfile!\else
+\begingroup\MBswitch
+\wr(,{\pc)
+\endgroup
+\fi
+
+\endoptions
+%</options>
+% \end{macrocode}
+% \StopEventually{\PrintChanges}
+%
+% \section{The Bibliographic Coding}
+%
+% \begin{macrocode}
+%<*!options&!driver&!bblbst>
+%<*!tail>
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+%<*(!nmft&(nmft-it|nmft-sc|nmft-bf|nmft-def))|(!lab&(lab-it|lab-bf|lab-sc|lab-def))>
+ % WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+ % The input dbj file contains one of the options
+%<nmft-it|nmft-sc|nmft-bf|nmft-def> % nmft-it, nmft-bf, nmft-sc, or nmft-def
+%<lab-it|lab-sc|lab-bf|lab-def> % lab-it, lab-bf, lab-sc, or lab-def
+ % without the corresponding general option(s):
+%<nmft-it|nmft-sc|nmft-bf|nmft-def> % nmft
+%<lab-it|lab-sc|lab-bf|lab-def> % lab
+ % (You may be using an older dbj with a newer version of merlin.mbs)
+ % Please edit your dbj file to add the general option(s) and reprocess.
+ %
+%</(!nmft&(nmft-it|nmft-sc|nmft-bf|nmft-def))|(!lab&(lab-it|lab-bf|lab-sc|lab-def))>
+%<*!exlang>
+%<!babel> % This bibliography style file is intended for texts in ENGLISH
+%<*babel>
+ % This bibliography style file requires a file named babelbst.tex
+ % containing the definitions of word commands like \bbleditor, etc.
+%</babel>
+%</!exlang>
+%<*exlang>
+ % This bibliography style file is intended for texts in
+%<bahasa> % BAHASA
+%<brazilian> % BRAZILIAN
+%<catalan> % CATALAN
+%<croatian> % CROATIAN
+%<czech> % CZECH
+%<danish> % DANISH
+%<dansk> % DANSK
+%<dutch> % DUTCH
+%<english> % ENGLISH
+%<esperanto> % ESPERANTO
+%<finnish> % FINNISH
+%<french> % FRENCH
+%<galacian> % GALACIAN
+%<german> % GERMAN
+%<hungarian> % HUNGARIAN
+%<italian> % ITALIAN
+%<norwegian> % NORWEGIAN
+%<norsk> % NORWEGIAN
+%<polski> % POLISH
+%<polish> % POLISH
+%<portuguese> % PORTUGUESE
+%<romanian> % ROMANIAN
+%<russian> % RUSSIAN
+%<slovak> % SLOVAK
+%<slovenian> % SLOVENIAN
+%<slovene> % SLOVENIAN
+%<spanish> % SPANISH
+%<swedish> % SWEDISH
+%<turkish> % TURKISH
+%</exlang>
+%<*!html>
+%<*ay>
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+%<*alk>
+ % or: apalike.sty by Oren Patashnik
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al., 1990]{key}...
+%</alk>
+%<*!(har|ast|alk|cay|nmd|cn)>
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+%<nat> % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+%<nat> % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+%<nat> % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+%<nat> % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., 1990, p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+%<nat> % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+%</!(har|ast|alk|cay|nmd|cn)>
+%<*har>
+ % or: harvard.sty by Peter Williams and Thorsten Schnier
+%<harnm> % (needs natbib v5.3 or harvard v2.0.3)
+ % The form of the bibitem entries is
+ % \harvarditem[Jones et al.]{Jones, Baker, and Smith}{1990}{key}...
+%</har>
+%<*cay>
+ % or: chicago.sty
+ % The form of the bibitem entries is
+ % \bibitem[\protect\citeauthoryear{Jones, Baker, and Smith}
+ % {Jones et al.}{1990}{key}...
+%</cay>
+%<*nmd>
+ % or: named.sty
+ % The form of the bibitem entries is
+ % \bibitem[\protect\citeauthoryear{Jones et al.}{1990}]{key}...
+%</nmd>
+%<*ast>
+ % or: astron.sty
+ % The form of the bibitem entries is
+ % \bibitem[\protect\astroncite{Jones et al.}{1990}]{key}...
+%</ast>
+%<*cn>
+ % or: authordate1-4.sty
+ % The form of the bibitem entries is
+ % \bibitem[\protect\citename{Jones et al.}1990]{key}...
+%</cn>
+%</ay>
+%<*!ay>
+%<*!alph&!cite>
+ % This is a numerical citation style, and as such is standard LaTeX.
+%</!alph&!cite>
+%<*alph>
+ % This is a labelled citation style similar to the standard alpha.bst,
+ % where labels are of the form Dal90 or DBK89.
+%</alph>
+%<*cite&!alph>
+ % This is a special pseudo-numerical bibliography style, intended to be
+ % used to list all the entries in a bib database
+%</cite&!alph>
+ % It requires no extra package to interface to the main text.
+ % The form of the \bibitem entries is
+%<!alph&!cite> % \bibitem{key}...
+%<alph> % \bibitem[label]{key}...
+%<!alph&cite> % \bibitem[key]{key}...
+%<*!cite|alph>
+ % Usage of \cite is as follows:
+%<*!alph&!cite>
+ % \cite{key} ==>> [#]
+ % \cite[chap. 2]{key} ==>> [#, chap. 2]
+ % where # is a number determined by the ordering in the reference list.
+%</!alph&!cite>
+%<*alph>
+ % \cite{key} ==>> [label]
+ % \cite[chap. 2]{key} ==>> [label, chap. 2]
+ % The order in the reference list is by label.
+%</alph>
+%<*seq-no&!alph>
+ % The order in the reference list is that by which the works were originally
+ % cited in the text, or that in the database.
+%</seq-no&!alph>
+%<*!seq-no&!alph>
+ % The order in the reference list is alphabetical by authors.
+%</!seq-no&!alph>
+%</!cite|alph>
+%</!ay>
+%</!html>
+%<*html>
+ % This bibliographic style file produces HTML output instead of LaTeX.
+ % The LaTeX special characters are not translated, so that the output
+ % (which has the .bbl ending still) will have to be further massaged,
+ % and renamed with .html or .htm. The title and heading may also need
+ % to be revised.
+ %
+%<htlist&!htdes> % The output is a numbered list.
+%<htdes> % The output is an unnumbered list with the keys printed
+%<htdes> % before each entry.
+%<!htlist&!htdes> % The output is lists each entry as one paragraph.
+%</html>
+ %---------------------------------------------------------------------
+
+% \end{macrocode}
+%
+% \begin{macro}{`ENTRY'}
+% \changes{1.5(2.3)}{1994 Sep 16}{Add URL entry type for \texttt{harnm} option}
+% The new \texttt{harvard.sty} of \LaTeXe{} includes an entry URL, or
+% rather it is included in the new \texttt{.bst} files for it. Add it
+% here too, but only for option \texttt{harnm}.
+%
+% \changes{3.0}{1995 Mar 1}{Add optional entries \texttt{isbn}}
+% Books normally have an ISBN number.
+% This entry is (optionally) included, modelled after that in
+% \texttt{xbtxbst.doc}.
+% \changes{3.89d1}{1999 July 20}{AO: add the \texttt{revdata} data}
+%
+% \begin{macrocode}
+ENTRY
+ { address
+%<annote> annote
+%<eprint> archive
+ author
+ booktitle
+ chapter
+%<revdata> collaboration
+%<doi|url-doi> doi
+ edition
+ editor
+ eid
+%<eprint> eprint
+ howpublished
+ institution
+%<isbn> isbn
+%<issn> issn
+ journal
+ key
+%<lang> language
+ month
+ note
+ number
+%<revdata> numpages
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+%<url|harnm|revdata> url
+ volume
+ year
+ }
+ {}
+%<!ay&!alph> { label }
+%<!ay&alph> { label extra.label sort.label }
+%<ay> { label extra.label sort.label short.list }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+% \end{macrocode}
+%
+% \begin{macro}{`init.state.consts'}
+% \begin{macrocode}
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+% \end{macrocode}
+% \end{macro}
+%
+% |s| and |t| are general-purpose scratch registers whose value does not persist
+% past the end of a function. They also do not appear to be used to communicate
+% between functions or to be clobbered within a sub-function call. Hopefully.
+% \begin{macrocode}
+STRINGS { s t}
+% \end{macrocode}
+%
+% \begin{macro}{`output.nonnull'}
+% \begin{macrocode}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+%<!blk-com|(!com-semi&!com-blank)> { ", " * write$ }
+%<blk-com&com-semi> { "; " * write$ }
+%<blk-com&!com-semi&com-blank> { " " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+%<!html> "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`output'}
+% \begin{macrocode}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`output.check'}
+% \begin{macrocode}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`fin.entry'}
+% \changes{3.87}{1998 Jul 23}{Add annotation}
+% \changes{3.89d1}{1999 July 20}{AO: make ``babel compatible''}
+% I have often been asked to add an annotation function. This suggestion is
+% from Soren Dayton; it inputs a file with the same name as the cite key, or
+% uses the text in the \texttt{annote} field. It will only work with \LaTeXe.
+% \begin{macrocode}
+FUNCTION {fin.entry}
+%<*!fin-bare>
+{ add.period$
+ write$
+%</!fin-bare>
+%<*fin-bare>
+{ duplicate$ empty$
+ 'pop$
+ 'write$
+ if$
+%</fin-bare>
+%<html&htdes> "</dd>" write$
+%<html&!htdes&htlist> "</li>" write$
+%<html&!htdes&!htlist> "</p>" write$
+ newline$
+%<*annote>
+%<*!html>
+ annote missing$
+ { "\bibAnnoteFile{" cite$ * "}" * write$ newline$ }
+ { "\bibAnnote{" cite$ * "}{" * annote * "}" * write$ newline$
+ }
+ if$
+%</!html>
+%<*html>
+ "<blockquote><strong>Key:</strong> "
+ cite$ * write$
+ annote missing$
+ { newline$ }
+ { "<br><strong>Annotation:</strong>" write$ newline$
+ annote write$ newline$
+ }
+ if$
+ "</blockquote>" write$ newline$
+%</html>
+%</annote>
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`new.block'}
+% \begin{macrocode}
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`new.sentence'}
+% \begin{macrocode}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`add.blank'}
+% \changes{1.5(2.3)b}{1995 Jan 10}{Add function}
+% When text is printed with \texttt{output} or
+% \texttt{output.check}, the \texttt{output.state} is set such that
+% a comma will precede the next output text. For special effects, we want to
+% suppress this comma, inserting a blank instead. Hence the
+% \texttt{output.state} is changed to \texttt{before.all}, meaning no
+% punctuation is to be inserted.
+% \begin{macrocode}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`add.colon'}
+% \changes{3.4}{1995 Sep 28}{Add macro}
+% \changes{3.83}{1997 Feb 5}{Simplify: just tack on colon}
+% \begin{macrocode}
+%<*au-col|tit-col>
+FUNCTION {add.colon}
+{ duplicate$ empty$
+ 'skip$
+ { ":" * add.blank }
+ if$
+}
+
+%</au-col|tit-col>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`no.blank.or.punct'}
+% \changes{3.2}{1995 May 19}{Add function}
+% \changes{3.2}{1995 May 30}{Present only for option \texttt{yrpp-xsp}}
+% Another frill is to suppresss both blanks and punctuation. The |\hspace|
+% permits a line break at this point.
+% \begin{macrocode}
+%<*yrpp-xsp>
+FUNCTION {no.blank.or.punct}
+%<*!html>
+{ "\hspace{0pt}" * before.all 'output.state :=
+}
+%</!html>
+%<html>{ before.all 'output.state := }
+
+%</yrpp-xsp>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`date.block'}
+% \changes{3.0}{1995 Mar 9}{Add function}
+% \changes{3.81}{1996 Jun 25}{Add option \texttt{yrp-per}}
+% The \texttt{date.block} function is used for special punctuating effects
+% after the date.
+% \begin{macrocode}
+FUNCTION {date.block}
+{
+%<*!yrp-x>
+%<yrp-col> ":" *
+%<*!yrp-col>
+%<yrp-semi> ";" *
+%<*!yrp-semi>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&!yrp-per> skip$
+%<(blk-com|blk-tit|blk-tita)&yrp-per> new.sentence
+%</!yrp-semi>
+%</!yrp-col>
+%</!yrp-x>
+%<*yrp-x|yrp-col|yrp-semi>
+%<!yrpp-xsp> add.blank
+%<yrpp-xsp> no.blank.or.punct
+%</yrp-x|yrp-col|yrp-semi>
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`not'}
+% \begin{macrocode}
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`and'}
+% \begin{macrocode}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`or'}
+% \begin{macrocode}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`non.stop'}
+% \changes{1.4(2.2)a}{1994 Sep 8}{Add to test if last character
+% is punctuation: . ! ?}
+% This function (my invention) tests if the last character in the string
+% on the stack is \texttt{. ! ?} by using \texttt{add.period\$}. It is to
+% be used for conditional italic correction or adding commas.
+% \begin{macrocode}
+%<*!tit-it&tit-qq>
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+%</!tit-it&tit-qq>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`remove.dots'}
+% \changes{4.00}{1999 Oct 8}{Add macro}
+% \changes{4.21}{2007 May 2}{Retain dot accent}
+% \changes{4.33}{2011 May 13}{Add string declaration for \texttt{z}}
+% This macro removes any periods from the string on the stack. To be used
+% for undotting journal names, months, and juniors. Previously
+% \texttt{purify\$} was used for this, but that removes more than just
+% dots.
+%
+% May 2007, Joseph A. Wright (Morning Star, UK) contributed a revision to allow
+% the dot accent |\.| to be retained.
+% \begin{macrocode}
+%<*nm-rv|nm-rvx|nm-rvcx|mth-bare|jxper>
+STRINGS {z}
+
+FUNCTION {remove.dots}
+{ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #2 substring$
+ duplicate$ "\." =
+ { z #3 global.max$ substring$ 'z := * }
+ { pop$
+ z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ if$
+ }
+ while$
+}
+%</nm-rv|nm-rvx|nm-rvcx|mth-bare|jxper>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`new.block.checka'}
+% \begin{macrocode}
+%<*!ay>
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+%</!ay>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`new.block.checkb'}
+% \begin{macrocode}
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`new.sentence.checka'}
+% \begin{macrocode}
+%<*!ay>
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+%</!ay>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`new.sentence.checkb'}
+% \begin{macrocode}
+%<*!ay>
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+%</!ay>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`field.or.null'}
+% \begin{macrocode}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`emphasize'}
+% Emphasis can be either italic or the alternating font. The font command
+% may be NFSS or regular \LaTeX~2.09 declarations.
+%\changes{1.3(2.1)}{1994 Jul 1}{Add \texttt{nfss} option}
+%\changes{3.84}{1997 Oct 20}{Add \texttt{em-ul} option}
+% \begin{macrocode}
+FUNCTION {emphasize}
+%<*!em-x>
+{ duplicate$ empty$
+ { pop$ "" }
+%<html> { "<i>" swap$ * "</i>" * }
+%<*!html>
+%<em-ul> { "\uline{" swap$ * "}" * }
+%<*!em-ul>
+%<*!nfss>
+%<!em-it> { "{\em " swap$ * "\/}" * }
+%<em-it> { "{\it " swap$ * "\/}" * }
+%</!nfss>
+%<*nfss>
+%<!em-it> { "\emph{" swap$ * "}" * }
+%<em-it> { "\textit{" swap$ * "}" * }
+%</nfss>
+%</!em-ul>
+%</!html>
+ if$
+}
+%</!em-x>
+%<em-x>{ skip$ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`bolden'}
+% The bold font command may be NFSS or the regular \LaTeX~2.09 declaration.
+%\changes{1.3(2.1)}{1994 Jul 1}{Add \texttt{nfss} option}
+% \begin{macrocode}
+%<*nmft-bf|vol-bf|vol-2bf|lab-bf|dtbf|pres-bf>
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+%<html> { "<b>" swap$ * "</b>" * }
+%<*!html>
+%<!nfss> { "{\bf " swap$ * "}" * }
+%<nfss> { "\textbf{" swap$ * "}" * }
+%</!html>
+ if$
+}
+%</nmft-bf|vol-bf|vol-2bf|lab-bf|dtbf|pres-bf>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`scaps'}
+% To put text into small caps.
+%\changes{3.0}{1995 Mar 3}{Add function}
+% \begin{macrocode}
+%<*lab-sc|nmft-sc|pres-sc>
+FUNCTION {scaps}
+{ duplicate$ empty$
+ { pop$ "" }
+%<html> { skip$ }
+%<*!html>
+%<!nfss> { "{\sc " swap$ * "}" * }
+%<nfss> { "\textsc{" swap$ * "}" * }
+%</!html>
+ if$
+}
+%</lab-sc|nmft-sc|pres-sc>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`roman.list'}
+% \changes{3.4}{1995 Sep 28}{Add function}
+% \changes{3.85}{1998 Feb 6}{Remove function}
+% \begin{macro}{`roman.cite'}
+% \changes{3.8}{1996 Mar 16}{Add function}
+% \changes{3.85}{1998 Feb 6}{Remove function}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{`bib.name.font'}
+% \changes{3.85}{1998 Feb 6}{Add macro}
+% \begin{macro}{`bib.fname.font'}
+% \changes{3.85}{1998 Feb 6}{Add macro}
+% \begin{macro}{`cite.name.font'}
+% \changes{3.85}{1998 Feb 6}{Add macro}
+% Define functions for formatting the author/editor names, one for the
+% surnames (\texttt{bib.name.font}) and one for the first names
+% (\texttt{bib.fname.font}). These could be identical, or the latter is
+% deactivated if first names are not to be formatted, only the last names.
+%
+% For citations, we have \texttt{cite.name.font}. Here only surnames appear.
+%
+% It is also possible to have a user-defined font command for each, which the
+% user must define in his work. These are |\bibnamefont{}| and |\bibfnamefont{}|,
+% and some defaults are provided that simply repeat the arguments. Two commands
+% are needed if \texttt{nmft-def} and \texttt{fnm-def} are both given.
+%
+% If neither \texttt{fnm-def} nor \texttt{fnm-rm} are given, then the first names
+% are formatted the same as the surnames.
+% \begin{macrocode}
+%<*nmft>
+FUNCTION {bib.name.font}
+%<nmft-it>{ emphasize }
+%<!nmft-it&nmft-bf>{ bolden }
+%<!nmft-it&!nmft-bf&nmft-sc>{ scaps }
+%<*!nmft-it&!nmft-bf&!nmft-sc&nmft-def>
+{ duplicate$ empty$
+ { pop$ "" }
+%<!html> { "\bibnamefont{" swap$ * "}" * }
+%<html> { skip$ }
+ if$
+}
+%</!nmft-it&!nmft-bf&!nmft-sc&nmft-def>
+FUNCTION {bib.fname.font}
+%<!fnm-rm&!fnm-def>{ bib.name.font }
+%<fnm-rm>{ skip$ }
+%<*!fnm-rm&fnm-def>
+{ duplicate$ empty$
+ { pop$ "" }
+%<!html> { "\bibfnamefont{" swap$ * "}" * }
+%<html> { skip$ }
+ if$
+}
+%</!fnm-rm&fnm-def>
+%</nmft>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*lab>
+FUNCTION {cite.name.font}
+%<lab-it>{ emphasize }
+%<!lab-it&lab-bf>{ bolden }
+%<!lab-it&!lab-bf&lab-sc>{ scaps }
+%<*!lab-it&!lab-bf&!lab-sc&lab-def>
+{ duplicate$ empty$
+ { pop$ "" }
+%<!html> { "\citenamefont{" swap$ * "}" * }
+%<html> { skip$ }
+ if$
+}
+%</!lab-it&!lab-bf&!lab-sc&lab-def>
+%</lab>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{`tie.or.space.prefix'}
+% \changes{3.89d1}{1999 July 20}{AO: replace \texttt{tie.or.space.connect} with
+% more flexible function}
+% The function \texttt{tie.or.space.prefix} determines whether
+% the top item on the stack requires a tie character and
+% slips that (or a space character if not) ahead of it.
+% At this point a font switch or other function can be applied to
+% the top item on the stack, and the appropriate space found
+% just ahead of it on the stack.
+%
+% The sequence \texttt{tie.or.space.prefix} \texttt{*} \texttt{*} is a common idiom
+% for joining the top two stack objects with a tie or space
+% depending on the length of the top object.
+%
+% Another idiom is to apply \texttt{tie.or.space.prefix}, apply a font switch,
+% and then swap and join. In this case the tie or space follows the object.
+% \begin{macrocode}
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`capitalize'}
+% \changes{3.0}{1995 Mar 7}{Add capitalizing function}
+% Capitalizing is easy for regular languages, but for \texttt{babel},
+% some trickery stuff is needed; definitions of |\capitalize| and
+% |\Capitalize| are written to the \texttt{.bbl} file.
+% \begin{macrocode}
+
+FUNCTION {capitalize}
+%<!babel>{ "u" change.case$ "t" change.case$ }
+%<babel>{ "\capitalize" swap$ * }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`space.word'}
+% \changes{2.0}{1994 Jan 31}{Add function to space out words; necessary
+% for the multilingual functions.}
+% The function \texttt{space.word} adds a space before and after the word or
+% words currently on the stack. This was added for the \texttt{bbl.}$nnn$
+% functions, that contain only a word without spacing, but replace explicit
+% text in the originals that were spaced out. Its seems more flexible to
+% define the word functions to be without spacing.
+% \begin{macrocode}
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*!exlang>
+% \end{macrocode}
+%
+% \begin{macro}{`bbl.xxx'}
+% \changes{2.0}{1994 Jan 31}{Replace all explicit words with functions
+% of the form \texttt{bbl.xxx}.}
+% \changes{3.6}{1996 Jan 15}{Add option \texttt{varand}}
+% \changes{3.83}{1997 Feb 25}{Add option \texttt{ednx}}
+% \changes{3.83}{1997 Jun 9}{Make \texttt{\char`\\BIBand} protected}
+% \changes{3.87}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{3.89d1}{1999 July 20}{AO: add \texttt{bbl.eidpp}}
+% These are the default English words. There is no default language
+% option: one of \texttt{english} or \texttt{babel} must be given.
+% \begin{macrocode}
+%<*!babel>
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+%<!varand|html>{ "and"}
+%<varand&!html>{ "\protect\BIBand{}"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "editors" }
+%<ed>{ "eds." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "editor" }
+%<ed>{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "edition" }
+%<abr&!ednx>{ "edn." }
+%<abr&ednx>{ "ed." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "volume" }
+%<abr>{ "vol." }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "number" }
+%<abr>{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "pages" }
+%<pp>{ "pp." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "page" }
+%<pp>{ "p." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "pages" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "chapter" }
+%<abr>{ "chap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Technical Report" }
+%<abr>{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "First" }
+%<ord>{ "1st" }
+
+FUNCTION {bbl.second}
+%<!ord>{ "Second" }
+%<ord>{ "2nd" }
+
+FUNCTION {bbl.third}
+%<!ord>{ "Third" }
+%<ord>{ "3rd" }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "Fourth" }
+%<ord>{ "4th" }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "Fifth" }
+%<ord>{ "5th" }
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+%</!xedn>
+%<*!abr>
+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"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+%</abr>
+%</!babel>
+% \end{macrocode}
+%
+% Here are the definitions for \texttt{babel} option, i.e., explicit
+% translations are not used, but rather only \LaTeX{} macros that must be
+% defined in the file \texttt{babelbst.tex}. This could allow automatic
+% language selection.
+% \begin{macrocode}
+%<*babel>
+ % The BABEL language selection is made here; definitions in babelbst.tex.
+FUNCTION {bbl.and}
+{ "\bbland{}"}
+
+FUNCTION {bbl.etal}
+{ "\bbletal{}"}
+
+FUNCTION {bbl.editors}
+%<!ed>{ "\bbleditors{}" }
+%<ed>{ "\bbleds{}" }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "\bbleditor{}" }
+%<ed>{ "\bbled{}" }
+
+FUNCTION {bbl.edby}
+{ "\bbledby{}" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "\bbledition{}" }
+%<abr>{ "\bbledn{}" }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "\bblvolume{}" }
+%<abr>{ "\bblvol{}" }
+
+FUNCTION {bbl.of}
+{ "\bblof{}" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "\bblnumber{}" }
+%<abr>{ "\bblno{}" }
+
+FUNCTION {bbl.nr}
+{ "\bblno{}" }
+
+FUNCTION {bbl.in}
+{ "\bblin{}" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "\bblpages{}" }
+%<pp>{ "\bblpp{}" }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "\bblpage{}" }
+%<pp>{ "\bblp{}" }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.chapter}
+%<!abr>{ "\bblchapter{}" }
+%<abr>{ "\bblchap{}" }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "\bbltechreport{}" }
+%<abr>{ "\bbltechrep{}" }
+
+FUNCTION {bbl.mthesis}
+{ "\bblmthesis{}" }
+
+FUNCTION {bbl.phdthesis}
+{ "\bblphdthesis{}" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "\bbleidpp{}" }
+
+%</revdata>
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "\bblfirst{}" }
+%<ord>{ "\bblfirsto{}" }
+
+FUNCTION {bbl.second}
+%<!ord>{ "\bblsecond{}" }
+%<ord>{ "\bblsecondo{}" }
+
+FUNCTION {bbl.third}
+%<!ord>{ "\bblthird{}" }
+%<ord>{ "\bblthirdo{}" }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "\bblfourth{}" }
+%<ord>{ "\bblfourtho{}" }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "\bblfifth{}" }
+%<ord>{ "\bblfiftho{}" }
+
+FUNCTION {bbl.st}
+{ "\bblst{}" }
+
+FUNCTION {bbl.nd}
+{ "\bblnd{}" }
+
+FUNCTION {bbl.rd}
+{ "\bblrd{}" }
+
+FUNCTION {bbl.th}
+{ "\bblth{}" }
+
+%</!xedn>
+MACRO {jan} {"\bbljan{}"}
+
+MACRO {feb} {"\bblfeb{}"}
+
+MACRO {mar} {"\bblmar{}"}
+
+MACRO {apr} {"\bblapr{}"}
+
+MACRO {may} {"\bblmay{}"}
+
+MACRO {jun} {"\bbljun{}"}
+
+MACRO {jul} {"\bbljul{}"}
+
+MACRO {aug} {"\bblaug{}"}
+
+MACRO {sep} {"\bblsep{}"}
+
+MACRO {oct} {"\bbloct{}"}
+
+MACRO {nov} {"\bblnov{}"}
+
+MACRO {dec} {"\bbldec{}"}
+
+%</babel>
+% \end{macrocode}
+%
+% \begin{macro}{`eng.ord'}
+% \changes{2.0}{1994 Jan 31}{Add function to format English ordinals.}
+% This function adds English endings for ordinals 1, 2, 3. However, if
+% the second last digit is 1, then the ending is `th' for all last digits.
+% So far, all other languages included do not have this problem, and it is
+% sufficient to add the \textsl{th} equivalent. This might change with further
+% languages.
+%
+% This function must be included with \texttt{babel} too, since that includes
+% English. This means that the language definition files must also provide
+% for |\bblst|, |\bblnd|, and |\bblrd|, setting them all equal to |\bblth|.
+%
+% \begin{macrocode}
+%<*(english|!exlang)&!xedn>
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+ #-2 #1 substring$ "1" =
+ { bbl.th * }
+ { duplicate$ #-1 #1 substring$
+ duplicate$ "1" =
+ { pop$ bbl.st * }
+ { duplicate$ "2" =
+ { pop$ bbl.nd * }
+ { "3" =
+ { bbl.rd * }
+ { bbl.th * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+%</(english|!exlang)&!xedn>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</!exlang>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</!tail>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*!head>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%<*!jabr>
+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"}
+%</!jabr>
+% \end{macrocode}
+%
+% \changes{4.00}{1999 Oct 8}{Revise journal abbreviations}
+% Journal abbreviations have been revised from the original Patashnik
+% ones with help of Conrado Badenas and the IUA recommendations.
+% \begin{macrocode}
+%<*jabr>
+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. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+%</jabr>
+% \end{macrocode}
+%
+% \begin{macro}{`bibinfo.check'}
+% \changes{3.89d1}{1999 July 20}{AO:
+% add functions \texttt{bibinfo.check}, \texttt{bibinfo.warn},
+% and \texttt{format.eprint}}
+% Define functions that encapsulate the argument
+% in a \TeX\ macro that allows for further processing when the
+% bibliography is processed, or allows for a separate computer
+% program to parse the |\bibitem| contents.
+%
+% The following table summarizes how each of the \btx{} entries
+% is accessed for output; these are the points where
+% the \texttt{format.bibinfo} or \texttt{bibinfo.check} functions
+% are called.
+% \subsubsection*{Trapped via \texttt{format.bibinfo}}
+% \begin{description}
+% \item[ \texttt{author} ]\texttt{format.names}
+% \item[ \texttt{collaboration} ]\texttt{format.authors}
+% \item[ \texttt{editor} ]\texttt{format.editors} (\texttt{book}, \texttt{inbook}, \texttt{proceedings}), \texttt{format.names.ed} (\texttt{format.in.ed.booktitle})
+% \item[ \texttt{eid} ]\texttt{format.journal.eid} (\texttt{format.vol.num.pages}, article) checks the output from \texttt{format.journal.pages}
+% \item[ \texttt{isbn} ]\texttt{format.isbn}
+% \item[ \texttt{issn} ]\texttt{format.issn}
+% \item[ \texttt{journal} ]\texttt{format.article.crossref}, article
+% \item[ \texttt{numpages} ]\texttt{format.journal.eid}
+% \item[ \texttt{organization} ]\texttt{format.organization.address} (\texttt{inproceedings}, \texttt{proceedings}), \texttt{manual}
+% \item[ \texttt{pages} ]\texttt{format.book}.pages (\texttt{book}, \texttt{booklet}), \texttt{format.pages} (\texttt{format.journal.pages}, \texttt{format.chapter.pages}, \texttt{article}, \texttt{inbook}, \texttt{incollection}, \texttt{inproceedings})
+% \item[ \texttt{publisher} ]\texttt{format.publisher.address} (like \texttt{output.check}, \texttt{inproceedings}, \texttt{proceedings})
+% \item[ \texttt{title} ]\texttt{format.title}, \texttt{format.btitle}, \texttt{misc}, \texttt{presort}, \texttt{bib.sort.order}
+% \item[ \texttt{volume} ]\texttt{format.bvolume}, \texttt{format.vol.num.pages}, \texttt{format.book.crossref}
+% \item[ \texttt{year} ]in optional argument of \texttt{\char`\\bibitem}, \texttt{format.date} (as part of date), \texttt{format.year}, \texttt{format.org.or.pub}
+% \item[ \texttt{booktitle} ]\texttt{format.in.ed.booktitle} (\texttt{incollection}, \texttt{inproceedings}), \texttt{format.incoll.inproc.crossref}
+% \item[ \texttt{howpublished} ]\texttt{booklet}, \texttt{misc}
+% \item[ \texttt{edition} ]\texttt{convert.edition.format.edition}
+% \item[ \texttt{institution} ]\texttt{techreport}
+% \item[ \texttt{school} ]\texttt{mastersthesis}, \texttt{phdthesis}
+% \item[ \texttt{address} ]\texttt{format.org.or.pub}, \texttt{booklet}, \texttt{manual}, \texttt{mastersthesis}, \texttt{phdthesis}, \texttt{techreport}
+% \item[ \texttt{chapter} ]\texttt{format.chapter.pages}
+% \item[ \texttt{number} ]\texttt{format.number.series}, \texttt{format.vol.num.pages}, \texttt{format.tr.number}
+% \item[ \texttt{series} ]\texttt{format.bvolume}, \texttt{format.number.series}, \texttt{format.book.crossref}
+% \item[ \texttt{type} ]\texttt{format.chapter.pages}, \texttt{format.thesis.type}, \texttt{format.tr.number}
+% \item[ \texttt{month} ]\texttt{format.date}
+% \item[ \texttt{note} ]\texttt{format.note}
+% \item[ \texttt{annote} ]\texttt{fin.entry}
+% \end{description}
+%
+% \subsubsection*{Encapsulated via \texttt{\char`\\url}}
+% \begin{description}
+% \item[ \texttt{url} ]\texttt{format.url} (\texttt{\char`\\harvardurl}, \texttt{\char`\\url}), \texttt{format.url} (\texttt{\char`\\url}), \texttt{format.note} (\texttt{\char`\\url})
+% \end{description}
+%
+% \subsubsection*{Encapsulated via \texttt{\char`\\doi}}
+% \begin{description}
+% \item[ \texttt{doi} ]\texttt{format.doi} (\texttt{\char`\\doi})
+% \end{description}
+%
+% \subsubsection*{Encapsulated via \texttt{\char`\\eprint}}
+% \begin{description}
+% \item[ \texttt{eprint} ]\texttt{format.eprint}
+% \item[ \texttt{archive} ]\texttt{format.eprint}
+% \end{description}
+%
+% \subsubsection*{Not encapsulated:}
+% \begin{description}
+% \item[ \texttt{key} ]cite key
+% \item[ \texttt{language} ]operand of \texttt{\char`\\selectlanguage}
+% \end{description}
+%
+% \subsubsection*{\texttt{bibinfo} tag, but not a \btx{} field}
+% \begin{description}
+% \item[ \texttt{date} ]\texttt{format.date}
+% \end{description}
+%
+% Provides robust access to fields, checking against \texttt{missing\$}
+% and \texttt{empty\$}. A \dtx{} option allows giving
+% a warning if either is the case.
+%
+% If not, it encapsulates the argument in a \TeX\ macro |\bibinfo|.
+% The encapsulation is enabled by the \texttt{bibinfo} \dtx{} option:
+% if turned off, it simply pops the unneeded object.
+%
+% \texttt{field} \texttt{string} \texttt{->} \texttt{encapsulated-field}
+%
+% \texttt{empty} \texttt{string} \texttt{->} \texttt{empty}
+% Side effect: warning.
+% \begin{macrocode}
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+%<bibinfo.warning> swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+%<!bibinfo.warning> pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+%<bibinfo.warning> swap$ "empty " swap$ * " in " * cite$ * warning$
+%<!bibinfo.warning> swap$ pop$
+ }
+ { swap$
+%<bibinfo> "\bibinfo{" swap$ * "}{" * swap$ * "}" *
+%<!bibinfo> pop$
+ }
+ if$
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`bibinfo.warn'}
+% Replaces \texttt{output.check}
+% with \texttt{bibinfo.warn} followed by \texttt{output}.
+%
+% \texttt{field} \texttt{string} \texttt{->} \texttt{encapsulated-field}
+%
+% \texttt{empty} \texttt{string} \texttt{->} \texttt{empty}
+%
+% Side effect: warning if the field is empty.
+% Note: if the \dtx{} option \texttt{bibinfo} is not in effect,
+% then no encapsulation is done.
+% \begin{macrocode}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+%<bibinfo> "\bibinfo{" swap$ * "}{" * swap$ * "}" *
+%<!bibinfo> pop$
+ }
+ if$
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.eprint'}
+% \changes{4.00}{2000 Jan 21}{Add optional archive field}
+% The access function for the \texttt{eprint} field.
+%
+% If the \texttt{bibinfo} \dtx{} option is selected, then this function
+% encapsulates the argument in a \TeX\ macro |\eprint|.
+%
+% \texttt{->} \texttt{encapsulated-URL}
+% \begin{macrocode}
+%<*eprint>
+FUNCTION {format.eprint}
+{ eprint duplicate$ empty$
+ 'skip$
+ { "\eprint"
+ archive empty$
+ 'skip$
+ { "[" * archive * "]" * }
+ if$
+ "{" * swap$ * "}" *
+ }
+ if$
+}
+%</eprint>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`write.url'}
+% \changes{1.5(2.3)}{1994 Sep 16}{Add \texttt{write.url} for option
+% \texttt{harnm}}
+% \changes{3.87}{1998 Jul 23}{Apply to non-Harvard styles}
+% \changes{4.03}{2002 Jan 14}{Fix bug when both harnm and url-nl given}
+% \changes{4.30}{2008 Aug 27}{Add option to put DOI as URL}
+% This function taken over from \texttt{agsm.sty}, the main \texttt{harvard}
+% bib style. For non-Harvard styles that want to add the URL on a new line
+% after the reference, use this function too, but defined slightly
+% differently.
+% \begin{macrocode}
+%<*(harnm|url-nl)&!revdata>
+FUNCTION {write.url}
+%<*!html>
+{
+%<*url-doi&url>
+ doi empty$
+ { url }
+ { "http://dx.doi.org/" doi * }
+ if$
+%</url-doi&url>
+%<!url-doi|!url> url
+ duplicate$ empty$
+ { pop$ }
+%<harnm> { "\newline\harvardurl{" swap$ * "}" * write$ newline$ }
+%<!harnm&url-nl> { "\newline\urlprefix\url{" swap$ * "}" * write$ newline$ }
+ if$
+}
+%</!html>
+%<*html>
+{
+%<*url-doi&url>
+ doi empty$
+ { url }
+ { "http://dx.doi.org/" doi * }
+ if$
+%</url-doi&url>
+%<!url-doi|!url> url
+ duplicate$ empty$
+ { pop$ }
+ { duplicate$ "<br><a href=" quote$ * swap$ * quote$
+ * ">" * swap$ * "</a>" * write$ newline$ }
+ if$
+}
+%</html>
+
+%</(harnm|url-nl)&!revdata>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.url'}
+% \changes{3.87}{1998 Jul 22}{Add function for regular URLs}
+% \changes{4.30}{2008 Aug 27}{Add option to put DOI as URL}
+% A non-harvard version of URL is also made for regular styles.
+% This is used only if the URL text is added as a regular item to the
+% reference information, blocked if necessary. Alternatives are on a new line
+% (Harvard-like) or in the note.
+% \begin{macrocode}
+%<*(url-blk&!harnm)|revdata>
+FUNCTION {format.url}
+{
+%<*url-doi&url>
+ doi empty$
+ { url }
+ { "http://dx.doi.org/" doi * }
+ if$
+%</url-doi&url>
+%<!url-doi|!url> url
+ duplicate$ empty$
+ { pop$ "" }
+%<!html> { "\urlprefix\url{" swap$ * "}" * }
+%<html> { duplicate$ "<a href=" quote$ * swap$ * quote$
+%<html> * ">" * swap$ * "</a>" * }
+ if$
+}
+
+%</(url-blk&!harnm)|revdata>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`check.speaker'}
+% \changes{4.15}{2006 Jan 4}{Add \texttt{presentation}, which needs this function
+% to highlight speaker name}
+% The \texttt{presentation} type uses the \texttt{key} entry to indicate which
+% author is the speaker, as the sequence number in the author list. The speaker's
+% name is put into a different font, depending on the extra option. If no font
+% is specified, all names are the same.
+% \begin{macrocode}
+INTEGERS { nameptr namesleft numnames }
+
+%<*pres-bf|pres-it|pres-sc>
+FUNCTION {check.speaker}
+{ key empty$ 'skip$
+ { key nameptr int.to.str$ =
+ {
+%<pres-bf> bolden
+%<pres-it&!pres-bf> emphasize
+%<pres-sc&!pres-it&!pres-bf> scaps
+ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+%</pres-bf|pres-it|pres-sc>
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{`format.names'}
+% \changes{1.5(2.3)}{1994 Sep 16}{Add \texttt{harvard} command for `and' with
+% new option \texttt{harnm}}
+% \changes{3.0}{1995 Feb 27}{Add option \texttt{nm-revf}}
+% \changes{3.0}{1995 Mar 15}{Add option \texttt{nm-rvx}}
+% \changes{3.2}{1995 Jun 7}{Add option \texttt{nm-rvv}}
+% \changes{3.6}{1995 Dec 7}{Jr to go at end with \texttt{nm-rev1} (AGU style)}
+% \changes{3.6}{1995 Dec 8}{Add option \texttt{nmand-rm}}
+% \changes{3.6}{1996 Jan 30}{Add option \texttt{etal-rm}}
+% \changes{3.7}{1996 Feb 5}{Add option \texttt{aunm-semi}}
+% \changes{3.82}{1996 Dec 16}{Add option \texttt{nm-revv1} (AGU style with full
+% names)}
+% \changes{3.85}{1996 Feb 6}{Recode author font; allow first names different}
+% \changes{3.88}{1999 Feb 25}{Add option \texttt{aunm-sl}}
+% \changes{3.89}{1999 May 20}{Reset \texttt{t}; might still be ``others''
+% from last format function}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate author name for later processing;
+% trap empty author list;
+% bring common braces to outer level for easier understanding of code.}
+% \changes{4.00}{1999 Oct 7}{Add option \texttt{jnrlst} to put Jr. last}
+% \changes{4.13}{2004 Feb 9}{Add option \texttt{nm-rvcx}}
+% \changes{4.14}{2005 Oct 17}{Add option \texttt{nm-rvvc}}
+% \changes{4.14}{2005 Oct 17}{Add option \texttt{etal-xc}}
+% The \texttt{harvard} package now (version 2.0.3, for \LaTeXe) uses
+% |\harvardand| in place of the word \textsl{and} so that it can be changed
+% at run time. This is allowed for with the option \texttt{harnm}, which
+% need not be used only with the \texttt{har} option.
+% This seems like a useless feature for \texttt{.bst} files made from
+% this multilanguage source. However, it is included anyway, which means
+% if \texttt{harnm} option selected, one must redefine |\harvardand|
+% in the document for the language being used.
+%
+% The location of the junior part for reversed name is not obvious. Prior
+% to version 4.0, I always had it attached to the last name, as
+% Smith, Jr, John, put it probably is better as Smith, John, Jr. For the
+% AGU \texttt{nm-rev1} I always did it this way, probably because I had a
+% good AGU example to follow. Dilemma: do I just change them all or add an
+% option to do it? The option will maintain consistency with older
+% versions, but this could also be considered a bug fix rather than a new
+% feature. Solution: use the option, since I have found other \texttt{.bst}
+% files from Beebe and Harvard that put junior between surname and first
+% name.
+%
+% |bibinfo| is a variable used to store a string telling it whether the
+% names being formatted are authors or editors, since this function is called
+% for both purposes. Every call to this function must push the string onto the stack
+% just before the call.
+% \begin{macrocode}
+STRINGS { bibinfo}
+
+% \end{macrocode}
+%
+% Stack note: if the names argument is a non-nil list, this function returns
+% one object on the stack, the formatted list of names.
+%
+% \texttt{names`string} \texttt{bibinfo`string} \texttt{->} \texttt{author-list`string}
+% \begin{macrocode}
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+% \end{macrocode}
+% Here is the author formatting when the names are not set in any special
+% font, or when the entire name set in a single special font.
+% \begin{macrocode}
+%<*!(nmft&(fnm-rm|fnm-def))>
+%<*!nm-rev1&!nm-revv1>
+%<nm-init> "{f.~}{vv~}{ll}{, jj}"
+%<*!nm-init>
+%<nm-rev&!jnrlst> "{vv~}{ll}{, jj}{, f.}"
+%<nm-rev&jnrlst> "{vv~}{ll}{, f.}{, jj}"
+%<*!nm-rev>
+%<nm-rv&!jnrlst> "{vv~}{ll}{ jj}{ f{~}}"
+%<nm-rv&jnrlst> "{vv~}{ll}{ f{~}}{ jj}"
+%<*!nm-rv>
+%<nm-rvx&!jnrlst> "{vv~}{ll}{ jj}{ f{}}"
+%<nm-rvx&jnrlst> "{vv~}{ll}{ f{}}{ jj}"
+%<*!nm-rvx>
+%<nm-rvcx&!jnrlst> "{vv~}{ll}{, jj}{, f{}}"
+%<nm-rvcx&jnrlst> "{vv~}{ll}{, f{}}{, jj}"
+%<*!nm-rvcx>
+%<nm-rvv&!jnrlst> "{vv~}{ll}{ jj}{ f{.}.}"
+%<nm-rvv&jnrlst> "{vv~}{ll}{ f{.}.}{ jj}"
+%<*!nm-rvv>
+%<nm-rvvc&!jnrlst> "{vv~}{ll}{, jj}{, f{.}.}"
+%<nm-rvvc&jnrlst> "{vv~}{ll}{, f{.}.}{, jj}"
+%<*!nm-rvvc>
+%<nm-revf&!jnrlst> "{vv~}{ll}{, jj}{, ff}"
+%<nm-revf&jnrlst> "{vv~}{ll}{, ff}{, jj}"
+%<*!nm-revf>
+ "{ff~}{vv~}{ll}{, jj}"
+%</!nm-revf>
+%</!nm-rvvc>
+%</!nm-rvv>
+%</!nm-rvcx>
+%</!nm-rvx>
+%</!nm-rv>
+%</!nm-rev>
+%</!nm-init>
+%</!nm-rev1&!nm-revv1>
+%<*nm-rev1>
+ duplicate$ #1 >
+ { "{f.~}{vv~}{ll}{, jj}" }
+%<!jnrlst> { "{vv~}{ll}{, jj}{, f.}" }
+%<jnrlst> { "{vv~}{ll}{, f.}{, jj}" }
+ if$
+%</nm-rev1>
+%<*!nm-rev1&nm-revv1>
+ duplicate$ #1 >
+ { "{ff~}{vv~}{ll}{, jj}" }
+%<!jnrlst> { "{vv~}{ll}{, jj}{, ff}" }
+%<jnrlst> { "{vv~}{ll}{, ff}{, jj}" }
+ if$
+%</!nm-rev1&nm-revv1>
+ format.name$
+%<nm-rv|nm-rvx> remove.dots
+%<nmft&nmand-rm> bib.name.font
+%</!(nmft&(fnm-rm|fnm-def))>
+% \end{macrocode}
+% Here is the author formatting when the first and last names are
+% set in (possibly different) special fonts.
+%
+% \changes{4.00}{1999 Oct 7}{Junior part always in first name font}
+% The junior part is optionally between the reversed names, or after them.
+% \begin{macrocode}
+%<*nmft&(fnm-rm|fnm-def)>
+%<*!nm-rev1&!nm-revv1>
+%<*nm-init>
+ "{f.}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+%</nm-init>
+%<*!nm-init>
+%<*nm-rev>
+ "{vv~}{ll}" format.name$ bib.name.font
+ s nameptr
+%<!jnrlst> "{jj, }{f.}"
+%<jnrlst> "{f.}{, jj}"
+ format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+%</nm-rev>
+%<*!nm-rev>
+%<*nm-rv>
+ "{vv~}{ll}" format.name$ bib.name.font
+ s nameptr
+%<!jnrlst> "{jj }{f{~}}"
+%<jnrlst> "{f{~}}{ jj}"
+ format.name$ duplicate$ empty$ 'skip$
+ { remove.dots bib.fname.font " " swap$ * }
+ if$
+%</nm-rv>
+%<*!nm-rv>
+%<*nm-rvx>
+ "{vv~}{ll}" format.name$ bib.name.font
+ s nameptr
+%<!jnrlst> "{jj }{f{}}"
+%<jnrlst> "{f{}}{ jj}"
+ format.name$ duplicate$ empty$ 'skip$
+ { remove.dots bib.fname.font " " swap$ * }
+ if$
+%</nm-rvx>
+%<*!nm-rvx>
+%<*nm-rvcx>
+ "{vv~}{ll}" format.name$ bib.name.font
+ s nameptr
+%<!jnrlst> "{jj, }{f{}}"
+%<jnrlst> "{f{}}{, jj}"
+ format.name$ duplicate$ empty$ 'skip$
+ { remove.dots bib.fname.font ", " swap$ * }
+ if$
+%</nm-rvcx>
+%<*!nm-rvcx>
+%<*nm-rvv>
+ "{vv~}{ll}" format.name$ bib.name.font
+ s nameptr
+%<!jnrlst> "{jj }{f{.}.}"
+%<jnrlst> "{f{.}.}{ jj}"
+ format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+%</nm-rvv>
+%<*!nm-rvv>
+%<*nm-rvvc>
+ "{vv~}{ll}" format.name$ bib.name.font
+ s nameptr
+%<!jnrlst> "{jj, }{f{.}.}"
+%<jnrlst> "{f{.}.}{, jj}"
+ format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+%</nm-rvvc>
+%<*!nm-rvvc>
+%<*nm-revf>
+ "{vv~}{ll}" format.name$ bib.name.font
+ s nameptr
+%<!jnrlst> "{jj, }{ff}"
+%<jnrlst> "{ff}{, jj}"
+ format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+%</nm-revf>
+%<*!nm-revf>
+ "{ff}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+%</!nm-revf>
+%</!nm-rvvc>
+%</!nm-rvv>
+%</!nm-rvcx>
+%</!nm-rvx>
+%</!nm-rv>
+%</!nm-rev>
+%</!nm-init>
+%</!nm-rev1&!nm-revv1>
+%<*nm-rev1>
+ nameptr #1 >
+ { "{f.}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ }
+ { "{vv~}{ll}" format.name$ bib.name.font
+ s nameptr
+%<!jnrlst> "{jj, }{f.}"
+%<jnrlst> "{f.}{, jj}"
+ format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ }
+ if$
+%</nm-rev1>
+%<*!nm-rev1&nm-revv1>
+ nameptr #1 >
+ { "{ff}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ }
+ { "{vv~}{ll}" format.name$ bib.name.font
+ s nameptr
+%<!jnrlst> "{jj, }{ff}"
+%<jnrlst> "{ff}{, jj}"
+ format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+ }
+ if$
+%</!nm-rev1&nm-revv1>
+ *
+%</nmft&(fnm-rm|fnm-def)>
+ bibinfo bibinfo.check
+%<*pres-bf|pres-it|pres-sc>
+ type$ "presentation" =
+ { check.speaker }
+ 'skip$
+ if$
+%</pres-bf|pres-it|pres-sc>
+ 't :=
+ nameptr #1 >
+ {
+%<*nmlm>
+%<m1> nameptr #1
+%<m2> nameptr #2
+%<m3> nameptr #3
+%<m4> nameptr #4
+%<m5> nameptr #5
+%<m6> nameptr #6
+%<m7> nameptr #7
+%<m8> nameptr #8
+%<m9> nameptr #9
+%<m0> nameptr #0
+%<m10> #10 +
+%<m20> #20 +
+%<m30> #30 +
+%<m40> #40 +
+%<m50> #50 +
+%<m60> #60 +
+%<m70> #70 +
+%<m80> #80 +
+%<m90> #90 +
+ #1 + =
+%<x1> numnames #1
+%<x2> numnames #2
+%<x3> numnames #3
+%<x4> numnames #4
+%<x5> numnames #5
+%<x6> numnames #6
+%<x7> numnames #7
+%<x8> numnames #8
+%<x9> numnames #9
+%<x0> numnames #0
+%<x10> #10 +
+%<x20> #20 +
+%<x30> #30 +
+%<x40> #40 +
+%<x50> #50 +
+%<x60> #60 +
+%<x70> #70 +
+%<x80> #80 +
+%<x90> #90 +
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+%</nmlm>
+ namesleft #1 >
+%<!aunm-semi&!aunm-sl> { ", " * t * }
+%<aunm-semi> { "; " * t * }
+%<aunm-sl&!aunm-semi> { "/ " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+%<(and-com|xand)&!aunm-semi&!aunm-sl> "," *
+%<(and-com|xand)&aunm-semi> ";" *
+%<(and-com|xand)&aunm-sl&!aunm-semi> "/" *
+%<*!and-xcom&!and-com&!xand>
+ numnames #2 >
+%<etal-xc> t "others" = not and
+%<!aunm-semi&!aunm-sl> { "," * }
+%<aunm-semi> { ";" * }
+%<aunm-sl&!aunm-semi> { "/" * }
+ 'skip$
+ if$
+%</!and-xcom&!and-com&!xand>
+ t "others" =
+ {
+%<nmft&!nmand-rm&!(fnm-rm|fnm-def)&(etal-it|etal-rm)> bib.name.font
+%<*!etal-it>
+%<nmft&(nmand-rm|(fnm-rm|fnm-def))&!etal-rm> " " * bbl.etal bib.name.font *
+%<!(nmft&(nmand-rm|(fnm-rm|fnm-def)))|etal-rm> " " * bbl.etal *
+%</!etal-it>
+%<etal-it> " " * bbl.etal emphasize *
+%<nmft&!nmand-rm&!(fnm-rm|fnm-def)&!(etal-it|etal-rm)> bib.name.font
+ }
+%<*!xand>
+ {
+%<*!harnm>
+%<!amper> bbl.and
+%<amper> "\&"
+%</!harnm>
+%<harnm> "\harvardand{}"
+%<nmft&!nmand-rm&(fnm-rm|fnm-def)> bib.name.font
+ space.word * t *
+ }
+%</!xand>
+%<xand> { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+%<*nmft&!nmand-rm&!(fnm-rm|fnm-def)>
+ t "others" =
+ 'skip$
+ { bib.name.font }
+ if$
+%</nmft&!nmand-rm&!(fnm-rm|fnm-def)>
+ } if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.names.ed'}
+% \changes{1.6(2.4)}{1995 Feb 2}{Add option \texttt{ed-rev} to allow editor
+% to be formatted just like authors'}
+% \changes{3.0}{1995 Feb 27}{Option \texttt{nm-revf} to act just as default}
+% \changes{3.83}{1997 Feb 25}{Add option \texttt{and-com-ed} to replace
+% \texttt{and-com} for collection editors}
+% \changes{3.85}{1996 Feb 6}{Recode author font; allow first names different}
+% \changes{3.88}{1999 Feb 25}{Add option \texttt{ed-au}, synonomous with
+% \texttt{ed-rev}}
+% \changes{3.88}{1999 Mar 18}{Bug fix: \texttt{and-com-ed} used correctly}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate editor for later processing;
+% trap empty editor list}
+% \changes{4.30}{2008 Aug 27}{Fix bug for \texttt{nm-rvvc}}
+% When editors are used in place of authors to identify the work, the
+% names are always formatted just like authors'. However, in collections,
+% where ``edited by'' or ``\emph{names} (editors)'' are given, it is
+% normal not to reverse the names, even if the authors' are. The option
+% \texttt{ed-rev} sees to it that editor names are always formatted exactly
+% like those of authors, being reversed if necessary.
+%
+% The option \texttt{ed-au} is identical to \texttt{ed-rev}, but is more
+% logical. It means editors (in incollections) are formatted exactly like
+% authors, with all the font, reversing, and number limitations. This is
+% selected automatically with \texttt{nm-init} and \texttt{nm-} default to save
+% programming memory.
+%
+% The option \texttt{nm-revf} in this case acts the same as the default
+% when no \texttt{nm-} option given: full names with surname last. Therefore
+% it is not necessary to test for it at all, since it, like the default,
+% has the lowest priority: any other \texttt{nm-} option clobbers it.
+%
+% The options \texttt{aunm-semi} and \texttt{aunm-sl} will put a semi-colon or
+% slash between editor names, just as for authors, when \texttt{ed-rev} not
+% selected, in keeping with the idea that in this case both authors and editors
+% are to be formatted the same.
+%
+% This function either dispatches to \texttt{format.names} or executes code
+% which is similar. In the latter case, names are always presented first
+% followed by surname (``last name''); name limit processing (\texttt{nmlm}) is not executed;
+% and endgame processing differs in being qualified by \texttt{nmfted}.
+%
+% Stack note: if the names (second) argument is a non-nil list, this function returns
+% with one object on the stack, the formatted list of names.
+%
+% \texttt{names`string} \texttt{bibinfo`string} \texttt{->} \texttt{author-list`string}
+% \begin{macrocode}
+FUNCTION {format.names.ed}
+{
+%<ed-rev|ed-au> format.names
+%<*!ed-rev&!ed-au>
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+% \end{macrocode}
+% Editor name is handled as a single object, with no separation of first and last name.
+% \begin{macrocode}
+%<*!(nmft&nmfted&(fnm-rm|fnm-def))>
+%<nm-init|nm-rev|nm-rev1> "{f.~}{vv~}{ll}{, jj}"
+%<*!nm-init&!nm-rev&!nm-rev1>
+%<nm-revv1> "{ff~}{vv~}{ll}{, jj}"
+%<*!nm-revv1>
+%<nm-rv> "{f{~}~}{vv~}{ll}{ jj}"
+%<*!nm-rv>
+%<nm-rvx> "{f{}~}{vv~}{ll}{ jj}"
+%<*!nm-rvx>
+%<nm-rvcx> "{f{}~}{vv~}{ll}{ jj}"
+%<*!nm-rvcx>
+%<nm-rvv|nm-rvvc> "{f{.}.~}{vv~}{ll}{ jj}"
+%<*!nm-rvv&!nm-rvvc>
+ "{ff~}{vv~}{ll}{, jj}"
+%</!nm-rvv&!nm-rvvc>
+%</!nm-rvcx>
+%</!nm-rvx>
+%</!nm-rv>
+%</!nm-revv1>
+%</!nm-init&!nm-rev&!nm-rev1>
+ format.name$
+%<nm-rv|nm-rvx|nm-rvcx> remove.dots
+%<nmft&nmfted&nmand-rm> bib.name.font
+%</!(nmft&nmfted&(fnm-rm|fnm-def))>
+% \end{macrocode}
+% Editor first and last name handled separately.
+% \begin{macrocode}
+%<*(nmft&nmfted&(fnm-rm|fnm-def))>
+%<*nm-init|nm-rev|nm-rev1>
+ "{f.}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+%</nm-init|nm-rev|nm-rev1>
+%<*!nm-init&!nm-rev&!nm-rev1>
+%<*nm-revv1>
+ "{ff}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+%</nm-revv1>
+%<*!nm-revv1>
+%<*nm-rv>
+ "{f{~}}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { remove.dots bib.fname.font " " swap$ * }
+ if$
+%</nm-rv>
+%<*!nm-rv>
+%<*nm-rvx|nm-rvcx>
+ "{f{}}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { remove.dots bib.fname.font " " swap$ * }
+ if$
+%</nm-rvx|nm-rvcx>
+%<*!nm-rvx&!nm-rvcx>
+%<*nm-rvv|nm-rvvc>
+ "{f{.}.}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font " " swap$ * }
+ if$
+%</nm-rvv|nm-rvvc>
+%<*!nm-rvv&!nm-rvvc>
+ "{ff}" format.name$ duplicate$ empty$ 'skip$
+ { tie.or.space.prefix bib.fname.font swap$ * }
+ if$
+ s nameptr
+ "{vv~}{ll}" format.name$ bib.name.font *
+ s nameptr
+ "{jj}" format.name$ duplicate$ empty$ 'skip$
+ { bib.fname.font ", " swap$ * }
+ if$
+%</!nm-rvv&!nm-rvvc>
+%</!nm-rvx&!nm-rvcx>
+%</!nm-rv>
+%</!nm-revv1>
+%</!nm-init&!nm-rev&!nm-rev1>
+ *
+%</(nmft&nmfted&(fnm-rm|fnm-def))>
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+%<!aunm-semi&!aunm-sl> { ", " * t * }
+%<aunm-semi> { "; " * t * }
+%<aunm-sl&!aunm-semi> { "/ " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+%<(and-com-ed|xand)&!aunm-semi&!aunm-sl> "," *
+%<(and-com-ed|xand)&aunm-semi> ";" *
+%<(and-com-ed|xand)&aunm-sl&!aunm-semi> "/" *
+%<*!and-xcom&!and-com-ed&!xand>
+ numnames #2 >
+%<etal-xc> t "others" = not and
+%<!aunm-semi&!aunm-sl> { "," * }
+%<aunm-semi> { ";" * }
+%<aunm-sl&!aunm-semi> { "/" * }
+ 'skip$
+ if$
+%</!and-xcom&!and-com-ed&!xand>
+ t "others" =
+ {
+
+%<nmft&nmfted&!nmand-rm&!(fnm-rm|fnm-def)&(etal-it|etal-rm)> bib.name.font
+%<*!etal-it>
+%<nmft&nmfted&(nmand-rm|(fnm-rm|fnm-def))&!etal-rm> " " * bbl.etal bib.name.font *
+%<!(nmft&nmfted&(nmand-rm|(fnm-rm|fnm-def)))|etal-rm> " " * bbl.etal *
+%</!etal-it>
+%<etal-it> " " * bbl.etal emphasize *
+%<nmft&nmfted&!nmand-rm&!(fnm-rm|fnm-def)&!(etal-it|etal-rm)> bib.name.font
+ }
+%<*!xand>
+ {
+%<*!harnm>
+%<!amper> bbl.and
+%<amper> "\&"
+%</!harnm>
+%<harnm> "\harvardand{}"
+%<nmft&nmfted&!nmand-rm&(fnm-rm|fnm-def)> bib.name.font
+ space.word * t *
+ }
+%</!xand>
+%<xand> { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+%<*nmft&nmfted&!nmand-rm&!(fnm-rm|fnm-def)>
+ t "others" =
+ 'skip$
+ { bib.name.font }
+ if$
+%</nmft&nmfted&!nmand-rm&!(fnm-rm|fnm-def)>
+ } if$
+%</!ed-rev&!ed-au>
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.key'}
+% \begin{macrocode}
+%<*ay>
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+%</ay>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.authors'}
+%
+% \changes{3.89d1}{1999 July 20}{AO: Add code to emit collaboration.}
+% \begin{macrocode}
+FUNCTION {format.authors}
+{ author "author" format.names
+%<*revdata>
+ duplicate$ empty$ 'skip$
+ { collaboration "collaboration" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { " (" swap$ * ")" * }
+ if$
+ *
+ }
+ if$
+%</revdata>
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`get.bbl.editor'}
+% \changes{3.89d1}{1999 July 20}{AO: access function for editor text entity}
+% Use this function universally when accessing the ``editor'' text entity.
+% \begin{macrocode}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.editors'}
+% \changes{3.0}{1995 Mar 20}{Add option \texttt{edpar}}
+% \changes{3.83}{1997 Feb 4}{Add option \texttt{edparc}}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate editors for further processing.}
+% \changes{4.00}{1999 Oct 6}{Add option \texttt{edparxc}}
+% The option \texttt{edpar} puts the word `editor' in parentheses.
+% In \texttt{genbst.mbs}, this occurred automatically with the option
+% \texttt{ed}, to abbreviate `editor' to `ed'. In \texttt{babel.mbs},
+% this was not the case, because of complications with the word functions.
+% Now this possibility is added as a special option, which means there is
+% some inconsistency with older \texttt{.dbj} files that called \texttt{ed}:
+% the abbreviated `ed' is not put in parentheses unless \texttt{edpar} is
+% also called.
+%
+% Note that the code here is very similar to code in \texttt{format.in.ed.booktitle};
+% the two should be kept coordinated.
+% \begin{macrocode}
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+%<!edpar&!edparxc> "," *
+ " " *
+ get.bbl.editor
+%<bkedcap> capitalize
+%<edpar|edparc|edparxc> "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.in.editors'}
+% \changes{3.0}{1995 Mar 20}{Add option \texttt{edpar}}
+% \changes{3.83}{1997 Feb 4}{Add option \texttt{edparc}}
+% \changes{3.89d1}{1999 July 20}{AO: code subsumed into
+% \texttt{format.in.ed.booktitle}}
+% See the note about the option \texttt{edpar} above.
+%
+% \end{macro}
+%
+% \begin{macro}{`format.book.pages'}
+% \changes{3.88}{1998 Dec 2}{Add function}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate pages for further processing.}
+% \begin{macrocode}
+%<*pg-bk>
+FUNCTION {format.book.pages}
+{ pages "pages" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { " " * bbl.pages * }
+ if$
+}
+%</pg-bk>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.isbn'}
+% \changes{3.0}{1995 Mar 1}{Add function}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate isbn for further processing}
+% \begin{macrocode}
+%<*isbn>
+FUNCTION {format.isbn}
+{ isbn "isbn" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ "ISBN " swap$ *
+ }
+ if$
+}
+
+%</isbn>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.issn'}
+% \changes{3.87}{1998 Aug 17}{Add function}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate issn for further processing}
+% \begin{macrocode}
+%<*issn>
+FUNCTION {format.issn}
+{ issn "issn" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ "ISSN " swap$ *
+ }
+ if$
+}
+
+%</issn>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.doi'}
+% \changes{4.10}{2003 May 28}{Add function}
+% \changes{4.30}{2008 Aug 27}{Remove bibinfo encapsulation for DOI}
+% DOIs like URLs are encapsulated by their own commands, so need no \texttt{bibinfo.check}.
+% \begin{macrocode}
+%<*doi|(url-doi&!url)>
+FUNCTION {format.doi}
+{ doi empty$
+ { "" }
+ {
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<!html> "\doi{" doi * "}" *
+%<html> "doi:" doi *
+ }
+ if$
+}
+%</doi|(url-doi&!url)>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`select.language'}
+% \changes{3.87}{1998 Aug 17}{Add function}
+% The \texttt{language} field code has been provided by Bernd Feige, of the
+% University of Freiburg.
+% \begin{macrocode}
+%<*lang>
+FUNCTION {select.language}
+{ duplicate$ empty$
+ 'pop$
+ { language empty$
+ 'skip$
+ { "{\selectlanguage{" language * "}" * swap$ * "}" * }
+ if$
+ }
+ if$
+}
+
+%</lang>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.note'}
+% \changes{3.83}{1997 Apr 25}{Add macro}
+% \changes{3.83}{1997 May 26}{Fix so unmatched brace warning suppressed}
+% \changes{3.87}{1998 Jul 23}{Add option \texttt{url-nt}}
+% Notes should be entered as though they were a sentence on their own.
+% However, if they appear mid-sentence rather than after a block or sentence,
+% the first letter must be lowercase. Thus if a note begins with a proper
+% noun, it must be in braces. To avoid a warning about unmatched braces
+% with the \texttt{change.case\$} function, check first if the leading
+% character is an opening brace.
+%
+% With options \texttt{url,url-nt}, the URL text is treated as a note, and
+% added here. It is output directly, not prepended to the note text. This
+% means, if the note is to be a new sentence, the URL text starts that
+% sentence, and the regular note is added to that sentence, comma between.
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate note for further processing}
+% \changes{4.00}{1999 Sep 14}{PWD: remove url with \texttt{revdata}}
+%
+% \begin{macrocode}
+FUNCTION {format.note}
+{
+%<*url-nt&!revdata>
+ url empty$
+ 'skip$
+%<!html> { "\urlprefix\url{" url * "}" * output }
+%<html> { "<a href=" quote$ * url * quote$
+%<html> * ">" * url * "</a>" * output }
+ if$
+%</url-nt&!revdata>
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.title'}
+% \changes{1.4(2.2)a}{1994 Sep 7}{Add enquote function to put titles in quotes,
+% such that punctuation is inside quotes.}
+% \changes{3.8}{1996 Apr 17}{Fix bug in quoted title and \texttt{blk-com}}
+% \changes{3.83}{1997 Feb 4}{Add \texttt{qx} option, for comma outside
+% quotes}
+% For a quoted title, any punctuation in the title goes inside the quote.
+% Otherwise, the comma or period following the title also goes inside.
+% Exception is with \texttt{qx} option, in which case the comma goes
+% outside, even when punctuation present; for period (\texttt{!blk-com})
+% is added outside only when punctuation is absent.
+%
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate title for further processing.}
+% \changes{4.01}{2000 May 4}{Put \texttt{change.case\$} before \texttt{bibinfo.check}}
+% \begin{macrocode}
+FUNCTION {format.title}
+{ title
+%<*!atit-u>
+ duplicate$ empty$ 'skip$
+ { "t" change.case$ }
+ if$
+%</!atit-u>
+ "title" bibinfo.check
+%<*tit-it|tit-qq|lang>
+ duplicate$ empty$ 'skip$
+ {
+%<tit-it> emphasize
+%<*!tit-it&tit-qq>
+ "\enquote{" swap$ *
+%<*!qx>
+%<*blk-com>
+ non.stop
+%<!com-semi&!com-blank> { ",} " * }
+%<com-semi> { ";} " * }
+%<!com-semi&com-blank> { "} " * }
+ { "} " * }
+ if$
+%</blk-com>
+%<!blk-com> add.period$ "}" *
+%</!qx>
+%<*qx>
+%<*blk-com>
+%<!com-semi&!com-blank> "}, " *
+%<com-semi> "}; " *
+%<!com-semi&com-blank> "} " *
+%</blk-com>
+%<!blk-com> "}" *
+%</qx>
+%</!tit-it&tit-qq>
+%<lang> select.language
+ }
+ if$
+%</tit-it|tit-qq|lang>
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`end.quote.title'}
+% \changes{3.82}{1996 Nov 15}{Add macro to finish off quoted titles}
+% For a quoted title, the punctuation appears in the quotes. For commas
+% between block, this means the inter-block punctuation is already present,
+% so it must be suppressed after every \texttt{format.title output}. This
+% is done by setting the \texttt{output.state} to \texttt{before.all}, but
+% only if there really was a title. Call this macro every time after
+% titles are output.
+% \begin{macrocode}
+%<*blk-com&tit-qq>
+FUNCTION {end.quote.title}
+{ title empty$
+ 'skip$
+ { before.all 'output.state := }
+ if$
+}
+%</blk-com&tit-qq>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`end.quote.btitle'}
+% \changes{3.84}{1997 Oct 31}{Add function}
+% Similar to |end.quote.title| except that it is only applied if titles of
+% proceedings and collections are quoted, and if
+% neither \texttt{edby}, \texttt{edby-par}, nor \texttt{edby-par} are selected
+% (this is the default case in the relevant menu of the \texttt{makebst.tex} run).
+% These options add text after the booktitle,
+% so additional punctuation need not be suppressed. Unless there is no editor!
+%
+% Note: this function is called after the result of \texttt{format.in.ed.booktitle}
+% has been output, and attempts to predict what that output had been.
+% Would it not be better to call this function while that result is still
+% on the stack?
+% \begin{macrocode}
+%<*bt-qq>
+FUNCTION {end.quote.btitle}
+{ booktitle empty$
+ 'skip$
+%<!edby&!edby-par&!edby-parc> { before.all 'output.state := }
+%<*edby|edby-par|edby-parc>
+ { editor empty$
+ { before.all 'output.state := }
+ 'skip$
+ if$
+ }
+%</edby|edby-par|edby-parc>
+ if$
+}
+%</bt-qq>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`make.full.names'}
+% \changes{1.1}{1993 Nov 12}{Add key labels to \texttt{calc.long.label} and
+% get {\tt'author} and {\tt'editor} in right order when author
+% missing.}
+% \changes{1.4(2.2)}{1994 Sep 5}{Remove \texttt{calc.long.label} and
+% \texttt{format.long.lab.names}, replacing them with
+% \texttt{format.full.names}, \texttt{make.full.names}, and adding
+% \texttt{author.editor.key}, \texttt{author.key}, and \texttt{editor.key}}
+% \changes{1.4(2.2)a}{1994 Sep 7}{Remove option \texttt{and-com} from
+% \texttt{make.full.names}}
+% \changes{1.5(2.3)}{1994 Sep 15}{Add full names for \texttt{natbib} v5.3}
+% \changes{3.6}{1995 Dec 8}{Suppress `and' in full list if suppressed in short}
+% \changes{3.6}{1995 Dec 8}{Font of `and' in lists same as in citations}
+% \changes{3.85}{1996 Feb 6}{Recode author font}
+% \changes{3.89}{1999 May 20}{Fix location of \texttt{and-xcom} code}
+% In versions before 2.2, there were two functions \texttt{calc.long.label}
+% and \texttt{format.long.lab.names} that made up the string
+% \texttt{long.label} for each entry. This contains the full author list.
+% However, there was a bug in the one routine, entered by mistake when an
+% earlier bug was removed, and more seriously, the string
+% \texttt{long.label} was limited to \texttt{entry.max\$} characters, 100 on
+% my system. Author lists were truncated. Thus, \texttt{make.full.names}
+% is used instead to enter the full list of names directly in the
+% \texttt{output.bibitem} function, without an intermediate string. This
+% involves changing the order of some function definitions, especially
+% \texttt{output.bibitem} must come later.
+% \changes{3.89}{1999 May 20}{Reset \texttt{t}; might still be ``others''
+% from last format function}
+% \changes{3.98}{1999 May 28}{Fix bug with \texttt{harnm}, missing brace}
+% \changes{4.20}{2007 Apr 23}{Format juniors to be same as for \texttt{format.lab.names}}
+% \begin{macrocode}
+%<*har|cay|nat>
+FUNCTION {format.full.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+%<!jnrlab> "{vv~}{ll}" format.name$
+%<*jnrlab>
+%<!nm-rv&!nm-rvv&!nm-rvx&!nm-rvcx> "{vv~}{ll}{, jj}" format.name$
+%<nm-rv|nm-rvv|nm-rvx|nm-rvcx> "{vv~}{ll}{ jj}" format.name$
+%</jnrlab>
+%<lab&and-rm> cite.name.font
+ 't :=
+ nameptr #1 >
+ {
+%<*nmlm>
+%<m1> nameptr #1
+%<m2> nameptr #2
+%<m3> nameptr #3
+%<m4> nameptr #4
+%<m5> nameptr #5
+%<m6> nameptr #6
+%<m7> nameptr #7
+%<m8> nameptr #8
+%<m9> nameptr #9
+%<m0> nameptr #0
+%<m10> #10 +
+%<m20> #20 +
+%<m30> #30 +
+%<m40> #40 +
+%<m50> #50 +
+%<m60> #60 +
+%<m70> #70 +
+%<m80> #80 +
+%<m90> #90 +
+ #1 + =
+%<x1> numnames #1
+%<x2> numnames #2
+%<x3> numnames #3
+%<x4> numnames #4
+%<x5> numnames #5
+%<x6> numnames #6
+%<x7> numnames #7
+%<x8> numnames #8
+%<x9> numnames #9
+%<x0> numnames #0
+%<x10> #10 +
+%<x20> #20 +
+%<x30> #30 +
+%<x40> #40 +
+%<x50> #50 +
+%<x60> #60 +
+%<x70> #70 +
+%<x80> #80 +
+%<x90> #90 +
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+%</nmlm>
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+%<lab&!and-rm&(etal-it|etal-rm)> cite.name.font
+%<*!etal-it>
+%<lab&and-rm&!etal-rm> " " * bbl.etal cite.name.font *
+%<!lab|!and-rm|etal-rm> " " * bbl.etal *
+%</!etal-it>
+%<etal-it> " " * bbl.etal emphasize *
+%<lab&!and-rm&!(etal-it|etal-rm)> cite.name.font
+ }
+ {
+%<*!harnm>
+%<*!and-xcom>
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+%</!and-xcom>
+%<!amper> bbl.and
+%<amper> "\&"
+%</!harnm>
+%<harnm> "\harvardand{}"
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+%<*lab&!and-rm>
+ t "others" =
+ 'skip$
+ { cite.name.font }
+ if$
+%</lab&!and-rm>
+}
+
+FUNCTION {author.editor.key.full}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.key.full}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.key.full}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.full
+ { type$ "proceedings" =
+ 'editor.key.full
+ 'author.key.full
+ if$
+ }
+ if$
+}
+
+%</har|cay|nat>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`output.bibitem'}
+%\changes{1.1}{1993 Nov 12}{Test for missing year, set to {\tt????}.}
+% The \texttt{output.bibitem} function formats the |\bibitem| entries.
+%\changes{1.4(2.2)}{1994 Sep 5}{Move to later location, add
+% \texttt{make.full.names} instead of inserting string \texttt{long.label}}
+%\changes{1.5(2.3)}{1994 Sep 16}{Add option \texttt{nat} for full author list
+% for \texttt{natbib.sty} version~5.3}
+% \changes{3.84}{1997 Nov 18}{For \texttt{nat}, put label in braces}
+% A user has pointed out to me that if the label argument in square brackets
+% are put into braces (within the squares) it is then resistent to any
+% problems if square braces should appear within the label. Do this, but
+% only for the \texttt{nat} option.
+% \begin{macrocode}
+FUNCTION {output.bibitem}
+{ newline$
+%<*!html>
+%<*ay>
+%<!har&!nat> "\bibitem[" write$
+%<!har&nat> "\bibitem[{" write$
+%<har> "\harvarditem" write$
+%<nmd> "\protect\citeauthoryear{" write$
+%<ast> "\protect\astroncite{" write$
+%<cay> "\protect\citeauthoryear{" make.full.names * "}{" * write$
+%<cn> "\protect\citename{" write$
+%<!har> label write$
+%<har> make.full.names duplicate$ label =
+%<har> 'skip$
+%<har> { "[" label * "]" * write$ }
+%<har> if$
+%<har> "{" swap$ * "}{" * write$
+%<har> year duplicate$ empty$
+%<cn> ", }" year duplicate$ empty$
+%<cay|nmd|ast> "}{" year duplicate$ empty$
+%<(har|cn|cay|nmd|ast)&blkyear> { pop$ "" }
+%<(har|cn|cay|nmd|ast)&!blkyear> { pop$ "????" }
+%<har|cn|cay|nmd|ast> 'skip$
+%<har|cn|cay|nmd|ast> if$
+%<har> extra.label * "}{" * write$
+%<cn> * extra.label * "]{" * write$
+%<cay|nmd|ast> * extra.label * "}]{" * write$
+%<alk> "]{" write$
+%<!(har|cay|nmd|ast|alk|cn|nat)> ")]{" write$
+%<nat> ")" make.full.names duplicate$ short.list =
+%<nat> { pop$ }
+%<nat> { * }
+%<nat> if$
+%<nat> "}]{" * write$
+%</ay>
+%<!ay&!(cite|alph)> "\bibitem{" write$
+%<!ay&(cite|alph)> "\bibitem[" label * "]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+%</!html>
+%<*html>
+%<*htdes>
+ "<dt><strong><tt>" write$
+ cite$ write$
+ "</tt></strong></dt>" write$ newline$
+ "<dd>"
+%</htdes>
+%<htlist&!htdes> "<li>"
+%<!htlist&!htdes> "<p>"
+%</html>
+ before.all 'output.state :=
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`if.digit'}
+% \changes{3.84}{1997 Sep 16}{Add macro}
+% Add \texttt{if.digit} and \texttt{n.separate} to convert large page numbers
+% to a separated number.
+% \begin{macrocode}
+%<*pgsep-c|pgsep-s|pgsep-p>
+FUNCTION {if.digit}
+{ duplicate$ "0" =
+ swap$ duplicate$ "1" =
+ swap$ duplicate$ "2" =
+ swap$ duplicate$ "3" =
+ swap$ duplicate$ "4" =
+ swap$ duplicate$ "5" =
+ swap$ duplicate$ "6" =
+ swap$ duplicate$ "7" =
+ swap$ duplicate$ "8" =
+ swap$ "9" = or or or or or or or or or
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`n.separate'}
+% \changes{3.84}{1997 Sep 16}{Add macro for options \texttt{pgsep-c},
+% \texttt{pgsep-s}, \texttt{pgsep-p}}
+% Large page numbers are to be separated in threes, with thin space, comma
+% or period. The number must be 5 digits before the separation occurs.
+% No provision is made for numbers of 7 or more digits.
+% \begin{macrocode}
+FUNCTION {n.separate}
+{ 't :=
+ ""
+ #0 'numnames :=
+ { t empty$ not }
+ { t #-1 #1 substring$ if.digit
+ { numnames #1 + 'numnames := }
+ { #0 'numnames := }
+ if$
+ t #-1 #1 substring$ swap$ *
+ t #-2 global.max$ substring$ 't :=
+ numnames #5 =
+ { duplicate$ #1 #2 substring$ swap$
+ #3 global.max$ substring$
+%<pgsep-c> "," swap$ * *
+%<pgsep-p> "." swap$ * *
+%<pgsep-s&!html> "\," swap$ * *
+%<pgsep-s&html> " " swap$ * *
+ }
+ 'skip$
+ if$
+ }
+ while$
+}
+%</pgsep-c|pgsep-s|pgsep-p>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`n.dashify'}
+% \begin{macrocode}
+FUNCTION {n.dashify}
+{
+%<pgsep-c|pgsep-s|pgsep-p> n.separate
+ '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$
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`word.in'}
+% \changes{2.0}{1994 Jan 31}{Function \texttt{word.in} constructed out of
+% \texttt{bbl.in} or \texttt{bbl.iin}.}
+% \changes{3.0}{1995 Feb 16}{Use only \texttt{bbl.in} and capitalize it
+% as necessary; remove \texttt{bbl.iin}}
+% \changes{3.81}{1996 Jun 19}{Add option \texttt{in-x} to suppress `in'}
+% \changes{4.01}{2000 May 4}{Add option \texttt{in-it} to italicize `in'}
+% The function \texttt{word.in} prints the word \textsl{in} for references
+% that are
+% contained in a larger work, or in conference proceedings. One may have a
+% colon after the word with the option \texttt{in-col}. If blocks of text are
+% to be separated with commas (option \texttt{blk-com}) then the word remains
+% in lower case, as it is defined in \texttt{bbl.in}; but if blocks act as
+% sentences, then it must be capitalized.
+% \begin{macrocode}
+FUNCTION {word.in}
+%<in-x>{ "" }
+%<*!in-x>
+%<blk-com|blk-tita>{ bbl.in
+%<!blk-com&!blk-tita>{ bbl.in capitalize
+%<in-col> ":" *
+%<in-it> emphasize
+ " " * }
+%</!in-x>
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.date'}
+% \changes{1.4(2.2)}{1994 Sep 6}{Add option \texttt{yr-per} to put period
+% before date}
+% \changes{1.5(2.3)}{1994 Sep 16}{Add \texttt{harvard} bracket names to year
+% with new option \texttt{harnm}}
+% \changes{1.6(2.4)}{1995 Feb 2}{Add \texttt{yr-blk} for no punctuation before
+% the date}
+% \changes{3.2}{1995 May 19}{Add \texttt{dtrev} option for year month}
+% \changes{3.2}{1995 May 19}{Add \texttt{mth-bare} for dotless abbreviation
+% of months}
+% \changes{3.4}{1995 Sep 28}{Add \texttt{volp-dt} for date after volume}
+% \changes{3.5}{1995 Oct 9}{Add brace pair after
+% \texttt{\char`\\harvardyearright}}
+% \changes{3.5}{1995 Oct 16}{Add \texttt{aymth} option for months in dates}
+% \changes{3.8}{1996 Mar 19}{Add \texttt{vnum-dt} option}
+% \changes{3.81}{1996 Sep 12}{Add \texttt{yr-com} option}
+% \changes{3.82}{1996 Dec 12}{Fix bug that left off extra label for plain year}
+% \changes{3.84}{1997 Oct 30}{Replace \texttt{volp-dt} with \texttt{jdt-p}}
+% \changes{3.84}{1997 Oct 30}{Replace \texttt{vnum-dt} with \texttt{jdt-vs}}
+% \changes{3.84}{1997 Oct 30}{Add \texttt{jdt-v}}
+% \changes{3.85}{1998 Feb 10}{Do \texttt{yr-blk} right}
+% \changes{3.86}{1998 Feb 25}{Add \texttt{jdt-pc} to add comma after year}
+% \changes{3.87}{1998 Jul 23}{Add \texttt{xmth} to suppress month for numericals}
+% \changes{3.87}{1998 Jul 23}{For \texttt{harnm}, suppress punctuation before date}
+% \changes{3.89}{1999 May 12}{Add \texttt{blkyear} option}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate the date for further processing}
+% \changes{4.31}{2011 Jan 10}{Allow options for punctuation preceding date to work with harvard}
+% The new \texttt{harvard.sty} allows variable brackets around the date
+% in the reference list. It uses |\harvardyearleft| and |\harvardyearright|
+% in the \texttt{.bst} files. Allow this with the option \texttt{harnm},
+% which could actually be used without the \texttt{har} option. Note that
+% this overrides the other year formatting options, except for the preceding punctuation.
+% \begin{macrocode}
+%<*ay>
+FUNCTION {format.date}
+{ year "year" bibinfo.check duplicate$ empty$
+ {
+%<*!blkyear>
+ "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????"
+%</!blkyear>
+ }
+ 'skip$
+ if$
+%<*aymth>
+ month "month" bibinfo.check duplicate$ empty$
+ 'skip$
+ {
+%<dtrev> swap$
+ " " * swap$
+ }
+ if$
+ *
+%<mth-bare> remove.dots
+%</aymth>
+%<dtbf> bolden
+ extra.label *
+%<*!harnm>
+%<*yr-par|yr-brk|yr-col|yr-blk|yr-com|yr-per>
+ before.all 'output.state :=
+%<yr-par> " (" swap$ * ")" *
+%<!yr-par&yr-brk> " [" swap$ * "]" *
+%<!yr-par&!yr-brk&yr-col> ": " swap$ *
+%<!yr-par&!yr-brk&!yr-col&yr-com> ", " swap$ *
+%<!yr-par&!yr-brk&!yr-col&!yr-com&yr-per> after.sentence 'output.state :=
+%<!yr-par&!yr-brk&!yr-col&!yr-com&!yr-per&yr-blk> " " swap$ *
+%</yr-par|yr-brk|yr-col|yr-blk|yr-com|yr-per>
+%</!harnm>
+%<*harnm>
+ before.all 'output.state :=
+ " \harvardyearleft " swap$ * "\harvardyearright{}" *
+%<yr-col> ":" swap$ *
+%<!yr-col&yr-com> "," swap$ *
+%<!yr-col&!yr-com&yr-per> after.sentence 'output.state :=
+%<!yr-col&!yr-com&!yr-per&yr-blk> " " swap$ *
+%</harnm>
+}
+%</ay>
+%<*!ay>
+FUNCTION {format.date}
+{
+%<!xmth> month "month" bibinfo.check
+%<xmth> ""
+ duplicate$ empty$
+ year "year" bibinfo.check duplicate$ empty$
+ { swap$ 'skip$
+ { "there's a month but no year in " cite$ * warning$ }
+ if$
+ *
+ }
+ { swap$ 'skip$
+ {
+%<showstack> month year
+%<!dtrev> swap$
+ " " * swap$
+ }
+ if$
+ *
+%<mth-bare> remove.dots
+ }
+ if$
+%<dtbf> bolden
+%<*yr-par|yr-brk|yr-col|yr-com|yr-per|yr-blk>
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+%<yr-par> " (" swap$ * ")" *
+%<!yr-par&yr-brk> " [" swap$ * "]" *
+%<!yr-par&!yr-brk&yr-col> ": " swap$ *
+%<!yr-par&!yr-brk&!yr-col&yr-com> ", " swap$ *
+%<!yr-par&!yr-brk&!yr-col&!yr-com&yr-per> after.sentence 'output.state :=
+%<!yr-par&!yr-brk&!yr-col&!yr-com&!yr-per&yr-blk> " " swap$ *
+ }
+ if$
+%</yr-par|yr-brk|yr-col|yr-com|yr-per|yr-blk>
+}
+%</!ay>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.year'}
+% \changes{3.84}{1997 Oct 30}{Add function}
+% For the options that put the year into the journal specifications, use a
+% special formatter separate from the regular date formatter.
+% The year is always in parentheses (except for appended to journal name).
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate year for further processing}
+% \begin{macrocode}
+%<*jdt-p|jdt-pc|jdt-v|jdt-vs>
+FUNCTION{format.year}
+{ year "year" bibinfo.check duplicate$ empty$
+ { "empty year in " cite$ *
+%<ay&!blkyear> "; set to ????" *
+ warning$
+%<ay&!blkyear> pop$ "????"
+ }
+ {
+%<!ay&jdt-vs> " (" swap$ * ")" *
+%<!ay&!jdt-vs> "(" swap$ * ")" *
+ }
+ if$
+%<*ay>
+ extra.label *
+%<jdt-vs> " (" swap$ * ")" *
+%<!jdt-vs> "(" swap$ * ")" *
+%</ay>
+}
+%</jdt-p|jdt-pc|jdt-v|jdt-vs>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.btitle'}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate title for further processing.}
+% \begin{macrocode}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+%<!btit-rm> emphasize
+%<lang> select.language
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`either.or.check'}
+% \begin{macrocode}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.bvolume'}
+% \changes{4.11}{2003 Jun 23}{Add \texttt{ser-vol}}
+% \begin{macrocode}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+%<*!ser-vol>
+ { swap$ bbl.of space.word * swap$
+ emphasize * }
+%</!ser-vol>
+%<ser-vol> { emphasize ", " * swap$ * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.number.series'}
+% \begin{macrocode}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+%<*num-xser>
+ { series empty$
+ { number "number" bibinfo.check }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+%</num-xser>
+%<*!num-xser>
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+%</!num-xser>
+ if$
+ }
+ { "" }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`is.num'}
+% \changes{2.0}{1994 Jan 31}{Add function to test for digit.}
+% \changes{3.87h}{1998 Nov 27}{Option to suppress to save wiz-functions}
+% This function takes the single-character string on the stack and returns
+% 1 if it is a digit, else 0.
+% \begin{macrocode}
+%<*!xedn>
+FUNCTION {is.num}
+{ chr.to.int$
+ duplicate$ "0" chr.to.int$ < not
+ swap$ "9" chr.to.int$ > not and
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`extract.num'}
+% \changes{2.0}{1994 Jan 31}{Add function to extract leading number from
+% a literal string.}
+% \changes{3.87h}{1998 Nov 27}{Option to suppress to save wiz-functions}
+% This function tests the string on the stack to see if it begins with a
+% number. If so, that number is left on the stack; if the string contains
+% no numbers at the start, it is left unchanged. The idea is to convert
+% \textsl{1st} to \textsl{1} and leave \textsl{first} as is.
+% This is used by {\tt convert.edition}.
+% \begin{macrocode}
+FUNCTION {extract.num}
+{ duplicate$ 't :=
+ "" 's :=
+ { t empty$ not }
+ { t #1 #1 substring$
+ t #2 global.max$ substring$ 't :=
+ duplicate$ is.num
+ { s swap$ * 's := }
+ { pop$ "" 't := }
+ if$
+ }
+ while$
+ s empty$
+ 'skip$
+ { pop$ s }
+ if$
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`convert.edition'}
+% \changes{2.0}{1994 Jan 31}{Add function to convert \texttt{edition} entry
+% text from word to a function}
+% \changes{3.87h}{1998 Nov 27}{Option to suppress to save wiz-functions}
+% \changes{3.89d1}{1999 July 20}{AO: change calling sequence: arg on stack}
+% The function \texttt{convert.edition} takes the text in the field
+% \texttt{edition} and changes it to the language-specific equivalent. As
+% originally planned for \btx, this field should contain the words
+% \textsl{First}, \textsl{Second}, etc. Being so explicit,
+% it is not so easy to translate, nor to
+% convert to \textsl{1st}, \textsl{2nd}, etc., if one wanted.
+% This function carries out the translation, by changing
+% \textsl{first} or \textsl{1} to \texttt{bbl.first}, and so
+% on. The field is reduced to lower case to make it case insensitive. If no
+% translation is found, then the original text in \texttt{edition} is used
+% instead, as it stands. However, if the original is a number greater than
+% the maximum for which text is provided, then \texttt{bbl.th} is added to
+% it.
+% \begin{macrocode}
+FUNCTION {convert.edition}
+{ extract.num "l" change.case$ 's :=
+ s "first" = s "1" = or
+ { bbl.first 't := }
+ { s "second" = s "2" = or
+ { bbl.second 't := }
+ { s "third" = s "3" = or
+ { bbl.third 't := }
+ { s "fourth" = s "4" = or
+ { bbl.fourth 't := }
+ { s "fifth" = s "5" = or
+ { bbl.fifth 't := }
+ { s #1 #1 substring$ is.num
+%<!english&exlang> { s bbl.th * 't := }
+%<english|!exlang> { s eng.ord 't := }
+ { edition 't := }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ t
+}
+%</!xedn>
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.edition'}
+% \changes{2.0}{1994 Jan 31}{Add call to \texttt{convert.edition}}
+% This function formats the text for the edition specification, such as
+% ``Second edition''. It combines the edition number with the word
+% \textsl{edition}.
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate edition for further processing.}
+% \changes{4.01}{2000 May 4}{Put \texttt{change.case\$} before \texttt{bibinfo.check}}
+% \begin{macrocode}
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+%<!xedn> convert.edition
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ " " * bbl.edition *
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+INTEGERS { multiresult }
+% \end{macrocode}
+%
+% \begin{macro}{`multi.page.check'}
+% \begin{macrocode}
+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
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.pages'}
+% \changes{3.6}{1995 Nov 24}{Add option \texttt{bkpg-par}}
+% \changes{3.88}{1998 Dec 2}{Add option \texttt{bkpg-x}}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate pages for further processing.}
+% \changes{4.00}{1999 Dec 10}{Add \texttt{!ppx} test to avoid extra space}
+% \begin{macrocode}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+%<!bkpg-x&!ppx> bbl.pages swap$
+ n.dashify
+ }
+ {
+%<!bkpg-x&!ppx> bbl.page swap$
+ }
+ if$
+%<!bkpg-x&!ppx> tie.or.space.prefix
+ "pages" bibinfo.check
+%<!bkpg-x&!ppx> * *
+%<bkpg-par> "(" swap$ * ")" *
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`first.page'}
+% \begin{macrocode}
+%<*jpg-1>
+FUNCTION {first.page}
+{ 't :=
+ ""
+ { t empty$ not t #1 #1 substring$ "-" = not and }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+}
+
+%</jpg-1>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.journal.pages'}
+% \changes{3.82}{1996 Nov 15}{Remove from \texttt{format.vol.num.pages} to
+% be a separate function}
+% \changes{3.84}{1997 Oct 30}{Remove option \texttt{vnum-pg}}
+% \changes{3.84}{1997 Oct 30}{Replace \texttt{volp-dt} with \texttt{jdt-p}}
+%
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate pages for further processing.}
+%
+% Note: this function gets called with something on the stack.
+% It may be the volume and number.
+% \begin{macrocode}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+%<volp-sp> ": " *
+%<*!volp-sp>
+%<volp-blk> " " *
+%<*!volp-blk>
+%<volp-com> ", " *
+%<*!volp-com>
+%<volp-semi> "; " *
+%<!volp-semi> ":" *
+%</!volp-com>
+%</!volp-blk>
+%</!volp-sp>
+%<!jdt-v&!jdt-vs&jdt-p> format.year * " " *
+%<!jdt-v&!jdt-vs&!jdt-p&jdt-pc> format.year * ", " *
+ swap$
+%<jpg-1> first.page
+%<!jpg-1> n.dashify
+%<*jwdpg>
+ pages multi.page.check
+ 'bbl.pages
+ 'bbl.page
+ if$
+ swap$ tie.or.space.prefix
+%</jwdpg>
+ "pages" bibinfo.check
+%<jwdpg> * *
+ *
+ }
+ if$
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.journal.eid'}
+%
+% \changes{3.89d1}{1999 July 20}{AO: add function to emit the eid information.}
+% This function is called with something on the stack (journal vol, number)
+% and appends \texttt{eid} and \texttt{numpages} if those field are non-empty.
+% Very similar to \texttt{format.journal.pages}.
+%
+% For the AGU style of including the DOI as part of the EID, the DOI number
+% is appended too.
+% \begin{macrocode}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+%<volp-sp> ": " *
+%<*!volp-sp>
+%<volp-blk> " " *
+%<*!volp-blk>
+%<volp-com> ", " *
+%<*!volp-com>
+%<volp-semi> "; " *
+%<!volp-semi> ":" *
+%</!volp-com>
+%</!volp-blk>
+%</!volp-sp>
+ }
+ if$
+ swap$ *
+%<*revdata>
+ numpages empty$ 'skip$
+ { bbl.eidpp numpages tie.or.space.prefix
+ "numpages" bibinfo.check * *
+ " (" swap$ * ")" * *
+ }
+ if$
+%</revdata>
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.vol.num.pages'}
+% \changes{1.4(2.2)}{1994 Sep 6}{Add option \texttt{volp-sp} to put space
+% after colon in vol:~page.}
+% \changes{1.5(2.3)c}{1995 Jan 20}{Add options \texttt{vnum-h},
+% \texttt{vnum-nr} and \texttt{vnum-x} for various formats of
+% journal vol number}
+% \changes{1.7(2.5)}{1995 Feb 9}{Add options \texttt{vnum-sp} and
+% \texttt{vnum-cm}}
+% \changes{3.0}{1995 Mar 17}{Add option \texttt{volp-semi}}
+% \changes{3.4}{1995 Sep 28}{Put \texttt{bolden} in right place for
+% \texttt{vol-2bf} option}
+% \changes{3.8}{1996 Mar 19}{Put date between volume and number}
+% \changes{3.8}{1996 Mar 19}{Add possibilitity of `page' word}
+% \changes{3.81}{1996 Jun 19}{Activate \texttt{jwdpg} option properly}
+% \changes{3.81}{1996 Jun 19}{Add possibilitity of `volume' word}
+% \changes{3.82}{1996 Nov 15}{Add option \texttt{pp-last}}
+% Version 3.84, I have rationalized several options that placed the date in the
+% journal specifications. It was rather chaotic before, but now it should be
+% more systematic. This means some options have been removed, something that I
+% do not like to do.
+%
+% The option \texttt{pp-last} suppresses the pages in the formatting macros, and
+% sees to it that the pages are added just before any notes in those entries
+% that take pages. This applies to more than just \texttt{article}, but to
+% \texttt{inbook}, \texttt{incollection} as well.
+%
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate the volume and number for
+% further processing.}
+% \begin{macrocode}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+%<jwdvol> bbl.volume swap$ tie.or.space.prefix
+ "volume" bibinfo.check
+%<jwdvol> * *
+ }
+ if$
+%<vol-bf&!vol-2bf> bolden
+%<!vol-bf&!vol-2bf&vol-it> emphasize
+%<jdt-v|jdt-vs> format.year *
+%<*!vnum-x>
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+%<vnum-sp> "~(" swap$ * ")" *
+%<!vnum-sp&vnum-cm> ", " swap$ *
+%<!vnum-sp&!vnum-cm&vnum-nr> ", " bbl.nr * number tie.or.space.prefix pop$ * swap$ *
+%<!vnum-sp&!vnum-cm&!vnum-nr&vnum-h> ", \#" swap$ *
+%<!vnum-sp&!vnum-cm&!vnum-nr&!vnum-h&vnum-b> " " swap$ *
+%<!vnum-sp&!vnum-cm&!vnum-nr&!vnum-h&!vnum-b> "(" swap$ * ")" *
+ }
+ if$ *
+%<!vol-bf&vol-2bf> bolden
+%</!vnum-x>
+%<*!pp-last>
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+%</!pp-last>
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.chapter.pages'}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate series and chapter for
+% further processing.}
+% \begin{macrocode}
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+%<!pp-last> 'format.pages
+%<pp-last> { "" }
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+%<*!pp-last>
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+%</!pp-last>
+ }
+ if$
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`bt.enquote'}
+% \changes{3.84}{1997 Oct 31}{Add function}
+% \changes{3.89d1}{1999 July 20}{AO: trap \texttt{empty\$} argument}
+% This is to place the booktitle for proceedings and collections into quotes.
+% If punctuation is to be included, then add a comma unless a stop already
+% exists, or add a period under the only circumstances that
+% |format.in.ed.booktitle| is followed by |new.sentence|.
+% \begin{macrocode}
+%<*bt-qq>
+FUNCTION {bt.enquote}
+{ duplicate$ empty$ 'skip$
+ { "\enquote{" swap$ *
+%<*!qx>
+ non.stop
+ { ",} " * }
+ { "}, " * }
+ if$
+%</!qx>
+%<*qx>
+ "}, " *
+%</qx>
+ }
+ if$
+}
+%</bt-qq>
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{`format.booktitle'}
+% \changes{3.89d1}{1999 July 20}{AO: new function}
+% The function \texttt{format.booktitle} pushes one object
+% (the book title, suitably encapsulated) onto the stack.
+% It is currently used in \texttt{format.incoll.inproc.crossref}
+% and in \texttt{format.in.ed.booktitle}, and should be used whenever accessing
+% the \texttt{booktitle} field for eventual output.
+%
+% If the book title is empty or missing, the function pushes an empty string.
+% \begin{macrocode}
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+%<!bt-qq&!bt-rm> emphasize
+%<bt-qq> bt.enquote
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.in.ed.booktitle'}
+% \changes{1.5(2.3)b}{1995 Jan 18}{Add option \texttt{edby-par} to put editors
+% in parentheses}
+% \changes{1.6(2.4)}{1995 Feb 2}{If \texttt{ed} and \texttt{edby} given
+% together, abbreviate `edited by' to `ed(s).'}
+% \changes{3.1}{1995 May 2}{Add option \texttt{edbyx} to replace `edited by'
+% by `ed(s).'}
+% \changes{3.81}{1996 Jun 26}{Add option \texttt{edcap}}
+% \changes{3.84}{1997 Oct 10}{Fix bug that added extra space sometimes}
+% \changes{3.88}{1998 Dec 2}{Book titles may also be roman}
+% \changes{3.88}{1998 Dec 2}{New options \texttt{edby-parc} and \texttt{edbyw}}
+% \changes{3.89d1}{1999 July 20}{AO: rewritten; encapsulates \texttt{booktitle} and
+% \texttt{editor} for later processing}
+% \changes{4.00}{1999 Sept 17}{PWD: fix up several bugs}
+% Prior to version 3.81, the \textsl{Editor} or \textsl{Edited by} in
+% parentheses was meant to be capitalized, but this did not work properly.
+% Now the option \texttt{edcap} produces this, and default is not capitalized.
+%
+% Notes on \dtx{} options:
+% \begin{itemize}
+% \item
+% The following combinations are available through the \texttt{makebst.tex} interface:
+% \begin{verbatim}
+% (
+% <default>
+% |edby ( |edbyx |edbyy|edbyw[edcap])
+% |edby-par (|edcap|edbyx[edcap]|edbyy )
+% |edby-parc(|edcap|edbyx )
+% )
+% \end{verbatim}
+% \item
+% \texttt{edby}, \texttt{edby-par}, and \texttt{edby-parc} are mutually exclusive
+% and, except for the default, exhaustive.
+% \item
+% \texttt{edbyx}, \texttt{edbyw}, and \texttt{edbyy} are mutually exclusive
+% and, except for the default, exhaustive.
+% \item
+% \texttt{edcap} is independent of the above two groups of options.
+% \item
+% When parentheses need to be applied, we make sure that the respective
+% \dtx{} guard expressions are mutually exclusive.
+% It makes no sense for \texttt{edbyw} to be in effect if either of
+% \texttt{edby-par} or \texttt{edby-parc} is in effect.
+% \item
+% \texttt{makebst.tex} only activates \texttt{edcap} in certain cases,
+% but we do no checking here, applying it consistently to the
+% ``editor'' text entity.
+% \item
+% The code between \texttt{<!edpar>} and \verb+<edpar\|edparc>+
+% \emph{must} match the corresponding code in \texttt{format.editors}.
+% This means that in the default case, formatting is controlled by
+% a \dtx{} mechanism entirely different from the other cases.
+% \item \texttt{ser-ed} has been added to suit AGU. Result of series plus
+% volume to go between booktitle and editors; must remove \texttt{format.bvolume}
+% from \texttt{incollection} and \texttt{inproceedings}.
+% \end{itemize}
+%
+% \begin{macrocode}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+%<showstack>% btitle
+%<*ser-ed>
+ format.bvolume duplicate$ empty$ 'pop$
+ { ", " swap$ * * }
+ if$
+%</ser-ed>
+ editor "editor" format.names.ed duplicate$ empty$ 'pop$
+ {
+%<*!(edby|edby-par|edby-parc)>
+%<showstack>% btitle ednms
+%<!edpar&!edparxc> "," *
+ " " *
+ get.bbl.editor
+%<bkedcap> capitalize
+%<edpar> "(" swap$ * "), " *
+%<!edpar&(edparc|edparxc)> "(" swap$ * ") " *
+%<!edpar&!(edparc|edparxc)> ", " *
+ * swap$
+%<showstack>% eds btitle
+%</!(edby|edby-par|edby-parc)>
+%<*edby|edby-par|edby-parc>
+%<showstack>% btitle ednms
+%<edbyx|edbyy|edbyw> get.bbl.editor
+%<!(edbyx|edbyy|edbyw)> bbl.edby
+%<edcap> capitalize
+%<!(edby-par|edby-parc)&edbyw> "(" swap$ * ")" *
+%<showstack>% btitle ednms ed
+%<(edby-par|edby)&edbyy> swap$ "," *
+ " " * swap$ *
+%<showstack>% btitle ednms-ed
+%<(edby-par|edby-parc)&!edbyw> "(" swap$ * ")" *
+ swap$
+%<edby|edby-parc> "," *
+ " " * swap$
+%</edby|edby-par|edby-parc>
+%<showstack>% btitle ednms-ed (or ednms-ed btitle)
+ * }
+ if$
+%<showstack>% btitle-ednms-ed (or ednms-ed-btitle) (or btitle)
+ word.in swap$ *
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`empty.misc.check'}
+% \begin{macrocode}
+%<*!ay>
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+%<!seq-no|alph> key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+%</!ay>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.thesis.type'}
+% \begin{macrocode}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.tr.number'}
+% \changes{4.01}{2000 May 4}{Encapsulate number}
+% \begin{macrocode}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.article.crossref'}
+%\changes{1.3(2.1)}{1994 Jul 1}{Emphasize \texttt{journal} with
+% \texttt{emphasize}, not explicitly}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate journal for further processing.}
+% The \texttt{journal} field was emphasized emplicitly, but it should be
+% done by command.
+% \begin{macrocode}
+FUNCTION {format.article.crossref}
+{
+%<*!ay>
+ key duplicate$ empty$
+ { pop$
+ journal duplicate$ empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }
+ { "journal" bibinfo.check emphasize word.in swap$ * }
+ if$
+ }
+ { word.in swap$ * " " *}
+ if$
+%</!ay>
+%<ay> word.in
+%<!html> " \cite{" * crossref * "}" *
+%<html> " <tt>" * crossref * "</tt>" *
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.crossref.editor'}
+% \changes{3.89d1}{1999 July 20}{AO: editor encapsulated for later processing}
+% \changes{3.89d1}{1999 July 20}{AO: fixed typo: "etal_rm"->"etal-rm"}
+% \begin{macrocode}
+%<*!ay>
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+%<nmft&nmfted&nmand-rm> bib.name.font
+ "editor" bibinfo.check
+ editor num.names$ duplicate$
+ #2 >
+ { pop$
+%<nmft&nmfted&!nmand-rm&(etal-it|etal-rm)> bib.name.font
+ "editor" bibinfo.check
+ " " * bbl.etal
+%<etal-it> emphasize
+ *
+%<nmft&nmfted&!nmand-rm&!(etal-it|etal-rm)> bib.name.font
+%<nmft&nmfted&!nmand-rm&!(etal-it|etal-rm)> "others" 't :=
+ }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+%<nmft&nmfted&!nmand-rm&(etal-it|etal-rm)> bib.name.font
+ "editor" bibinfo.check
+ " " * bbl.etal
+%<etal-it> emphasize
+ *
+%<nmft&nmfted&!nmand-rm&!(etal-it|etal-rm)> bib.name.font
+%<nmft&nmfted&!nmand-rm&!(etal-it|etal-rm)> "others" 't :=
+ }
+ {
+%<*!harnm>
+%<!amper> bbl.and space.word
+%<amper> " \& "
+%</!harnm>
+%<harnm> " \harvardand\ "
+ * editor #2 "{vv~}{ll}" format.name$
+%<nmft&nmfted&nmand-rm> bib.name.font
+ "editor" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+%<*nmft&nmfted&!nmand-rm>
+ t "others" =
+ 'skip$
+ { bib.name.font "editor" bibinfo.check }
+ if$
+%</nmft&nmfted&!nmand-rm>
+}
+%</!ay>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.book.crossref'}
+%\changes{1.3(2.1)}{1994 Jul 1}{Emphasize \texttt{series} with
+% \texttt{emphasize}, not explicitly}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate volume and series for
+% further processing.}
+% The \texttt{series} field was emphasized emplicitly, but it should be
+% done by command.
+% \begin{macrocode}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+%<!(blk-com|blk-tita)> capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+%<*!ay>
+ 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$
+ "" *
+ }
+ { series emphasize * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+%</!ay>
+%<!html> " \cite{" * crossref * "}" *
+%<html> " <tt>" * crossref * "</tt>" *
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.incoll.inproc.crossref'}
+%\changes{1.3(2.1)}{1994 Jul 1}{Emphasize \texttt{booktitle} with
+% \texttt{emphasize}, not explicitly}
+% \changes{3.89d1}{1999 July 20}{AO: call \texttt{format.booktitle}}
+% The \texttt{booktitle} field was emphasized emplicitly, but it should be
+% done by command.
+% \begin{macrocode}
+FUNCTION {format.incoll.inproc.crossref}
+{
+%<*!ay>
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { format.booktitle duplicate$ empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ }
+ { word.in swap$ * }
+ if$
+ }
+ { word.in key * " " *}
+ if$
+ }
+ { word.in format.crossref.editor * " " *}
+ if$
+%</!ay>
+%<ay> word.in
+%<!html> " \cite{" * crossref * "}" *
+%<html> " <tt>" * crossref * "</tt>" *
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.org.or.pub'}
+% \changes{3.3}{1995 Aug 7}{Add option \texttt{add-pub} which makes use
+% of this function}
+% \changes{3.8}{1996 Mar 12}{Add option \texttt{pub-par} to put publisher
+% in parentheses}
+% \changes{3.81}{1996 Sep 16}{Add option \texttt{pub-date} to put publisher
+% and date in parentheses together}
+% \changes{3.82}{1996 Dec 16}{Add \texttt{add.blank} for \texttt{pub-par}}
+% \changes{3.88}{1998 Dec 2}{Add extra label with \texttt{pub-date}}
+% \changes{3.88}{1998 Dec 2}{Option \texttt{pub-nopar} to suppress parentheses
+% with \texttt{pub-date}}
+% \changes{3.88}{1998 Dec 3}{Change to include organization if present}
+% \changes{4.02}{2000 June 27}{Include \texttt{dtbf} option with \texttt{pub-date}}
+% Psychology journals often want \textit{address}: \textit{publisher}.
+%
+% \textsl{Nature} wants publisher and date in parentheses, and when both
+% are there, they are merged into one set.
+%
+% Call function \texttt{add.blank} before parentheses so suppress preceding
+% punctuation, which looks strange when publisher in parentheses.
+%
+% MPG Jahrbuch wants publisher and year, but without parentheses. Add
+% \texttt{pub-nopar} to be used with \texttt{pub-date}.
+%
+% Have now (3.87.h) extended this function to include the organization, if
+% present. This is for \texttt{inproceedings} and \texttt{proceedings} where
+% the publisher is optional, and organization too. If the publisher is missing,
+% but the organization present, it is formatted like the publisher. This
+% complication comes from styles that want the publisher/organization to have
+% the date included, all in parentheses.
+%
+% This function is called by \texttt{format.publisher.address} and
+% \texttt{format.organization.address}, each putting the appropriate text
+% into the stack first.
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate address and year for
+% further processing.}
+%
+% \begin{macrocode}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+%<*pub-date&!ay>
+ year empty$
+ { "empty year in " cite$ * warning$ }
+ 'skip$
+ if$
+%</pub-date&!ay>
+%<*!(pub-date&ay)>
+ address empty$ t empty$ and
+%<pub-date> year empty$ and
+ 'skip$
+ {
+%</!(pub-date&ay)>
+%<pub-par|(pub-date&!pub-xpar)> add.blank "(" *
+%<*add-pub>
+ address "address" bibinfo.check *
+ t empty$
+ 'skip$
+%</add-pub>
+%<*!add-pub>
+ t empty$
+ { address "address" bibinfo.check *
+ }
+ { t *
+ address empty$
+ 'skip$
+ { ", " * address "address" bibinfo.check * }
+ if$
+ }
+%</!add-pub>
+%<*add-pub>
+ { address empty$
+ 'skip$
+ { ": " * }
+ if$
+ t *
+ }
+%</add-pub>
+ if$
+%<*pub-date&!ay>
+ year empty$
+ 'skip$
+ { t empty$ address empty$ and
+ 'skip$
+%<!pub-xc> { ", " swap$ * * }
+%<pub-xc> { " " swap$ * * }
+ if$
+ year "year" bibinfo.check
+%<dtbf> bolden
+ *
+ }
+ if$
+%</pub-date&!ay>
+%<*pub-date&ay>
+ year duplicate$ empty$
+%<*!blkyear>
+ { "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????" }
+%</!blkyear>
+%<*blkyear>
+ { "empty year in " cite$ * warning$
+ pop$ "" }
+%</blkyear>
+%<!dtbf> { "year" bibinfo.check extra.label * }
+%<dtbf> { "year" bibinfo.check bolden extra.label * }
+ if$
+ t empty$ address empty$ and
+ { * }
+%<!pub-xc> { ", " swap$ * * }
+%<pub-xc> { " " swap$ * * }
+ if$
+%</pub-date&ay>
+%<pub-par|(pub-date&!pub-xpar)> ")" *
+%<*!(pub-date&ay)>
+ }
+ if$
+%</!(pub-date&ay)>
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.publisher.address'}
+% \changes{3.88}{1998 Dec 3}{Add macro; works with \texttt{format.org.or.pub}}
+% \changes{3.89d1}{1999 July 20}{AO: encapsulate \texttt{publisher}
+% and \texttt{organization}}
+% \changes{4.00}{1999 Oct 28}{Check with \texttt{bibinfo.warn}}
+% \begin{macrocode}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`format.organization.address'}
+% \changes{3.88}{1998 Dec 3}{Add macro; works with \texttt{format.org.or.pub}}
+% \begin{macrocode}
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`name.or.dash'}
+% \changes{3.83}{1997 Feb 5}{Add function to replace repeated names by dash}
+% \changes{4.06}{2003 Apr 2}{Add double and triple dashes}
+% This function stores what is on the stack, compares it with previous value,
+% and replaces it with a long dash if they are equal. What is on the stack
+% should be author or editor names for the current entry.
+% \begin{macrocode}
+%<*nmdash>
+STRINGS {oldname}
+
+FUNCTION {name.or.dash}
+{ 's :=
+ oldname empty$
+ { s 'oldname := s }
+ { s oldname =
+%<*!au-col>
+%<!nmd-2&!nmd-3> { "---" }
+%<nmd-2&!nmd-3> { "---{}---" }
+%<nmd-3> { "---{}---{}---" }
+%</!au-col>
+%<*au-col>
+%<!nmd-2&!nmd-3> { "---" add.blank }
+%<nmd-2&!nmd-3> { "---{}---" add.blank }
+%<nmd-3> { "---{}---{}---" add.blank }
+%</au-col>
+ { s 'oldname := s }
+ if$
+ }
+ if$
+}
+
+%</nmdash>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`article'}
+% \changes{1.5(2.3)b}{1995 Jan 18}{Add option \texttt{yrp-x} to suppress
+% punctuation following date at beginning}
+% \changes{3.0}{1995 Mar 8}{Add option \texttt{yrp-col} to add colon after
+% date at beginning}
+% \changes{3.0}{1995 Mar 20}{Add option \texttt{jxper} to remove periods
+% from journal name}
+% \changes{3.2}{1995 May 19}{Add option \texttt{dt-jnl} to make date part of
+% the journal specification, follows journal name.}
+% \changes{3.4}{1995 Sep 28}{Add option \texttt{au-col}}
+% \changes{3.6}{1995 Nov 23}{Add option \texttt{jttl-rm}}
+% \changes{3.7}{1996 Feb 5}{Put \texttt{purify\$} before \texttt{emphasize}}
+% \changes{3.81}{1996 Jun 26}{Add option \texttt{blk-tita} for article only}
+% \changes{3.83}{1997 Feb 5}{Add option \texttt{blknt} for period before notes}
+% \changes{3.88}{1999 Feb 25}{Add option \texttt{injnl} for `in' with journal
+% names}
+%
+% \changes{3.89d1}{1999 July 20}{AO: call \texttt{format.journal} and
+% \texttt{format.journal.eid}; call \texttt{format.eprint}, and
+% \texttt{format.url}.}
+% \changes{4.02}{2000 June 27}{Fix bug with texttt{injnl}}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% \begin{macrocode}
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+%<ay> author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<*dt-beg&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v>
+ format.date "year" output.check
+ date.block
+%</dt-beg&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v>
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+%<*!jtit-x>
+ format.title "title" output.check
+%<blk-com&tit-qq> end.quote.title
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<*blk-tit|blk-tita>
+%<!tit-col> new.sentence
+%<tit-col> add.colon
+%</blk-tit|blk-tita>
+%</!jtit-x>
+ crossref missing$
+ {
+ journal
+%<jxper> remove.dots
+ "journal" bibinfo.check
+%<!jttl-rm> emphasize
+%<injnl> word.in swap$ *
+ "journal" output.check
+%<jnm-x> add.blank
+%<*!dt-beg&!dt-end&dt-jnl&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v>
+ format.date "year" output.check
+ date.block
+%</!dt-beg&!dt-end&dt-jnl&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v>
+ format.vol.num.pages output
+%<doi&agu-doi> format.doi output
+%<*!dt-beg&!dt-end&!dt-jnl&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v>
+ format.date "year" output.check
+%</!dt-beg&!dt-end&!dt-jnl&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v>
+ }
+ { format.article.crossref output.nonnull
+%<!pp-last> format.pages output
+ }
+ if$
+%<*pp-last>
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+%</pp-last>
+%<issn> format.issn output
+%<(doi|(url-doi&!url))&!agu-doi> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end&!jdt-p&!jdt-pc&!jdt-vs&!jdt-v>
+%<eprint> format.eprint output
+%<*revdata>
+ format.url output
+%</revdata>
+ fin.entry
+%<harnm|url-nl> write.url
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`book'}
+%\changes{2.0a}{1994 Aug 30}{Fix up \texttt{new.sentence} so not added with
+% \texttt{blk-com}}
+% \changes{3.89d1}{1999 July 20}{AO: call \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% \begin{macrocode}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+%<ay> editor format.key output
+%<!edpar&(edparc|edparxc)&!au-col> add.blank
+%<au-col> add.colon
+%<nmdash> name.or.dash
+ }
+ { format.authors output.nonnull
+%<au-col> add.colon
+%<nmdash> name.or.dash
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+%<dt-beg&!pub-date> format.date "year" output.check
+%<dt-beg&!pub-date> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+%<!numser> format.number.series output
+%<pre-edn> format.edition output
+%<!blk-com&!blk-tit&!blk-tita> new.sentence
+%<numser> format.number.series output
+%<pg-bk&pg-pre> format.book.pages output
+ format.publisher.address output
+ }
+ {
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+ format.book.crossref output.nonnull
+%<!dt-beg&!dt-end&pub-date> format.date "year" output.check
+ }
+ if$
+%<!pre-edn> format.edition output
+%<!dt-beg&!dt-end&!pub-date> format.date "year" output.check
+%<isbn> format.isbn output
+%<pg-bk&!pg-pre> format.book.pages output
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end&!pub-date>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end&!pub-date>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`booklet'}
+% \changes{3.89d1}{1999 July 20}{AO: call \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% \begin{macrocode}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+%<ay> author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<ay&dt-beg> format.date "year" output.check
+%<!ay&dt-beg> format.date output
+%<dt-beg> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+ format.title "title" output.check
+%<blk-com&tit-qq> end.quote.title
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+%<ay&!dt-beg&!dt-end> format.date "year" output.check
+%<!ay&!dt-beg&!dt-end> format.date output
+%<isbn> format.isbn output
+%<pg-bk> format.book.pages output
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*ay&!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</ay&!dt-beg&dt-end>
+%<*!ay&!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date output
+%</!ay&!dt-beg&dt-end>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`inbook'}
+% \changes{3.86}{1998 Feb 25}{Use \texttt{format.date} in place of
+% \texttt{year} alone}
+% \changes{3.89d1}{1999 July 20}{AO: call \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% The medical journals, with option \texttt{dt-jnl}, have the date as part of
+% the journal specification. For chapters in books, they want date and pages
+% to appear at the end, with a space between them. (For journals, there is to be
+% no space.) Suppress the chapter specification (for now).
+%
+% The \texttt{dt-jnl} option usually behaves as the default, except for some
+% special entries, like this one.
+%
+% \changes{4.13}{2004 Feb 9}{Restore chap specification with \texttt{dt-jnl} option.}
+% Restore the chapter specification (2004 Feb 9) after someone complained.
+% There are still some bugs here. If some date punctuation is specified, say
+% with \texttt{yrp-semi} for a semi-colon after the year, this appears always,
+% even if there is no text following. But then this to be an unlikely wish anyway,
+% since such punctuation options are best suited for \texttt{dt-beg}.
+% \begin{macrocode}
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+%<ay> editor format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+ }
+ { format.authors output.nonnull
+%<au-col> add.colon
+%<nmdash> name.or.dash
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+%<dt-beg&!pub-date> format.date "year" output.check
+%<dt-beg&!pub-date> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+%<pre-pub&numser> format.number.series output
+%<pre-pub> format.publisher.address output
+ format.bvolume output
+%<*dt-beg|dt-end|!dt-jnl|a|!a>
+ format.chapter.pages "chapter and pages" output.check
+%</dt-beg|dt-end|!dt-jnl|a|!a>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+%<!numser> format.number.series output
+%<pre-edn> format.edition output
+%<!blk-com&!blk-tit&!blk-tita> new.sentence
+%<!pre-pub&numser> format.number.series output
+%<!pre-pub> format.publisher.address output
+ }
+ {
+%<*dt-beg|dt-end|!dt-jnl|a|!a>
+ format.chapter.pages "chapter and pages" output.check
+%</dt-beg|dt-end|!dt-jnl|a|!a>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+ format.book.crossref output.nonnull
+%<!dt-beg&!dt-end&!dt-jnl&pub-date> format.date "year" output.check
+ }
+ if$
+%<!pre-edn> format.edition output
+%<!dt-beg&!dt-end&!dt-jnl&!pub-date> format.date "year" output.check
+%<*isbn>
+ crossref missing$
+ { format.isbn output }
+ 'skip$
+ if$
+%</isbn>
+%<*(!dt-beg&!dt-end&dt-jnl)&!pub-date>
+ format.date "year" output.check
+ date.block
+%</(!dt-beg&!dt-end&dt-jnl)&!pub-date>
+%<pp-last> format.pages "pages" output.check
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end&!pub-date>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end&!pub-date>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`incollection'}
+% \changes{3.89d1}{1999 July 20}{AO: call \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% \begin{macrocode}
+% \changes{4.13}{2004 Feb 9}{Restore chap specification with \texttt{dt-jnl} option.}
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+%<ay> author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<dt-beg&!pub-date> format.date "year" output.check
+%<dt-beg&!pub-date> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+%<*!jtit-x>
+ format.title "title" output.check
+%<blk-com&tit-qq> end.quote.title
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+%</!jtit-x>
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+%<bt-qq> end.quote.btitle
+%<pre-pub&numser> format.number.series output
+%<pre-pub> format.publisher.address output
+%<!ser-ed> format.bvolume output
+%<!numser> format.number.series output
+%<pre-edn> format.edition output
+ format.chapter.pages output
+%<!blk-com&!blk-tit&!blk-tita> new.sentence
+%<!pre-pub&numser> format.number.series output
+%<!pre-pub> format.publisher.address output
+%<!pre-edn> format.edition output
+%<!dt-beg&!dt-end&!dt-jnl&!pub-date> format.date "year" output.check
+%<isbn> format.isbn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+%<*(!dt-beg&!dt-end&dt-jnl)&!pub-date>
+ format.date "year" output.check
+ date.block
+%</(!dt-beg&!dt-end&dt-jnl)&!pub-date>
+%<pp-last> format.pages "pages" output.check
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end&!pub-date>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end&!pub-date>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`inproceedings'}
+% \changes{3.81}{1996 Sep 13}{Reorganize organization/publisher}
+% \changes{3.85}{1998 Feb 5}{Fix extraneous page output without
+% \texttt{pp-last}}
+% \changes{3.89d1}{1999 July 20}{AO: call \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.05}{2002 Oct 21}{Fix bug with \texttt{pp-last} and \texttt{dt-beg}}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% \begin{macrocode}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+%<ay> author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<dt-beg&!pub-date> format.date "year" output.check
+%<dt-beg&!pub-date> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+%<*!jtit-x>
+ format.title "title" output.check
+%<blk-com&tit-qq> end.quote.title
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+%</!jtit-x>
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+%<bt-qq> end.quote.btitle
+%<*!pre-pub>
+%<!ser-ed> format.bvolume output
+%<!numser> format.number.series output
+%<(dt-beg|dt-end|!dt-jnl)&!pp-last> format.pages output
+%</!pre-pub>
+%<!blk-com&!blk-tit&!blk-tita> new.sentence
+%<numser> format.number.series output
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+%<!dt-beg&!dt-end&!dt-jnl&!pub-date> format.date "year" output.check
+%<*pre-pub>
+ format.bvolume output
+%<!numser> format.number.series output
+%<(dt-beg|dt-end|!dt-jnl)&!pp-last> format.pages output
+%</pre-pub>
+%<isbn> format.isbn output
+%<issn> format.issn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+%<(dt-beg|dt-end|!dt-jnl)&!pp-last> format.pages output
+ }
+ if$
+%<*!dt-beg&!dt-end&dt-jnl&!pp-last>
+%<!pub-date> format.date "year" output.check
+%<!pub-date> date.block
+%<jdt-v|jdt-vs|jdt-p|!jdt-pc> add.blank
+ format.pages "pages" output.check
+%</!dt-beg&!dt-end&dt-jnl&!pp-last>
+%<pp-last> format.pages "pages" output.check
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end&!pub-date>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end&!pub-date>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`conference'}
+% \begin{macrocode}
+FUNCTION {conference} { inproceedings }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`manual'}
+% \changes{3.89d1}{1999 July 20}{AO: call \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% \begin{macrocode}
+%<*ay>
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<dt-beg> format.date "year" output.check
+%<dt-beg> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+ format.btitle "title" output.check
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+%<!blk-com&!blk-tit&!blk-tita> organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+%<!dt-beg&!dt-end> format.date "year" output.check
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+%</ay>
+%<*!ay>
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization "organization" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { output
+ address "address" bibinfo.check output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<ay&dt-beg> format.date "year" output.check
+%<!ay&dt-beg> format.date output
+%<dt-beg> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+ format.btitle "title" output.check
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+ author empty$
+ { organization empty$
+ {
+%<!blk-com&!blk-tit&!blk-tita> address new.block.checka
+ address "address" bibinfo.check output
+ }
+ 'skip$
+ if$
+ }
+ {
+%<!blk-com&!blk-tit&!blk-tita> organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ }
+ if$
+ format.edition output
+%<ay&!dt-beg&!dt-end> format.date "year" output.check
+%<!ay&!dt-beg&!dt-end> format.date output
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*ay&!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</ay&!dt-beg&dt-end>
+%<*!ay&!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date output
+%</!ay&!dt-beg&dt-end>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+%</!ay>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`mastersthesis'}
+% \changes{2.0}{1994 Feb 7}{Add \texttt{thtit-a} to format thesis titles like
+% articles instead of books.}
+% \changes{3.89d1}{1999 July 20}{AO: school via \texttt{bibinfo.warn}; call
+% \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.03}{2002 Jan 14}{Add \texttt{thtit-x}.}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% To format a master's thesis.
+% \begin{macrocode}
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+%<ay> author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<dt-beg> format.date "year" output.check
+%<dt-beg> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+%<*!thtit-x>
+%<!thtit-a> format.btitle
+%<thtit-a> format.title
+ "title" output.check
+%<thtit-a&blk-com&tit-qq> end.quote.title
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+%</!thtit-x>
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+%<!dt-beg&!dt-end> format.date "year" output.check
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`misc'}
+% \begin{macrocode}
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+%<ay> author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<ay&dt-beg> format.date "year" output.check
+%<!ay&dt-beg> format.date output
+%<*ay>
+%<dt-beg> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+ format.title output
+%<blk-com&tit-qq> end.quote.title
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+%</ay>
+%<*!ay>
+%<!blk-com&!blk-tit&!blk-tita> title howpublished new.block.checkb
+ format.title output
+%<blk-com&tit-qq> end.quote.title
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+%<!blk-com&!blk-tit&!blk-tita> howpublished new.block.checka
+%</!ay>
+ howpublished "howpublished" bibinfo.check output
+%<ay&!dt-beg&!dt-end> format.date "year" output.check
+%<!ay&!dt-beg&!dt-end> format.date output
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*ay&!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</ay&!dt-beg&dt-end>
+%<*!ay&!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date output
+%</!ay&!dt-beg&dt-end>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+%<!ay> empty.misc.check
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`phdthesis'}
+% \changes{2.0}{1994 Feb 7}{Add \texttt{thtit-a} to format thesis titles like
+% articles instead of books.}
+% \changes{3.89d1}{1999 July 20}{AO: school via \texttt{bibinfo.warn}; call
+% \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.03}{2002 Jan 14}{Add \texttt{thtit-x}.}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% To format a doctoral thesis.
+% \begin{macrocode}
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+%<ay> author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<dt-beg> format.date "year" output.check
+%<dt-beg> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+%<*!thtit-x>
+%<!thtit-a> format.btitle
+%<thtit-a> format.title
+ "title" output.check
+%<thtit-a&blk-com&tit-qq> end.quote.title
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+%</!thtit-x>
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+%<!dt-beg&!dt-end> format.date "year" output.check
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`presentation'}
+% \begin{macrocode}
+%<*pres>
+FUNCTION {presentation}
+{ output.bibitem
+ format.authors output
+%<ay> author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.title output
+%<blk-com&tit-qq> end.quote.title
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+ format.organization.address "organization and address" output.check
+ month "month" output.check
+ year "year" output.check
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+ new.sentence
+ type missing$ 'skip$
+ {"(" type capitalize * ")" * output}
+ if$
+%<*url-blk&!harnm>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm>
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+%</pres>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`proceedings'}
+% \changes{3.89d1}{1999 July 20}{AO: call \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% \changes{4.16}{2006 Feb 15}{For numerical, the number/series could be missing when editor there; fixed}
+% \begin{macrocode}
+%<*ay>
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<dt-beg> format.date "year" output.check
+%<dt-beg> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+ format.btitle "title" output.check
+ format.bvolume output
+%<!numser> format.number.series output
+%<!blk-com&!blk-tit&!blk-tita> new.sentence
+%<numser> format.number.series output
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+%<!dt-beg&!dt-end&!pub-date> format.date "year" output.check
+%<isbn> format.isbn output
+%<issn> format.issn output
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end&!pub-date>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end&!pub-date>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+%</ay>
+% \end{macrocode}
+% \changes{4.32}{2011 Mar 28}{For numerical, fix bug when \texttt{numser} absent}
+% \begin{macrocode}
+%<*!ay>
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization "organization" bibinfo.check output
+ }
+ { format.editors output.nonnull }
+ if$
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<dt-beg> format.date "year" output.check
+%<dt-beg> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+ format.btitle "title" output.check
+ format.bvolume output
+%<!numser> format.number.series output
+ editor empty$
+ { publisher empty$
+%<!numser> 'skip$
+%<numser> { format.number.series output }
+ {
+%<!blk-com&!blk-tit&!blk-tita> new.sentence
+%<numser> format.number.series output
+ format.publisher.address output
+ }
+ if$
+ }
+ { publisher empty$
+ {
+%<!blk-com&!blk-tit&!blk-tita> new.sentence
+%<numser> format.number.series output
+ format.organization.address output }
+ {
+%<!blk-com&!blk-tit&!blk-tita> new.sentence
+%<numser> format.number.series output
+ organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ }
+ if$
+%<!dt-beg&!dt-end&!pub-date> format.date "year" output.check
+%<isbn> format.isbn output
+%<issn> format.issn output
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+%</!ay>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`techreport'}
+% \changes{3.5}{1995 Oct 4}{Add option \texttt{trtit-b}}
+% \changes{3.83}{1997 Feb 25}{Add option \texttt{trnum-it}}
+% \changes{3.89d1}{1999 July 20}{AO: institution via \texttt{bibinfo.warn}; call
+% \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% \begin{macrocode}
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+%<ay> author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<dt-beg> format.date "year" output.check
+%<dt-beg> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+%<trtit-b> format.btitle
+%<!trtit-b> format.title
+ "title" output.check
+%<!trtit-b&blk-com&tit-qq> end.quote.title
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<blk-tit&!tit-col> new.sentence
+%<blk-tit&tit-col> add.colon
+%<!trnum-it> format.tr.number output.nonnull
+%<trnum-it> format.tr.number emphasize output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+%<!dt-beg&!dt-end> format.date "year" output.check
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note output
+%<*!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date "year" output.check
+%</!dt-beg&dt-end>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`unpublished'}
+% \changes{3.85}{1997 Nov 25}{Fix date at normal end}
+% \changes{3.89d1}{1999 July 20}{AO: call \texttt{format.eprint}, and \texttt{format.url}.}
+% \changes{4.10}{2003 May 28}{Add \texttt{format.doi}}
+% \begin{macrocode}
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+%<ay> author format.key output
+%<au-col> add.colon
+%<nmdash> name.or.dash
+%<ay&dt-beg> format.date "year" output.check
+%<!ay&dt-beg> format.date output
+%<dt-beg> date.block
+%<!dt-beg&!blk-com&!blk-tit&!blk-tita> new.block
+ format.title "title" output.check
+%<blk-com&tit-qq> end.quote.title
+%<ay&!dt-beg&!dt-end> format.date "year" output.check
+%<!ay&!dt-beg&!dt-end> format.date output
+%<doi|(url-doi&!url)> format.doi output
+%<*url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.url output
+%</url-blk&!harnm&!revdata>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+%<(blk-com|blk-tit|blk-tita)&blknt> new.sentence
+ format.note "note" output.check
+%<*ay&!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date output
+%</ay&!dt-beg&dt-end>
+%<*!ay&!dt-beg&dt-end>
+%<!blk-com&!blk-tit&!blk-tita> new.block
+ format.date output
+%</!ay&!dt-beg&dt-end>
+%<eprint> format.eprint output
+%<revdata> format.url output
+ fin.entry
+%<(harnm|url-nl)&!revdata> write.url
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`default.type'}
+% \begin{macrocode}
+FUNCTION {default.type} { misc }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+READ
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*ay|alph|!seq-no>
+% \end{macrocode}
+%
+% \begin{macro}{`sortify'}
+% \changes{3.8}{1996 Feb 29}{Do not allow unsorted alphas}
+% In \texttt{btxbst.doc}/\texttt{.mbs}, the \texttt{sortify} function is
+% left out for unsorted alpha-style citations. This leads to an error,
+% because it is still used. So leave it in here too. \emph{In fact, do away
+% with unsorted alpha style, since it is as useless as unsorted author--year
+% listings.}
+% \begin{macrocode}
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+INTEGERS { len }
+% \end{macrocode}
+%
+% \begin{macro}{`chop.word'}
+% \begin{macrocode}
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%<*!ay&alph>
+% \end{macrocode}
+%
+% \begin{macro}{`format.lab.names'}
+% \changes{3.8}{1996 Feb 29}{Add option \texttt{alph} for \texttt{alpha.bst}
+% style of labels}
+% \changes{3.84}{1997 Nov 4}{Add options \texttt{alf-1} and \texttt{alf-f}}
+% \changes{3.85}{1997 Dec 1}{Add option \texttt{jnrlab}}
+% \changes{3.85}{1996 Feb 6}{Recode author font}
+% The function \texttt{format.lab.names} formats by author--year or the
+% \texttt{alpha} style as in the original \texttt{alpha.bst}.
+% Only major difference is that there should be no unsorted (\texttt{seq-no})
+% versions of this. Patashnik was clearly very unhappy about accommodating
+% such an animal, and in fact, his unsorted alpha style crashes \btx.
+% I also provide the \texttt{vonx} option here to ignore the \textsl{von}
+% part of the name.
+%
+% \begin{macrocode}
+INTEGERS { et.al.char.used }
+% \end{macrocode}
+%
+% \begin{macrocode}
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+EXECUTE {initialize.et.al.char.used}
+% \end{macrocode}
+%
+% \begin{macrocode}
+FUNCTION {format.lab.names}
+{ 's :=
+%<*alf-1>
+%<!vonx> s #1 "{v{}}{l{}}" format.name$
+%<vonx> s #1 "{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+%</alf-1>
+%<*!alf-1&alf-f>
+%<!vonx> s #1 "{vv{}}{ll}" format.name$
+%<vonx> s #1 "{ll}" format.name$
+%</!alf-1&alf-f>
+%<*!alf-1&!alf-f>
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+%<!vonx> { s nameptr "{v{}}{l{}}" format.name$ * }
+%<vonx> { s nameptr "{l{}}" format.name$ * }
+ if$
+ }
+%<!vonx> { s nameptr "{v{}}{l{}}" format.name$ * }
+%<vonx> { s nameptr "{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ 'skip$
+ if$
+ }
+%<!vonx> { s #1 "{v{}}{l{}}" format.name$
+%<vonx> { s #1 "{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+%</!alf-1&!alf-f>
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</!ay&alph>
+% \end{macrocode}
+% \changes{3.89}{1999 May 20}{Reset \texttt{t}; might still be ``others''
+% from last format function}
+% The function for the standard citation: one or two authors cited full, but for
+% more than two, only the first with \emph{et~al.} given.
+% \begin{macrocode}
+%<*ay&!mcite>
+FUNCTION {format.lab.names}
+{ 's :=
+ "" 't :=
+%<!jnrlab> s #1 "{vv~}{ll}" format.name$
+%<*jnrlab>
+%<!nm-rv&!nm-rvv&!nm-rvx&!nm-rvcx> s #1 "{vv~}{ll}{, jj}" format.name$
+%<nm-rv|nm-rvv|nm-rvx|nm-rvcx> s #1 "{vv~}{ll}{ jj}" format.name$
+%</jnrlab>
+%<lab&and-rm> cite.name.font
+ s num.names$ duplicate$
+ #2 >
+ { pop$
+%<lab&!and-rm&(etal-it|etal-rm)> cite.name.font
+%<*!etal-it>
+%<lab&and-rm&!etal-rm> " " * bbl.etal cite.name.font *
+%<!lab|!and-rm|etal-rm> " " * bbl.etal *
+%</!etal-it>
+%<etal-it> " " * bbl.etal emphasize *
+%<lab&!and-rm&!(etal-it|etal-rm)> cite.name.font
+%<lab&!and-rm> "others" 't :=
+ }
+ { #2 <
+ 'skip$
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+% %<lab&!and-rm&(etal-it|etal-rm)> cite.name.font
+%<*!etal-it>
+%<lab&and-rm&!etal-rm> " " * bbl.etal cite.name.font *
+%<!lab|!and-rm|etal-rm> " " * bbl.etal *
+%</!etal-it>
+%<etal-it> " " * bbl.etal emphasize *
+%<lab&!and-rm&!(etal-it|etal-rm)> cite.name.font
+%<lab&!and-rm> "others" 't :=
+ }
+%<*!harnm>
+%<*!amper>
+ { bbl.and space.word * s #2 "{vv~}{ll}" format.name$
+%<lab&and-rm> cite.name.font
+ * }
+%</!amper>
+%<*amper>
+ { " \& " * s #2 "{vv~}{ll}" format.name$
+%<lab&and-rm> cite.name.font
+ * }
+%</amper>
+%</!harnm>
+%<*harnm>
+ { " \harvardand{} " * s #2 "{vv~}{ll}" format.name$
+%<lab&and-rm> cite.name.font
+ * }
+%</harnm>
+ if$
+ }
+ if$
+ }
+ if$
+%<*lab&!and-rm>
+ t "others" =
+ 'skip$
+ { cite.name.font }
+ if$
+%</lab&!and-rm>
+}
+
+%</ay&!mcite>
+% \end{macrocode}
+%
+% \changes{4.20}{2007 Apr 23}{Add citations with more than one author with \emph{et~al.}}
+% \changes{4.20}{2007 Apr 24}{Select number of authors before truncating}
+% \changes{4.30}{2008 Aug 25}{Up to 6 authors possible in citation}
+% The code for formating author--year citations with more than one author
+% before \emph{et al.} or selecting a number other than two for truncating,
+% is much the same as the \texttt{format.full.names} function.
+% \begin{macrocode}
+%<*ay&mcite>
+FUNCTION {format.lab.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+%<!jnrlab> "{vv~}{ll}" format.name$
+%<*jnrlab>
+%<!nm-rv&!nm-rvv&!nm-rvx&!nm-rvcx> "{vv~}{ll}{, jj}" format.name$
+%<nm-rv|nm-rvv|nm-rvx|nm-rvcx> "{vv~}{ll}{ jj}" format.name$
+%</jnrlab>
+%<lab&and-rm> cite.name.font
+ 't :=
+ nameptr #1 >
+ {
+%<mct-1> nameptr #2 =
+%<mct-2> nameptr #3 =
+%<mct-3> nameptr #4 =
+%<mct-4> nameptr #5 =
+%<mct-5> nameptr #6 =
+%<mct-6> nameptr #7 =
+%<mct-x2> numnames #2 > and
+%<mct-x3> numnames #3 > and
+%<mct-x4> numnames #4 > and
+%<mct-x5> numnames #5 > and
+%<mct-x6> numnames #6 > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+%<lab&!and-rm&(etal-it|etal-rm)> cite.name.font
+%<*!etal-it>
+%<lab&and-rm&!etal-rm> " " * bbl.etal cite.name.font *
+%<!lab|!and-rm|etal-rm> " " * bbl.etal *
+%</!etal-it>
+%<etal-it> " " * bbl.etal emphasize *
+%<lab&!and-rm&!(etal-it|etal-rm)> cite.name.font
+ }
+ {
+%<*!harnm>
+%<*!and-xcom>
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+%</!and-xcom>
+%<!amper> bbl.and
+%<amper> "\&"
+%</!harnm>
+%<harnm> "\harvardand{}"
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+%<*lab&!and-rm>
+ t "others" =
+ 'skip$
+ { cite.name.font }
+ if$
+%</lab&!and-rm>
+}
+
+%</ay&mcite>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`author.key.label'}
+% \begin{macro}{`author.editor.key.label'}
+% \begin{macro}{`author.key.organization.label'}
+% \begin{macro}{`editor.key.organization.label'}
+% \begin{macro}{`editor.key.label'}
+% Have to be very careful with the options \texttt{ay}, \texttt{alph}, and
+% \texttt{seq-no} here. The first two are actually mutually exclusive, and
+% \texttt{ay} should dominate. The \texttt{seq-no} option only applies for
+% numerical (\texttt{!ay}) but not alphabetic (\texttt{alph}) selections.
+% This whole block of coding dealing with labels is only included for
+% author--year or alphabetic or ordered numerical.
+% That is, \texttt{ay} or \texttt{alph} or \texttt{!seq-no} is true.
+% \begin{macrocode}
+%<*ay|alph>
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+%<ay> 'key
+%<!ay> { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+%<ay> 'key
+%<!ay> { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+%</ay|alph>
+%<*!ay&alph>
+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 #3 text.prefix$ }
+ 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 #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+%</!ay&alph>
+%<*ay>
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{`calc.short.authors'}
+% \changes{3.3}{1995 Sep 4}{Add function to store short list of authors
+% for later test}
+% \begin{macrocode}
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`calc.label'}
+% \changes{1.5(2.3)a}{1994 Oct 11}{Add option \texttt{note-yr}}
+% \changes{3.0}{1995 Mar 3}{Add options \texttt{lab-bf} and \texttt{lab-sc}}
+% \changes{3.3}{1995 Sep 4}{Use \texttt{calc.short.authors}}
+% \changes{3.8}{1996 Feb 29}{Add \texttt{calc.label} from \texttt{alpha.bst}}
+% \changes{3.89}{1999 May 12}{Add \texttt{keyxyr} option}
+% \begin{macrocode}
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+%<!(har|ast|cay|nmd|alk|cn)> "("
+%<har|ast|cay|nmd|alk|cn> ", "
+ *
+ year duplicate$ empty$
+%<keyxyr> short.list key field.or.null = or
+%<(blkyear|keyxyr)> { pop$ "" }
+%<!(blkyear|keyxyr)> { pop$ "????" }
+%<!note-yr> { purify$ #-1 #4 substring$ }
+%<note-yr> 'skip$
+ if$
+ *
+ 'label :=
+}
+
+%</ay>
+%<*!ay&alph>
+FUNCTION {calc.label}
+{ 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$
+ duplicate$
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$
+ *
+ sortify 'sort.label :=
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</!ay&alph>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*ay>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*har|cay|nmd|ast|cn>
+% \end{macrocode}
+%
+% \begin{macro}{`calc.short.label'}
+% \changes{3.3}{1995 Sep 4}{Use \texttt{calc.short.authors}}
+%
+% \begin{macrocode}
+FUNCTION {calc.short.label}
+{ calc.short.authors short.list
+ 'label :=
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</har|cay|nmd|ast|cn>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</ay>
+% \end{macrocode}
+%
+% \begin{macro}{`sort.format.names'}
+% \changes{1.7(2.5)}{1995 Feb 9}{Make ordering of `et al' works by year
+% and authors and not just year}
+% \changes{3.0}{1995 Feb 27}{Option \texttt{nm-revf} to act just as default}
+% \changes{3.2}{1995 Jun 16}{Add option \texttt{vonx} so sorting ignores the
+% \emph{von} part of the name}
+% \changes{3.5}{1995 Oct 24}{For limited authors, sort only on those present}
+% \changes{3.5}{1995 Oct 24}{`Et al' considered author before all others}
+% \changes{3.83}{1997 Feb 25}{`Et al' considered author after all others}
+% \changes{4.30}{2008 Aug 25}{Improve sorting for `others', both in bib file and when truncated}
+% \changes{4.30}{2008 Aug 25}{Add \texttt{seq-labc}, like \texttt{seq-lab} but cite order
+% used instead of co-authors and title/cite-key}
+% \changes{4.30}{2008 Aug 27}{Fix bug for \texttt{nm-rvvc}}
+% \begin{macrocode}
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+%<*xintls>
+%<!vonx> "{vv{ } }{ll{ }}"
+%<vonx> "{ll{ }}"
+%</xintls>
+%<*!xintls>
+%<*!nm-init&!nm-rev&!nm-rev1&!nm-rv&!nm-rvx&!nm-rvcx&!nm-rvv&!nm-rvvc>
+%<!vonx> "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}"
+%<vonx> "{ll{ }}{ ff{ }}{ jj{ }}"
+%</!nm-init&!nm-rev&!nm-rev1&!nm-rv&!nm-rvx&!nm-rvcx&!nm-rvv&!nm-rvvc>
+%<*nm-init|nm-rev|nm-rev1|nm-rv|nm-rvx|nm-rvcx|nm-rvv|nm-rvvc>
+%<!vonx> "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}"
+%<vonx> "{ll{ }}{ f{ }}{ jj{ }}"
+%</nm-init|nm-rev|nm-rev1|nm-rv|nm-rvx|nm-rvcx|nm-rvv|nm-rvvc>
+%</!xintls>
+ format.name$ 't :=
+ nameptr #1 >
+ {
+%<*nmlm>
+%<m1> nameptr #1
+%<m2> nameptr #2
+%<m3> nameptr #3
+%<m4> nameptr #4
+%<m5> nameptr #5
+%<m6> nameptr #6
+%<m7> nameptr #7
+%<m8> nameptr #8
+%<m9> nameptr #9
+%<m0> nameptr #0
+%<m10> #10 +
+%<m20> #20 +
+%<m30> #30 +
+%<m40> #40 +
+%<m50> #50 +
+%<m60> #60 +
+%<m70> #70 +
+%<m80> #80 +
+%<m90> #90 +
+ #1 + =
+%<x1> numnames #1
+%<x2> numnames #2
+%<x3> numnames #3
+%<x4> numnames #4
+%<x5> numnames #5
+%<x6> numnames #6
+%<x7> numnames #7
+%<x8> numnames #8
+%<x9> numnames #9
+%<x0> numnames #0
+%<x10> #10 +
+%<x20> #20 +
+%<x30> #30 +
+%<x40> #40 +
+%<x50> #50 +
+%<x60> #60 +
+%<x70> #70 +
+%<x80> #80 +
+%<x90> #90 +
+ > and
+ { "others" 't :=
+ #1 'namesleft := }
+ 'skip$
+ if$
+%</nmlm>
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" 't := }
+ 'skip$
+ if$
+%<*seq-lab|seq-key|seq-labc>
+ numnames #2 > nameptr #2 = and
+ { "zz" * year field.or.null * " " *
+%<seq-labc> #1 'namesleft :=
+ }
+%<seq-labc> { t sortify * }
+%<!seq-labc> 'skip$
+ if$
+%</seq-lab|seq-key|seq-labc>
+%<!seq-labc> t sortify *
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`sort.format.title'}
+% \begin{macrocode}
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`author.sort'}
+% \begin{macrocode}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`author.editor.sort'}
+% \begin{macrocode}
+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$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`negate.year'}
+% \changes{4.03}{2002 Jan 14}{Add function for ordering by descending years}
+% This function negates the year by substituting each digit by its
+% complement. That is, 0 $\rightarrow$ 9, 1 $\rightarrow$ 8, etc. This is used
+% to provide ordering by descending year (latest year first).
+% \begin{macrocode}
+%<*seq-yrr&!seq-yr>
+FUNCTION {negate.year}
+{ year empty$
+ { "99999" }
+ { year #1 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$
+ year #2 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ *
+ year #3 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ *
+ year #4 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ *
+ }
+ if$
+}
+%</seq-yrr&!seq-yr>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%<*ay>
+% \end{macrocode}
+%
+% \begin{macro}{`editor.sort'}
+% \begin{macrocode}
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%<*seq-no>
+% \end{macrocode}
+%
+% \begin{macrocode}
+INTEGERS { seq.num }
+% \end{macrocode}
+%
+% \begin{macro}{`init.seq'}
+% \begin{macrocode}
+FUNCTION {init.seq}
+{ #0 'seq.num :=}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+EXECUTE {init.seq}
+% \end{macrocode}
+%
+% \begin{macro}{`int.to.fix'}
+% \begin{macrocode}
+FUNCTION {int.to.fix}
+{ "000000000" swap$ int.to.str$ *
+ #-1 #10 substring$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</seq-no>
+% \end{macrocode}
+%
+% \begin{macro}{`presort'}
+% \changes{3.81}{1996 Sep 16}{Add option \texttt{seq-no} to author--year}
+% For unsorted author--year, make up the final sorting order in
+% \texttt{sort.label} with the original sequence number, for unsorting later.
+% \begin{macrocode}
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+%<*!seq-no>
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.sort
+ 'author.sort
+ if$
+ }
+ if$
+ #1 entry.max$ substring$
+%</!seq-no>
+%<*seq-no>
+ seq.num #1 + 'seq.num :=
+ seq.num int.to.fix
+%</seq-no>
+ 'sort.label :=
+ sort.label
+ *
+%<seq-yr> " " * year field.or.null *
+%<seq-yrr&!seq-yr> " " * negate.year field.or.null *
+%<*!seq-key&!seq-labc&!seq-yr&!seq-yrr>
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+%</!seq-key&!seq-labc&!seq-yr&!seq-yrr>
+%<seq-key|seq-yr|seq-yrr> " " * cite$ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+% "For " cite$ * ", sort.key=" * sort.key$ * warning$
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</ay>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*!ay>
+% \end{macrocode}
+%
+% \begin{macro}{`author.organization.sort'}
+% \begin{macrocode}
+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$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`editor.organization.sort'}
+% \begin{macrocode}
+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$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`presort'}
+% \begin{macrocode}
+FUNCTION {presort}
+%<*alph>
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+%</alph>
+%<!alph>{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+%<alph> *
+ " "
+ *
+%<seq-yrr> negate.year field.or.null sortify
+%<!seq-yrr> year field.or.null sortify
+%<!(seq-yr|seq-yrr)|alph> *
+ " "
+ *
+%<(seq-yr|seq-yrr)&!alph> swap$ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</!ay>
+% \end{macrocode}
+%
+% \begin{macrocode}
+ITERATE {presort}
+% \end{macrocode}
+%
+% \begin{macrocode}
+SORT
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</ay|alph|!seq-no>
+% \end{macrocode}
+%
+% With version~6.0 of \texttt{natbib}, the author-year styles can also be
+% used for numerical citations; then the \texttt{thebibliography} environment
+% must have an argument indicating the length of the longest label.
+% Simply count the references and add this number as the argument.
+% \begin{macrocode}
+%<*ay>
+% \end{macrocode}
+%
+% \begin{macrocode}
+STRINGS { last.label next.extra }
+% \end{macrocode}
+%
+% With computer-generated articles, it is possible to have more than 26 articles
+% in one year. It has finally occurred that the extra labels go beyond `z'.
+% The current code now allows for `aa', \dots `az', 'ba', \dots `zz'. This
+% code was provided by Joseph Wright (2007 Oct 10).
+% \begin{macrocode}
+INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label }
+% \end{macrocode}
+%
+% \begin{macro}{`initialize.extra.label.stuff'}
+% \changes{4.22}{2007 Oct 10}{Add code to allow extra labels to go beyond 26}
+% \begin{macrocode}
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ "a" chr.to.int$ #1 - 'last.extra.num.blank :=
+ last.extra.num.blank 'last.extra.num.extended :=
+ #0 'number.label :=
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`forward.pass'}
+% \changes{3.4}{1995 Sep 5}{Include number of references in argument to
+% \texttt{thebibliography} environment}
+% \changes{4.22}{2007 Oct 10}{Add code to allow extra labels to go beyond 26}
+% \begin{macrocode}
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num "z" chr.to.int$ >
+ { "a" chr.to.int$ 'last.extra.num :=
+ last.extra.num.extended #1 + 'last.extra.num.extended :=
+ }
+ 'skip$
+ if$
+ last.extra.num.extended last.extra.num.blank >
+ { last.extra.num.extended int.to.chr$
+ last.extra.num int.to.chr$
+ * 'extra.label := }
+ { last.extra.num int.to.chr$ 'extra.label := }
+ if$
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</ay>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*!ay&alph>
+% \end{macrocode}
+%
+% \begin{macrocode}
+STRINGS { longest.label last.sort.label next.extra }
+% \end{macrocode}
+%
+% \begin{macrocode}
+INTEGERS { longest.label.width last.extra.num }
+% \end{macrocode}
+%
+% \begin{macro}{`initialize.longest.label'}
+% \begin{macrocode}
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{`forward.pass'}
+% \begin{macrocode}
+FUNCTION {forward.pass}
+{ last.sort.label sort.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 :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</!ay&alph>
+% \end{macrocode}
+%
+% \begin{macro}{`reverse.pass'}
+% \changes{3.3}{1995 Aug 7}{Put extra label in braces}
+% The extra label is added in braces so that natbib can treat it as one unit.
+% This allows extra labels to be more than one letter long. For non-NFSS
+% emphasizing, this is no problem, since labels go in |{\em a}|, but for
+% non-emphasizing and for NFSS, it caused troubles without the braces.
+% The trouble arises with multiple citations in one |\cite| in which
+% authors and years are the same, and only the extra label is given for
+% the next one. Note: |\emph{a}| is more than one letter long in this sense,
+% so it is not just a problem for more than 26 papers with same authors and
+% year.
+%
+% \changes{3.81}{1996 Jun 17}{Add \texttt{\char`\\natexlab}}
+% The command |\natexlab| now encloses the extra label for \texttt{natbib}
+% styles. This command normally just prints its argument, but for numerical
+% citation mode, it swallows its argument. This allows the extra labels to
+% be suppressed for numerical citations where they are superfluous.
+% The enclosing braces mentioned above must be included here to make the
+% entire extra label text a single token for \texttt{natbib}.
+% \begin{macrocode}
+%<*ay>
+% \end{macrocode}
+%
+% \begin{macrocode}
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+%<xlab-it> emphasize
+%<*!html>
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+%</!html>
+ 'extra.label :=
+%<!(har|ast|cay|nmd|cn)> label extra.label * 'label :=
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</ay>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*!ay&alph>
+% \end{macrocode}
+%
+% \begin{macrocode}
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</!ay&alph>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%<ay>EXECUTE {initialize.extra.label.stuff}
+%<!ay&alph>EXECUTE {initialize.longest.label}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*ay|alph>
+ITERATE {forward.pass}
+% \end{macrocode}
+%
+% \begin{macrocode}
+REVERSE {reverse.pass}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</ay|alph>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*ay>
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+%<seq-yrr> negate.year field.or.null sortify
+%<!seq-yrr> year field.or.null sortify
+%<(seq-yr|seq-yrr)&!(seq-lab|seq-key|seq-labc)> swap$
+ *
+%<*!seq-key&!seq-labc&!seq-yr&!seq-yrr>
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+%</!seq-key&!seq-labc&!seq-yr&!seq-yrr>
+%<seq-key|seq-yr|seq-yrr> " " * cite$ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+% "For " cite$ * ", bib.sort.key=" * sort.key$ * warning$
+%<har|cay|nmd|cn|ast> calc.short.label
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ITERATE {bib.sort.order}
+% \end{macrocode}
+%
+% \begin{macrocode}
+SORT
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</ay>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*!ay&!alph>
+% \end{macrocode}
+%
+% \begin{macrocode}
+STRINGS { longest.label }
+% \end{macrocode}
+%
+% \begin{macrocode}
+INTEGERS { number.label longest.label.width }
+% \end{macrocode}
+%
+% \begin{macrocode}
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+FUNCTION {longest.label.pass}
+%<*!cite>
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+%</!cite>
+%<cite>{ cite$ 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+EXECUTE {initialize.longest.label}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ITERATE {longest.label.pass}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</!ay&!alph>
+% \end{macrocode}
+%
+% \begin{macro}{`begin.bib'}
+% \changes{2.0}{1994 Jan 31}{For \texttt{german}, add the definition of
+% {\tt\protect\bslash qq} to replace double-quote character.}
+% \changes{2.0}{1994 Jan 31}{For \texttt{babel}, read in file
+% \texttt{babelbst.tex} in \texttt{thebibliography} to define the word
+% commands.}
+% \changes{3.4}{1995 Sep 5}{Add number of references as argument}
+% \changes{3.89d1}{1999 July 20}{AO: provide default meanings for procedures used.}
+% The function \texttt{begin.bib} writes the initial text to the \texttt{.bbl}
+% file. The most important matter here is that the \texttt{thebibliography}
+% environment is invoked.
+%
+% Note: the French quotation marks are called `guillimets'; Adobe erroneously
+% named the symbols `guillimot', which is an arctic bird. The error has so
+% propagated, that it can no longer be corrected. \LaTeX\ took it over.
+% \begin{macrocode}
+FUNCTION {begin.bib}
+%<*!html>
+%<*!ay&alph>
+{ et.al.char.used
+ { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+ preamble$ empty$
+%</!ay&alph>
+%<ay|!alph>{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+%<ay> "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+%<!ay> "\begin{thebibliography}{" longest.label * "}" *
+ write$ newline$
+%<*(!nmft&(nmft-it|nmft-sc|nmft-bf|nmft-def))|(!lab&(lab-it|lab-bf|lab-sc|lab-def))>
+ "\typeout{**********************************}" write$ newline$
+ "\typeout{WARNING WARNING WARNING WARNING WARNING}" write$ newline$
+ "\typeout{The bst file has been generated with inconsistent options}"
+ write$ newline$
+ "\typeout{Read the warning message at the start of the bst file}"
+ write$ newline$
+ "\typeout{**********************************}" write$ newline$
+%</(!nmft&(nmft-it|nmft-sc|nmft-bf|nmft-def))|(!lab&(lab-it|lab-bf|lab-sc|lab-def))>
+%<*!plntx>
+%<!tit-it&tit-qq&qt-s> "\newcommand{\enquote}[1]{`#1'}"
+%<!tit-it&tit-qq&!qt-s&!qt-g> "\newcommand{\enquote}[1]{``#1''}"
+%</!plntx>
+%<*plntx>
+%<!tit-it&tit-qq&qt-s> "\def\enquote#1{`#1'}"
+%<!tit-it&tit-qq&!qt-s&!qt-g> "\def\enquote#1{``#1''}"
+%</plntx>
+%<*!tit-it&tit-qq&!qt-s&qt-g>
+%<!plntx> "\ProvideTextCommand{\guillemotleft}{OT1}{%"
+%<plntx> "\def\guillemotleft{%"
+ write$ newline$
+ " \leavevmode\raise .27ex\hbox{$\scriptscriptstyle\ll$}}"
+ write$ newline$
+%<!plntx> "\ProvideTextCommand{\guillemotright}{OT1}{%"
+%<plntx> "\def\guillemotright{%"
+ write$ newline$
+ " \leavevmode\raise .27ex\hbox{$\scriptscriptstyle\gg$}}"
+ write$ newline$
+%<!plntx> "\newcommand{\enquote}[1]{\guillemotleft#1\guillemotright}"
+%<plntx> "\def\enquote#1{\guillemotleft#1\guillemotright}"
+%</!tit-it&tit-qq&!qt-s&qt-g>
+%<!tit-it&tit-qq> write$ newline$
+%<umlaut> "\let\qq=\" quote$ * write$ newline$
+%<em-ul> "\expandafter\ifx\csname uline\endcsname\relax\let\uline\underline\fi"
+%<em-ul> write$ newline$
+%<*ay>
+%<!plntx> "\providecommand{\natexlab}[1]{#1}"
+%<plntx> "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi"
+ write$ newline$
+%<*har>
+ "{\catcode`\|=0\catcode`\#=12\catcode`\@=11\catcode`\\=12" write$ newline$
+ "|immediate|write|@auxout{\expandafter\ifx\csname natexlab\endcsname\relax\gdef\natexlab#1{#1}\fi}}"
+ write$ newline$
+%</har>
+%</ay>
+%<*nmft&nmft-def>
+%<!plntx> "\providecommand{\bibnamefont}[1]{#1}"
+%<plntx> "\expandafter\ifx\csname bibnamefont\endcsname\relax"
+%<plntx> write$ newline$
+%<plntx> " \def\bibnamefont#1{#1}\fi"
+ write$ newline$
+%</nmft&nmft-def>
+%<*nmft&fnm-def>
+%<!plntx> "\providecommand{\bibfnamefont}[1]{#1}"
+%<plntx> "\expandafter\ifx\csname bibfnamefont\endcsname\relax"
+%<plntx> write$ newline$
+%<plntx> " \def\bibfnamefont#1{#1}\fi"
+ write$ newline$
+%</nmft&fnm-def>
+%<*lab&lab-def>
+%<!plntx> "\providecommand{\citenamefont}[1]{#1}"
+%<plntx> "\expandafter\ifx\csname citenamefont\endcsname\relax"
+%<plntx> write$ newline$
+%<plntx> " \def\citenamefont#1{#1}\fi"
+ write$ newline$
+%</lab&lab-def>
+%<*(url&!harnm)|eprint>
+%<*!plntx>
+%<nfss> "\providecommand{\url}[1]{\texttt{#1}}"
+%<!nfss> "\providecommand{\url}[1]{{\tt #1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+%</!plntx>
+%<*plntx>
+ "\expandafter\ifx\csname url\endcsname\relax"
+ write$ newline$
+%<nfss> " \def\url#1{\texttt{#1}}\fi"
+%<!nfss> " \def\url#1{{\tt #1}}\fi"
+ write$ newline$
+ "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi"
+ write$ newline$
+%</plntx>
+%</(url&!harnm)|eprint>
+%<*doi>
+ "\expandafter\ifx\csname urlstyle\endcsname\relax"
+ write$ newline$
+%<*!plntx>
+ " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else"
+ write$ newline$
+ " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi"
+ write$ newline$
+%</!plntx>
+%<*plntx>
+ " \expandafter\ifx\csname doi\endcsname\relax"
+ write$ newline$
+ " \def\doi#1{doi:\discretionary{}{}{}#1}\fi \else"
+ write$ newline$
+ " \expandafter\ifx\csname doi\endcsname\relax"
+ write$ newline$
+ " \def\doi{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi \fi"
+ write$ newline$
+%</plntx>
+%</doi>
+%<*lang>
+%<!plntx> "\providecommand{\selectlanguage}[1]{\relax}"
+%<*plntx>
+ "\expandafter\ifx\csname selectlanguage\endcsname\relax"
+ write$ newline$
+ " \def\selectlanguage#1{}\fi"
+%</plntx>
+ write$ newline$
+%</lang>
+%<*!plntx>
+%<*babel>
+ "\input{babelbst.tex}" write$ newline$
+ "\newcommand{\Capitalize}[1]{\uppercase{#1}}" write$ newline$
+ "\newcommand{\capitalize}[1]{\expandafter\Capitalize#1}" write$ newline$
+%</babel>
+%<*annote>
+ "\providecommand{\bibAnnoteFile}[1]{%"
+ write$ newline$
+ " \IfFileExists{#1}{\begin{quotation}\noindent\textsc{Key:} #1\\"
+ write$ newline$
+ " \textsc{Annotation:}\ \input{#1}\end{quotation}}{}}"
+ write$ newline$
+ "\providecommand{\bibAnnote}[2]{%"
+ write$ newline$
+ " \begin{quotation}\noindent\textsc{Key:} #1\\"
+ write$ newline$
+ " \textsc{Annotation:}\ #2\end{quotation}}"
+ write$ newline$
+%</annote>
+%</!plntx>
+%<*bibinfo>
+%<!plntx> "\providecommand{\bibinfo}[2]{#2}"
+%<plntx> "\expandafter\ifx\csname bibinfo\endcsname\relax\def\bibinfo#1#2{#2}\fi"
+ write$ newline$
+%</bibinfo>
+%<*eprint>
+%<!plntx> "\providecommand{\eprint}[2][]{\url{#2}}"
+%<plntx> "\expandafter\ifx\csname eprint\endcsname\relax\def\eprint#1{\url{#1}}\fi"
+ write$ newline$
+%</eprint>
+}
+%</!html>
+%<*html>
+{
+"<html><head><title>Bibliography Listing</title></head>" write$ newline$
+"<body>" write$ newline$
+"<h2>Bibliography</h2>" write$ newline$
+%<htdes>"<dl>" write$ newline$
+%<!htdes&htlist>"<ol>" write$ newline$
+}
+%</html>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+EXECUTE {begin.bib}
+% \end{macrocode}
+%
+% \begin{macrocode}
+EXECUTE {init.state.consts}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ITERATE {call.type$}
+% \end{macrocode}
+%
+% \begin{macro}{`end.bib'}
+% \begin{macrocode}
+FUNCTION {end.bib}
+{ newline$
+%<!html> "\end{thebibliography}" write$ newline$
+%<html> "</dl></body></html>" write$ newline$
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+EXECUTE {end.bib}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</!head>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</!options&!driver&!bblbst>
+% \end{macrocode}
+%
+% \section{The File \texttt{babelbst.tex} for English}
+% The following contains the definitions for the \texttt{babel} language
+% selection as they apply to English. This file may be extracted with
+% \dtx{} and the option \texttt{bblbst}.
+% \begin{macrocode}
+%<*bblbst>
+ % This is babelbst.tex for English.
+ % It should serve as a model for other languages.
+ % Alternatively, store it under a different name (e.g. englbst.tex)
+ % and then \input it with a command in babelbst.tex.
+\def\bbland{and} \def\bbletal{et~al.}
+\def\bbleditors{editors} \def\bbleds{eds.}
+\def\bbleditor{editor} \def\bbled{ed.}
+\def\bbledby{edited by}
+\def\bbledition{edition} \def\bbledn{edn.}
+\def\bblvolume{volume} \def\bblvol{vol.}
+\def\bblof{of}
+\def\bblnumber{number} \def\bblno{no.}
+\def\bblin{in}
+\def\bblpages{pages} \def\bblpp{pp.}
+\def\bblpage{page} \def\bblp{p.}
+\def\bbleidpp{pages}
+\def\bblchapter{chapter} \def\bblchap{chap.}
+\def\bbltechreport{Technical Report}
+\def\bbltechrep{Tech. Rep.}
+\def\bblmthesis{Master's thesis}
+\def\bblphdthesis{Ph.D. thesis}
+\def\bblfirst{First} \def\bblfirsto{1st}
+\def\bblsecond{Second} \def\bblsecondo{2nd}
+\def\bblthird{Third} \def\bblthirdo{3rd}
+\def\bblfourth{Fourth} \def\bblfourtho{4th}
+\def\bblfifth{Fifth} \def\bblfiftho{5th}
+\def\bblst{st} \def\bblnd{nd} \def\bblrd{rd}
+\def\bblth{th}
+\def\bbljan{January} \def\bblfeb{February} \def\bblmar{March}
+\def\bblapr{April} \def\bblmay{May} \def\bbljun{June}
+\def\bbljul{July} \def\bblaug{August} \def\bblsep{September}
+\def\bbloct{October} \def\bblnov{November} \def\bbldec{December}
+%</bblbst>
+% \end{macrocode}
+%
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/merlin.pdf b/macros/latex/contrib/custom-bib/merlin.pdf
new file mode 100644
index 0000000000..4dfae5e791
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/merlin.pdf
Binary files differ
diff --git a/macros/latex/contrib/custom-bib/norsk.mbs b/macros/latex/contrib/custom-bib/norsk.mbs
new file mode 100644
index 0000000000..0946f1e1d1
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/norsk.mbs
@@ -0,0 +1,316 @@
+%\iffalse THIS IS A META COMMENT
+% File: norsk.mbs
+% Copyright 1995-1999 Patrick W Daly
+% Max-Planck-Institut f\"ur Sonnensystemforschung
+% Max-Planck-Str. 2
+% D-37191 Katlenburg-Lindau
+% Germany
+% E-mail: daly@mps.mpg.de
+%
+% Copyright 1995, Rolf Lindgren, OPERATOR
+% Universitetes Senter for Informasjonsteknologi
+% Pb 1059 Blindern
+% 0316 OSLO
+% E-mail: rolf.lindgren@usit.uio.no
+%
+% 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: NORWEGIAN
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{norsk.mbs}[2005/06/03 4.2b (RL/PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{norsk.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.1}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{1.2}{1999 Feb 1}{Add option \texttt{xedn}}
+% \changes{1.2}{1999 Feb 24}{Update copyright notice}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.0a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+% \changes{4.2a}{2004 May 6}{Add missing backslash in a menu text}
+% \changes{4.2b}{2005 Jun 3}{Change spelling errors, contrib by Svend Tollak Munkejord}
+%
+% \markboth{Rolf Lindgren}{Norwegian bibliographies}
+%
+% \title{{\bfseries Norwegian Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly and Rolf Lindgren}
+%
+% \GetFileInfo{norsk.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Norsk\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for NORSK}
+\wr{\spsp\spsp norsk,\pc: Norwegian language}
+
+\beginoptiongroup{ABBREVIATE WORD `PAGES':}{}
+\optdef{*}{}{`Sider(ne)'}{(no abbreviation)}
+\optdef{a}{pp}{`Side' abbreviated}{as s. or ss.}
+\optdef{x}{ppx}{`Side' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `EDITORS':}{}
+\optdef{*}{}{`Redakt{\string\o}r(er)'}{(no abbreviation)}
+\optdef{a}{ed}{`Redakt{\string\o}r' abbreviated}{as red.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of bind, utgave, kapittel, osv.}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as f{\string\o}rste, annen, tredje, osv}
+\optdef{n}{ord}{Numerical editions}{as 1., 2., 3., osv}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is NORSK
+
+FUNCTION {bbl.and}
+{ "og"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "redakt{\o}rer" }
+%<ed>{ "red." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "redakt{\o}r" }
+%<ed>{ "red." }
+
+FUNCTION {bbl.edby}
+{ "redigert av" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "utgave" }
+%<abr>{ "utg." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "bind" }
+%<abr>{ "bd." }
+
+FUNCTION {bbl.of}
+{ "av" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "nummer" }
+%<abr>{ "nr." }
+
+FUNCTION {bbl.nr}
+{ "nr." }
+
+FUNCTION {bbl.in}
+{ "i" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "sider" }
+%<pp>{ "ss." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "side" }
+%<pp>{ "s." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "sider" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "kapittel" }
+%<abr>{ "kap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Teknisk rapport" }
+%<abr>{ "Tekn. rap." }
+
+FUNCTION {bbl.mthesis}
+{ "Hovedoppgave" }
+
+FUNCTION {bbl.phdthesis}
+{ "Doktorgradsavhandling" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "F{\o}rste" }
+%<ord>{ "1." }
+
+FUNCTION {bbl.second}
+%<!ord>{ "Annen" }
+%<ord>{ "2." }
+
+FUNCTION {bbl.third}
+%<!ord>{ "Tredje" }
+%<ord>{ "3." }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "Fjerde" }
+%<ord>{ "4." }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "Femte" }
+%<ord>{ "5." }
+
+FUNCTION {bbl.th}
+{ "." }
+
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"Januar"}
+
+MACRO {feb} {"Februar"}
+
+MACRO {mar} {"Mars"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"Mai"}
+
+MACRO {jun} {"Juni"}
+
+MACRO {jul} {"Juli"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"Oktober"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"Desember"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"Mai"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Okt."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Des."}
+
+%</abr>
+%</!options&!driver>
+ % End module: norsk.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/photjour.mbs b/macros/latex/contrib/custom-bib/photjour.mbs
new file mode 100644
index 0000000000..6707a9a4ee
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/photjour.mbs
@@ -0,0 +1,227 @@
+%\iffalse THIS IS A META COMMENT
+% File: photjour.mbs
+% Copyright 1997-1999 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Journal Definition File for Photonics journals
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{photjour.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1995 Oct 11}{Initial contributed version}
+% \changes{2.0}{1996 Jun 26}{Reorganize with \texttt{geojour} and
+% \texttt{physjour}}
+% \changes{2.0a}{1997 Sep 15}{Replace umlaut with Raichle trick}
+% \changes{2.0b}{1999 Feb 24}{Update copyright notice}
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly}{Optics Journal Names}
+%
+% \title{{\bfseries Optics Journal Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly and Zhenya Sorokin}
+%
+% \GetFileInfo{photjour.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+%
+% This file adds a list of preprogrammed optics journal names to
+% bibliographic style files, in both full and abbreviated versions.
+% These defined journal names will be added to those in the main master
+% bibliography style file.
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains support for
+% external definition files.
+%
+% This file was contributed by
+% \begin{quote}
+% Zhenya Sorokin, email \texttt{sorokin@ps1.iaee.tuwien.ac.at}.
+% \end{quote}
+%
+% Version 2.0: I go through all journal names, checking for conflicts and
+% duplications with \texttt{physjour.mbs} and \texttt{geojour.mbs}.
+% Optical and physical journals removed; geophysical journals included
+% from the others. Where one journal exists with multiple shorthands,
+% all versions are kept.
+%
+% Version 2.0a: Fixes a problem with umlauts acting as string terminator.
+%
+% Version 2.0b: revise copyright notice to LPPL standard.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options>|
+% \dots\ |%</!options>| in order to exclude it if \dtx{} is used to
+% extract only the menu information.
+%
+% A journal-names files should contain at most only one option, \texttt{jabr}.
+% This is because \texttt{merlin} version~3.5 can now handle several
+% journal-name files, but does not look into them for the options, but
+% rather asks for \texttt{jabr} from the main file. For compatibility with
+% older versions, the option menu must be kept here.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOPTICS JOURNAL NAMES:}
+\optdef{*}{}{Full optics journal names}{}
+\optdef{a}{jabr}{Abbreviate optics names}{for journals}
+\getans
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options>
+%<*jabr>
+
+MACRO {appopt} {"Appl. Opt."}
+MACRO {bell} {"Bell Syst. Tech. J."}
+MACRO {ell} {"Electron. Lett."}
+MACRO {jasp} {"J. Appl. Spectr."}
+MACRO {jqe} {"IEEE J. Quantum Electron."}
+MACRO {jlwt} {"J. Lightwave Technol."}
+MACRO {jmo} {"J. Mod. Opt."}
+MACRO {josa} {"J. Opt. Soc. America"}
+MACRO {josaa} {"J. Opt. Soc. Amer.~A"}
+MACRO {josab} {"J. Opt. Soc. Amer.~B"}
+MACRO {jdp} {"J. Phys. (Paris)"}
+MACRO {oc} {"Opt. Commun."}
+MACRO {ol} {"Opt. Lett."}
+MACRO {phtl} {"IEEE Photon. Technol. Lett."}
+MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."}
+MACRO {sse} {"Solid-State Electron."}
+MACRO {sjot} {"Sov. J. Opt. Technol."}
+MACRO {sjqe} {"Sov. J. Quantum Electron."}
+MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."}
+MACRO {stph} {"Sov. Phys.--Techn. Phys."}
+MACRO {stphl} {"Sov. Techn. Phys. Lett."}
+MACRO {vr} {"Vision Res."}
+MACRO {zph} {"Z. f. Physik"}
+MACRO {zphb} {"Z. f. Physik~B"}
+MACRO {zphd} {"Z. f. Physik~D"}
+
+MACRO {CLEO} {"CLEO"}
+MACRO {ASSL} {"Adv. Sol.-State Lasers"}
+MACRO {OSA} {"OSA"}
+%</jabr>
+%<*!jabr>
+
+MACRO {appopt} {"Applied Optics"}
+MACRO {bell} {"Bell Systems Technical Journal"}
+MACRO {ell} {"Electronics Letters"}
+MACRO {jasp} {"Journal of Applied Spectroscopy"}
+MACRO {jqe} {"IEEE Journal of Quantum Electronics"}
+MACRO {jlwt} {"Journal of Lightwave Technology"}
+MACRO {jmo} {"Journal of Modern Optics"}
+MACRO {josa} {"Journal of the Optical Society of America"}
+MACRO {josaa} {"Journal of the Optical Society of America~A"}
+MACRO {josab} {"Journal of the Optical Society of America~B"}
+MACRO {jdp} {"Journal de Physique"}
+MACRO {oc} {"Optics Communications"}
+MACRO {ol} {"Optics Letters"}
+MACRO {phtl} {"IEEE Photonics Technology Letters"}
+MACRO {pspie} {"Proceedings of the Society for Photo-Optical Instruments Engineers"}
+MACRO {sse} {"Solid-State Electronics"}
+MACRO {sjot} {"Soviet Journal of Optical Technology"}
+MACRO {sjqe} {"Soviet Journal of Quantum Electronics"}
+MACRO {sleb} {"Soviet Physics--Lebedev Institute Reports"}
+MACRO {stph} {"Soviet Physics--Technical Physics"}
+MACRO {stphl} {"Soviet Technical Physics Letters"}
+MACRO {vr} {"Vision Research"}
+MACRO {zph} {"Zeitschrift f\^^b{u}r Physik"}
+MACRO {zphb} {"Zeitschrift f\^^b{u}r Physik~B"}
+MACRO {zphd} {"Zeitschrift f\^^b{u}r Physik~D"}
+
+MACRO {CLEO} {"Conf. on Lasers and Electro-Optics"}
+MACRO {ASSL} {"Advanced Solid State Lasers"}
+MACRO {OSA} {"Optical Society of America"}
+%</!jabr>
+%</!options>
+ % End module: photjour.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/physjour.mbs b/macros/latex/contrib/custom-bib/physjour.mbs
new file mode 100644
index 0000000000..164a7f7ab0
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/physjour.mbs
@@ -0,0 +1,398 @@
+%\iffalse THIS IS A META COMMENT
+% File: physjour.mbs
+% Copyright 1994-2002 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Journal Definition File for Physics journals
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{physjour.mbs}[2002/01/14 2.2 (PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{physjour.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1995 Mar 15}{Initial version}
+% \changes{1.1}{1995 Sep 4}{Additional journals contributed}
+% \changes{1.2}{1995 Sep 29}{Abbreviation for `applied' to `appl.'}
+% \changes{1.21}{1996 Jun 25}{Add JOSA}
+% \changes{2.0}{1996 Jun 26}{Reorganize with \texttt{geojour} and
+% \texttt{photjour}}
+% \changes{2.0a}{1996 Dec 3}{\emph{Nuovo Cimento} correctly spelled}
+% \changes{2.0b}{1997 Jul 8}{Add Astronomy and Astrophysics}
+% \changes{2.0c}{1998 Jul 23}{Add Nucl. Phys. B (Proc. Suppl.)}
+% \changes{2.0d}{1999 Feb 10}{Add Astronomy and Astrophysics, Suppl. Ser.}
+% \changes{2.0d}{1999 Feb 17}{Add Astrophys. J., Suppl. Ser.}
+% \changes{2.0d}{1999 Feb 17}{Correct pp to be Physics of Plasmas, not Plasma Physics}
+% \changes{2.0d}{1999 Feb 24}{Update copyright notice}
+% \changes{2.1}{1999 Oct 5}{Add more astronomy journals, and shorthand option}
+% \changes{2.2}{2002 Jan 14}{Correct a typo}
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly}{Physics Journal Names}
+%
+% \title{{\bfseries Physics Journal Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly}
+%
+% \GetFileInfo{physjour.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+%
+% This file adds a list of preprogrammed physics journal names to
+% bibliographic style files, in both full and abbreviated versions.
+% These defined journal names will be added to those in the main master
+% bibliography style file.
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains support for
+% external definition files.
+%
+% I have taken this list from a number of physics \texttt{.bst} files.
+%
+% Version 1.1: a number of additions have been contributed by `Harald', email
+% \texttt{soleng@surya11.cern.ch}:
+% \begin{quote}\begin{tabular}{lllll}
+% \texttt{ajm} & \texttt{ap} & \texttt{adp} & \texttt{app} & \texttt{cqg}\\
+% \texttt{cra} & \texttt{cmp} & \texttt{cpc} & \texttt{grg} & \texttt{inc}\\
+% \texttt{np} & \texttt{npb} & \texttt{plb} & \texttt{prep} & \texttt{pra}\\
+% \texttt{prb} & \texttt{prc} & \texttt{prd} & \texttt{pre}
+%\end{tabular}\end{quote}
+% whereby \texttt{pra} (\textsl{Phys.\ Rev.\ A}) was not added, rather the
+% text was changed slightly.
+%
+% I have also added \texttt{ag} (\textsl{Annales Geophysic\ae}) and
+% \texttt{npg} (\textsl{Nonlinear Processes in Geophysics}).
+%
+% Version 1.2: Zhenya Sorokin, email \texttt{sorokin@ps1.iaee.tuwien.ac.at},
+% makes abbreviation for `applied' to `appl.'
+%
+% Version 1.21: Ralf Fassel, email \texttt{ralf@natlab.research.philips.com},
+% adds \textsl{Journal of the Acoustical Society of America}.
+%
+% Version 2.0: I go through all journal names, checking for conflicts and
+% duplications with \texttt{geojour.mbs} and \texttt{photjour.mbs}.
+% Optical and geophysical journals removed; physical journals included
+% from the others. Where one journal exists with multiple shorthands,
+% all versions are kept.
+%
+% Versions 2.0a,b,c: add more journals.
+%
+% Version 2.0d: revise copyright notice to LPPL standard.
+%
+% Version 2.1: add more astronomy journals and also an option
+% \texttt{jaa} to produce the shorthands used in astronomy journals, such
+% as A\&A for Astronomy and Astrophyics.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options>|
+% \dots\ |%</!options>| in order to exclude it if \dtx{} is used to
+% extract only the menu information.
+%
+% A journal-names files should contain at most only two options, \texttt{jabr}
+% and \texttt{jaa}.
+% This is because \texttt{merlin} version~3.5 can now handle several
+% journal-name files, but does not look into them for the options, but
+% rather asks for \texttt{jabr} from the main file. For compatibility with
+% older versions, the option menu must be kept here.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JPHYSICS JOURNAL NAMES:}
+\optdef{*}{}{Full physics journal names}{}
+\optdef{a}{jabr}{Abbreviate physics names}{for journals}
+\optdef{s}{jabr,jaa}{With astronomy shorthands}{like ApJ and AJ}
+\getans
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options>
+%<*jabr>
+%<!jaa>MACRO {aa}{"Astron. \& Astrophys."}
+%<jaa>MACRO {aa}{"A\&A"}
+%<!jaa>MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."}
+%<jaa>MACRO {aasup}{"A\&AS"}
+%<!jaa>MACRO {aj} {"Astron. J."}
+%<jaa>MACRO {aj} {"AJ"}
+MACRO {aph} {"Acta Phys."}
+MACRO {advp} {"Adv. Phys."}
+MACRO {ajp} {"Amer. J. Phys."}
+MACRO {ajm} {"Amer. J. Math."}
+MACRO {amsci} {"Amer. Sci."}
+MACRO {anofd} {"Ann. Fluid Dyn."}
+MACRO {am} {"Ann. Math."}
+MACRO {ap} {"Ann. Phys. (NY)"}
+MACRO {adp} {"Ann. Phys. (Leipzig)"}
+MACRO {ao} {"Appl. Opt."}
+MACRO {apl} {"Appl. Phys. Lett."}
+MACRO {app} {"Astroparticle Phys."}
+%<!jaa>MACRO {apj} {"Astrophys. J."}
+%<jaa>MACRO {apj} {"ApJ"}
+%<!jaa>MACRO {apjsup} {"Astrophys. J. Suppl."}
+%<jaa>MACRO {apjsup} {"ApJS"}
+%<!jaa>MACRO {apss} {"Astrophys. Space Sci."}
+%<jaa>MACRO {apss} {"Ap\&SS"}
+%<!jaa>MACRO {araa} {"Ann. Rev. Astron. Astrophys."}
+%<jaa>MACRO {araa} {"ARA\&A"}
+%<!jaa>MACRO {baas} {"Bull. Amer. Astron. Soc."}
+%<jaa>MACRO {baas} {"BAAS"}
+MACRO {baps} {"Bull. Amer. Phys. Soc."}
+MACRO {cmp} {"Comm. Math. Phys."}
+MACRO {cpam} {"Commun. Pure Appl. Math."}
+MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"}
+MACRO {cpc} {"Comp. Phys. Comm."}
+MACRO {cqg} {"Class. Quant. Grav."}
+MACRO {cra} {"C. R. Acad. Sci. A"}
+MACRO {fed} {"Fusion Eng. \& Design"}
+MACRO {ft} {"Fusion Tech."}
+MACRO {grg} {"Gen. Relativ. Gravit."}
+MACRO {ieeens} {"IEEE Trans. Nucl. Sci."}
+MACRO {ieeeps} {"IEEE Trans. Plasma Sci."}
+MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"}
+MACRO {ip} {"Infrared Phys."}
+MACRO {irp} {"Infrared Phys."}
+MACRO {jap} {"J. Appl. Phys."}
+MACRO {jasa} {"J. Acoust. Soc. America"}
+MACRO {jcp} {"J. Comp. Phys."}
+MACRO {jetp} {"Sov. Phys.--JETP"}
+MACRO {jfe} {"J. Fusion Energy"}
+MACRO {jfm} {"J. Fluid Mech."}
+MACRO {jmp} {"J. Math. Phys."}
+MACRO {jne} {"J. Nucl. Energy"}
+MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."}
+MACRO {jnm} {"J. Nucl. Mat."}
+MACRO {jpc} {"J. Phys. Chem."}
+MACRO {jpp} {"J. Plasma Phys."}
+MACRO {jpsj} {"J. Phys. Soc. Japan"}
+MACRO {jsi} {"J. Sci. Instrum."}
+MACRO {jvst} {"J. Vac. Sci. \& Tech."}
+%<!jaa>MACRO {nat} {"Nature"}
+%<!jaa>MACRO {nature} {"Nature"}
+%<jaa>MACRO {nat} {"Nat"}
+%<jaa>MACRO {nature} {"Nat"}
+MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"}
+MACRO {nf} {"Nucl. Fusion"}
+MACRO {nim} {"Nucl. Inst. \& Meth."}
+MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."}
+MACRO {np} {"Nucl. Phys."}
+MACRO {npb} {"Nucl. Phys. B"}
+MACRO {nt/f} {"Nucl. Tech./Fusion"}
+MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"}
+MACRO {inc} {"Nuovo Cimento"}
+MACRO {nc} {"Nuovo Cimento"}
+MACRO {pf} {"Phys. Fluids"}
+MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."}
+MACRO {pfb} {"Phys. Fluids B: Plasma Phys."}
+MACRO {pl} {"Phys. Lett."}
+MACRO {pla} {"Phys. Lett. A"}
+MACRO {plb} {"Phys. Lett. B"}
+MACRO {prep} {"Phys. Rep."}
+MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"}
+MACRO {pp} {"Phys. Plasmas"}
+MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"}
+MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"}
+MACRO {prl} {"Phys. Rev. Lett."}
+MACRO {pr} {"Phys. Rev."}
+MACRO {physrev} {"Phys. Rev."}
+MACRO {pra} {"Phys. Rev. A"}
+MACRO {prb} {"Phys. Rev. B"}
+MACRO {prc} {"Phys. Rev. C"}
+MACRO {prd} {"Phys. Rev. D"}
+MACRO {pre} {"Phys. Rev. E"}
+MACRO {ps} {"Phys. Scripta"}
+MACRO {procrsl} {"Proc. Roy. Soc. London"}
+MACRO {rmp} {"Rev. Mod. Phys."}
+MACRO {rsi} {"Rev. Sci. Inst."}
+%<!jaa>MACRO {science} {"Science"}
+%<jaa>MACRO {science} {"Sci"}
+MACRO {sciam} {"Sci. Am."}
+MACRO {sam} {"Stud. Appl. Math."}
+MACRO {sjpp} {"Sov. J. Plasma Phys."}
+MACRO {spd} {"Sov. Phys.--Doklady"}
+MACRO {sptp} {"Sov. Phys.--Tech. Phys."}
+MACRO {spu} {"Sov. Phys.--Uspeki"}
+%<!jaa>MACRO {st} {"Sky and Telesc."}
+%<jaa>MACRO {st} {"S\&T"}
+%</jabr>
+%<*!jabr>
+MACRO {aa}{"Astronomy and Astrophysics"}
+MACRO {aasup}{"Astronomy and Astrophysics, Supplement Series"}
+MACRO {aj}{"Astronomical Journal"}
+MACRO {aph} {"Acta Physica"}
+MACRO {advp} {"Advances in Physics"}
+MACRO {ajp} {"American Journal of Physics"}
+MACRO {ajm} {"American Journal of Mathematics"}
+MACRO {amsci} {"American Scientist"}
+MACRO {anofd} {"Annals of Fluid Dynamics"}
+MACRO {am} {"Annals of Mathematics"}
+MACRO {ap} {"Annals of Physics"}
+MACRO {adp} {"Annalen der Physik"}
+MACRO {ao} {"Applied Optics"}
+MACRO {apl} {"Applied Physics Letters"}
+MACRO {app} {"Astroparticle Physics"}
+MACRO {apj} {"Astrophysical Journal"}
+MACRO {apjsup} {"Astrophysical Journal Supplement"}
+MACRO {apss} {"Astrophysics and Space Science"}
+MACRO {araa} {"Annual Review of Astronomy and Astrophysics"}
+MACRO {baas} {"Bulletin of the American Astronomical Society"}
+MACRO {baps} {"Bulletin of the American Physical Society"}
+MACRO {cmp} {"Communications in Mathematical Physics"}
+MACRO {cpam} {"Communications on Pure and Applied Mathematics"}
+MACRO {cppcf} {"Comments on Plasma Physics and Controlled Fusion"}
+MACRO {cpc} {"Computer Physics Communications"}
+MACRO {cqg} {"Classical and Quantum Gravity"}
+MACRO {cra} {"Comptes Rendus des S{\'e}ances de l'Acad{\'e}mie des Sciences A"}
+MACRO {fed} {"Fusion Engineering and Design"}
+MACRO {ft} {"Fusion Technology"}
+MACRO {grg} {"General Relativity and Gravitation"}
+MACRO {ieeens} {"IEEE Transactions on Nuclear Science"}
+MACRO {ieeeps} {"IEEE Transactions on Plasma Science"}
+MACRO {ijimw} {"International Journal of Infrared and Millimeter Waves"}
+MACRO {ip} {"Infrared Physics"}
+MACRO {irp} {"Infrared Physics"}
+MACRO {jap} {"Journal of Applied Physics"}
+MACRO {jasa} {"Journal of the Acoustical Society of America"}
+MACRO {jcp} {"Journal of Computational Physics"}
+MACRO {jetp} {"Soviet Physics--JETP"}
+MACRO {jfe} {"Journal of Fusion Energy"}
+MACRO {jfm} {"Journal of Fluid Mechanics"}
+MACRO {jmp} {"Journal of Mathematical Physics"}
+MACRO {jne} {"Journal of Nuclear Energy"}
+MACRO {jnec} {"Journal of Nuclear Energy, Part C: Plasma Physics, Accelerators, Thermonuclear Research"}
+MACRO {jnm} {"Journal of Nuclear Materials"}
+MACRO {jpc} {"Journal of Physical Chemistry"}
+MACRO {jpp} {"Journal of Plasma Physics"}
+MACRO {jpsj} {"Journal of the Physical Society of Japan"}
+MACRO {jsi} {"Journal of Scientific Instruments"}
+MACRO {jvst} {"Journal of Vacuum Science and Technology"}
+MACRO {nat} {"Nature"}
+MACRO {nature} {"Nature"}
+MACRO {nedf} {"Nuclear Engineering and Design/Fusion"}
+MACRO {nf} {"Nuclear Fusion"}
+MACRO {nim} {"Nuclear Instruments and Methods"}
+MACRO {nimpr} {"Nuclear Instruments and Methods in Physics Research"}
+MACRO {np} {"Nuclear Physics"}
+MACRO {npb} {"Nuclear Physics B"}
+MACRO {nt/f} {"Nuclear Technology/Fusion"}
+MACRO {npbpc} {"Nuclear Physics B (Proceedings Supplements)"}
+MACRO {inc} {"Il Nuovo Cimento"}
+MACRO {nc} {"Nuovo Cimento"}
+MACRO {pf} {"Physics of Fluids"}
+MACRO {pfa} {"Physics of Fluids A: Fluid Dynamics"}
+MACRO {pfb} {"Physics of Fluids B: Plasma Physics"}
+MACRO {pl} {"Physics Letters"}
+MACRO {pla} {"Physics Letters A"}
+MACRO {plb} {"Physics Letters B"}
+MACRO {prep} {"Physics Reports"}
+MACRO {pnas} {"Proceedings of the National Academy of Sciences of the USA"}
+MACRO {pp} {"Physics of Plasmas"}
+MACRO {ppcf} {"Plasma Physics and Controlled Fusion"}
+MACRO {phitrsl} {"Philosophical Transactions of the Royal Society of London"}
+MACRO {prl} {"Physical Review Letters"}
+MACRO {pr} {"Physical Review"}
+MACRO {physrev} {"Physical Review"}
+MACRO {pra} {"Physical Review A"}
+MACRO {prb} {"Physical Review B"}
+MACRO {prc} {"Physical Review C"}
+MACRO {prd} {"Physical Review D"}
+MACRO {pre} {"Physical Review E"}
+MACRO {ps} {"Physica Scripta"}
+MACRO {procrsl} {"Proceedings of the Royal Society of London"}
+MACRO {rmp} {"Reviews of Modern Physics"}
+MACRO {rsi} {"Review of Scientific Instruments"}
+MACRO {science} {"Science"}
+MACRO {sciam} {"Scientific American"}
+MACRO {sam} {"Studies in Applied Mathematics"}
+MACRO {sjpp} {"Soviet Journal of Plasma Physics"}
+MACRO {spd} {"Soviet Physics--Doklady"}
+MACRO {sptp} {"Soviet Physics--Technical Physics"}
+MACRO {spu} {"Soviet Physics--Uspeki"}
+MACRO {st} {"Sky and Telescope"}
+%</!jabr>
+%</!options>
+ % End module: physjour.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/polski.mbs b/macros/latex/contrib/custom-bib/polski.mbs
new file mode 100644
index 0000000000..2f6c1efd28
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/polski.mbs
@@ -0,0 +1,348 @@
+%\iffalse THIS IS A META COMMENT
+% File: polski.mbs
+% Copyright 1995-2000 Patrick W Daly
+% Max-Planck-Institut f\"ur Sonnensystemforschung
+% Max-Planck-Str. 2
+% D-37191 Katlenburg-Lindau
+% Germany
+% E-mail: daly@mps.mpg.de
+%
+% Copyright (C) 2000, Andrzej M. Borzyszkowski
+% Instytut Podstaw Informatyki Polskiej Akademii Nauk
+% adres: ul. Abrahama 18, 81-825 Sopot, Poland
+% e-mail: a.borzyszkowski@ipipan.gda.pl
+%
+% 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: POLSKI
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{polski.mbs}[2003/11/06 4.2 (AMB/PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{polski.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{4.0}{2000. February 21}{Submitted to PWD by AMB}
+% \changes{4.0a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{A.\ M.\ Borzyszkowski}{Polish Bibliographies}
+%
+% \title{{\bfseries Polish Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Andrzej M.\ Borzyszkowski}
+%
+% \GetFileInfo{polski.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Polish\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for POLISH}
+\wr{\spsp\spsp polski,\pc: Polish language}
+
+\beginoptiongroup{ABBREVIATE WORD `STRONY':}{}
+\optdef{*}{}{`Strony'}{(no abbreviation)}
+\optdef{a}{pp}{`Strony' abbreviated}{as str.}
+\optdef{x}{ppx}{`Strony' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `REDAKTOR':}{}
+\optdef{*}{}{`Redaktor'}{(no abbreviation)}
+\optdef{a}{ed}{`Redaktor' abbreviated}{as Red.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of wydanie, rozdzia\string\l, itd.}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as pierwsze, drugie, trzecie, itd.}
+\optdef{n}{ord}{Numerical editions}{as 1. 2. 3. itd.}
+\getans
+\endoptiongroup
+\beginoptiongroup{MONTHS IN ROMAN:}{}
+\optdef{*}{roman}{Months written in roman numerals}{as I, II, III, itd.}
+\optdef{x}{}{Months written in words}{as stycze\string\'n, luty, itd.}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is POLSKI
+FUNCTION {bbl.and}
+{ "i" }
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "redaktorzy" }
+%<ed>{ "red." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "redaktor" }
+%<ed>{ "red." }
+
+FUNCTION {bbl.edby}
+{ "pod redakcj{\k a}" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "wydanie" }
+%<abr>{ "wyd." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "tom" }
+%<abr>{ "tom" }
+
+FUNCTION {bbl.of}
+{ "z serii" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "numer" }
+%<abr>{ "nr" }
+
+FUNCTION {bbl.nr}
+{ "nr" }
+
+FUNCTION {bbl.in}
+{ "w" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "strony" }
+%<pp>{ "str." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "strona" }
+%<pp>{ "str." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "strony" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "rozdzia{\l}" }
+%<abr>{ "rozdz." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Raport techniczny" }
+%<abr>{ "Rap. tech." }
+
+FUNCTION {bbl.mthesis}
+{ "Praca magisterska" }
+
+FUNCTION {bbl.phdthesis}
+{ "Rozprawa doktorska" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "pierwsze" }
+%<ord>{ "1." }
+
+FUNCTION {bbl.second}
+%<!ord>{ "drugie" }
+%<ord>{ "2." }
+
+FUNCTION {bbl.third}
+%<!ord>{ "trzecie" }
+%<ord>{ "3." }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "czwarte" }
+%<ord>{ "4." }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "pi{\k a}te" }
+%<ord>{ "5." }
+
+FUNCTION {bbl.st}
+{ "." }
+
+FUNCTION {bbl.nd}
+{ "." }
+
+FUNCTION {bbl.rd}
+{ "." }
+
+FUNCTION {bbl.th}
+{ "." }
+%</!xedn>
+%<*!roman>
+%<*!abr>
+MACRO {jan} {"stycze\'n"}
+
+MACRO {feb} {"luty"}
+
+MACRO {mar} {"marzec"}
+
+MACRO {apr} {"kwiecie\'n"}
+
+MACRO {may} {"maj"}
+
+MACRO {jun} {"czerwiec"}
+
+MACRO {jul} {"lipiec"}
+
+MACRO {aug} {"sierpie\'n"}
+
+MACRO {sep} {"wrzesie\'n"}
+
+MACRO {oct} {"pa\'zdziernik"}
+
+MACRO {nov} {"listopad"}
+
+MACRO {dec} {"grudzie\'n"}
+%</!abr>
+%<*abr>
+MACRO {jan} {"stycz."}
+
+MACRO {feb} {"luty"}
+
+MACRO {mar} {"marz."}
+
+MACRO {apr} {"kwiec."}
+
+MACRO {may} {"maj"}
+
+MACRO {jun} {"czer."}
+
+MACRO {jul} {"lip."}
+
+MACRO {aug} {"sier."}
+
+MACRO {sep} {"wrz."}
+
+MACRO {oct} {"pa\'zdz."}
+
+MACRO {nov} {"list."}
+
+MACRO {dec} {"grudz."}
+%</abr>
+%</!roman>
+%<*roman>
+MACRO {jan} {"I"}
+
+MACRO {feb} {"II"}
+
+MACRO {mar} {"III"}
+
+MACRO {apr} {"IV"}
+
+MACRO {may} {"V"}
+
+MACRO {jun} {"VI"}
+
+MACRO {jul} {"VII"}
+
+MACRO {aug} {"VIII"}
+
+MACRO {sep} {"IX"}
+
+MACRO {oct} {"X"}
+
+MACRO {nov} {"XI"}
+
+MACRO {dec} {"XII"}
+%</roman>
+%</!options&!driver>
+ % End module: polski.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/portuges.mbs b/macros/latex/contrib/custom-bib/portuges.mbs
new file mode 100644
index 0000000000..178e7c5066
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/portuges.mbs
@@ -0,0 +1,316 @@
+%\iffalse THIS IS A META COMMENT
+% File: portuges.mbs
+% Copyright 1997-1999 Patrick W Daly
+% Max-Planck-Institut f\"ur Sonnensystemforschung
+% Max-Planck-Str. 2
+% D-37191 Katlenburg-Lindau
+% Germany
+% E-mail: daly@mps.mpg.de
+%
+% Copyright 1997 Rui Ara\'ujo
+% Instituto de Sistemas e Rob\'otica, e
+% Departamento de Engenharia Electrot\'ecnica e de Computadores
+% Universidade de Coimbra, P\'olo II
+% P-3030-290 Coimbra, Portugal
+% E-mail: rui@isr.uc.pt, rui@deec.uc.pt
+%
+% 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: PORTUGUESE
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+%\fi
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{portuges.mbs}[2003/11/06 4.2 (PWD/RA)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{portuges.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.1}{1997 October 09}{Initial version}
+% \changes{1.2}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{1.3}{1999 Feb 1}{Add option \texttt{xedn}}
+% \changes{1.3}{1999 Feb 24}{Update copyright notice}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.0a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{R. Ara\'ujo}{Portuguese Bibliographies}
+%
+% \title{{\bfseries Portuguese Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Rui Ara\'ujo}
+%
+% \GetFileInfo{portuges.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Portuguese\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for PORTUGUESE}
+\wr{\spsp\spsp portuguese,\pc: Portuguese language}
+
+
+\beginoptiongroup{ABBREVIATE WORD `P\string\'AGINAS':}{}
+\optdef{*}{}{`P\string\'agina(s)'}{(no abbreviation)}
+\optdef{a}{pp}{`P\string\'agina' abbreviated}{as p\string\'ag. or p\string\'ags.}
+\optdef{x}{ppx}{`P\string\'agina' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `EDITOR':}{}
+\optdef{*}{}{`Editor(es)'}{(no abbreviation)}
+\optdef{a}{ed}{`Editor' abbreviated}{as ed. or eds.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of Volume, Edicao, Cap\string\'itulo}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as Primeira, Segunda, Terceira, etc}
+\optdef{n}{ord}{Numerical editions}{as 1a, 2a, 3a, etc}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is PORTUGUESE
+FUNCTION {bbl.and}
+{ "e"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "editores" }
+%<ed>{ "eds." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "editor" }
+%<ed>{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "editado por" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "edi\c{c}\~ao" }
+%<abr>{ "ed." }
+
+FUNCTION {bbl.volume}
+{ "volume" }
+
+FUNCTION {bbl.of}
+{ "de" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "n\'umero" }
+%<abr>{ "n\raise1ex\hbox{\underbar{\scriptsize o}}" }
+
+FUNCTION {bbl.nr}
+{ "n\raise1ex\hbox{\underbar{\scriptsize o}}" }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "p\'aginas" }
+%<pp>{ "p\'ags." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "p\'agina" }
+%<pp>{ "p\'ag." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "p\'aginas" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "cap\'{\i}tulo" }
+%<abr>{ "cap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Relat\'orio T\'ecnico" }
+%<abr>{ "Rel.\ T\'ec." }
+
+FUNCTION {bbl.mthesis}
+{ "Tese de Mestrado" }
+
+FUNCTION {bbl.phdthesis}
+{ "Tese de Doutoramento" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "primeira" }
+%<ord>{ "1\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+FUNCTION {bbl.second}
+%<!ord>{ "segunda" }
+%<ord>{ "2\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+FUNCTION {bbl.third}
+%<!ord>{ "terceira" }
+%<ord>{ "3\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "quarta" }
+%<ord>{ "4\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "quinta" }
+%<ord>{ "5\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+FUNCTION {bbl.th}
+{ "\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"janeiro"}
+
+MACRO {feb} {"fevereiro"}
+
+MACRO {mar} {"mar\c{c}o"}
+
+MACRO {apr} {"abril"}
+
+MACRO {may} {"maio"}
+
+MACRO {jun} {"junho"}
+
+MACRO {jul} {"julho"}
+
+MACRO {aug} {"agosto"}
+
+MACRO {sep} {"setembro"}
+
+MACRO {oct} {"outubro"}
+
+MACRO {nov} {"novembro"}
+
+MACRO {dec} {"dezembro"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"jan."}
+
+MACRO {feb} {"fev."}
+
+MACRO {mar} {"mar."}
+
+MACRO {apr} {"abr."}
+
+MACRO {may} {"maio"}
+
+MACRO {jun} {"jun."}
+
+MACRO {jul} {"jul."}
+
+MACRO {aug} {"ago."}
+
+MACRO {sep} {"set."}
+
+MACRO {oct} {"out."}
+
+MACRO {nov} {"nov."}
+
+MACRO {dec} {"dez."}
+
+%</abr>
+%</!options&!driver>
+ % End module: portuges.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/readme.mkb b/macros/latex/contrib/custom-bib/readme.mkb
new file mode 100644
index 0000000000..04aa0bc49f
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/readme.mkb
@@ -0,0 +1,556 @@
+ CUSTOM-BIB Package
+
+**** INFO ******
+(Work on version 4.x has been supported by the American Physical Society)
+
+Current version is 4.33
+*****************
+See list of changes below
+*****************
+
+This is the custom-bib package for generating customized BibTeX bibliography
+styles from a generic file by means of the docstrip program that is part of
+the LaTeX2e installation.
+
+****************************************************************************
+
+To use/install the package:
+
+0. (optional, for hackers) LaTeX makebst.dtx to get the documentation;
+ This also extracts makebst.ins from makebst.dtx, if it does not already
+ exist.
+1. Run TeX (or LaTeX) on makebst.ins (--> makebst.tex)
+2. Run TeX (or LaTeX) on makebst.tex to start customizing
+ your own .bst file. Select merlin as the master file (default) when
+ asked. (I have other master files for my own purposes.)
+3. Answer the questions that then arise; for merlin, you will also be asked
+ which language support file you want (default is merlin itself, meaning
+ English or the pseudo-language Babel). You will also be asked if you want
+ to add a file defining short-hand designations for various journals; such
+ files are included (physjour.mbs, geojour.mbs, photjour.mbs) for physics
+ geophysics, and optics journals, but you could create your own.
+4. The menus that appear may not be informative enough for you. More
+ information can be obtained by reading the documentation (on the options)
+ contained in the .mbs files themselves. This documentation can be printed
+ out by running LaTeX on the .mbs files.
+5. The makebst program only produces a docstrip batch job to generate the .bst
+ file. The last question it asks is whether that job should be run right
+ away. You can always run it again yourself by running TeX or LaTeX on
+ this .dbj file. (The .dbj file can also be manually edited if you want to
+ play around with the various options it includes.)
+
+****************************************************************************
+
+The package contains the following files:
+ merlin.mbs -- A master BibTeX style file for producing customized
+ styles (numerical or author-year) with docstrip. It is
+ self-documenting: simply latex it to produce its
+ description.
+
+ english.mbs -- A sample language support file for English, to act as a
+ model for hacking others.
+
+ catalan.mbs -- A language support file for Catalan
+ dansk.mbs -- A language support file for Danish
+ dutch.mbs -- A language support file for Dutch
+ esperant.mbs -- A language support file for Esperanto
+ finnish.mbs -- A language support file for Finnish
+ french.mbs -- A language support file for French
+ german.mbs -- A language support file for German
+ italian.mbs -- A language support file for Italian
+ norsk.mbs -- A language support file for Norwegian
+ polski.mbs -- A language support file for Polish
+ portuges.mbs -- A language support file for Portuguese
+ slovene.mbs -- A language support file for Slovene
+ spanish.mbs -- A language support file for Spanish
+ svenska.mbs -- A language support file for Swedish
+(Further contributions and corrections are welcome)
+
+ physjour.mbs -- A support file to add the names of common Physics journals
+ in shorthand form, for example `pr' for Physical Review, or
+ Phys. Rev., depending on whether abbreviations are chosen.
+
+ photjour.mbs -- A contributed file containing names of optics journals
+
+ geojour.mbs -- A contributed file containing names of geophysics journals
+ suppjour.mbs -- A contributed file containing further journal names
+
+(Contributions for other fields are welcome)
+
+ shorthnd.ins -- (La)TeX this file to obtain shorthnd.tex, which when
+ LaTeX'ed lists all the shorthands and journal names
+
+The .mbs files can only be used effectively with the makebst `program', which
+is included in documented source form.
+
+ makebst.dtx -- the documented source file; LaTeXing this file produces
+ the manual and optionally a documentation of the coding.
+ Requires ltxdoc class from the LaTeX2e distribution.
+
+ This is version 4.0; necessary with merlin 4.00, but
+ works with older versions of merlin.
+
+ makebst.ins -- a docstrip batch job to extract from makebst.dtx the
+ program file makebst.tex. (This file is actually included
+ within makebst.dtx; it is extracted when the .dtx file is
+ processed under LaTeX2e.)
+
+****************************************************************************
+
+HISTORY AND DEVELOPMENT:-
+Many authors are frustrated at the wide range of bibliographic styles demanded
+by journals and publishers, and at the limited number available with standard
+LaTeX and BibTeX. This is not the fault of the latter, but rather of the lack
+of any bibliographic standards in the English language. Often the differences
+are so trivial (comma or colon, date in brackets or parentheses). The normal
+user does not want to tackle the task of making up his own .bst file (no
+normal human would!)
+
+For this reason, I set out to produce a generic .bst file that could have
+features and options selected by means of the docstrip program.
+I found over 50 different *.bst files and compared their outputs just for
+article: they were all different. They served as part of my input as to which
+features were needed. I knew of a few extra that were not covered by these 50.
+
+I also discovered XBTXBST.DOC, a minor modification of Patashnik's BTXBST.DOC,
+as well as a file PHYSICS.BST, all of which are meant to do precisely what I
+had set up to accomplish. However, they make use of the C Preprocessor
+language. It is really a simple matter to convert the preprocessor commands
+into docstrip equivalents.
+
+Nevertheless, none of these really met all of my needs, so I continued to
+develop GENBST.mbs (GENeric-BibST.MasterBibSt). It soon became obvious that the
+sheer number of options necessary made any kind of customizing a difficult
+chore. Hence, the next step: the program MAKEBST takes menu information from
+the selected .mbs file and presents the user with descriptive choices as
+menus. From the answers, it writes a docstrip batch job (extension .dbj) which
+when TeX'ed, creates the desired .bst file out of the .mbs one. The .dbj file
+may even be hand edited if one wants to alter only one or two options.
+
+Since I first released this system in November 1993, I have received many
+suggestions and requests for additions. I have tried to incorporate as many as
+possible, but often the task is too complicated and I have to leave them out.
+
+The second version of GENBST.mbs allowed other languages to be used. However,
+since the method had considerable overhead per language, I was unsatified with
+it. A parallel version called BABEL.mbs (which was really GENBST.mbs version
+2) has been available for some time, supporting English, French, German, and
+Esperanto, as well as a generic language called Babel.
+
+I then modified MAKEBST to allow more than one .mbs file to be used as
+input for any given .bst output. This means that the language support can be
+contained in separate files, one per language, and does not need to burden the
+main file. The next issue of this main file, version 3, was renamed
+MERLIN.mbs, to emphasize its magical powers.
+
+Version 3 continued to grow as more suggestions and requests were
+contributed. Further language files were offered to me, as well as lists of
+prerecorded journal names. The number of options had grown to roughly 200,
+including the defaults.
+
+The American Physical Society then decided it would like a number of new
+features for its REVTeX package, mainly to support electronic publishing.
+David Carlisle, Mark Doyle, and Arthur Ogawa made up a variant on merlin.mbs
+for this purpose, which I then integrated into the "official" one. Thus was
+born version 4.00 of MERLIN.mbs.
+
+NOTE ON AUTHOR-YEAR CITATIONS:-
+Author-year style citations are not supported by standard LaTeX and BibTeX.
+However, there exist a large number of bib styles for this, all of which need
+some interface package to run properly. There are (at least) 7 different such
+interfaces, including the one I invented for the NATBIB package. If one
+selects author-year style, then one is asked which interface is to be
+used. (Incidentally NATBIB is capable of interpreting all of them.)
+
+LIST OF ALL OPTIONS IN THE DBJ FILE
+The makebst program writes to the .dbj file all the docstrip options that were
+offered in the interactive session with the unselected ones commented out.
+This makes editing afterwards much easier. Often one wants to experiment with
+some of these options, but only wants to run the makebst program once.
+
+This feature (suggested by Frank Mittelbach) is available when the
+makebst.tex file is extracted from makebst.dtx with the `optlist' option;
+without it, only the selected options are listed in the .dbj file.
+Edit the makebst.ins file accordingly; by default, this feature is included.
+
+With version 4, one may select a verbose listing during run time, writing
+more details into the .dbj file, including all possible options, even those
+not offered.
+
+ALLOW MULTIPLE INPUT .MBS FILES
+The .dbj file is so constructed that more than one input .mbs file may be
+read for a single output .bst file. The main .mbs file must have its menu
+coding arranged to take advantage of this, something that merlin.mbs does.
+(The older genbst.mbs and babel.mbs did not have this feature.)
+
+NEW FEATURES OF MERLIN.MBS since genbst.mbs 1.7 and babel 2.5
+Names formatting: can also have reversed full names, as Smith, John George
+ (previously reversed names could only be initials)
+ John George Smith
+ Smith, John George (v3.1)
+ J. G. Smith
+ Smith, J. G.
+ (AGU style: first name reversed, rest normal, all with initials)
+ (AGU style but with full names, not initials) (v3.82)
+ Smith, J G
+ Smith, JG (v3.1)
+ Smith J G (v3.2)
+
+Editors' names (in collections) for surname-first styles, may now be formatted
+ exactly as the authors'. (Previously these would never be reversed.)
+
+ Also possible to have
+ In: B. G. Jones, editor, Booktitle [default]
+ In: B. G. Jones, (editor), Booktitle
+ In: B. G. Jones, (editor) Booktitle
+ In: B. G. Jones (editor) Booktitle
+ In: Booktitle, edited by B. G. Jones
+ In: Booktitle (edited by B. G. Jones)
+ In: Booktitle, (edited by B. G. Jones)
+ In: Booktitle, editor B. G. Jones
+ In: Booktitle, (editor) B. G. Jones
+ In: Booktitle (editor B. G. Jones)
+ In: Booktitle, (editor B. G. Jones)
+ In: Booktitle, B. G. Jones, editor
+ In: Booktitle (B. G. Jones, editor)
+
+ISBN and ISSN numbers can optionally be included, if present in database
+
+Volume, number has more possibilities: for volume=34, number=2:
+ 34(2) 34 (2) 34, 2 34, no. 2 34, #2 34 34(1997)
+(Last example: the year in parentheses in place of the number)
+
+The following page number can be separated by colon, colon space,
+ semi-colon and space, comma and space, or space only
+
+Or even vol. 34 (1994) 2, pp. 234-254 (v3.81)
+
+Date: year coming just after authors may have colon and space following
+ date may appear as `1994 Jul', with or without a dot (v3.2)
+ date may be part of journal specification, something that is common
+ in medical journals (v3.2)
+
+Journal names: the periods in abbreviations may be removed, so Phys. Rev.
+ becomes Phys Rev (no change to database necessary)
+
+Author names in citations and list of references may be independently set
+ in italic, small caps, or bold. Optionally, first names can be in a
+ different font from the surnames.
+
+The mininum number of authors' names before et al. has been raised from
+ 6 to 99 (v3.87)
+
+The page numbers in edited works can have `pages' or `pp' suppressed (v3.2)
+
+It is possible to have the names sorted by ignoring the `von' part, so that
+ della Robbia comes after Rabin (v3.2)
+
+Publisher's address may come before name, as New York: New Press
+ (required by some psychology journals) (v3.3)
+
+Publisher's address may come before the chapter/page information (v3.81)
+
+Number/series can come just before publisher/organization (v3.88)
+
+URL support for online documents (v3.97)
+
+HTML output added, experimental (v3.88)
+
+Refinements added to version 3.3:
+ - the extra labels added to years (as 1995a) are grouped in braces
+ to avoid some problems with natbib when this extra label is more than
+ one letter
+
+ - when full author lists may be optional (for harvard and natbib formats)
+ they are no longer included if they are identical to the short
+ author list
+
+Refinements added to version 3.4:
+ - journals can have date between volume and pages, as
+ J. Geophys. Res. {\bf 34} (1994) 333-338
+ - author block can be terminated with colon
+ - if cited authors are in bold, italic, or small caps, then the word
+ `and' can be in the regular text font, not in the author font.
+
+Refinements added to version 3.5:
+ - Technical Reports can have titles treated like books (default=article)
+ - can sort by year then authors
+ - can include more than one file with prestored journal names
+ - bug fixed for limited number of authors: sort only on those present
+ - the `named' format for \bibitem now included.
+
+Refinements added to version 3.6:
+ - blocks can be separated by colons as well as commas or periods
+ - name of journal can be in normal font, not only italic
+ - pages in books may be in parentheses
+ - can have `number' as part of page specification: 34, (2)234-(2)254
+ - date may be bold
+ - if authors in list have special font, then `and' and/or `et al.'
+ may be normal font
+
+Refinements added to version 3.7:
+ - an option to allow authors to be separated by semi-colons instead of
+ by commas
+ - fix bug in the option that removes periods from journal names when
+ italicized
+
+Refinements added to version 3.8:
+ - fix a bug with titles in quotes
+ - an option allows ALPHA style citations, of the form ABD90. This
+ is essentially a numerical system with some text replacing the number.
+ - publishers and address can appear in parentheses
+ - punctuation between `blocks' can be suppressed, space only
+ - ordering reference list by year is possible for author-year as well as
+ numerical modes
+ - can put date between volume and number
+ - can add `pages' or `pp' to articles
+ - cited names in a special font can have the `and' in regular font:
+ previously this meant \rm, but now, with NFSS, only the one attribute is
+ reset; thus \textbf{\cite{james93}} yields
+ \textbf{\textsc{James {\upshape and} Johns}, [1993]}
+ so that `and' will be bold non-sc. (Actually, bold small caps does not
+ exist in the CM fonts, so a substitution will be made.)
+
+Refinements added to version 3.81:
+ - when used with natbib 6.3, the extra letters added to the dates in
+ author-year citations (Jones et al, 1994a) are suppressed in the reference
+ list when numerical citations are used instead. These letters are
+ superfluous in this case and so should not be present.
+ - For incollections, the word `in' can be left off.
+ - Publisher can be placed before chapter/page information
+ - dates can be followed by periods even when block punctuation is comma
+
+ - The .mbs files with prestored journal names have been rationalized, to
+ remove duplications (or shorthands) and to organize the journal types
+ better. Some journals were present several times under different
+ shorthands (Phys. Rev. is both pr and physrev); these multiple shorthands
+ have been retained for consistency. Duplications of journal AND shorthand
+ have been removed. One shorthand clash: jas was both Journal of Applied
+ Spectroscopy and Journal of the Atmospheric Sciences; the former has been
+ altered to jasp.
+ - A file shorthnd.ins is included to assist listing the journal shorthands
+
+ - Option yr-com to allow comma before the date.
+ - Option pub-date to put publisher and date in parentheses (Nature style)
+ - Some internal improvements
+
+Refinements added to version 3.82:
+ - Page numbers can come at end before notes
+ - Fix up bug with quoted titles when title missing
+ - Fix up bug that left off extra date labels for plain dates with no brackets
+ or special punctuation
+ - Fix up bug that put punctuation before publishers in paretheses
+ - Add option to allow full names, with only first author reversed
+
+Refinements added to version 3.83:
+ - Edited works can be either Names (eds.), Booktitle
+ or Names, (eds.) Booktitle
+ Previously only the first version was possible. (There are several other
+ possibilities too.)
+ - If commas selected as punctuation between blocks, one can still have a
+ period coming before any file note.
+ - With repeated authors/editors for adjacent references, the repeated names
+ can be replaced by a long dash.
+ - \BIBand made robust, otherwise it does not really work.
+
+Refinements added to version 3.84:
+ - large page numbers can be separated by comma, space, period,
+ as 10,345. No provision for 7 digit numbers
+ - emphasis can also be underlining; bad policy, since underlining belongs
+ to the days of the typewriter, and in LaTeX, \underline command cannot
+ be broken across lines. Loading the ulem package by Donald Arseneau
+ solves this problem.
+ - titles can be in <<guillemots>> (best with T1 encoding, but poor man's
+ OT1 also provided; must have LaTeX2e)
+ - titles of proceedings and collections can be in quotes if article
+ titles in quotes
+ - can add year to journal volume in parentheses as vol(year) and still
+ format year for books differently.
+ - full natbib form of \bibitem resistent against square brackets in names
+ or date.
+
+Refinements added to version 3.85:
+ - add option to allow junior part of name of appear in citations
+ - options for specifying fonts for names: may apply only to the surnames
+ if wished, and not to the entire name. User-defined font commands
+ \bibnamefont, \bibfnamefont, and \citenamefont may be used too,
+ where the names are used as a single argument.
+
+Refinements added to version 3.86:
+ - suppress ISBN number for certain crossrefs
+ - fix bug with limited number of authors when mininum is 6
+ - add option for comma between year and pages
+ - restrict \natexlab to natbib styles
+
+Refinements added to version 3.87:
+ - Limited number of authors can be as many as 99 (previously 6)
+ - Add language field, to switch hyphenation patterns for titles
+ - Add url field for all entries
+ - Add annote field
+ - Months may be suppressed for numerical mode
+ - et~al. is no longer hardwired; dutch.mbs allows variations on et~al.
+
+Refinements added to version 3.88:
+ - Copyright notices conform to LaTeX Project Public Licence
+ - HTML coding can replace the LaTeX pre- and postamble and font commands;
+ intended for Web listings of complete databases; LaTeX special symbol
+ remain; works only if one selects numerical, not author-year citations.
+ - complex coding to convert edition numbers to (multilingual) text and vice
+ versa can be removed, saving considerable memory requirements and
+ possibly preventing memory overflow
+ - by default, number and series for inproceedings and incollection can only
+ be used as "Complete Works" (series only) or "Number 3 in Complete Works"
+ (number and series). With number only, a warning is issued. New option
+ allows number to be a document code number, like REP-01/1998-ab; without
+ series, this number is printed bare, without the word "Number", but if
+ both number and series are present, the default text "Number .. in .." is
+ reinstated.
+ - another option allows the number/series to be prepended to the publisher
+ and/or organization name.
+ - more options to format editors in inproceedings and incollection
+ - option to allow the total number of pages in books to be listed; for
+ this, the pages field must be given for the entry, a field that is
+ normally ignored for books.
+ - book titles may be set in upright typeface (default is italic)
+ - a slash may be used in place of comma or semi-colon between authors
+ - journal names may be preceded by `in' as for incollections
+
+Refinements added to version 3.89:
+ - for use with natbib 7.0:
+ when author/editor empty, the key field is used in place of author,
+ but what is new is the option that the year is then left blank
+ in the \bibitem entry. This allows natbib (7.0) to print only the
+ key without any year punctuation.
+ also optional, if the year itself is missing, it is left blank instead
+ of being set to ????.
+ - fix a bug that caused the citation font to be missing at times
+
+Refinements added to version 4.00:
+ - Entire code reorganized and rationalized (by Arthur Ogawa).
+ - For REVTeX, new fields collaboration, eid, eprint, archive, numpages
+ - Option for tagging all entries in the bibliography with \bibinfo marker.
+ Thus the pages might appear as \bibinfo{pages}{345--350} which prints
+ only the page numbers, but allows other programs to parse the entries.
+ (Contribution by David Carlisle.)
+ - For reversed author names, the junior part can appear either as
+ Smith, Jr., John (previously the only possibility) or
+ Smith, John, Jr.
+ (For some reason, the AGU options that reverse only the leading name in
+ an author list always used this latter form.)
+ - When surnames and first names are in different fonts, the junior part is
+ now in the same font as the first name. Previously, it varied.
+ - When abbreviated months or journal names are to be dotless, only the
+ dots are removed. Previously all non-alphanumeric characters were
+ removed, causing problems with accents in other languages.
+ - When author initials are to be dotless, the dot is also removed from
+ the junior part.
+ - Journal abbreviations in physjour.mbs may be those used in astronomy
+ journals, e.g. ApJ for Astrophysical Journal, (aka Astrophys. J.)
+
+Refinements added to version 4.01
+ - a bug with the bibinfo tag caused titles not be be case-changed; fixed
+ - technical report numbers were not tagged with bibinfo; fixed
+ - option added to let the word `in' be in italics.
+
+Refinements added to version 4.02
+ - some bugs fixed:
+ In: with articles no longer has comma added
+ bold dates work when date and publisher together
+ typo alfph removed
+
+Refinements added to version 4.03
+ - bug fixes
+ - add definition of \natexlab to aux file for harvard styles
+ - add option thtit-x to suppress thesis titles
+ - add option seq-yrr to order by descending years (latest first)
+ - Updates to french.mbs, dansk.mbs
+ - Fix misprint in physjour.mbs
+
+
+Refinements added to version 4.04:
+ - addition of slovene.mbs for Slovenian language.
+ - additional journal in geojour.mbs
+
+Refinement added to version 4.05:
+ - fix all language files for a bug in suppression of page numbers
+ - fix bug in merlin.mbs in inproceedings with pp-last plus dt-beg|dt-end
+
+Refinement added to version 4.06:
+ - options for doubled or trebled dashes for repeated authors
+
+Refinements added to version 4.10
+ - add doi and eid fields
+ Both of these are for electronic journals. The DOI number is a
+ universal reference to the electronic location, more robust than
+ URLs. Electronic journals do not have page numbers, and use a
+ sequence number (called here EID for electronic identifier) to find
+ the printed version. The doi field is optional, the eid will always
+ be included in the bst file. However, it is still optional within
+ any bib file. If present, it appears in place of the page number.
+
+Refinements added to version 4.11
+ - fix up doi output to be official style, no blank between doi: and number
+ - add options ser-vol and ser-ed
+
+Refinements added to version 4.12
+ - add plntx so bbl output will work with Plain TeX (and LaTeX 2.09)
+ (the option nfss must also NOT be given, else font commands are LaTeX2e)
+
+Bug fix version 4.12a
+ - merlin.mbs and all language files needed fixing because the comma between
+ options was inserted in the wrong place for external language files
+
+Refinements added to version 4.13
+ - fix a bug in inbook and incollection that suppressed chapter under
+ certain conditions
+ - add option to put a colon after article and/or book titles
+ - add option to format names as Jones, AB (the comma was
+ previously not possible)
+
+Refinements added to version 4.14
+ - add option to format names as Jones, A.B. (comma, no spaces in initials)
+ - add option to suppress comma before et al in reference list.
+
+Refinements added to version 4.15
+ - add option to allow new type: presentation. This is for conference talks which are
+ not otherwise published. Requires author, title, month, year, organization, address;
+ may also have key (= author number for the speaker, this name is highlighted),
+ type = oral or poster etc
+
+Refinements added to version 4.16
+ - fix minor bug in proceedings, that suppressed number and series under circumstance.
+
+Refinements added to version 4.20
+ - add option to allow citation to have more than one author before et al. added.
+ - add option to allow truncation for more than two, three, four, or five authors.
+
+Refinements added to version 4.21
+ - remove.dots function modified as suggested by Joseph A. Wright [joseph.wright@morningstar2.co.uk]
+ to retain the dot accent \.
+
+Refinements added to version 4.22
+ - extra labels in author-year citations can now handle more than 26 entries of same author and year.
+ It now goes from a..z, aa, ab, .., az, ba ,..., zz. After that, it will crash.
+ Code provided by Joseph A. Wright.
+
+Refinements added to version 4.30
+ - a bug fixed when ordering by label and the author list was truncated to a maximum number.
+ - number of authors in citations can be up to six instead of five.
+ - add option to sort authors by surname only, ignoring initials and first names.
+ - minor bugs repaired
+
+Refinements added to version 4.31
+ - let the options for punctuation before the date (yr-com, yr-col, yr-per) also work with harvard option harnm.
+
+Refinements added to version 4.32
+ - fix bug in proceedings with numerical citations when the numser option NOT selected.
+
+Refinements added to version 4.33
+ - fix a bug that appeared with remove.dots macro.
+ - fix a bug so that pub-xc (comma suppression with publisher date) works for numerical citations too
+
+Nov 18, 2011
+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/custom-bib/shorthnd.ins b/macros/latex/contrib/custom-bib/shorthnd.ins
new file mode 100644
index 0000000000..0d994bebee
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/shorthnd.ins
@@ -0,0 +1,173 @@
+% File: shorthnd.ins
+%% Copyright 1998, 1999 Patrick W. Daly
+% Max-Planck-Institut f\"ur Aeronomie
+% Max-Planck-Str. 2
+% D-37191 Katlenburg-Lindau
+% Germany
+% E-mail: daly@linmpi.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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%
+% \ProvidesFile{shorthnd.ins}[1998/08/17 1.2 (PWD)]
+%
+% PURPOSE: lists the shorthand names for the journals that are prestored
+% in various .mbs files, for combining into customized .bst
+% files (BibTeX bibliography style files)
+%
+% USE: Process this file with TeX or LaTeX; this creates a file named
+% shorthnd.tex
+% which when LaTeXed lists the shorthands and full journal names
+% in the various .mbs files.
+% Requires the longtable package in the tools bundle.
+% Also produces
+% geophys.tex
+% containing only names in geojour.mbs and physjour.mbs
+% which are those supplied with the geophysics journals
+%
+% NOTE: Add your own list of journal shorthnds by adding its name
+% to the list below.
+%
+%<*a&!a>
+\input docstrip
+
+\preamble
+===============================================
+IMPORTANT NOTICE
+See below for the copyright and distribution conditions.
+
+This is a generated file.
+It may be distributed without the source files listed above.
+===============================================
+\endpreamble
+
+% \postamble
+% \endpostamble
+
+\def\MBSopt{} % for full names
+%\def\MBSopt{jabr} % for abbreviated names
+
+\keepsilent
+
+\askforoverwritefalse
+
+\generate{\file{shorthnd.tex}{\from{shorthnd.ins}{head}
+ \from{physjour.mbs}{\MBSopt}
+ \from{geojour.mbs}{\MBSopt}
+ \from{photjour.mbs}{\MBSopt}
+ \from{suppjour.mbs}{\MBSopt}
+ \from{shorthnd.ins}{tail}}
+ \file{geophys.tex}{\from{shorthnd.ins}{head}
+ \from{physjour.mbs}{\MBSopt}
+ \from{geojour.mbs}{\MBSopt}
+ \from{shorthnd.ins}{tail}}
+}
+
+\Msg{************************************}
+\Msg{* Now LaTeX the file shorthnd.tex}
+\Msg{* to obtain a listing of journal}
+\Msg{* shorthand names in the .mbs files.}
+\Msg{* (You must have the longtable package.)}
+\Msg{************************************}
+
+\endbatchfile
+%</a&!a>
+%<*head>
+\documentclass{article}
+\usepackage{longtable}
+
+\def\ACRO{\begingroup\catcode`\M=11\relax\catcode`\"=9\relax\acro}
+\def\acro#1#2{\endgroup\ttfamily#1 & \raggedright #2 \tabularnewline}
+\def\PF#1[#2]{\\\hline\multicolumn{2}{c}{File: \texttt{#1}, version: #2
+ \rule[-.75em]{0pt}{2em}}\\\hline\\[-1ex]}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{1ex}
+
+\pagestyle{myheadings}
+\markright{List of Journal Shorthands}
+\begin{document}
+
+\title
+ {List of the Shorthands for Journal Names in Various \texttt{.mbs} Files}
+
+\author{Patrick W. Daly}
+
+\date{This is part of the \texttt{makebst} or \texttt{custom-bib} bundle}
+
+\maketitle
+
+\newcommand{\btx}{\textsc{Bib}\TeX}
+
+The shorthands here may be used in \btx\ database (\texttt{.bib}) files in
+place of the full journal name. For example, instead of
+\begin{verbatim}
+journal = "Phys. Rev.",
+\end{verbatim}
+it is sufficient to give
+\begin{verbatim}
+journal = pr,
+\end{verbatim}
+The advantage of this is not only the convenience of typing a shorter form,
+but also the automatic switching between the abbreviated (here ``Phys.\
+Rev.'')\ and full forms (``Physical Review'') depending on the bibliographic
+style file. Thus the one database entry is reformatted automatically.
+
+There is a set of standard shorthands for computing science included in the
+original \texttt{plain.bst}, \texttt{abbrv.bst}, \texttt{unsrt.bst}, and
+\texttt{alpha.bst} files. These are built into \texttt{merlin.mbs} and are
+always present in every \texttt{.bst} file generated from it.
+
+Whether or not the shorthand is present in your \texttt{.bst} file depends on
+the inclusion of the proper \texttt{.mbs} source file during its creation with
+the \texttt{makebst} program. Check the heading to the \texttt{.bst} file
+to find out what source files went into its generation.
+
+You may make up your own list of journal names, abbreviated and full, by using
+one of the existing \texttt{.mbs} files as a model. Include its name in
+\texttt{shorthnd.ins} to obtain a listing of its shorthands too.
+
+\newpage
+
+\begingroup
+\centering
+\def\PC#1{\ifx#1\ProvidesFile \let\next=#1\else\let\next=\skipline\fi\next}
+\def\skipline{\begingroup\catcode`\^^M=12 \SKPLNE}
+{\catcode`\^^M=12 \endlinechar=-1 \gdef\SKPLNE#1^^M{\endgroup}}
+\let\ProvidesFile=\PF
+\catcode`\%=\active
+\let%=\PC
+\catcode`\M=0
+\begin{longtable}{lp{6cm}}
+ \PF{merlin.mbs}[(all)]
+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"}
+%</head>
+%<*tail>
+\end{longtable}
+\endgroup
+\end{document}
+%</tail>
diff --git a/macros/latex/contrib/custom-bib/shorthnd.tex b/macros/latex/contrib/custom-bib/shorthnd.tex
new file mode 100644
index 0000000000..0dbe61cdd1
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/shorthnd.tex
@@ -0,0 +1,415 @@
+%%
+%% This is file `shorthnd.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% shorthnd.ins (with options: `head')
+%% physjour.mbs
+%% geojour.mbs
+%% photjour.mbs
+%% suppjour.mbs
+%% shorthnd.ins (with options: `tail')
+%% ===============================================
+%% IMPORTANT NOTICE
+%% See below for the copyright and distribution conditions.
+%%
+%% This is a generated file.
+%% It may be distributed without the source files listed above.
+%% ===============================================
+%% Copyright 1998, 1999 Patrick W. Daly
+%%
+%% 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.
+\documentclass{article}
+\usepackage{longtable}
+
+\def\ACRO{\begingroup\catcode`\M=11\relax\catcode`\"=9\relax\acro}
+\def\acro#1#2{\endgroup\ttfamily#1 & \raggedright #2 \tabularnewline}
+\def\PF#1[#2]{\\\hline\multicolumn{2}{c}{File: \texttt{#1}, version: #2
+ \rule[-.75em]{0pt}{2em}}\\\hline\\[-1ex]}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{1ex}
+
+\pagestyle{myheadings}
+\markright{List of Journal Shorthands}
+\begin{document}
+
+\title
+ {List of the Shorthands for Journal Names in Various \texttt{.mbs} Files}
+
+\author{Patrick W. Daly}
+
+\date{This is part of the \texttt{makebst} or \texttt{custom-bib} bundle}
+
+\maketitle
+
+\newcommand{\btx}{\textsc{Bib}\TeX}
+
+The shorthands here may be used in \btx\ database (\texttt{.bib}) files in
+place of the full journal name. For example, instead of
+\begin{verbatim}
+journal = "Phys. Rev.",
+\end{verbatim}
+it is sufficient to give
+\begin{verbatim}
+journal = pr,
+\end{verbatim}
+The advantage of this is not only the convenience of typing a shorter form,
+but also the automatic switching between the abbreviated (here ``Phys.\
+Rev.'')\ and full forms (``Physical Review'') depending on the bibliographic
+style file. Thus the one database entry is reformatted automatically.
+
+There is a set of standard shorthands for computing science included in the
+original \texttt{plain.bst}, \texttt{abbrv.bst}, \texttt{unsrt.bst}, and
+\texttt{alpha.bst} files. These are built into \texttt{merlin.mbs} and are
+always present in every \texttt{.bst} file generated from it.
+
+Whether or not the shorthand is present in your \texttt{.bst} file depends on
+the inclusion of the proper \texttt{.mbs} source file during its creation with
+the \texttt{makebst} program. Check the heading to the \texttt{.bst} file
+to find out what source files went into its generation.
+
+You may make up your own list of journal names, abbreviated and full, by using
+one of the existing \texttt{.mbs} files as a model. Include its name in
+\texttt{shorthnd.ins} to obtain a listing of its shorthands too.
+
+\newpage
+
+\begingroup
+\centering
+\def\PC#1{\ifx#1\ProvidesFile \let\next=#1\else\let\next=\skipline\fi\next}
+\def\skipline{\begingroup\catcode`\^^M=12 \SKPLNE}
+{\catcode`\^^M=12 \endlinechar=-1 \gdef\SKPLNE#1^^M{\endgroup}}
+\let\ProvidesFile=\PF
+\catcode`\%=\active
+\let%=\PC
+\catcode`\M=0
+\begin{longtable}{lp{6cm}}
+ \PF{merlin.mbs}[(all)]
+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"}
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{physjour.mbs}[2002/01/14 2.2 (PWD)]
+MACRO {aa}{"Astronomy and Astrophysics"}
+MACRO {aasup}{"Astronomy and Astrophysics, Supplement Series"}
+MACRO {aj}{"Astronomical Journal"}
+MACRO {aph} {"Acta Physica"}
+MACRO {advp} {"Advances in Physics"}
+MACRO {ajp} {"American Journal of Physics"}
+MACRO {ajm} {"American Journal of Mathematics"}
+MACRO {amsci} {"American Scientist"}
+MACRO {anofd} {"Annals of Fluid Dynamics"}
+MACRO {am} {"Annals of Mathematics"}
+MACRO {ap} {"Annals of Physics"}
+MACRO {adp} {"Annalen der Physik"}
+MACRO {ao} {"Applied Optics"}
+MACRO {apl} {"Applied Physics Letters"}
+MACRO {app} {"Astroparticle Physics"}
+MACRO {apj} {"Astrophysical Journal"}
+MACRO {apjsup} {"Astrophysical Journal Supplement"}
+MACRO {apss} {"Astrophysics and Space Science"}
+MACRO {araa} {"Annual Review of Astronomy and Astrophysics"}
+MACRO {baas} {"Bulletin of the American Astronomical Society"}
+MACRO {baps} {"Bulletin of the American Physical Society"}
+MACRO {cmp} {"Communications in Mathematical Physics"}
+MACRO {cpam} {"Communications on Pure and Applied Mathematics"}
+MACRO {cppcf} {"Comments on Plasma Physics and Controlled Fusion"}
+MACRO {cpc} {"Computer Physics Communications"}
+MACRO {cqg} {"Classical and Quantum Gravity"}
+MACRO {cra} {"Comptes Rendus des S{\'e}ances de l'Acad{\'e}mie des Sciences A"}
+MACRO {fed} {"Fusion Engineering and Design"}
+MACRO {ft} {"Fusion Technology"}
+MACRO {grg} {"General Relativity and Gravitation"}
+MACRO {ieeens} {"IEEE Transactions on Nuclear Science"}
+MACRO {ieeeps} {"IEEE Transactions on Plasma Science"}
+MACRO {ijimw} {"International Journal of Infrared and Millimeter Waves"}
+MACRO {ip} {"Infrared Physics"}
+MACRO {irp} {"Infrared Physics"}
+MACRO {jap} {"Journal of Applied Physics"}
+MACRO {jasa} {"Journal of the Acoustical Society of America"}
+MACRO {jcp} {"Journal of Computational Physics"}
+MACRO {jetp} {"Soviet Physics--JETP"}
+MACRO {jfe} {"Journal of Fusion Energy"}
+MACRO {jfm} {"Journal of Fluid Mechanics"}
+MACRO {jmp} {"Journal of Mathematical Physics"}
+MACRO {jne} {"Journal of Nuclear Energy"}
+MACRO {jnec} {"Journal of Nuclear Energy, Part C: Plasma Physics, Accelerators, Thermonuclear Research"}
+MACRO {jnm} {"Journal of Nuclear Materials"}
+MACRO {jpc} {"Journal of Physical Chemistry"}
+MACRO {jpp} {"Journal of Plasma Physics"}
+MACRO {jpsj} {"Journal of the Physical Society of Japan"}
+MACRO {jsi} {"Journal of Scientific Instruments"}
+MACRO {jvst} {"Journal of Vacuum Science and Technology"}
+MACRO {nat} {"Nature"}
+MACRO {nature} {"Nature"}
+MACRO {nedf} {"Nuclear Engineering and Design/Fusion"}
+MACRO {nf} {"Nuclear Fusion"}
+MACRO {nim} {"Nuclear Instruments and Methods"}
+MACRO {nimpr} {"Nuclear Instruments and Methods in Physics Research"}
+MACRO {np} {"Nuclear Physics"}
+MACRO {npb} {"Nuclear Physics B"}
+MACRO {nt/f} {"Nuclear Technology/Fusion"}
+MACRO {npbpc} {"Nuclear Physics B (Proceedings Supplements)"}
+MACRO {inc} {"Il Nuovo Cimento"}
+MACRO {nc} {"Nuovo Cimento"}
+MACRO {pf} {"Physics of Fluids"}
+MACRO {pfa} {"Physics of Fluids A: Fluid Dynamics"}
+MACRO {pfb} {"Physics of Fluids B: Plasma Physics"}
+MACRO {pl} {"Physics Letters"}
+MACRO {pla} {"Physics Letters A"}
+MACRO {plb} {"Physics Letters B"}
+MACRO {prep} {"Physics Reports"}
+MACRO {pnas} {"Proceedings of the National Academy of Sciences of the USA"}
+MACRO {pp} {"Physics of Plasmas"}
+MACRO {ppcf} {"Plasma Physics and Controlled Fusion"}
+MACRO {phitrsl} {"Philosophical Transactions of the Royal Society of London"}
+MACRO {prl} {"Physical Review Letters"}
+MACRO {pr} {"Physical Review"}
+MACRO {physrev} {"Physical Review"}
+MACRO {pra} {"Physical Review A"}
+MACRO {prb} {"Physical Review B"}
+MACRO {prc} {"Physical Review C"}
+MACRO {prd} {"Physical Review D"}
+MACRO {pre} {"Physical Review E"}
+MACRO {ps} {"Physica Scripta"}
+MACRO {procrsl} {"Proceedings of the Royal Society of London"}
+MACRO {rmp} {"Reviews of Modern Physics"}
+MACRO {rsi} {"Review of Scientific Instruments"}
+MACRO {science} {"Science"}
+MACRO {sciam} {"Scientific American"}
+MACRO {sam} {"Studies in Applied Mathematics"}
+MACRO {sjpp} {"Soviet Journal of Plasma Physics"}
+MACRO {spd} {"Soviet Physics--Doklady"}
+MACRO {sptp} {"Soviet Physics--Technical Physics"}
+MACRO {spu} {"Soviet Physics--Uspeki"}
+MACRO {st} {"Sky and Telescope"}
+ % End module: physjour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{geojour.mbs}[2002/07/10 2.0h (PWD)]
+MACRO {aisr} {"Advances in Space Research"}
+MACRO {ag} {"Annales Geophysic\ae"}
+MACRO {anigeo} {"Annali di Geofisica"}
+MACRO {angl} {"Annals of Glaciology"}
+MACRO {andmet} {"Annalen der Meteorologie"}
+MACRO {andgeo} {"Annales de Geophysique"}
+MACRO {andphy} {"Annales de Physique"}
+MACRO {afmgb} {"Archiv f\^^b{u}r Meteorologie, Geophysik und Bioklimatologie"}
+MACRO {ass}{"Astrophysics and Space Science"}
+MACRO {atph} {"Atm\'osphera"}
+MACRO {aao} {"Atmosphere-Ocean"}
+MACRO {atenv} {"Atmospheric Environment"}
+MACRO {aujag} {"Australian Journal of Agricultural Research"}
+MACRO {aumet} {"Australian Meteorological Magazine"}
+MACRO {blmet} {"Boundary-Layer Meteorology"}
+MACRO {bams} {"Bulletin of the American Meteorological Society"}
+MACRO {cch} {"Climatic Change"}
+MACRO {cdyn} {"Climate Dynamics"}
+MACRO {cbul} {"Climatological Bulletin"}
+MACRO {cap} {"Contributions to Atmospheric Physics"}
+MACRO {dsr} {"Deep-Sea Research"}
+MACRO {dhz} {"Deutsche Hydrographische Zeitschrift"}
+MACRO {dao} {"Dynamics of Atmospheres and Oceans"}
+MACRO {eco} {"Ecology"}
+MACRO {empl}{"Earth, Moon and Planets"}
+MACRO {envres} {"Environmental Research"}
+MACRO {envst} {"Environmental Science and Technology"}
+MACRO {ecms} {"Estuarine and Coastal Marine Science"}
+MACRO {expa}{"Experimental Astronomy"}
+MACRO {geoint} {"Geofisica Internationale"}
+MACRO {geopub} {"Geofysiske Publikasjoner"}
+MACRO {geogeo} {"Geologiya i Geofizika"}
+MACRO {gafd} {"Geophysical and Astrophysical Fluid Dynamics"}
+MACRO {gfd} {"Geophysical Fluid Dynamics"}
+MACRO {geomag} {"Geophysical Magazine"}
+MACRO {georl} {"Geophysical Research Letters"}
+MACRO {grl} {"Geophysical Research Letters"}
+MACRO {ga} {"Geophysica"}
+MACRO {gs} {"Geophysics"}
+MACRO {ieeetap} {"IEEE Transactions on Antennas and Propagation"}
+MACRO {ijawp} {"International Journal of Air and Water Pollution"}
+MACRO {ijc} {"International Journal of Climatology"}
+MACRO {ijrs} {"International Journal of Remote Sensing"}
+MACRO {jam} {"Journal of Applied Meteorology"}
+MACRO {jaot} {"Journal of Atmospheric and Oceanic Technology"}
+MACRO {jatp} {"Journal of Atmospheric and Terrestrial Physics"}
+MACRO {jastp} {"Journal of Atmospheric and Solar-Terrestrial Physics"}
+MACRO {jce} {"Journal of Climate"}
+MACRO {jcam} {"Journal of Climate and Applied Meteorology"}
+MACRO {jcm} {"Journal of Climate Meteorology"}
+MACRO {jcy} {"journal of Climatology"}
+MACRO {jgr} {"Journal of Geophysical Research"}
+MACRO {jga} {"Journal of Glaciology"}
+MACRO {jh} {"Journal of Hydrology"}
+MACRO {jmr} {"Journal of Marine Research"}
+MACRO {jmrj} {"Journal of Meteorological Research, Japan"}
+MACRO {jm} {"Journal of Meteorology"}
+MACRO {jpo} {"Journal of Physical Oceanography"}
+MACRO {jra} {"Journal de Recherches Atmospheriques"}
+MACRO {jaes} {"Journal of the Aeronautical Sciences"}
+MACRO {japca} {"Journal of the Air Pollution Control Association"}
+MACRO {jas} {"Journal of the Atmospheric Sciences"}
+MACRO {jmts} {"Journal of the Marine Technology Society"}
+MACRO {jmsj} {"Journal of Meteorological Society of Japan"}
+MACRO {josj} {"Journal of the Oceanographical Society of Japan"}
+MACRO {jwm} {"Journal of Weather Modification"}
+MACRO {lao} {"Limnology and Oceanography"}
+MACRO {mwl} {"Mariners Weather Log"}
+MACRO {mau} {"Mausam"}
+MACRO {meteor} {"``Meteor'' Forschungsergebnisse"}
+MACRO {map} {"Meteorology and Atmospheric Physics"}
+MACRO {metmag} {"Meteorological Magazine"}
+MACRO {metmon} {"Meteorological Monographs"}
+MACRO {metrun} {"Meteorologische Rundschau"}
+MACRO {metzeit} {"Meteorologische Zeitschrift"}
+MACRO {metgid} {"Meteorologiya i Gidrologiya"}
+MACRO {mwr} {"Monthly Weather Review"}
+MACRO {nwd} {"National Weather Digest"}
+MACRO {nzjmfr} {"New Zealand Journal of Marine and Freshwater Research"}
+MACRO {npg} {"Nonlinear Processes in Geophysics"}
+MACRO {om} {"Oceanography and Meteorology"}
+MACRO {ocac} {"Oceanologica Acta"}
+MACRO {oceanus} {"Oceanus"}
+MACRO {paleoc} {"Paleoceanography"}
+MACRO {pce} {"Physics and Chemistry of the Earth"}
+MACRO {pmg} {"Papers in Meteorology and Geophysics"}
+MACRO {ppom} {"Papers in Physical Oceanography and Meteorology"}
+MACRO {physzeit} {"Physikalische Zeitschrift"}
+MACRO {pps} {"Planetary and Space Science"}
+MACRO {pss} {"Planetary and Space Science"}
+MACRO {pag} {"Pure and Applied Geophysics"}
+MACRO {qjrms} {"Quarterly Journal of the Royal Meteorological Society"}
+MACRO {quatres} {"Quaternary Research"}
+MACRO {rsci} {"Radio Science"}
+MACRO {rse} {"Remote Sensing of the Environment"}
+MACRO {rgeo} {"Reviews of Geophysics"}
+MACRO {rgsp} {"Reviews of Geophysics and Space Physics"}
+MACRO {rdgeo} {"Revista de Geofisica"}
+MACRO {revmeta} {"Revista Meteorologica"}
+MACRO {sgp}{"Surveys in Geophysics"}
+MACRO {sp} {"Solar Phys."}
+MACRO {ssr} {"Space Science Review"}
+MACRO {tellus} {"Tellus"}
+MACRO {tac} {"Theoretical and Applied Climatology"}
+MACRO {tagu} {"Transactions, American Geophysical Union (EOS)"}
+MACRO {wrr} {"Water Resources Research"}
+MACRO {weather} {"Weather"}
+MACRO {wafc} {"Weather and Forecasting"}
+MACRO {ww} {"Weatherwise"}
+MACRO {wmob} {"World Meteorological Organization Bulletin"}
+MACRO {zeitmet} {"Zeitschrift f\^^b{u}r Meteorologie"}
+ % End module: geojour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)]
+
+MACRO {appopt} {"Applied Optics"}
+MACRO {bell} {"Bell Systems Technical Journal"}
+MACRO {ell} {"Electronics Letters"}
+MACRO {jasp} {"Journal of Applied Spectroscopy"}
+MACRO {jqe} {"IEEE Journal of Quantum Electronics"}
+MACRO {jlwt} {"Journal of Lightwave Technology"}
+MACRO {jmo} {"Journal of Modern Optics"}
+MACRO {josa} {"Journal of the Optical Society of America"}
+MACRO {josaa} {"Journal of the Optical Society of America~A"}
+MACRO {josab} {"Journal of the Optical Society of America~B"}
+MACRO {jdp} {"Journal de Physique"}
+MACRO {oc} {"Optics Communications"}
+MACRO {ol} {"Optics Letters"}
+MACRO {phtl} {"IEEE Photonics Technology Letters"}
+MACRO {pspie} {"Proceedings of the Society for Photo-Optical Instruments Engineers"}
+MACRO {sse} {"Solid-State Electronics"}
+MACRO {sjot} {"Soviet Journal of Optical Technology"}
+MACRO {sjqe} {"Soviet Journal of Quantum Electronics"}
+MACRO {sleb} {"Soviet Physics--Lebedev Institute Reports"}
+MACRO {stph} {"Soviet Physics--Technical Physics"}
+MACRO {stphl} {"Soviet Technical Physics Letters"}
+MACRO {vr} {"Vision Research"}
+MACRO {zph} {"Zeitschrift f\^^b{u}r Physik"}
+MACRO {zphb} {"Zeitschrift f\^^b{u}r Physik~B"}
+MACRO {zphd} {"Zeitschrift f\^^b{u}r Physik~D"}
+
+MACRO {CLEO} {"Conf. on Lasers and Electro-Optics"}
+MACRO {ASSL} {"Advanced Solid State Lasers"}
+MACRO {OSA} {"Optical Society of America"}
+ % End module: photjour.mbs
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{suppjour.mbs}[1999/02/24 1.1]
+MACRO {cjp} {"Czechoslovak Journal of Physics"}
+MACRO {el} {"Europhysics Letters"}
+MACRO {en} {"Europhysics News"}
+MACRO {fujitsustj} {"FUJITSU Scientific {\&} Technical Journal"}
+MACRO {ieeeed} {"IEEE Transactions on Electron Devices"}
+MACRO {ieeeim} {"IEEE Transactions on Instrumentation and Measurement"}
+MACRO {ieeejqe} {"IEEE Journal of Quantum Electronics"}
+MACRO {ieeem} {"IEEE Transactions on Magnetics"}
+MACRO {ieeeptl} {"IEEE Photonics Technology Letters"}
+MACRO {ieeeuffc} {"IEEE Transactions on Ultrasonics, Ferroelectrics and Frequency Control"}
+MACRO {jem} {"Journal of Electronic Materials"}
+MACRO {jes} {"Journal of the Electrochemical Society"}
+MACRO {jetplett} {"JETP Letters"}
+MACRO {jjap} {"Japanese Journal of Applied Physics"}
+MACRO {jpha} {"Journal of Physics A: Mathematical and General"}
+MACRO {jphb} {"Journal of Physics B: Atomic, Molecular and Optical Physics"}
+MACRO {jphbold} {"Journal of Physics B: Atomic and Molecular Physics"}
+MACRO {jphc} {"Journal of Physics: Condensed Matter"}
+MACRO {jphcold} {"Journal of Physics C: Solid State Physics"}
+MACRO {jphd} {"Journal of Physics D: Applied Physics"}
+MACRO {jvsta} {"Journal of Vacuum Science and Technology A"}
+MACRO {jvstb} {"Journal of Vacuum Science and Technology B"}
+MACRO {me} {"Microelectronic Engineering"}
+MACRO {necrd} {"NEC Research {\&} Development"}
+MACRO {pa} {"Physica A"}
+MACRO {pb} {"Physica B"}
+MACRO {pc} {"Physica C"}
+MACRO {pd} {"Physica D"}
+MACRO {procieee} {"Proceedings of the IEEE"}
+MACRO {procspie} {"Proceedings of the SPIE"}
+MACRO {pssa} {"Physica Status Solidi A"}
+MACRO {pssb} {"Physica Status Solidi B"}
+MACRO {rpp} {"Reports on Progress in Physics"}
+MACRO {sm} {"Synthetic Metals"}
+MACRO {sost} {"Solid State Technology"}
+MACRO {ss} {"Surface Science"}
+MACRO {ssc} {"Solid State Communications"}
+MACRO {sst} {"Semiconductor Science and Technology"}
+MACRO {suplatt} {"Superlattices and Microstructures"}
+MACRO {sust} {"Superconductor Science and Technology"}
+MACRO {znat} {"Zeitschrift f\^^b{u}r Naturforschung"}
+ % End module: suppjour.mbs
+%% Copyright 1998, 1999 Patrick W. Daly
+%%
+%% 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.
+\end{longtable}
+\endgroup
+\end{document}
+\endinput
+%%
+%% End of file `shorthnd.tex'.
diff --git a/macros/latex/contrib/custom-bib/slovene.mbs b/macros/latex/contrib/custom-bib/slovene.mbs
new file mode 100644
index 0000000000..854f540667
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/slovene.mbs
@@ -0,0 +1,311 @@
+%\iffalse THIS IS A META COMMENT
+% File: slovene.mbs
+% Copyright 2002 Primo\v z Peterlin
+% Univerza v Ljubljani
+% Medicinska fakulteta
+% In\v stitut za biofiziko
+% Lipi\v ceva 2
+% SI-1000 Ljubljana
+% Slovenia
+% E-mail: primoz.peterlin@biofiz.mf.uni-lj.si
+%
+% From templates by 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: SLOVENE
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{slovene.mbs}[2003/11/06 4.2 (PP/PWD)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{slovene.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{2002 Aug 29}{Initial version}
+% \changes{4.0a}{2002 Oct 18}{Add number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{P. Peterlin}{Slovenian Bibliographies}
+%
+% \title{{\bfseries Slovene Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Primo\v z Peterlin}
+%
+% \GetFileInfo{slovene.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Slovene\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for SLOVENE}
+\wr{\spsp\spsp slovene,\pc: Slovene language}
+
+
+\mes{^^JABBREVIATE WORD `STRANI':}
+\optdef{*}{}{`Stran(i)'}{(no abbreviation)}
+\optdef{a}{pp}{`Strani abbreviated}{as str.}
+\optdef{x}{ppx}{`Strani omitted}{}
+\getans
+
+\mes{^^JOTHER ABBREVIATIONS:}
+\optdef{*}{}{No abbreviations}{of zvezek, izdaja, poglavje}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+
+\mes{^^JEDITION NUMBERS:}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as prva, druga, tretja, etc}
+\optdef{n}{ord}{Numerical editions}{as 1., 2., 3., etc}
+\getans
+
+\mes{^^JALTERNATIVE FOR PHD THESIS:}
+\optdef{*}{sl-phd}{PhD as `Doktorsko delo'}{}
+\optdef{d}{}{PhD as `Disertacija'}{}
+\getans
+
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is SLOVENE
+FUNCTION {bbl.and}
+{ "in"}
+
+FUNCTION {bbl.etal}
+{ "in~sod." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "Uredniki" }
+%<ed>{ "ur." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "Urednik" }
+%<ed>{ "ur." }
+
+FUNCTION {bbl.edby}
+{ "uredil" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "izdaja" }
+%<abr>{ "izd." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "zvezek" }
+%<abr>{ "zv." }
+
+FUNCTION {bbl.of}
+{ "od" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "\v{s}tevilka" }
+%<abr>{ "\v{s}t." }
+
+FUNCTION {bbl.nr}
+{ "\v{s}t." }
+
+FUNCTION {bbl.in}
+{ "v" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "strani" }
+%<pp>{ "str." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "stran" }
+%<pp>{ "str." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.chapter}
+%<!abr>{ "poglavje" }
+%<abr>{ "pogl." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "{Tehni\v cno poro\v cilo}" }
+%<abr>{ "{Tehn.\ por.}" }
+
+FUNCTION {bbl.mthesis}
+{ "{Magistrsko delo}" }
+
+FUNCTION {bbl.phdthesis}
+%<sl-phd>{ "{Doktorsko delo}" }
+%<!sl-phd>{ "Disertacija" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "prva" }
+%<ord>{ "1." }
+
+FUNCTION {bbl.second}
+%<!ord>{ "druga" }
+%<ord>{ "2." }
+
+FUNCTION {bbl.third}
+%<!ord>{ "tretja" }
+%<ord>{ "3." }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "\v{c}etrta" }
+%<ord>{ "4." }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "peta" }
+%<ord>{ "5." }
+
+FUNCTION {bbl.th}
+{ "." }
+
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"januar"}
+
+MACRO {feb} {"februar"}
+
+MACRO {mar} {"marec"}
+
+MACRO {apr} {"april"}
+
+MACRO {may} {"maj"}
+
+MACRO {jun} {"junij"}
+
+MACRO {jul} {"julij"}
+
+MACRO {aug} {"avgust"}
+
+MACRO {sep} {"september"}
+
+MACRO {oct} {"oktober"}
+
+MACRO {nov} {"november"}
+
+MACRO {dec} {"december"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"jan."}
+
+MACRO {feb} {"feb."}
+
+MACRO {mar} {"mar."}
+
+MACRO {apr} {"apr."}
+
+MACRO {may} {"maj"}
+
+MACRO {jun} {"jun."}
+
+MACRO {jul} {"jul."}
+
+MACRO {aug} {"avg."}
+
+MACRO {sep} {"sep."}
+
+MACRO {oct} {"okt."}
+
+MACRO {nov} {"nov."}
+
+MACRO {dec} {"dec."}
+
+%</abr>
+%</!options&!driver>
+ % End module: slovene.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/spanish.mbs b/macros/latex/contrib/custom-bib/spanish.mbs
new file mode 100644
index 0000000000..920ed4da62
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/spanish.mbs
@@ -0,0 +1,317 @@
+%\iffalse THIS IS A META COMMENT
+% File: spanish.mbs
+% Copyright 1995-1999 Patrick W Daly
+% Max-Planck-Institut f\"ur Sonnensystemforschung
+% Max-Planck-Str. 2
+% D-37191 Katlenburg-Lindau
+% Germany
+% E-mail: daly@mps.mpg.de
+%
+% Copyright 1995 Tom\'as Bautista
+% Divisi\'on de CAD del Centro de Microelectr\'onica Aplicada
+% Campus Universitario de Tafira, pab.\ A
+% E-35017 Las Palmas de Gran Canaria
+% Canary Islands
+% E-mail: bautista@cma.ulpgc.es
+%
+% 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: SPANISH
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+%\fi
+ %-------------------------------------------------------------------
+ % Begin module:
+ % \ProvidesFile{spanish.mbs}[2003/11/06 4.2 (PWD/TB)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{spanish.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1995 June 01}{Initial version}
+% \changes{1.1}{1998 Aug 17}{Add \texttt{bbl.etal}}
+% \changes{1.2}{1999 Feb 1}{Add option \texttt{xedn}}
+% \changes{1.2}{1999 Feb 24}{Update copyright notice}
+% \changes{1.2a}{1999 May 20}{Fix menu text slightly}
+% \changes{4.0}{1999 Oct 11}{For merlin 4.0}
+% \changes{4.0a}{2002 Oct 18}{Fix bug in page number suppression}
+% \changes{4.2}{2003 Nov 6}{Fix comma separator, consistent with \texttt{makebst} 4.1}
+%
+% \pagestyle{myheadings}
+% \markboth{T. Bautista}{Spanish Bibliographies}
+%
+% \title{{\bfseries Spanish Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly and Tom\'as Bautista}
+%
+% \GetFileInfo{spanish.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Spanish\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for SPANISH}
+\wr{\spsp\spsp spanish,\pc: Spanish language}
+
+
+\beginoptiongroup{ABBREVIATE WORD `PAGINAS':}{}
+\optdef{*}{}{`P\string\'agina(s)'}{(no abbreviation)}
+\optdef{a}{pp}{`P\string\'agina' abbreviated}{as p\string\'ag.}
+\optdef{x}{ppx}{`P\string\'agina' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `EDITOR':}{}
+\optdef{*}{}{`Editor(es)'}{(no abbreviation)}
+\optdef{a}{ed}{`Editor' abbreviated}{as Ed.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of Tomo, \string Edici\string\'on, Cap\string\'{\string\i}tulo}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as primera, segunda, tercera, etc}
+\optdef{n}{ord}{Numerical editions}{as 1a, 2a, 3a, etc}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is SPANISH
+FUNCTION {bbl.and}
+{ "y"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "editores" }
+%<ed>{ "eds." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "editor" }
+%<ed>{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "editado por" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "edici\'on" }
+%<abr>{ "ed\raise1ex\hbox{\underbar{\scriptsize \'on}}." }
+
+FUNCTION {bbl.volume}
+{ "tomo" }
+
+FUNCTION {bbl.of}
+{ "de" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "n\'umero" }
+%<abr>{ "n\raise1ex\hbox{\underbar{\scriptsize o}}" }
+
+FUNCTION {bbl.nr}
+{ "n\raise1ex\hbox{\underbar{\scriptsize o}}" }
+
+FUNCTION {bbl.in}
+{ "en" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "p\'aginas" }
+%<pp>{ "p\'ags." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "p\'agina" }
+%<pp>{ "p\'ag." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "p\'aginas" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "cap\'{\i}tulo" }
+%<abr>{ "cap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Informe T\'ecnico" }
+%<abr>{ "Inf.\ T\'ec." }
+
+FUNCTION {bbl.mthesis}
+{ "Proyecto Fin de Carrera" }
+
+FUNCTION {bbl.phdthesis}
+{ "Tesis Doctoral" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "primera" }
+%<ord>{ "1\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+FUNCTION {bbl.second}
+%<!ord>{ "segunda" }
+%<ord>{ "2\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+FUNCTION {bbl.third}
+%<!ord>{ "tercera" }
+%<ord>{ "3\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "cuarta" }
+%<ord>{ "4\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "quinta" }
+%<ord>{ "5\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+FUNCTION {bbl.th}
+{ "\raise1ex\hbox{\underbar{\scriptsize a}}" }
+
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"enero"}
+
+MACRO {feb} {"febrero"}
+
+MACRO {mar} {"marzo"}
+
+MACRO {apr} {"abril"}
+
+MACRO {may} {"mayo"}
+
+MACRO {jun} {"junio"}
+
+MACRO {jul} {"julio"}
+
+MACRO {aug} {"agosto"}
+
+MACRO {sep} {"septiembre"}
+
+MACRO {oct} {"octubre"}
+
+MACRO {nov} {"noviembre"}
+
+MACRO {dec} {"diciembre"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"ene."}
+
+MACRO {feb} {"feb."}
+
+MACRO {mar} {"mar."}
+
+MACRO {apr} {"abr."}
+
+MACRO {may} {"mayo"}
+
+MACRO {jun} {"jun."}
+
+MACRO {jul} {"jul."}
+
+MACRO {aug} {"ago."}
+
+MACRO {sep} {"sep."}
+
+MACRO {oct} {"oct."}
+
+MACRO {nov} {"nov."}
+
+MACRO {dec} {"dic."}
+
+%</abr>
+%</!options&!driver>
+ % End module: spanish.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/suppjour.mbs b/macros/latex/contrib/custom-bib/suppjour.mbs
new file mode 100644
index 0000000000..df3045f7fb
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/suppjour.mbs
@@ -0,0 +1,231 @@
+%\iffalse THIS IS A META COMMENT
+% File: suppjour.mbs
+% Copyright 1998, 1999 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Journal Definition File for supplementary journals
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{suppjour.mbs}[1999/02/24 1.1]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{suppjour.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{1998 Mar 12}{Initial contributed version}
+% \changes{1.1}{1999 Feb 24}{Update copyright notice}
+%
+% \pagestyle{myheadings}
+% \markboth{M. Bl\"ocker}{Supplementary Journal Names}
+%
+% \title{{\bfseries Supplementary Journal Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Martin Bl\"ocker}
+%
+% \GetFileInfo{suppjour.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+%
+% This file adds a list of preprogrammed supplementary journal names to
+% bibliographic style files, in both full and abbreviated versions.
+% These defined journal names will be added to those in the main master
+% bibliography style file.
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains support for
+% external definition files.
+% %
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options>|
+% \dots\ |%</!options>| in order to exclude it if \dtx{} is used to
+% extract only the menu information.
+%
+% A journal-names files should contain at most only one option, \texttt{jabr}.
+% This is because \texttt{merlin} version~3.5 can now handle several
+% journal-name files, but does not look into them for the options, but
+% rather asks for \texttt{jabr} from the main file. For compatibility with
+% older versions, the option menu must be kept here.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JSUPPLEMENTARY JOURNAL NAMES:}
+\optdef{*}{}{Full supplementary journal names}{}
+\optdef{a}{jabr}{Abbreviate supplementary names}{for journals}
+\getans
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options>
+%<*jabr>
+MACRO {cjp} {"Czech. J. Phys."}
+MACRO {el} {"Europhys. Lett."}
+MACRO {en} {"Europhys. News"}
+MACRO {fujitsustj} {"FUJITSU Sci. Tech. J."}
+MACRO {ieeeed} {"IEEE Trans. Electron Devices"}
+MACRO {ieeeim} {"IEEE Trans. Instrum. Meas."}
+MACRO {ieeejqe} {"IEEE J. Quantum Electron."}
+MACRO {ieeem} {"IEEE Trans. Magn."}
+MACRO {ieeeptl} {"IEEE Photonic Technol. Lett."}
+MACRO {ieeeuffc} {"IEEE Trans. Ultrason., Ferroelect., Freq. Cont."}
+MACRO {jem} {"J. Electron. Mater."}
+MACRO {jes} {"J. Electrochem. Soc."}
+MACRO {jetplett} {"JETP Lett."}
+MACRO {jjap} {"Japan. J. Appl. Phys."}
+MACRO {jpha} {"J. Phys. A: Math. Gen."}
+MACRO {jphb} {"J. Phys. B: At. Mol. Opt. Phys."}
+MACRO {jphbold} {"J. Phys. B: At. Mol. Phys."}
+MACRO {jphc} {"J. Phys.: Condens. Matter"}
+MACRO {jphcold} {"J. Phys. C: Solid State Phys."}
+MACRO {jphd} {"J. Phys. D: Appl. Phys."}
+MACRO {jvsta} {"J. Vac. Sci. Technol. A"}
+MACRO {jvstb} {"J. Vac. Sci. Technol. B"}
+MACRO {me} {"Microelectron. Eng."}
+MACRO {necrd} {"NEC Res.{\&} Develop."}
+MACRO {pa} {"Physica A"}
+MACRO {pb} {"Physica B"}
+MACRO {pc} {"Physica C"}
+MACRO {pd} {"Physica D"}
+MACRO {procieee} {"Proc. IEEE"}
+MACRO {procspie} {"Proc. SPIE"}
+MACRO {pssa} {"Phys. Stat. Sol. A"}
+MACRO {pssb} {"Phys. Stat. Sol. B"}
+MACRO {rpp} {"Rep. Progr. Phys."}
+MACRO {sm} {"Synthet. Metal"}
+MACRO {sost} {"Solid State Technol."}
+MACRO {ss} {"Surf. Sci."}
+MACRO {ssc} {"Solid State Commun."}
+MACRO {sst} {"Semicond. Sci. Technol."}
+MACRO {suplatt} {"Superlatt. Microstr."}
+MACRO {sust} {"Supercond. Sci. Technol."}
+MACRO {znat} {"Z. Naturforsch."}
+%</jabr>
+%<*!jabr>
+MACRO {cjp} {"Czechoslovak Journal of Physics"}
+MACRO {el} {"Europhysics Letters"}
+MACRO {en} {"Europhysics News"}
+MACRO {fujitsustj} {"FUJITSU Scientific {\&} Technical Journal"}
+MACRO {ieeeed} {"IEEE Transactions on Electron Devices"}
+MACRO {ieeeim} {"IEEE Transactions on Instrumentation and Measurement"}
+MACRO {ieeejqe} {"IEEE Journal of Quantum Electronics"}
+MACRO {ieeem} {"IEEE Transactions on Magnetics"}
+MACRO {ieeeptl} {"IEEE Photonics Technology Letters"}
+MACRO {ieeeuffc} {"IEEE Transactions on Ultrasonics, Ferroelectrics and Frequency Control"}
+MACRO {jem} {"Journal of Electronic Materials"}
+MACRO {jes} {"Journal of the Electrochemical Society"}
+MACRO {jetplett} {"JETP Letters"}
+MACRO {jjap} {"Japanese Journal of Applied Physics"}
+MACRO {jpha} {"Journal of Physics A: Mathematical and General"}
+MACRO {jphb} {"Journal of Physics B: Atomic, Molecular and Optical Physics"}
+MACRO {jphbold} {"Journal of Physics B: Atomic and Molecular Physics"}
+MACRO {jphc} {"Journal of Physics: Condensed Matter"}
+MACRO {jphcold} {"Journal of Physics C: Solid State Physics"}
+MACRO {jphd} {"Journal of Physics D: Applied Physics"}
+MACRO {jvsta} {"Journal of Vacuum Science and Technology A"}
+MACRO {jvstb} {"Journal of Vacuum Science and Technology B"}
+MACRO {me} {"Microelectronic Engineering"}
+MACRO {necrd} {"NEC Research {\&} Development"}
+MACRO {pa} {"Physica A"}
+MACRO {pb} {"Physica B"}
+MACRO {pc} {"Physica C"}
+MACRO {pd} {"Physica D"}
+MACRO {procieee} {"Proceedings of the IEEE"}
+MACRO {procspie} {"Proceedings of the SPIE"}
+MACRO {pssa} {"Physica Status Solidi A"}
+MACRO {pssb} {"Physica Status Solidi B"}
+MACRO {rpp} {"Reports on Progress in Physics"}
+MACRO {sm} {"Synthetic Metals"}
+MACRO {sost} {"Solid State Technology"}
+MACRO {ss} {"Surface Science"}
+MACRO {ssc} {"Solid State Communications"}
+MACRO {sst} {"Semiconductor Science and Technology"}
+MACRO {suplatt} {"Superlattices and Microstructures"}
+MACRO {sust} {"Superconductor Science and Technology"}
+MACRO {znat} {"Zeitschrift f\^^b{u}r Naturforschung"}
+%</!jabr>
+%</!options>
+ % End module: suppjour.mbs
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/custom-bib/svenska.mbs b/macros/latex/contrib/custom-bib/svenska.mbs
new file mode 100644
index 0000000000..1720b4dd2e
--- /dev/null
+++ b/macros/latex/contrib/custom-bib/svenska.mbs
@@ -0,0 +1,304 @@
+%\iffalse THIS IS A META COMMENT
+% File: svenska.mbs
+% Copyright 1995-1999 Patrick W Daly
+% Max-Planck-Institut f\"ur Sonnensystemforschung
+% Max-Planck-Str. 2
+% D-37191 Katlenburg-Lindau
+% Germany
+% E-mail: daly@mps.mpg.de
+%
+% Swedish translations by Erik \"{O}sthols
+%
+% 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.
+%
+% It is part of the custom-bib collection,
+% a contribution to the LaTeX2e system.
+%====================================================================
+% A Language Definition File: SWEDISH
+% to be included with other master bibliography style files
+%--------------------------------------------------------------------
+% (See version and date in the \ProvidesFile command below)
+%--------------------------------------------------------------------
+% This file is self-documenting: simply LaTeX it!
+%====================================================================
+%
+ %-------------------------------------------------------------------
+ % Begin module:
+%\fi
+ % \ProvidesFile{svenska.mbs}[2008/08/15 (EO)]
+%\iffalse
+%<*a&!a>
+% The following ensures that the driver part is not seen by makebst
+% The driver part must not contain any \end other than \end{document} !
+\ifx\endoptions\undefined\let\tempx=\relax\else
+ \long\def\tempx#1\end#2{}\fi\tempx
+%</a&!a>
+%<*driver>
+ \NeedsTeXFormat{LaTeX2e}%
+ \documentclass[a4paper,10pt,twoside]{article}%
+ \usepackage{doc}%
+ \raggedbottom
+ \CodelineNumbered
+ \RecordChanges
+ % Comment out next line to print coding
+ \OnlyDescription
+ \setlength{\oddsidemargin}{0.5\paperwidth}
+ \addtolength{\oddsidemargin}{-0.5\textwidth}
+ \addtolength{\oddsidemargin}{-1in}
+ \setlength{\evensidemargin}{\oddsidemargin}
+
+\begin{document}
+ \DocInput{svenska.mbs}
+\end{document}
+%</driver>
+% END OF META COMMENT \fi
+% \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 \~}
+%
+% \setcounter{StandardModuleDepth}{1}
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+%
+% \changes{1.0}{2008 Aug 15}{First version, converted from dansk.mbs}
+%
+% \markboth{Erik {\"{O}}sthols}{Swedish bibliographies}
+%
+% \title{{\bfseries Swedish Language Definition File}\\
+% for master bibliographic style files}
+%
+% \author{Patrick W. Daly}
+%
+% \GetFileInfo{svenska.mbs}
+% \date{This paper describes file \texttt{\filename},\\
+% version \fileversion{} from \filedate}
+%
+% \maketitle
+%
+% \MakeShortVerb{\|}
+%
+% \parskip=1ex \parindent=0pt
+%
+% \newcommand{\btx}{{\sc Bib}\TeX}
+% \newcommand{\dtx}{\textsf{docstrip}}
+%
+% \section{Introduction}
+% This file is to be used as a language definition file with master
+% bibliographic files. The language it defines is
+% \begin{quote}\bfseries Svenska\end{quote}
+%
+% This is not a self-sufficient \texttt{.mbs} file, but rather may
+% be used together with one that contains language support via
+% external definition files.
+%
+% See the documentation for \texttt{makebst} for formatting details.
+%
+% \section{The Menu Information}
+%
+% All the menu information is nested between \dtx{} guard options
+% |%<*options>| \dots\ |%</options>|, and the last command is
+% |\endoptions|. The rest of the file is nested between |%<*!options&!driver>|
+% \dots\ |%</!options&!driver>| in order to exclude it if \dtx{} is used to
+% extract only the menu information or the documentation driver.
+%
+% \begin{macrocode}
+%<*options>
+\mes{^^JOptions for SVENSKA}
+\wr{\spsp\spsp svenska,\pc: Swedish language}
+
+\beginoptiongroup{ABBREVIATE WORD `PAGES':}{}
+\optdef{*}{}{`Sidan'}{(no abbreviation)}
+\optdef{a}{pp}{`Sidan' abbreviated}{as s. or ss.}
+\optdef{x}{ppx}{`Sidan' omitted}{}
+\getans
+\endoptiongroup
+\beginoptiongroup{ABBREVIATE WORD `EDITORS':}{}
+\optdef{*}{}{`Redakt\string\"or(er)'}{(no abbreviation)}
+\optdef{a}{ed}{`Redakt\string\"or' abbreviated}{as red.}
+\getans
+\endoptiongroup
+\beginoptiongroup{OTHER ABBREVIATIONS:}{}
+\optdef{*}{}{No abbreviations}{of volym, utg\string\a{a}va, kapitel, o.s.v.}
+\optdef{a}{abr}{Abbreviations}{of such words}
+\getans
+\endoptiongroup
+\beginoptiongroup{EDITION NUMBERS:}{}
+\optdef{*}{xedn}{Editions as in database}{saving much processing memory}
+\optdef{w}{}{Write out editions}{as f\string\"orsta, andra, tredje, o.s.v.}
+\optdef{n}{ord}{Numerical editions}{as 1:a, 2:a, 3:e, osv}
+\getans
+\endoptiongroup
+\endoptions
+%</options>
+% \end{macrocode}
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{The Coding}
+% \begin{macrocode}
+%<*!options&!driver>
+
+ % The language selected here is SWEDISH
+
+FUNCTION {bbl.and}
+{ "och"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+%<!ed>{ "redakt{\^^b{o}}rer" }
+%<ed>{ "red." }
+
+FUNCTION {bbl.editor}
+%<!ed>{ "redakt{\^^b{o}}r" }
+%<ed>{ "red." }
+
+FUNCTION {bbl.edby}
+{ "redigerad av" }
+
+FUNCTION {bbl.edition}
+%<!abr>{ "utg{\a{a}}va" }
+%<abr>{ "utg." }
+
+FUNCTION {bbl.volume}
+%<!abr>{ "volym" }
+%<abr>{ "vol." }
+
+FUNCTION {bbl.of}
+{ "av" }
+
+FUNCTION {bbl.number}
+%<!abr>{ "nummer" }
+%<abr>{ "nr." }
+
+FUNCTION {bbl.nr}
+{ "nr." }
+
+FUNCTION {bbl.in}
+{ "i" }
+
+FUNCTION {bbl.pages}
+%<!pp&!ppx>{ "sidorna" }
+%<pp>{ "ss." }
+%<!pp&ppx>{ "" }
+
+FUNCTION {bbl.page}
+%<!pp&!ppx>{ "sidan" }
+%<pp>{ "s." }
+%<!pp&ppx>{ "" }
+
+%<*revdata>
+FUNCTION {bbl.eidpp}
+{ "sidor" }
+
+%</revdata>
+FUNCTION {bbl.chapter}
+%<!abr>{ "kapitel" }
+%<abr>{ "kap." }
+
+FUNCTION {bbl.techrep}
+%<!abr>{ "Teknisk rapport" }
+%<abr>{ "Tekn. rapp." }
+
+FUNCTION {bbl.mthesis}
+{ "Examensarbete" }
+
+FUNCTION {bbl.phdthesis}
+{ "Doktorsavhandling" }
+
+%<*!xedn>
+FUNCTION {bbl.first}
+%<!ord>{ "F{\^^b{o}}rsta" }
+%<ord>{ "1:a" }
+
+FUNCTION {bbl.second}
+%<!ord>{ "Andra" }
+%<ord>{ "2." }
+
+FUNCTION {bbl.third}
+%<!ord>{ "Tredje" }
+%<ord>{ "3." }
+
+FUNCTION {bbl.fourth}
+%<!ord>{ "Fj{\^^b{a}}rde" }
+%<ord>{ "4:e" }
+
+FUNCTION {bbl.fifth}
+%<!ord>{ "Femte" }
+%<ord>{ "5:e" }
+
+FUNCTION {bbl.th}
+{ ":e" }
+%</!xedn>
+%<*!abr>
+MACRO {jan} {"januari"}
+
+MACRO {feb} {"februari"}
+
+MACRO {mar} {"mars"}
+
+MACRO {apr} {"april"}
+
+MACRO {may} {"maj"}
+
+MACRO {jun} {"juni"}
+
+MACRO {jul} {"juli"}
+
+MACRO {aug} {"augusti"}
+
+MACRO {sep} {"september"}
+
+MACRO {oct} {"oktober"}
+
+MACRO {nov} {"november"}
+
+MACRO {dec} {"december"}
+
+%</!abr>
+%<*abr>
+MACRO {jan} {"jan."}
+
+MACRO {feb} {"feb."}
+
+MACRO {mar} {"mar."}
+
+MACRO {apr} {"apr."}
+
+MACRO {may} {"maj"}
+
+MACRO {jun} {"jun."}
+
+MACRO {jul} {"jul."}
+
+MACRO {aug} {"aug."}
+
+MACRO {sep} {"sep."}
+
+MACRO {oct} {"okt."}
+
+MACRO {nov} {"nov."}
+
+MACRO {dec} {"dec."}
+
+%</abr>
+%</!options&!driver>
+ % End module: svenska.mbs
+% \end{macrocode}
+% \Finale