Last active
December 18, 2016 10:46
-
-
Save anamewing/33860ec263fe5a165a8d904c32c4f6e7 to your computer and use it in GitHub Desktop.
A modification on DOI support of ASME LaTeX template bibliographic style file asmems4.bst
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
% ASME Transactions bibliography style (25-Aug-03 version) | |
% Adapted from parts of unsrt, acm, and apalike, but: | |
% Author names come out "Last, initials" as in acm and apalike; | |
% Author name(s) are in \rm like apalike, not \sc as in acm; | |
% Year follows name(s) of author(s) as in apalike, but not inside parentheses; | |
% Periodical volume number is in \bf; | |
% Periodical number is inside parentheses as in unsrt; | |
% Pages use pp as in acm. | |
% | |
% History | |
% 2/ 6/86 (HWT) Original `acm' version, by Howard Trickey. | |
% 3/ 5/86 (HWT) Put in pp. everywhere but articles, as per ACM style. | |
% 1/24/88 (OP&HWT) Updated for BibTeX version 0.99a, Oren Patashnik; | |
% corrected the abbreviations to "Mar." and "Sept."; | |
% SINCE THE `acm' VERSION ON WHICH THIS 'asmems4' | |
% version WAS BASED DOES NOT WORK WITH BIBTEX 0.98i, | |
% DON"T EXPECT 'asmems4' TO WORK WITH | |
% BIBTEX 0.98i EITHER. | |
% 1/1/03 (GRS) `acm' blended with 'unsrt' and 'apalike' to create | |
% 'asmems4' | |
% 8/25/03 (GRS) removed brackets surrounding month in article citations | |
% 1/9/05 (GRS) modified article to: | |
% remove space between volume and (number) | |
% adjust spaces and commas for all number/month combinations | |
% ensure journal is always italicized | |
% put Thesis Title within quotes instead of italics | |
% modified proceedings and inproceedings to | |
% capitalize Vol. | |
% uncapitalize ed. and eds. | |
% | |
% 12/18/16 added DOI support, follows elsarticle-model-wise-bst-2.1 | |
% http://support.river-valley.com/wiki/index.php?title=Model-wise_bibliographic_style_files | |
ENTRY | |
{ address | |
author | |
booktitle | |
chapter | |
edition | |
editor | |
howpublished | |
institution | |
journal | |
key | |
month | |
note | |
number | |
organization | |
pages | |
publisher | |
school | |
series | |
title | |
type | |
volume | |
year | |
doi | |
} | |
{} | |
{ 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 doiprefix } | |
FUNCTION {init.web.variables} | |
{ | |
"\DOIprefix" 'doiprefix := | |
} | |
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$ | |
} | |
% asmems4 uses this function to | |
% put the year after the author(s); | |
% asmems4 ignores the month | |
FUNCTION {output.year.check} | |
{ year empty$ | |
{ "empty year in " cite$ * warning$ } | |
{ write$ | |
", " year * "." * | |
mid.sentence 'output.state := | |
} | |
if$ | |
} | |
FUNCTION {output.bibitem} | |
{ newline$ | |
"\bibitem{" 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 {field.or.null} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
'skip$ | |
if$ | |
} | |
FUNCTION {emphasize} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ "{\em " swap$ * "}" * } | |
if$ | |
} | |
FUNCTION {emphasizeic} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ "{\em " swap$ * "\/}" * } | |
if$ | |
} | |
FUNCTION {scapify} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ "{\sc " swap$ * "}" * } | |
if$ | |
} | |
% asmems4 uses this function to | |
% put quotes around the title | |
% of an article as required by ASME | |
FUNCTION {inquotes} | |
{ duplicate$ empty$ | |
{ pop$ "" } | |
{ "``" swap$ * "''" * } | |
if$ | |
} | |
INTEGERS { nameptr namesleft numnames } | |
FUNCTION {format.names} | |
{ 's := | |
#1 'nameptr := | |
s num.names$ 'numnames := | |
numnames 'namesleft := | |
{ namesleft #0 > } | |
{ s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := % last name first | |
nameptr #1 > | |
{ namesleft #1 > | |
{ ", " * t * } | |
{ t "others" = | |
{ ", et~al." * } | |
{ ", and " * t * } | |
if$ | |
} | |
if$ | |
} | |
't | |
if$ | |
nameptr #1 + 'nameptr := | |
namesleft #1 - 'namesleft := | |
} | |
while$ | |
} | |
% For names inside entries (e.g., editors of an "In ..."); | |
% this is a copy of ABBRV.BST's `format.names' function | |
% renamed to 'format.innames'. | |
FUNCTION {format.innames} | |
{ 's := | |
#1 'nameptr := | |
s num.names$ 'numnames := | |
numnames 'namesleft := | |
{ namesleft #0 > } | |
{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := | |
nameptr #1 > | |
{ namesleft #1 > | |
{ ", " * t * } | |
{ numnames #2 > | |
{ "," * } | |
'skip$ | |
if$ | |
t "others" = | |
{ " et~al." * } | |
{ " and " * t * } | |
if$ | |
} | |
if$ | |
} | |
't | |
if$ | |
nameptr #1 + 'nameptr := | |
namesleft #1 - 'namesleft := | |
} | |
while$ | |
} | |
FUNCTION {format.authors} | |
{ author empty$ | |
{ "" } | |
% { author format.names scapify } % ASME doesn't want names scapified, | |
{ author format.names } % so don't. | |
if$ | |
} | |
FUNCTION {format.key} % this function came to asmems4 from apalike | |
{ empty$ | |
{ key field.or.null } | |
{ "" } | |
if$ | |
} | |
FUNCTION {format.editors} | |
{ editor empty$ | |
{ "" } | |
% { editor format.names scapify % ASME doesn't want names scapified, | |
{ editor format.names % so don't. | |
editor num.names$ #1 > | |
% { ", Eds." * } | |
% { ", Ed." * } | |
{ ", eds." * } % ASME wants ed./eds instead of Ed./Eds. | |
{ ", ed." * } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.ineditors} | |
{ editor empty$ | |
{ "" } | |
{ editor format.innames | |
editor num.names$ #1 > | |
% { ", Eds." * } | |
% { ", Ed." * } | |
{ ", eds." * } % ASME wants ed./eds instead of Ed./Eds. | |
{ ", ed." * } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.title} | |
{ title empty$ | |
{ "" } | |
{ title "t" change.case$ } | |
if$ | |
} | |
FUNCTION {print.doi} | |
{doi duplicate$ empty$ | |
{ pop$ "" } | |
{ new.sentence | |
doiprefix "\doi{" * swap$ * "}" * | |
} | |
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 % ASME wants the year after the author | |
% { month " " * year * } % rather than here so | |
{ "" } % print nothing if month is empty | |
{ month } % or just the month if month is full. | |
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 * | |
{ "Vol.~" volume * % ASME wants Vol. instead of vol. | |
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 = | |
{ "no.~" } | |
{ "No.~" } | |
if$ | |
number * | |
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$ "~ed." * } | |
{ edition "t" change.case$ "~ed." * } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.pages} | |
{ pages empty$ | |
{ "" } | |
{ pages n.dashify } | |
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.pp.pages} | |
{ pages empty$ | |
{ "" } | |
{ pages multi.page.check | |
{ "pp.~" pages n.dashify * } | |
{ "p.~" pages * } | |
if$ | |
} | |
if$ | |
} | |
FUNCTION {format.journal.vol.num.date} | |
{ journal empty$ | |
{ "empty journal in " cite$ * warning$ | |
"" | |
} | |
{ journal | |
volume empty$ | |
'skip$ | |
{ ", {\bf " * volume * "}" * } % asme wants volume in \bf | |
if$ | |
number empty$ | |
{ month empty$ | |
{ emphasize "" * } | |
{ emphasize ", " * format.date * } | |
if$ | |
} | |
{ month empty$ | |
{ emphasize "(" * number * ")" * } | |
{ emphasize "(" * number * "), " * format.date * } | |
if$ | |
} | |
if$ %end of number empty | |
} % end of journal | |
if$ % end of journal empty$ | |
} | |
FUNCTION {format.chapter.pages} | |
{ chapter empty$ | |
'format.pp.pages | |
{ type empty$ | |
{ "ch.~" chapter * } | |
{ type "l" change.case$ chapter tie.or.space.connect } | |
if$ | |
pages empty$ | |
'skip$ | |
{ ", " * format.pp.pages * } | |
if$ | |
} | |
if$ | |
} | |
%FUNCTION {format.pages.chapter} | |
% This function isn't implemented as of 1/9/2005 | |
% It's still a copy of format.chapter.pages | |
%{ chapter empty$ | |
% 'format.pp.pages | |
% { type empty$ | |
% { "ch.~" chapter * } | |
% { type "l" change.case$ chapter tie.or.space.connect } | |
% if$ | |
% pages empty$ | |
% 'skip$ | |
% { ", " * format.pp.pages * } | |
% if$ | |
% } | |
% if$ | |
%} | |
FUNCTION {format.in.ed.booktitle} | |
{ booktitle empty$ | |
{ "" } | |
{ "In " booktitle emphasize * | |
editor empty$ | |
'skip$ | |
{ ", " * format.ineditors * } | |
if$ | |
} | |
if$ | |
} | |
% Proceedings titles don't have an (address, date) appended in ASME | |
% bibliographies so forget the following function. | |
% The proceedings title (it's on the stack) gets an (address, date) appended | |
%FUNCTION {format.proc.date} | |
%{ duplicate$ empty$ | |
% { pop$ "" } | |
% { year empty$ | |
% { "empty year in " cite$ * warning$ | |
% address empty$ | |
% 'emphasize | |
% { emphasizeic | |
% " (" * address * ")" * | |
% } | |
% if$ | |
% } | |
% { emphasizeic | |
% " (" * | |
% address empty$ | |
% 'skip$ | |
% { address * ", " * } | |
% if$ | |
% format.date * | |
% ")" * | |
% } | |
% if$ | |
% } | |
% if$ | |
%} | |
FUNCTION {format.in.proc.date} | |
{ booktitle empty$ | |
{ "" } | |
% { "In " booktitle format.proc.date * } % ASME doesn't want the date | |
{ "In " booktitle * } % here so leave it out | |
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$ | |
} | |
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$ | |
" \cite{" * 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 * | |
" 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 " key * } | |
if$ | |
} | |
{ "In " format.crossref.editor * } | |
if$ | |
" \cite{" * crossref * "}" * | |
} | |
FUNCTION {article} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
new.block | |
format.title "title" output.check inquotes % enclose title within quotes | |
new.block | |
crossref missing$ | |
{ format.journal.vol.num.date output | |
% format.pages output % ASME wants pp pages | |
format.pp.pages output % so add the pp | |
} | |
{ format.article.crossref output.nonnull | |
format.pp.pages output | |
} | |
if$ | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {book} | |
{ output.bibitem | |
author empty$ | |
{ format.editors "author and editor" output.check } | |
{ format.authors output.nonnull | |
crossref missing$ | |
{ "author and editor" editor either.or.check } | |
'skip$ | |
if$ | |
} | |
if$ | |
output.year.check % ASME puts year after author(s) | |
new.block | |
format.btitle "title" output.check | |
format.edition output | |
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.date "year" output.check % don't check for year here because | |
format.date output % ASME puts year after author(s) | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {booklet} | |
{ output.bibitem | |
format.authors output | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
new.block | |
format.title "title" output.check | |
howpublished address new.block.checkb | |
howpublished output | |
address output | |
format.date output | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {inbook} | |
{ output.bibitem | |
author empty$ | |
{ format.editors "author and editor" output.check } | |
{ format.authors output.nonnull | |
crossref missing$ | |
{ "author and editor" editor either.or.check } | |
'skip$ | |
if$ | |
} | |
if$ | |
output.year.check % ASME puts year after author(s) | |
new.block | |
format.btitle "title" output.check | |
format.edition output | |
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.date "year" output.check % don't check for year here because | |
format.date output % ASME puts year after author(s) | |
format.chapter.pages "chapter and pages" output.check | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {incollection} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
new.block | |
format.title "title" output.check inquotes % enclose title within quotes | |
new.block | |
crossref missing$ | |
{ format.in.ed.booktitle "booktitle" output.check | |
format.edition output | |
format.bvolume output | |
format.number.series output | |
new.sentence | |
publisher "publisher" output.check | |
address output | |
% format.date "year" output.check % don't check for year here because | |
format.date output % ASME puts year after author(s) | |
} | |
{ format.incoll.inproc.crossref output.nonnull } | |
if$ | |
format.chapter.pages output | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {inproceedings} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
new.block | |
format.title "title" output.check inquotes % enclose title within quotes | |
new.block | |
crossref missing$ | |
{ format.in.proc.date "booktitle" output.check | |
format.ineditors output | |
format.bvolume output | |
format.number.series output | |
organization output | |
publisher output | |
} | |
{ format.incoll.inproc.crossref output.nonnull } | |
if$ | |
format.pp.pages output | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {conference} { inproceedings } | |
FUNCTION {manual} | |
{ output.bibitem | |
author empty$ | |
{ organization scapify output } | |
{ format.authors output.nonnull } | |
if$ | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
new.block | |
format.btitle "title" output.check | |
format.edition output | |
author empty$ | |
{ address new.block.checka } | |
{ organization address new.block.checkb | |
organization output | |
} | |
if$ | |
address output | |
format.date output | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {mastersthesis} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
new.block | |
% format.title "title" output.check | |
format.title "title" output.check inquotes % ASME wants title within quotes | |
new.block | |
"Master's thesis" format.thesis.type output.nonnull | |
school "school" output.check | |
address output | |
% format.date "year" output.check % don't check for year here because | |
format.date output % ASME puts year after author(s) | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {misc} | |
{ output.bibitem | |
format.authors output | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
title howpublished new.block.checkb | |
format.title output | |
howpublished new.block.checka | |
howpublished output | |
format.date output | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
empty.misc.check | |
} | |
FUNCTION {phdthesis} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
new.block | |
% format.btitle "title" output.check | |
format.title "title" output.check inquotes % ASME wants title within quotes | |
new.block | |
"PhD thesis" format.thesis.type output.nonnull | |
school "school" output.check | |
address output | |
% format.date "year" output.check % don't check for year here because | |
format.date output % ASME puts year after author(s) | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {proceedings} | |
{ output.bibitem | |
editor empty$ | |
{ organization scapify output } | |
{ format.editors output.nonnull } | |
if$ | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
new.block | |
% title format.proc.date "title" output.check % ASME doesn't want date here | |
title "title" output.check % so leave out the date part | |
format.bvolume output | |
format.number.series output | |
editor empty$ | |
'skip$ | |
{ organization output } | |
if$ | |
publisher output | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {techreport} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
new.block | |
format.title "title" output.check | |
new.block | |
format.tr.number output.nonnull | |
institution "institution" output.check | |
address output | |
% format.date "year" output.check % don't check for year here because | |
format.date output % ASME puts year after author(s) | |
new.block | |
print.doi output | |
note output | |
fin.entry | |
} | |
FUNCTION {unpublished} | |
{ output.bibitem | |
format.authors "author" output.check | |
author format.key output % ASME puts year | |
output.year.check % after author(s) | |
new.block | |
format.title "title" output.check | |
new.block | |
note "note" output.check | |
format.date output | |
fin.entry | |
} | |
FUNCTION {default.type} { misc } | |
MACRO {jan} {"Jan."} | |
MACRO {feb} {"Feb."} | |
MACRO {mar} {"Mar."} | |
MACRO {apr} {"Apr."} | |
MACRO {may} {"May"} | |
MACRO {jun} {"June"} | |
MACRO {jul} {"July"} | |
MACRO {aug} {"Aug."} | |
MACRO {sep} {"Sept."} | |
MACRO {oct} {"Oct."} | |
MACRO {nov} {"Nov."} | |
MACRO {dec} {"Dec."} | |
MACRO {acmcs} {"ACM Comput. Surv."} | |
MACRO {acta} {"Acta Inf."} | |
MACRO {cacm} {"Commun. ACM"} | |
MACRO {ibmjrd} {"IBM J. Res. Dev."} | |
MACRO {ibmsj} {"IBM Syst.~J."} | |
MACRO {ieeese} {"IEEE Trans. Softw. Eng."} | |
MACRO {ieeetc} {"IEEE Trans. Comput."} | |
MACRO {ieeetcad} | |
{"IEEE Trans. Comput.-Aided Design Integrated Circuits"} | |
MACRO {ipl} {"Inf. Process. Lett."} | |
MACRO {jacm} {"J.~ACM"} | |
MACRO {jcss} {"J.~Comput. Syst. Sci."} | |
MACRO {scp} {"Sci. Comput. Programming"} | |
MACRO {sicomp} {"SIAM J. Comput."} | |
MACRO {tocs} {"ACM Trans. Comput. Syst."} | |
MACRO {tods} {"ACM Trans. Database Syst."} | |
MACRO {tog} {"ACM Trans. Gr."} | |
MACRO {toms} {"ACM Trans. Math. Softw."} | |
MACRO {toois} {"ACM Trans. Office Inf. Syst."} | |
MACRO {toplas} {"ACM Trans. Program. Lang. Syst."} | |
MACRO {tcs} {"Theoretical Comput. Sci."} | |
READ | |
% % % % % % % % % % % % % % % % % % % % % % % % % % % % | |
% % % % % % % % % % % % % % % % % % % % % % % % % % % % | |
% The following functions are for sorting the entries | |
% Since ASME doesn't want the entries sorted, we'll | |
% just ignore this entire section. | |
%FUNCTION {sortify} | |
%{ purify$ | |
% "l" change.case$ | |
%} | |
% | |
%INTEGERS { len } | |
%FUNCTION {chop.word} | |
%{ 's := | |
% 'len := | |
% s #1 len substring$ = | |
% { s len #1 + global.max$ substring$ } | |
% 's | |
% if$ | |
%} | |
%FUNCTION {sort.format.names} | |
%{ 's := | |
% #1 'nameptr := | |
% "" | |
% s num.names$ 'numnames := | |
% numnames 'namesleft := | |
% { namesleft #0 > } | |
% { nameptr #1 > | |
% { " " * } | |
% 'skip$ | |
% if$ | |
% s nameptr "{vv{ } }{ll{ }}{ f{ }}{ 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} | |
%{ 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 | |
% End of the sorting stuff | |
% % % % % % % % % % % % % % % % % % % % % % % % % % % % | |
% % % % % % % % % % % % % % % % % % % % % % % % % % % % | |
STRINGS { longest.label } | |
INTEGERS { number.label longest.label.width } | |
FUNCTION {initialize.longest.label} | |
{ "" 'longest.label := | |
#1 'number.label := | |
#0 'longest.label.width := | |
} | |
FUNCTION {longest.label.pass} | |
{ number.label int.to.str$ 'label := | |
number.label #1 + 'number.label := | |
label width$ longest.label.width > | |
{ label 'longest.label := | |
label width$ 'longest.label.width := | |
} | |
'skip$ | |
if$ | |
} | |
EXECUTE {initialize.longest.label} | |
ITERATE {longest.label.pass} | |
FUNCTION {begin.bib} | |
{ preamble$ empty$ | |
'skip$ | |
{ preamble$ write$ newline$ } | |
if$ | |
"\begin{thebibliography}{" longest.label * "}" * write$ newline$ | |
write$ newline$ | |
"\providecommand{\DOIprefix}{doi:}" | |
write$ newline$ | |
"\providecommand{\doi}[1]{\href{http://dx.doi.org/#1}{\path{#1}}}" | |
write$ newline$ | |
} | |
EXECUTE {begin.bib} | |
EXECUTE {init.state.consts} | |
EXECUTE {init.web.variables} | |
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