mirror of
https://asciireactor.com/otho/phy-4660.git
synced 2024-11-24 22:25:07 +00:00
1831 lines
42 KiB
Plaintext
1831 lines
42 KiB
Plaintext
%%+
|
|
%% Name:
|
|
%% mnras.bst
|
|
|
|
%% Purpose:
|
|
%% BibTeX Bibliography style file for MNRAS
|
|
|
|
%% Invocation:
|
|
%% latex <latexfile>
|
|
%% bibtex <latexfile>
|
|
%% latex <latexfile>
|
|
%% latex <latexfile>
|
|
|
|
%% Description:
|
|
%% Provides a bibliography style that will allow bibtex to be
|
|
%% used when writing papers for MNRAS. This allows references
|
|
%% to be inserted automatically.
|
|
|
|
%% Notes:
|
|
%% This file should be used in conjunction with the Monthly Notices
|
|
%% LaTeX2e class file (mnras.cls).
|
|
%%
|
|
%% Hyperlinks:
|
|
%% To make the eprint and doi bibtex fields hyperlinks, you need
|
|
%% to have \usepackage{hyperref} in your latex preamble.
|
|
|
|
%% Authors:
|
|
%% John P. Sleath (MRAO)
|
|
%% Tim Jenness (MRAO/JAC)
|
|
%% Norman Gray (Glasgow University) <norman@astro.gla.ac.uk>
|
|
%% Oren Patashnik
|
|
%% Susan King
|
|
%% Sake J. Hogeveen
|
|
%% Philip Hall
|
|
%% Simeon Bird
|
|
|
|
%% Bugs:
|
|
%% The formatting has been compared to the MN style, and is
|
|
%% believed to be compatible with it. However this comparison has
|
|
%% (for obvious reasons) been done most carefully for articles, so
|
|
%% there may be deviations from it for other entry types.
|
|
|
|
%% History:
|
|
%% 1988 (Oren Patashnik and Susan King)
|
|
%% Apalike.bst derived from the "alpha.bst" style.
|
|
%% 1990 (Sake J. Hogeveen)
|
|
%% Astron.bst derived from apalike.bst
|
|
%% Summer 1995 (JPS/TJ):
|
|
%% Extensively modified from astron.bst
|
|
%% 19 Jul 1995 (JPS/TJ):
|
|
%% First release (version 1.1b)
|
|
%% 02 May 2001 (NG):
|
|
%% Limit the author lists to eight people.
|
|
%% 19 Jun 2001 (TJ):
|
|
%% Fix inproceedings
|
|
%% 30 Oct 2001 (NG):
|
|
%% Adjust author-limiting to conform to MN style (version 1.2)
|
|
%% 22 Sep 2012 (Philip Hall):
|
|
%% Remove comma before et al when many authors.
|
|
%% 01 July 2013 (Simeon Bird):
|
|
%% Ported Antony Lewis' hyperlinked arxiv entry additions across.
|
|
%% Originally modified for hyperlinked arxiv eprints by Antony Lewis April 2006
|
|
%% August 2013 (NG):
|
|
%% Fixed a/b/c... year suffixes -- these now appear in the
|
|
%% correct order.
|
|
%% February 2014 (TJ):
|
|
%% Add MACROs for MN journal abbreviations
|
|
%% May 2014 (NG):
|
|
%% Shorten some functions, so that bibtex's 'single function
|
|
%% space' parameter doesn't have to be above 100.
|
|
%% Sep 2014 (Jared M. Gabor):
|
|
%% Enabled ArXiv e-print identifier to be printed for articles that
|
|
%% are pre-prints only (and have "ArXiv e-print" in the journal field).
|
|
%% Still some problems with the use of commas. Only 1 comma will appear
|
|
%% between the year and "arXiv..." for such preprints, but for e.g.
|
|
%% conference precedings there may be no comma at all.
|
|
%% 09 March 2015 (TJ):
|
|
%% At the request of Keith Smith this file has been renamed to be mnras.bst
|
|
%% to match the new naming convention for the MNRAS class file.
|
|
%%
|
|
%% License:
|
|
%% This work may be distributed and/or modified under the
|
|
%% conditions of the LaTeX Project Public License, either version 1.3
|
|
%% of this license or (at your option) any later version.
|
|
%% The latest version of this license is in
|
|
%% http://www.latex-project.org/lppl.txt
|
|
%% and version 1.3 or later is part of all distributions of LaTeX
|
|
%% version 2005/12/01 or later.
|
|
%%
|
|
%% This work has the LPPL maintenance status `maintained'.
|
|
%%
|
|
%% The Current Maintainers of this work are T. Jenness
|
|
%% and Norman Gray <norman@astro.gla.ac.uk>
|
|
%%
|
|
%% This work consists of the file mnras.bst
|
|
|
|
%% This file is maintained on Github: https://github.com/timj/mn2e-bst/
|
|
%%-
|
|
|
|
ENTRY
|
|
{ address
|
|
doi
|
|
eprint
|
|
archiveprefix % used by ADS
|
|
author
|
|
booktitle
|
|
chapter
|
|
edition
|
|
editor
|
|
howpublished
|
|
institution
|
|
journal
|
|
key
|
|
% month not used in apalike
|
|
note
|
|
number
|
|
organization
|
|
pages
|
|
publisher
|
|
school
|
|
series
|
|
title
|
|
type
|
|
volume
|
|
year
|
|
adsurl % for MN style
|
|
url
|
|
}
|
|
{}
|
|
{ label extra.label sort.label presort.key }
|
|
|
|
|
|
INTEGERS { output.state before.all mid.sentence after.sentence after.block }
|
|
|
|
FUNCTION {init.state.consts}
|
|
{ #0 'before.all :=
|
|
#1 'mid.sentence :=
|
|
#2 'after.sentence :=
|
|
#3 'after.block :=
|
|
}
|
|
|
|
% If threeauthorvar is set to #1 in initialise.mn2e, then the bibitem for a
|
|
% three-author reference is generated using a \mniiiauthor command.
|
|
% This command should be defined in the .cls file as follows:
|
|
%
|
|
% \def\mniiiauthor#1#2#3{%
|
|
% \@ifundefined{mniiiauth@#1}
|
|
% {\global\expandafter\let\csname mniiiauth@#1\endcsname\null #2}
|
|
% {#3}}
|
|
%
|
|
% The effect of this is that the first time that \mniiiauthor{X}{a}{b}
|
|
% is evaluated, it expands to 'a', and it thereafter expands to 'b'.
|
|
% This implements the MN style guide stipulation that "For three
|
|
% authors, give all three names at first mention, e.g. (Brown, Jones &
|
|
% Smith 1994), but use first author et al. (in roman, not italic)
|
|
% thereafter, e.g. (Brown et al. 1994)."
|
|
%
|
|
% The above definition consumes a command for each such author. It's
|
|
% surely possible to avoid this (with some constructions involving
|
|
% {\\#1}; see Appendix D cleverness), but that would verge on the
|
|
% arcane, and not be really worth it.
|
|
INTEGERS { maxauthors threeauthorvar }
|
|
|
|
FUNCTION {initialise.mn2e}
|
|
{
|
|
#8 'maxauthors :=
|
|
#0 'threeauthorvar :=
|
|
}
|
|
|
|
STRINGS { s t fmt sep }
|
|
|
|
FUNCTION {output.nonnull}
|
|
{ 's :=
|
|
output.state mid.sentence =
|
|
{ ", " * write$ }
|
|
{ output.state after.block =
|
|
{ ". " * write$
|
|
newline$
|
|
% "\newblock " write$
|
|
}
|
|
{ output.state before.all =
|
|
'write$
|
|
{ ", " * write$ }
|
|
if$
|
|
}
|
|
if$
|
|
mid.sentence 'output.state :=
|
|
}
|
|
if$
|
|
s
|
|
}
|
|
|
|
% output.nonnull.extra is like output.nonnull, except that the thing
|
|
% we output is 'extra' to a block, so if we're in the after.block
|
|
% state, we append it rather than starting a new block.
|
|
FUNCTION {output.nonnull.extra}
|
|
{ 's :=
|
|
output.state mid.sentence =
|
|
{ ", " * write$ }
|
|
{ output.state after.block =
|
|
{ ", " * write$
|
|
newline$
|
|
"\newblock " write$
|
|
}
|
|
{ output.state before.all =
|
|
'write$
|
|
{ ", " * write$ }
|
|
if$
|
|
}
|
|
if$
|
|
mid.sentence 'output.state :=
|
|
}
|
|
if$
|
|
s
|
|
}
|
|
|
|
FUNCTION {output.nonnull.nocomma}
|
|
{'s :=
|
|
output.state mid.sentence =
|
|
{ write$ }
|
|
{ output.state after.block =
|
|
{ ". " * write$
|
|
newline$
|
|
% "\newblock " write$
|
|
}
|
|
{ output.state before.all =
|
|
'write$
|
|
{ ", " * write$ }
|
|
if$
|
|
}
|
|
if$
|
|
mid.sentence 'output.state :=
|
|
}
|
|
if$
|
|
s
|
|
}
|
|
|
|
FUNCTION {output}
|
|
{ duplicate$ empty$
|
|
'pop$
|
|
'output.nonnull
|
|
if$
|
|
}
|
|
|
|
FUNCTION {output.extra}
|
|
{ duplicate$ empty$
|
|
'pop$
|
|
'output.nonnull.extra
|
|
if$
|
|
}
|
|
|
|
FUNCTION {output.check}
|
|
{ 't :=
|
|
duplicate$ empty$
|
|
{ pop$ "empty " t * " in " * cite$ * warning$ }
|
|
'output.nonnull
|
|
if$
|
|
}
|
|
|
|
FUNCTION {output.check.nocomma}
|
|
{ 't :=
|
|
duplicate$ empty$
|
|
'pop$ % or warn with { pop$ "empty " t * " in " * cite$ * warning$ }
|
|
'output.nonnull.nocomma
|
|
if$
|
|
}
|
|
|
|
FUNCTION {output.check.extra}
|
|
{ 't :=
|
|
duplicate$ empty$
|
|
{ pop$ "empty " t * " in " * cite$ * warning$ }
|
|
'output.nonnull.extra
|
|
if$
|
|
}
|
|
|
|
FUNCTION {output.year.check}
|
|
{ year empty$
|
|
{ "empty year in " cite$ * warning$ }
|
|
{ write$
|
|
" " year * extra.label *
|
|
mid.sentence 'output.state :=
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {output.bibitem}
|
|
{ newline$
|
|
"\bibitem[" write$
|
|
label write$
|
|
"]{" write$
|
|
cite$ write$
|
|
"}" write$
|
|
% debugging: define eg \def\logsortkey#1{{[\tiny #1]}} to see this
|
|
%"\logsortkey{" presort.key * "/" * sort.key$ * "}" * write$
|
|
newline$
|
|
""
|
|
before.all 'output.state :=
|
|
}
|
|
|
|
FUNCTION {fin.entry}
|
|
{ write$
|
|
newline$
|
|
}
|
|
|
|
FUNCTION {new.block}
|
|
{ output.state before.all =
|
|
'skip$
|
|
{ after.block 'output.state := }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {new.sentence}
|
|
{ output.state after.block =
|
|
'skip$
|
|
{ output.state before.all =
|
|
'skip$
|
|
{ after.sentence 'output.state := }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {not}
|
|
{ { #0 }
|
|
{ #1 }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {and}
|
|
{ 'skip$
|
|
{ pop$ #0 }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {or}
|
|
{ { pop$ #1 }
|
|
'skip$
|
|
if$
|
|
}
|
|
|
|
FUNCTION {new.block.checkb}
|
|
{ empty$
|
|
swap$ empty$
|
|
and
|
|
'skip$
|
|
'new.block
|
|
if$
|
|
}
|
|
|
|
FUNCTION {field.or.null}
|
|
{ duplicate$ empty$
|
|
{ pop$ "" }
|
|
'skip$
|
|
if$
|
|
}
|
|
|
|
FUNCTION {boldface}
|
|
{ duplicate$ empty$
|
|
{ pop$ "" }
|
|
{ "{ " swap$ * "}" * }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {emphasize}
|
|
{ duplicate$ empty$
|
|
{ pop$ "" }
|
|
{ "{ " swap$ * "}" * }
|
|
if$
|
|
}
|
|
|
|
% Make hyperref links.
|
|
% The LaTeX hyperref package supports a macro \href{URL}{text}
|
|
%
|
|
% On call, the stack contains
|
|
% href-url
|
|
% link-text
|
|
FUNCTION {make.href.hyperref}
|
|
{
|
|
"\href {" swap$ * "} {" * swap$ * "}" *
|
|
}
|
|
|
|
INTEGERS { nameptr namesleft numnames }
|
|
|
|
% Helper functions for print.all.names: print the last or 'others' name.
|
|
%
|
|
% On call, the stack contains
|
|
% a formatted name,
|
|
% and the built-up string of names so far.
|
|
FUNCTION {print.all.names.plain.trailer}
|
|
{ duplicate$ "others" =
|
|
{ pop$ " et~al.," * }
|
|
{ " " swap$ * * }
|
|
if$
|
|
}
|
|
|
|
% as above
|
|
FUNCTION {print.all.names.label.trailer}
|
|
{ duplicate$ "others" =
|
|
{ pop$ " et~al." * }
|
|
{ " \& " swap$ * * }
|
|
if$
|
|
}
|
|
|
|
% Print out the complete author list
|
|
% (because we have maxauthors or fewer).
|
|
%
|
|
% On call, the stack contains
|
|
% a format string (for format.name$),
|
|
% a name-separator string (such as ", "),
|
|
% an author or editor field,
|
|
% and one of the 'trailer' functions above.
|
|
FUNCTION {print.all.names}
|
|
{ 'fmt :=
|
|
'sep :=
|
|
's :=
|
|
s num.names$ 'namesleft :=
|
|
namesleft #2 < % we're not going to need the trailer function, so discard it
|
|
'pop$
|
|
'skip$
|
|
if$
|
|
#1 'nameptr :=
|
|
{ namesleft #0 > }
|
|
{ s nameptr fmt format.name$ 't := % last name first
|
|
nameptr #1 >
|
|
{ namesleft #1 >
|
|
{ sep * t * }
|
|
{ % namesleft == 1: this is the last name.
|
|
% Invoke the trailer function.
|
|
s num.names$ #2 > % _why_ do we add this extra space for long lists?
|
|
{ " " * }
|
|
'skip$
|
|
if$
|
|
% This next line is a bit clever.
|
|
%
|
|
% We start with a stack
|
|
% string containing the list of names so far
|
|
% trailer function
|
|
%
|
|
% Rearrange the stack so that we have
|
|
% 'skip
|
|
% trailer function
|
|
% #1
|
|
% t
|
|
% names so far
|
|
% then call if$. This is a rather indirect way of
|
|
% invoking the trailer function on the stack
|
|
% t
|
|
% names so far
|
|
%
|
|
% Ta dahhhh!
|
|
swap$ t swap$ #1 swap$ 'skip$ if$
|
|
}
|
|
if$
|
|
}
|
|
't
|
|
if$
|
|
nameptr #1 + 'nameptr :=
|
|
namesleft #1 - 'namesleft :=
|
|
}
|
|
while$
|
|
}
|
|
|
|
% Name formatting. According to the MN instructions for authors, `In
|
|
% the references list [...] List all authors if eight or fewer,
|
|
% otherwise et al.'. This means (according to a ruling from the MN
|
|
% editors) that if there are eight or more authors, they should be
|
|
% listed as "first one plus et al."
|
|
%
|
|
% On call, the stack contains
|
|
% an author or editor field.
|
|
FUNCTION {format.names}
|
|
{ duplicate$ num.names$ maxauthors >
|
|
{ % Too many authors -- format as First author et al.
|
|
#1 "{vv }{ll}{ jj}{ f., }" format.name$ % last name first
|
|
" et~al.," *
|
|
}
|
|
{ 'print.all.names.plain.trailer swap$ " " "{vv }{ll}{ jj}{ f., }" print.all.names }
|
|
if$
|
|
}
|
|
|
|
% Format an author/editor field, for inclusion in a label
|
|
% (ie, "Surname, Surname \& Surname")
|
|
%
|
|
% On call, the stack contains an author/editor field.
|
|
FUNCTION {format.names.label}
|
|
{ duplicate$ num.names$ maxauthors >
|
|
{ % Too many authors -- format as First author et al.
|
|
#1 "{vv }{ll}{ jj}" format.name$ % last name first
|
|
" et~al.," *
|
|
}
|
|
{ 'print.all.names.label.trailer swap$ ", " "{vv }{ll}" print.all.names }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.authors}
|
|
{ author empty$
|
|
{ "" }
|
|
{ author format.names }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.key} % this function is just for apalike
|
|
{ empty$
|
|
{ key field.or.null }
|
|
{ "" }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.editors}
|
|
{ editor empty$
|
|
{ "" }
|
|
{ editor format.names
|
|
editor num.names$ #1 >
|
|
{ " eds," * }
|
|
{ " ed." * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.editors.extra}
|
|
{ editor empty$
|
|
{ "" }
|
|
{ editor format.names
|
|
editor num.names$ #1 >
|
|
{ " eds" * }
|
|
{ " ed." * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.title}
|
|
{ title empty$
|
|
{ "" }
|
|
{ title "t" change.case$ }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.eprint}
|
|
{ eprint empty$
|
|
{ "" }
|
|
{ " (\mn@eprint {"
|
|
archiveprefix empty$
|
|
{ "" }
|
|
{ archiveprefix }
|
|
if$
|
|
* "} {" * eprint * "})" * }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.doi}
|
|
{ doi empty$
|
|
{ "" }
|
|
{ ", \mn@doi{" * doi * "}" }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {n.dashify}
|
|
{ 't :=
|
|
""
|
|
{ t empty$ not }
|
|
{ t #1 #1 substring$ "-" =
|
|
{ t #1 #2 substring$ "--" = not
|
|
{ "--" *
|
|
t #2 global.max$ substring$ 't :=
|
|
}
|
|
{ { t #1 #1 substring$ "-" = }
|
|
{ "-" *
|
|
t #2 global.max$ substring$ 't :=
|
|
}
|
|
while$
|
|
}
|
|
if$
|
|
}
|
|
{ t #1 #1 substring$ *
|
|
t #2 global.max$ substring$ 't :=
|
|
}
|
|
if$
|
|
}
|
|
while$
|
|
}
|
|
|
|
FUNCTION {first.page.number}
|
|
{ 't :=
|
|
""
|
|
{ t "" =
|
|
{ #0 }
|
|
{ t #1 #1 substring$ "-" = not }
|
|
if$
|
|
}
|
|
{ t #1 #1 substring$ *
|
|
t #2 global.max$ substring$ 't :=
|
|
}
|
|
while$
|
|
}
|
|
|
|
FUNCTION {format.btitle}
|
|
{ title
|
|
}
|
|
|
|
FUNCTION {tie.or.space.connect}
|
|
{ duplicate$ text.length$ #5 <
|
|
{ "~" }
|
|
{ " " }
|
|
if$
|
|
swap$ * *
|
|
}
|
|
|
|
FUNCTION {either.or.check}
|
|
{ empty$
|
|
'pop$
|
|
{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.bvolume}
|
|
{ volume empty$
|
|
{ "" }
|
|
{ "" series tie.or.space.connect
|
|
volume empty$
|
|
'skip$
|
|
{ " Vol. " * volume * }
|
|
if$
|
|
"volume and number" number either.or.check
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.number.series}
|
|
{ volume empty$
|
|
{ number empty$
|
|
{ series field.or.null }
|
|
{ output.state mid.sentence =
|
|
{ "No." }
|
|
{ "No." }
|
|
if$
|
|
number tie.or.space.connect
|
|
series empty$
|
|
{ "there's a number but no series in " cite$ * warning$ }
|
|
{ " in " * series * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
{ "" }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.edition}
|
|
{ edition empty$
|
|
{ "" }
|
|
{ output.state mid.sentence =
|
|
{ edition "l" change.case$ " edn" * }
|
|
{ edition "t" change.case$ " edn" * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
INTEGERS { multiresult }
|
|
|
|
FUNCTION {multi.page.check}
|
|
{ 't :=
|
|
#0 'multiresult :=
|
|
{ multiresult not
|
|
t empty$ not
|
|
and
|
|
}
|
|
{ t #1 #1 substring$
|
|
duplicate$ "-" =
|
|
swap$ duplicate$ "," =
|
|
swap$ "+" =
|
|
or or
|
|
{ #1 'multiresult := }
|
|
{ t #2 global.max$ substring$ 't := }
|
|
if$
|
|
}
|
|
while$
|
|
multiresult
|
|
}
|
|
|
|
FUNCTION {format.pages}
|
|
{ pages empty$
|
|
{ "" }
|
|
{ pages multi.page.check
|
|
{ "pp" pages n.dashify tie.or.space.connect }
|
|
{ "p." pages tie.or.space.connect }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.page}
|
|
{ pages empty$
|
|
{ "" }
|
|
{ "p.~" pages first.page.number * }
|
|
if$
|
|
}
|
|
|
|
% If a paper is available as a preprint only, ADS will call the
|
|
% journal "ArXiv e-print". In this case MN suggests the journal
|
|
% should be called "preprint".
|
|
FUNCTION {format.journal.doi}
|
|
{ doi empty$
|
|
{ journal "ArXiv e-prints" =
|
|
{ "preprint" }
|
|
{ journal }
|
|
if$
|
|
}
|
|
{ journal "ArXiv e-prints" =
|
|
{ "preprint" }
|
|
{ "\mn@doi [" journal * "] {" * doi * "}" * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.vol.num.pages}
|
|
{ volume field.or.null
|
|
number empty$
|
|
'skip$
|
|
{ "(" number * ")" * *
|
|
volume empty$
|
|
{ "there's a number but no volume in " cite$ * warning$ }
|
|
'skip$
|
|
if$
|
|
}
|
|
if$
|
|
pages empty$
|
|
'skip$
|
|
{ duplicate$ empty$
|
|
{ pop$ format.pages }
|
|
{ ", " * pages n.dashify * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.vol.page}
|
|
{ volume field.or.null
|
|
pages empty$
|
|
'skip$
|
|
{ duplicate$ empty$
|
|
{ pop$ format.pages }
|
|
{ ", " * pages first.page.number * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.vol.num.page}
|
|
{ volume field.or.null
|
|
number empty$
|
|
'skip$
|
|
{ "(" number * ")" * *
|
|
volume empty$
|
|
{ "there's a number but no volume in " cite$ * warning$ }
|
|
'skip$
|
|
if$
|
|
}
|
|
if$
|
|
pages empty$
|
|
'skip$
|
|
{ duplicate$ empty$
|
|
{ pop$ format.pages }
|
|
{ ", " * pages first.page.number * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
FUNCTION {format.chapter.pages}
|
|
{ chapter empty$
|
|
'format.pages
|
|
{ type empty$
|
|
{ "Chapt." }
|
|
{ type "l" change.case$ }
|
|
if$
|
|
chapter tie.or.space.connect
|
|
pages empty$
|
|
'skip$
|
|
{ ", " * format.pages * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.in.ed.booktitle}
|
|
{ booktitle empty$
|
|
{ "" }
|
|
{ editor empty$
|
|
{ "in " booktitle * }
|
|
{ format.bvolume empty$
|
|
{ "in " format.editors.extra * ", " * booktitle * }
|
|
{ "in " format.editors.extra * ", " * format.bvolume * ", " * booktitle * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.in.ed.collect}
|
|
{ booktitle empty$
|
|
{ "" }
|
|
{ editor empty$
|
|
{ "in " }
|
|
{ "in " format.editors.extra * ", " * }
|
|
if$
|
|
series empty$
|
|
{ skip$ }
|
|
{ series * }
|
|
if$
|
|
volume empty$
|
|
{ number empty$
|
|
{ }
|
|
{ output.state mid.sentence =
|
|
{ "No." }
|
|
{ "No." }
|
|
if$
|
|
number tie.or.space.connect *
|
|
}
|
|
if$
|
|
}
|
|
{
|
|
output.state mid.sentence =
|
|
{ ", " * }
|
|
{ skip$ }
|
|
if$
|
|
"Vol." volume tie.or.space.connect *
|
|
}
|
|
if$
|
|
output.state mid.sentence =
|
|
{ ", " * }
|
|
{ skip$ }
|
|
if$
|
|
booktitle *
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.thesis.type}
|
|
{ type empty$
|
|
'skip$
|
|
{ pop$
|
|
type "t" change.case$
|
|
}
|
|
if$
|
|
}
|
|
|
|
% the \url{} macro is supplied by hyperref
|
|
FUNCTION {format.url}
|
|
{
|
|
url empty$
|
|
{ "" }
|
|
{ "\url {" url * "}" * }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.tr.number}
|
|
{
|
|
type empty$
|
|
{ "Technical Report" }
|
|
{ type }
|
|
if$
|
|
number empty$
|
|
{ "t" change.case$ }
|
|
{ number tie.or.space.connect }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {format.article.crossref}
|
|
{ "in" % this is for apalike
|
|
" \cite{" * crossref * "}" *
|
|
}
|
|
|
|
FUNCTION {format.book.crossref}
|
|
{ volume empty$
|
|
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
|
|
"in "
|
|
}
|
|
{ "Vol." volume tie.or.space.connect
|
|
" of " *
|
|
}
|
|
if$
|
|
"\cite{" * crossref * "}" * % this is for apalike
|
|
}
|
|
|
|
FUNCTION {format.incoll.inproc.crossref}
|
|
{ "in" % this is for apalike
|
|
" \cite{" * crossref * "}" *
|
|
}
|
|
|
|
FUNCTION {article}
|
|
{ output.bibitem
|
|
format.authors "author" output.check
|
|
author format.key output % special for
|
|
output.year.check % apalike
|
|
% MN style does not display eprints or DOIs on published articles,
|
|
% but does link the journal name to any available DOI.
|
|
crossref missing$
|
|
{ format.journal.doi "journal" output.check.extra
|
|
% ...and links volume and page information to any available adsurl
|
|
adsurl empty$
|
|
{ format.vol.page }
|
|
{ format.vol.page adsurl make.href.hyperref }
|
|
if$
|
|
output.extra
|
|
}
|
|
{ format.article.crossref output.nonnull
|
|
format.page output
|
|
}
|
|
if$
|
|
|
|
% If the "journal" field is the arXiv, then print out the arXiv identifier
|
|
journal "ArXiv e-prints" =
|
|
{ format.eprint "eprint" output.check.nocomma }
|
|
{ }
|
|
if$
|
|
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {book}
|
|
{ output.bibitem
|
|
author empty$
|
|
{ format.editors "author and editor" output.check
|
|
editor format.key output
|
|
}
|
|
{ format.authors output.nonnull
|
|
crossref missing$
|
|
{ "author and editor" editor either.or.check }
|
|
'skip$
|
|
if$
|
|
}
|
|
if$
|
|
output.year.check % special for apalike
|
|
format.btitle "title" output.check
|
|
format.edition output
|
|
new.block
|
|
crossref missing$
|
|
{ format.bvolume output
|
|
format.number.series output
|
|
new.sentence
|
|
publisher "publisher" output.check
|
|
address output
|
|
}
|
|
{format.book.crossref output.nonnull}
|
|
if$
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {booklet}
|
|
{ output.bibitem
|
|
format.authors output
|
|
author format.key output % special for
|
|
output.year.check % apalike
|
|
format.btitle "title" output.check
|
|
howpublished output
|
|
address output
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {inbook}
|
|
{ output.bibitem
|
|
author empty$
|
|
{ format.editors "author and editor" output.check
|
|
editor format.key output
|
|
}
|
|
{ format.authors output.nonnull
|
|
crossref missing$
|
|
{ "author and editor" editor either.or.check }
|
|
'skip$
|
|
if$
|
|
}
|
|
if$
|
|
output.year.check % special for apalike
|
|
format.btitle "title" output.check
|
|
format.edition output
|
|
new.block
|
|
crossref missing$
|
|
{
|
|
new.sentence
|
|
publisher "publisher" output.check
|
|
address output
|
|
format.pages output
|
|
}
|
|
{ format.chapter.pages "chapter and pages" output.check
|
|
format.book.crossref output.nonnull
|
|
}
|
|
if$
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {incollection}
|
|
{ output.bibitem
|
|
format.authors "author" output.check
|
|
author format.key output % special for
|
|
output.year.check % apalike
|
|
crossref missing$
|
|
{
|
|
format.in.ed.collect "booktitle" output.check
|
|
format.edition output
|
|
booktitle empty$ edition empty$ =
|
|
{ } { new.block } if$
|
|
new.sentence
|
|
publisher "publisher" output.check
|
|
address output
|
|
}
|
|
{ format.incoll.inproc.crossref output.nonnull
|
|
format.chapter.pages output
|
|
}
|
|
if$
|
|
format.chapter.pages output
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {inproceedings}
|
|
{ output.bibitem
|
|
format.authors "author" output.check
|
|
author format.key output % special for
|
|
output.year.check % apalike
|
|
crossref missing$
|
|
{
|
|
|
|
format.in.ed.booktitle "booktitle" output.check
|
|
". " *
|
|
% format.bvolume output
|
|
before.all 'output.state :=
|
|
new.block
|
|
% format.title "title" output.check
|
|
format.number.series output
|
|
new.block
|
|
% organization output
|
|
publisher output
|
|
address output
|
|
format.pages output
|
|
}
|
|
{ format.incoll.inproc.crossref output.nonnull
|
|
format.pages output
|
|
}
|
|
if$
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {conference} { inproceedings }
|
|
|
|
FUNCTION {manual}
|
|
{ output.bibitem
|
|
format.authors output
|
|
author format.key output % special for
|
|
output.year.check % apalike
|
|
format.btitle "title" output.check
|
|
new.block
|
|
organization address new.block.checkb
|
|
organization output
|
|
address output
|
|
format.edition output
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {mastersthesis}
|
|
{ output.bibitem
|
|
format.authors "author" output.check
|
|
author format.key output % special for
|
|
output.year.check % apalike
|
|
"Master's thesis" format.thesis.type output.nonnull
|
|
school "school" output.check
|
|
address output
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {misc}
|
|
{ output.bibitem
|
|
format.authors output
|
|
author format.key output % special for apalike
|
|
output.year.check
|
|
format.btitle output
|
|
howpublished output
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {phdthesis}
|
|
{ output.bibitem
|
|
format.authors "author" output.check
|
|
author format.key output % special for
|
|
output.year.check % apalike
|
|
"PhD thesis" format.thesis.type output.nonnull
|
|
school "school" output.check
|
|
address output
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {proceedings}
|
|
{ output.bibitem
|
|
format.editors output
|
|
editor format.key output % special for
|
|
mid.sentence 'output.state :=
|
|
output.year.check % apalike
|
|
format.btitle "title" output.check
|
|
" " *
|
|
before.all 'output.state :=
|
|
% new.block
|
|
format.bvolume output
|
|
format.number.series output
|
|
new.block
|
|
% organization output % a nonempty organization
|
|
publisher output
|
|
address output
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {techreport}
|
|
{ output.bibitem
|
|
format.authors "author" output.check
|
|
author format.key output % special for
|
|
output.year.check % apalike
|
|
format.tr.number output.nonnull
|
|
format.btitle "title" output.check
|
|
format.url output
|
|
new.block
|
|
institution "institution" output.check
|
|
address output
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {unpublished}
|
|
{ output.bibitem
|
|
format.authors "author" output.check
|
|
author format.key output % special for
|
|
output.year.check % apalike
|
|
format.btitle "title" output.check
|
|
note "note" output.check
|
|
% the following are presumably redundant for 'unpublished'
|
|
format.eprint "eprint" output.check.nocomma
|
|
format.doi "doi" output.check.nocomma
|
|
format.url output
|
|
fin.entry
|
|
}
|
|
|
|
FUNCTION {default.type} { misc }
|
|
|
|
MACRO {jan} {"Jan."}
|
|
|
|
MACRO {feb} {"Feb."}
|
|
|
|
MACRO {mar} {"Mar."}
|
|
|
|
MACRO {apr} {"Apr."}
|
|
|
|
MACRO {may} {"May"}
|
|
|
|
MACRO {jun} {"June"}
|
|
|
|
MACRO {jul} {"July"}
|
|
|
|
MACRO {aug} {"Aug."}
|
|
|
|
MACRO {sep} {"Sept."}
|
|
|
|
MACRO {oct} {"Oct."}
|
|
|
|
MACRO {nov} {"Nov."}
|
|
|
|
MACRO {dec} {"Dec."}
|
|
|
|
%% Journal macros for bib files. Should be kept synchronized with
|
|
%% the entries in the class file.
|
|
|
|
%% Astronomy and Astrophysics
|
|
MACRO {aap} {"A\&A"}
|
|
|
|
%% Astronomy and Astrophysics
|
|
MACRO {astap} {"A\&A"}
|
|
|
|
%% Astronomy and Astrophysics Review (the)
|
|
MACRO {aapr} {"A\&ARv"}
|
|
|
|
%% Astronomy and Astrophysics Supplement Series
|
|
MACRO {aaps} {"A\&AS"}
|
|
|
|
%% Acta Astronomica
|
|
MACRO {actaa} {"Acta Astron."}
|
|
|
|
%% Astrofizika
|
|
MACRO {afz} {"Afz"}
|
|
|
|
%% Astronomical Journal (the)
|
|
MACRO {aj} {"AJ"}
|
|
|
|
%% Applied Optics
|
|
MACRO {ao} {"Appl. Opt."}
|
|
|
|
%% Applied Optics
|
|
MACRO {applopt} {"Appl. Opt."}
|
|
|
|
%% Astrophysics Letters
|
|
MACRO {aplett} {"Astrophys.~Lett."}
|
|
|
|
%% Astrophysical Journal
|
|
MACRO {apj} {"ApJ"}
|
|
|
|
%% Astrophysical Journal, Letters
|
|
MACRO {apjl} {"ApJ"}
|
|
|
|
%% Astrophysical Journal, Letters
|
|
MACRO {apjlett} {"ApJ"}
|
|
|
|
%% Astrophysical Journal, Supplement
|
|
MACRO {apjs} {"ApJS"}
|
|
|
|
%% Astrophysical Journal, Supplement
|
|
MACRO {apjsupp} {"ApJS"}
|
|
|
|
%% Astrophysics and Space Science
|
|
MACRO {apss} {"Ap\&SS"}
|
|
|
|
%% Annual Review of Astronomy and Astrophysics
|
|
MACRO {araa} {"ARA\&A"}
|
|
|
|
%% Astronomicheskii Zhurnal
|
|
MACRO {azh} {"Azh"}
|
|
|
|
%% Bulletin of the American Astronomical Society
|
|
MACRO {baas} {"BAAS"}
|
|
|
|
%% Bulletin of the Astronomical Institutes of Czechoslovakia
|
|
MACRO {bac} {"Bull. Astron. Inst. Czechoslovakia"}
|
|
|
|
%% Bulletin Astronomical Institute of the Netherlands
|
|
MACRO {bain} {"Bull. Astron. Inst. Netherlands"}
|
|
|
|
%% Chinese Astronomy and Astrophysics
|
|
MACRO {caa} {"Chinese Astron. Astrophys."}
|
|
|
|
%% Chinese Journal of Astronomy and Astrophysics
|
|
MACRO {cjaa} {"Chinese J.~Astron. Astrophys."}
|
|
|
|
%% Fundamentals of Cosmic Physics
|
|
MACRO {fcp} {"Fundamentals Cosmic Phys."}
|
|
|
|
%% Geochimica Cosmochimica Acta
|
|
MACRO {gca} {"Geochimica Cosmochimica Acta"}
|
|
|
|
%% Geophysics Research Letters
|
|
MACRO {grl} {"Geophys. Res. Lett."}
|
|
|
|
%% IAU Cirulars
|
|
MACRO {iaucirc} {"IAU~Circ."}
|
|
|
|
%% Icarus
|
|
MACRO {icarus} {"Icarus"}
|
|
|
|
%% Journal of Astrophysics and Astronomy
|
|
MACRO {japa} {"J.~Astrophys. Astron."}
|
|
|
|
%% Journal of Cosmology and Astroparticle Physics
|
|
MACRO {jcap} {"J.~Cosmology Astropart. Phys."}
|
|
|
|
%% Journal of Chemical Physics
|
|
MACRO {jcp} {"J.~Chem.~Phys."}
|
|
|
|
%% Journal of Geophysics Research
|
|
MACRO {jgr} {"J.~Geophys.~Res."}
|
|
|
|
%% Journal of Quantitiative Spectroscopy and Radiative Transfer
|
|
MACRO {jqsrt} {"J.~Quant. Spectrosc. Radiative Transfer"}
|
|
|
|
%% Journal of the RAS of Canada
|
|
MACRO {jrasc} {"J.~R.~Astron. Soc. Canada"}
|
|
|
|
%% Memoirs of the RAS
|
|
MACRO {memras} {"Mem.~RAS"}
|
|
|
|
%% Memoire della Societa Astronomica Italiana
|
|
MACRO {memsai} {"Mem. Soc. Astron. Italiana"}
|
|
|
|
%% Monthly Notes of the Astronomical Society of Southern Africa
|
|
MACRO {mnassa} {"MNASSA"}
|
|
|
|
%% Monthly Notices of the Royal Astronomical Society
|
|
MACRO {mnras} {"MNRAS"}
|
|
|
|
%% New Astronomy
|
|
MACRO {na} {"New~Astron."}
|
|
|
|
%% New Astronomy Review
|
|
MACRO {nar} {"New~Astron.~Rev."}
|
|
|
|
%% Nature
|
|
MACRO {nat} {"Nature"}
|
|
|
|
%% Nuclear Physics A
|
|
MACRO {nphysa} {"Nuclear Phys.~A"}
|
|
|
|
%% Physical Review A: General Physics
|
|
MACRO {pra} {"Phys. Rev.~A"}
|
|
|
|
%% Physical Review B: Solid State
|
|
MACRO {prb} {"Phys. Rev.~B"}
|
|
|
|
%% Physical Review C
|
|
MACRO {prc} {"Phys. Rev.~C"}
|
|
|
|
%% Physical Review D
|
|
MACRO {prd} {"Phys. Rev.~D"}
|
|
|
|
%% Physical Review E
|
|
MACRO {pre} {"Phys. Rev.~E"}
|
|
|
|
%% Physical Review Letters
|
|
MACRO {prl} {"Phys. Rev.~Lett."}
|
|
|
|
%% Publications of the Astronomical Society of Australia
|
|
MACRO {pasa} {"PASA"}
|
|
|
|
%% Publications of the Astronomical Society of the Pacific
|
|
MACRO {pasp} {"PASP"}
|
|
|
|
%% Publications of the Astronomical Society of Japan
|
|
MACRO {pasj} {"PASJ"}
|
|
|
|
%% Physics Reports
|
|
MACRO {physrep} {"Phys.~Rep."}
|
|
|
|
%% Physica Scripta
|
|
MACRO {physscr} {"Phys.~Scr."}
|
|
|
|
%% Planetary Space Science
|
|
MACRO {planss} {"Planet. Space~Sci."}
|
|
|
|
%% Proceedings of the Society of Photo-Optical Instrumentation Engineers
|
|
MACRO {procspie} {"Proc.~SPIE"}
|
|
|
|
%% Revista Mexicana de Astronomia y Astrofisica
|
|
MACRO {rmxaa} {"Rev. Mex. Astron. Astrofis."}
|
|
|
|
%% Quarterly Journal of the RAS
|
|
MACRO {qjras} {"QJRAS"}
|
|
|
|
%% Science
|
|
MACRO {sci} {"Science"}
|
|
|
|
%% Sky and Telescope
|
|
MACRO {skytel} {"Sky \& Telesc."}
|
|
|
|
%% Solar Physics
|
|
MACRO {solphys} {"Sol.~Phys."}
|
|
|
|
%% Soviet Astronomy (aka Astronomy Reports)
|
|
MACRO {sovast} {"Soviet~Ast."}
|
|
|
|
%% Space Science Reviews
|
|
MACRO {ssr} {"Space Sci. Rev."}
|
|
|
|
%% Zeitschrift fuer Astrophysik
|
|
MACRO {zap} {"Z.~Astrophys."}
|
|
|
|
%% Astronomical Society of the Pacific Conference Series
|
|
MACRO {aspconf} {"ASP Conf. Ser."}
|
|
|
|
%% Astronomische Nachrichten
|
|
MACRO {astnach} {"Astron. Nachr."}
|
|
|
|
%% Astronomy & Computing
|
|
MACRO {astcomp} {"Astron. Comput."}
|
|
|
|
READ
|
|
|
|
FUNCTION {sortify}
|
|
{ purify$
|
|
"l" change.case$
|
|
}
|
|
|
|
INTEGERS { len }
|
|
|
|
FUNCTION {chop.word}
|
|
{ 's :=
|
|
'len :=
|
|
s #1 len substring$ =
|
|
{ s len #1 + global.max$ substring$ }
|
|
's
|
|
if$
|
|
}
|
|
|
|
% There are three apalike cases: one person (Jones),
|
|
% two (Jones and de~Bruijn), and more (Jones et~al.).
|
|
% This function is much like format.crossref.editors.
|
|
%
|
|
% The goal here is to be compatible with the MN style prescription that:
|
|
% If there are several references with the same first author,
|
|
% arrange in the following order:
|
|
% firstly single-author papers (by date);
|
|
% then two-author papers (alphabetically by co-author, then by date);
|
|
% then multi-author papers (by date).
|
|
% We deem 'Jones and others' to be a multi-author paper, in this sense,
|
|
% so that it sorts, by date, with the three-or-more author papers.
|
|
% An alternative is to deem 'Jones and others' to sort just after the single-author papers
|
|
% (this case isn't really covered by the above rules, but this position looks sensible);
|
|
% we can get that by putting extra spaces before the 'et~al.', as noted below.
|
|
% Note: we can't put arbitrary characters here, to force the order,
|
|
% because the result of this function appears as the citation label in the typeset result.
|
|
FUNCTION {format.lab.names}
|
|
{ 's :=
|
|
s #1 "{vv~}{ll}" format.name$
|
|
s num.names$ duplicate$
|
|
#2 >
|
|
{ pop$ " et~al." * }
|
|
{ #2 <
|
|
'skip$
|
|
{ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
|
|
{ " et~al." * } % <-----+-- alternate sortings
|
|
%{ " et~al." * } % <--+
|
|
{ " \& " * s #2 "{vv~}{ll}" format.name$ * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
% Format names in full
|
|
%
|
|
FUNCTION {format.lab.names.full}
|
|
{ 's :=
|
|
s #1 "{vv~}{ll}" format.name$
|
|
s num.names$ duplicate$
|
|
#2 <
|
|
'skip$
|
|
{ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
|
|
'skip$
|
|
{ " \& " * s #2 "{vv~}{ll}" format.name$ * }
|
|
if$
|
|
}
|
|
if$
|
|
}
|
|
|
|
FUNCTION {author.key.label}
|
|
{ author empty$
|
|
{ key empty$
|
|
{ cite$ #1 #3 substring$ }
|
|
'key % apalike uses the whole key
|
|
if$
|
|
}
|
|
{ author format.lab.names }
|
|
if$
|
|
}
|
|
|
|
|
|
FUNCTION {author.editor.key.label}
|
|
{ author empty$
|
|
{ editor empty$
|
|
{ key empty$
|
|
{ cite$ #1 #3 substring$ }
|
|
'key % apalike uses the whole key
|
|
if$
|
|
}
|
|
{ editor format.lab.names }
|
|
if$
|
|
}
|
|
{ author format.lab.names }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {author.editor.key.label.full}
|
|
{ author empty$
|
|
{ editor empty$
|
|
{ key empty$
|
|
{ cite$ #1 #3 substring$ }
|
|
'key
|
|
if$
|
|
}
|
|
{ editor format.names.label }
|
|
if$
|
|
}
|
|
{ author format.names.label }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {editor.key.label}
|
|
{ editor empty$
|
|
{ key empty$
|
|
{ cite$ #1 #3 substring$ }
|
|
'key % apalike uses the whole key, no organization
|
|
if$
|
|
}
|
|
{ editor format.lab.names }
|
|
if$
|
|
}
|
|
|
|
% Calculate the 'label' for the entry, which is used for sorting.
|
|
% Note that this does not include the a/b/c... for disambiguating
|
|
% years (that's added later, in forward.pass).
|
|
FUNCTION {calc.label}
|
|
{ % Define t: this is the 'full' set of names
|
|
type$ "book" =
|
|
type$ "inbook" =
|
|
or
|
|
'author.editor.key.label.full
|
|
{ type$ "proceedings" =
|
|
{ editor format.names.label }
|
|
{ author format.names.label }
|
|
if$
|
|
}
|
|
if$
|
|
't :=
|
|
% Define s: this is the 'shortened' set of names, with 'et al.',
|
|
% which are to appear in citations
|
|
type$ "book" =
|
|
type$ "inbook" =
|
|
or
|
|
'author.editor.key.label
|
|
{ type$ "proceedings" =
|
|
'editor.key.label % apalike ignores organization
|
|
'author.key.label % for labeling and sorting
|
|
if$
|
|
}
|
|
if$
|
|
's :=
|
|
% the '\protect... is for apalike
|
|
"\protect\citeauthoryear{" t * "}{" *
|
|
threeauthorvar
|
|
numnames #3 =
|
|
and
|
|
{ "\protect\mniiiauthor{" cite$ * "}{" *
|
|
t * "}{" * s * "}" * }
|
|
{ s }
|
|
if$
|
|
*
|
|
"}{" *
|
|
year field.or.null purify$ #-1 #4 substring$ % use all four digits
|
|
*
|
|
% the matching closing "}" comes in at the reverse.pass
|
|
'label :=
|
|
}
|
|
|
|
FUNCTION {sort.format.names}
|
|
{ 's :=
|
|
#1 'nameptr :=
|
|
""
|
|
s num.names$ 'numnames :=
|
|
numnames 'namesleft :=
|
|
{ namesleft #0 > }
|
|
{ nameptr #1 >
|
|
{ " " * }
|
|
'skip$
|
|
if$ % apalike uses initials
|
|
s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := % <= here
|
|
"Mc" t #2 text.prefix$ =
|
|
{ "mac" t #3 t text.length$ substring$ * 't := }
|
|
'skip$
|
|
if$
|
|
nameptr numnames = t "others" = and
|
|
{ " et~al." * }
|
|
{ t sortify * }
|
|
if$
|
|
nameptr #1 + 'nameptr :=
|
|
namesleft #1 - 'namesleft :=
|
|
}
|
|
while$
|
|
}
|
|
|
|
FUNCTION {sort.format.title}
|
|
{ 't :=
|
|
"A " #2
|
|
"An " #3
|
|
"The " #4 t chop.word
|
|
chop.word
|
|
chop.word
|
|
sortify
|
|
#1 global.max$ substring$
|
|
}
|
|
|
|
FUNCTION {author.sort}
|
|
{ author empty$
|
|
{ key empty$
|
|
{ "to sort, need author or key in " cite$ * warning$
|
|
""
|
|
}
|
|
{ key sortify }
|
|
if$
|
|
}
|
|
{ author sort.format.names }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {author.editor.sort}
|
|
{ author empty$
|
|
{ editor empty$
|
|
{ key empty$
|
|
{ "to sort, need author, editor, or key in " cite$ * warning$
|
|
""
|
|
}
|
|
{ key sortify }
|
|
if$
|
|
}
|
|
{ editor sort.format.names }
|
|
if$
|
|
}
|
|
{ author sort.format.names }
|
|
if$
|
|
}
|
|
|
|
FUNCTION {editor.sort}
|
|
{ editor empty$
|
|
{ key empty$
|
|
{ "to sort, need editor or key in " cite$ * warning$
|
|
""
|
|
}
|
|
{ key sortify }
|
|
if$
|
|
}
|
|
{ editor sort.format.names }
|
|
if$
|
|
}
|
|
|
|
% Format numbers (eg volume, number, pages) into a fixed-width string,
|
|
% for sorting.
|
|
FUNCTION {number.for.presort}
|
|
{ field.or.null
|
|
duplicate$ text.length$ 'len :=
|
|
""
|
|
{ #5 len > }
|
|
{ "0" *
|
|
len #1 + 'len := }
|
|
while$
|
|
swap$ *
|
|
}
|
|
|
|
% apalike uses two sorting passes; the first one sets the
|
|
% labels so that the `a's, `b's, etc. can be computed;
|
|
% the second pass puts the references in "correct" order.
|
|
% The presort function is for the first pass. It computes
|
|
% presort.key, sort.label, and sort.key$
|
|
FUNCTION {presort}
|
|
{ calc.label
|
|
type$ "book" =
|
|
type$ "inbook" =
|
|
or
|
|
'author.editor.key.label
|
|
{ type$ "proceedings" =
|
|
'editor.key.label % apalike ignores organization
|
|
'author.key.label % for labeling and sorting
|
|
if$
|
|
}
|
|
if$
|
|
purify$ % remove {braces} round names, to avoid confusing sorting
|
|
" "
|
|
*
|
|
year number.for.presort *
|
|
#1 entry.max$ substring$
|
|
'presort.key :=
|
|
presort.key
|
|
" "
|
|
*
|
|
% Style apalike prefers 'title field.or.null sort.format.title *' here.
|
|
% We don't, because we will predominantly be sorting articles in
|
|
% this style, and we don't include their titles in the final bibliography.
|
|
volume number.for.presort *
|
|
number number.for.presort *
|
|
pages empty$
|
|
{ "0" }
|
|
{ pages first.page.number }
|
|
if$
|
|
number.for.presort *
|
|
#1 entry.max$ substring$
|
|
'sort.key$ :=
|
|
sort.key$ 'sort.label :=
|
|
}
|
|
|
|
EXECUTE {initialise.mn2e}
|
|
|
|
ITERATE {presort}
|
|
|
|
SORT % by label, sort.label, title---for final label calculation
|
|
|
|
% Manage the construction of the 'extra' labels for references. These
|
|
% are the a/b/c/... year suffixes which distinguish different
|
|
% publications by the same author.
|
|
%
|
|
% These apalike labels are only for the text; the 'label' does not
|
|
% appear in the bibiliography, so that the 'longest.label' variable is
|
|
% unnecessary in this style.
|
|
STRINGS { last.key next.extra }
|
|
|
|
INTEGERS { last.extra.num }
|
|
|
|
FUNCTION {initialize.extra.label.stuff}
|
|
{ #0 int.to.chr$ 'last.key :=
|
|
"" 'next.extra :=
|
|
#0 'last.extra.num :=
|
|
}
|
|
|
|
% By the time that this function is iterated over, the entries have
|
|
% had presort.key assigned, and have been presorted. However these labels
|
|
% do not (by design) respect the presence of multiple entries in the
|
|
% same year, so that there are duplicates. Detect successive
|
|
% duplicates, and add an extra a/b/c... suffix.
|
|
%
|
|
% At the end of this forward.pass, each entry with a duplicate presort.key
|
|
% will have an extra.label, starting with 'b' for the first duplicate,
|
|
% 'c' for the second, and so on. That is, only the first
|
|
% soon-to-be-discovered-to-be-duplicate label will not have an
|
|
% extra.label.
|
|
FUNCTION {forward.pass}
|
|
{ last.key presort.key =
|
|
{ last.extra.num #1 + 'last.extra.num :=
|
|
last.extra.num int.to.chr$ 'extra.label :=
|
|
}
|
|
{ % first time we've seen this key
|
|
"a" chr.to.int$ 'last.extra.num :=
|
|
"" 'extra.label :=
|
|
presort.key 'last.key :=
|
|
}
|
|
if$
|
|
}
|
|
|
|
% Work back through the labels. If, on this pass we discover that the
|
|
% next entry in the sequence (which is the last entry processed in
|
|
% this reverse pass) had an extra.label of 'b', then this tells us
|
|
% that _this_ entry should have an extra.label of 'a', which we were
|
|
% unable to detect in the forward.pass above.
|
|
%
|
|
% We also close the brace pair {...} opened in calc.label
|
|
FUNCTION {reverse.pass}
|
|
{ next.extra "b" =
|
|
{ "a" 'extra.label := }
|
|
'skip$
|
|
if$
|
|
label extra.label * "}" * 'label :=
|
|
extra.label 'next.extra :=
|
|
}
|
|
|
|
EXECUTE {initialize.extra.label.stuff}
|
|
|
|
ITERATE {forward.pass}
|
|
|
|
REVERSE {reverse.pass}
|
|
|
|
% Now that the label is right we sort for real. We sort on sort.label
|
|
% then year then title. Since sort.label starts with presort.key,
|
|
% this sorting is compatible with the letter suffixes added to years.
|
|
%
|
|
% This is for the second sorting pass.
|
|
FUNCTION {bib.sort.order}
|
|
{ sort.label
|
|
" "
|
|
*
|
|
year field.or.null sortify
|
|
*
|
|
" "
|
|
*
|
|
title field.or.null
|
|
sort.format.title
|
|
*
|
|
#1 entry.max$ substring$
|
|
'sort.key$ :=
|
|
}
|
|
|
|
ITERATE {bib.sort.order}
|
|
|
|
SORT % by sort.label, year, title---giving final bibliography order
|
|
|
|
FUNCTION {begin.bib}
|
|
{
|
|
preamble$ empty$ % no \etalchar in apalike
|
|
'skip$
|
|
{ preamble$ write$ newline$ }
|
|
if$
|
|
"\begin{thebibliography}{}" write$ newline$ % no labels in apalike
|
|
"\makeatletter" write$ newline$
|
|
% The following is the contents of mnras-insert.sty, minus comments and whitespace.
|
|
% DO NOT EDIT THIS TEXT,
|
|
% but instead make mnras-insert.txt, and paste the results in here.
|
|
"\relax" write$ newline$
|
|
"\def\mn@urlcharsother{\let\do\@makeother \do\$\do\&\do\#\do\^\do\_\do\%\do\~}" write$ newline$
|
|
"\def\mn@doi{\begingroup\mn@urlcharsother \@ifnextchar [ {\mn@doi@} {\mn@doi@[]}}" write$ newline$
|
|
"\def\mn@doi@[#1]#2{\def\@tempa{#1}\ifx\@tempa\@empty \href {http://dx.doi.org/#2} {doi:#2}\else \href {http://dx.doi.org/#2} {#1}\fi \endgroup}" write$ newline$
|
|
"\def\mn@eprint#1#2{\mn@eprint@#1:#2::\@nil}" write$ newline$
|
|
"\def\mn@eprint@arXiv#1{\href {http://arxiv.org/abs/#1} {{\tt arXiv:#1}}}" write$ newline$
|
|
"\def\mn@eprint@dblp#1{\href {http://dblp.uni-trier.de/rec/bibtex/#1.xml} {dblp:#1}}" write$ newline$
|
|
"\def\mn@eprint@#1:#2:#3:#4\@nil{\def\@tempa {#1}\def\@tempb {#2}\def\@tempc {#3}\ifx \@tempc \@empty \let \@tempc \@tempb \let \@tempb \@tempa \fi \ifx \@tempb \@empty \def\@tempb {arXiv}\fi \@ifundefined {mn@eprint@\@tempb}{\@tempb:\@tempc}{\expandafter \expandafter \csname mn@eprint@\@tempb\endcsname \expandafter{\@tempc}}}" write$ newline$
|
|
}
|
|
|
|
EXECUTE {begin.bib}
|
|
|
|
EXECUTE {init.state.consts}
|
|
|
|
ITERATE {call.type$}
|
|
|
|
FUNCTION {end.bib}
|
|
{ newline$
|
|
"\makeatother" write$ newline$
|
|
"\end{thebibliography}" write$ newline$
|
|
}
|
|
|
|
EXECUTE {end.bib}
|