Dear Developers,
Version running: 1.1.5 fix 1
CITATIONS
I'm using lyx to write my PhD thesis, and I have set up a TeX preamble to
allow citations in three different formats, rather than the single format
allowed using the menu selection "insert -> citation reference". These
formats are similar in form to most journals in the geophysical fluids
field.
The code is pretty messy, and I don't know if you're interested, because
I've fumbled my way around a lot. However, the bibtex style file and
latex preamble to be placed in a layout file are attached and they work.
It should be noted that much of this code has been constructed my various
members of the geophysical fluids field in Australia, and I have simply
changed parts of it to fit into lyx.
BIBTEX HEADING
Is it possible to change the heading of the bibtex reference from
"References" to "Bibliography"? Also, can this be made to be the
equivelent level of a Chapter heading, so it shows up in the TOC. I have
tried changing the style of "bibliography" in my customised layout file,
however this only changes attributes of the bibliography constructed
within Lyx, not of the Bibtex references heading.
Regards,
Andrew Roberts [EMAIL PROTECTED] ph-03 6226 2939
Ph.D. Student http://www.antcrc.utas.edu.au Antarctic CRC
% BibTeX `ametsoc' bibliography style (28-Jan-92 version)
% John L. Wilkin ([EMAIL PROTECTED])
% Adapted from BibTeX `ramojgr' bibliography style (27-Mar-90 version)
% Adapted from BibTeX `apalike' bibliography style (24-Jan-88 version)
% Adapted from the `alpha' style, version 0.99a; for BibTeX version 0.99a.
% Copyright (C) 1990, all rights reserved.
% Copying of this file is allowed, provided that if you make any changes at all
% you name it something other than `ametsoc.bst'.
% This restriction helps ensure that all copies are identical.
% This BiBTeX style produces a reference list in the style of American
% Meteorological Society publications, e.g. Journal of Physical
% Oceanography. Citations in the text are of the form, e.g. (Smith 1992),
% (Smith et al. 1992a). Note: (1) there is no comma preceeding the date,
% (2) a letter "a", "b" etc follows citations having the same author, year,
% (3) there are no typeface changes, (4) the citation is enclosed in
% parentheses. In order to get this citation format correct this BiBTeX
% style needs to be used with Wilkin's `oceancite' LaTeX style (oceancite.sty).
% Oceancite.sty is precisely the same citation style used in `ramojgr.sty'
% but with () rather than []. Separating the citation style from the
% documentstyle means that this BiBTeX style can be used with any LaTeX
% documentstyle. It also means that the BiBTeX styles ramjgr.bst and
% ametsoc.bst can be interchanged -- handy when AMS reject your paper and you
% decide to submit it to AGU without modification.
% The reference list incorporates the AMS convention of placing a
% horizontal rule when an author appears in the same place in the
% preceeding reference. Edit FUNCTION {format.names} if you wish to change
% this feature.
% BUGS: The punctuation in the reference list does not follow the correct
% typeface conventions. The comma following a journal volume number
% should be boldfaced, following the article title emapsized, etc. To get
% this right will need some major restructuring and I just don't care
% about it at the moment. If AMS ever accept camera ready copy and complain
% then maybe I'll do something about it.
% USAGE: e.g.
%
% \documentstyle[12pt,oceancite]{article}
% ...
% \begin{document}
% ...
% \bibliographystyle{ametsoc}
% ...
%
% \cite{Hardy89} will give (Hardy 1989)
% \cite{Laurel89,Hardy90) will give (Laurel 1989; Hardy 1990)
% \shortcite{Laurel90} will give (1990)
% ( shortcite is intended for in-line citations e.g.:
% " Hardy's (1990) calculation used ... " or
% " as suggested by Hardy (1990) ... "
%
% HISTORY:
% 15-sep-86 (SK,OP) Original version, by Susan King and Oren Patashnik.
% 10-nov-86 (OP) Truncated the sort.key$ string to the correct length
% in bib.sort.order to eliminate error message.
% 24-jan-88 (OP) Updated for BibTeX version 0.99a, from alpha.bst 0.99a;
% apalike now sorts by author, then year, then title;
% THIS `apalike' VERSION DOES NOT WORK WITH BIBTEX 0.98i.
% 27-mar-90 (RAMO) Created JGR compatible style
% 2-jan-92 (JLW) Hacked into an American Meteorological
% Society style using hints from Peter McIntosh's
% jpo.bst for Publisher (TM).
% This BibTeX style has support for short (year only) citations. This
% is done by having the citations actually look like
% \citename{name-info, }year
ENTRY
{ address
author
booktitle
chapter
edition
editor
howpublished
institution
journal
key
month
note
number
organization
pages
publisher
school
series
title
type
volume
year
}
{}
{ label extra.label sort.label }
INTEGERS { output.state before.all mid.sentence after.sentence after.block }
FUNCTION {init.state.consts}
{ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.sentence :=
#3 'after.block :=
}
STRINGS { s t prev.first.author prev.second.author prev.third.author}
FUNCTION {output.nonnull}
{ 's :=
output.state mid.sentence =
{ ", " * write$ }
{ output.state after.block =
{ add.period$ write$
newline$
"\newblock " write$
}
{ output.state before.all =
'write$
{ add.period$ " " * write$ }
if$
}
if$
mid.sentence 'output.state :=
}
if$
s
}
FUNCTION {output}
{ duplicate$ empty$
'pop$
'output.nonnull
if$
}
FUNCTION {output.check}
{ 't :=
duplicate$ empty$
{ pop$ "empty " t * " in " * cite$ * warning$ }
'output.nonnull
if$
}
FUNCTION {emphasize}
{ duplicate$ empty$
{ pop$ "" }
{ "{\em " swap$ * "\rm}" * }
if$
}
FUNCTION {bold}
{ duplicate$ empty$
{ pop$ "" }
{ "{\bf " swap$ * "}" * }
if$
}
% apalike needs this function because
% the year has special punctuation;
% apalike ignores the month
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$
newline$
""
before.all 'output.state :=
}
FUNCTION {fin.entry}
{ "." * add.period$
write$
newline$
}
FUNCTION {new.block}
{ output.state before.all =
'skip$
% { after.block 'output.state := } only one sentence/block in JGR style!
{ mid.sentence 'output.state := }
if$
}
FUNCTION {new.sentence}
{ output.state after.block =
'skip$
{ output.state before.all =
'skip$
% { after.sentence 'output.state := } only one sentence in JGR style!
{ mid.sentence 'output.state := }
if$
}
if$
}
FUNCTION {not}
{ { #0 }
{ #1 }
if$
}
FUNCTION {and}
{ 'skip$
{ pop$ #0 }
if$
}
FUNCTION {or}
{ { pop$ #1 }
'skip$
if$
}
FUNCTION {new.block.checka}
{ empty$
'skip$
'new.block
if$
}
FUNCTION {new.block.checkb}
{ empty$
swap$ empty$
and
'skip$
'new.block
if$
}
FUNCTION {new.sentence.checka}
{ empty$
'skip$
'new.sentence
if$
}
FUNCTION {new.sentence.checkb}
{ empty$
swap$ empty$
and
'skip$
'new.sentence
if$
}
FUNCTION {field.or.null}
{ duplicate$ empty$
{ pop$ "" }
'skip$
if$
}
INTEGERS { nameptr namesleft numnames }
FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ nameptr #1 >
{ s nameptr "{f. }{vv~}{ll}{ jj}" format.name$ 't := }
{ s nameptr "{vv~}{ll}{, f.}{, jj}" format.name$ 't := }
if$
% The following blocks check for the repetition of authors in the
% sorted reference list. If one of the first three authors appears
% in the same place in the author list as in the preceeding reference
% their name is replaced with a horizontal rule. If you need this facility
% for more than three authors (!) just add another block and another STRING
% variable. Commenting out these blocks will produce a reference list
% with all the authors names entered in full which is possibly more
% appropriate when submitting a manuscript.
nameptr #1 =
{ t prev.first.author =
{ "{\vrule height3pt depth-2pt width1cm}" 't := }
'skip$
if$
}
'skip$
if$
nameptr #1 =
{t 'prev.first.author :=}
'skip$
if$
nameptr #2 =
{ t prev.second.author =
{ "{\vrule height3pt depth-2pt width1cm}" 't := }
'skip$
if$
}
'skip$
if$
nameptr #2 =
{t 'prev.second.author :=}
'skip$
if$
nameptr #3 =
{ t prev.third.author =
{ "{\vrule height3pt depth-2pt width1cm}" 't := }
'skip$
if$
}
'skip$
if$
nameptr #3 =
{t 'prev.third.author :=}
'skip$
if$
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ numnames #2 >
'skip$
{ "," * }
if$
t "others" =
{ " et~al." * }
{ " and " * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
FUNCTION {format.names.reverse.all}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := % first name first
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ numnames #1 >
{ "," * }
'skip$
if$
t "others" =
{ " et~al." * }
{ " and " * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
FUNCTION {format.names.reverse1}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ nameptr #1 >
{s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=} % first name first
{s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=} % last name first
if$
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ numnames #1 >
{ "," * }
'skip$
if$
t "others" =
{ " et~al." * }
{ " and " * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
FUNCTION {scapify}
{ duplicate$ empty$
{ pop$ "" }
{ "{\sc " swap$ * "}" * }
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.reverse1
editor num.names$ #1 >
{ " (eds.)" * }
{ " (ed.)" * }
if$
}
if$
}
FUNCTION {format.title}
{ title empty$
{ "" }
{ title "t" change.case$ }
if$
}
FUNCTION {format.note}
{ note empty$
{ "" }
{ " (" note * ")" * }
if$
}
FUNCTION {format.publisher}
{ publisher empty$
{ "" }
% { " " publisher * extra.label * " " * }
{ " " publisher }
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 {format.date}
{ year empty$
{ month empty$
{ "" }
{ "there's a month but no year in " cite$ * warning$
month
}
if$
}
{ month empty$
'year
{ month ", " * year * extra.label emphasize * }
if$
}
if$
}
FUNCTION {format.btitle}
{ title emphasize
}
FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
{ "~" }
{ " " }
if$
swap$ * *
}
FUNCTION {either.or.check}
{ empty$
'pop$
{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
if$
}
FUNCTION {format.bvolume}
{ volume empty$
{ "" }
{ "vol." volume tie.or.space.connect
series empty$
'skip$
{ " of " * series emphasize * }
if$
"volume and number" number either.or.check
}
if$
}
FUNCTION {format.number.series}
{ volume empty$
{ number empty$
{ series field.or.null }
{ output.state mid.sentence =
{ "number" }
{ "Number" }
if$
number tie.or.space.connect
series empty$
{ "there's a number but no series in " cite$ * warning$ }
{ " in " * series * }
if$
}
if$
}
{ series }
if$
}
FUNCTION {format.edition}
{ edition empty$
{ "" }
{ output.state mid.sentence =
{ edition "l" change.case$ " ed." * }
{ edition "t" change.case$ " ed." * }
if$
}
if$
}
INTEGERS { multiresult }
FUNCTION {multi.page.check}
{ 't :=
#0 'multiresult :=
{ multiresult not
t empty$ not
and
}
{ t #1 #1 substring$
duplicate$ "-" =
swap$ duplicate$ "," =
swap$ "+" =
or or
{ #1 'multiresult := }
{ t #2 global.max$ substring$ 't := }
if$
}
while$
multiresult
}
FUNCTION {format.pages}
{ pages empty$
{ "" }
{ pages multi.page.check
{ " " pages n.dashify tie.or.space.connect }
% { pages tie.or.space.connect "pp." }
% { " " pages * extra.label * "pp." * }
{ " " pages tie.or.space.connect }
if$
}
if$
}
FUNCTION {format.vol.num.pages}
{ volume bold 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.chapter.pages}
{ chapter empty$
'format.pages
{ type empty$
{ "chapter" }
{ type "l" change.case$ }
if$
chapter tie.or.space.connect
pages empty$
{ "pages missing from " cite$ * warning$}
{ ", " * format.pages * }
if$
}
if$
}
FUNCTION {format.in.ed.booktitle}
{ " in "
booktitle empty$
{ "booktitle missing in " cite$ * warning$}
{ booktitle emphasize * }
if$
volume empty$
'skip$
{ ", " * format.bvolume * }
if$
editor empty$
{ "editor missing in " cite$ * warning$}
{ ", edited by " editor format.names.reverse.all * *}
if$
}
FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
month empty$ year empty$ note empty$
and and and and and
key empty$ not and
{ "all relevant fields are empty in " cite$ * warning$ }
'skip$
if$
}
FUNCTION {format.thesis.type}
{ type empty$
'skip$
{ pop$
type "t" change.case$
}
if$
}
FUNCTION {format.tr.number}
{ type empty$
{ "Tech. Rep." }
'type
if$
number empty$
{ "t" change.case$ }
{ number tie.or.space.connect }
if$
emphasize
}
FUNCTION {format.article.crossref}
{ key empty$
{ journal empty$
{ "need key or journal for " cite$ * " to crossref " * crossref *
warning$
""
}
{ "in {\em " journal * "\/}" * }
if$
}
{ "in" }
if$
" \cite{" * crossref * "}" *
}
FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
editor num.names$ duplicate$
#2 >
{ pop$ " et~al." * }
{ #2 <
'skip$
{ editor #2 "{f. }{vv }{ll}{ jj}" format.name$ "others" =
{ " et~al." * }
{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
if$
}
if$
}
if$
}
FUNCTION {format.book.crossref}
{ volume empty$
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
"in "
}
{ "Volume" volume tie.or.space.connect
" of " *
}
if$
editor empty$
editor field.or.null author field.or.null =
or
{ key empty$
{ series empty$
{ "need editor, key, or series for " cite$ * " to crossref " *
crossref * warning$
"" *
}
{ "{\em " * series * "\/}" * }
if$
}
{ key * }
if$
}
{ format.crossref.editor * }
if$
" \cite{" * crossref * "}" *
}
FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
editor field.or.null author field.or.null =
or
{ key empty$
{ booktitle empty$
{ "need editor, key, or booktitle for " cite$ * " to crossref " *
crossref * warning$
""
}
{ "in {\em " booktitle * "\/}" * }
if$
}
{ "in" }
if$
}
{ "in " format.crossref.editor * }
if$
" \cite{" * crossref * "}" *
}
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
author format.key output
output.year.check
before.all 'output.state :=
% new.block
format.title "title" output.check
new.block
crossref missing$
{ journal emphasize "journal" output.check
format.number.series output
format.vol.num.pages output
}
{ format.article.crossref output.nonnull
format.pages output
}
if$
format.note output
fin.entry
}
FUNCTION {book}
{ output.bibitem
author empty$
{ format.editors "author and editor" output.check
editor format.key output
}
{ format.authors output.nonnull
crossref missing$
{ "author and editor" editor either.or.check }
'skip$
if$
}
if$
output.year.check
before.all 'output.state :=
% new.block
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
% pages empty$
% { "pages empty in " cite$ * warning$}
% {format.pages output}
% if$
new.block
format.number.series output
new.sentence
% format.publisher "publisher" output.check
publisher "publisher" output.check
address output
}
{ new.block
format.book.crossref output.nonnull
}
if$
format.edition output
pages empty$
{ "pages empty in " cite$ * warning$}
{ format.pages output }
if$
% format.date "year" output.check
format.note output
fin.entry
}
FUNCTION {booklet}
{ output.bibitem
format.authors output
author format.key output % special for
output.year.check
before.all 'output.state :=
% new.block
format.title "title" output.check
new.block
howpublished output
address output
% format.date "year" output.check
format.note output
fin.entry
}
FUNCTION {inbook}
{ output.bibitem
author empty$
{ format.editors "author and editor" output.check
editor format.key output
}
{ format.authors output.nonnull
crossref missing$
{ "author and editor" editor either.or.check }
'skip$
if$
}
if$
output.year.check
before.all 'output.state :=
% new.block
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
% format.chapter.pages "chapter and pages" output.check
new.block
format.number.series output
new.sentence
publisher "publisher" output.check
address output
format.chapter.pages "chapter and pages" output.check
}
{ format.chapter.pages "chapter and pages" output.check
new.block
format.book.crossref output.nonnull
}
if$
format.edition output
% format.date "year" output.check
format.note output
fin.entry
}
FUNCTION {incollection}
{ output.bibitem
format.authors "author" output.check
author format.key output % special for
output.year.check
before.all 'output.state :=
% new.block
format.title "title" output.check
before.all 'output.state :=
new.block
crossref missing$
{ format.in.ed.booktitle "booktitle" output.check
format.number.series output
% format.chapter.pages output
new.sentence
% format.publisher "publisher" output.check
publisher "publisher" output.check
address output
format.edition output
format.chapter.pages output
}
{ format.incoll.inproc.crossref output.nonnull
format.chapter.pages output
}
if$
% format.date "year" output.check
format.note output
fin.entry
}
FUNCTION {inproceedings}
{ output.bibitem
format.authors "author" output.check
author format.key output % special for
output.year.check
before.all 'output.state :=
% new.block
format.title "title" output.check
new.block
crossref missing$
{ format.in.ed.booktitle "booktitle" output.check
format.number.series output
% format.pages output
address output % for apalike
new.sentence % there's no year
organization output % here so things
publisher output % are simpler
format.pages output
}
{ format.incoll.inproc.crossref output.nonnull
format.pages output
}
if$
% format.date "year" output.check
format.note output
fin.entry
}
FUNCTION {conference} { inproceedings }
FUNCTION {manual}
{ output.bibitem
format.authors output
author format.key output % special for
output.year.check
before.all 'output.state :=
% new.block
format.btitle "title" output.check
organization address new.block.checkb
organization output
address output
format.edition output
% format.date "year" output.check
note output
fin.entry
}
FUNCTION {mastersthesis}
{ output.bibitem
format.authors "author" output.check
author format.key output % special for
output.year.check
before.all 'output.state :=
% new.block
format.title "title" output.check
new.block
"Master's thesis" format.thesis.type output.nonnull
school "school" output.check
address output
% format.date "year" output.check
format.note output
fin.entry
}
FUNCTION {misc}
{ output.bibitem
format.authors output
author format.key output % special for
output.year.check
before.all 'output.state :=
% new.block
format.title output
new.block
howpublished output
% format.date output
format.note output
fin.entry
}
FUNCTION {phdthesis}
{ output.bibitem
format.authors "author" output.check
author format.key output % special for
output.year.check
before.all 'output.state :=
% new.block
format.title "title" output.check
new.block
"Ph.D. thesis" format.thesis.type output.nonnull
school "school" output.check
address output
% format.date "year" output.check
format.note output
fin.entry
}
FUNCTION {proceedings}
{ output.bibitem
format.editors output
editor format.key output % special for
output.year.check
before.all 'output.state :=
% new.block
format.btitle "title" output.check
format.bvolume output
format.number.series output
address output % for apalike
new.sentence % we always output
organization output % a nonempty organization
publisher output % here
% format.date "year" output.check
format.note output
fin.entry
}
FUNCTION {techreport}
{ output.bibitem
format.authors "author" output.check
author format.key output % special for
output.year.check
before.all 'output.state :=
% new.block
format.title "title" output.check
new.block
format.tr.number output.nonnull
% format.pages output.nonnull
institution "institution" output.check
address output
% format.date "year" output.check
format.pages output.nonnull
format.note output
fin.entry
}
FUNCTION {unpublished}
{ output.bibitem
format.authors "author" output.check
author format.key output % special for
output.year.check
before.all 'output.state :=
% new.block
format.title "title" output.check
% format.date "year" output.check
format.note output
fin.entry
}
FUNCTION {default.type} { misc }
MACRO {jan} {"Jan."}
MACRO {feb} {"Feb."}
MACRO {mar} {"Mar."}
MACRO {apr} {"Apr."}
MACRO {may} {"May"}
MACRO {jun} {"June"}
MACRO {jul} {"July"}
MACRO {aug} {"Aug."}
MACRO {sep} {"Sept."}
MACRO {oct} {"Oct."}
MACRO {nov} {"Nov."}
MACRO {dec} {"Dec."}
MACRO {acmcs} {"ACM 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"}
MACRO {jgr} {"J. Geophys. Res."}
MACRO {jpo} {"J. Phys. Oceanogr."}
MACRO {annals} {"Ann. Glaciol."}
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.
%
FUNCTION {format.lab.names}
{ 's :=
s #1 "{vv~}{ll}" format.name$
s num.names$ duplicate$
#2 >
{ pop$ " et~al." * }
{ #2 <
'skip$
{ s #2 "{f. }{vv }{ll}{ jj}" format.name$ "others" =
{ " et~al." * }
{ " and " * s #2 "{vv~}{ll}" format.name$ * }
if$
}
if$
}
if$
}
FUNCTION {author.key.label}
{ author empty$
{ key empty$
{ cite$ #1 #3 substring$ }
'key % 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 {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$
}
FUNCTION {calc.label}
{ type$ "book" =
type$ "inbook" =
or
'author.editor.key.label
{ type$ "proceedings" =
'editor.key.label
{ type$ "manual" =
'author.key.label
'author.key.label
if$
}
if$
}
if$
duplicate$
"\protect\citename{" swap$ * "}" *
year field.or.null purify$ *
'label :=
year field.or.null purify$ *
sortify 'sort.label :=
}
FUNCTION {sort.format.names}
{ 's :=
#1 'nameptr :=
""
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ nameptr #1 >
{ " " * }
'skip$
if$
s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
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 {author.organization.sort}
{ author empty$
{ organization empty$
{ key empty$
{ "to sort, need author, organization, or key in " cite$ * warning$
""
}
{ key sortify }
if$
}
{ "The " #4 organization chop.word sortify }
if$
}
{ author sort.format.names }
if$
}
FUNCTION {editor.organization.sort}
{ editor empty$
{ organization empty$
{ key empty$
{ "to sort, need editor, organization, or key in " cite$ * warning$
""
}
{ key sortify }
if$
}
{ "The " #4 organization chop.word sortify }
if$
}
{ editor sort.format.names }
if$
}
FUNCTION {editor.sort}
{ editor empty$
{ key empty$
{ "to sort, need editor or key in " cite$ * warning$
""
}
{ key sortify }
if$
}
{ editor sort.format.names }
if$
}
% 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
% label, sort.label, and title, and then concatenates.
FUNCTION {presort}
{ calc.label
label sortify
" "
*
type$ "book" =
type$ "inbook" =
or
'author.editor.sort
{ type$ "proceedings" =
'editor.sort
'author.sort
if$
}
if$
#1 entry.max$ substring$ % for
'sort.label := % apalike
sort.label % style
*
" "
*
title field.or.null
sort.format.title
*
#1 entry.max$ substring$
'sort.key$ :=
}
ITERATE {presort}
SORT % by label, sort.label, title---for final label calculation
STRINGS { last.label next.extra } % apalike labels are only for the text;
INTEGERS { last.extra.num } % there are none in the bibliography
FUNCTION {initialize.extra.label.stuff} % and hence there is no `longest.label'
{ #0 int.to.chr$ 'last.label :=
"" 'next.extra :=
#0 'last.extra.num :=
}
FUNCTION {forward.pass}
{ last.label label =
{ last.extra.num #1 + 'last.extra.num :=
last.extra.num int.to.chr$ 'extra.label :=
}
{ "a" chr.to.int$ 'last.extra.num :=
"" 'extra.label :=
label 'last.label :=
}
if$
}
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,
% on sort.label then year then title. 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
}
EXECUTE {begin.bib}
EXECUTE {init.state.consts}
ITERATE {call.type$}
FUNCTION {end.bib}
{ newline$
"\end{thebibliography}" write$ newline$
}
EXECUTE {end.bib}
###################################################################################
# This preamble takes care of the bibliography with three citations possible:
# \cite (a normal citation: "Bloggs [1998]")
# \xcite (citation(s) of the form "[Bloggs, 1998]" or "[Bloggs, 1998; Johnston,
2000]")
# \egcite (citation(s) of the form "[e.g. Bloggs, 1998]")
Preamble
%% Bibliography %%
% Allow short (name-less) citations, when used in
% conjunction with a bibliography style that creates labels like
% \citename{<names>, }<year>
\let\@internalcite\cite
\def\cite{\def\citename##1{{##1} [}\def\@cite##1##2{{##1\if@tempswa,
##2\fi}]}\@internalcite}
\def\xcite{\def\citename##1{{##1}, } \def\@cite##1##2{[{##1\if@tempswa,
##2\fi}]}\@internalcite}
\def\egcite{\def\citename##1{{##1}, } \def\@cite##1##2{[e.g. {##1\if@tempswa,
##2\fi}]}\@internalcite}
\def\@biblabel#1{\def\citename##1{##1}[#1]\hfill}
\def\thebibliography#1{\section*{References\markboth
{REFERENCES}{REFERENCES}}\list
%% default is no labels, for those not using \cite or BibTeX
{}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
\advance\leftmargin\labelsep
\usecounter{enumi}\@bibsetup}
\def\newblock{\hskip .11em plus .33em minus -.07em}
\sloppy
\sfcode`\.=1000\relax}
% Don't put the citation in an hbox.
\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
\def\@citea{}\@cite{\@for\@citeb:=#2\do
{\@citea\def\@citea{\@citesep}\@ifundefined
{b@\@citeb}{{\bf ?}\@warning
{Citation `\@citeb' on page \thepage \space undefined}}%
{\csname b@\@citeb\endcsname}}}{#1}}
% Set length of hanging indentation for bibliography entries
%
\newlength{\bibhang}
\setlength{\bibhang}{0em}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% NOTE: \itemsep and \parsep HAS BEEN CHANGED TO 5pt FROM 0pt IN ORIGINAL
% (Modified by Neil Holbrook on 8 APRIL 1994.)
% undent first line of a reference by using negative \itemindent.
% set \itemsep and \parsep to 5pt so there is a 5pt space between items.
\def\@bibsetup{\itemindent=-\leftmargin \itemsep=2pt \parsep=2pt \small}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Use a semicolon instead of a comma between multiple citations.
\def\@citesep{; }
\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}
% square brackets instead of the round parens that most nat. sci.
% publications use.
\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}
% parentheses
\def\@cite#1#2{({#1\if@tempswa , #2\fi})}
% Definition of \@cite moved into definition of \cite, \shortcite and \xcite
% to allow citation form Hardy (1990) using \xcite
% Labels should not be printed in References
\def\@biblabel#1{}
%\def\@biblabel#1{\hfill}
EndPreamble
#####################################################################################