diff options
author | Manuel Pégourié-Gonnard <mpg@elzevir.fr> | 2010-06-30 11:31:25 +0000 |
---|---|---|
committer | Manuel Pégourié-Gonnard <mpg@elzevir.fr> | 2010-06-30 11:31:25 +0000 |
commit | 40aaa8f302d7f1607e42350428364f78251bbd75 (patch) | |
tree | 7c9534e44ec30bb80b5cb2fa5a424bd6580bf29c /Master/texmf-dist/bibtex | |
parent | 13161f10a858f81d2221d2aa657e4a3fbfe8f488 (diff) |
achemso update {v3.5}{2010/06/25}
git-svn-id: svn://tug.org/texlive/trunk@19190 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/bibtex')
-rw-r--r-- | Master/texmf-dist/bibtex/bst/achemso/achemso.bst | 2502 | ||||
-rw-r--r-- | Master/texmf-dist/bibtex/bst/achemso/biochem.bst | 2511 |
2 files changed, 2526 insertions, 2487 deletions
diff --git a/Master/texmf-dist/bibtex/bst/achemso/achemso.bst b/Master/texmf-dist/bibtex/bst/achemso/achemso.bst index 857bbc639c8..5b79334b429 100644 --- a/Master/texmf-dist/bibtex/bst/achemso/achemso.bst +++ b/Master/texmf-dist/bibtex/bst/achemso/achemso.bst @@ -14,14 +14,16 @@ %% ---------------------------------------------------------------- %% + ENTRY - { address + { + address author booktitle chapter - ctrl-use-title + ctrl-etal-firstonly ctrl-etal-number - ctrl-etal-truncate + ctrl-use-title doi edition editor @@ -29,6 +31,7 @@ ENTRY institution journal key + maintitle note number organization @@ -39,1596 +42,1613 @@ ENTRY title type url + version volume year } - {} - { label - extra.label - short.list + { } + { + label + short.names } -INTEGERS { - before.all - mid.sentence - after.sentence - after.block - after.item -} -FUNCTION { init.state.consts } { - #0 'before.all := - #1 'mid.sentence := - #2 'after.sentence := - #3 'after.block := - #4 'after.item := +FUNCTION { and } { + { } + { + pop$ + #0 + } + if$ } -%% For true/false settings, #1 is regarded as true and #0 as false. -INTEGERS { - etal.number - etal.truncate - is.use.title +FUNCTION { not } { + { #0 } + { #1 } + if$ } -FUNCTION { default.etal.number } { #15 } - -FUNCTION { default.etal.truncate } { #0 } - -FUNCTION { default.is.use.title } { #0 } - -FUNCTION { add.comma } { ", " * } - -FUNCTION { add.colon } { ": " * } - -FUNCTION { add.semicolon } { "; " * } - -INTEGERS { separate.by.semicolon } - -FUNCTION { init.separate.by.semicolon } - { #1 'separate.by.semicolon := } +FUNCTION { or } { + { + pop$ + #1 + } + { } + if$ +} -FUNCTION { add.comma.or.semicolon } { - #1 separate.by.semicolon = { - add.semicolon - }{ - add.comma - } +FUNCTION { xor } { + { not } + { } if$ } -STRINGS { s t } -INTEGERS { output.state } +FUNCTION { chr.to.value.error } { + #48 + + int.to.chr$ + "'" swap$ * + "'" * + " is not a number: treated as zero." * + warning$ + #0 +} -FUNCTION { output.nonnull } { - 's := - output.state mid.sentence = { - add.comma write$ - }{ - output.state after.block = { - add.semicolon write$ - newline$ - "\newblock " write$ - }{ - output.state before.all = { - write$ - }{ - output.state after.item = { - " " * write$ - }{ - add.period$ " " * write$ - } - if$ - } +FUNCTION { chr.to.value } { + chr.to.int$ #48 - + duplicate$ + #0 < + { chr.to.value.error } + { + duplicate$ + #9 > + { chr.to.value.error } + { } if$ } - if$ - mid.sentence 'output.state := - } if$ - s } -FUNCTION { output } { - duplicate$ empty$ { - pop$ - }{ - output.nonnull - } - if$ +STRINGS { + extract.input.str + extract.output.str } -FUNCTION { output.check } { - 't := - duplicate$ empty$ { - pop$ "Empty " t * " in " * cite$ * warning$ - }{ - output.nonnull - } +FUNCTION { is.a.digit } { + duplicate$ + "" = + { + pop$ + #0 + } + { + chr.to.int$ + #48 - + duplicate$ + #0 < swap$ #9 > or not + } if$ } -FUNCTION { new.block } { - output.state before.all = { - skip$ - }{ - after.block 'output.state := +FUNCTION{ is.a.number } { + { + duplicate$ + #1 #1 substring$ + is.a.digit } - if$ + { #2 global.max$ substring$ } + while$ + "" = } -FUNCTION {new.sentence} -{ output.state after.block = - 'skip$ - { output.state before.all = - 'skip$ - { after.sentence 'output.state := } +FUNCTION { extract.number } { + duplicate$ + 'extract.input.str := + "" 'extract.output.str := + { extract.input.str empty$ not } + { + extract.input.str #1 #1 substring$ + extract.input.str #2 global.max$ substring$ 'extract.input.str := + duplicate$ + is.a.number + { extract.output.str swap$ * 'extract.output.str := } + { + pop$ + "" 'extract.input.str := + } if$ } + while$ + extract.output.str empty$ + { } + { + pop$ + extract.output.str + } if$ } -INTEGERS { would.add.period.textlen } - -FUNCTION {would.add.period} -{ duplicate$ - add.period$ - text.length$ - 'would.add.period.textlen := +FUNCTION { field.or.null } { duplicate$ - text.length$ - would.add.period.textlen = - { #0 } - { #1 } + empty$ + { + pop$ + "" + } + { } if$ } -FUNCTION {fin.entry} -{ would.add.period - { "\relax" * write$ newline$ - "\mciteBstWouldAddEndPuncttrue" write$ newline$ - "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" - write$ newline$ - "{\mcitedefaultendpunct}{\mcitedefaultseppunct}\relax" +INTEGERS { + multiply.a.int + multiply.b.int +} + +FUNCTION { multiply } { + 'multiply.a.int := + 'multiply.b.int := + multiply.b.int #0 < + { + #-1 + #0 multiply.b.int - 'multiply.b.int := } - { "\relax" * write$ newline$ - "\mciteBstWouldAddEndPunctfalse" write$ newline$ - "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" - write$ newline$ - "{}{\mcitedefaultseppunct}\relax" + { #1 } + if$ + #0 + { multiply.b.int #0 > } + { + multiply.a.int + + multiply.b.int #1 - 'multiply.b.int := } + while$ + swap$ + { } + { #0 swap$ - } if$ - write$ - newline$ - "\EndOfBibitem" write$ } -FUNCTION {not} -{ { #0 } - { #1 } - if$ +INTEGERS { str.conversion.int } + +FUNCTION { str.to.int.aux.ii } { + { + duplicate$ + empty$ not + } + { + swap$ + #10 multiply 'str.conversion.int := + duplicate$ + #1 #1 substring$ + chr.to.value + str.conversion.int + + swap$ + #2 global.max$ substring$ + } + while$ + pop$ } -FUNCTION {and} -{ 'skip$ - { pop$ #0 } +FUNCTION { str.to.int.aux.i } { + duplicate$ + #1 #1 substring$ + "-" = + { + #1 swap$ + #2 global.max$ substring$ + } + { + #0 swap$ + } + if$ + #0 + swap$ + str.to.int.aux.ii + swap$ + { #0 swap$ - } + { } if$ } -FUNCTION {or} -{ { pop$ #1 } - 'skip$ +FUNCTION { str.to.int } { + duplicate$ + empty$ + { + pop$ + #0 + } + { str.to.int.aux.i } if$ } -FUNCTION {field.or.null} -{ duplicate$ empty$ - { pop$ "" } - 'skip$ +FUNCTION { tie.or.space.connect } { + duplicate$ + text.length$ #3 < + { "~" } + { " " } if$ + swap$ * * } -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } - { "\emph{" swap$ * "}" * } +FUNCTION { yes.no.to.bool } { + duplicate$ + empty$ + { + pop$ + #0 + } + { + "l" change.case$ + "yes" = + { #1 } + { #0 } + if$ + } if$ } -FUNCTION {boldface} -{ duplicate$ empty$ - { pop$ "" } + +FUNCTION { bold } { + duplicate$ + empty$ + { + pop$ + "" + } { "\textbf{" swap$ * "}" * } if$ } -FUNCTION {paren} -{ duplicate$ empty$ - { pop$ "" } +FUNCTION { emph } { + duplicate$ + empty$ + { + pop$ + "" + } + { "\emph{" swap$ * "}" * } + if$ +} + +FUNCTION { paren } { + duplicate$ + empty$ + { + pop$ + "" + } { "(" swap$ * ")" * } if$ } -FUNCTION {bbl.and} -{ "and" } -FUNCTION {bbl.chapter} -{ "Chapter" } +FUNCTION { add.comma } { ", " * } -FUNCTION {bbl.editor} -{ "Ed." } +FUNCTION { add.colon } { ": " * } -FUNCTION {bbl.editors} -{ "Eds." } +FUNCTION { add.period } { add.period$ " " * } -FUNCTION {bbl.edition} -{ "ed." } +FUNCTION { add.semicolon } { "; " * } -FUNCTION {bbl.etal} -{ "et~al." } +FUNCTION { add.space } { " " * } -FUNCTION {bbl.in} -{ "In" } -FUNCTION {bbl.inpress} -{ "in press" } +FUNCTION { bbl.and } { "and" } -FUNCTION {bbl.msc} -{ "M.Sc.\ thesis" } +FUNCTION { bbl.chapter } { "Chapter" } -FUNCTION {bbl.page} -{ "p" } +FUNCTION { bbl.doi } { "DOI:" } -FUNCTION {bbl.pages} -{ "pp" } +FUNCTION { bbl.editor } { "Ed." } -FUNCTION {bbl.phd} -{ "Ph.D.\ thesis" } +FUNCTION { bbl.editors } { "Eds." } -FUNCTION {bbl.submitted} -{ "submitted for publication" } +FUNCTION { bbl.edition } { "ed." } -FUNCTION {bbl.version} -{ "version" } +FUNCTION { bbl.etal } { "et~al." } -FUNCTION {bbl.volume} -{ "Vol." } +FUNCTION { bbl.in } { "In" } -FUNCTION {bbl.first} -{ "1st" } +FUNCTION { bbl.inpress } { "in press" } -FUNCTION {bbl.second} -{ "2nd" } +FUNCTION { bbl.msc } { "M.Sc.\ thesis" } -FUNCTION {bbl.third} -{ "3rd" } +FUNCTION { bbl.page } { "p" } -FUNCTION {bbl.fourth} -{ "4th" } +FUNCTION { bbl.pages } { "pp" } -FUNCTION {bbl.fifth} -{ "5th" } +FUNCTION { bbl.phd } { "Ph.D.\ thesis" } -FUNCTION {bbl.st} -{ "st" } +FUNCTION { bbl.version } { "version" } -FUNCTION {bbl.nd} -{ "nd" } +FUNCTION { bbl.volume } { "Vol." } -FUNCTION {bbl.rd} -{ "rd" } -FUNCTION {bbl.th} -{ "th" } +STRINGS { pages.str } -FUNCTION {eng.ord} -{ duplicate$ "1" swap$ * - #-2 #1 substring$ "1" = - { bbl.th * } - { duplicate$ #-1 #1 substring$ - duplicate$ "1" = - { pop$ bbl.st * } - { duplicate$ "2" = - { pop$ bbl.nd * } - { "3" = - { bbl.rd * } - { bbl.th * } - if$ - } - if$ +FUNCTION { hyphen.to.dash } { + 'pages.str := + "" + { pages.str empty$ not } + { + pages.str #1 #1 substring$ + "-" = + { + "--" * + { + pages.str #1 #1 substring$ + "-" = } - if$ - } - if$ + { pages.str #2 global.max$ substring$ 'pages.str := } + while$ + } + { + pages.str #1 #1 substring$ + * + pages.str #2 global.max$ substring$ 'pages.str := + } + if$ + } + while$ } -FUNCTION{is.a.digit} -{ duplicate$ "" = - {pop$ #0} - {chr.to.int$ #48 - duplicate$ - #0 < swap$ #9 > or not} - if$ -} +INTEGERS { multiresult.bool } -FUNCTION{is.a.number} -{ - { duplicate$ #1 #1 substring$ is.a.digit } - {#2 global.max$ substring$} +FUNCTION { multi.page.check } { + 'pages.str := + #0 'multiresult.bool := + { + multiresult.bool not + pages.str empty$ not + and + } + { + pages.str #1 #1 substring$ + duplicate$ + "-" = swap$ duplicate$ + "," = swap$ + "+" = + or or + { #1 'multiresult.bool := } + { pages.str #2 global.max$ substring$ 'pages.str := } + if$ + } while$ - "" = + multiresult.bool } -FUNCTION {extract.num} -{ duplicate$ 't := - "" 's := - { t empty$ not } - { t #1 #1 substring$ - t #2 global.max$ substring$ 't := - duplicate$ is.a.number - { s swap$ * 's := } - { pop$ "" 't := } - if$ - } + +INTEGERS { + current.name.int + names.separate.comma + names.separate.semicolon + names.separate.comma.bool + remaining.names.int + total.names.int +} + +STRINGS { + current.name.str + names.str +} + +FUNCTION { full.format.names } { + 'names.str := + #1 'current.name.int := + names.str num.names$ 'remaining.names.int := + { remaining.names.int #0 > } + { + names.str current.name.int "{vv~}{ll}" format.name$ + current.name.int #1 > + { + swap$ add.comma swap$ + remaining.names.int #1 > + { } + { + duplicate$ + "others" = + { bbl.etal } + { bbl.and } + if$ + add.space swap$ * + } + if$ + * + } + { } + if$ + remaining.names.int #1 - 'remaining.names.int := + current.name.int #1 + 'current.name.int := + } while$ - s empty$ - 'skip$ - { pop$ s } +} + +FUNCTION { full.author } { + author empty$ + { "" } + { author full.format.names } if$ } -FUNCTION {chr.to.value} -{ chr.to.int$ #48 - - duplicate$ duplicate$ - #0 < swap$ #9 > or - { #48 + int.to.chr$ - " is not a number..." * - warning$ - pop$ #0 +FUNCTION { full.author.editor } { + author empty$ + { + editor empty$ + { "" } + { editor full.format.names } + if$ } - {} + { author full.format.names } if$ } -%% Some tricks from "Tame the BeaST" to convert a string -%% to a number -INTEGERS { a b } - -FUNCTION {mult} -{ 'a := - 'b := - b #0 < - {#-1 #0 b - 'b :=} - {#1} +FUNCTION { full.editor } { + editor empty$ + { "" } + { editor full.format.names } if$ - #0 - {b #0 >} - { a + - b #1 - 'b := - } - while$ - swap$ - 'skip$ - {#0 swap$ -} - if$ } -FUNCTION {str.to.int.aux} -{ {duplicate$ empty$ not} - { swap$ #10 mult 'a := - duplicate$ #1 #1 substring$ - chr.to.value a + - swap$ - #2 global.max$ substring$ +FUNCTION { short.format.names } { + 'names.str := + names.str #1 "{vv~}{ll}" format.name$ + names.str num.names$ + duplicate$ + #2 > + { + pop$ + add.space bbl.etal * } - while$ - pop$ + { + #2 < + { } + { + names.str #2 "{ff }{vv }{ll}{ jj}" format.name$ + "others" = + { add.space bbl.etal * } + { + add.space + bbl.and add.space + * + names.str #2 "{vv~}{ll}" format.name$ + * + } + if$ + } + if$ + } + if$ } -FUNCTION {str.to.int} -{ duplicate$ #1 #1 substring$ "-" = - {#1 swap$ #2 global.max$ substring$} - {#0 swap$} - if$ - #0 swap$ str.to.int.aux - swap$ - {#0 swap$ -} - {} +FUNCTION { short.author.key } { + author empty$ + { + key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ + } + { author short.format.names } if$ } -FUNCTION {bibinfo.check} -{ swap$ - duplicate$ missing$ - { pop$ pop$ - "" - } - { duplicate$ empty$ +FUNCTION { short.author.editor.key } { + author empty$ + { + editor empty$ { - swap$ pop$ - } - { swap$ - pop$ + key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ } + { editor short.format.names } if$ } + { author short.format.names } if$ } -FUNCTION {convert.edition} -{ extract.num "l" change.case$ 's := - s "first" = s "1" = or - { bbl.first 't := } - { s "second" = s "2" = or - { bbl.second 't := } - { s "third" = s "3" = or - { bbl.third 't := } - { s "fourth" = s "4" = or - { bbl.fourth 't := } - { s "fifth" = s "5" = or - { bbl.fifth 't := } - { s #1 #1 substring$ is.a.number - { s eng.ord 't := } - { edition 't := } - if$ - } - if$ - } +FUNCTION { short.author.key.organization } { + author empty$ + { + key empty$ + { + organization empty$ + { cite$ #1 #3 substring$ } + { + organization #1 #4 substring$ + "The " = + { organization } + { organization #5 global.max$ substring$ } if$ + #3 text.prefix$ } if$ } + { key } if$ } + { author short.format.names } if$ - t } -FUNCTION {tie.or.space.connect} -{ duplicate$ text.length$ #3 < - { "~" } - { " " } +FUNCTION { short.editor.key.organization } { + editor empty$ + { + key empty$ + { + organization empty$ + { cite$ #1 #3 substring$ } + { + organization #1 #4 substring$ + "The " = + { organization } + { organization #5 global.max$ substring$ } + if$ + #3 text.prefix$ + } + if$ + } + { key } + if$ + } + { editor short.format.names } if$ - swap$ * * -} - -FUNCTION {space.connect} -{ " " swap$ * * } - -INTEGERS { - current.name - remaining.names - total.names -} - -STRINGS { - formatted.name - names.list } -FUNCTION { format.names.loop } { - { remaining.names #0 > } { - names.list current.name "{vv~}{ll,}{~f.}{,~jj}" format.name$ - 'formatted.name := - current.name #1 > { - formatted.name "others," = { - bbl.etal space.connect - remaining.names #1 'remaining.names := - }{ - add.comma.or.semicolon formatted.name * - } +FUNCTION { calculate.full.names } { + type$ "book" = + type$ "inbook" = + or + { full.author.editor } + { + type$ "proceedings" = + { full.editor } + { full.author } if$ - }{ - formatted.name } - if$ - current.name #1 + 'current.name := - remaining.names #1 - 'remaining.names := - } - while$ -} - -FUNCTION { format.names.all } { - total.names 'remaining.names := - format.names.loop + if$ } -FUNCTION { format.names.etal } { - etal.truncate #1 = { - etal.number 'remaining.names := - }{ - #1 'remaining.names := - } - if$ - format.names.loop - formatted.name "others," = { - }{ - bbl.etal space.connect - } +FUNCTION { calculate.short.names } { + type$ "book" = + type$ "inbook" = + or + { short.author.editor.key } + { + type$ "proceedings" = + { short.editor.key.organization } + { + type$ "manual" = + { short.author.key.organization } + { short.author.key } + if$ + } + if$ + } if$ + 'short.names := } -FUNCTION { format.names } { - 'names.list := - #1 'current.name := - names.list num.names$ 'total.names := - etal.number #0 = { - format.names.all - }{ - total.names etal.number > { - format.names.etal - }{ - format.names.all - } - if$ - } +FUNCTION { calculate.names } { + calculate.short.names + short.names + year empty$ + { "()" } + { "(" year * ")" * } if$ + * + 'label := } -INTEGERS { author.or.editor } -FUNCTION {format.authors} -{ author empty$ - { "" } - { #1 'author.or.editor := - #1 'separate.by.semicolon := - author format.names - } - if$ +INTEGERS { entries.int } + +FUNCTION { initialize.count.entries } { + #0 'entries.int := } -FUNCTION {format.editors} -{ editor empty$ - { "" } - { #2 'author.or.editor := - #0 'separate.by.semicolon := - editor format.names - add.comma - editor num.names$ #1 > - { bbl.editors } - { bbl.editor } - if$ - * - } - if$ +FUNCTION { count.entries } { + entries.int #1 + 'entries.int := } -INTEGERS { nameptr numnames namesleft } -FUNCTION {n.separate.multi} -{ 't := - "" - #0 'numnames := - t text.length$ #4 > t is.a.number and - { - { t empty$ not } - { t #-1 #1 substring$ is.a.number - { numnames #1 + 'numnames := } - { #0 'numnames := } - if$ - t #-1 #1 substring$ swap$ * - t #-2 global.max$ substring$ 't := - numnames #4 = - { duplicate$ #1 #1 substring$ swap$ - #2 global.max$ substring$ - "," swap$ * * - #1 'numnames := - } - 'skip$ - if$ - } - while$ +FUNCTION { begin.bib } { + preamble$ empty$ + { } + { + preamble$ write$ + newline$ } - { t swap$ * } if$ + "\providecommand*\mcitethebibliography{\thebibliography}" write$ + newline$ + "\csname @ifundefined\endcsname{endmcitethebibliography}" write$ + " {\let\endmcitethebibliography\endthebibliography}{}" write$ + newline$ + "\begin{mcitethebibliography}{" + entries.int int.to.str$ * "}" * write$ + newline$ + "\providecommand*\natexlab[1]{#1}" write$ + newline$ + "\providecommand*\mciteSetBstSublistMode[1]{}" write$ + newline$ + "\providecommand*\mciteSetBstMaxWidthForm[2]{}" write$ + newline$ + "\providecommand*\mciteBstWouldAddEndPuncttrue" write$ + newline$ + " {\def\EndOfBibitem{\unskip.}}" write$ + newline$ + "\providecommand*\mciteBstWouldAddEndPunctfalse" write$ + newline$ + " {\let\EndOfBibitem\relax}" write$ + newline$ + "\providecommand*\mciteSetBstMidEndSepPunct[3]{}" write$ + newline$ + "\providecommand*\mciteSetBstSublistLabelBeginEnd[3]{}" write$ + newline$ + "\providecommand*\EndOfBibitem{}" write$ + newline$ + "\mciteSetBstSublistMode{f}" write$ + newline$ + "\mciteSetBstMaxWidthForm{subitem}{(\alph{mcitesubitemcount})}" write$ + newline$ + "\mciteSetBstSublistLabelBeginEnd" write$ + newline$ + " {\mcitemaxwidthsubitemform\space}" write$ + newline$ + " {\relax}" write$ + newline$ + " {\relax}" write$ + newline$ } -FUNCTION {format.bvolume} -{ volume empty$ - { "" } - { bbl.volume volume tie.or.space.connect } - if$ +FUNCTION { end.bib } { + newline$ + "\end{mcitethebibliography}" write$ + newline$ } -FUNCTION {format.title.noemph} -{ 't := - t empty$ - { "" } - { t } - if$ + +INTEGERS { + ctrl.use.title.bool + ctrl.etal.firstonly.bool + ctrl.etal.number.int } -FUNCTION {format.title} -{ 't := - t empty$ - { "" } - { t emphasize } - if$ +FUNCTION { initialize.control.values } { + #0 'ctrl.use.title.bool := + #1 'ctrl.etal.firstonly.bool := + #15 'ctrl.etal.number.int := } -%% The add.title function only does anything if the appropriate -%% flag is set. -FUNCTION {add.title} -{ is.use.title - { title format.title.noemph "title" output.check - new.sentence } - 'skip$ - if$ +FUNCTION { control } { + ctrl-use-title yes.no.to.bool 'ctrl.use.title.bool := + ctrl-etal-firstonly yes.no.to.bool 'ctrl.etal.firstonly.bool := + ctrl-etal-number str.to.int 'ctrl.etal.number.int := } -FUNCTION {format.number.series} -{ volume empty$ - { number empty$ - { series field.or.null } - { series empty$ - { "There is a number but no series in " cite$ * warning$ } - { series number space.connect } - if$ - } - if$ - } - { "" } - if$ + +INTEGERS { + next.punct.comma + next.punct.period + next.punct.semicolon + next.punct.space } -FUNCTION {format.url} -{ url empty$ - { "" } - { new.sentence "\url{" url * "}" * } - if$ +FUNCTION { initialize.tracker } { + #0 'next.punct.comma := + #1 'next.punct.period := + #2 'next.punct.semicolon := + #3 'next.punct.space := } -FUNCTION {format.full.names} -{'s := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr - "{vv~}{ll}" format.name$ 't := - nameptr #1 > +INTEGERS { next.punct.int } + +FUNCTION { output } { + swap$ + duplicate$ empty$ + { pop$ } + { + next.punct.int next.punct.space = + { add.space } { - namesleft #1 > - { ", " * t * } + next.punct.int next.punct.comma = + { add.comma } { - numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { bbl.etal * } - { bbl.and space.connect t space.connect } + next.punct.int next.punct.semicolon = + { add.semicolon } + { add.period } if$ } if$ } - 't - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {author.editor.full} -{ author empty$ - { editor empty$ - { "" } - { editor format.full.names } if$ + write$ } - { author format.full.names } if$ + next.punct.comma 'next.punct.int := } -FUNCTION {author.full} -{ author empty$ - { "" } - { author format.full.names } + +FUNCTION { begin.bibitem } { + newline$ + "\bibitem" write$ + label + calculate.full.names + duplicate$ + short.names = + { pop$ } + { * } if$ + "[" swap$ * "]" * write$ + "{" cite$ * "}" * write$ + newline$ + "" + next.punct.comma 'next.punct.int := } -FUNCTION {editor.full} -{ editor empty$ - { "" } - { editor format.full.names } +INTEGERS { add.period.length.int } + +FUNCTION { would.add.period } { + duplicate$ + add.period$ + text.length$ 'add.period.length.int := + duplicate$ + text.length$ + add.period.length.int = + { #0 } + { #1 } if$ } -FUNCTION {make.full.names} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.full - { type$ "proceedings" = - 'editor.full - 'author.full - if$ +FUNCTION { end.bibitem } { + would.add.period + { + "\relax" * write$ + newline$ + "\mciteBstWouldAddEndPuncttrue" write$ + newline$ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" write$ + newline$ + "{\mcitedefaultendpunct}{\mcitedefaultseppunct}\relax" + } + { + "\relax" * write$ + newline$ + "\mciteBstWouldAddEndPunctfalse" write$ + newline$ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" write$ + newline$ + "{}{\mcitedefaultseppunct}\relax" } if$ + write$ + newline$ + "\EndOfBibitem" write$ } -FUNCTION {output.bibitem} -{ newline$ - "\bibitem[" write$ - label write$ - ")" make.full.names duplicate$ short.list = - { pop$ } - { * } - if$ - "]{" * write$ - cite$ write$ - "}" write$ - newline$ - "" - before.all 'output.state := + +FUNCTION { initialize.name.separator } { + #1 'names.separate.comma := + #0 'names.separate.semicolon := } -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$ +FUNCTION { format.names.loop } { + { remaining.names.int #0 > } + { + names.str current.name.int "{vv~}{ll,}{~f.}{,~jj}" format.name$ + duplicate$ + 'current.name.str := + current.name.int #1 > + { + duplicate$ + "others," = + { + bbl.etal + add.space + remaining.names.int #1 'remaining.names.int := + } + { + swap$ + names.separate.comma.bool + { add.comma } + { add.semicolon } + if$ + swap$ + * + } + if$ } + { } if$ - } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ + remaining.names.int #1 - 'remaining.names.int := + current.name.int #1 + 'current.name.int := } while$ } -FUNCTION {format.date} -{ year empty$ - { "" } - { year boldface } - if$ +FUNCTION { format.names.all } { + total.names.int 'remaining.names.int := + format.names.loop } - -FUNCTION {format.bdate} -{ year empty$ - { "There's no year in " cite$ * warning$ } - 'year +FUNCTION { format.names.etal } { + ctrl.etal.firstonly.bool + { #1 'remaining.names.int := } + { ctrl.etal.number.int 'remaining.names.int := } if$ -} - -FUNCTION {either.or.check} -{ empty$ - 'pop$ - { "Can't use both " swap$ * " fields in " * cite$ * warning$ } + format.names.loop + current.name.str "others," = + { } + { + add.space + bbl.etal + add.space + * + } if$ } -FUNCTION {format.edition} -{ edition duplicate$ empty$ - 'skip$ - { convert.edition - bbl.edition bibinfo.check - " " * bbl.edition * +FUNCTION { format.names } { + 'names.separate.comma.bool := + 'names.str := + #1 'current.name.int := + names.str num.names$ 'total.names.int := + total.names.int ctrl.etal.number.int > + { + ctrl.etal.number.int #0 = + { format.names.all } + { format.names.etal } + if$ } + { format.names.all } if$ } -INTEGERS { multiresult } -FUNCTION {multi.page.check} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and +FUNCTION { bbl.first } { "1st" } + +FUNCTION { bbl.second } { "2nd" } + +FUNCTION { bbl.third } { "3rd" } + +FUNCTION { bbl.fourth } { "4th" } + +FUNCTION { bbl.fifth } { "5th" } + +FUNCTION { bbl.st } { "st" } + +FUNCTION { bbl.nd } { "nd" } + +FUNCTION { bbl.rd } { "rd" } + +FUNCTION { bbl.th } { "th" } + +STRINGS { + ord.input.str + ord.output.str +} + +FUNCTION { make.ordinal } { + duplicate$ + "1" swap$ + * + #-2 #1 substring$ + "1" = + { + bbl.th * } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } + { + duplicate$ + #-1 #1 substring$ + duplicate$ + "1" = + { + pop$ + bbl.st * + } + { + duplicate$ + "2" = + { + pop$ + bbl.nd * + } + { + "3" = + { bbl.rd * } + { bbl.th * } + } + if$ + } if$ } - while$ - multiresult + if$ } -FUNCTION {format.pages} -{ pages empty$ - { "" } - { pages multi.page.check - { bbl.pages pages n.dashify tie.or.space.connect } - { bbl.page pages tie.or.space.connect } - if$ +FUNCTION { convert.to.ordinal } { + extract.number + "l" change.case$ 'ord.input.str := + ord.input.str "first" = ord.input.str "1" = or + { bbl.first 'ord.output.str := } + { + ord.input.str "second" = ord.input.str "2" = or + { bbl.second 'ord.output.str := } + { + ord.input.str "third" = ord.input.str "3" = or + { bbl.third 'ord.output.str := } + { + ord.input.str "fourth" = ord.input.str "4" = or + { bbl.fourth 'ord.output.str := } + { + ord.input.str "fifth" = ord.input.str "5" = or + { bbl.fifth 'ord.output.str := } + { + ord.input.str #1 #1 substring$ + is.a.number + { ord.input.str make.ordinal } + { ord.input.str } + if$ + 'ord.output.str := + } + if$ + } + if$ + } + if$ + } + if$ } if$ + ord.output.str } -FUNCTION {format.pages.required} -{ pages empty$ - { "" - "There are no page numbers for " cite$ * warning$ + +FUNCTION { format.address } { + address empty$ + { } + { + address output } - { pages multi.page.check - { bbl.pages pages n.dashify tie.or.space.connect } - { bbl.page pages tie.or.space.connect } - if$ - } if$ } -FUNCTION {format.pages.nopp} -{ pages empty$ - { "" - "There are no page numbers for " cite$ * warning$ +FUNCTION { format.authors } { + author empty$ + { } + { + author names.separate.semicolon format.names output - } - { pages multi.page.check - { pages n.dashify space.connect } - { pages space.connect } - if$ + next.punct.space 'next.punct.int := } if$ } -FUNCTION {format.pages.patent} -{ pages empty$ - { "There is no patent number for " cite$ * warning$ } - { pages multi.page.check - { pages n.dashify } - { pages n.separate.multi } +FUNCTION { format.editors } { + editor empty$ + { } + { + editor names.separate.comma format.names + add.comma + editor num.names$ #1 > + { bbl.editors } + { bbl.editor } if$ + * + output + next.punct.semicolon 'next.punct.int := } if$ } -FUNCTION {format.vol.pages} -{ volume emphasize field.or.null - duplicate$ empty$ - { pop$ format.pages.required } - { add.comma pages n.dashify * } +FUNCTION { format.authors.or.editors } { + author empty$ + { format.editors } + { format.authors } if$ + next.punct.space 'next.punct.int := } -FUNCTION {format.chapter.pages} -{ chapter empty$ - 'format.pages - { type empty$ - { bbl.chapter } - { type "l" change.case$ } - if$ - chapter tie.or.space.connect - pages empty$ - 'skip$ - { add.comma format.pages * } - if$ +FUNCTION { format.chapter } { + chapter empty$ + { } + { + bbl.chapter add.space + chapter + * + output } if$ } -FUNCTION {format.title.in} -{ 's := - s empty$ - { "" } - { editor empty$ - { bbl.in s format.title space.connect } - { bbl.in s format.title space.connect - add.semicolon format.editors * - } - if$ - } - if$ +FUNCTION { format.doi } { + bbl.doi add.space * + doi * + output } -FUNCTION {format.org.address} -{ organization empty$ - { "" } - { address empty$ - { organization } - { organization add.colon address *} - if$ +FUNCTION { format.edition } { + edition empty$ + { } + { + edition convert.to.ordinal + add.space bbl.edition * + output } if$ + next.punct.semicolon 'next.punct.int := } -FUNCTION {format.pub.address} -{ publisher empty$ - { "" } - { address empty$ - { publisher } - { publisher add.colon address *} +FUNCTION { format.group.address } { + duplicate$ + empty$ + { pop$ } + { + address empty$ + { } + { + add.colon + address + * + } if$ + output } if$ } -FUNCTION {format.school.address} -{ school empty$ - { "" } - { address empty$ - { school } - { school add.colon address *} - if$ +FUNCTION { format.howpublished } { + howpublished empty$ + { } + { + howpublished + output } if$ } -FUNCTION {format.organization.address} -{ organization empty$ - { "" } - { address empty$ - { organization } - { organization add.colon address *} - if$ - } - if$ +FUNCTION { format.journal } { + journal emph + output + next.punct.space 'next.punct.int := } -FUNCTION {format.version} -{ edition empty$ - { "" } - { bbl.version edition tie.or.space.connect } - if$ +FUNCTION { format.journal.unpub } { + journal emph + output } -FUNCTION {empty.misc.check} -{ author empty$ title empty$ howpublished empty$ - year empty$ note empty$ url empty$ - and and and and and - { "all relevant fields are empty in " cite$ * warning$ } - 'skip$ +FUNCTION { format.note } { + note empty$ + { } + { + note + output + } if$ } -FUNCTION {empty.doi.note} -{ doi empty$ note empty$ and - { "Need either a note or DOI for " cite$ * warning$ } - 'skip$ +FUNCTION { format.number.series } { + series empty$ + { } + { + series + number empty$ + { } + { + add.space + number * + } + if$ + output + next.punct.semicolon 'next.punct.int := + } if$ } -FUNCTION {format.thesis.type} -{ type empty$ - 'skip$ - { pop$ - type emphasize +FUNCTION { format.organization } { + organization empty$ + { } + { + organization paren + output + next.punct.period 'next.punct.int := } if$ } -FUNCTION {article} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - add.title - journal emphasize "journal" output.check - after.item 'output.state := - format.date "year" output.check - volume empty$ - { "" - format.pages.nopp output - } - { format.vol.pages output } - if$ - note output - fin.entry +FUNCTION { format.organization.address } { + organization format.group.address } -FUNCTION {book} -{ output.bibitem - author empty$ - { booktitle empty$ - { title format.title "title" output.check } - { booktitle format.title "booktitle" output.check } - if$ - format.edition output - new.block - editor empty$ - { "Need either an author or editor for " cite$ * warning$ } - { "" format.editors * "editor" output.check } - if$ - } - { format.authors output - after.item 'output.state := - "author and editor" editor either.or.check - booktitle empty$ - { title format.title "title" output.check } - { booktitle format.title "booktitle" output.check } +FUNCTION { format.pages } { + pages empty$ + { } + { + pages multi.page.check + { + bbl.pages + pages hyphen.to.dash + } + { bbl.page pages } if$ - format.edition output + tie.or.space.connect + output } if$ - new.block - format.number.series output - new.block - format.pub.address "publisher" output.check - format.bdate "year" output.check - new.block - format.bvolume output +} + +FUNCTION { format.pages.article } { pages empty$ - 'skip$ - { format.pages output } + { } + { + pages hyphen.to.dash + output + } if$ - note output - fin.entry } -FUNCTION {booklet} -{ output.bibitem - format.authors output - after.item 'output.state := - title format.title "title" output.check - howpublished output - address output - format.date output - note output - fin.entry +FUNCTION { format.publisher.address } { + publisher format.group.address } -FUNCTION {inbook} -{ output.bibitem - author empty$ - { title format.title "title" output.check - format.edition output - new.block - editor empty$ - { "Need at least an author or an editor for " cite$ * warning$ } - { "" format.editors * "editor" output.check } - if$ - } - { format.authors output - after.item 'output.state := - title format.title.in "title" output.check - format.edition output - } - if$ - new.block - format.number.series output - new.block - format.pub.address "publisher" output.check - format.bdate "year" output.check - new.block - format.bvolume output - format.chapter.pages "chapter and pages" output.check - note output - fin.entry -} - -FUNCTION {incollection} -{ output.bibitem - author empty$ - { booktitle format.title "booktitle" output.check - format.edition output - new.block - editor empty$ - { "Need at least an author or an editor for " cite$ * warning$ } - { "" format.editors * "editor" output.check } - if$ - } - { format.authors output - after.item 'output.state := - title empty$ - 'skip$ - { title format.title.noemph output } +FUNCTION { format.school.address } { + school + duplicate$ + empty$ + { pop$ } + { + address empty$ + { } + { + add.comma + address + * + } if$ - after.sentence 'output.state := - booktitle format.title.in "booktitle" output.check - format.edition output - } - if$ - new.block - format.number.series output - new.block - format.pub.address "publisher" output.check - format.bdate "year" output.check - new.block - format.bvolume output - format.chapter.pages "chapter and pages" output.check - note output - fin.entry -} - -FUNCTION {inpress} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - journal emphasize "journal" output.check - doi empty$ - { bbl.inpress output } - { after.item 'output.state := - format.date output - "DOI:" doi tie.or.space.connect output + output } if$ - note output - fin.entry } -FUNCTION {inproceedings} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := +FUNCTION { format.title } { title empty$ - 'skip$ - { title format.title.noemph output - after.sentence 'output.state := + { } + { + title + output + next.punct.period 'next.punct.int := } if$ - booktitle format.title output - address output - format.bdate "year" output.check - pages empty$ - 'skip$ - { new.block - format.pages output } - if$ - note output - fin.entry -} - -FUNCTION {manual} -{ output.bibitem - format.authors output - after.item 'output.state := - title format.title "title" output.check - format.version output - new.block - format.organization.address output - format.bdate output - note output - fin.entry -} - -FUNCTION {mastersthesis} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - bbl.msc format.thesis.type output - format.school.address "school" output.check - format.bdate "year" output.check - note output - fin.entry -} - -FUNCTION {misc} -{ output.bibitem - format.authors output - after.item 'output.state := - title empty$ - 'skip$ - { title format.title output } - if$ - howpublished output - year output - format.url output - note output - fin.entry - empty.misc.check -} - -FUNCTION {patent} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - journal "journal" output.check - after.item 'output.state := - format.pages.patent "pages" output.check - format.bdate "year" output.check - note output - fin.entry -} - -FUNCTION {phdthesis} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - bbl.phd format.thesis.type output - format.school.address "school" output.check - format.bdate "year" output.check - note output - fin.entry -} - -FUNCTION {proceedings} -{ output.bibitem - title format.title.noemph "title" output.check - address output - format.bdate "year" output.check - pages empty$ - 'skip$ - { new.block - format.pages output } - if$ - note output - fin.entry } -FUNCTION {techreport} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - title format.title "title" output.check - new.block - type empty$ - 'skip$ +FUNCTION { format.title.article } { + ctrl.use.title.bool { - type - number empty$ - 'skip$ - { number tie.or.space.connect } + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } if$ - output } + { } if$ - format.org.address output - format.bdate "year" output.check - pages empty$ - 'skip$ - { new.block - format.pages output } - if$ - note output - fin.entry } -FUNCTION {unpublished} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - journal empty$ - 'skip$ - { journal emphasize "journal" output.check } - if$ - doi empty$ - { note output } - { after.item 'output.state := - format.date output - "DOI:" doi tie.or.space.connect output - } - if$ - fin.entry - empty.doi.note -} - -%% Convert the strings "yes" or "no" to #1 or #0 respectively -FUNCTION {yes.no.to.int} -{ "l" change.case$ duplicate$ - "yes" = - { pop$ #1 } - { duplicate$ "no" = - { pop$ #0 } - { "unknown Boolean " quote$ * swap$ * quote$ * - " in " * cite$ * warning$ - #0 - } - if$ +FUNCTION { format.title.techreport } { + title empty$ + { } + { + title emph + output + next.punct.semicolon 'next.punct.int := } if$ } -%% Using the same mechanism as in IEEEtrans, control of -%% output can be achieved using a special entry type. -FUNCTION { Control } { - ctrl-use-title - empty$ { - skip$ - }{ - ctrl-use-title - yes.no.to.int - 'is.use.title := - } - if$ - ctrl-etal-number - empty$ { - skip$ - }{ - ctrl-etal-number - str.to.int - 'etal.number := - } +FUNCTION { format.title.booktitle } { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } if$ - ctrl-etal-truncate - empty$ { - skip$ - }{ - ctrl-etal-truncate - yes.no.to.int - 'etal.truncate := - } + booktitle empty$ + { } + { + booktitle + output + next.punct.period 'next.punct.int := + } if$ } -FUNCTION {conference} {inproceedings} - -FUNCTION {other} {patent} - -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."} - -%% The ACS journals by CODEN -MACRO {achre4} {"Acc.\ Chem.\ Res."} -MACRO {acbcct} {"ACS Chem.\ Biol."} -MACRO {ancac3} {"ACS Nano"} -MACRO {ancham} {"Anal.\ Chem."} -MACRO {bichaw} {"Biochemistry"} -MACRO {bcches} {"Bioconjugate Chem."} -MACRO {bomaf6} {"Biomacromolecules"} -MACRO {bipret} {"Biotechnol.\ Prog."} -MACRO {crtoec} {"Chem.\ Res.\ Toxicol."} -MACRO {chreay} {"Chem.\ Rev."} -MACRO {cmatex} {"Chem.\ Mater."} -MACRO {cgdefu} {"Cryst.\ Growth Des."} -MACRO {enfuem} {"Energy Fuels"} -MACRO {esthag} {"Environ.\ Sci.\ Technol."} -MACRO {iechad} {"Ind.\ Eng.\ Chem.\ Res."} -MACRO {inoraj} {"Inorg.\ Chem."} -MACRO {jafcau} {"J.~Agric.\ Food Chem."} -MACRO {jceaax} {"J.~Chem.\ Eng.\ Data"} -MACRO {jcisd8} {"J.~Chem.\ Inf.\ Model."} -MACRO {jctcce} {"J.~Chem.\ Theory Comput."} -MACRO {jcchff} {"J. Comb. Chem."} -MACRO {jmcmar} {"J. Med. Chem."} -MACRO {jnprdf} {"J. Nat. Prod."} -MACRO {joceah} {"J.~Org.\ Chem."} -MACRO {jpcafh} {"J.~Phys.\ Chem.~A"} -MACRO {jpcbfk} {"J.~Phys.\ Chem.~B"} -MACRO {jpccck} {"J.~Phys.\ Chem.~C"} -MACRO {jprobs} {"J.~Proteome Res."} -MACRO {jacsat} {"J.~Am.\ Chem.\ Soc."} -MACRO {langd5} {"Langmuir"} -MACRO {mamobx} {"Macromolecules"} -MACRO {mpohbp} {"Mol.\ Pharm."} -MACRO {nalefd} {"Nano Lett."} -MACRO {orlef7} {"Org.\ Lett."} -MACRO {oprdfk} {"Org.\ Proc.\ Res.\ Dev."} -MACRO {orgnd7} {"Organometallics"} - -READ - -FUNCTION {initialize.controls} -{ default.is.use.title 'is.use.title := - default.etal.number 'etal.number := +FUNCTION { format.chapter.title } { } -EXECUTE {initialize.controls} - -INTEGERS { len } - -FUNCTION {chop.word} -{ 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ +STRINGS { + book.title + chapter.title } -FUNCTION {format.lab.names} -{ 's := - s #1 "{vv~}{ll}" format.name$ - s num.names$ duplicate$ - #2 > - { pop$ bbl.etal space.connect } - { #2 < - 'skip$ - { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { bbl.etal space.connect } - { bbl.and space.connect s #2 "{vv~}{ll}" format.name$ space.connect } +FUNCTION { format.title.booktitle.book } { + "" 'chapter.title := + booktitle empty$ + { + "" 'chapter.title := + title 'book.title := + } + { + maintitle empty$ + { booktitle 'book.title := } + { maintitle add.period booktitle * 'book.title := } + if$ + } + if$ + chapter.title empty$ + { } + { + chapter.title + output + next.punct.period 'next.punct.int := + } + if$ + book.title emph + chapter.title empty$ + { + author empty$ + { } + { + editor empty$ + { } + { bbl.in add.space swap$ * } if$ } if$ } + { bbl.in add.space swap$ * } if$ + output } -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ +FUNCTION { format.type } { + type empty$ + { } + { + pop$ + type } - { author format.lab.names } if$ + output } -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } +FUNCTION { format.type.number } { + type empty$ + { } + { + type + number empty$ + { } + { number tie.or.space.connect } if$ + output } - { 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$ +FUNCTION { format.url } { + url empty$ + { } + { + "\url{" url * "}" * + output } - { 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$ +FUNCTION { format.year } { + year empty$ + { } + { + year + output + next.punct.semicolon 'next.punct.int := } - { editor format.lab.names } if$ } -FUNCTION {calc.short.authors} -{ 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$ +FUNCTION { format.year.article } { + year empty$ + { } + { + year bold + output } if$ - 'short.list := } -FUNCTION { calc.label } { - calc.short.authors - short.list - "(" - * - year duplicate$ empty$ - short.list key field.or.null = or - { pop$ "" } - 'skip$ +FUNCTION { format.version } { + version empty$ + { } + { + bbl.version add.space + version + * + output + } if$ - * - 'label := } -ITERATE { calc.label } +FUNCTION { format.volume.article } { + volume emph + output +} -STRINGS { - longest.label - last.label - next.extra +FUNCTION { format.volume } { + volume empty$ + { } + { + bbl.volume + volume + tie.or.space.connect + output + next.punct.semicolon 'next.punct.int := + } + if$ } -INTEGERS { - longest.label.width - last.extra.num - number.label + +FUNCTION { article } { + begin.bibitem + format.authors + format.title.article + format.journal + format.year.article + format.volume.article + format.pages.article + format.note + end.bibitem } -FUNCTION { initialize.longest.label } { - "" 'longest.label := - #0 int.to.chr$ 'last.label := - "" 'next.extra := - #0 'longest.label.width := - #0 'last.extra.num := - #0 'number.label := +FUNCTION { book } { + begin.bibitem + format.authors.or.editors + format.title.booktitle.book + format.edition + author empty$ + { } + { format.editors } + if$ + format.number.series + format.publisher.address + format.year + format.volume + format.chapter + format.pages + format.note + end.bibitem +} + +FUNCTION { inbook } { book } + +FUNCTION { booklet } { + begin.bibitem + format.authors + format.title + format.howpublished + format.address + format.year + format.note + end.bibitem } -FUNCTION {forward.pass} -{ last.label label = - { last.extra.num #1 + 'last.extra.num := - last.extra.num int.to.chr$ 'extra.label := +FUNCTION { collection } { book } + +FUNCTION { incollection } { book } + +FUNCTION { inpress } { + begin.bibitem + format.authors + format.journal.unpub + doi empty$ + { + bbl.inpress + output } - { "a" chr.to.int$ 'last.extra.num := - "" 'extra.label := - label 'last.label := + { + format.year + format.doi } if$ - number.label #1 + 'number.label := -} + format.note + end.bibitem +} + +FUNCTION { inproceeding } { + begin.bibitem + format.authors + format.title.booktitle + format.address + format.year + format.pages + format.note + end.bibitem +} + +FUNCTION { manual } { + begin.bibitem + format.authors + format.title + format.version + format.organization.address + format.year + format.note + end.bibitem +} + +FUNCTION { mastersthesis } { + begin.bibitem + format.authors + format.title + bbl.msc format.type + format.school.address + format.year + format.note + end.bibitem +} + +FUNCTION { misc } { + begin.bibitem + format.authors + format.title + format.howpublished + format.year + format.url + format.note + end.bibitem +} + +FUNCTION { patent } { + begin.bibitem + format.authors + format.organization + format.title + format.type.number + format.year + format.note + end.bibitem +} + +FUNCTION { phdthesis } { + begin.bibitem + format.authors + format.title + bbl.phd format.type + format.school.address + format.year + format.note + end.bibitem +} + +FUNCTION { proceeding } { + begin.bibitem + format.title + format.address + format.year + format.pages + format.note + end.bibitem +} + +FUNCTION { techreport } { + begin.bibitem + format.authors.or.editors + format.title.techreport + format.type.number + format.organization.address + format.year + format.volume + format.pages + format.note + end.bibitem +} + +FUNCTION { unpublished } { + begin.bibitem + format.authors + format.journal.unpub + doi empty$ + { format.howpublished } + { + format.year + format.doi + } + if$ + format.note + end.bibitem +} + +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 { acbcct } { "ACS Chem.\ Biol." } +MACRO { achre4 } { "Acc.\ Chem.\ Res." } +MACRO { acncdm } { "ACS Chem.\ Neurosci." } +MACRO { ancac3 } { "ACS Nano" } +MACRO { ancham } { "Anal.\ Chem." } +MACRO { bichaw } { "Biochemistry" } +MACRO { bcches } { "Bioconjugate Chem." } +MACRO { bomaf6 } { "Biomacromolecules" } +MACRO { bipret } { "Biotechnol.\ Prog." } +MACRO { crtoec } { "Chem.\ Res.\ Toxicol." } +MACRO { chreay } { "Chem.\ Rev." } +MACRO { cmatex } { "Chem.\ Mater." } +MACRO { cgdefu } { "Cryst.\ Growth Des." } +MACRO { enfuem } { "Energy Fuels" } +MACRO { esthag } { "Environ.\ Sci.\ Technol." } +MACRO { iechad } { "Ind.\ Eng.\ Chem.\ Res." } +MACRO { inoraj } { "Inorg.\ Chem." } +MACRO { jafcau } { "J.~Agric.\ Food Chem." } +MACRO { jceaax } { "J.~Chem.\ Eng.\ Data" } +MACRO { jceda8 } { "J.~Chem.\ Ed." } +MACRO { jcisd8 } { "J.~Chem.\ Inf.\ Model." } +MACRO { jctcce } { "J.~Chem.\ Theory Comput." } +MACRO { jcchff } { "J. Comb. Chem." } +MACRO { jmcmar } { "J. Med. Chem." } +MACRO { jnprdf } { "J. Nat. Prod." } +MACRO { joceah } { "J.~Org.\ Chem." } +MACRO { jpcafh } { "J.~Phys.\ Chem.~A" } +MACRO { jpcbfk } { "J.~Phys.\ Chem.~B" } +MACRO { jpccck } { "J.~Phys.\ Chem.~C" } +MACRO { jpclcd } { "J.~Phys.\ Chem.\ Lett." } +MACRO { jprobs } { "J.~Proteome Res." } +MACRO { jacsat } { "J.~Am.\ Chem.\ Soc." } +MACRO { langd5 } { "Langmuir" } +MACRO { mamobx } { "Macromolecules" } +MACRO { mpohbp } { "Mol.\ Pharm." } +MACRO { nalefd } { "Nano Lett." } +MACRO { orlef7 } { "Org.\ Lett." } +MACRO { oprdfk } { "Org.\ Proc.\ Res.\ Dev." } +MACRO { orgnd7 } { "Organometallics" } -EXECUTE { initialize.longest.label } -ITERATE { forward.pass } +READ -FUNCTION { begin.bib } { - preamble$ empty$ { - skip$ - }{ - preamble$ write$ newline$ - } - if$ - "\providecommand*{\mcitethebibliography}{\thebibliography}" - write$ newline$ - "\csname @ifundefined\endcsname{endmcitethebibliography}" - write$ newline$ - "{\let\endmcitethebibliography\endthebibliography}{}" - write$ newline$ - "\begin{mcitethebibliography}{" number.label int.to.str$ * "}" * - write$ newline$ - "\providecommand*{\natexlab}[1]{#1}" - write$ newline$ - "\providecommand*{\mciteSetBstSublistMode}[1]{}" - write$ newline$ - "\providecommand*{\mciteSetBstMaxWidthForm}[2]{}" - write$ newline$ - "\providecommand*{\mciteBstWouldAddEndPuncttrue}" - write$ newline$ - " {\def\EndOfBibitem{\unskip.}}" - write$ newline$ - "\providecommand*{\mciteBstWouldAddEndPunctfalse}" - write$ newline$ - " {\let\EndOfBibitem\relax}" - write$ newline$ - "\providecommand*{\mciteSetBstMidEndSepPunct}[3]{}" - write$ newline$ - "\providecommand*{\mciteSetBstSublistLabelBeginEnd}[3]{}" - write$ newline$ - "\providecommand*{\EndOfBibitem}{}" - write$ newline$ - "\mciteSetBstSublistMode{f}" - write$ newline$ - "\mciteSetBstMaxWidthForm{subitem}{(\alph{mcitesubitemcount})}" - write$ newline$ - "\mciteSetBstSublistLabelBeginEnd{\mcitemaxwidthsubitemform\space}" - write$ newline$ - "{\relax}{\relax}" - write$ newline$ -} +EXECUTE { initialize.control.values } -EXECUTE { begin.bib } +EXECUTE { initialize.count.entries } -EXECUTE { init.state.consts } +EXECUTE { initialize.name.separator } -EXECUTE { init.separate.by.semicolon } +EXECUTE { initialize.tracker } -ITERATE { call.type$ } +ITERATE { calculate.names } -FUNCTION { end.bib } { - newline$ - "\end{mcitethebibliography}" write$ newline$ -} +ITERATE { count.entries } + +EXECUTE { begin.bib } + +ITERATE { call.type$ } EXECUTE { end.bib } %% diff --git a/Master/texmf-dist/bibtex/bst/achemso/biochem.bst b/Master/texmf-dist/bibtex/bst/achemso/biochem.bst index de07e4cb6fa..c1ca5fd224f 100644 --- a/Master/texmf-dist/bibtex/bst/achemso/biochem.bst +++ b/Master/texmf-dist/bibtex/bst/achemso/biochem.bst @@ -14,14 +14,16 @@ %% ---------------------------------------------------------------- %% + ENTRY - { address + { + address author booktitle chapter - ctrl-use-title + ctrl-etal-firstonly ctrl-etal-number - ctrl-etal-truncate + ctrl-use-title doi edition editor @@ -29,6 +31,7 @@ ENTRY institution journal key + maintitle note number organization @@ -39,1602 +42,1618 @@ ENTRY title type url + version volume year } - {} - { label - extra.label - short.list + { } + { + label + short.names } -INTEGERS { - before.all - mid.sentence - after.sentence - after.block - after.item -} -FUNCTION { init.state.consts } { - #0 'before.all := - #1 'mid.sentence := - #2 'after.sentence := - #3 'after.block := - #4 'after.item := +FUNCTION { and } { + { } + { + pop$ + #0 + } + if$ } -%% For true/false settings, #1 is regarded as true and #0 as false. -INTEGERS { - etal.number - etal.truncate - is.use.title +FUNCTION { not } { + { #0 } + { #1 } + if$ } -FUNCTION { default.etal.number } { #15 } - -FUNCTION { default.etal.truncate } { #0 } - -FUNCTION { default.is.use.title } { #1 } - -FUNCTION { add.comma } { ", " * } - -FUNCTION { add.colon } { ": " * } - -FUNCTION { add.semicolon } { "; " * } - -INTEGERS { separate.by.semicolon } - -FUNCTION { init.separate.by.semicolon } - { #0 'separate.by.semicolon := } +FUNCTION { or } { + { + pop$ + #1 + } + { } + if$ +} -FUNCTION { add.comma.or.semicolon } { - #1 separate.by.semicolon = { - add.semicolon - }{ - add.comma - } +FUNCTION { xor } { + { not } + { } if$ } -STRINGS { s t } -INTEGERS { output.state } +FUNCTION { chr.to.value.error } { + #48 + + int.to.chr$ + "'" swap$ * + "'" * + " is not a number: treated as zero." * + warning$ + #0 +} -FUNCTION { output.nonnull } { - 's := - output.state mid.sentence = { - add.comma write$ - }{ - output.state after.block = { - add.semicolon write$ - newline$ - "\newblock " write$ - }{ - output.state before.all = { - write$ - }{ - output.state after.item = { - " " * write$ - }{ - add.period$ " " * write$ - } - if$ - } +FUNCTION { chr.to.value } { + chr.to.int$ #48 - + duplicate$ + #0 < + { chr.to.value.error } + { + duplicate$ + #9 > + { chr.to.value.error } + { } if$ } - if$ - mid.sentence 'output.state := - } if$ - s } -FUNCTION { output } { - duplicate$ empty$ { - pop$ - }{ - output.nonnull - } - if$ +STRINGS { + extract.input.str + extract.output.str } -FUNCTION { output.check } { - 't := - duplicate$ empty$ { - pop$ "Empty " t * " in " * cite$ * warning$ - }{ - output.nonnull - } +FUNCTION { is.a.digit } { + duplicate$ + "" = + { + pop$ + #0 + } + { + chr.to.int$ + #48 - + duplicate$ + #0 < swap$ #9 > or not + } if$ } -FUNCTION { new.block } { - output.state before.all = { - skip$ - }{ - after.block 'output.state := +FUNCTION{ is.a.number } { + { + duplicate$ + #1 #1 substring$ + is.a.digit } - if$ + { #2 global.max$ substring$ } + while$ + "" = } -FUNCTION {new.sentence} -{ output.state after.block = - 'skip$ - { output.state before.all = - 'skip$ - { after.sentence 'output.state := } +FUNCTION { extract.number } { + duplicate$ + 'extract.input.str := + "" 'extract.output.str := + { extract.input.str empty$ not } + { + extract.input.str #1 #1 substring$ + extract.input.str #2 global.max$ substring$ 'extract.input.str := + duplicate$ + is.a.number + { extract.output.str swap$ * 'extract.output.str := } + { + pop$ + "" 'extract.input.str := + } if$ } + while$ + extract.output.str empty$ + { } + { + pop$ + extract.output.str + } if$ } -INTEGERS { would.add.period.textlen } - -FUNCTION {would.add.period} -{ duplicate$ - add.period$ - text.length$ - 'would.add.period.textlen := +FUNCTION { field.or.null } { duplicate$ - text.length$ - would.add.period.textlen = - { #0 } - { #1 } + empty$ + { + pop$ + "" + } + { } if$ } -FUNCTION {fin.entry} -{ would.add.period - { "\relax" * write$ newline$ - "\mciteBstWouldAddEndPuncttrue" write$ newline$ - "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" - write$ newline$ - "{\mcitedefaultendpunct}{\mcitedefaultseppunct}\relax" +INTEGERS { + multiply.a.int + multiply.b.int +} + +FUNCTION { multiply } { + 'multiply.a.int := + 'multiply.b.int := + multiply.b.int #0 < + { + #-1 + #0 multiply.b.int - 'multiply.b.int := } - { "\relax" * write$ newline$ - "\mciteBstWouldAddEndPunctfalse" write$ newline$ - "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" - write$ newline$ - "{}{\mcitedefaultseppunct}\relax" + { #1 } + if$ + #0 + { multiply.b.int #0 > } + { + multiply.a.int + + multiply.b.int #1 - 'multiply.b.int := } + while$ + swap$ + { } + { #0 swap$ - } if$ - write$ - newline$ - "\EndOfBibitem" write$ } -FUNCTION {not} -{ { #0 } - { #1 } - if$ +INTEGERS { str.conversion.int } + +FUNCTION { str.to.int.aux.ii } { + { + duplicate$ + empty$ not + } + { + swap$ + #10 multiply 'str.conversion.int := + duplicate$ + #1 #1 substring$ + chr.to.value + str.conversion.int + + swap$ + #2 global.max$ substring$ + } + while$ + pop$ } -FUNCTION {and} -{ 'skip$ - { pop$ #0 } +FUNCTION { str.to.int.aux.i } { + duplicate$ + #1 #1 substring$ + "-" = + { + #1 swap$ + #2 global.max$ substring$ + } + { + #0 swap$ + } + if$ + #0 + swap$ + str.to.int.aux.ii + swap$ + { #0 swap$ - } + { } if$ } -FUNCTION {or} -{ { pop$ #1 } - 'skip$ +FUNCTION { str.to.int } { + duplicate$ + empty$ + { + pop$ + #0 + } + { str.to.int.aux.i } if$ } -FUNCTION {field.or.null} -{ duplicate$ empty$ - { pop$ "" } - 'skip$ +FUNCTION { tie.or.space.connect } { + duplicate$ + text.length$ #3 < + { "~" } + { " " } if$ + swap$ * * } -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } - { "\emph{" swap$ * "}" * } +FUNCTION { yes.no.to.bool } { + duplicate$ + empty$ + { + pop$ + #0 + } + { + "l" change.case$ + "yes" = + { #1 } + { #0 } + if$ + } if$ } -FUNCTION {boldface} -{ duplicate$ empty$ - { pop$ "" } + +FUNCTION { bold } { + duplicate$ + empty$ + { + pop$ + "" + } { "\textbf{" swap$ * "}" * } if$ } -FUNCTION {paren} -{ duplicate$ empty$ - { pop$ "" } +FUNCTION { emph } { + duplicate$ + empty$ + { + pop$ + "" + } + { "\emph{" swap$ * "}" * } + if$ +} + +FUNCTION { paren } { + duplicate$ + empty$ + { + pop$ + "" + } { "(" swap$ * ")" * } if$ } -FUNCTION {bbl.and} -{ "and" } -FUNCTION {bbl.chapter} -{ "Chapter" } +FUNCTION { add.comma } { ", " * } -FUNCTION {bbl.editor} -{ "Ed." } +FUNCTION { add.colon } { ": " * } -FUNCTION {bbl.editors} -{ "Eds." } +FUNCTION { add.period } { add.period$ " " * } -FUNCTION {bbl.edition} -{ "ed." } +FUNCTION { add.semicolon } { "; " * } -FUNCTION {bbl.etal} -{ "et~al." } +FUNCTION { add.space } { " " * } -FUNCTION {bbl.in} -{ "In" } -FUNCTION {bbl.inpress} -{ "in press" } +FUNCTION { bbl.and } { "and" } -FUNCTION {bbl.msc} -{ "M.Sc.\ thesis" } +FUNCTION { bbl.chapter } { "Chapter" } -FUNCTION {bbl.page} -{ "p" } +FUNCTION { bbl.doi } { "DOI:" } -FUNCTION {bbl.pages} -{ "pp" } +FUNCTION { bbl.editor } { "Ed." } -FUNCTION {bbl.phd} -{ "Ph.D.\ thesis" } +FUNCTION { bbl.editors } { "Eds." } -FUNCTION {bbl.submitted} -{ "submitted for publication" } +FUNCTION { bbl.edition } { "ed." } -FUNCTION {bbl.version} -{ "version" } +FUNCTION { bbl.etal } { "et~al." } -FUNCTION {bbl.volume} -{ "Vol." } +FUNCTION { bbl.in } { "In" } -FUNCTION {bbl.first} -{ "1st" } +FUNCTION { bbl.inpress } { "in press" } -FUNCTION {bbl.second} -{ "2nd" } +FUNCTION { bbl.msc } { "M.Sc.\ thesis" } -FUNCTION {bbl.third} -{ "3rd" } +FUNCTION { bbl.page } { "p" } -FUNCTION {bbl.fourth} -{ "4th" } +FUNCTION { bbl.pages } { "pp" } -FUNCTION {bbl.fifth} -{ "5th" } +FUNCTION { bbl.phd } { "Ph.D.\ thesis" } -FUNCTION {bbl.st} -{ "st" } +FUNCTION { bbl.version } { "version" } -FUNCTION {bbl.nd} -{ "nd" } +FUNCTION { bbl.volume } { "Vol." } -FUNCTION {bbl.rd} -{ "rd" } -FUNCTION {bbl.th} -{ "th" } +STRINGS { pages.str } -FUNCTION {eng.ord} -{ duplicate$ "1" swap$ * - #-2 #1 substring$ "1" = - { bbl.th * } - { duplicate$ #-1 #1 substring$ - duplicate$ "1" = - { pop$ bbl.st * } - { duplicate$ "2" = - { pop$ bbl.nd * } - { "3" = - { bbl.rd * } - { bbl.th * } - if$ - } - if$ +FUNCTION { hyphen.to.dash } { + 'pages.str := + "" + { pages.str empty$ not } + { + pages.str #1 #1 substring$ + "-" = + { + "--" * + { + pages.str #1 #1 substring$ + "-" = } - if$ - } - if$ + { pages.str #2 global.max$ substring$ 'pages.str := } + while$ + } + { + pages.str #1 #1 substring$ + * + pages.str #2 global.max$ substring$ 'pages.str := + } + if$ + } + while$ } -FUNCTION{is.a.digit} -{ duplicate$ "" = - {pop$ #0} - {chr.to.int$ #48 - duplicate$ - #0 < swap$ #9 > or not} - if$ -} +INTEGERS { multiresult.bool } -FUNCTION{is.a.number} -{ - { duplicate$ #1 #1 substring$ is.a.digit } - {#2 global.max$ substring$} +FUNCTION { multi.page.check } { + 'pages.str := + #0 'multiresult.bool := + { + multiresult.bool not + pages.str empty$ not + and + } + { + pages.str #1 #1 substring$ + duplicate$ + "-" = swap$ duplicate$ + "," = swap$ + "+" = + or or + { #1 'multiresult.bool := } + { pages.str #2 global.max$ substring$ 'pages.str := } + if$ + } while$ - "" = + multiresult.bool } -FUNCTION {extract.num} -{ duplicate$ 't := - "" 's := - { t empty$ not } - { t #1 #1 substring$ - t #2 global.max$ substring$ 't := - duplicate$ is.a.number - { s swap$ * 's := } - { pop$ "" 't := } - if$ - } + +INTEGERS { + current.name.int + names.separate.comma + names.separate.semicolon + names.separate.comma.bool + remaining.names.int + total.names.int +} + +STRINGS { + current.name.str + names.str +} + +FUNCTION { full.format.names } { + 'names.str := + #1 'current.name.int := + names.str num.names$ 'remaining.names.int := + { remaining.names.int #0 > } + { + names.str current.name.int "{vv~}{ll}" format.name$ + current.name.int #1 > + { + swap$ add.comma swap$ + remaining.names.int #1 > + { } + { + duplicate$ + "others" = + { bbl.etal } + { bbl.and } + if$ + add.space swap$ * + } + if$ + * + } + { } + if$ + remaining.names.int #1 - 'remaining.names.int := + current.name.int #1 + 'current.name.int := + } while$ - s empty$ - 'skip$ - { pop$ s } +} + +FUNCTION { full.author } { + author empty$ + { "" } + { author full.format.names } if$ } -FUNCTION {chr.to.value} -{ chr.to.int$ #48 - - duplicate$ duplicate$ - #0 < swap$ #9 > or - { #48 + int.to.chr$ - " is not a number..." * - warning$ - pop$ #0 +FUNCTION { full.author.editor } { + author empty$ + { + editor empty$ + { "" } + { editor full.format.names } + if$ } - {} + { author full.format.names } if$ } -%% Some tricks from "Tame the BeaST" to convert a string -%% to a number -INTEGERS { a b } - -FUNCTION {mult} -{ 'a := - 'b := - b #0 < - {#-1 #0 b - 'b :=} - {#1} +FUNCTION { full.editor } { + editor empty$ + { "" } + { editor full.format.names } if$ - #0 - {b #0 >} - { a + - b #1 - 'b := - } - while$ - swap$ - 'skip$ - {#0 swap$ -} - if$ } -FUNCTION {str.to.int.aux} -{ {duplicate$ empty$ not} - { swap$ #10 mult 'a := - duplicate$ #1 #1 substring$ - chr.to.value a + - swap$ - #2 global.max$ substring$ +FUNCTION { short.format.names } { + 'names.str := + names.str #1 "{vv~}{ll}" format.name$ + names.str num.names$ + duplicate$ + #2 > + { + pop$ + add.space bbl.etal * } - while$ - pop$ + { + #2 < + { } + { + names.str #2 "{ff }{vv }{ll}{ jj}" format.name$ + "others" = + { add.space bbl.etal * } + { + add.space + bbl.and add.space + * + names.str #2 "{vv~}{ll}" format.name$ + * + } + if$ + } + if$ + } + if$ } -FUNCTION {str.to.int} -{ duplicate$ #1 #1 substring$ "-" = - {#1 swap$ #2 global.max$ substring$} - {#0 swap$} - if$ - #0 swap$ str.to.int.aux - swap$ - {#0 swap$ -} - {} +FUNCTION { short.author.key } { + author empty$ + { + key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ + } + { author short.format.names } if$ } -FUNCTION {bibinfo.check} -{ swap$ - duplicate$ missing$ - { pop$ pop$ - "" - } - { duplicate$ empty$ +FUNCTION { short.author.editor.key } { + author empty$ + { + editor empty$ { - swap$ pop$ - } - { swap$ - pop$ + key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ } + { editor short.format.names } if$ } + { author short.format.names } if$ } -FUNCTION {convert.edition} -{ extract.num "l" change.case$ 's := - s "first" = s "1" = or - { bbl.first 't := } - { s "second" = s "2" = or - { bbl.second 't := } - { s "third" = s "3" = or - { bbl.third 't := } - { s "fourth" = s "4" = or - { bbl.fourth 't := } - { s "fifth" = s "5" = or - { bbl.fifth 't := } - { s #1 #1 substring$ is.a.number - { s eng.ord 't := } - { edition 't := } - if$ - } - if$ - } +FUNCTION { short.author.key.organization } { + author empty$ + { + key empty$ + { + organization empty$ + { cite$ #1 #3 substring$ } + { + organization #1 #4 substring$ + "The " = + { organization } + { organization #5 global.max$ substring$ } if$ + #3 text.prefix$ } if$ } + { key } if$ } + { author short.format.names } if$ - t } -FUNCTION {tie.or.space.connect} -{ duplicate$ text.length$ #3 < - { "~" } - { " " } +FUNCTION { short.editor.key.organization } { + editor empty$ + { + key empty$ + { + organization empty$ + { cite$ #1 #3 substring$ } + { + organization #1 #4 substring$ + "The " = + { organization } + { organization #5 global.max$ substring$ } + if$ + #3 text.prefix$ + } + if$ + } + { key } + if$ + } + { editor short.format.names } if$ - swap$ * * -} - -FUNCTION {space.connect} -{ " " swap$ * * } - -INTEGERS { - current.name - remaining.names - total.names } -STRINGS { - formatted.name - names.list +FUNCTION { calculate.full.names } { + type$ "book" = + type$ "inbook" = + or + { full.author.editor } + { + type$ "proceedings" = + { full.editor } + { full.author } + if$ + } + if$ } -FUNCTION { format.names.loop } { - { remaining.names #0 > } { - names.list current.name "{vv~}{ll,}{~f.}{,~jj}" format.name$ - 'formatted.name := - current.name #1 > { - formatted.name "others," = { - bbl.etal space.connect - remaining.names #1 'remaining.names := - }{ - add.comma - remaining.names #1 > { - formatted.name * - }{ - bbl.and space.connect - formatted.name space.connect +FUNCTION { calculate.short.names } { + type$ "book" = + type$ "inbook" = + or + { short.author.editor.key } + { + type$ "proceedings" = + { short.editor.key.organization } + { + type$ "manual" = + { short.author.key.organization } + { short.author.key } + if$ } - if$ - } if$ - }{ - formatted.name } - if$ - current.name #1 + 'current.name := - remaining.names #1 - 'remaining.names := - } - while$ -} - -FUNCTION { format.names.all } { - total.names 'remaining.names := - format.names.loop -} - -FUNCTION { format.names.etal } { - etal.truncate #1 = { - etal.number 'remaining.names := - }{ - #1 'remaining.names := - } - if$ - format.names.loop - formatted.name "others," = { - }{ - bbl.etal space.connect - } if$ + 'short.names := } -FUNCTION { format.names } { - 'names.list := - #1 'current.name := - names.list num.names$ 'total.names := - etal.number #0 = { - format.names.all - }{ - total.names etal.number > { - format.names.etal - }{ - format.names.all - } - if$ - } +FUNCTION { calculate.names } { + calculate.short.names + short.names + year empty$ + { "()" } + { "(" year * ")" * } if$ + * + 'label := } -INTEGERS { author.or.editor } -FUNCTION {format.authors} -{ author empty$ - { "" } - { #1 'author.or.editor := - author format.names - } - if$ +INTEGERS { entries.int } + +FUNCTION { initialize.count.entries } { + #0 'entries.int := } -FUNCTION {format.editors} -{ editor empty$ - { "" } - { #2 'author.or.editor := - editor format.names - add.comma - editor num.names$ #1 > - { bbl.editors } - { bbl.editor } - if$ - * - } - if$ +FUNCTION { count.entries } { + entries.int #1 + 'entries.int := } -INTEGERS { nameptr numnames namesleft } -FUNCTION {n.separate.multi} -{ 't := - "" - #0 'numnames := - t text.length$ #4 > t is.a.number and - { - { t empty$ not } - { t #-1 #1 substring$ is.a.number - { numnames #1 + 'numnames := } - { #0 'numnames := } - if$ - t #-1 #1 substring$ swap$ * - t #-2 global.max$ substring$ 't := - numnames #4 = - { duplicate$ #1 #1 substring$ swap$ - #2 global.max$ substring$ - "," swap$ * * - #1 'numnames := - } - 'skip$ - if$ - } - while$ +FUNCTION { begin.bib } { + preamble$ empty$ + { } + { + preamble$ write$ + newline$ } - { t swap$ * } if$ + "\providecommand*\mcitethebibliography{\thebibliography}" write$ + newline$ + "\csname @ifundefined\endcsname{endmcitethebibliography}" write$ + " {\let\endmcitethebibliography\endthebibliography}{}" write$ + newline$ + "\begin{mcitethebibliography}{" + entries.int int.to.str$ * "}" * write$ + newline$ + "\providecommand*\natexlab[1]{#1}" write$ + newline$ + "\providecommand*\mciteSetBstSublistMode[1]{}" write$ + newline$ + "\providecommand*\mciteSetBstMaxWidthForm[2]{}" write$ + newline$ + "\providecommand*\mciteBstWouldAddEndPuncttrue" write$ + newline$ + " {\def\EndOfBibitem{\unskip.}}" write$ + newline$ + "\providecommand*\mciteBstWouldAddEndPunctfalse" write$ + newline$ + " {\let\EndOfBibitem\relax}" write$ + newline$ + "\providecommand*\mciteSetBstMidEndSepPunct[3]{}" write$ + newline$ + "\providecommand*\mciteSetBstSublistLabelBeginEnd[3]{}" write$ + newline$ + "\providecommand*\EndOfBibitem{}" write$ + newline$ + "\mciteSetBstSublistMode{f}" write$ + newline$ + "\mciteSetBstMaxWidthForm{subitem}{(\alph{mcitesubitemcount})}" write$ + newline$ + "\mciteSetBstSublistLabelBeginEnd" write$ + newline$ + " {\mcitemaxwidthsubitemform\space}" write$ + newline$ + " {\relax}" write$ + newline$ + " {\relax}" write$ + newline$ } -FUNCTION {format.bvolume} -{ volume empty$ - { "" } - { bbl.volume volume tie.or.space.connect } - if$ +FUNCTION { end.bib } { + newline$ + "\end{mcitethebibliography}" write$ + newline$ } -FUNCTION {format.title.noemph} -{ 't := - t empty$ - { "" } - { t } - if$ + +INTEGERS { + ctrl.use.title.bool + ctrl.etal.firstonly.bool + ctrl.etal.number.int } -FUNCTION {format.title} -{ 't := - t empty$ - { "" } - { t emphasize } - if$ +FUNCTION { initialize.control.values } { + #1 'ctrl.use.title.bool := + #1 'ctrl.etal.firstonly.bool := + #15 'ctrl.etal.number.int := } -%% The add.title function only does anything if the appropriate -%% flag is set. -FUNCTION {add.title} -{ is.use.title - { title format.title.noemph "title" output.check - new.sentence } - 'skip$ - if$ +FUNCTION { control } { + ctrl-use-title yes.no.to.bool 'ctrl.use.title.bool := + ctrl-etal-firstonly yes.no.to.bool 'ctrl.etal.firstonly.bool := + ctrl-etal-number str.to.int 'ctrl.etal.number.int := } -FUNCTION {format.number.series} -{ volume empty$ - { number empty$ - { series field.or.null } - { series empty$ - { "There is a number but no series in " cite$ * warning$ } - { series number space.connect } - if$ - } - if$ - } - { "" } - if$ + +INTEGERS { + next.punct.comma + next.punct.period + next.punct.semicolon + next.punct.space } -FUNCTION {format.url} -{ url empty$ - { "" } - { new.sentence "\url{" url * "}" * } - if$ +FUNCTION { initialize.tracker } { + #0 'next.punct.comma := + #1 'next.punct.period := + #2 'next.punct.semicolon := + #3 'next.punct.space := } -FUNCTION {format.full.names} -{'s := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr - "{vv~}{ll}" format.name$ 't := - nameptr #1 > +INTEGERS { next.punct.int } + +FUNCTION { output } { + swap$ + duplicate$ empty$ + { pop$ } + { + next.punct.int next.punct.space = + { add.space } { - namesleft #1 > - { ", " * t * } + next.punct.int next.punct.comma = + { add.comma } { - numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { bbl.etal * } - { bbl.and space.connect t space.connect } + next.punct.int next.punct.semicolon = + { add.semicolon } + { add.period } if$ } if$ } - 't - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {author.editor.full} -{ author empty$ - { editor empty$ - { "" } - { editor format.full.names } if$ + write$ } - { author format.full.names } if$ + next.punct.comma 'next.punct.int := } -FUNCTION {author.full} -{ author empty$ - { "" } - { author format.full.names } + +FUNCTION { begin.bibitem } { + newline$ + "\bibitem" write$ + label + calculate.full.names + duplicate$ + short.names = + { pop$ } + { * } if$ + "[" swap$ * "]" * write$ + "{" cite$ * "}" * write$ + newline$ + "" + next.punct.comma 'next.punct.int := } -FUNCTION {editor.full} -{ editor empty$ - { "" } - { editor format.full.names } +INTEGERS { add.period.length.int } + +FUNCTION { would.add.period } { + duplicate$ + add.period$ + text.length$ 'add.period.length.int := + duplicate$ + text.length$ + add.period.length.int = + { #0 } + { #1 } if$ } -FUNCTION {make.full.names} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.full - { type$ "proceedings" = - 'editor.full - 'author.full - if$ +FUNCTION { end.bibitem } { + would.add.period + { + "\relax" * write$ + newline$ + "\mciteBstWouldAddEndPuncttrue" write$ + newline$ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" write$ + newline$ + "{\mcitedefaultendpunct}{\mcitedefaultseppunct}\relax" + } + { + "\relax" * write$ + newline$ + "\mciteBstWouldAddEndPunctfalse" write$ + newline$ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" write$ + newline$ + "{}{\mcitedefaultseppunct}\relax" } if$ + write$ + newline$ + "\EndOfBibitem" write$ } -FUNCTION {output.bibitem} -{ newline$ - "\bibitem[" write$ - label write$ - ")" make.full.names duplicate$ short.list = - { pop$ } - { * } - if$ - "]{" * write$ - cite$ write$ - "}" write$ - newline$ - "" - before.all 'output.state := + +FUNCTION { initialize.name.separator } { + #1 'names.separate.comma := + #0 'names.separate.semicolon := } -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$ +FUNCTION { format.names.loop } { + { remaining.names.int #0 > } + { + names.str current.name.int "{vv~}{ll,}{~f.}{,~jj}" format.name$ + duplicate$ + 'current.name.str := + current.name.int #1 > + { + duplicate$ + "others," = + { + bbl.etal + add.space + remaining.names.int #1 'remaining.names.int := + } + { + swap$ + names.separate.comma.bool + { add.comma } + { add.semicolon } + if$ + remaining.names.int #1 > + { } + { bbl.and add.space * } + if$ + swap$ + * + } + if$ } + { } if$ - } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ + remaining.names.int #1 - 'remaining.names.int := + current.name.int #1 + 'current.name.int := } while$ } -FUNCTION {format.date} -{ year empty$ - { "" } - { "(" year ")" * * } - if$ +FUNCTION { format.names.all } { + total.names.int 'remaining.names.int := + format.names.loop } - -FUNCTION {format.bdate} -{ year empty$ - { "There's no year in " cite$ * warning$ } - 'year +FUNCTION { format.names.etal } { + ctrl.etal.firstonly.bool + { #1 'remaining.names.int := } + { ctrl.etal.number.int 'remaining.names.int := } if$ -} - -FUNCTION {either.or.check} -{ empty$ - 'pop$ - { "Can't use both " swap$ * " fields in " * cite$ * warning$ } + format.names.loop + current.name.str "others," = + { } + { + add.space + bbl.etal + add.space + * + } if$ } -FUNCTION {format.edition} -{ edition duplicate$ empty$ - 'skip$ - { convert.edition - bbl.edition bibinfo.check - " " * bbl.edition * +FUNCTION { format.names } { + 'names.separate.comma.bool := + 'names.str := + #1 'current.name.int := + names.str num.names$ 'total.names.int := + total.names.int ctrl.etal.number.int > + { + ctrl.etal.number.int #0 = + { format.names.all } + { format.names.etal } + if$ } + { format.names.all } if$ } -INTEGERS { multiresult } -FUNCTION {multi.page.check} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and +FUNCTION { bbl.first } { "1st" } + +FUNCTION { bbl.second } { "2nd" } + +FUNCTION { bbl.third } { "3rd" } + +FUNCTION { bbl.fourth } { "4th" } + +FUNCTION { bbl.fifth } { "5th" } + +FUNCTION { bbl.st } { "st" } + +FUNCTION { bbl.nd } { "nd" } + +FUNCTION { bbl.rd } { "rd" } + +FUNCTION { bbl.th } { "th" } + +STRINGS { + ord.input.str + ord.output.str +} + +FUNCTION { make.ordinal } { + duplicate$ + "1" swap$ + * + #-2 #1 substring$ + "1" = + { + bbl.th * } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } + { + duplicate$ + #-1 #1 substring$ + duplicate$ + "1" = + { + pop$ + bbl.st * + } + { + duplicate$ + "2" = + { + pop$ + bbl.nd * + } + { + "3" = + { bbl.rd * } + { bbl.th * } + } + if$ + } if$ } - while$ - multiresult + if$ } -FUNCTION {format.pages} -{ pages empty$ - { "" } - { pages multi.page.check - { bbl.pages pages n.dashify tie.or.space.connect } - { bbl.page pages tie.or.space.connect } - if$ +FUNCTION { convert.to.ordinal } { + extract.number + "l" change.case$ 'ord.input.str := + ord.input.str "first" = ord.input.str "1" = or + { bbl.first 'ord.output.str := } + { + ord.input.str "second" = ord.input.str "2" = or + { bbl.second 'ord.output.str := } + { + ord.input.str "third" = ord.input.str "3" = or + { bbl.third 'ord.output.str := } + { + ord.input.str "fourth" = ord.input.str "4" = or + { bbl.fourth 'ord.output.str := } + { + ord.input.str "fifth" = ord.input.str "5" = or + { bbl.fifth 'ord.output.str := } + { + ord.input.str #1 #1 substring$ + is.a.number + { ord.input.str make.ordinal } + { ord.input.str } + if$ + 'ord.output.str := + } + if$ + } + if$ + } + if$ + } + if$ } if$ + ord.output.str } -FUNCTION {format.pages.required} -{ pages empty$ - { "" - "There are no page numbers for " cite$ * warning$ + +FUNCTION { format.address } { + address empty$ + { } + { + address output } - { pages multi.page.check - { bbl.pages pages n.dashify tie.or.space.connect } - { bbl.page pages tie.or.space.connect } - if$ - } if$ } -FUNCTION {format.pages.nopp} -{ pages empty$ - { "" - "There are no page numbers for " cite$ * warning$ +FUNCTION { format.authors } { + author empty$ + { } + { + author names.separate.comma format.names output - } - { pages multi.page.check - { pages n.dashify space.connect } - { pages space.connect } - if$ + next.punct.space 'next.punct.int := } if$ } -FUNCTION {format.pages.patent} -{ pages empty$ - { "There is no patent number for " cite$ * warning$ } - { pages multi.page.check - { pages n.dashify } - { pages n.separate.multi } +FUNCTION { format.editors } { + editor empty$ + { } + { + editor names.separate.comma format.names + add.comma + editor num.names$ #1 > + { bbl.editors } + { bbl.editor } if$ + * + output + next.punct.semicolon 'next.punct.int := } if$ } -FUNCTION {format.vol.pages} -{ volume emphasize field.or.null - duplicate$ empty$ - { pop$ format.pages.required } - { add.comma pages n.dashify * } +FUNCTION { format.authors.or.editors } { + author empty$ + { format.editors } + { format.authors } if$ + next.punct.space 'next.punct.int := } -FUNCTION {format.chapter.pages} -{ chapter empty$ - 'format.pages - { type empty$ - { bbl.chapter } - { type "l" change.case$ } - if$ - chapter tie.or.space.connect - pages empty$ - 'skip$ - { add.comma format.pages * } - if$ +FUNCTION { format.chapter } { + chapter empty$ + { } + { + bbl.chapter add.space + chapter + * + output } if$ } -FUNCTION {format.title.in} -{ 's := - s empty$ - { "" } - { editor empty$ - { bbl.in s format.title space.connect } - { bbl.in s format.title space.connect - add.semicolon format.editors * - } - if$ - } - if$ +FUNCTION { format.doi } { + bbl.doi add.space * + doi * + output } -FUNCTION {format.org.address} -{ organization empty$ - { "" } - { address empty$ - { organization } - { organization add.colon address *} - if$ +FUNCTION { format.edition } { + edition empty$ + { } + { + edition convert.to.ordinal + add.space bbl.edition * + output } if$ + next.punct.semicolon 'next.punct.int := } -FUNCTION {format.pub.address} -{ publisher empty$ - { "" } - { address empty$ - { publisher } - { publisher add.colon address *} +FUNCTION { format.group.address } { + duplicate$ + empty$ + { pop$ } + { + address empty$ + { } + { + add.colon + address + * + } if$ + output } if$ } -FUNCTION {format.school.address} -{ school empty$ - { "" } - { address empty$ - { school } - { school add.colon address *} - if$ +FUNCTION { format.howpublished } { + howpublished empty$ + { } + { + howpublished + output } if$ } -FUNCTION {format.organization.address} -{ organization empty$ - { "" } - { address empty$ - { organization } - { organization add.colon address *} - if$ - } - if$ +FUNCTION { format.journal } { + journal emph + output + next.punct.space 'next.punct.int := } -FUNCTION {format.version} -{ edition empty$ - { "" } - { bbl.version edition tie.or.space.connect } - if$ +FUNCTION { format.journal.unpub } { + journal emph + output } -FUNCTION {empty.misc.check} -{ author empty$ title empty$ howpublished empty$ - year empty$ note empty$ url empty$ - and and and and and - { "all relevant fields are empty in " cite$ * warning$ } - 'skip$ +FUNCTION { format.note } { + note empty$ + { } + { + note + output + } if$ } -FUNCTION {empty.doi.note} -{ doi empty$ note empty$ and - { "Need either a note or DOI for " cite$ * warning$ } - 'skip$ +FUNCTION { format.number.series } { + series empty$ + { } + { + series + number empty$ + { } + { + add.space + number * + } + if$ + output + next.punct.semicolon 'next.punct.int := + } if$ } -FUNCTION {format.thesis.type} -{ type empty$ - 'skip$ - { pop$ - type emphasize +FUNCTION { format.organization } { + organization empty$ + { } + { + organization paren + output + next.punct.period 'next.punct.int := } if$ } -FUNCTION {article} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - format.date "year" output.check - after.item 'output.state := - add.title - journal emphasize "journal" output.check - after.item 'output.state := - volume empty$ - { "" - format.pages.nopp output - } - { format.vol.pages output } - if$ - note output - fin.entry +FUNCTION { format.organization.address } { + organization format.group.address } -FUNCTION {book} -{ output.bibitem - author empty$ - { booktitle empty$ - { title format.title "title" output.check } - { booktitle format.title "booktitle" output.check } - if$ - format.edition output - new.block - editor empty$ - { "Need either an author or editor for " cite$ * warning$ } - { "" format.editors * "editor" output.check } - if$ - } - { format.authors output - after.item 'output.state := - "author and editor" editor either.or.check - booktitle empty$ - { title format.title "title" output.check } - { booktitle format.title "booktitle" output.check } +FUNCTION { format.pages } { + pages empty$ + { } + { + pages multi.page.check + { + bbl.pages + pages hyphen.to.dash + } + { bbl.page pages } if$ - format.edition output + tie.or.space.connect + output } if$ - new.block - format.number.series output - new.block - format.pub.address "publisher" output.check - format.bdate "year" output.check - new.block - format.bvolume output +} + +FUNCTION { format.pages.article } { pages empty$ - 'skip$ - { format.pages output } + { } + { + pages hyphen.to.dash + output + } if$ - note output - fin.entry } -FUNCTION {booklet} -{ output.bibitem - format.authors output - after.item 'output.state := - title format.title "title" output.check - howpublished output - address output - format.date output - note output - fin.entry +FUNCTION { format.publisher.address } { + publisher format.group.address } -FUNCTION {inbook} -{ output.bibitem - author empty$ - { title format.title "title" output.check - format.edition output - new.block - editor empty$ - { "Need at least an author or an editor for " cite$ * warning$ } - { "" format.editors * "editor" output.check } - if$ - } - { format.authors output - after.item 'output.state := - title format.title.in "title" output.check - format.edition output - } - if$ - new.block - format.number.series output - new.block - format.pub.address "publisher" output.check - format.bdate "year" output.check - new.block - format.bvolume output - format.chapter.pages "chapter and pages" output.check - note output - fin.entry -} - -FUNCTION {incollection} -{ output.bibitem - author empty$ - { booktitle format.title "booktitle" output.check - format.edition output - new.block - editor empty$ - { "Need at least an author or an editor for " cite$ * warning$ } - { "" format.editors * "editor" output.check } - if$ - } - { format.authors output - after.item 'output.state := - title empty$ - 'skip$ - { title format.title.noemph output } +FUNCTION { format.school.address } { + school + duplicate$ + empty$ + { pop$ } + { + address empty$ + { } + { + add.comma + address + * + } if$ - after.sentence 'output.state := - booktitle format.title.in "booktitle" output.check - format.edition output - } - if$ - new.block - format.number.series output - new.block - format.pub.address "publisher" output.check - format.bdate "year" output.check - new.block - format.bvolume output - format.chapter.pages "chapter and pages" output.check - note output - fin.entry -} - -FUNCTION {inpress} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - journal emphasize "journal" output.check - doi empty$ - { bbl.inpress output } - { after.item 'output.state := - format.date output - "DOI:" doi tie.or.space.connect output + output } if$ - note output - fin.entry } -FUNCTION {inproceedings} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := +FUNCTION { format.title } { title empty$ - 'skip$ - { title format.title.noemph output - after.sentence 'output.state := + { } + { + title + output + next.punct.period 'next.punct.int := } if$ - booktitle format.title output - address output - format.bdate "year" output.check - pages empty$ - 'skip$ - { new.block - format.pages output } - if$ - note output - fin.entry -} - -FUNCTION {manual} -{ output.bibitem - format.authors output - after.item 'output.state := - title format.title "title" output.check - format.version output - new.block - format.organization.address output - format.bdate output - note output - fin.entry -} - -FUNCTION {mastersthesis} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - bbl.msc format.thesis.type output - format.school.address "school" output.check - format.bdate "year" output.check - note output - fin.entry -} - -FUNCTION {misc} -{ output.bibitem - format.authors output - after.item 'output.state := - title empty$ - 'skip$ - { title format.title output } - if$ - howpublished output - year output - format.url output - note output - fin.entry - empty.misc.check -} - -FUNCTION {patent} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - journal "journal" output.check - after.item 'output.state := - format.pages.patent "pages" output.check - format.bdate "year" output.check - note output - fin.entry -} - -FUNCTION {phdthesis} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - bbl.phd format.thesis.type output - format.school.address "school" output.check - format.bdate "year" output.check - note output - fin.entry -} - -FUNCTION {proceedings} -{ output.bibitem - title format.title.noemph "title" output.check - address output - format.bdate "year" output.check - pages empty$ - 'skip$ - { new.block - format.pages output } - if$ - note output - fin.entry } -FUNCTION {techreport} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - title format.title "title" output.check - new.block - type empty$ - 'skip$ +FUNCTION { format.title.article } { + ctrl.use.title.bool { - type - number empty$ - 'skip$ - { number tie.or.space.connect } + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } if$ - output } + { } if$ - format.org.address output - format.bdate "year" output.check - pages empty$ - 'skip$ - { new.block - format.pages output } - if$ - note output - fin.entry } -FUNCTION {unpublished} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - journal empty$ - 'skip$ - { journal emphasize "journal" output.check } - if$ - doi empty$ - { note output } - { after.item 'output.state := - format.date output - "DOI:" doi tie.or.space.connect output - } - if$ - fin.entry - empty.doi.note -} - -%% Convert the strings "yes" or "no" to #1 or #0 respectively -FUNCTION {yes.no.to.int} -{ "l" change.case$ duplicate$ - "yes" = - { pop$ #1 } - { duplicate$ "no" = - { pop$ #0 } - { "unknown Boolean " quote$ * swap$ * quote$ * - " in " * cite$ * warning$ - #0 - } - if$ +FUNCTION { format.title.techreport } { + title empty$ + { } + { + title emph + output + next.punct.semicolon 'next.punct.int := } if$ } -%% Using the same mechanism as in IEEEtrans, control of -%% output can be achieved using a special entry type. -FUNCTION { Control } { - ctrl-use-title - empty$ { - skip$ - }{ - ctrl-use-title - yes.no.to.int - 'is.use.title := - } - if$ - ctrl-etal-number - empty$ { - skip$ - }{ - ctrl-etal-number - str.to.int - 'etal.number := - } +FUNCTION { format.title.booktitle } { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } if$ - ctrl-etal-truncate - empty$ { - skip$ - }{ - ctrl-etal-truncate - yes.no.to.int - 'etal.truncate := - } + booktitle empty$ + { } + { + booktitle + output + next.punct.period 'next.punct.int := + } if$ } -FUNCTION {conference} {inproceedings} - -FUNCTION {other} {patent} - -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."} - -%% The ACS journals by CODEN -MACRO {achre4} {"Acc.\ Chem.\ Res."} -MACRO {acbcct} {"ACS Chem.\ Biol."} -MACRO {ancac3} {"ACS Nano"} -MACRO {ancham} {"Anal.\ Chem."} -MACRO {bichaw} {"Biochemistry"} -MACRO {bcches} {"Bioconjugate Chem."} -MACRO {bomaf6} {"Biomacromolecules"} -MACRO {bipret} {"Biotechnol.\ Prog."} -MACRO {crtoec} {"Chem.\ Res.\ Toxicol."} -MACRO {chreay} {"Chem.\ Rev."} -MACRO {cmatex} {"Chem.\ Mater."} -MACRO {cgdefu} {"Cryst.\ Growth Des."} -MACRO {enfuem} {"Energy Fuels"} -MACRO {esthag} {"Environ.\ Sci.\ Technol."} -MACRO {iechad} {"Ind.\ Eng.\ Chem.\ Res."} -MACRO {inoraj} {"Inorg.\ Chem."} -MACRO {jafcau} {"J.~Agric.\ Food Chem."} -MACRO {jceaax} {"J.~Chem.\ Eng.\ Data"} -MACRO {jcisd8} {"J.~Chem.\ Inf.\ Model."} -MACRO {jctcce} {"J.~Chem.\ Theory Comput."} -MACRO {jcchff} {"J. Comb. Chem."} -MACRO {jmcmar} {"J. Med. Chem."} -MACRO {jnprdf} {"J. Nat. Prod."} -MACRO {joceah} {"J.~Org.\ Chem."} -MACRO {jpcafh} {"J.~Phys.\ Chem.~A"} -MACRO {jpcbfk} {"J.~Phys.\ Chem.~B"} -MACRO {jpccck} {"J.~Phys.\ Chem.~C"} -MACRO {jprobs} {"J.~Proteome Res."} -MACRO {jacsat} {"J.~Am.\ Chem.\ Soc."} -MACRO {langd5} {"Langmuir"} -MACRO {mamobx} {"Macromolecules"} -MACRO {mpohbp} {"Mol.\ Pharm."} -MACRO {nalefd} {"Nano Lett."} -MACRO {orlef7} {"Org.\ Lett."} -MACRO {oprdfk} {"Org.\ Proc.\ Res.\ Dev."} -MACRO {orgnd7} {"Organometallics"} - -READ - -FUNCTION {initialize.controls} -{ default.is.use.title 'is.use.title := - default.etal.number 'etal.number := +FUNCTION { format.chapter.title } { } -EXECUTE {initialize.controls} - -INTEGERS { len } - -FUNCTION {chop.word} -{ 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ +STRINGS { + book.title + chapter.title } -FUNCTION {format.lab.names} -{ 's := - s #1 "{vv~}{ll}" format.name$ - s num.names$ duplicate$ - #2 > - { pop$ bbl.etal space.connect } - { #2 < - 'skip$ - { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { bbl.etal space.connect } - { bbl.and space.connect s #2 "{vv~}{ll}" format.name$ space.connect } +FUNCTION { format.title.booktitle.book } { + "" 'chapter.title := + booktitle empty$ + { + "" 'chapter.title := + title 'book.title := + } + { + maintitle empty$ + { booktitle 'book.title := } + { maintitle add.period booktitle * 'book.title := } + if$ + } + if$ + chapter.title empty$ + { } + { + chapter.title + output + next.punct.period 'next.punct.int := + } + if$ + book.title emph + chapter.title empty$ + { + author empty$ + { } + { + editor empty$ + { } + { bbl.in add.space swap$ * } if$ } if$ } + { bbl.in add.space swap$ * } if$ + output } -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ +FUNCTION { format.type } { + type empty$ + { } + { + pop$ + type } - { author format.lab.names } if$ + output } -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } +FUNCTION { format.type.number } { + type empty$ + { } + { + type + number empty$ + { } + { number tie.or.space.connect } if$ + output } - { 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$ +FUNCTION { format.url } { + url empty$ + { } + { + "\url{" url * "}" * + output } - { 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$ +FUNCTION { format.year } { + year empty$ + { } + { + year + output + next.punct.semicolon 'next.punct.int := } - { editor format.lab.names } if$ } -FUNCTION {calc.short.authors} -{ 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$ +FUNCTION { format.year.article } { + year empty$ + { } + { + year paren + output + next.punct.space 'next.punct.int := } if$ - 'short.list := } -FUNCTION { calc.label } { - calc.short.authors - short.list - "(" - * - year duplicate$ empty$ - short.list key field.or.null = or - { pop$ "" } - 'skip$ +FUNCTION { format.version } { + version empty$ + { } + { + bbl.version add.space + version + * + output + } if$ - * - 'label := } -ITERATE { calc.label } +FUNCTION { format.volume.article } { + volume emph + output +} -STRINGS { - longest.label - last.label - next.extra +FUNCTION { format.volume } { + volume empty$ + { } + { + bbl.volume + volume + tie.or.space.connect + output + next.punct.semicolon 'next.punct.int := + } + if$ } -INTEGERS { - longest.label.width - last.extra.num - number.label + +FUNCTION { article } { + begin.bibitem + format.authors + format.year.article + format.title.article + format.journal + format.volume.article + format.pages.article + format.note + end.bibitem } -FUNCTION { initialize.longest.label } { - "" 'longest.label := - #0 int.to.chr$ 'last.label := - "" 'next.extra := - #0 'longest.label.width := - #0 'last.extra.num := - #0 'number.label := +FUNCTION { book } { + begin.bibitem + format.authors.or.editors + format.title.booktitle.book + format.edition + author empty$ + { } + { format.editors } + if$ + format.number.series + format.publisher.address + format.year + format.volume + format.chapter + format.pages + format.note + end.bibitem +} + +FUNCTION { inbook } { book } + +FUNCTION { booklet } { + begin.bibitem + format.authors + format.title + format.howpublished + format.address + format.year + format.note + end.bibitem } -FUNCTION {forward.pass} -{ last.label label = - { last.extra.num #1 + 'last.extra.num := - last.extra.num int.to.chr$ 'extra.label := +FUNCTION { collection } { book } + +FUNCTION { incollection } { book } + +FUNCTION { inpress } { + begin.bibitem + format.authors + format.journal.unpub + doi empty$ + { + bbl.inpress + output } - { "a" chr.to.int$ 'last.extra.num := - "" 'extra.label := - label 'last.label := + { + format.year + format.doi } if$ - number.label #1 + 'number.label := -} + format.note + end.bibitem +} + +FUNCTION { inproceeding } { + begin.bibitem + format.authors + format.title.booktitle + format.address + format.year + format.pages + format.note + end.bibitem +} + +FUNCTION { manual } { + begin.bibitem + format.authors + format.title + format.version + format.organization.address + format.year + format.note + end.bibitem +} + +FUNCTION { mastersthesis } { + begin.bibitem + format.authors + format.title + bbl.msc format.type + format.school.address + format.year + format.note + end.bibitem +} + +FUNCTION { misc } { + begin.bibitem + format.authors + format.title + format.howpublished + format.year + format.url + format.note + end.bibitem +} + +FUNCTION { patent } { + begin.bibitem + format.authors + format.organization + format.title + format.type.number + format.year + format.note + end.bibitem +} + +FUNCTION { phdthesis } { + begin.bibitem + format.authors + format.title + bbl.phd format.type + format.school.address + format.year + format.note + end.bibitem +} + +FUNCTION { proceeding } { + begin.bibitem + format.title + format.address + format.year + format.pages + format.note + end.bibitem +} + +FUNCTION { techreport } { + begin.bibitem + format.authors.or.editors + format.title.techreport + format.type.number + format.organization.address + format.year + format.volume + format.pages + format.note + end.bibitem +} + +FUNCTION { unpublished } { + begin.bibitem + format.authors + format.journal.unpub + doi empty$ + { format.howpublished } + { + format.year + format.doi + } + if$ + format.note + end.bibitem +} + +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 { acbcct } { "ACS Chem.\ Biol." } +MACRO { achre4 } { "Acc.\ Chem.\ Res." } +MACRO { acncdm } { "ACS Chem.\ Neurosci." } +MACRO { ancac3 } { "ACS Nano" } +MACRO { ancham } { "Anal.\ Chem." } +MACRO { bichaw } { "Biochemistry" } +MACRO { bcches } { "Bioconjugate Chem." } +MACRO { bomaf6 } { "Biomacromolecules" } +MACRO { bipret } { "Biotechnol.\ Prog." } +MACRO { crtoec } { "Chem.\ Res.\ Toxicol." } +MACRO { chreay } { "Chem.\ Rev." } +MACRO { cmatex } { "Chem.\ Mater." } +MACRO { cgdefu } { "Cryst.\ Growth Des." } +MACRO { enfuem } { "Energy Fuels" } +MACRO { esthag } { "Environ.\ Sci.\ Technol." } +MACRO { iechad } { "Ind.\ Eng.\ Chem.\ Res." } +MACRO { inoraj } { "Inorg.\ Chem." } +MACRO { jafcau } { "J.~Agric.\ Food Chem." } +MACRO { jceaax } { "J.~Chem.\ Eng.\ Data" } +MACRO { jceda8 } { "J.~Chem.\ Ed." } +MACRO { jcisd8 } { "J.~Chem.\ Inf.\ Model." } +MACRO { jctcce } { "J.~Chem.\ Theory Comput." } +MACRO { jcchff } { "J. Comb. Chem." } +MACRO { jmcmar } { "J. Med. Chem." } +MACRO { jnprdf } { "J. Nat. Prod." } +MACRO { joceah } { "J.~Org.\ Chem." } +MACRO { jpcafh } { "J.~Phys.\ Chem.~A" } +MACRO { jpcbfk } { "J.~Phys.\ Chem.~B" } +MACRO { jpccck } { "J.~Phys.\ Chem.~C" } +MACRO { jpclcd } { "J.~Phys.\ Chem.\ Lett." } +MACRO { jprobs } { "J.~Proteome Res." } +MACRO { jacsat } { "J.~Am.\ Chem.\ Soc." } +MACRO { langd5 } { "Langmuir" } +MACRO { mamobx } { "Macromolecules" } +MACRO { mpohbp } { "Mol.\ Pharm." } +MACRO { nalefd } { "Nano Lett." } +MACRO { orlef7 } { "Org.\ Lett." } +MACRO { oprdfk } { "Org.\ Proc.\ Res.\ Dev." } +MACRO { orgnd7 } { "Organometallics" } -EXECUTE { initialize.longest.label } -ITERATE { forward.pass } +READ -FUNCTION { begin.bib } { - preamble$ empty$ { - skip$ - }{ - preamble$ write$ newline$ - } - if$ - "\providecommand*{\mcitethebibliography}{\thebibliography}" - write$ newline$ - "\csname @ifundefined\endcsname{endmcitethebibliography}" - write$ newline$ - "{\let\endmcitethebibliography\endthebibliography}{}" - write$ newline$ - "\begin{mcitethebibliography}{" number.label int.to.str$ * "}" * - write$ newline$ - "\providecommand*{\natexlab}[1]{#1}" - write$ newline$ - "\providecommand*{\mciteSetBstSublistMode}[1]{}" - write$ newline$ - "\providecommand*{\mciteSetBstMaxWidthForm}[2]{}" - write$ newline$ - "\providecommand*{\mciteBstWouldAddEndPuncttrue}" - write$ newline$ - " {\def\EndOfBibitem{\unskip.}}" - write$ newline$ - "\providecommand*{\mciteBstWouldAddEndPunctfalse}" - write$ newline$ - " {\let\EndOfBibitem\relax}" - write$ newline$ - "\providecommand*{\mciteSetBstMidEndSepPunct}[3]{}" - write$ newline$ - "\providecommand*{\mciteSetBstSublistLabelBeginEnd}[3]{}" - write$ newline$ - "\providecommand*{\EndOfBibitem}{}" - write$ newline$ - "\mciteSetBstSublistMode{f}" - write$ newline$ - "\mciteSetBstMaxWidthForm{subitem}{(\alph{mcitesubitemcount})}" - write$ newline$ - "\mciteSetBstSublistLabelBeginEnd{\mcitemaxwidthsubitemform\space}" - write$ newline$ - "{\relax}{\relax}" - write$ newline$ -} +EXECUTE { initialize.control.values } -EXECUTE { begin.bib } +EXECUTE { initialize.count.entries } -EXECUTE { init.state.consts } +EXECUTE { initialize.name.separator } -EXECUTE { init.separate.by.semicolon } +EXECUTE { initialize.tracker } -ITERATE { call.type$ } +ITERATE { calculate.names } -FUNCTION { end.bib } { - newline$ - "\end{mcitethebibliography}" write$ newline$ -} +ITERATE { count.entries } + +EXECUTE { begin.bib } + +ITERATE { call.type$ } EXECUTE { end.bib } %% |