diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/achemso')
-rw-r--r-- | Master/texmf-dist/source/latex/achemso/achemso.dtx | 2811 |
1 files changed, 1447 insertions, 1364 deletions
diff --git a/Master/texmf-dist/source/latex/achemso/achemso.dtx b/Master/texmf-dist/source/latex/achemso/achemso.dtx index a362de13387..42fe38a4361 100644 --- a/Master/texmf-dist/source/latex/achemso/achemso.dtx +++ b/Master/texmf-dist/source/latex/achemso/achemso.dtx @@ -341,6 +341,9 @@ This work consists of the file achemso.dtx %\changes{v3.1}{2009/04/21}{ % Re-ordered code to reduce or remove dependency on other packages %} +%\changes{v3.5}{2010/06/25}{ +% New BibTeX style file. +%} % %\begin{abstract} % The \pkg{achemso} bundle provides a \LaTeX\ class file and \BibTeX\ @@ -845,6 +848,16 @@ This work consists of the file achemso.dtx % output using the \file{achemso.bst} file, but are with the % \file{biochem.bst} file. % +% The style used by the \ACS\ does not differentiate between +% \BibTeX\ \texttt{book}, \texttt{inbook}, \texttt{collection} and +% \texttt{incollection} entries. As a result, the appearance of +% these entry types depends on the fields available. Named subdivisions +% of a book (for example, chapters where each has a named author) +% should be given in the \texttt{title} field, with the title of +% the book itself in the \texttt{booktitle} field. The +% \texttt{chapter} field should be used for a chapter number, and +% is printed as part of the pagination. +% % One frequently asked question is why some people see an empty first % item in their bibliography when using the \pkg{achemso} package or % class. This is usually because they have downloaded the \LaTeX\ files @@ -905,7 +918,7 @@ This work consists of the file achemso.dtx % \begin{macrocode} %<*class> \ProvidesClass{achemso} - [2010/05/24 v3.4g Submission to ACS journals] + [2010/06/25 v3.5 Submission to ACS journals] \LoadClass[12pt,letter]{article} % \end{macrocode} % @@ -925,7 +938,7 @@ This work consists of the file achemso.dtx % \begin{macrocode} %<*package> \ProvidesPackage{achemso} - [2010/05/24 v3.4g Support for ACS journals] + [2010/06/25 v3.5 Support for ACS journals] \@ifclassloaded{achemso}{% \PackageInfo{achemso}{% You have already loaded the `achemso' class:\MessageBreak @@ -1108,10 +1121,10 @@ This work consists of the file achemso.dtx %\begin{macro}{\acs@biblabel@plain} % The macros to implement the idea above for biblabels. % \begin{macrocode} -\newcommand*\acs@biblabel@brackets{\def\@biblabel##1{(##1)}} -\newcommand*\acs@biblabel@fullstop{\def\@biblabel##1{##1.}} -\newcommand*\acs@biblabel@period{\def\@biblabel##1{##1.}} -\newcommand*\acs@biblabel@plain{\def\@biblabel##1{##1}} +\newcommand*\acs@biblabel@brackets{\def\bibnumfmt##1{(##1)}} +\newcommand*\acs@biblabel@fullstop{\def\bibnumfmt##1{##1.}} +\newcommand*\acs@biblabel@period{\def\bibnumfmt##1{##1.}} +\newcommand*\acs@biblabel@plain{\def\bibnumfmt##1{##1}} % \end{macrocode} %\end{macro} %\end{macro} @@ -1359,8 +1372,8 @@ This work consists of the file achemso.dtx \ifacs@usetitle yes\else no\fi }% \@tempa{ctrl-etal-number\space\space}{\acs@maxauthors}% - \@tempa{ctrl-etal-truncate}{% - \ifacs@etal@truncate yes\else no\fi + \@tempa{ctrl-etal-firstonly}{% + \ifacs@etal@truncate no\else yes\fi }% \string}^^J% }% @@ -3410,7 +3423,7 @@ This work consists of the file achemso.dtx % \begin{macrocode} %<*acbcct> \ProvidesFile{acbcct.cfg} - [2010/05/24 v3.4g achemso configuration: ACS Chem. Biol.] + [2010/06/25 v3.5 achemso configuration: ACS Chem. Biol.] \setkeys{acs}{ biblabel = fullstop, biochem = true, @@ -3422,7 +3435,7 @@ This work consists of the file achemso.dtx %</acbcct> %<*achre4> \ProvidesFile{achre4.cfg} - [2010/05/24 v3.4g achemso configuration: Acc. Chem. Res.] + [2010/06/25 v3.5 achemso configuration: Acc. Chem. Res.] \setkeys{acs}{ biblabel = plain, usetitle = true @@ -3432,7 +3445,7 @@ This work consists of the file achemso.dtx %</achre4> %<*acncdm> \ProvidesFile{acncdm.cfg} - [2010/05/24 v3.4g achemso configuration: ACS Chem. Neurosci.] + [2010/06/25 v3.5 achemso configuration: ACS Chem. Neurosci.] \def\acs@type@list{article,review,letter,suppinfo,viewpoint} \setkeys{acs}{ biblabel = fullstop, @@ -3444,7 +3457,7 @@ This work consists of the file achemso.dtx %</acncdm> %<*ancac3> \ProvidesFile{ancac3.cfg} - [2010/05/24 v3.4g achemso configuration: ACS Nano] + [2010/06/25 v3.5 achemso configuration: ACS Nano] \setkeys{acs}{ biblabel = fullstop, etalmode = truncate, @@ -3456,13 +3469,13 @@ This work consists of the file achemso.dtx %</ancac3> %<*ancham> \ProvidesFile{ancham.cfg} - [2010/05/24 v3.4g achemso configuration: Anal. Chem.] + [2010/06/25 v3.5 achemso configuration: Anal. Chem.] \def\acs@type@list{article,note,suppinfo} \SectionNumbersOff %</ancham> %<*bichaw> \ProvidesFile{biochem.cfg} - [2010/05/24 v3.4g achemso configuration: Biochemistry] + [2010/06/25 v3.5 achemso configuration: Biochemistry] \setkeys{acs}{ abbreviations = true, biblabel = fullstop, @@ -3512,7 +3525,7 @@ This work consists of the file achemso.dtx %</bichaw> %<*bcches> \ProvidesFile{bcches.cfg} - [2010/05/24 v3.4g achemso configuration: Bioconjugate Chem.] + [2010/06/25 v3.5 achemso configuration: Bioconjugate Chem.] \setkeys{acs}{ biochem = true, super = false, @@ -3530,14 +3543,14 @@ This work consists of the file achemso.dtx %\changes{v3.4e}{2010/03/13}{No article titles for % \emph{Biomacromolecules}} \ProvidesFile{bomaf6.cfg} - [2010/05/24 v3.4g achemso configuration: Biomacromolecules] + [2010/06/25 v3.5 achemso configuration: Biomacromolecules] \def\acs@type@list{article,comment,communication,note,review,suppinfo} \SectionNumbersOff \AtEndOfClass{\SectionsOn} %</bomaf6> %<*bipret> \ProvidesFile{bipret.cfg} - [2010/05/24 v3.4g achemso configuration: Biotechnol. Prog.] + [2010/06/25 v3.5 achemso configuration: Biotechnol. Prog.] \setkeys{acs}{ super = false, usetitle = true @@ -3547,7 +3560,7 @@ This work consists of the file achemso.dtx %</bipret> %<*crtoec> \ProvidesFile{crtoec.cfg} - [2010/05/24 v3.4g achemso configuration: Chem. Res. Toxicol.] + [2010/06/25 v3.5 achemso configuration: Chem. Res. Toxicol.] \setkeys{acs}{ biochem = true, super = false, @@ -3560,7 +3573,7 @@ This work consists of the file achemso.dtx %</crtoec> %<*chreay> \ProvidesFile{chreay.cfg} - [2010/05/24 v3.4g achemso configuration: Chem. Rev.] + [2010/06/25 v3.5 achemso configuration: Chem. Rev.] \def\acs@type@default{review} \def\acs@type@list{review} % \end{macrocode} @@ -3571,7 +3584,7 @@ This work consists of the file achemso.dtx %<*cmatex> % \begin{macrocode} \ProvidesFile{cmatex.cfg} - [2010/05/24 v3.4g achemso configuration: Chem. Mater.] + [2010/06/25 v3.5 achemso configuration: Chem. Mater.] \SectionNumbersOff \ifx\acs@manuscript\acs@manuscript@communication \AbstractOff @@ -3580,7 +3593,7 @@ This work consists of the file achemso.dtx %</cmatex> %<*cgdefu> \ProvidesFile{cgdefu.cfg} - [2010/05/24 v3.4g achemso configuration: Cryst. Growth Des.] + [2010/06/25 v3.5 achemso configuration: Cryst. Growth Des.] \def\acs@type@list{% article,communication,perspective,suppinfo% } @@ -3591,13 +3604,13 @@ This work consists of the file achemso.dtx %</cgdefu> %<*enfuem> \ProvidesFile{enfuem.cfg} - [2010/05/24 v3.4g achemso configuration: Energy Fuels] + [2010/06/25 v3.5 achemso configuration: Energy Fuels] \def\acs@type@list{article,review,suppinfo} \SectionNumbersOff %</enfuem> %<*esthag> \ProvidesFile{esthag.cfg} - [2010/05/24 v3.4g achemso configuration: Environ. Sci. Technol.] + [2010/06/25 v3.5 achemso configuration: Environ. Sci. Technol.] \setkeys{acs}{ super = false, usetitle = true @@ -3607,7 +3620,7 @@ This work consists of the file achemso.dtx %</esthag> %<*iecred> \ProvidesFile{iecred.cfg} - [2010/05/24 v3.4g achemso configuration: Ind. Eng. Chem. Res.] + [2010/06/25 v3.5 achemso configuration: Ind. Eng. Chem. Res.] \setkeys{acs}{ biblabel = fullstop, usetitle = true @@ -3616,7 +3629,7 @@ This work consists of the file achemso.dtx %</iecred> %<*inoraj> \ProvidesFile{inoraj.cfg} - [2010/05/24 v3.4g achemso configuration: Inorg. Chem.] + [2010/06/25 v3.5 achemso configuration: Inorg. Chem.] \SectionNumbersOff \ifx\acs@manuscript\acs@manuscript@communication \AbstractOff @@ -3631,7 +3644,7 @@ This work consists of the file achemso.dtx % \begin{macrocode} %<*jacsat> \ProvidesFile{jacsat.cfg} - [2010/05/24 v3.4g achemso configuration: J. Am. Chem. Soc.] + [2010/06/25 v3.5 achemso configuration: J. Am. Chem. Soc.] \SectionNumbersOff \ifx\acs@manuscript\acs@manuscript@communication\else \expandafter\endinput @@ -3834,7 +3847,7 @@ This work consists of the file achemso.dtx % \begin{macrocode} %<*jafcau> \ProvidesFile{jafcau.cfg} - [2010/05/24 v3.4g achemso configuration: J. Agric. Food Chem.] + [2010/06/25 v3.5 achemso configuration: J. Agric. Food Chem.] \setkeys{acs}{ super = false, usetitle = true @@ -3844,7 +3857,7 @@ This work consists of the file achemso.dtx %</jafcau> %<*jceaax> \ProvidesFile{jceaax.cfg} - [2010/05/24 v3.4g achemso configuration: J. Chem. Eng. Data] + [2010/06/25 v3.5 achemso configuration: J. Chem. Eng. Data] \setkeys{acs}{ usetitle = true } @@ -3853,7 +3866,7 @@ This work consists of the file achemso.dtx %</jceaax> %<*jceda8> \ProvidesFile{jceda8.cfg} - [2010/05/24 v3.4g achemso configuration: J. Chem. Ed.] + [2010/06/25 v3.5 achemso configuration: J. Chem. Ed.] \SectionNumbersOff \setkeys{acs}{ usetitle = true @@ -3863,7 +3876,7 @@ This work consists of the file achemso.dtx %</jceda8> %<*jcisd8> \ProvidesFile{jcisd8.cfg} - [2010/05/24 v3.4g achemso configuration: J. Chem. Inf. Model.] + [2010/06/25 v3.5 achemso configuration: J. Chem. Inf. Model.] \setkeys{acs}{ usetitle = true } @@ -3872,18 +3885,18 @@ This work consists of the file achemso.dtx %</jcisd8> %<*jctcce> \ProvidesFile{jctcce.cfg} - [2010/05/24 v3.4g achemso configuration: J. Chem. Theory Comput.] + [2010/06/25 v3.5 achemso configuration: J. Chem. Theory Comput.] \def\acs@type@list{article,suppinfo} %</jctcce> %<*jcchff> \ProvidesFile{jcchff.cfg} - [2010/05/24 v3.4g achemso configuration: J. Comb. Chem.] + [2010/06/25 v3.5 achemso configuration: J. Comb. Chem.] \def\acs@type@list{article,report,perspective,suppinfo} \SectionNumbersOff %</jcchff> %<*jmcmar> \ProvidesFile{jmcmar.cfg} - [2010/05/24 v3.4g achemso configuration: J. Med. Chem.] + [2010/06/25 v3.5 achemso configuration: J. Med. Chem.] \setkeys{acs}{ usetitle = true } @@ -3892,7 +3905,7 @@ This work consists of the file achemso.dtx %</jmcmar> %<*jnprdf> \ProvidesFile{jnprdf.cfg} - [2010/05/24 v3.4g achemso configuration: J. Nat. Prod.] + [2010/06/25 v3.5 achemso configuration: J. Nat. Prod.] \ifx\acs@manuscript\acs@manuscript@communication \AbstractOff \SectionsOff @@ -3902,7 +3915,7 @@ This work consists of the file achemso.dtx %\changes{v3.3e}{2009/11/18}{Formatting for \emph{J.\ Org.\ Chem}.\ % schemes corrected} \ProvidesFile{joceah.cfg} - [2010/05/24 v3.4g achemso configuration: J. Org. Chem.] + [2010/06/25 v3.5 achemso configuration: J. Org. Chem.] \ifx\acs@manuscript\acs@manuscript@communication \AbstractOff \SectionsOff @@ -3913,7 +3926,7 @@ This work consists of the file achemso.dtx %</joceah> %<*jpcafh> \ProvidesFile{jpcafh.cfg} - [2010/05/24 v3.4g achemso configuration: J. Phys. Chem. A] + [2010/06/25 v3.5 achemso configuration: J. Phys. Chem. A] \def\acs@type@list{article,suppinfo} \SectionNumbersOff \captionsetup[table]{labelfont=bf,textfont=bf} @@ -3924,7 +3937,7 @@ This work consists of the file achemso.dtx %</jpcafh> %<*jpcbfk> \ProvidesFile{jpcbfk.cfg} - [2010/05/24 v3.4g achemso configuration: J. Phys. Chem. B] + [2010/06/25 v3.5 achemso configuration: J. Phys. Chem. B] \def\acs@type@list{article,suppinfo} \SectionNumbersOff \captionsetup[table]{labelfont=bf,textfont=bf} @@ -3932,7 +3945,7 @@ This work consists of the file achemso.dtx %</jpcbfk> %<*jpccck> \ProvidesFile{jpccck.cfg} - [2010/05/24 v3.4g achemso configuration: J. Phys. Chem. C] + [2010/06/25 v3.5 achemso configuration: J. Phys. Chem. C] \def\acs@type@list{article,suppinfo} \SectionNumbersOff \captionsetup[table]{labelfont=bf,textfont=bf} @@ -3944,7 +3957,7 @@ This work consists of the file achemso.dtx % \begin{macrocode} %<*jpclcd> \ProvidesFile{jpclcd.cfg} - [2010/05/24 v3.4g achemso configuration: J. Phys. Chem. Lett.] + [2010/06/25 v3.5 achemso configuration: J. Phys. Chem. Lett.] \setkeys{acs}{usetitle = true} \def\acs@type@default{letter} \def\acs@type@list{letter} @@ -3954,7 +3967,7 @@ This work consists of the file achemso.dtx %</jpclcd> %<*jprobs> \ProvidesFile{jprobs.cfg} - [2010/05/24 v3.4g achemso configuration: J. Proteome Res.] + [2010/06/25 v3.5 achemso configuration: J. Proteome Res.] \setkeys{acs}{ usetitle = true } @@ -3963,32 +3976,32 @@ This work consists of the file achemso.dtx %</jprobs> %<*langd5> \ProvidesFile{langd5.cfg} - [2010/05/24 v3.4g achemso configuration: Langmuir] + [2010/06/25 v3.5 achemso configuration: Langmuir] \def\acs@type@list{article,letter,suppinfo} \SectionNumbersOff %</langd5> %<*mamobx> \ProvidesFile{mamobx.cfg} - [2010/05/24 v3.4g achemso configuration: Macromolecules] + [2010/06/25 v3.5 achemso configuration: Macromolecules] \SectionNumbersOff %</mamobx> %<*mpohbp> \ProvidesFile{mamobx.cfg} - [2010/05/24 v3.4g achemso configuration: Mol. Pharm.] + [2010/06/25 v3.5 achemso configuration: Mol. Pharm.] \setkeys{acs}{usetitle = true} \def\acs@type@list{article,suppinfo} \SectionNumbersOff %</mpohbp> %<*nalefd> \ProvidesFile{nalefd.cfg} - [2010/05/24 v3.4g achemso configuration: Nano Lett.] + [2010/06/25 v3.5 achemso configuration: Nano Lett.] \def\acs@type@default{letter} \def\acs@type@list{letter} \SectionNumbersOff %</nalefd> %<*orlef7> \ProvidesFile{orlef7.cfg} - [2010/05/24 v3.4g achemso configuration: Org. Lett.] + [2010/06/25 v3.5 achemso configuration: Org. Lett.] \def\acs@type@default{letter} \def\acs@type@list{letter} \SectionNumbersOff @@ -3998,13 +4011,13 @@ This work consists of the file achemso.dtx %</orlef7> %<*oprdfk> \ProvidesFile{oprdfk.cfg} - [2010/05/24 v3.4g achemso configuration: Org. Proc. Res. Dev.] + [2010/06/25 v3.5 achemso configuration: Org. Proc. Res. Dev.] \def\acs@type@list{article,highlight,review,suppinfo} \SectionNumbersOff %</oprdfk> %<*orgnd7> \ProvidesFile{orgnd7.cfg} - [2010/05/24 v3.4g achemso configuration: Organometallics] + [2010/06/25 v3.5 achemso configuration: Organometallics] \SectionNumbersOff %</orgnd7> % \end{macrocode} @@ -4151,7 +4164,8 @@ handled. The class loads \textsf{natbib}, and also the appropriate bibliography style. References can be made using the normal method; the citation should be placed before any punctuation, as the class will move it if using a superscript -citation style \cite{Mena2000,Abernethy2003,EuropeanCommission2008}. +citation style +\cite{Mena2000,Abernethy2003,Friedman-Hill2003,EuropeanCommission2008}. The use of \textsf{natbib} allows the use of the various citation commands of that package: \citeauthor{Abernethy2003} have shown something, in \citeyear{Cotton1999}, or as given by @@ -4165,11 +4179,11 @@ entries correctly. Multiple citations to be combined into a list can be given as a single citation. This uses the \textsf{mciteplus} package -\cite{Arduengo1992,*Eisenstein2005,*Arduengo1994}. Citations -other than the first of the list should be indicated with a star. -If the \textsf{mciteplus} package is not installed, the standard -bibliography tools will still work but starred references will be -ignored. +\cite{Johnson1972,*Arduengo1992,*Eisenstein2005,*Arduengo1994}. +Citations other than the first of the list should be indicated +with a star. If the \textsf{mciteplus} package is not installed, +the standard bibliography tools will still work but starred +references will be ignored. The class also handles notes to be added to the bibliography. These should be given in place in the document \bibnote{This is a note. @@ -4403,14 +4417,17 @@ separate page at the end of the document. \end{document} %</demo> %<*bst> -ENTRY - { address +% Database entries + +ENTRY + { + address author booktitle chapter - ctrl-use-title + ctrl-etal-firstonly ctrl-etal-number - ctrl-etal-truncate + ctrl-use-title doi edition editor @@ -4418,6 +4435,7 @@ ENTRY institution journal key + maintitle note number organization @@ -4428,1624 +4446,1669 @@ ENTRY title type url + version volume year } - {} - { label - extra.label - short.list + { } + { + label + short.names } + +% Generic logic functions, from the core BibTeX styles -INTEGERS { - before.all - mid.sentence - after.sentence - after.block - after.item +FUNCTION { and } { + { } + { + pop$ + #0 + } + if$ } -FUNCTION { init.state.consts } { - #0 'before.all := - #1 'mid.sentence := - #2 'after.sentence := - #3 'after.block := - #4 'after.item := +FUNCTION { not } { + { #0 } + { #1 } + if$ } -%% For true/false settings, #1 is regarded as true and #0 as false. -INTEGERS { - etal.number - etal.truncate - is.use.title +FUNCTION { or } { + { + pop$ + #1 + } + { } + if$ } -FUNCTION { default.etal.number } { #15 } - -FUNCTION { default.etal.truncate } { #0 } - -%<!bio>FUNCTION { default.is.use.title } { #0 } -%<bio>FUNCTION { default.is.use.title } { #1 } - -FUNCTION { add.comma } { ", " * } - -FUNCTION { add.colon } { ": " * } - -FUNCTION { add.semicolon } { "; " * } +FUNCTION { xor } { + { not } + { } + if$ +} + +% Generic functions for basic manipulations: many of these +% come from the core BibTeX styles or 'Tame the BeaST' + +FUNCTION { chr.to.value.error } { + #48 + + int.to.chr$ + "'" swap$ * + "'" * + " is not a number: treated as zero." * + warning$ + #0 +} -INTEGERS { separate.by.semicolon } +FUNCTION { chr.to.value } { + chr.to.int$ #48 - + duplicate$ + #0 < + { chr.to.value.error } + { + duplicate$ + #9 > + { chr.to.value.error } + { } + if$ + } + if$ +} -FUNCTION { init.separate.by.semicolon } -%<!bio> { #1 'separate.by.semicolon := } -%<bio> { #0 'separate.by.semicolon := } +STRINGS { + extract.input.str + extract.output.str +} -FUNCTION { add.comma.or.semicolon } { - #1 separate.by.semicolon = { - add.semicolon - }{ - add.comma - } +FUNCTION { is.a.digit } { + duplicate$ + "" = + { + pop$ + #0 + } + { + chr.to.int$ + #48 - + duplicate$ + #0 < swap$ #9 > or not + } if$ } -STRINGS { s t } - -INTEGERS { output.state } +FUNCTION{ is.a.number } { + { + duplicate$ + #1 #1 substring$ + is.a.digit + } + { #2 global.max$ substring$ } + while$ + "" = +} -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$ +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$ - } if$ } - if$ - mid.sentence 'output.state := - } - if$ - s -} - -FUNCTION { output } { - duplicate$ empty$ { - pop$ - }{ - output.nonnull - } + while$ + extract.output.str empty$ + { } + { + pop$ + extract.output.str + } if$ } -FUNCTION { output.check } { - 't := - duplicate$ empty$ { - pop$ "Empty " t * " in " * cite$ * warning$ - }{ - output.nonnull - } +FUNCTION { field.or.null } { + duplicate$ + empty$ + { + pop$ + "" + } + { } if$ } -FUNCTION { new.block } { - output.state before.all = { - skip$ - }{ - after.block 'output.state := - } - if$ +INTEGERS { + multiply.a.int + multiply.b.int } -FUNCTION {new.sentence} -{ output.state after.block = - 'skip$ - { output.state before.all = - 'skip$ - { after.sentence 'output.state := } - if$ +FUNCTION { multiply } { + 'multiply.a.int := + 'multiply.b.int := + multiply.b.int #0 < + { + #-1 + #0 multiply.b.int - 'multiply.b.int := } + { #1 } if$ + #0 + { multiply.b.int #0 > } + { + multiply.a.int + + multiply.b.int #1 - 'multiply.b.int := + } + while$ + swap$ + { } + { #0 swap$ - } + if$ } -INTEGERS { would.add.period.textlen } +INTEGERS { str.conversion.int } -FUNCTION {would.add.period} -{ duplicate$ - add.period$ - text.length$ - 'would.add.period.textlen := - duplicate$ - text.length$ - would.add.period.textlen = - { #0 } - { #1 } - if$ +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 {fin.entry} -{ would.add.period - { "\relax" * write$ newline$ - "\mciteBstWouldAddEndPuncttrue" write$ newline$ - "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" - write$ newline$ - "{\mcitedefaultendpunct}{\mcitedefaultseppunct}\relax" +FUNCTION { str.to.int.aux.i } { + duplicate$ + #1 #1 substring$ + "-" = + { + #1 swap$ + #2 global.max$ substring$ } - { "\relax" * write$ newline$ - "\mciteBstWouldAddEndPunctfalse" write$ newline$ - "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" - write$ newline$ - "{}{\mcitedefaultseppunct}\relax" + { + #0 swap$ } + if$ + #0 + swap$ + str.to.int.aux.ii + swap$ + { #0 swap$ - } + { } if$ - write$ - newline$ - "\EndOfBibitem" write$ } -FUNCTION {not} -{ { #0 } - { #1 } - if$ +FUNCTION { str.to.int } { + duplicate$ + empty$ + { + pop$ + #0 + } + { str.to.int.aux.i } + if$ } -FUNCTION {and} -{ 'skip$ - { pop$ #0 } +FUNCTION { tie.or.space.connect } { + duplicate$ + text.length$ #3 < + { "~" } + { " " } if$ + swap$ * * } -FUNCTION {or} -{ { pop$ #1 } - 'skip$ - if$ +FUNCTION { yes.no.to.bool } { + duplicate$ + empty$ + { + pop$ + #0 + } + { + "l" change.case$ + "yes" = + { #1 } + { #0 } + if$ + } + if$ } -FUNCTION {field.or.null} -{ duplicate$ empty$ - { pop$ "" } - 'skip$ +% Functions of formatting + +FUNCTION { bold } { + duplicate$ + empty$ + { + pop$ + "" + } + { "\textbf{" swap$ * "}" * } if$ } -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } +FUNCTION { emph } { + duplicate$ + empty$ + { + pop$ + "" + } { "\emph{" swap$ * "}" * } if$ } -FUNCTION {boldface} -{ duplicate$ empty$ - { pop$ "" } - { "\textbf{" swap$ * "}" * } - if$ -} -FUNCTION {paren} -{ duplicate$ empty$ - { pop$ "" } +FUNCTION { paren } { + duplicate$ + empty$ + { + pop$ + "" + } { "(" swap$ * ")" * } if$ } -FUNCTION {bbl.and} -{ "and" } +% Functions for punctuation -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" } +% Bibliography strings: fixed values collected into functions -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" } +% Functions for number formatting -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$ -} - -FUNCTION{is.a.digit} -{ duplicate$ "" = - {pop$ #0} - {chr.to.int$ #48 - duplicate$ - #0 < swap$ #9 > or not} - if$ -} - -FUNCTION{is.a.number} -{ - { duplicate$ #1 #1 substring$ is.a.digit } - {#2 global.max$ substring$} + { 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 {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 { multiresult.bool } + +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$ - s empty$ - 'skip$ - { pop$ s } - if$ + multiresult.bool } -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 - } - {} - if$ -} +% Functions for calculating the label data needed by natbib -%% Some tricks from "Tame the BeaST" to convert a string -%% to a number -INTEGERS { a b } +INTEGERS { + current.name.int + names.separate.comma + names.separate.semicolon + names.separate.comma.bool + remaining.names.int + total.names.int +} -FUNCTION {mult} -{ 'a := - 'b := - b #0 < - {#-1 #0 b - 'b :=} - {#1} - if$ - #0 - {b #0 >} - { a + - b #1 - 'b := +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$ - 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 { full.author } { + author empty$ + { "" } + { author full.format.names } + if$ +} + +FUNCTION { full.author.editor } { + author empty$ + { + editor empty$ + { "" } + { editor full.format.names } + if$ } - while$ - pop$ + { author full.format.names } + 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$ -} - {} - if$ +FUNCTION { full.editor } { + editor empty$ + { "" } + { editor full.format.names } + if$ } -FUNCTION {bibinfo.check} -{ swap$ - duplicate$ missing$ - { pop$ pop$ - "" +FUNCTION { short.format.names } { + 'names.str := + names.str #1 "{vv~}{ll}" format.name$ + names.str num.names$ + duplicate$ + #2 > + { + pop$ + add.space bbl.etal * } - { duplicate$ empty$ + { + #2 < + { } { - swap$ pop$ + 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$ } - { swap$ - pop$ + if$ + } + if$ +} + +FUNCTION { short.author.key } { + author empty$ + { + key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ + } + { author short.format.names } + if$ +} + +FUNCTION { short.author.editor.key } { + author empty$ + { + editor empty$ + { + key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ } + { editor short.format.names } if$ } - 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$ - } - 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$ + if$ } - if$ + { key } + if$ + } + { author short.format.names } + if$ +} + +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$ +} + +FUNCTION { calculate.full.names } { + type$ "book" = + type$ "inbook" = + or + { full.author.editor } + { + type$ "proceedings" = + { full.editor } + { full.author } + if$ } if$ - t } -FUNCTION {tie.or.space.connect} -{ duplicate$ text.length$ #3 < - { "~" } - { " " } +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$ - swap$ * * + 'short.names := +} + +FUNCTION { calculate.names } { + calculate.short.names + short.names + year empty$ + { "()" } + { "(" year * ")" * } + if$ + * + 'label := } -FUNCTION {space.connect} -{ " " swap$ * * } +% Counting up the number of entries + +INTEGERS { entries.int } -INTEGERS { - current.name - remaining.names - total.names +FUNCTION { initialize.count.entries } { + #0 'entries.int := } -STRINGS { - formatted.name - names.list +FUNCTION { count.entries } { + entries.int #1 + 'entries.int := } -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 := - }{ -%<*bio> - add.comma - remaining.names #1 > { - formatted.name * - }{ - bbl.and space.connect - formatted.name space.connect - } - if$ -%</bio> -%<*!bio> - add.comma.or.semicolon formatted.name * -%</!bio> - } - if$ - }{ - formatted.name +% Start and end of bibliography functions + +FUNCTION { begin.bib } { + preamble$ empty$ + { } + { + preamble$ write$ + newline$ } - if$ - current.name #1 + 'current.name := - remaining.names #1 - 'remaining.names := - } - while$ + 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.names.all } { - total.names 'remaining.names := - format.names.loop +FUNCTION { end.bib } { + newline$ + "\end{mcitethebibliography}" write$ + newline$ } -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$ +% Functions used for the special "control" entry type, to pass data +% from LaTeX to BibTeX + +INTEGERS { + ctrl.use.title.bool + ctrl.etal.firstonly.bool + ctrl.etal.number.int } -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$ - } - if$ +FUNCTION { initialize.control.values } { +%<*bio> + #1 'ctrl.use.title.bool := +%</bio> +%<*!bio> + #0 'ctrl.use.title.bool := +%</!bio> + #1 'ctrl.etal.firstonly.bool := + #15 'ctrl.etal.number.int := } -INTEGERS { author.or.editor } +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.authors} -{ author empty$ - { "" } - { #1 'author.or.editor := -%<!bio> #1 'separate.by.semicolon := - author format.names - } - if$ +% Functions of each bibitem: tracking punctuation and transferring +% items to the .bbl file + +INTEGERS { + next.punct.comma + next.punct.period + next.punct.semicolon + next.punct.space } -FUNCTION {format.editors} -{ editor empty$ - { "" } - { #2 'author.or.editor := -%<!bio> #0 'separate.by.semicolon := - editor format.names - add.comma - editor num.names$ #1 > - { bbl.editors } - { bbl.editor } - if$ - * - } - if$ +FUNCTION { initialize.tracker } { + #0 'next.punct.comma := + #1 'next.punct.period := + #2 'next.punct.semicolon := + #3 'next.punct.space := } -INTEGERS { nameptr numnames namesleft } +INTEGERS { next.punct.int } -FUNCTION {n.separate.multi} -{ 't := - "" - #0 'numnames := - t text.length$ #4 > t is.a.number and +FUNCTION { output } { + swap$ + duplicate$ empty$ + { pop$ } { - { 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$ + next.punct.int next.punct.space = + { add.space } + { + next.punct.int next.punct.comma = + { add.comma } + { + next.punct.int next.punct.semicolon = + { add.semicolon } + { add.period } + if$ + } + if$ + } + if$ + write$ } - { t swap$ * } - if$ + if$ + next.punct.comma 'next.punct.int := } -FUNCTION {format.bvolume} -{ volume empty$ - { "" } - { bbl.volume volume tie.or.space.connect } - if$ -} +% Functions for each bibliography entry: start and finish -FUNCTION {format.title.noemph} -{ 't := - t empty$ - { "" } - { t } - if$ +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 {format.title} -{ 't := - t empty$ - { "" } - { t emphasize } - if$ -} +INTEGERS { add.period.length.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$ +FUNCTION { would.add.period } { + duplicate$ + add.period$ + text.length$ 'add.period.length.int := + duplicate$ + text.length$ + add.period.length.int = + { #0 } + { #1 } if$ } -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$ +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 {format.url} -{ url empty$ - { "" } - { new.sentence "\url{" url * "}" * } - if$ +% Formatting names: authors and editors are not quite the same, +% and there is the question of how to handle 'et al.' + +FUNCTION { initialize.name.separator } { + #1 'names.separate.comma := + #0 'names.separate.semicolon := } -FUNCTION {format.full.names} -{'s := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr - "{vv~}{ll}" format.name$ 't := - nameptr #1 > +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 > { - namesleft #1 > - { ", " * t * } - { - numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { bbl.etal * } - { bbl.and space.connect t space.connect } + duplicate$ + "others," = + { + bbl.etal + add.space + remaining.names.int #1 'remaining.names.int := + } + { + swap$ + names.separate.comma.bool + { add.comma } + { add.semicolon } if$ +%<*bio> + remaining.names.int #1 > + { } + { bbl.and add.space * } + if$ +%</bio>s + swap$ + * } - if$ + if$ } - 't - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := + { } + if$ + remaining.names.int #1 - 'remaining.names.int := + current.name.int #1 + 'current.name.int := } while$ } -FUNCTION {author.editor.full} -{ author empty$ - { editor empty$ - { "" } - { editor format.full.names } - if$ - } - { author format.full.names } - if$ -} - -FUNCTION {author.full} -{ author empty$ - { "" } - { author format.full.names } - if$ +FUNCTION { format.names.all } { + total.names.int 'remaining.names.int := + format.names.loop } -FUNCTION {editor.full} -{ editor empty$ - { "" } - { editor format.full.names } - if$ +FUNCTION { format.names.etal } { + ctrl.etal.firstonly.bool + { #1 'remaining.names.int := } + { ctrl.etal.number.int 'remaining.names.int := } + if$ + format.names.loop + current.name.str "others," = + { } + { + add.space + bbl.etal + add.space + * + } + if$ } - -FUNCTION {make.full.names} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.full - { type$ "proceedings" = - 'editor.full - 'author.full - if$ + +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$ } - if$ + { format.names.all } + if$ } -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 := +% Converting editions into their fixed representations + +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 {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 := +FUNCTION { make.ordinal } { + duplicate$ + "1" swap$ + * + #-2 #1 substring$ + "1" = + { + bbl.th * + } + { + duplicate$ + #-1 #1 substring$ + duplicate$ + "1" = + { + pop$ + bbl.st * } - while$ + { + duplicate$ + "2" = + { + pop$ + bbl.nd * + } + { + "3" = + { bbl.rd * } + { bbl.th * } + } + if$ } if$ } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ - } - while$ + if$ } -%<*!bio> -FUNCTION {format.date} -{ year empty$ - { "" } - { year boldface } - 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 } -%</!bio> -%<*bio> -FUNCTION {format.date} -{ year empty$ - { "" } - { "(" year ")" * * } +% Functions for each type of entry + +FUNCTION { format.address } { + address empty$ + { } + { + address + output + } if$ } +FUNCTION { format.authors } { + author empty$ + { } + { +%<*bio> + author names.separate.comma format.names %</bio> +%<*!bio> + author names.separate.semicolon format.names +%</!bio> + output + next.punct.space 'next.punct.int := + } + if$ +} -FUNCTION {format.bdate} -{ year empty$ - { "There's no year in " cite$ * warning$ } - 'year - if$ +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 {either.or.check} -{ empty$ - 'pop$ - { "Can't use both " swap$ * " fields in " * cite$ * warning$ } - if$ +FUNCTION { format.authors.or.editors } { + author empty$ + { format.editors } + { format.authors } + if$ + next.punct.space 'next.punct.int := } -FUNCTION {format.edition} -{ edition duplicate$ empty$ - 'skip$ - { convert.edition - bbl.edition bibinfo.check - " " * bbl.edition * +FUNCTION { format.chapter } { + chapter empty$ + { } + { + bbl.chapter add.space + chapter + * + output } if$ } -INTEGERS { multiresult } - -FUNCTION {multi.page.check} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and - } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } - if$ - } - while$ - multiresult +FUNCTION { format.doi } { + bbl.doi add.space * + doi * + output } -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 { format.edition } { + edition empty$ + { } + { + edition convert.to.ordinal + add.space bbl.edition * + output } - if$ + if$ + next.punct.semicolon 'next.punct.int := } -FUNCTION {format.pages.required} -{ pages empty$ - { "" - "There are no page numbers for " cite$ * warning$ +FUNCTION { format.group.address } { + duplicate$ + empty$ + { pop$ } + { + address empty$ + { } + { + add.colon + address + * + } + if$ output } - { pages multi.page.check - { bbl.pages pages n.dashify tie.or.space.connect } - { bbl.page pages tie.or.space.connect } - if$ - } - if$ + if$ } -FUNCTION {format.pages.nopp} -{ pages empty$ - { "" - "There are no page numbers for " cite$ * warning$ +FUNCTION { format.howpublished } { + howpublished empty$ + { } + { + howpublished output } - { pages multi.page.check - { pages n.dashify space.connect } - { pages space.connect } - if$ - } 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 } - if$ - } - if$ +FUNCTION { format.journal } { + journal emph + output + next.punct.space 'next.punct.int := } -FUNCTION {format.vol.pages} -{ volume emphasize field.or.null - duplicate$ empty$ - { pop$ format.pages.required } - { add.comma pages n.dashify * } - if$ +FUNCTION { format.journal.unpub } { + journal emph + output } -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.note } { + note empty$ + { } + { + note + output } - if$ + 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$ +FUNCTION { format.number.series } { + series empty$ + { } + { + series + number empty$ + { } + { + add.space + number * + } + if$ + output + next.punct.semicolon 'next.punct.int := } - if$ + if$ } -FUNCTION {format.org.address} -{ organization empty$ - { "" } - { address empty$ - { organization } - { organization add.colon address *} - if$ + +FUNCTION { format.organization } { + organization empty$ + { } + { + organization paren + output + next.punct.period 'next.punct.int := } - if$ + if$ } -FUNCTION {format.pub.address} -{ publisher empty$ - { "" } - { address empty$ - { publisher } - { publisher add.colon address *} - if$ - } - if$ +FUNCTION { format.organization.address } { + organization format.group.address } -FUNCTION {format.school.address} -{ school empty$ - { "" } - { address empty$ - { school } - { school add.colon address *} +FUNCTION { format.pages } { + pages empty$ + { } + { + pages multi.page.check + { + bbl.pages + pages hyphen.to.dash + } + { bbl.page pages } if$ + tie.or.space.connect + output } if$ } -FUNCTION {format.organization.address} -{ organization empty$ - { "" } - { address empty$ - { organization } - { organization add.colon address *} - if$ +FUNCTION { format.pages.article } { + pages empty$ + { } + { + pages hyphen.to.dash + output } if$ } -FUNCTION {format.version} -{ edition empty$ - { "" } - { bbl.version edition tie.or.space.connect } - if$ +FUNCTION { format.publisher.address } { + publisher format.group.address } -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$ - if$ +FUNCTION { format.school.address } { + school + duplicate$ + empty$ + { pop$ } + { + address empty$ + { } + { + add.comma + address + * + } + if$ + output + } + if$ } -FUNCTION {empty.doi.note} -{ doi empty$ note empty$ and - { "Need either a note or DOI for " cite$ * warning$ } - 'skip$ +FUNCTION { format.title } { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } if$ } -FUNCTION {format.thesis.type} -{ type empty$ - 'skip$ - { pop$ - type emphasize +FUNCTION { format.title.article } { + ctrl.use.title.bool + { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } + if$ } + { } if$ } -FUNCTION {article} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := -%<bio> format.date "year" output.check -%<bio> after.item 'output.state := - add.title - journal emphasize "journal" output.check - after.item 'output.state := -%<!bio> format.date "year" output.check - volume empty$ - { "" - format.pages.nopp output +FUNCTION { format.title.techreport } { + title empty$ + { } + { + title emph + output + next.punct.semicolon 'next.punct.int := } - { format.vol.pages output } if$ - note output - fin.entry } -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$ +FUNCTION { format.title.booktitle } { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := } - { 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 } - if$ - format.edition output + if$ + booktitle empty$ + { } + { + booktitle + output + next.punct.period 'next.punct.int := } - 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 - pages empty$ - 'skip$ - { format.pages output } - if$ - note output - fin.entry + if$ } -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.chapter.title } { } -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 + +STRINGS { + book.title + chapter.title +} + +FUNCTION { format.title.booktitle.book } { + "" 'chapter.title := + booktitle empty$ + { + "" 'chapter.title := + title 'book.title := } - 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$ + { + maintitle empty$ + { booktitle 'book.title := } + { maintitle add.period booktitle * 'book.title := } + if$ } - { format.authors output - after.item 'output.state := - title empty$ - 'skip$ - { title format.title.noemph output } - if$ - after.sentence 'output.state := - booktitle format.title.in "booktitle" output.check - format.edition output + if$ + chapter.title empty$ + { } + { + chapter.title + output + next.punct.period 'next.punct.int := } - 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 + if$ + book.title emph + chapter.title empty$ + { + author empty$ + { } + { + editor empty$ + { } + { bbl.in add.space swap$ * } + if$ + } + if$ } - if$ - note output - fin.entry + { bbl.in add.space swap$ * } + if$ + output } -FUNCTION {inproceedings} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - title empty$ - 'skip$ - { title format.title.noemph output - after.sentence 'output.state := +FUNCTION { format.type } { + type empty$ + { } + { + pop$ + type } 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 + output } -FUNCTION {techreport} -{ output.bibitem - format.authors "author" output.check - after.item 'output.state := - title format.title "title" output.check - new.block +FUNCTION { format.type.number } { type empty$ - 'skip$ - { + { } + { type number empty$ - 'skip$ + { } { number tie.or.space.connect } - if$ + 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.url } { + url empty$ + { } + { + "\url{" url * "}" * + output } - 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 := - } - if$ - ctrl-etal-truncate - empty$ { - skip$ - }{ - ctrl-etal-truncate - yes.no.to.int - 'etal.truncate := - } - 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 := -} - -EXECUTE {initialize.controls} - -INTEGERS { len } - -FUNCTION {chop.word} -{ 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ + if$ } -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 } - if$ - } - if$ +FUNCTION { format.year } { + year empty$ + { } + { + year + output + next.punct.semicolon 'next.punct.int := } - if$ + if$ } -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ +FUNCTION { format.year.article } { + year empty$ + { } + { +%<*bio> + year paren + output + next.punct.space 'next.punct.int := +%</bio> +%<*!bio> + year bold + output +%</!bio> } - { author format.lab.names } if$ } -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ - } - { author format.lab.names } - if$ +FUNCTION { format.version } { + version empty$ + { } + { + bbl.version add.space + version + * + output + } + if$ } -FUNCTION {author.key.organization.label} -{ author empty$ - { key empty$ - { organization empty$ - { cite$ #1 #3 substring$ } - { "The " #4 organization chop.word #3 text.prefix$ } - if$ - } - 'key - if$ - } - { author format.lab.names } - if$ +FUNCTION { format.volume.article } { + volume emph + output } -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.volume } { + volume empty$ + { } + { + bbl.volume + volume + tie.or.space.connect + output + next.punct.semicolon 'next.punct.int := } - { editor format.lab.names } - if$ + 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$ - } - if$ - 'short.list := +% The functions to deal with each entry type + +FUNCTION { article } { + begin.bibitem + format.authors +%<*bio> + format.year.article +%</bio> + format.title.article + format.journal +%<*!bio> + format.year.article +%</!bio> + format.volume.article + format.pages.article + format.note + end.bibitem } -FUNCTION { calc.label } { - calc.short.authors - short.list - "(" - * - year duplicate$ empty$ - short.list key field.or.null = or - { pop$ "" } - 'skip$ +FUNCTION { book } { + begin.bibitem + format.authors.or.editors + format.title.booktitle.book + format.edition + author empty$ + { } + { format.editors } if$ - * - 'label := + format.number.series + format.publisher.address + format.year + format.volume + format.chapter + format.pages + format.note + end.bibitem } -ITERATE { calc.label } +FUNCTION { inbook } { book } -STRINGS { - longest.label - last.label - next.extra +FUNCTION { booklet } { + begin.bibitem + format.authors + format.title + format.howpublished + format.address + format.year + format.note + end.bibitem } -INTEGERS { - longest.label.width - last.extra.num - number.label -} +FUNCTION { collection } { book } -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 { incollection } { book } -FUNCTION {forward.pass} -{ last.label label = - { last.extra.num #1 + 'last.extra.num := - last.extra.num int.to.chr$ 'extra.label := +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 := + if$ + 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 } -EXECUTE { initialize.longest.label } +FUNCTION { default.type } { misc } + +% Macros containing pre-defined short cuts + +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" } + +% Construction of bibliography: reading of data, construction of +% labels, output of formatted bibliography -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 } %</bst> @@ -6140,6 +6203,26 @@ EXECUTE { end.bib } year = {2008} } +@INBOOK{Friedman-Hill2003, + author = {E. Friedman-Hill}, + booktitle = {{J}ess in {A}ction: {J}ava {R}ule-based {S}ystems}, + publisher = {Manning Publications Co.}, + address = {Greenwich, CT, USA}, + title = {Writing Rules in Jess}, + edition = {1}, + year = {2003} +} + +@PATENT{Johnson1972, + author = {Johnson, Alexander Lawrence}, + organization = {E.~I.~du Pont de Nemours}, + number = {3637731}, + title = {1-(Alkylsubstituted phenyl)imidazoles useful in ACTH + reverse assay}, + type = {US~Patent}, + year = {1972} +} + @MANUAL{Pople2003, title = {{G}aussian 03}, author = {M.~J. Frisch and G.~W. Trucks and H.~B. Schlegel and G.~E. Scuseria |