summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/achemso
diff options
context:
space:
mode:
authorManuel Pégourié-Gonnard <mpg@elzevir.fr>2010-06-30 11:31:25 +0000
committerManuel Pégourié-Gonnard <mpg@elzevir.fr>2010-06-30 11:31:25 +0000
commit40aaa8f302d7f1607e42350428364f78251bbd75 (patch)
tree7c9534e44ec30bb80b5cb2fa5a424bd6580bf29c /Master/texmf-dist/source/latex/achemso
parent13161f10a858f81d2221d2aa657e4a3fbfe8f488 (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/source/latex/achemso')
-rw-r--r--Master/texmf-dist/source/latex/achemso/achemso.dtx2811
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