Last active
May 1, 2019 13:58
A BibTeX style file for the Journal of Neurophysiology. Based on the J Neuroscience style by Matthias Hennig http://www.ctan.org/tex-archive/biblio/bibtex/contrib/jneurosci/ Makes use of the Journal Abbreviation Package http://www.compholio.com/latex/jabbrv/, use with the noperiod option.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% This is a slightly modified version of the jneuroscience style, which itself is based on the namedplus style. | |
% Last modified 2014 July 01 by Thomas McColgan | |
% | |
% version = 0.1 of jneurophysiol.bst 2014 July 01 | |
% | |
% Currently only @article and @incollection entries have been checked to conform with the formatting. | |
% | |
% This style makes use of the Automatic Journal Title Abbreviation Package, which can be obtained at | |
% http://www.compholio.com/latex/jabbrv/ | |
% Include it by adding \usepackage[noperiod]{jabbrv} to your preamble. | |
% | |
% This is a modified version of the namedplus style by: | |
% ----------------------------------------------------- | |
% A. David Redish adr@nsma.arizona.edu | |
% Post-doc http://www.cs.cmu.edu/~dredish | |
% Neural Systems, Memory and Aging, Univ of AZ, Tucson AZ | |
% ----------------------------------------------------- | |
% | |
% which was in turn modified by: | |
% Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU) | |
% | |
% and modified by: | |
% Matthias H Hennig, University of Edinburgh, mhennig at inf.ed.ac.uk | |
% | |
% and then again modified to conform J Neurophysiol requirements by Thomas McColgan thomas dot mccolgan at gmail dot com | |
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 } | |
FUNCTION {output.nonnull} | |
{ 's := | |
output.state mid.sentence = | |
{ ", " * write$ } | |
{ output.state after.block = | |
{ " " * write$ %add.period$ write$ | |
newline$ | |
"\newblock " write$ | |
} | |
{ output.state before.all = | |
'write$ | |
{ add.period$ " " * write$ } | |
if$ | |
} | |
if$ | |
mid.sentence 'output.state := | |
} | |
if$ | |
s | |
} | |
FUNCTION {add.comma} | |
{ | |
{ "," * } | |
} | |
FUNCTION {output.nonnulldot} | |
{ '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 {output.checkdot} | |
{ 't := | |
duplicate$ empty$ | |
{ pop$ "empty " t * " in " * cite$ * warning$ } | |
'output.nonnulldot | |
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 := } | |
if$ | |
} | |
FUNCTION {new.sentence} | |
{ output.state after.block = | |
'skip$ | |
{ output.state before.all = | |
'skip$ | |
{ after.sentence 'output.state := } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {not} | |
{ { #0 } | |
{ #1 } | |
if$ | |
} | |
FUNCTION {and} | |
{ 'skip$ | |
{ pop$ #0 } | |
if$ | |
} | |
FUNCTION {or} | |
{ { pop$ #1 } | |
'skip$ | |
if$ | |
} | |
FUNCTION {new.block.checka} | |
{ empty$ | |
'skip$ | |
'new.block | |
if$ | |
} | |
FUNCTION {new.block.checkb} | |
{ empty$ | |
swap$ empty$ | |
and | |
'skip$ | |
'new.block | |
if$ | |
} | |
FUNCTION {new.sentence.checka} | |
{ empty$ | |
'skip$ | |
'new.sentence | |
if$ | |
} | |
FUNCTION {new.sentence.checkb} | |
{ empty$ | |
swap$ empty$ | |
and | |
'skip$ | |
'new.sentence | |
if$ | |
} | |
FUNCTION {field.or.null} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
'skip$ | |
if$ | |
} | |
FUNCTION {format.journal} | |
{ | |
"{\em\JournalTitle{" journal * "}}" * | |
} | |
FUNCTION {emphasize} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ "{\em " swap$ * "}" * } | |
if$ | |
} | |
FUNCTION {bold} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ "{\bf " swap$ * "}" * } | |
if$ | |
} | |
INTEGERS { nameptr namesleft numnames } | |
STRINGS { lclfrmtstr} % local format string | |
FUNCTION {format.names} | |
{ | |
's := % 1 s = current stack | |
#1 'nameptr := % 2 nameptr = 1 | |
s num.names$ 'numnames := % 3 numnames = how many names in stack | |
numnames 'namesleft := % 4 namesleft = numnames | |
{ namesleft #0 > } % 5 is namesleft > 0? | |
{ | |
% mhh, 8.7.2002, JNS likes this best! | |
"{vv~}{ll}{ j{}}{ f{}}" 'lclfrmtstr := | |
s nameptr lclfrmtstr format.name$ 't := | |
nameptr #1 > % 7 is nameptr > 1? | |
{ namesleft #1 > % 8 is namesleft > 1? | |
{ ", " * t * } % 9 concat(, and t) | |
{ numnames #2 > % 10 is numnames > 2? | |
{ "" * } % 11 concat(current stack and ,) | |
'skip$ % 12 skip | |
if$ % 13 if (10 is true) then run 11 else 12 | |
t "others" = % 14 is t == others? | |
{ " et~al." * } % 15 concat (current stack and et~al.) | |
{ ", " * t * } % 16 concat (and and t) | |
if$ % 17 if (14 is true) then run 15 else 16 | |
} % 18 close 10 | |
if$ % 19 if (8 is true) then run 9 else run 10-18 | |
} % 20 close 8 | |
't % 21 push t | |
if$ % 22 if (7 is true) then run 8-20 else run 21 | |
nameptr #1 + 'nameptr := % 23 nameptr = nameptr + 1 | |
namesleft #1 - 'namesleft := % 24 namesleft = namesleft - 1 | |
} % 25 close 6 | |
while$ % while (5 is true) run 6-25 | |
} | |
FUNCTION {format.authors} | |
{ author empty$ | |
{ "" } | |
{ author format.names bold } | |
if$ | |
} | |
FUNCTION {format.key} % this function is just for apalike | |
{ empty$ | |
{ key field.or.null } | |
{ "" } | |
if$ | |
} | |
FUNCTION {format.editors} | |
{ editor empty$ | |
{ "" } | |
{ "edited by " editor format.names *} | |
if$ | |
} | |
FUNCTION {format.title} | |
{ title empty$ | |
{ "" } | |
{ title "t" change.case$ } | |
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 * } | |
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 * | |
series empty$ | |
'skip$ | |
{ " of " * series emphasize * } | |
if$ | |
"volume and number" number either.or.check | |
} | |
if$ | |
} | |
FUNCTION {format.number.series} | |
{ volume empty$ | |
{ number empty$ | |
{ series field.or.null } | |
{ output.state mid.sentence = | |
{ "number" } | |
{ "Number" } | |
if$ | |
number tie.or.space.connect | |
series empty$ | |
{ "there's a number but no series in " cite$ * warning$ } | |
{ " in " * series * } | |
if$ | |
} | |
if$ | |
} | |
{ "" } | |
if$ | |
} | |
FUNCTION {format.edition} | |
{ edition empty$ | |
{ "" } | |
{ output.state mid.sentence = | |
{ edition "l" change.case$ " edition" * } | |
{ edition "t" change.case$ " edition" * } | |
if$ | |
} | |
if$ | |
} | |
INTEGERS { multiresult } | |
FUNCTION {multi.page.check} | |
{ 't := | |
#0 'multiresult := | |
{ multiresult not | |
t empty$ not | |
and | |
} | |
{ t #1 #1 substring$ | |
duplicate$ "-" = | |
swap$ duplicate$ "," = | |
swap$ "+" = | |
or or | |
{ #1 'multiresult := } | |
{ t #2 global.max$ substring$ 't := } | |
if$ | |
} | |
while$ | |
multiresult | |
} | |
FUNCTION {format.pages} | |
{ pages empty$ | |
{ "" } | |
{ pages multi.page.check | |
{ "\mbox{p. " pages n.dashify * "}" *} | |
{ "\mbox{p. " pages * "}" * } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.vol.num.pages} | |
{ volume field.or.null | |
number empty$ | |
'skip$ | |
{ %"(" number * ")" * * % JNS needs no number | |
volume empty$ | |
{ "there's a number but no volume in " cite$ * warning$ } | |
'skip$ | |
if$ | |
} | |
if$ | |
pages empty$ | |
'skip$ | |
{ duplicate$ empty$ | |
{ pop$ format.pages } | |
{ ": \mbox{" * pages n.dashify * "}" *} % ADR 21 DEC 1998 added ":~" and \mbox{pages} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.chapter.pages} | |
{ chapter empty$ | |
'format.pages | |
{ type empty$ | |
{ "chapter" } | |
{ type "l" change.case$ } | |
if$ | |
chapter tie.or.space.connect | |
pages empty$ | |
'skip$ | |
{ ", " * format.pages * } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.in.ed.booktitle} | |
{ booktitle empty$ | |
{ "" } | |
{ editor empty$ | |
{ "In: " booktitle emphasize * } | |
{ "In: " booktitle emphasize * ", " * format.editors *} | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {empty.misc.check} | |
{ author empty$ title empty$ howpublished empty$ | |
month empty$ year empty$ note empty$ | |
and and and and and | |
key empty$ not and | |
{ "all relevant fields are empty in " cite$ * warning$ } | |
'skip$ | |
if$ | |
} | |
FUNCTION {format.thesis.type} | |
{ type empty$ | |
'skip$ | |
{ pop$ | |
type "t" change.case$ | |
} | |
if$ | |
} | |
FUNCTION {format.tr.number} | |
{ type empty$ | |
{ "Technical report" } | |
'type | |
if$ | |
number empty$ | |
{ "t" change.case$ } | |
{ number tie.or.space.connect } | |
if$ | |
} | |
FUNCTION {format.dotarticle.crossref} | |
{ key empty$ | |
{ journal empty$ | |
{ "need key or journal for " cite$ * " to crossref " * crossref * | |
warning$ | |
"" | |
} | |
{ "In {\em " journal * "\/}" * } | |
if$ | |
} | |
{ "In " key * } | |
if$ | |
" \shortcite{" * crossref * "}" * | |
} | |
FUNCTION {format.crossref.editor} | |
{ editor #1 "{vv~}{ll}" format.name$ | |
editor num.names$ duplicate$ | |
#2 > | |
{ pop$ " et~al." * } | |
{ #2 < | |
'skip$ | |
{ editor #2 "{ff }{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 " | |
} | |
{ "Vol." 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$ | |
" \shortcite{" * 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 " key * } | |
if$ | |
} | |
{ "In " format.crossref.editor * } | |
if$ | |
" \shortcite{" * crossref * "}" * | |
} | |
FUNCTION {format.article.crossref} | |
{ key empty$ | |
{ journal empty$ | |
{ "need key or journal for " cite$ * " to crossref " * crossref * | |
warning$ | |
"" | |
} | |
{ "In {\em " journal * "\/}" * } | |
if$ | |
} | |
{ "In " key * } | |
if$ | |
" \shortcite{" * crossref * "}" * | |
} | |
FUNCTION {article} | |
{ output.bibitem | |
format.authors bold "author" output.check | |
author format.key output % special for | |
add.period$ | |
new.block | |
format.title "title" output.check | |
new.block | |
crossref missing$ | |
{ format.journal "journal" output.checkdot | |
"~" * format.vol.num.pages * | |
} | |
{ format.article.crossref output.nonnull | |
format.pages output | |
} | |
if$ ", " * | |
new.block | |
output.year.check | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {book} | |
{ output.bibitem | |
author empty$ | |
{ format.editors "author and editor" output.check | |
editor format.key output | |
} | |
{ format.authors output.nonnull | |
crossref missing$ | |
{ "author and editor" editor either.or.check } | |
'skip$ | |
if$ | |
} | |
if$ | |
new.block | |
format.btitle "title" output.check | |
crossref missing$ | |
{ format.bvolume output | |
new.block | |
format.number.series output | |
new.sentence | |
publisher "publisher" output.check | |
address output | |
} | |
{ new.block | |
format.book.crossref output.nonnull | |
} | |
if$ | |
format.edition output | |
", " * | |
new.block | |
output.year.check | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {booklet} | |
{ output.bibitem | |
format.authors output | |
author format.key output % special for | |
output.year.check % apalike | |
new.block | |
format.title "title" output.check | |
new.block | |
howpublished output | |
address output | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {inbook} | |
{ output.bibitem | |
author empty$ | |
{ format.editors "author and editor" output.check | |
editor format.key output | |
} | |
{ format.authors output.nonnull | |
crossref missing$ | |
{ "author and editor" editor either.or.check } | |
'skip$ | |
if$ | |
} | |
if$ | |
output.year.check % special for apalike | |
new.block | |
format.btitle "title" output.check | |
crossref missing$ | |
{ format.bvolume output | |
format.chapter.pages "chapter and pages" output.check | |
new.block | |
format.number.series output | |
new.sentence | |
publisher "publisher" output.check | |
address output | |
} | |
{ format.chapter.pages "chapter and pages" output.check | |
new.block | |
format.book.crossref output.nonnull | |
} | |
if$ | |
format.edition output | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {incollection} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % special for | |
format.title "title" output.check | |
new.block | |
crossref missing$ | |
{ format.in.ed.booktitle "booktitle" output.check | |
format.bvolume output | |
format.number.series output | |
new.sentence | |
publisher "publisher" output.check | |
address output | |
format.edition output | |
} | |
{ format.incoll.inproc.crossref output.nonnull | |
format.chapter.pages output | |
} | |
if$ | |
format.edition output | |
", " * | |
new.block | |
output.year.check | |
new.block | |
format.chapter.pages output | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {inproceedings} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % special for | |
output.year.check % apalike | |
new.block | |
format.title "title" output.check | |
new.block | |
crossref missing$ | |
{ format.in.ed.booktitle "booktitle" output.check | |
format.bvolume output | |
format.number.series output | |
format.pages output | |
address output % for apalike | |
new.sentence % there's no year | |
organization output % here so things | |
publisher output % are simpler | |
} | |
{ format.incoll.inproc.crossref output.nonnull | |
format.pages output | |
} | |
if$ | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {conference} { inproceedings } | |
FUNCTION {manual} | |
{ output.bibitem | |
format.authors output | |
author format.key output % special for | |
output.year.check % apalike | |
new.block | |
format.btitle "title" output.check | |
organization address new.block.checkb | |
organization output | |
address output | |
format.edition output | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {mastersthesis} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % special for | |
output.year.check % apalike | |
new.block | |
format.title "title" output.check | |
new.block | |
"Master's thesis" format.thesis.type output.nonnull | |
school "school" output.check | |
address output | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {misc} | |
{ output.bibitem | |
format.authors output | |
author format.key output % special for | |
output.year.check % apalike | |
new.block | |
format.title output | |
new.block | |
howpublished output | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {phdthesis} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % special for | |
output.year.check % apalike | |
new.block | |
title "title" output.check | |
new.block | |
"Ph.D. diss." format.thesis.type output.nonnull | |
school "school" output.check | |
address output | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {proceedings} | |
{ output.bibitem | |
format.editors output | |
editor format.key output % special for | |
output.year.check % apalike | |
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 | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {techreport} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % special for | |
output.year.check % apalike | |
new.block | |
format.title "title" output.check | |
new.block | |
format.tr.number output.nonnull | |
institution "institution" output.check | |
address output | |
new.block | |
note output | |
fin.entry | |
} | |
FUNCTION {unpublished} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % special for | |
output.year.check % apalike | |
new.block | |
format.title "title" output.check | |
new.block | |
note "note" output.check | |
fin.entry | |
} | |
FUNCTION {default.type} { misc } | |
MACRO {jan} {"January"} | |
MACRO {feb} {"February"} | |
MACRO {mar} {"March"} | |
MACRO {apr} {"April"} | |
MACRO {may} {"May"} | |
MACRO {jun} {"June"} | |
MACRO {jul} {"July"} | |
MACRO {aug} {"August"} | |
MACRO {sep} {"September"} | |
MACRO {oct} {"October"} | |
MACRO {nov} {"November"} | |
MACRO {dec} {"December"} | |
MACRO {acmcs} {"ACM Computing Surveys"} | |
MACRO {acta} {"Acta Informatica"} | |
MACRO {cacm} {"Communications of the ACM"} | |
MACRO {ibmjrd} {"IBM Journal of Research and Development"} | |
MACRO {ibmsj} {"IBM Systems Journal"} | |
MACRO {ieeese} {"IEEE Transactions on Software Engineering"} | |
MACRO {ieeetc} {"IEEE Transactions on Computers"} | |
MACRO {ieeetcad} | |
{"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} | |
MACRO {ipl} {"Information Processing Letters"} | |
MACRO {jacm} {"Journal of the ACM"} | |
MACRO {jcss} {"Journal of Computer and System Sciences"} | |
MACRO {scp} {"Science of Computer Programming"} | |
MACRO {sicomp} {"SIAM Journal on Computing"} | |
MACRO {tocs} {"ACM Transactions on Computer Systems"} | |
MACRO {tods} {"ACM Transactions on Database Systems"} | |
MACRO {tog} {"ACM Transactions on Graphics"} | |
MACRO {toms} {"ACM Transactions on Mathematical Software"} | |
MACRO {toois} {"ACM Transactions on Office Information Systems"} | |
MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} | |
MACRO {tcs} {"Theoretical Computer Science"} | |
READ | |
FUNCTION {sortify} | |
{ purify$ | |
"l" change.case$ | |
} | |
INTEGERS { len } | |
FUNCTION {chop.word} | |
{ 's := | |
'len := | |
s #1 len substring$ = | |
{ s len #1 + global.max$ substring$ } | |
's | |
if$ | |
} | |
INTEGERS { et.al.char.used } | |
FUNCTION {initialize.et.al.char.used} | |
{ #0 'et.al.char.used := | |
} | |
EXECUTE {initialize.et.al.char.used} | |
FUNCTION {format.lab.names} | |
{ 's := % 1 s = top of stack | |
s num.names$ 'numnames := % 2 numnames = num names in s | |
numnames #1 = % 3 is numnames == 1 | |
{ s #1 "{vv }{ll}" format.name$ } % 4 format 1 name | |
{ numnames #2 = % 5 is numnames == 2 | |
{ s #1 "{vv }{ll} and " format.name$ | |
s #2 "{vv }{ll}" format.name$ * | |
} | |
% 6 format 2 names | |
{ numnames #3 = % 7 is numnames == 3 | |
{ s #1 "{vv }{ll} " format.name$ | |
"\bgroup et al.\egroup " * } | |
% s #2 "{vv }{ll}, and " format.name$ * | |
% s #3 "{vv }{ll}" format.name$ *} | |
% 8 format 3 names | |
{ s #1 "{vv }{ll } " format.name$ | |
"\bgroup et al.\egroup " * } | |
% 9 format many names | |
if$ % 10 if 7 then 8 else 9 | |
} % 11 close 7 | |
if$ % 12 if (5) then 6 else 7-11 | |
} % 13 close 5 | |
if$ % 14 if 3 is true then 4 else 5-13 | |
} | |
FUNCTION {old.old.old.format.lab.names} | |
{ 's := % 1 s = top of stack | |
s num.names$ 'numnames := % 2 numnames = num names in s | |
numnames #1 = % 3 is numnames == 1 | |
{ s #1 "{vv }{ll}" format.name$ } % 4 format 1 name | |
{ numnames #2 = % 5 is numnames == 2 | |
{ s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * | |
} | |
% 6 format 2 names | |
{ s #1 "{vv }{ll }\bgroup \em et al.\egroup " format.name$ } | |
% 7 format many names | |
if$ % 8 if (5) then 6 else 7 | |
} % 9 close 5 | |
if$ % 10 if 3 is true then 4 else 5-9 | |
} | |
FUNCTION {author.key.label} | |
{ author empty$ | |
{ key empty$ | |
{ cite$ #1 #3 substring$ } | |
{ key } | |
if$ | |
} | |
{ author format.lab.names } | |
if$ | |
} | |
FUNCTION {author.editor.key.label} | |
{ author empty$ | |
{ editor empty$ | |
{ key empty$ | |
{ cite$ #1 #3 substring$ } | |
{ key } | |
if$ | |
} | |
{ editor format.lab.names } | |
if$ | |
} | |
{ author format.lab.names } | |
if$ | |
} | |
FUNCTION {author.key.organization.label} | |
{ author empty$ | |
{ key empty$ | |
{ organization empty$ | |
{ cite$ #1 #3 substring$ } | |
{ "The " #4 organization chop.word #3 text.prefix$ } | |
if$ | |
} | |
{ key } | |
if$ | |
} | |
{ author format.lab.names } | |
if$ | |
} | |
FUNCTION {editor.key.organization.label} | |
{ editor empty$ | |
{ key empty$ | |
{ organization empty$ | |
{ cite$ #1 #3 substring$ } | |
{ "The " #4 organization chop.word #3 text.prefix$ } | |
if$ | |
} | |
{ key } | |
if$ | |
} | |
{ editor format.lab.names } | |
if$ | |
} | |
FUNCTION {calc.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$ | |
"\protect\citeauthoryear{" swap$ * "}{" * | |
year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989 | |
'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 := | |
t sortify * | |
nameptr #1 + 'nameptr := | |
namesleft #1 - 'namesleft := | |
} | |
while$ | |
} | |
FUNCTION {old.sort.format.names.old} | |
{ '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 {presort} | |
{ | |
calc.label | |
type$ "book" = | |
type$ "inbook" = | |
or | |
'author.editor.sort | |
{ type$ "proceedings" = | |
'editor.organization.sort | |
{ type$ "manual" = | |
'author.organization.sort | |
'author.sort | |
if$ | |
} | |
if$ | |
} | |
if$ | |
" " * | |
year field.or.null sortify * | |
" " * | |
title field.or.null | |
sort.format.title * | |
#1 entry.max$ substring$ | |
'sort.key$ := | |
} | |
ITERATE {presort} | |
SORT | |
STRINGS { longest.label last.sort.label next.extra } | |
INTEGERS { longest.label.width last.extra.num } | |
FUNCTION {initialize.longest.label} | |
{ "" 'longest.label := | |
#0 int.to.chr$ 'last.sort.label := | |
"" 'next.extra := | |
#0 'longest.label.width := | |
#0 'last.extra.num := | |
} | |
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$ | |
} | |
FUNCTION {reverse.pass} | |
{ next.extra "b" = | |
{ "a" 'extra.label := } | |
'skip$ | |
if$ | |
label extra.label * "}" * 'label := % CHANGED - pfps 15 Feb 1989 | |
label width$ longest.label.width > | |
{ label 'longest.label := | |
label width$ 'longest.label.width := | |
} | |
'skip$ | |
if$ | |
extra.label 'next.extra := | |
} | |
EXECUTE {initialize.longest.label} | |
ITERATE {forward.pass} | |
REVERSE {reverse.pass} | |
FUNCTION {begin.bib} | |
{ et.al.char.used | |
{ "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ } | |
'skip$ | |
if$ | |
preamble$ empty$ | |
'skip$ | |
{ preamble$ write$ newline$ } | |
if$ | |
"\begin{thebibliography}{}" write$ newline$ | |
} | |
EXECUTE {begin.bib} | |
EXECUTE {init.state.consts} | |
ITERATE {call.type$} | |
FUNCTION {end.bib} | |
{ newline$ | |
"\end{thebibliography}" write$ newline$ | |
} | |
EXECUTE {end.bib} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment