summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/achemso
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/achemso
Initial commit
Diffstat (limited to 'macros/latex/contrib/achemso')
-rw-r--r--macros/latex/contrib/achemso/LICENSE.md11
-rw-r--r--macros/latex/contrib/achemso/README.md35
-rw-r--r--macros/latex/contrib/achemso/achemso-demo.bib153
-rw-r--r--macros/latex/contrib/achemso/achemso-demo.pdfbin0 -> 347883 bytes
-rw-r--r--macros/latex/contrib/achemso/achemso-demo.tex376
-rw-r--r--macros/latex/contrib/achemso/achemso.dtx6026
-rw-r--r--macros/latex/contrib/achemso/achemso.pdfbin0 -> 518408 bytes
7 files changed, 6601 insertions, 0 deletions
diff --git a/macros/latex/contrib/achemso/LICENSE.md b/macros/latex/contrib/achemso/LICENSE.md
new file mode 100644
index 0000000000..861b528777
--- /dev/null
+++ b/macros/latex/contrib/achemso/LICENSE.md
@@ -0,0 +1,11 @@
+Released under the [LaTeX Project Public
+License](http://www.latex-project.org/lppl.txt), v1.3c or later.
+
+The package has status 'maintained': the current maintainer is
+[Joseph Wright](joseph.wright@morningstar2.co.uk).
+
+Part of this bundle is derived from `cite.sty`, to which the
+following license applies:
+ Copyright (C) 1989-2009 by Donald Arseneau
+ These macros may be freely transmitted, reproduced, or
+ modified provided that this notice is left intact. \ No newline at end of file
diff --git a/macros/latex/contrib/achemso/README.md b/macros/latex/contrib/achemso/README.md
new file mode 100644
index 0000000000..af4dcab8c0
--- /dev/null
+++ b/macros/latex/contrib/achemso/README.md
@@ -0,0 +1,35 @@
+achemso - Support for submissions to American Chemical Society journals
+=======================================================================
+
+The `achemso` bundle provides a LaTeX class file and BibTeX
+style file in accordance with the requirements of the American
+Chemical Society (ACS). The files can be used for any documents,
+but have been carefully designed and tested to be suitable for
+submission to ACS journals.
+
+The bundle also includes the `natmove` package. This package is
+loaded by `achemso`, and provides automatic moving of
+superscript citations after punctuation.
+
+Installation
+------------
+
+The package is supplied in `.dtx` format and as a pre-extracted
+`.zip` file, `achemso.tds.zip`. The later is most convenient for
+most users: simply unzip this in your local `texmf` directory.
+If you want to unpack the `.dtx` yourself, running `tex
+achemso.dtx` will extract the package whereas `latex
+achemso.dtx` will extract it and also typeset the documentation.
+
+Typesetting the documentation requires a number of packages in
+addition to those needed to use the package. This is mainly
+because of the number of demonstration items included in the
+text. To compile the documentation without error, you will
+need the packages:
+ - `array`
+ - `booktabs`
+ - `hypdoc`
+ - `listings`
+ - `lmodern`
+ - `mathpazo`
+ - `microtype` \ No newline at end of file
diff --git a/macros/latex/contrib/achemso/achemso-demo.bib b/macros/latex/contrib/achemso/achemso-demo.bib
new file mode 100644
index 0000000000..7a71204086
--- /dev/null
+++ b/macros/latex/contrib/achemso/achemso-demo.bib
@@ -0,0 +1,153 @@
+
+@ARTICLE{Abernethy2003,
+ author = {Colin D. Abernethy and Gareth M. Codd and Mark D. Spicer
+ and Michelle K. Taylor},
+ title = {A highly stable {N}-heterocyclic carbene complex of
+ trichloro-oxo-vanadium(\textsc{v}) displaying novel
+ {Cl}---{C}(carbene) bonding interactions},
+ journal = {J.~Am. Chem. Soc.},
+ year = {2003},
+ volume = {125},
+ pages = {1128--1129},
+ number = {5},
+ doi = {10.1021/ja0276321},
+}
+
+@MISC{ACS2007,
+ url = {http://pubs.acs.org/books/references.shtml},
+}
+
+@ARTICLE{Arduengo1992,
+ author = {Arduengo, III, Anthony J. and H. V. Rasika Dias and
+ Richard L. Harlow and Michael Kline},
+ title = {Electronic stabilization of nucleophilic carbenes},
+ journal = {J.~Am.\ Chem.\ Soc.},
+ year = {1992},
+ volume = {114},
+ pages = {5530--5534},
+ number = {14},
+ doi = {10.1021/ja00040a007},
+}
+
+@ARTICLE{Arduengo1994,
+ author = {Arduengo, III, Anthony J. and Siegfried F. Gamper and
+ Joseph C. Calabrese and Fredric Davidson},
+ title = {{Low}-coordinate carbene complexes of nickel(0) and
+ platinum(0)},
+ journal = jacsat,
+ year = {1994},
+ volume = {116},
+ pages = {4391--4394},
+ number = {10},
+ doi = {10.1021/ja00089a029},
+}
+
+@ARTICLE{Eisenstein2005,
+ author = {Appelhans, Leah N. and Zuccaccia, Daniele and Kovacevic,
+ Anes and Chianese, Anthony R. and Miecznikowski, John R. and
+ Macchioni, Aleco and Clot, Eric and Eisenstein, Odile and
+ Crabtree, Robert H.},
+ title = {An anion-dependent switch in selectivity results from a
+ change of {C}---{H} activation mechanism in the reaction of an
+ imidazolium salt with \ce{IrH5(PPh3)2}},
+ journal = {J.~Am.\ Chem. Soc.},
+ year = {2005},
+ volume = {127},
+ pages = {16299--16311},
+ number = {46},
+ doi = {10.1021/ja055317j},
+}
+
+@BOOK{Coghill2006,
+ title = {The {ACS} Style Guide},
+ publisher = {Oxford University Press, Inc. and
+ The American Chemical Society},
+ year = {2006},
+ editor = {Coghill, Anne M. and Garson, Lorrin R.},
+ address = {New York},
+ edition = {3},
+ subtitle = {{Effective} Communication of Scientific
+ Information},
+}
+
+@BOOK{Cotton1999,
+ title = {Advanced Inorganic Chemistry},
+ publisher = {Wiley},
+ year = {1999},
+ author = {Cotton, Frank Albert and Wilkinson, Geoffrey and
+ Murillio, Carlos A. and Bochmann, Manfred},
+ address = {Chichester, United Kingdom},
+ edition = {6},
+}
+
+@TECHREPORT{EuropeanCommission2008,
+ address = {Brussels, Belgium},
+ organization = {European Commission},
+ title = {Communication from the European Commission to the
+ European Council and the European Parliament:
+ 20 20 by 2020: Europe's climate change opportunity},
+ year = {2008}
+}
+
+@INBOOK{Friedman-Hill2003,
+ author = {E. Friedman-Hill},
+ booktitle = {{Jess} in Action: {Java} Rule-based Systems},
+ 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 = {{Gaussian} 03},
+ author = {M.~J. Frisch and G.~W. Trucks and H.~B. Schlegel and G.~E. Scuseria
+and M.~A. Robb and J.~R. Cheeseman and Montgomery and Jr. and J.
+A. and T. Vreven and K.~N. Kudin and J.~C. Burant and J.~M. Millam
+and S.~S. Iyengar and J. Tomasi and V. Barone and B. Mennucci and
+M. Cossi and G. Scalmani and N. Rega and G.~A. Petersson and H. Nakatsuji
+and M. Hada and M. Ehara and K. Toyota and R. Fukuda and J. Hasegawa
+and M. Ishida and T. Nakajima and Y. Honda and O. Kitao and H. Nakai
+and M. Klene and X. Li and J.~E. Knox and H.~P. Hratchian and J.~B.
+Cross and V. Bakken and C. Adamo and J. Jaramillo and R. Gomperts
+and R.~E. Stratmann and O. Yazyev and A.~J. Austin and R. Cammi and
+C. Pomelli and J.~W. Ochterski and P.~Y. Ayala and K. Morokuma and
+G.~A. Voth and P. Salvador and J.~J. Dannenberg and V.~G. Zakrzewski
+and S. Dapprich and A.~D. Daniels and M.~C. Strain and O. Farkas
+and D.~K. Malick and A.~D. Rabuck and K. Raghavachari and J.~B. Foresman
+and J.~V. Ortiz and Q. Cui and A.~G. Baboul and S. Clifford and J.
+Cioslowski and B.~B. Stefanov and G. Liu and A. Liashenko and P.
+Piskorz and I. Komaromi and R.~L. Martin and D.~J. Fox and T. Keith
+and M.~A. Al-Laham and C.~Y. Peng and A. Nanayakkara and M. Challacombe
+and P.~M.~W. Gill and B. Johnson and W. Chen and M.~W. Wong and C.
+Gonzalez and J.~A. Pople},
+ organization = {Gaussian, Inc.},
+ address = {Wallingford, CT},
+ year = {2004},
+ howpublished = {Gaussian, Inc., Wallingford, CT, USA},
+ institution = {Gaussian, Inc.},
+ publisher = {Gaussian, Inc.}
+}
+
+@ARTICLE{Mena2000,
+ author = {Angel Abarca and Pilar G{\'o}mez-Sal and Avelino Mart{\'i}n
+ and Miguel Mena and Josep Mar{\'i}a Poblet and Carlos Y{\'e}lamos},
+ title = {Ammonolysis of mono(pentamethylcyclopentadienyl)
+ titanium(\textsc{iv}) derivatives},
+ journal = {Inorg. Chem.},
+ year = {2000},
+ volume = {39},
+ pages = {642--651},
+ number = {4},
+ doi = {10.1021/ic9907718},
+}
diff --git a/macros/latex/contrib/achemso/achemso-demo.pdf b/macros/latex/contrib/achemso/achemso-demo.pdf
new file mode 100644
index 0000000000..d2d25debd3
--- /dev/null
+++ b/macros/latex/contrib/achemso/achemso-demo.pdf
Binary files differ
diff --git a/macros/latex/contrib/achemso/achemso-demo.tex b/macros/latex/contrib/achemso/achemso-demo.tex
new file mode 100644
index 0000000000..73781e0fad
--- /dev/null
+++ b/macros/latex/contrib/achemso/achemso-demo.tex
@@ -0,0 +1,376 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% This is a (brief) model paper using the achemso class
+%% The document class accepts keyval options, which should include
+%% the target journal and optionally the manuscript type.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass[journal=jacsat,manuscript=article]{achemso}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Place any additional packages needed here. Only include packages
+%% which are essential, to avoid problems later.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage{chemformula} % Formula subscripts using \ch{}
+\usepackage[T1]{fontenc} % Use modern font encodings
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% If issues arise when submitting your manuscript, you may want to
+%% un-comment the next line. This provides information on the
+%% version of every file you have used.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%\listfiles
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Place any additional macros here. Please use \newcommand* where
+%% possible, and avoid layout-changing macros (which are not used
+%% when typesetting).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand*\mycommand[1]{\texttt{\emph{#1}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Meta-data block
+%% ---------------
+%% Each author should be given as a separate \author command.
+%%
+%% Corresponding authors should have an e-mail given after the author
+%% name as an \email command. Phone and fax numbers can be given
+%% using \phone and \fax, respectively; this information is optional.
+%%
+%% The affiliation of authors is given after the authors; each
+%% \affiliation command applies to all preceding authors not already
+%% assigned an affiliation.
+%%
+%% The affiliation takes an option argument for the short name. This
+%% will typically be something like "University of Somewhere".
+%%
+%% The \altaffiliation macro should be used for new address, etc.
+%% On the other hand, \alsoaffiliation is used on a per author basis
+%% when authors are associated with multiple institutions.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\author{Andrew N. Other}
+\altaffiliation{A shared footnote}
+\author{Fred T. Secondauthor}
+\altaffiliation{Current address: Some other place, Othert\"own,
+Germany}
+\author{I. Ken Groupleader}
+\altaffiliation{A shared footnote}
+\email{i.k.groupleader@unknown.uu}
+\phone{+123 (0)123 4445556}
+\fax{+123 (0)123 4445557}
+\affiliation[Unknown University]
+{Department of Chemistry, Unknown University, Unknown Town}
+\alsoaffiliation[Second University]
+{Department of Chemistry, Second University, Nearby Town}
+\author{Susanne K. Laborator}
+\email{s.k.laborator@bigpharma.co}
+\affiliation[BigPharma]
+{Lead Discovery, BigPharma, Big Town, USA}
+\author{Kay T. Finally}
+\affiliation[Unknown University]
+{Department of Chemistry, Unknown University, Unknown Town}
+\alsoaffiliation[Second University]
+{Department of Chemistry, Second University, Nearby Town}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% The document title should be given as usual. Some journals require
+%% a running title from the author: this should be supplied as an
+%% optional argument to \title.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title[An \textsf{achemso} demo]
+ {A demonstration of the \textsf{achemso} \LaTeX\
+ class\footnote{A footnote for the title}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Some journals require a list of abbreviations or keywords to be
+%% supplied. These should be set up here, and will be printed after
+%% the title and author information, if needed.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\abbreviations{IR,NMR,UV}
+\keywords{American Chemical Society, \LaTeX}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% The manuscript does not need to include \maketitle, which is
+%% executed automatically.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% The "tocentry" environment can be used to create an entry for the
+%% graphical table of contents. It is given here as some journals
+%% require that it is printed as part of the abstract page. It will
+%% be automatically moved as appropriate.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{tocentry}
+
+Some journals require a graphical entry for the Table of Contents.
+This should be laid out ``print ready'' so that the sizing of the
+text is correct.
+
+Inside the \texttt{tocentry} environment, the font used is Helvetica
+8\,pt, as required by \emph{Journal of the American Chemical
+Society}.
+
+The surrounding frame is 9\,cm by 3.5\,cm, which is the maximum
+permitted for \emph{Journal of the American Chemical Society}
+graphical table of content entries. The box will not resize if the
+content is too big: instead it will overflow the edge of the box.
+
+This box and the associated title will always be printed on a
+separate page at the end of the document.
+
+\end{tocentry}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% The abstract environment will automatically gobble the contents
+%% if an abstract is not used by the target journal.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{abstract}
+ This is an example document for the \textsf{achemso} document
+ class, intended for submissions to the American Chemical Society
+ for publication. The class is based on the standard \LaTeXe\
+ \textsf{report} file, and does not seek to reproduce the appearance
+ of a published paper.
+
+ This is an abstract for the \textsf{achemso} document class
+ demonstration document. An abstract is only allowed for certain
+ manuscript types. The selection of \texttt{journal} and
+ \texttt{manuscript} will determine if an abstract is valid. If
+ not, the class will issue an appropriate error.
+\end{abstract}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Start the main part of the manuscript here.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Introduction}
+This is a paragraph of text to fill the introduction of the
+demonstration file. The demonstration file attempts to show the
+modifications of the standard \LaTeX\ macros that are implemented by
+the \textsf{achemso} class. These are mainly concerned with content,
+as opposed to appearance.
+
+\section{Results and discussion}
+
+\subsection{Outline}
+
+The document layout should follow the style of the journal concerned.
+Where appropriate, sections and subsections should be added in the
+normal way. If the class options are set correctly, warnings will be
+given if these should not be present.
+
+\subsection{References}
+
+The class makes various changes to the way that references are
+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,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
+Ref.~\citenum{Mena2000}. Long lists of authors will be
+automatically truncated in most article formats, but not in
+supplementary information or reviews \cite{Pople2003}. If you
+encounter problems with the citation macros, please check that
+your copy of \textsf{natbib} is up to date. The demonstration
+database file \texttt{achemso-demo.bib} shows how to complete
+entries correctly. Notice that ``\latin{et al.}'' is auto-formatted
+using the \texttt{\textbackslash latin} command.
+
+Multiple citations to be combined into a list can be given as
+a single citation. This uses the \textsf{mciteplus} package
+\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. Individual references can be referred
+to using \texttt{\textbackslash mciteSubRef}:
+``ref.~\mciteSubRef{Eisenstein2005}''.
+
+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.
+The text will be moved the the references section. The title of the
+section will change to ``Notes and References''.}. As with
+citations, the text should be placed before punctuation. A note is
+also generated if a citation has an optional note. This assumes that
+the whole work has already been cited: odd numbering will result if
+this is not the case \cite[p.~1]{Cotton1999}.
+
+\subsection{Floats}
+
+New float types are automatically set up by the class file. The
+means graphics are included as follows (Scheme~\ref{sch:example}). As
+illustrated, the float is ``here'' if possible.
+\begin{scheme}
+ Your scheme graphic would go here: \texttt{.eps} format\\
+ for \LaTeX\, or \texttt{.pdf} (or \texttt{.png}) for pdf\LaTeX\\
+ \textsc{ChemDraw} files are best saved as \texttt{.eps} files:\\
+ these can be scaled without loss of quality, and can be\\
+ converted to \texttt{.pdf} files easily using \texttt{eps2pdf}.\\
+ %\includegraphics{graphic}
+ \caption{An example scheme}
+ \label{sch:example}
+\end{scheme}
+
+\begin{figure}
+ As well as the standard float types \texttt{table}\\
+ and \texttt{figure}, the class also recognises\\
+ \texttt{scheme}, \texttt{chart} and \texttt{graph}.
+ \caption{An example figure}
+ \label{fgr:example}
+\end{figure}
+
+Charts, figures and schemes do not necessarily have to be labelled or
+captioned. However, tables should always have a title. It is
+possible to include a number and label for a graphic without any
+title, using an empty argument to the \texttt{\textbackslash caption}
+macro.
+
+The use of the different floating environments is not required, but
+it is intended to make document preparation easier for authors. In
+general, you should place your graphics where they make logical
+sense; the production process will move them if needed.
+
+\subsection{Math(s)}
+
+The \textsf{achemso} class does not load any particular additional
+support for mathematics. If packages such as \textsf{amsmath} are
+required, they should be loaded in the preamble. However,
+the basic \LaTeX\ math(s) input should work correctly without
+this. Some inline material \( y = mx + c \) or $ 1 + 1 = 2 $
+followed by some display. \[ A = \pi r^2 \]
+
+It is possible to label equations in the usual way (Eq.~\ref{eqn:example}).
+\begin{equation}
+ \frac{\mathrm{d}}{\mathrm{d}x} \, r^2 = 2r \label{eqn:example}
+\end{equation}
+This can also be used to have equations containing graphical
+content. To align the equation number with the middle of the graphic,
+rather than the bottom, a minipage may be used.
+\begin{equation}
+ \begin{minipage}[c]{0.80\linewidth}
+ \centering
+ As illustrated here, the width of \\
+ the minipage needs to allow some \\
+ space for the number to fit in to.
+ %\includegraphics{graphic}
+ \end{minipage}
+ \label{eqn:graphic}
+\end{equation}
+
+\section{Experimental}
+
+The usual experimental details should appear here. This could
+include a table, which can be referenced as Table~\ref{tbl:example}.
+Notice that the caption is positioned at the top of the table.
+\begin{table}
+ \caption{An example table}
+ \label{tbl:example}
+ \begin{tabular}{ll}
+ \hline
+ Header one & Header two \\
+ \hline
+ Entry one & Entry two \\
+ Entry three & Entry four \\
+ Entry five & Entry five \\
+ Entry seven & Entry eight \\
+ \hline
+ \end{tabular}
+\end{table}
+
+Adding notes to tables can be complicated. Perhaps the easiest
+method is to generate these using the basic
+\texttt{\textbackslash textsuperscript} and
+\texttt{\textbackslash emph} macros, as illustrated (Table~\ref{tbl:notes}).
+\begin{table}
+ \caption{A table with notes}
+ \label{tbl:notes}
+ \begin{tabular}{ll}
+ \hline
+ Header one & Header two \\
+ \hline
+ Entry one\textsuperscript{\emph{a}} & Entry two \\
+ Entry three\textsuperscript{\emph{b}} & Entry four \\
+ \hline
+ \end{tabular}
+
+ \textsuperscript{\emph{a}} Some text;
+ \textsuperscript{\emph{b}} Some more text.
+\end{table}
+
+The example file also loads the optional \textsf{mhchem} package, so
+that formulas are easy to input: \texttt{\textbackslash ce\{H2SO4\}}
+gives \ch{H2SO4}. See the use in the bibliography file (when using
+titles in the references section).
+
+The use of new commands should be limited to simple things which will
+not interfere with the production process. For example,
+\texttt{\textbackslash mycommand} has been defined in this example,
+to give italic, mono-spaced text: \mycommand{some text}.
+
+\section{Extra information when writing JACS Communications}
+
+When producing communications for \emph{J.~Am.\ Chem.\ Soc.}, the
+class will automatically lay the text out in the style of the
+journal. This gives a guide to the length of text that can be
+accommodated in such a publication. There are some points to bear in
+mind when preparing a JACS Communication in this way. The layout
+produced here is a \emph{model} for the published result, and the
+outcome should be taken as a \emph{guide} to the final length. The
+spacing and sizing of graphical content is an area where there is
+some flexibility in the process. You should not worry about the
+space before and after graphics, which is set to give a guide to the
+published size. This is very dependant on the final published layout.
+
+You should be able to use the same source to produce a JACS
+Communication and a normal article. For example, this demonstration
+file will work with both \texttt{type=article} and
+\texttt{type=communication}. Sections and any abstract are
+automatically ignored, although you will get warnings to this effect.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% The "Acknowledgement" section can be given in all manuscript
+%% classes. This should be given within the "acknowledgement"
+%% environment, which will make the correct section or running title.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{acknowledgement}
+
+Please use ``The authors thank \ldots'' rather than ``The
+authors would like to thank \ldots''.
+
+The author thanks Mats Dahlgren for version one of \textsf{achemso},
+and Donald Arseneau for the code taken from \textsf{cite} to move
+citations after punctuation. Many users have provided feedback on the
+class, which is reflected in all of the different demonstrations
+shown in this document.
+
+\end{acknowledgement}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% The same is true for Supporting Information, which should use the
+%% suppinfo environment.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{suppinfo}
+
+A listing of the contents of each file supplied as Supporting Information
+should be included. For instructions on what should be included in the
+Supporting Information as well as how to prepare this material for
+publications, refer to the journal's Instructions for Authors.
+
+The following files are available free of charge.
+\begin{itemize}
+ \item Filename: brief description
+ \item Filename: brief description
+\end{itemize}
+
+\end{suppinfo}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% The appropriate \bibliography command should be placed here.
+%% Notice that the class file automatically sets \bibliographystyle
+%% and also names the section correctly.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\bibliography{achemso-demo}
+
+\end{document}
diff --git a/macros/latex/contrib/achemso/achemso.dtx b/macros/latex/contrib/achemso/achemso.dtx
new file mode 100644
index 0000000000..5d3453b14a
--- /dev/null
+++ b/macros/latex/contrib/achemso/achemso.dtx
@@ -0,0 +1,6026 @@
+% \iffalse meta-comment
+%<*internal>
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+achemso --- Support for submissions to American Chemical Society
+ journals
+E-mail: joseph.wright@morningstar2.co.uk
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Originally developed by Mats Dahlgren
+Copyright (C) 1996-1998 by Mats Dahlgren
+Copyright (C) 2008-2019 by
+ Joseph Wright <joseph.wright@morningstar2.co.uk>
+
+Part of this bundle is derived from cite.sty, to which the
+following license applies:
+ Copyright (C) 1989-2009 by Donald Arseneau
+ These macros may be freely transmitted, reproduced, or
+ modified provided that this notice is left intact.
+
+It may be distributed and/or modified under the conditions of
+the LaTeX Project Public License (LPPL), either version 1.3c of
+this license or (at your option) any later version. The latest
+version of this license is in the file:
+
+ http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+ Joseph Wright.
+
+This work consists of the files achemso.dtx,
+ achemso-demo.bib and
+ achemso-demo.tex,
+ and the derived files achemso.cls,
+ achemso.ins,
+ achemso.pdf,
+ achemso.sty,
+ natmove.sty and
+ a number of configuration files.
+
+\endpostamble
+\usedir{tex/latex/achemso}
+\generate{
+ \file{\jobname.cls}{\from{\jobname.dtx}{class}}
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+ \file{natmove.sty}{\from{\jobname.dtx}{natmove}}
+}
+\usedir{tex/latex/achemso/config}
+\generate{\file{achemso-aaembp.cfg}{\from{\jobname.dtx}{aaembp}}
+ \file{achemso-aaemcq.cfg}{\from{\jobname.dtx}{aaemcq}}
+ \file{achemso-aamick.cfg}{\from{\jobname.dtx}{aamick}}
+ \file{achemso-aanmf6.cfg}{\from{\jobname.dtx}{aanmf6}}
+ \file{achemso-aapmcd.cfg}{\from{\jobname.dtx}{aapmcd}}
+ \file{achemso-abseba.cfg}{\from{\jobname.dtx}{abseba}}
+ \file{achemso-accacs.cfg}{\from{\jobname.dtx}{accacs}}
+ \file{achemso-achre4.cfg}{\from{\jobname.dtx}{achre4}}
+}
+\generate{\file{achemso-acscii.cfg}{\from{\jobname.dtx}{acscii}}
+ \file{achemso-acbcct.cfg}{\from{\jobname.dtx}{acbcct}}
+ \file{achemso-acncdm.cfg}{\from{\jobname.dtx}{acncdm}}
+ \file{achemso-acsccc.cfg}{\from{\jobname.dtx}{acsccc}}
+ \file{achemso-aesccq.cfg}{\from{\jobname.dtx}{aesccq}}
+ \file{achemso-aelccp.cfg}{\from{\jobname.dtx}{aelccp}}
+ \file{achemso-ascefj.cfg}{\from{\jobname.dtx}{ascefj}}
+ \file{achemso-amlccd.cfg}{\from{\jobname.dtx}{amlccd}}
+}
+\generate{\file{achemso-amlcef.cfg}{\from{\jobname.dtx}{amlcef}}
+ \file{achemso-amclct.cfg}{\from{\jobname.dtx}{amclct}}
+ \file{achemso-ancac3.cfg}{\from{\jobname.dtx}{ancac3}}
+ \file{achemso-acsodf.cfg}{\from{\jobname.dtx}{acsodf}}
+ \file{achemso-apchd5.cfg}{\from{\jobname.dtx}{apchd5}}
+ \file{achemso-aidcbc.cfg}{\from{\jobname.dtx}{aidcbc}}
+ \file{achemso-ascecg.cfg}{\from{\jobname.dtx}{ascecg}}
+ \file{achemso-asbcd6.cfg}{\from{\jobname.dtx}{asbcd6}}
+}
+\generate{\file{achemso-ancham.cfg}{\from{\jobname.dtx}{ancham}}
+ \file{achemso-bichaw.cfg}{\from{\jobname.dtx}{bichaw}}
+ \file{achemso-bcches.cfg}{\from{\jobname.dtx}{bcches}}
+ \file{achemso-bomaf6.cfg}{\from{\jobname.dtx}{bomaf6}}
+ \file{achemso-crtoec.cfg}{\from{\jobname.dtx}{crtoec}}
+ \file{achemso-chreay.cfg}{\from{\jobname.dtx}{chreay}}
+ \file{achemso-cmatex.cfg}{\from{\jobname.dtx}{cmatex}}
+ \file{achemso-cgdefu.cfg}{\from{\jobname.dtx}{cgdefu}}
+}
+\generate{\file{achemso-enfuem.cfg}{\from{\jobname.dtx}{enfuem}}
+ \file{achemso-esthag.cfg}{\from{\jobname.dtx}{esthag}}
+ \file{achemso-estlcu.cfg}{\from{\jobname.dtx}{estlcu}}
+ \file{achemso-iecred.cfg}{\from{\jobname.dtx}{iecred}}
+ \file{achemso-inoraj.cfg}{\from{\jobname.dtx}{inoraj}}
+ \file{achemso-jafcau.cfg}{\from{\jobname.dtx}{jafcau}}
+ \file{achemso-jceda8.cfg}{\from{\jobname.dtx}{jceda8}}
+ \file{achemso-jceaax.cfg}{\from{\jobname.dtx}{jceaax}}
+}
+\generate{\file{achemso-jcisd8.cfg}{\from{\jobname.dtx}{jcisd8}}
+ \file{achemso-jctcce.cfg}{\from{\jobname.dtx}{jctcce}}
+ \file{achemso-jmcmar.cfg}{\from{\jobname.dtx}{jmcmar}}
+ \file{achemso-jnprdf.cfg}{\from{\jobname.dtx}{jnprdf}}
+ \file{achemso-joceah.cfg}{\from{\jobname.dtx}{joceah}}
+ \file{achemso-jpcafh.cfg}{\from{\jobname.dtx}{jpcafh}}
+ \file{achemso-jpcbfk.cfg}{\from{\jobname.dtx}{jpcbfk}}
+ \file{achemso-jpccck.cfg}{\from{\jobname.dtx}{jpccck}}
+}
+\generate{\file{achemso-jpclcd.cfg}{\from{\jobname.dtx}{jpclcd}}
+ \file{achemso-jprobs.cfg}{\from{\jobname.dtx}{jprobs}}
+ \file{achemso-jacsat.cfg}{\from{\jobname.dtx}{jacsat}}
+ \file{achemso-langd5.cfg}{\from{\jobname.dtx}{langd5}}
+ \file{achemso-mamobx.cfg}{\from{\jobname.dtx}{mamobx}}
+ \file{achemso-mpohbp.cfg}{\from{\jobname.dtx}{mpohbp}}
+ \file{achemso-nalefd.cfg}{\from{\jobname.dtx}{nalefd}}
+ \file{achemso-orlef7.cfg}{\from{\jobname.dtx}{orlef7}}
+}
+\generate{\file{achemso-oprdfk.cfg}{\from{\jobname.dtx}{oprdfk}}
+ \file{achemso-orgnd7.cfg}{\from{\jobname.dtx}{orgnd7}}
+}
+\usedir{bibtex/bst/achemso}
+\generate{
+ \file{achemso.bst}{\from{\jobname.dtx}{bst}}
+ \file{biochem.bst}{\from{\jobname.dtx}{bst,bio}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/achemso}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*package|class|natmove>
+\NeedsTeXFormat{LaTeX2e}
+%</package|class|natmove>
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{achemso,array,booktabs,lmodern}
+\usepackage[osf]{mathpazo}
+\usepackage[scaled=0.95]{helvet}
+\usepackage[final]{listings,microtype}
+\usepackage[T1]{fontenc}
+\usepackage[numbered]{hypdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%\GetFileInfo{\jobname.sty}
+%
+%\makeatletter
+%
+%^^A \DescribeOption is in l3doc but not ltxdoc
+%\newcommand*\DescribeOption{^^A
+% \leavevmode
+% \@bsphack
+% \begingroup
+% \MakePrivateLetters
+% \Describe@Option
+%}
+%\newcommand*\Describe@Option[1]{^^A
+% \endgroup
+% \marginpar{^^A
+% \raggedleft
+% \PrintDescribeEnv{#1}^^A
+% }%
+% \SpecialOptionIndex{#1}^^A
+% \@esphack
+% \ignorespaces
+%}
+%\newcommand*\SpecialOptionIndex[1]{^^A
+% \@bsphack
+% \index{^^A
+% #1\actualchar{\protect\ttfamily#1} (option)\encapchar usage^^A
+% }^^A
+% \index{^^A
+% options:\levelchar#1\actualchar{\protect\ttfamily#1}
+% \encapchar usage^^A
+% }^^A
+% \@esphack
+%}
+%
+%^^A For creating examples with nice highlighting of code, and so
+%^^A on; based on the system used in the listings source (lstsample).
+%\lst@RequireAspects{writefile}
+%\newsavebox{\LaTeXdemo@box}
+%\lstnewenvironment{LaTeXdemo}[1][code and example]{^^A
+% \global\let\lst@intname\@empty
+% \expandafter\let\expandafter\LaTeXdemo@end
+% \csname LaTeXdemo@#1@end\endcsname
+% \@nameuse{LaTeXdemo@#1}^^A
+%}{^^A
+% \LaTeXdemo@end
+%}
+%\newcommand*\LaTeXdemo@new[3]{^^A
+% \expandafter\newcommand\expandafter*\expandafter
+% {\csname LaTeXdemo@#1\endcsname}{#2}^^A
+% \expandafter\newcommand\expandafter*\expandafter
+% {\csname LaTeXdemo@#1@end\endcsname}{#3}^^A
+%}
+%\newcommand*\LaTeXdemo@common{^^A
+% \setkeys{lst}{
+% basicstyle = \small\ttfamily,
+% basewidth = 0.51em,
+% gobble = 3,
+% keywordstyle = \color{blue},
+% language = [LaTeX]{TeX},
+% moretexcs = {
+% affiliation,
+% alsoaffiliation,
+% altaffiliation,
+% email,
+% fax,
+% natmovechars,
+% phone,
+% setkeys
+% }
+% }^^A
+%}
+%\newcommand*\LaTeXdemo@input{^^A
+% \MakePercentComment
+% \catcode`\^^M=10\relax
+% \small
+% \begingroup
+% \setkeys{lst}{
+% SelectCharTable=\lst@ReplaceInput{\^\^I}{\lst@ProcessTabulator}
+% }^^A
+% \leavevmode
+% \input{\jobname.tmp}^^A
+% \endgroup
+% \MakePercentIgnore
+%}
+%\LaTeXdemo@new{code and example}{^^A
+% \setbox\LaTeXdemo@box=\hbox\bgroup
+% \lst@BeginAlsoWriteFile{\jobname.tmp}^^A
+% \LaTeXdemo@common
+%}{^^A
+% \lst@EndWriteFile
+% \egroup
+% \begin{center}
+% \ifdim\wd\LaTeXdemo@box>0.48\linewidth\relax
+% \hbox to\linewidth{\box\LaTeXdemo@box\hss}^^A
+% \begin{minipage}{\linewidth}
+% \LaTeXdemo@input
+% \end{minipage}
+% \else
+% \begin{minipage}{0.48\linewidth}
+% \LaTeXdemo@input
+% \end{minipage}
+% \hfill
+% \begin{minipage}{0.48\linewidth}
+% \hbox to\linewidth{\box\LaTeXdemo@box\hss}^^A
+% \end{minipage}
+% \fi
+% \end{center}
+%}
+%\LaTeXdemo@new{code only}{^^A
+% \LaTeXdemo@common
+%}{^^A
+%}
+%
+%\providecommand*\eTeX{\ensuremath{\varepsilon}-\TeX}
+%\providecommand*\file{\texttt}
+%\providecommand*\opt{\texttt}
+%\providecommand*\pkg{\textsf}
+%
+%\newcommand*\ACS{\textsc{acs}}
+%
+%\makeatother
+%
+%\title{^^A
+% \textsf{achemso} --- Support for submissions to American Chemical
+% Society journals\thanks{^^A
+% This file describes version \fileversion, last revised
+% \filedate.^^A
+% }^^A
+%}
+%\author{^^A
+% Joseph Wright\thanks{E-mail: joseph.wright@morningstar2.co.uk}^^A
+%}
+%\date{Released \filedate}
+%
+%\maketitle
+%
+% \changes{v1.0}{1998/06/01}{Initial release of package by Mats Dahlgren}
+% \changes{v2.0}{2007/01/17}{Re-write of package by Joseph Wright}
+% \changes{v3.0}{2008/07/20}{^^A
+% Second re-write, converting to a class and giving much tighter
+% integration with \textsc{acs} submission system^^A
+% }
+% \changes{v3.1}{2009/04/21}{^^A
+% Re-ordered code to reduce or remove dependency on other packages^^A
+% }
+% \changes{v3.1}{2008/11/08}{Added \cs{alsoaffiliation} macro}
+% \changes{v3.2}{2009/04/20}{^^A
+% New functions \cs{SectionsOff}, \cs{SectionsOn},
+% \cs{SectionNumbersOff} and \cs{SectionNumbersOn}
+% }
+% \changes{v3.2}{2009/04/21}{New \texttt{tocentry} section}
+% \changes{v3.2}{2009/04/20}{^^A
+% New functions \cs{AbstractOff} and \cs{AbstractOn}^^A
+% }
+% \changes{v3.2c}{2009/05/29}{Added \cs{fax} macro}
+% \changes{v3.2c}{2009/05/29}{Added \cs{phone} macro}
+% \changes{v3.2b}{2009/05/05}{New \texttt{email} option}
+% \changes{v3.2c}{2009/05/28}{Fix so that \texttt{email} option is turned
+% on by default}
+% \changes{v3.3}{2008/08/28}{\cs{altaffiliation} macro checks for
+% duplicate entries and uses only one footnote}
+% \changes{v3.3}{2009/08/28}{New \texttt{layout} option}
+% \changes{v3.3a}{2009/09/01}{New \texttt{etalmode} option}
+% \changes{v3.4}{2010/01/15}{More detail on installation}
+% \changes{v3.5}{2010/06/25}{New \BibTeX{} style file}
+% \changes{v3.5a}{2010/08/05}{Modify JACS Communication to print
+% abstract}
+% \changes{v3.5c}{2010/10/11}{Update \emph{Org.~Lett.}\ style}
+% \changes{v3.5c}{2010/10/11}{Bug fix for \cs{mciteSubRef} macro}
+% \changes{v3.4}{2010/01/15}{Require \pkg{cleveref}, dropping
+% \pkg{varioref} use}
+% \changes{v3.6}{2012/01/11}{Drop \pkg{cleverref} use}
+% \changes{v3.7}{2012/04/30}{Rename \opt{usetitle} option to
+% \opt{articletitle}}
+% \changes{v3.7}{2012/04/30}{New \opt{chaptertitle} option for bibliography}
+% \changes{v3.8}{2013/08/23}{Extend journal list to current ACS range}
+% \changes{v3.8}{2013/08/16}{Introduce \cs{latin} command to support
+% \emph{ACS Nano} requirements}
+% \changes{v3.8a}{2013/09/04}{Minor style improvements for some
+% journals}
+% \changes{v3.8b}{2013/09/15}{Improve output ordering for \emph{J.~Phys.\
+% Chem.\ Lett.}}
+% \changes{v3.8c}{2013/09/20}{Improve \emph{ACS Photonics} style}
+% \changes{v3.8d}{2013/10/04}{Fix bug in keyword printing}
+% \changes{v3.8e}{2014/01/08}{Minor style changes for \emph{J.~Med.~Chem.}
+% and \emph{ACS Appl.~Mater.}}
+% \changes{v3.8g}{2014/03/06}{Fix issue with \emph{J.~Phys.\ Chem.}\ formatting}
+% \changes{v3.8i}{2014/05/14}{Fix issue with \emph{Chem.\ Res.\ Toxicol.}\ formatting}
+% \changes{v3.8j}{2014/06/12}{Update article title requirements for all journals}
+% \changes{v3.8j}{2014/06/12}{Update keyword requirements for all journals}
+% \changes{v3.8j}{2014/06/12}{Remove \emph{Biotechnol.\ Prog.}\ configuration}
+% \changes{v3.8k}{2014/08/18}{Format date correctly for in press bibliography
+% entries}
+% \changes{v3.8l}{2014/08/23}{Fix printing of phone/fax numbers}
+% \changes{v3.9}{2015/02/01}{New \texttt{doi} option}
+% \changes{v3.9a}{2015/03/03}{Update style for \emph{ACS Central Sci.}}
+% \changes{v3.9b}{2015/03/22}{Update \emph{J. Agric. Food Chem.} style}
+% \changes{v3.10}{2015/04/07}{Update address printing to reflect new
+% ACS style}
+% \changes{v3.10}{2015/04/07}{Add starred (subs)sections to TOC}
+% \changes{v3.10a}{2015/04/21}{Add article titles for \emph{Chem.\ Mater.}
+% and \emph{Chem. Rev.}}
+% \changes{v3.10c}{2016/05/10}{Add support for \emph{ACS Omega} and
+% \emph{ACS Energy Lett.}}
+% \changes{v3.10d}{2016/06/17}{Improve handling of \textsc{doi} values}
+% \changes{v3.10e}{2016/08/31}{Tweak \emph{Macromolecules} formatting}
+% \changes{v3.10f}{2016/09/07}{Various formatting updates}
+% \changes{v3.10h}{2017/01/14}{Add style for \emph{ACS Biomater.\ Sci.\ Eng.}}
+% \changes{v3.10h}{2017/01/20}{Add style for \emph{ACS Earth Space Chem.}}
+% \changes{v3.10h}{2017/01/20}{Add style for \emph{ACS Infect.\ Dis.}}
+% \changes{v3.10h}{2017/01/20}{Add style for \emph{ACS Sensors}}
+% \changes{v3.10h}{2017/01/20}{Style update for \emph{J.~Chem.\ Theory.\
+% Comput.}}
+% \changes{v3.10h}{2017/01/20}{Update supplementary information text}
+% \changes{v3.10i}{2017/02/09}{Style update for \emph{Biochemistry}}
+% \changes{v3.10i}{2017/05/18}{Fix issue with \cs{doi} command}
+% \changes{v3.10i}{2017/05/18}{Updates for \emph{Org.\ Lett.}}
+% \changes{v3.11}{2018/01/07}{Print article titles for all journals}
+% \changes{v3.11b}{2018/07/12}{Correct handling of \texttt{and others} in
+% bibliography}
+% \changes{v3.11c}{2018/07/12}{Further work on bibliography}
+%
+%\begin{abstract}
+% The \pkg{achemso} bundle provides a \LaTeX\ class file and \BibTeX\
+% style file in accordance with the requirements of the American
+% Chemical Society (\ACS). The files can be used for any documents, but
+% have been carefully designed and tested to be suitable for submission
+% to \ACS\ journals.
+%
+% The bundle also includes the \pkg{natmove} package. This package is
+% loaded by \pkg{achemso}, and provides automatic moving of superscript
+% citations after punctuation.
+%\end{abstract}
+%
+%\begin{multicols}{2}
+% \tableofcontents
+%\end{multicols}
+%
+%\section{Introduction}
+% Support for \BibTeX\ bibliography following the requirements of the
+% American Chemical Society (\ACS), along with a package to make
+% these easy to have been available since version one of \pkg{achemso}.
+% The re-write from version 1 to version 2 made a number of
+% improvements to the package, and also added a number of new
+% features. However, neither version one nor version two of the
+% package was targeted directly at use for submissions to \ACS\
+% journals. This new release of \pkg{achemso} addresses this issue.
+%
+% The bundle consists of four parts. The first is a \LaTeXe\ class,
+% intended for use in submissions. It is based on the standard
+% \pkg{article} class, but makes various changes to facilitate ease
+% of use. The second part is the \LaTeX\ package. The package contains
+% the parts of the bundle which are appropriate for use with other
+% document classes.\footnote{For example, when writing a thesis.}
+% Thirdly, two \BibTeX\ style files are included. These are used by
+% both the class and the package, but can be used directly if desired.
+% Finally, an example document is included; this is intended to act a
+% potential template for submission, and illustrates the use of the
+% class file.
+%
+%\section{Installation}
+%
+% The package is supplied in \file{dtx} format and as a pre-extracted
+% zip file, \file{\jobname.tds.zip}. The later is most convenient for
+% most users: simply unzip this in your local texmf directory and
+% run \texttt{texhash} to update the database of file locations. If
+% you want to unpack the \file{dtx} yourself, running
+% \texttt{tex \jobname.dtx} will extract the package whereas
+% \texttt{latex \jobname.dtx} will extract it and also typeset the
+% documentation.
+%
+% Typesetting the documentation requires a number of packages in
+% addition to those needed to use the package. This is mainly
+% because of the number of demonstration items included in the text. To
+% compile the documentation without error, you will need the packages:
+% \begin{itemize}
+% \item \pkg{array}
+% \item \pkg{booktabs}
+% \item \pkg{hypdoc}
+% \item \pkg{listings}
+% \item \pkg{lmodern}
+% \item \pkg{mathpazo}
+% \item \pkg{microtype}
+%\end{itemize}
+%
+%\section{Requirements}
+%
+% The \pkg{achemso} class requires the following packages:
+%\begin{itemize}
+% \item \pkg{caption}
+% \item \pkg{float}
+% \item \pkg{geometry}
+% \item \pkg{natbib}
+% \item \pkg{setspace}
+% \item \pkg{xkeyval}
+%\end{itemize}
+% These are normally present in the current major \TeX{} distributions,
+% but are also available from \href{http://www.ctan.org}{The
+% Comprehensive TeX Archive Network}.
+%
+%\section{The class file}
+% The class file has been designed for use in submitting journals to
+% the \ACS. It uses all of the modifications described here (those in
+% the package as well as those in the class). The accompanying
+% example manuscript can be used as a template for the correct use of
+% the class file. It is intended to act as a model for submission.
+%
+% When submitting communications to \emph{J.~Am.\ Chem.\ Soc.}, the
+% class will automatically lay the document out in the publication
+% style. This allows the author to judge the length of text submitted
+% more accurately. Changing the \opt{manuscript} in the
+% demonstration document to \opt{communication} will illustrate the
+% effect.
+%
+%\subsection{Class options}
+%
+%\DescribeOption{journal}
+% The class supports a limited number of options, which are
+% specifically-targeted at submission. The class uses the
+% \pkg{keyval} system for options, in the form \opt{key=value}. The
+% most important option is \opt{journal}. This is the name of the
+% target journal for the publication. The package is designed such
+% that the choice of journal will set up the correct bibliography
+% style and so on. The journals currently recognised by the package
+% are summarised in Table~\ref{tab:journal}. If an unknown journal
+% is specified, the package will fall-back on the
+% \opt{journal=jacsat} option.
+%\begin{table}
+% \centering
+% \begin{tabular}{@{}>{\itshape}l>{\ttfamily}l>{\itshape}l>{\ttfamily}l@{}}
+% \toprule
+% Journal & \rmfamily Setting & Journal & \rmfamily Setting \\
+% \midrule
+% Acc.\ Chem.\ Res. & achre4 &
+% Chem.\ Res.\ Toxicol. & crtoec \\
+% ACS Appl.\ Energy Mater. & aaemcq &
+% Chem.\ Rev. & chreay \\
+% ACS Appl.\ Electron.\ Mater. & aaembp &
+% Cryst.\ Growth Des. & cgdefu \\
+% ACS Appl.\ Mater.\ Interfaces & aamick &
+% Energy Fuels & enfuem \\
+% ACS Appl.\ Nano Mater. & aanmf6 &
+% Environ.\ Sci.\ Technol. & esthag \\
+% ACS Appl.\ Polym.\ Mater. & aapmcd &
+% Environ.\ Sci.\ Technol.\ Lett. & estlcu \\
+% ACS Biomater.\ Sci.\ Eng. & abseba &
+% Ind.\ Eng.\ Chem.\ Res. & iecred \\
+% ACS Catal. & accacs &
+% Inorg.\ Chem. & inoraj \\
+% ACS Central Sci. & acscii &
+% J.~Agric.\ Food Chem. & jafcau \\
+% ACS Chem.\ Biol. & acbcct &
+% J.~Chem.\ Ed. & jceda8 \\
+% ACS Chem.\ Neurosci. & acncdm &
+% J.~Chem.\ Eng.\ Data & jceaax \\
+% ACS Combinatorial Sci. & acsccc &
+% J.~Chem.\ Inf.\ Model. & jcisd8 \\
+% ACS Earth Space Chem. & aesccq &
+% J.~Chem.\ Theory Comput. & jctcce \\
+% ACS Energy Lett. & aelccp &
+% J.~Med.\ Chem. & jmcmar \\
+% ACS Infect.\ Dis. & ascefj &
+% J.~Nat.\ Prod. & jnprdf \\
+% ACS Macro Lett. & amlccd &
+% J.~Org.\ Chem. & joceah \\
+% ACS Mater.\ Lett. & amlcef \\
+% J.~Phys.\ Chem.~A & jpcafh \\
+% ACS Med.\ Chem.\ Lett. & amclct &
+% J.~Phys.\ Chem.~B & jpcbfk \\
+% ACS Nano & ancac3 &
+% J.~Phys.\ Chem.~C & jpccck \\
+% ACS Omega & acsodf &
+% J.~Phys.\ Chem.\ Lett. & jpclcd \\
+% ACS Photon. & apchd5 &
+% J.~Proteome Res. & jprobs \\
+% ACS Sensors & ascefj &
+% J.~Am.\ Chem.\ Soc. & jacsat \\
+% ACS Sustainable Chem.\ Eng. & ascecg &
+% Langmuir & langd5 \\
+% ACS Synth.\ Biol. & asbcd6 &
+% Macromolecules & mamobx \\
+% Anal.\ Chem. & ancham &
+% Mol.\ Pharm. & mpohbp \\
+% Biochemistry & bichaw &
+% Nano Lett. & nalefd \\
+% Bioconjugate Chem. & bcches &
+% Org.\ Lett. & orlef7 \\
+% Biomacromolecules & bomaf6 &
+% Organometallics & orgnd7 \\
+% Chem.\ Mater. & cmatex \\
+% \bottomrule
+% \end{tabular}
+% \caption{Values for \opt{journal} option}
+% \label{tab:journal}
+%\end{table}
+%
+%\DescribeOption{manuscript}
+% The second option is the \opt{manuscript} option. This specifies
+% the type of paper in the manuscript. The values here are
+% \opt{article}, \opt{note}, \opt{communication}, \opt{review},
+% \opt{letter} and \opt{perspective}. The valid values will depend on
+% the value of \opt{journal}. The \opt{manuscript} option determines
+% whether sections and an abstract are valid. The value
+% \opt{suppinfo} is also available for supporting information.
+%
+%\DescribeOption{layout}
+% The \pkg{achemso} class can produce drafts in two layout styles. The
+% standard setting for the \opt{layout} option is \opt{traditional},
+% which produces a double-spaced single column manuscript. The
+% alternative setting \opt{twocolumn} will use single spacing and
+% print the text in two columns. The second option is obviously more
+% compact. If the journal requires a particular style this option may
+% be ignored.
+%
+%\DescribeOption{email}
+% It may be desirable to omit e-mail addresses from the front page of
+% a manuscript. The printing of e-mail addresses can be disabled using
+% the \opt{email} option, which takes Boolean values only. The default
+% is to print e-mail addresses. Notice that phone and fax numbers are
+% only printed if e-mail addresses are printed.
+%
+% Other options are provided by the package, but when used with the
+% class these are silently ignored. If you need to override the
+% settings chosen by the class, include the settings \emph{after}
+% the \cs{documentclass} line using \cs{setkeys}:
+%\begin{LaTeXdemo}[code only]
+% \documentclass[journal = jacsat]{achemso}
+% \setkeys{acs}{articletitle = false}
+%\end{LaTeXdemo}
+%
+%\subsection{Manuscript meta-data}
+%
+%\DescribeMacro{\author}
+%\DescribeMacro{\affiliation}
+%\DescribeMacro{\alsoaffiliation}
+%\DescribeMacro{\altaffiliation}
+%\DescribeMacro{\email}
+% Inspired by REV\TeX, the \pkg{achemso} class alters the method for
+% adding author information to the manuscript. Each author should be
+% given as a separate \cs{author} command. These should be followed
+% by an \cs{affiliation}, which applies to the preceding authors. The
+% \cs{affiliation} macro takes an optional argument, for a short
+% version of the affiliation.\footnote{This will usually be the
+% university or company name.} At least one author should be
+% followed by an \cs{email} macro, containing contact details. All
+% authors with an e-mail address are automatically marked with a
+% star. The example manuscript demonstrates the use of all of these
+% macros. Notice that \cs{alsoaffiliation} is used when one (or more)
+% authors work at multiple institutions, while \cs{altaffiliation}
+% is intended for previous addresses (or other notes). Only
+% \cs{affiliation} applies to multiple authors: both
+% \cs{alsoaffiliation} and \cs{altaffiliation} are set on a per
+% author basis.
+%\begin{LaTeXdemo}[code only]
+% \author{Author Person}
+% \author{Second Bloke}
+% \email{second.bloke@some.place}
+% \affiliation[University of Sometown]
+% {University of Somewhere, Sometown, USA}
+% \altaffiliation
+% {Previous address: Minute University, Nowhereville, USA}
+% \author{Indus Trialguy}
+% \email{i.trialguy@sponsor.co}
+% \affiliation[SponsoCo]
+% {Research Department, SponsorCo, BigCity, USA}
+% \alsoaffiliation{University of Somewhere, Sometown, USA}
+%\end{LaTeXdemo}
+% Repeated entries for \cs{affiliation} and \cs{alsoaffiliation} will
+% result in only one address being printed in the address list and
+% footnotes. Repeated \cs{altaffiliation} entries only produce a single
+% footnote, and can therefore be used for entries such as
+%\begin{LaTeXdemo}[code only]
+% \author{First Coworker}
+% \altaffiliation{Contributed equally to this work}
+% \author{Second Coworker}
+% \altaffiliation{Contributed equally to this work}
+%\end{LaTeXdemo}
+% if required.
+%
+%\DescribeMacro{\fax}
+%\DescribeMacro{\phone}
+% The class will recognise the optional information \cs{fax} and
+% \cs{phone}, which will be printed along with the lead authors
+% e-mail address. Note that this information is only used for authors
+% who have an e-mail address supplied.
+%\begin{LaTeXdemo}[code only]
+% \author{Second Bloke}
+% \email{second.bloke@some.place}
+% \phone{+xxx (0)yyy zzzzzz}
+% \fax{+xxx (0)yyy wwwwww}
+% \affiliation[University of Sometown]
+% {University of Somewhere, Sometown, USA}
+%\end{LaTeXdemo}
+%
+%\DescribeMacro{\and}
+%\DescribeMacro{\thanks}
+% The method used for setting the meta-data means that the normal
+% \cs{and} and \cs{thanks} macros are not appropriate in the \
+% pkg{achemso} class. Both produce a warning if used.
+%
+%\DescribeMacro{\title}
+% The \cs{title} macro is extended to accept an optional argument.
+% This is intended for a shortened version of the journal title
+% suitable for running headers. Some journals require that authors
+% supply this data: if it is needed then it will be printed in the
+% appropriate place.
+%\begin{LaTeXdemo}[code only]
+% \title[Short running title]
+% {Long title which would not fit in running headers}
+%\end{LaTeXdemo}
+%
+% The meta-data items should be given in the preamble to the \LaTeX\
+% file, and no \cs{maketitle} macro is required in the document body.
+% This is all handled by the class file directly. At least one
+% author, affiliation and e-mail address must be specified.
+%
+%\subsection{Floats}
+%\DescribeEnv{scheme}
+%\DescribeEnv{chart}
+%\DescribeEnv{graph}
+% The class defines three new floating environments: \texttt{scheme},
+% \texttt{chart} and \texttt{graph}. These can be used as expected to
+% include graphical content. The placement of these new floats and the
+% standard \texttt{table} and \texttt{figure} floats is altered to be
+% ``here'' if possible. The contents of all floats is automatically
+% horizontally centred on the page.
+%
+%\subsection{Section headers}
+%
+%\DescribeMacro{\SectionNumbersOff}
+%\DescribeMacro{\SectionNumbersOn}
+% Some journals have no section numbering by default. This can be
+% set up in the appropriate configuration file, but it may be that
+% individual users need to change the decision. The macros
+% \cs{SectionNumbersOff} and \cs{SectionNumbersOn} are therefore
+% available: these should be given in the preamble.
+%
+%\DescribeMacro{\SectionsOff}
+%\DescribeMacro{\SectionsOn}
+% More radically, the entire availability of sections can be turned on
+% and of. This is functionality is available to the user \emph{via} the
+% \cs{SectionsOn} and \cs{SectionsOff} macros, which again are
+% preamble-only.
+%\DescribeMacro{\AbstractOff}
+%\DescribeMacro{\AbstractOn}
+% Similar functions are available for the abstract: \cs{AbstractOff} and
+% \cs{AbstractOn}.
+%
+%\subsection{Special sections}
+%
+%\DescribeEnv{acknowledgement}
+%\DescribeEnv{suppinfo}
+% The sections for acknowledgements and supporting information
+% have dedicated environments available. These ensure that
+% the section headings are generated, and that the text is
+% sized corrected when using creating a Communication.
+%\begin{LaTeXdemo}[code only]
+% \begin{acknowledgement}
+% The authors thank A.N.~Other.
+% \end{acknowledgement}
+%
+% \begin{suppinfo}
+% Full characterization data for all new compounds.
+% \end{suppinfo}
+%\end{LaTeXdemo}
+%
+%\DescribeEnv{tocentry}
+% For generating an entry for the graphical table of content, required
+% by some journals, the environment \texttt{tocentry} is available. This
+% prints its content in an appropriately sized box on a separate page.
+% In contrast to the rest of the manuscript, this section is intended to
+% be ``print ready'' in appearance.
+%
+%\begin{LaTeXdemo}[code only]
+% \begin{tocentry}
+% \includegraphics{toc-entry-graphic}
+% Some text to explain the graphic.
+% \end{tocentry}
+%\end{LaTeXdemo}
+%
+% \subsection{Miscellaneous commands}
+%
+% \DescribeMacro{\latin}
+%
+% The command \cs{latin} is provided by the class to format Latin phrases
+% such as ``et al.'' Most ACS journals do not make these italic, but
+% some (for example \emph{ACS Nano}) do. By providing a command, the formatting
+% is left flexible.
+%
+% \DescribeMacro{\doi}
+%
+% The bibliography style prints any \textsc{doi} values as the
+% argument to the command \cs{doi}. The default definition will allow
+% printing of special characters but does not create hyperlinks. A
+% more sophisticated version of the command may be set up if \pkg{hyperref}
+% is loaded, for example
+%\begin{LaTeXdemo}[code only]
+% \begin{tocentry}
+% \newcommand{\doi}[1]{\href{http://dx.doi.org/#1}{\nolinkurl{#1}}}
+% \end{tocentry}
+%\end{LaTeXdemo}
+%
+%\section{The package file}
+% The \pkg{achemso} package is independent of the class file, and
+% contains parts of the bundle useful outside of submission to the
+% \ACS.
+%
+%\subsection{Package options}
+%
+% As with the class options, the package uses the key--value method
+% for option set up. These are used to control the output of citations
+% and bibliographic data. The same options are used when creating
+% journal configurations for the class: this is a task most users will
+% not need to undertake!
+%
+%\DescribeOption{super}
+% The \opt{super} option affects the handling of superscript
+% reference markers. The option switches this behaviour
+% on and off (and takes Boolean values: \opt{super=true} and
+% \opt{super=false} are valid).
+%
+%\DescribeOption{articletitle}
+% The \opt{articletitle} option is a Boolean, and sets whether the title
+% of a paper referenced appears in the bibliography. The default is
+% \opt{articletitle=true}.
+%
+% \DescribeOption{doi}
+% The boolean \opt{doi} option is provided to allow a \textsc{doi}
+% (Digital Object Identifier) to be included for bibliography entries
+% even where other identification such as page numbers is available.
+% The standard setting is \opt{false}: setting it to \opt{true} will
+% cause \textsc{doi} numbers to be printed if available.
+%
+% \DescribeOption{chaptertitle}
+% The boolean \opt{chaptertitle} option is provided to allow flexibility
+% for the inclusion of chapter titles for \texttt{book} and
+% related entries. The standard setting is \opt{false}: setting
+% it to \opt{true} will cause chapter titles to be included.
+%
+%\DescribeOption{etalmode}
+%\DescribeOption{maxauthors}
+% Many journals require that long lists of authors are shortened using
+% `et al.' in the references section. The behaviour of the \BibTeX\
+% styles in this regard is controlled by two options, \opt{etalmode}
+% and \opt{maxauthors}. There are two possible ways to shorten a long
+% list of authors. Some journals require that only the first author
+% is given, followed by `et al.': for this behaviour, set
+% \opt{etalmode=firstonly}:
+%\begin{verbatim}
+% Jones, A.N. et al.
+%\end{verbatim}
+% On the other hand, some journals request that the list of authors
+% is truncated after $n$ authors. This is set up by the
+% \opt{etalmode=truncate} option:
+%\begin{verbatim}
+% Jones, A.N.; Bloggs, F.; Nobacon, D. et al.
+%\end{verbatim}
+% In both cases, the maximum number of authors permitted before
+% introducing `et al.' is governed by the \opt{maxauthors} option.
+% This option recognises the sentinel value $0$, which indicates that
+% no shortening should occur at all.
+%
+%\DescribeOption{biblabel}
+% Redefining the formatting of the numbers used in the bibliography
+% usually requires modifying internal \LaTeX\ macros. The
+% \opt{biblabel} option makes these changes more accessible: valid
+% values are \opt{plain} (use the number only), \opt{brackets}
+% (surround the number in brackets) and \opt{period} or
+% \opt{fullstop} (follow the number by a full stop/period).
+%
+%\DescribeOption{biochem}
+%\DescribeOption{biochemistry}
+% Most \ACS\ journals use the same bibliography style, with the only
+% variation being the inclusion of article titles. However, a small
+% number of journals use a rather different style; the journal
+% \emph{Biochemistry} is probably the most prominent. The
+% \opt{biochemistry} or \opt{biochem} option uses the style of
+% \emph{Biochemistry} for the bibliography, rather than the normal
+% \ACS\ style.
+%
+%\subsection{Bibliography notes}
+%
+%\DescribeMacro{\bibnote}
+%\DescribeMacro{\bibnotemark}
+%\DescribeMacro{\bibnotetext}
+% \pkg{achemso} provides the \cs{bibnote} macro. This is intended for
+% addition of notes to the bibliography (references). The macro
+% accepts a single argument, which is transferred to the bibliography by
+% \BibTeX. In analogy to \cs{footnote}, the macros \cs{bibnotemark} and
+% \cs{bibnotetext} are available for dividing up the marker for a
+% note from the text.
+%\begin{LaTeXdemo}
+% Some text \bibnote{This note text will be in the bibliography}.
+%\end{LaTeXdemo}
+%
+% The functionality for bibnotes in \pkg{achemso} is based on that
+% in the \pkg{notes2bib} package. The \pkg{notes2bib} package can be
+% loaded with the \pkg{achemso} package, and no clash will occur. With
+% the class file, \pkg{notes2bib} will be ignored if requested, to
+% prevent issues on submission to the \ACS.
+%
+%\section{The \texorpdfstring{\BibTeX}{BibTeX} style files}
+%
+% \pkg{achemso} is supplied with two style files, \file{achemso.bst} and
+% \file{biochem.bst}. The direct use of these without the \pkg{achemso}
+% package file is not recommended, but is possible. The style files
+% can be loaded in the usual way, with a \cs{bibliographystyle}
+% command. The \pkg{natbib} package must be loaded by the \LaTeX\ file
+% concerned, if the \pkg{achemso} package is not in use.
+%
+% The style files are designed to use the \pkg{mciteplus} package if it
+% is available, but to work even if is not. When \pkg{mciteplus} is
+% present, it is possible to automatically produce references of the
+% form
+%\begin{quotation}
+% \noindent
+% (5) (a) Arduengo,~A.~J.,~III; Dias,~H. V.~R.; Harlow,~R.~L.;
+% Kline,~M. \emph{{J}.~{A}m.\ {C}hem.\ {S}oc.} \textbf{1992},
+% \emph{114}, 5530--5534; (b) Appelhans,~L.~N.; Zuccaccia,~D.;
+% Kovacevic,~A.; Chianese,~A.~R.; Miecznikowski,~J.~R.; Macchioni,~A.;
+% Clot,~E.; Eisenstein,~O.; Crabtree,~R.~H. \emph{{J}.~{A}m.\ {C}hem.
+% {S}oc.} \textbf{2005}, \emph{127}, 16299--16311; (c)
+% Arduengo,~A.~J.,~III; Gamper,~S.~F.; Calabrese,~J.~C.; Davidson,~F.
+% \emph{J.~Am.\ Chem.\ Soc.} \textbf{1994}, \emph{116}, 4391--4394.
+%\end{quotation}
+% as demonstrated in the example document. When \pkg{mciteplus} is
+% not present, this functionality is not available but the style files
+% will work normally.
+%
+% The \BibTeX\ style files implement the bibliographic style
+% specified by the \ACS\ in \emph{The ACS Style Guide}
+% \cite{Coghill2006}. By default, article titles are not included in
+% 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
+% and done a local installation without also updating the \BibTeX\
+% style. The two must be from the same version of \pkg{achemso}: they
+% are designed to work together.
+%
+%\section{The \pkg{natmove} package}
+%
+% The \pkg{natmove} package does only one job. It brings the ability to
+% move punctuation after citations, using code borrowed from the
+% \pkg{cite} package. Both the \pkg{achemso} class and package load
+% \pkg{natmove} automatically.
+%\begin{LaTeXdemo}
+% Some text \cite{Coghill2006} some more text.\\
+% Some text ending a sentence \cite{Coghill2006}.
+%\end{LaTeXdemo}
+% This is deactivated for other citation types.
+%\begin{LaTeXdemo}
+% Some text \citeyear{Coghill2006}.\\
+% Some text \citeauthor{Coghill2006}.\\
+% Some text \citenum{Coghill2006}.
+%\end{LaTeXdemo}
+% The package does nothing if the \opt{super} option has not been
+% given to \pkg{natbib}. This means that the source can be written
+% without needing to decide where citations will to appear, with the
+% \opt{super} option for \pkg{natbib} controlling the result.
+%
+%\DescribeMacro{\natmovechars}
+% One user macro is provided: \cs{natmovechars}. This contains
+% the characters which are moved before superscript punctuation.
+% The default contents is |,;:.| and can be set using
+% \cs{renewcommand*}:
+%\begin{LaTeXdemo}
+% \renewcommand*{\natmovechars}{.}
+% Some text \cite{Coghill2006},
+% more text \cite{Coghill2006}.
+%\end{LaTeXdemo}
+%
+%\StopEventually{^^A
+% \PrintChanges
+% \PrintIndex
+% \bibliography{achemso-demo}
+%}
+%
+%\section{Implementation}
+%
+% A lot of the work done by the package is also needed by the class.
+% Loading the package and the class makes load-order awkward. Instead,
+% the two parts are done in one place. Sandwiching the common code are
+% two slices of dedicated material for the class and the package. Some
+% of this is needed ``early'', before the common material, whilst the
+% rest is ``late''.
+%
+%\subsection{Early class-only code}
+%
+% So that there is no confusion, the base class is loaded early.
+% \begin{macrocode}
+%<*class>
+\ProvidesClass{achemso}
+ [2019-02-14 v3.12a Submission to ACS journals]
+\LoadClass[12pt,letter]{article}
+% \end{macrocode}
+%
+%\begin{macro}{\acs@warning}
+% The code for a warning is created so that it works for the package too.
+% \begin{macrocode}
+\newcommand*\acs@warning{\ClassWarning{achemso}}
+%</class>
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Early package-only code}
+%
+% The package and the class should not both be loaded, as the two use
+% the same internal macro names. On the other hand, if the class is
+% not in use a reminder is printed to use it if possible.
+% \begin{macrocode}
+%<*package>
+\ProvidesPackage{achemso}
+ [2019-02-14 v3.12a Support for ACS journals]
+\@ifclassloaded{achemso}{%
+ \PackageInfo{achemso}{%
+ You have already loaded the `achemso' class:\MessageBreak
+ loading the package will abort%
+ }%
+ \endinput
+}{%
+ \PackageInfo{achemso}{%
+ When writing a submission to an ACS journal, please\MessageBreak
+ use the achemso document class%
+ }%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\acs@warning}
+% The code for a warning is created so that it works for the class too.
+% \begin{macrocode}
+\newcommand*\acs@warning{\PackageWarning{achemso}}
+%</package>
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{Common code}
+%
+%\begin{macro}{\acs@ifundefined}
+% A non-expandable test for defined macros: does not add to the hash
+% table.
+% \begin{macrocode}
+%<*package|class>
+\newcommand*\acs@ifundefined[1]{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname #1\endcsname\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+% The first stage needed is to read the package options given. Although
+% \pkg{xkeyval} was perhaps not the best choice, changing this now would
+% be rather risky.
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+% \end{macrocode}
+%\begin{macro}{\acs@keyval@bool}
+% A support macro for making Boolean options: the \pkg{xkeyval} version
+% is only available in newer releases.
+% \begin{macrocode}
+\newcommand*\acs@keyval@bool[2]{%
+ \acs@ifundefined{acs@#1#2}{%
+ \acs@warning{Unknown option `#2' for key #1}%
+ }{%
+ \@nameuse{acs@#1#2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifacs@abbreviations}
+%\begin{macro}{\ifacs@articletitle}
+%\begin{macro}{\ifacs@biochem}
+%\begin{macro}{\ifacs@chaptertitle}
+%\begin{macro}{\ifacs@doi}
+%\begin{macro}{\ifacs@email}
+%\begin{macro}{\ifacs@hyperref}
+%\begin{macro}{\ifacs@keywords}
+%\begin{macro}{\ifacs@super}
+% These are all very trivial definitions: to avoid issues with older
+% versions of \pkg{xkeyval} each definition is done directly.
+% \begin{macrocode}
+\newif\ifacs@abbreviations
+\newif\ifacs@articletitle
+\newif\ifacs@biochem
+\newif\ifacs@doi
+\newif\ifacs@chaptertitle
+\newif\ifacs@email
+\newif\ifacs@hyperref
+\newif\ifacs@keywords
+\newif\ifacs@super
+\define@key{acs}{abbreviations}[true]{%
+ \acs@keyval@bool{abbreviations}{#1}%
+}
+\define@key{acs}{articletitle}[true]{%
+ \acs@keyval@bool{articletitle}{#1}%
+}
+\define@key{acs}{biochem}[true]{%
+ \acs@keyval@bool{biochem}{#1}%
+}
+\define@key{acs}{doi}[true]{%
+ \acs@keyval@bool{doi}{#1}%
+}
+\define@key{acs}{chaptertitle}[true]{%
+ \acs@keyval@bool{chaptertitle}{#1}%
+}
+\define@key{acs}{email}[true]{%
+ \acs@keyval@bool{email}{#1}%
+}
+\define@key{acs}{hyperref}[true]{%
+ \acs@keyval@bool{hyperref}{#1}%
+}
+\define@key{acs}{keywords}[true]{%
+ \acs@keyval@bool{keywords}{#1}%
+}
+\define@key{acs}{super}[true]{%
+ \acs@keyval@bool{super}{#1}%
+}
+\define@key{acs}{usetitle}[true]{%
+ \acs@keyval@bool{articletitle}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@journal}
+%\begin{macro}{\acs@layout}
+%\begin{macro}{\acs@manuscript}
+%\begin{macro}{\acs@maxauthors}
+% Trivial again: done without using \pkg{xkeyval} for the same reasons
+% as before.
+% \begin{macrocode}
+\newcommand*\acs@journal{jacsat}
+\newcommand*\acs@layout{traditional}
+\newcommand*\acs@manuscript{article}
+\newcommand*\acs@maxauthors{15}
+\define@key{acs}{journal}{%
+ \def\acs@journal{#1}%
+}
+\define@key{acs}{layout}{%
+ \def\acs@layout{#1}%
+}
+\define@key{acs}{manuscript}{%
+ \def\acs@manuscript{#1}%
+}
+\define@key{acs}{maxauthors}{%
+ \def\acs@maxauthors{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifacs@etal@truncate}
+%\begin{macro}{\acs@etal@firstonly}
+%\begin{macro}{\acs@etal@truncate}
+% The setup for the \opt{etalmode} option is quite simple: just look
+% for the appropriate macros.
+% \begin{macrocode}
+\newif\ifacs@etal@truncate
+\define@key{acs}{etalmode}{%
+ \acs@ifundefined{acs@etal@#1}{%
+ \acs@warning{%
+ Unknown value `#1' for\MessageBreak etalmode option%
+ }%
+ }{%
+ \@nameuse{acs@etal@#1}%
+ }%
+}
+\newcommand*\acs@etal@firstonly{\acs@etal@truncatefalse}
+\newcommand*\acs@etal@truncate{\acs@etal@truncatetrue}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% \begin{macro}{\acs@activate@biblabel}
+% The \opt{biochemistry} option is an alias for \opt{biochem}. The
+% \opt{biblabel} option is a choice, which is implemented using a
+% csname search. The group here prevents hash table pollution, whilst
+% the \pkg{xkeyval} method is avoided as it is more complex than it is
+% worth!
+% \begin{macrocode}
+\define@key{acs}{biochemistry}{%
+ \setkeys{acs}{biochem = #1}%
+}
+\define@key{acs}{biblabel}{%
+ \acs@ifundefined{acs@biblabel@#1}{%
+ \acs@warning{%
+ Unknown value `#1' for\MessageBreak biblabel option%
+ }%
+ }{%
+ \acs@activate@biblabel{\@nameuse{acs@biblabel@#1}}%
+ }%
+}
+\newcommand*\acs@activate@biblabel{}
+%<*class>
+\let\acs@activate@biblabel\AtEndOfClass
+\AtEndOfClass{\let\acs@activate@biblabel\@firstofone}
+%</class>
+%<*package>
+\let\acs@activate@biblabel\AtEndOfPackage
+\AtEndOfPackage{\let\acs@activate@biblabel\@firstofone}
+%</package>
+% \end{macrocode}
+% \end{macro}
+%\begin{macro}{\acs@biblabel@brackets}
+%\begin{macro}{\acs@biblabel@fullstop}
+%\begin{macro}{\acs@biblabel@period}
+%\begin{macro}{\acs@biblabel@plain}
+% The macros to implement the idea above for biblabels.
+% \begin{macrocode}
+\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}
+%\end{macro}
+%\end{macro}
+% Set up some defaults.
+% \begin{macrocode}
+\setkeys{acs}{
+ email = true,
+ super = true
+}
+% \end{macrocode}
+% Loading some other packages depends on the options chosen, so they
+% are processed now.
+% \begin{macrocode}
+\ProcessOptionsX*<acs>
+% \end{macrocode}
+%
+%\begin{macro}{\acs@manuscript@communication}
+%\begin{macro}{\acs@manuscript@letter}
+%\begin{macro}{\acs@manuscript@note}
+%\begin{macro}{\acs@manuscript@review}
+%\begin{macro}{\acs@manuscript@suppinfo}
+% For text comparisons.
+% \begin{macrocode}
+\newcommand*\acs@manuscript@communication{communication}
+\newcommand*\acs@manuscript@letter{letter}
+\newcommand*\acs@manuscript@note{note}
+\newcommand*\acs@manuscript@review{review}
+\newcommand*\acs@manuscript@suppinfo{suppinfo}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\acs@niib@create}
+%\begin{macro}{bibnote}
+%\begin{macro}{\thebibnote}
+%\begin{macro}{\bibnote}
+%\begin{macro}{\bibnotemark}
+%\begin{macro}{\bibnotetext}
+%\begin{macro}{\printbibnotes}
+% To avoid needing to load the \pkg{notes2bib} package, especially as
+% the plan is to move that package to \LaTeX3 internal syntax,
+% \pkg{achemso} provides a minimal version here. The first step is to
+% create macros which will need a guard against \pkg{notes2bib} already
+% having been loaded. To allow the package and class to behave
+% differently these are actually applied later.
+% \begin{macrocode}
+\newcommand*\acs@niib@create{%
+ \@namedef{ver@notes2bib.sty}{%
+ 2009/04/20 v1.6a Integrating notes into the bibliography (achemso
+ version)
+ }%
+ \@ifundefined{c@bibnote}{\newcounter{bibnote}}{}
+ \def\thebibnote{%
+ Note-\the\value{bibnote}%
+ }%
+ \DeclareRobustCommand*{\bibnote}[1][\thebibnote]{%
+ \stepcounter{bibnote}%
+ \def\acs@niib@after@text{\cite{##1}}%
+ \acs@niib@text{##1}%
+ }%
+ \DeclareRobustCommand*{\bibnotemark}[1][\thebibnote]{%
+ \stepcounter{bibnote}%
+ \cite{##1}%
+ }%
+ \DeclareRobustCommand*{\bibnotetext}[1][\thebibnote]{%
+ \let\acs@niib@after@text\relax
+ \acs@niib@text{##1}%
+ }%
+ \newcommand*\printbibnotes{%
+ \ifnum\the\value{bibnote}>\z@\relax
+ \nocite{achemso-control}%
+ \acs@bibliography{acs-\jobname}%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@niib@after@text}
+% After the text.
+% \begin{macrocode}
+\newcommand*\acs@niib@after@text{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@niib@text}
+% The \cs{acs@niib@text} macro is the outer part of the writing system.
+% It does not absorb the text of note, as without \eTeX\ this is bad
+% news. The same file is used for notes and the control entry for
+% the bibliography style.
+% \begin{macrocode}
+\newcommand*\acs@niib@text{%
+ \@bsphack
+ \if@filesw
+ \expandafter\acs@niib@write
+ \else
+ \expandafter\acs@niib@no@write
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@niib@write}
+%\begin{macro}{\acs@niib@write@aux@i}
+%\begin{macro}{\acs@niib@write@aux@ii}
+% Writing verbatim without \eTeX.
+% \begin{macrocode}
+\newcommand*\acs@niib@write[1]{%
+ \begingroup
+ \let\do\@makeother
+ \dospecials
+ \catcode`\{ 1\relax
+ \catcode`\} 2\relax
+ \acs@niib@write@aux@i{#1}%
+}
+\newcommand*\acs@niib@write@aux@i[1]{%
+ \long\def\@tempa##1{%
+ \def\@tempa{##1}%
+ \@onelevel@sanitize\@tempa
+ \expandafter\endgroup
+ \expandafter\def\expandafter\@tempa\expandafter{\@tempa}%
+ \acs@niib@write@aux@ii{#1}%
+ }%
+ \catcode`\^^M 10\relax
+ \@tempa
+}
+\newcommand*\acs@niib@write@aux@ii[1]{%
+ \immediate\write\acs@bib@file{%
+ @Misc\string{#1,^^J%
+ \space\space note = \string{\@tempa\string},^^J%
+ \string}^^J%
+ }%
+ \@esphack
+ \acs@niib@after@text
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@niib@no@write}
+% If no files are to be written, a bit of tidying up.
+% \begin{macrocode}
+\newcommand\acs@niib@no@write[2]{%
+ \@esphack
+ \acs@niib@after@text
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\nmv@natbib@detect}
+%\begin{macro}{\acs@nmv@activate}
+%\begin{macro}{\acs@autonote}
+% The functionality of \pkg{notes2bib} is combined with the standard
+% \cs{cite} macro, to give automatic note-like data in the bibliography.
+% \begin{macrocode}
+\AtBeginDocument{
+ \def\nmv@natbib@detect{%
+ \ifNAT@super
+ \expandafter\acs@nmv@activate
+ \else
+ \expandafter\acs@autonote
+ \fi
+ }
+}
+\newcommand*\acs@nmv@activate{%
+ \let\nmv@citex@nat\@citex
+ \let\@citex\nmv@citex
+ \let\nmv@cite\cite
+ \renewcommand*{\cite}[2][]{%
+ \nmv@ifmtarg{##1}{%
+ \nmv@citetrue
+ \nmv@cite{##2}%
+ }{%
+ \nocite{##2}%
+ \bibnote{Ref.~\citenum{##2}, ##1}%
+ }%
+ }%
+}
+\newcommand*\acs@autonote{%
+ \let\nmv@cite\cite
+ \renewcommand*{\cite}[2][]{%
+ \nmv@ifmtarg{##1}{%
+ \nmv@cite{##2}%
+ }{%
+ \nocite{##2}%
+ \bibnote{Ref.~\citenum{##2}, ##1}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\acs@bib@file}
+%\begin{macro}{\acs@bib@message}
+%\begin{macro}{\acs@bib@name}
+% Some information or creating the control file for \BibTeX\ is set up.
+% \begin{macrocode}
+\newwrite\acs@bib@file
+\newcommand*\acs@bib@message{%
+ This is an auxiliary file used by the `achemso' bundle.^^J%
+ This file may safely be deleted. It will be recreated as required.^^J
+}
+\newcommand*\acs@bib@name{acs-\jobname.bib}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@bib@write}
+%\begin{macro}{\acs@bib@write@aux}
+% The control information for \BibTeX\ needs to be written to a special
+% file. The main writing macro is quite simple. Actually writing the
+% information is left to the code for \cs{bibliography}, so that this
+% only happens if needed.
+% \begin{macrocode}
+\newcommand*\acs@bib@write{%
+ \if@filesw
+ \expandafter\acs@bib@write@aux
+ \fi
+}
+\AtBeginDocument{\acs@bib@write}
+\newcommand*\acs@bib@write@aux{%
+ \immediate\openout\acs@bib@file\acs@bib@name\relax
+ \immediate\write\acs@bib@file{\acs@bib@message}%
+ \edef\@tempa##1##2{%
+ \space\space##1\space = "##2",^^J%
+ }%
+ \immediate\write\acs@bib@file{%
+ @Control\string{%
+ achemso-control,^^J%
+ \@tempa{ctrl-article-title\space}{%
+ \ifacs@articletitle yes\else no\fi
+ }%
+ \@tempa{ctrl-chapter-title\space}{%
+ \ifacs@chaptertitle yes\else no\fi
+ }%
+ \@tempa{ctrl-doi\space\space\space\space\space\space\space
+ \space\space\space\space}{%
+ \ifacs@doi yes\else no\fi
+ }%
+ \@tempa{ctrl-etal-number\space\space\space}{\acs@maxauthors}%
+ \@tempa{ctrl-etal-firstonly}{%
+ \ifacs@etal@truncate no\else yes\fi
+ }%
+ \string}^^J%
+ }%
+ \immediate\write\@auxout{%
+ \string\citation\string{achemso-control\string}%
+ }%
+ \AtEndDocument{%
+ \immediate\closeout\acs@bib@file\relax
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\acs@bibliography}
+%\begin{macro}{\bibliography}
+% The \cs{bibliography} macro is now patched so that everything works
+% correctly.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \let\acs@bibliography\bibliography
+ \def\bibliography#1{%
+ \acs@bibliography{acs-\jobname,#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+% \begin{macro}{\latin}
+% The journal \emph{ACS Nano} formats Latin phrases differently from
+% every other ACS journal: we provide a \cs{latin} command to cover this.
+% \begin{macrocode}
+\AtBeginDocument{
+ \providecommand{\latin}[1]{#1}
+}
+%</package|class>
+% \end{macrocode}
+% \end{macro}
+%
+%\subsection{Late class-only code}
+%
+% Most of the power of the class is now created. First, a few options
+% are reset so that any given by the user are effectively ignored.
+% \begin{macrocode}
+%<*class>
+\setkeys{acs}{
+ abbreviations = false,
+ articletitle = true,
+ biblabel = brackets,
+ biochem = false,
+ doi = false,
+ etalmode = firstonly,
+ keywords = false,
+ maxauthors = 15,
+ super = true
+}
+% \end{macrocode}
+% When using the class, \pkg{notes2bib} is always emulated. Other
+% standard support packages can now be loaded.
+% \begin{macrocode}
+\acs@niib@create
+\RequirePackage[margin=2.54cm]{geometry}
+\RequirePackage{
+ caption,
+ float,
+ graphicx,
+ setspace,
+ url
+}
+\ifacs@hyperref
+ \expandafter\RequirePackage
+\else
+ \expandafter\@gobble
+\fi
+ {hyperref}
+\AtBeginDocument{\doublespacing}
+% \end{macrocode}
+%
+%\begin{macro}{\title}
+%\begin{macro}{\@title}
+%\begin{macro}{\acs@title@short}
+% For the meta-data, the REV\TeX\ bundle provides a good model for
+% the commands to give the author. \cs{gdef} is used here to
+% avoid any odd grouping issues.
+% \begin{macrocode}
+\renewcommand*{\title}[2][]{%
+ \gdef\acs@title@short{#1}%
+ \gdef\@title{#2}%
+ \ifx\acs@title@short\@empty
+ \global\let\acs@title@short\@title
+ \fi
+}
+\@onlypreamble\title
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@author@cnt}
+%\begin{macro}{\acs@affil@cnt}
+%\begin{macro}{\acs@affil@alt@cnt}
+% \pkg{achemso} tracks the number authors, affiliations and alternative
+% affiliations.
+% \begin{macrocode}
+\newcount\acs@author@cnt
+\newcount\acs@affil@cnt
+\newcount\acs@affil@alt@cnt
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@footnote@cnt}
+%\begin{macro}{\acs@affil@marker@cnt}
+% Two counts for getting affiliation footnotes correct.
+% \begin{macrocode}
+\newcount\acs@footnote@cnt
+\newcount\acs@affil@marker@cnt
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\author}
+% The author macro stores the current author details and sets the
+% affiliation of the author to the current one. Everything is
+% \cs{global} so that there is no possibility of begin trapped inside a
+% group. The affiliation counter is always one behind, and so it is
+% locally incremented to keep the logic of the code clear elsewhere.
+% \begin{macrocode}
+\def\author#1{%
+ \global\advance\acs@author@cnt\@ne\relax
+ \expandafter\gdef\csname @author@\@roman\acs@author@cnt\endcsname{#1}%
+ \begingroup
+ \advance\acs@affil@cnt\@ne
+ \expandafter\xdef\csname @author@affil@\@roman
+ \acs@author@cnt\endcsname
+ {\the\acs@affil@cnt}%
+ \endgroup
+}
+\@onlypreamble\author
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\and}
+%\begin{macro}{\thanks}
+% Neither \cs{and} nor \cs{thanks} are used by the document class.
+% \begin{macrocode}
+\def\and{%
+ \acs@warning{%
+ \string\and\space not used by the achemso class: please see
+ the\MessageBreak package documentation for details%
+ }%
+}
+\def\thanks{%
+ \acs@warning{%
+ \string\thanks\space not used by the achemso class: please see
+ the\MessageBreak the package documentation for details%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\affiliation}
+% As with \cs{author}, everything is \cs{global} just in case. The
+% system insists that affiliations come after authors. Before anything
+% is committed, a check is made that the affiliation has not already
+% been seen.
+% \begin{macrocode}
+\newcommand*\affiliation[2][\relax]{%
+ \ifnum\acs@author@cnt>\z@\relax
+ \acs@affil@ifdup{#2}{%
+ \acs@affil@swap{#2}%
+ }{%
+ \global\advance\acs@affil@cnt\@ne\relax
+ \expandafter\gdef\csname @address@\@roman\acs@affil@cnt\endcsname
+ {#2}%
+ \ifx\relax#1\relax
+ \expandafter\gdef\csname @affil@\@roman\acs@affil@cnt\endcsname
+ {#2}%
+ \else
+ \expandafter\gdef\csname @affil@\@roman\acs@affil@cnt\endcsname
+ {#1}%
+ \fi
+ }%
+ \else
+ \acs@warning{Affiliation with no author}%
+ \fi
+}
+\@onlypreamble\affiliation
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@affil@ifdup}
+%\begin{macro}{\acs@affil@ifdup@aux}
+% A short test for two addresses being identical.
+% \begin{macrocode}
+\newcommand*\acs@affil@ifdup[1]{%
+ \begingroup
+ \def\@tempa{#1}%
+ \@tempswafalse
+ \@tempcnta\z@\relax
+ \acs@affil@ifdup@aux
+ \if@tempswa
+ \aftergroup\@firstoftwo
+ \else
+ \aftergroup\@secondoftwo
+ \fi
+ \endgroup
+}
+\newcommand*\acs@affil@ifdup@aux{%
+ \advance\@tempcnta\@ne\relax
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter
+ \expandafter\@tempb\expandafter\expandafter\expandafter
+ {\csname @address@\@roman\@tempcnta\endcsname}%
+ \ifx\@tempa\@tempb
+ \expandafter\@tempswatrue
+ \else
+ \ifnum\@tempcnta<\acs@affil@cnt\relax
+ \expandafter\expandafter\expandafter\acs@affil@ifdup@aux
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@affil@swap}
+%\begin{macro}{\acs@affil@swap@aux}
+% If the affiliation has already been given, then all of the authors
+% need to be checked to make sure that the correct affiliation is used.
+% First, the loop from above is used to find the correct number for the
+% duplicate.
+% \begin{macrocode}
+\newcommand*\acs@affil@swap[1]{%
+ \begingroup
+ \def\@tempa{#1}%
+ \@tempcnta\z@\relax
+ \@tempcntb\z@\relax
+ \acs@affil@ifdup@aux
+ \advance\acs@affil@cnt\@ne\relax
+ \acs@affil@swap@aux
+ \endgroup
+}
+\newcommand*\acs@affil@swap@aux{%
+ \advance\@tempcntb\@ne\relax
+ \expandafter\ifnum\csname @author@affil@\@roman\@tempcntb\endcsname
+ = \acs@affil@cnt\relax
+ \expandafter\xdef\csname @author@affil@\@roman\@tempcntb\endcsname{%
+ \the\@tempcnta
+ }%
+ \fi
+ \ifnum\@tempcntb<\acs@author@cnt\relax
+ \expandafter\acs@affil@swap@aux
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\alsoaffiliation}
+%\begin{macro}{\acs@alsoaffil@find}
+% To allow complex affiliations , two commands are needed. The first
+% deals with affiliations that are in some way shared by several
+% authors. This is tracked on a per author basis.
+% \begin{macrocode}
+\newcommand*\alsoaffiliation[2][\relax]{%
+ \ifnum\acs@author@cnt>\z@\relax
+ \acs@affil@ifdup{#2}{%
+ \acs@alsoaffil@find{#2}%
+ }{%
+ \global\advance\acs@affil@cnt\@ne\relax
+ \@tempcnta\acs@affil@cnt\relax
+ \expandafter\gdef\csname @address@\@roman\acs@affil@cnt\endcsname
+ {#2}%
+ \ifx\relax#1\relax
+ \expandafter\gdef\csname @affil@\@roman\acs@affil@cnt\endcsname
+ {#2}%
+ \else
+ \expandafter\gdef\csname @affil@\@roman\acs@affil@cnt\endcsname
+ {#1}%
+ \fi
+ }%
+ \@ifundefined{@author@alsoaffil@\@roman\acs@author@cnt}{%
+ \expandafter\xdef\csname @author@alsoaffil@\@roman\acs@author@cnt
+ \endcsname{\the\@tempcnta}%
+ }{%
+ \expandafter\xdef\csname @author@alsoaffil@\@roman\acs@author@cnt
+ \endcsname{%
+ \csname @author@alsoaffil@\@roman\acs@author@cnt\endcsname
+ ,\the\@tempcnta
+ }%
+ }%
+ \else
+ \acs@warning{Affiliation with no author}%
+ \fi
+}
+\newcommand*\acs@alsoaffil@find[1]{%
+ \begingroup
+ \def\@tempa{#1}%
+ \@tempcnta\z@\relax
+ \@tempcntb\z@\relax
+ \acs@affil@ifdup@aux
+ \expandafter\endgroup
+ \expandafter\@tempcnta\the\@tempcnta\relax
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\altaffiliation}
+% For the alternative affiliation, a second count is kept, and the
+% affiliation is ``attached'' to the author. The way these are stored
+% means that the appropriate affiliation number can be recovered later,
+% and so printed correctly when things get complex.
+% \begin{macrocode}
+\newcommand*\altaffiliation[1]{%
+ \ifnum\acs@author@cnt>\z@\relax
+ \begingroup
+ \acs@altaffil@ifdup{#1}{%
+ \expandafter\xdef\csname @author@altaffil@\@roman\acs@author@cnt
+ \endcsname{\the\@tempcnta}%
+ }{%
+ \global\advance\acs@affil@alt@cnt\@ne\relax
+ \expandafter\gdef\csname @altaffil@\@roman\acs@affil@alt@cnt
+ \endcsname{#1}%
+ \expandafter\xdef\csname @author@altaffil@\@roman\acs@author@cnt
+ \endcsname{\the\acs@affil@alt@cnt}%
+ }%
+ \endgroup
+ \else
+ \acs@warning{Affiliation with no author}%
+ \fi
+}
+\@onlypreamble\altaffiliation
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@altaffil@ifdup}
+%\begin{macro}{\acs@altaffil@ifdup@aux}
+% This is very similar to the same routine for normal affiliations but
+% with the appropriate name changes.
+% \begin{macrocode}
+\newcommand*\acs@altaffil@ifdup[1]{%
+ \def\@tempa{#1}%
+ \@tempswafalse
+ \@tempcnta\z@\relax
+ \ifnum\acs@affil@alt@cnt>\z@\relax
+ \expandafter\acs@altaffil@ifdup@aux
+ \fi
+ \if@tempswa
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\newcommand*\acs@altaffil@ifdup@aux{%
+ \advance\@tempcnta\@ne\relax
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter
+ \expandafter\@tempb\expandafter\expandafter\expandafter
+ {\csname @altaffil@\@roman\@tempcnta\endcsname}%
+ \ifx\@tempa\@tempb
+ \expandafter\@tempswatrue
+ \else
+ \ifnum\@tempcnta<\acs@affil@alt@cnt\relax
+ \expandafter\expandafter\expandafter\acs@altaffil@ifdup@aux
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\email}
+% E-mail addresses are attached to authors as well.
+% \begin{macrocode}
+\newcommand*\email[1]{%
+ \ifnum\acs@author@cnt>\z@\relax
+ \expandafter\gdef\csname @email@\@roman\acs@author@cnt\endcsname
+ {#1}%
+ \else
+ \acs@warning{E-mail with no author}%
+ \fi
+}
+\@onlypreamble\email
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\fax}
+%\begin{macro}{\phone}
+% Fax and phone numbers are similar.
+% \begin{macrocode}
+\newcommand*\fax[1]{%
+ \ifnum\acs@author@cnt>\z@\relax
+ \expandafter\gdef\csname @fax@\@roman\acs@author@cnt\endcsname
+ {#1}%
+ \else
+ \acs@warning{Fax number with no author}%
+ \fi
+}
+\@onlypreamble\fax
+\newcommand*\phone[1]{%
+ \ifnum\acs@author@cnt>\z@\relax
+ \expandafter\gdef\csname @phone@\@roman\acs@author@cnt\endcsname
+ {#1}%
+ \else
+ \acs@warning{Phone number with no author}%
+ \fi
+}
+\@onlypreamble\phone
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\abbreviations}
+%\begin{macro}{\@abbreviations}
+%\begin{macro}{\keywords}
+%\begin{macro}{\@keywords}
+% Some journals use these.
+% \begin{macrocode}
+\newcommand*\abbreviations[1]{%
+ \gdef\@abbreviations{#1}%
+}
+\newcommand*\@abbreviations{}
+\@onlypreamble\abbreviations
+\newcommand*\keywords[1]{%
+ \gdef\@keywords{#1}%
+}
+\newcommand*\@keywords{}
+\@onlypreamble\keywords
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\acs@abbreviations@print}
+%\begin{macro}{\acs@keywords@print}
+%\begin{macro}{\acs@title@short@print}
+% For printing the key simple meta-data.
+% \begin{macrocode}
+\newcommand*\acs@abbreviations@print{%
+ \ifx\@abbreviations\@empty\else
+ \section*{Abbreviations}
+ \@abbreviations
+ \par
+ \fi
+}
+\newcommand*\acs@keywords@print{%
+ \ifx\@keywords\@empty\else
+ \section*{Keywords}
+ \@keywords
+ \par
+ \fi
+}
+\newcommand*\acs@title@short@print{%
+ \section*{Running header}
+ \acs@title@short
+ \par
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\acs@space@pre@title}
+%\begin{macro}{\acs@space@post@title}
+%\begin{macro}{\acs@space@post@author}
+%\begin{macro}{\acs@space@post@address}
+%\begin{macro}{\acs@space@post@email}
+%\begin{macro}{\acs@maketitle@width}
+% Lengths for \cs{@maketitle}.
+% \begin{macrocode}
+\newlength\acs@space@pre@title
+\setlength\acs@space@pre@title{2em}
+\newlength\acs@space@post@title
+\setlength\acs@space@post@title{1.5em}
+\newlength\acs@space@post@author
+\setlength\acs@space@post@author{1em}
+\newlength\acs@space@post@address
+\setlength\acs@space@post@address{1em}
+\newlength\acs@space@post@email
+\setlength\acs@space@post@email{1.5em}
+\newlength\acs@maketitle@width
+\setlength\acs@maketitle@width{\textwidth}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\affilsize}
+%\begin{macro}{\authorsize}
+%\begin{macro}{\emailsize}
+%\begin{macro}{\titlesize}
+% Some simple size commands.
+% \begin{macrocode}
+\newcommand*\affilsize{\normalsize}
+\newcommand*\authorsize{\large}
+\newcommand*\emailsize{\normalsize}
+\newcommand*\titlesize{\LARGE}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\authorfont}
+%\begin{macro}{\authorfont}
+%\begin{macro}{\emailfont}
+%\begin{macro}{\titlefont}
+% Font settings for \cs{@maketitle}.
+% \begin{macrocode}
+\newcommand*\affilfont{\itshape}
+\newcommand*\authorfont{\sffamily}
+\newcommand*\emailfont{}
+\newcommand*\titlefont{\bfseries\sffamily}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ps@acs}
+% A shortcut to make page styles.
+% \begin{macrocode}
+\newcommand*{\ps@acs}{}
+\let\ps@acs\ps@plain
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@maketitle}
+%\begin{macro}{\@maketitle@title@hook}
+% With the changes outlined above in place, a new \cs{@maketitle}
+% macro is needed. This is partially a copy of the existing, but
+% rather heavily modified.
+% \begin{macrocode}
+\def\@maketitle{%
+ \pagestyle{acs}%
+ \ifnum\acs@author@cnt<\z@\relax
+ \acs@warning{No authors defined: At least one author is required}%
+ \fi
+ \newpage
+ \null
+ \vspace*{\acs@space@pre@title}%
+ \begin{center}
+ \begin{minipage}{\acs@maketitle@width}
+ \begin{center}
+ {%
+ \titlefont
+ \titlesize
+ \let\@fnsymbol\acs@author@fnsymbol
+ \let\footnote\acs@title@footnote
+ \acs@maketitle@suppinfo \@title
+ \acs@title@footnote@check
+ \global\acs@footnote@cnt\c@footnote
+ \@maketitle@title@hook
+ \par
+ }%
+ \vspace*{\acs@space@post@title}%
+ {%
+ \authorsize
+ \authorfont
+ \frenchspacing
+ \acs@author@list
+ \par
+ }%
+ \vspace*{\acs@space@post@author}%
+ {%
+ \affilsize
+ \affilfont
+ \acs@address@list
+ \par
+ }%
+ \vspace*{\acs@space@post@address}%
+ {%
+ \emailsize
+ \emailfont
+ \ifacs@email
+ \expandafter\acs@contact@details
+ \fi
+ }%
+ \vspace*{\acs@space@post@email}%
+ \end{center}
+ \end{minipage}
+ \end{center}%
+}
+\newcommand*\@maketitle@title@hook{}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@maketitle@suppinfo}
+% This is spun out so that it can be avoided if necessary: this is done
+% on the sly.
+% \begin{macrocode}
+\newcommand*\acs@maketitle@suppinfo{%
+ \ifx\acs@manuscript\acs@manuscript@suppinfo
+ Supporting Information:\\
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@title@footnote}
+%\begin{macro}{\acs@title@footnote@check}
+% Footnotes need to be created so that they appear correctly.
+% \begin{macrocode}
+\newcommand*\acs@title@footnote[1]{%
+ \footnotemark
+ \g@addto@macro\@thanks{\footnotetext{#1}}%
+}
+\newcommand\acs@title@footnote@check{%
+ \ifx\@thanks\@empty
+ \else
+ \begingroup
+ \toks@=\expandafter{\@thanks}%
+ \xdef\@thanks{%
+ \begingroup
+ \let\noexpand\@fnsymbol\noexpand\acs@author@fnsymbol
+ \the\toks@
+ \endgroup
+ }%
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@contact@details}
+% A general contact details macro.
+% \begin{macrocode}
+\newcommand*\acs@contact@details{%
+ { \sffamily E-mail: \acs@email@list }%
+ \acs@number@list
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@thanks}
+% The \cs{@thanks} macro is used as a hook to generate the footnotes if
+% needed.
+% \begin{macrocode}
+\let\@thanks\@empty
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@author@list}
+% Printing the author list needs to do several things. The appropriate
+% separators between authors are created and the author names
+% themselves are printed.
+% \begin{macrocode}
+\newcommand*\acs@author@list{%
+ \@tempcnta\z@\relax
+ \ifnum\acs@author@cnt=\z@\relax\else
+ \expandafter\acs@author@list@main
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@author@footnotes}
+%\begin{macro}{\acs@author@list@main}
+% The main control macro for producing the author list iterates over
+% each author on the list. The result is stored as
+% \cs{acs@author@listing}.
+% \begin{macrocode}
+\newcommand*\acs@author@footnotes{}
+\newcommand*\acs@author@list@main{%
+ \advance\@tempcnta\@ne\relax
+ \def\acs@author@footnotes{}%
+ \acs@author@list@and
+ \space
+ \@nameuse{@author@\@roman\@tempcnta}%
+ \acs@author@list@comma
+ \acs@author@star
+ \acs@author@affil
+ \acs@author@affil@also
+ \acs@author@affil@alt
+ \ifx\@empty\acs@author@footnotes\else
+ \textsuperscript{\acs@author@footnotes}%
+ \fi
+ \ifnum\@tempcnta<\acs@author@cnt\relax
+ \expandafter\acs@author@list@main
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@author@list@and}
+%\begin{macro}{\acs@author@list@comma}
+% Simple checks to add an ``and'' and a comma.
+% \begin{macrocode}
+\newcommand*\acs@author@list@and{%
+ \ifnum\acs@author@cnt=\@ne\relax\else
+ \ifnum\@tempcnta=\acs@author@cnt\relax
+ \space and%
+ \fi
+ \fi
+}
+\newcommand*\acs@author@list@comma{%
+ \ifnum\acs@author@cnt>\tw@\relax
+ \ifnum\@tempcnta<\acs@author@cnt\relax
+ ,%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@author@star}
+%\begin{macro}{\acs@author@star@aux}
+% A check for an e-mail for an author: if so, add a star.
+% \begin{macrocode}
+\newcommand*\acs@author@star{%
+ \acs@ifundefined{@email@\@roman\@tempcnta}{}{%
+ \acs@author@star@aux
+ }%
+}
+\newcommand*\acs@author@star@aux{%
+ \protected@edef\acs@author@footnotes{%
+ \acs@author@fnsymbol{\z@}%
+ \ifnum\acs@affil@cnt>\@ne\relax
+ ,%
+ \else
+ \ifnum\acs@affil@alt@cnt>\z@\relax
+ ,%
+ \fi
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@author@affil}
+%\begin{macro}{\acs@author@affil@aux}
+% The main affiliation of the author is checked for, and assuming one
+% is found the appropriate symbol is added to the list.
+% \begin{macrocode}
+\newcommand*\acs@author@affil{%
+ \acs@ifundefined{%
+ @affil@\@roman\csname @author@affil@\@roman\@tempcnta\endcsname
+ }{%
+ \acs@warning{%
+ No affiliation given for author\MessageBreak
+ \@nameuse{@author@\@roman\@tempcnta}%
+ }%
+ }{%
+ \acs@author@affil@aux
+ }%
+}
+\newcommand*\acs@author@affil@aux{%
+ \ifnum\acs@affil@cnt>\@ne\relax
+ \expandafter\acs@affil@marker@cnt\csname @author@affil@\@roman
+ \@tempcnta\endcsname\relax
+ \advance\acs@affil@marker@cnt\acs@footnote@cnt\relax
+ \protected@edef\acs@author@footnotes{%
+ \acs@author@footnotes
+ \acs@author@fnsymbol{\acs@affil@marker@cnt}%
+ }%
+ \else
+ \ifnum\acs@affil@alt@cnt>\z@\relax
+ \acs@affil@marker@cnt\@ne\relax
+ \advance\acs@affil@marker@cnt\acs@footnote@cnt\relax
+ \protected@edef\acs@author@footnotes{%
+ \acs@author@footnotes
+ \acs@author@fnsymbol{\acs@affil@marker@cnt}%
+ }%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@author@affil@also}
+%\begin{macro}{\acs@author@affil@also@aux}
+% The ``also'' affiliations are generated by a loop as there may be more
+% than one.
+% \begin{macrocode}
+\newcommand*\acs@author@affil@also{%
+ \acs@ifundefined{@author@alsoaffil@\@roman\@tempcnta}{}{%
+ \acs@author@affil@also@aux
+ }%
+}
+\newcommand*\acs@author@affil@also@aux{%
+ \expandafter\@for\expandafter\@tempa\expandafter:\expandafter
+ =\csname @author@alsoaffil@\@roman\@tempcnta\endcsname\do{%
+ \acs@affil@marker@cnt\@tempa\relax
+ \advance\acs@affil@marker@cnt\acs@footnote@cnt\relax
+ \protected@edef\acs@author@footnotes{%
+ \acs@author@footnotes
+ ,%
+ \acs@author@fnsymbol{\acs@affil@marker@cnt}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@author@affil@alt}
+%\begin{macro}{\acs@author@affil@alt@aux}
+% Alternative affiliations get the correct affiliation number back out
+% from the stored data. There are then two corrections: one for the
+% total number of main affiliations and a second in case there is a
+% footnote to the title.
+% \begin{macrocode}
+\newcommand*\acs@author@affil@alt{%
+ \acs@ifundefined{@author@altaffil@\@roman\@tempcnta}{}{%
+ \acs@author@affil@alt@aux
+ }%
+}
+\newcommand*\acs@author@affil@alt@aux{%
+ \expandafter\acs@affil@marker@cnt
+ \csname @author@altaffil@\@roman\@tempcnta\endcsname\relax
+ \advance\acs@affil@marker@cnt\acs@affil@cnt\relax
+ \advance\acs@affil@marker@cnt\acs@footnote@cnt\relax
+ \protected@edef\acs@author@footnotes{%
+ \acs@author@footnotes
+ ,%
+ \acs@author@fnsymbol{\acs@affil@marker@cnt}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% \begin{macro}{\acs@author@fnsymbol}
+% \begin{macro}{\acs@author@fnsymbol@aux}
+% \begin{macro}{\acs@author@fnsymbol@loop}
+% \begin{macro}{\acs@author@fnsymbol@loop@aux@i}
+% \begin{macro}{\acs@author@fnsymbol@loop@aux@ii}
+% \begin{macro}{\acs@author@fnsymbol@loop@aux@m}
+% \begin{macro}{\acs@author@fnsymbol@loop@aux@Q}
+% \begin{macro}{\acs@author@fnsymbol@symbol}
+% The ACS have an extended list of symbols. The star appears at the
+% special position zero.
+% \begin{macrocode}
+\newcommand*{\acs@author@fnsymbol}[1]{%
+ \ensuremath{%
+ \expandafter\acs@author@fnsymbol@aux\expandafter{\number#1 }%
+ }%
+}
+\newcommand*{\acs@author@fnsymbol@aux}[1]{%
+ \ifnum#1>10 %
+ \expandafter\acs@author@fnsymbol@loop
+ \else
+ \expandafter\acs@author@fnsymbol@symbol
+ \fi
+ {#1}%
+}
+\newcommand*{\acs@author@fnsymbol@loop}[1]{%
+ \acs@author@fnsymbol@loop@aux@i#1%
+}
+\newcommand*{\acs@author@fnsymbol@loop@aux@i}[2]{%
+ \acs@author@fnsymbol@symbol{\ifnum#2=0 10\else #2\fi}%
+ \expandafter\acs@author@fnsymbol@loop@aux@ii\romannumeral #1000Q{}%
+ {\acs@author@fnsymbol@symbol{\ifnum#2=0 10\else #2\fi}}%
+}
+\newcommand*{\acs@author@fnsymbol@loop@aux@ii}[1]{%
+ \@nameuse{acs@author@fnsymbol@loop@aux@#1}%
+}
+\def\acs@author@fnsymbol@loop@aux@m#1Q#2#3{%
+ \acs@author@fnsymbol@loop@aux@ii#1Q{#2#3}{#3}%
+}
+\newcommand*{\acs@author@fnsymbol@loop@aux@Q}[2]{#1}
+\newcommand*{\acs@author@fnsymbol@symbol}[1]{%
+ \ifcase #1 *\or
+ \dagger\or
+ \ddagger\or
+ \P\or
+ \S\or
+ \|\or
+ \bot\or
+ \#\or
+ @\or
+ \triangle\or
+ \nabla
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\acs@address@list}
+% \begin{macro}{\acs@address@list@auxi}
+% \begin{macro}{\acs@address@list@auxii}
+% Loop over the addresses and any extra affiliations and print them
+% all: if there is only one, omit the marker entirely. There is also a
+% need to watch out for any footnotes from the title.
+% \begin{macrocode}
+\newcommand*\acs@address@list{%
+ \ifnum\acs@affil@cnt>\z@
+ \expandafter\acs@address@list@auxi
+ \else
+ \acs@warning{No affiliations: at least one affiliation is needed}%
+ \fi
+}
+\newcommand*\acs@address@list@auxi{%
+ \ifnum0%
+ \ifnum\acs@affil@cnt>\@ne 1\fi
+ \ifnum\acs@affil@alt@cnt>\z@ 1\fi
+ >\z@
+ \expandafter\acs@address@list@auxii
+ \else
+ \@address@i\par
+ \fi
+}
+\newcommand*\acs@address@list@auxii{%
+ \@tempcnta\z@
+ \acs@affil@marker@cnt\acs@footnote@cnt
+ \loop\ifnum\@tempcnta<\acs@affil@cnt
+ \advance\@tempcnta\@ne
+ \advance\acs@affil@marker@cnt\@ne
+ \acs@author@fnsymbol{\acs@affil@marker@cnt}%
+ \@nameuse{@address@\@roman\@tempcnta}\par
+ \repeat
+ \@tempcnta\z@
+ \loop\ifnum\@tempcnta<\acs@affil@cnt
+ \advance\@tempcnta\@ne
+ \advance\acs@affil@marker@cnt\@ne
+ \acs@ifundefined{@altaffil@\@roman\@tempcnta}
+ {}
+ {%
+ \acs@author@fnsymbol{\acs@affil@marker@cnt}%
+ \@nameuse{@altaffil@\@roman\@tempcnta}\par
+ }%
+ \repeat
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%\begin{macro}{\acs@fnsymbol@org}
+%\begin{macro}{\acs@affil@list}
+%\begin{macro}{\acs@affil@list@aux}
+% Footnotes are done in two stages. First the main affiliation is
+% handled, then the possible alternative. There is a need to check for
+% the possibility that there is only one main affiliation but one or
+% more alternative ones.
+% \begin{macrocode}
+\newcommand*\acs@fnsymbol@org{}
+\newcommand*\acs@affil@list{%
+ \let\acs@fnsymbol@org\@fnsymbol
+ \let\@fnsymbol\acs@author@fnsymbol
+ \@tempcnta\z@\relax
+ \@tempcntb\z@\relax
+ \ifnum\acs@affil@cnt>\@ne\relax
+ \expandafter\acs@affil@list@aux
+ \else
+ \ifnum\acs@affil@alt@cnt>\z@\relax
+ \acs@affil@marker@cnt\@ne\relax
+ \advance\acs@affil@marker@cnt\acs@footnote@cnt\relax
+ \footnotetext[\acs@affil@marker@cnt]{\@affil@i}%
+ \@tempcnta\@ne\relax
+ \fi
+ \fi
+ \ifnum\acs@affil@alt@cnt>\z@\relax
+ \expandafter\acs@affil@alt@list
+ \fi
+ \let\@fnsymbol\acs@fnsymbol@org
+}
+\newcommand*\acs@affil@list@aux{%
+ \advance\@tempcnta\@ne\relax
+ \acs@affil@marker@cnt\@tempcnta\relax
+ \advance\acs@affil@marker@cnt\acs@footnote@cnt\relax
+ \footnotetext[\acs@affil@marker@cnt]{%
+ \@nameuse{@affil@\@roman\@tempcnta}%
+ }%
+ \ifnum\@tempcnta<\acs@affil@cnt\relax
+ \expandafter\acs@affil@list@aux
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@affil@alt@list}
+%\begin{macro}{\acs@affil@alt@lista@aux}
+% The secondary loop for alternative affiliations is similar.
+% \begin{macrocode}
+\newcommand*\acs@affil@alt@list{%
+ \advance\@tempcntb\@ne\relax
+ \acs@ifundefined{@altaffil@\@roman\@tempcntb}{}{%
+ \acs@altaffil@foot@aux
+ }
+ \ifnum\@tempcntb<\acs@author@cnt\relax
+ \expandafter\acs@affil@alt@list
+ \fi
+}
+\newcommand*\acs@altaffil@foot@aux{%
+ \advance\@tempcnta\@ne\relax
+ \acs@affil@marker@cnt\@tempcnta\relax
+ \advance\acs@affil@marker@cnt\acs@footnote@cnt\relax
+ \footnotetext[\acs@affil@marker@cnt]{%
+ \@nameuse{@altaffil@\@roman\@tempcntb}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@email@list@font}
+%\begin{macro}{\acs@email@list}
+%\begin{macro}{\acs@email@list@aux}
+% The final piece of meta-data to print is the e-mail address list.
+% The total number of e-mail addresses given it counted in
+% \cs{@tempcntb}, which means a warning can be given if there are
+% none. The group is used so that \cs{UrlFont} can be set correctly.
+% \begin{macrocode}
+\newcommand*\acs@email@list@font{\sf}
+\newcommand*\acs@email@list{%
+ \begingroup
+ \def\UrlFont{\acs@email@list@font}%
+ \@tempcnta\z@\relax
+ \@tempcntb\z@\relax
+ \acs@email@list@aux
+ \ifnum\@tempcntb=\z@\relax
+ \acs@warning{%
+ No e-mail given:\MessageBreak
+ at lest one author must have a contact e-mail%
+ }%
+ \fi
+ \endgroup
+}
+\newcommand*\acs@email@list@aux{%
+ \advance\@tempcnta\@ne\relax
+ \ifnum\@tempcnta>\acs@author@cnt\relax\else
+ \acs@ifundefined{@email@\@roman\@tempcnta}{}{%
+ \advance\@tempcntb\@ne\relax
+ \ifnum\@tempcntb>\@ne\relax
+ ;
+ \fi
+ \expandafter\expandafter\expandafter\url\expandafter
+ \expandafter\expandafter{%
+ \csname @email@\@roman\@tempcnta\endcsname
+ }%
+ }%
+ \expandafter\acs@email@list@aux
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@number@list}
+%\begin{macro}{\acs@number@list@aux@i}
+%\begin{macro}{\acs@number@list@aux@ii}
+% Listing phone and fax numbers is easier as they don't have to be
+% given. Everything is done in one block so that it is possible to know
+% whether to add a new line and also to keep everything together.
+% \begin{macrocode}
+\newcommand*\acs@number@list{%
+ \begingroup
+ \acs@number@list@aux@i{phone}%
+ \let\@tempb\@tempa
+ \acs@number@list@aux@i{fax}%
+ \ifx\@tempa\@empty
+ \let\@tempa\@tempb
+ \else
+ \ifx\@tempb\@empty\else
+ \protected@edef\@tempa{%
+ \@tempb.\space\@tempa
+ }%
+ \fi
+ \fi
+ \ifx\@tempa\@empty\else
+ \par
+ \@tempa
+ \fi
+ \endgroup
+}
+\newcommand*\acs@number@list@aux@i[1]{%
+ \def\@tempa{}%
+ \@tempcnta\z@\relax
+ \def\acs@number@list@aux@ii{%
+ \advance\@tempcnta\@ne\relax
+ \ifnum\@tempcnta>\acs@author@cnt\relax\else
+ \acs@ifundefined{@#1@\@roman\@tempcnta}{}{%
+ \acs@ifundefined{@email@\@roman\@tempcnta}{}{%
+ \ifx\@tempa\@empty
+ \edef\@tempa{%
+ \@nameuse{@#1@\@roman\@tempcnta}%
+ }%
+ \else
+ \edef\@tempa{%
+ \@tempa
+ ;
+ \@nameuse{@#1@\@roman\@tempcnta}%
+ }%
+ \fi
+ }%
+ }%
+ \expandafter\acs@number@list@aux@ii
+ \fi
+ }%
+ \acs@number@list@aux@ii
+ \ifx\@tempa\@empty\else
+ \protected@edef\@tempa{%
+ \MakeUppercase#1: \@tempa
+ }%
+ \fi
+}
+\newcommand*\acs@number@list@aux@ii{}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% \begin{macro}{\endabstract}
+% \begin{macro}{\acs@abstract@extras}
+% \begin{macrocode}
+\g@addto@macro\endabstract{%
+ \aftergroup\acs@abstract@extras
+}
+\newcommand*{\acs@abstract@extras}{%
+ \ifacs@abbreviations
+ \acs@abbreviations@print
+ \par
+ \fi
+ \ifacs@keywords
+ \acs@keywords@print
+ \par
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%\begin{macro}{\acs@maketitle@extras}
+%\begin{macro}{\acs@maketitle@extras@hook}
+% A couple of things might need to be added to \cs{maketitle}.
+% \begin{macrocode}
+\newcommand*\acs@maketitle@extras{%
+ \acs@maketitle@extras@hook
+}
+\newcommand*\acs@maketitle@extras@hook{}
+\g@addto@macro{\maketitle}{\acs@maketitle@extras}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% \cs{maketitle} is required by the document class, and must start
+% the document. No variation is allowed, and so it is done
+% automatically.
+% \begin{macrocode}
+\g@addto@macro{\document}{\maketitle}
+% \end{macrocode}
+%
+%\begin{environment}{scheme}
+%\begin{environment}{chart}
+%\begin{environment}{graph}
+% Three new float types are provided, \texttt{scheme}, \texttt{chart}
+% and \texttt{graph}. These are the most obvious types; for graphs,
+% a slight problem arises with the file extension.
+% \begin{macrocode}
+\newfloat{scheme}{htbp}{los}
+\floatname{scheme}{Scheme}
+\newfloat{chart}{htbp}{loc}
+\floatname{chart}{Chart}
+\newfloat{graph}{htbp}{loh}
+\floatname{graph}{Graph}
+% \end{macrocode}
+%\end{environment}
+%\end{environment}
+%\end{environment}
+%\begin{macro}{\schemename}
+%\begin{macro}{\chartname}
+%\begin{macro}{\graphname}
+% Naming is set up in the same way as the kernel floats.
+% \begin{macrocode}
+\newcommand*\schemename{Scheme}
+\newcommand*\chartname{Chart}
+\newcommand*\graphname{Graph}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% The standard floats should appear ``here'' by default.
+% \begin{macrocode}
+\floatplacement{table}{htbp}
+\floatplacement{figure}{htbp}
+\floatstyle{plaintop}
+\restylefloat{table}
+% \end{macrocode}
+%\begin{macro}{\acs@floatboxreset}
+% Floats are all centred.
+% \begin{macrocode}
+\let\acs@floatboxreset\@floatboxreset
+\def\@floatboxreset{%
+ \centering
+ \acs@floatboxreset
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\plainref}
+%\begin{macro}{\ref}
+% For legacy support.
+% \begin{macrocode}
+\newcommand*\plainref{}
+\AtBeginDocument{\let\plainref\ref}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\acs@section}
+%\begin{macro}{\acs@subsection}
+%\begin{macro}{\acs@subsubsection}
+%\begin{macro}{\acs@startsection@orig}
+% Both the numbering and existence of section headers may need to be
+% altered. Some generic functions are therefore provided to deal with
+% this cleanly. First, some original definitions are saved.
+% \begin{macrocode}
+\newcommand*\acs@section{}
+\let\acs@section\section
+\newcommand*\acs@subsection{}
+\let\acs@subsection\subsection
+\newcommand*\acs@subsubsection{}
+\let\acs@subsubsection\subsubsection
+\newcommand*\acs@startsection@orig{}
+\let\acs@startsection@orig\@startsection
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@startsection}
+% A version of \cs{@startsection} which adds unnumbered sections to
+% the TOC: modelled on \pkg{amsart}. This is active as standard.
+% \begin{macrocode}
+\newcommand\acs@startsection[6]{%
+ \if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \if@nobreak \everypar{}\else
+ \addpenalty\@secpenalty\addvspace\@tempskipa\fi
+ \@ifstar{\@dblarg{\@sect{#1}{\@m}{#3}{#4}{#5}{#6}}}%
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
+}
+\let\@startsection\acs@startsection
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@startsection@alt}
+% An alternative version of \cs{@startsection} which never adds numbers.
+% \begin{macrocode}
+\newcommand*\acs@startsection@alt[6]{%
+ \if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \if@nobreak \everypar{}\else
+ \addpenalty\@secpenalty\addvspace\@tempskipa\fi
+ \@ifstar{\@ssect{#3}{#4}{#5}{#6}}
+ {\@ssect{#3}{#4}{#5}{#6}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@sections@none}
+%\begin{macro}{\acs@sections@none@aux}
+% When removing sections entirely, a gobble macro is needed.
+% \begin{macrocode}
+\newcommand*\acs@sections@none{%
+ \@ifstar{%
+ \acs@sections@none@aux
+ }{%
+ \acs@sections@none@aux
+ }%
+}
+\newcommand*\acs@sections@none@aux[2][]{%
+ \acs@warning{%
+ (Sub)section `#2' ignored%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\SectionNumbersOff}
+%\begin{macro}{\SectionNumbersOn}
+% To macros to add or remove the section numbers. The standard setting
+% for the class has them on, but some configurations will turn them
+% off. The names of these functions are both in design space so that
+% users can change the decision easily.
+% \begin{macrocode}
+\newcommand*\SectionNumbersOff{%
+ \let\@startsection\acs@startsection@alt
+}
+\@onlypreamble\SectionNumbersOff
+\newcommand*\SectionNumbersOn{%
+ \let\@startsection\acs@startsection
+}
+\@onlypreamble\SectionNumbersOn
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\SectionsOff}
+%\begin{macro}{\SectionsOn}
+% Quite similar for entire sections.
+% \begin{macrocode}
+\newcommand*\SectionsOff{%
+ \let\section\acs@sections@none
+ \let\subsection\acs@sections@none
+ \let\subsubsection\acs@sections@none
+}
+\@onlypreamble\SectionsOff
+\newcommand*\SectionsOn{%
+ \let\section\acs@section
+ \let\subsection\acs@subsection
+ \let\subsubsection\acs@subsubsection
+}
+\@onlypreamble\SectionsOn
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% \begin{macro}{\tableofcontents}
+% Never print TOC in itself.
+% \begin{macrocode}
+\begingroup
+ \toks@=\expandafter{\tableofcontents}
+ \xdef\tableofcontents{%
+ \begingroup
+ \let\noexpand\@startsection\noexpand\acs@startsection@orig
+ \the\toks@
+ \endgroup
+ }
+\endgroup
+% \end{macrocode}
+% \end{macro}
+%\begin{environment}{acknowledgement}
+%\begin{environment}{suppinfo}
+% Simple named sections.
+% \begin{macrocode}
+\newenvironment{acknowledgement}{%
+ \acs@section*{\acknowledgementname}%
+}{}
+\newenvironment{suppinfo}{%
+ \acs@section*{\suppinfoname}%
+}{}
+% \end{macrocode}
+%\end{environment}
+%\end{environment}
+%\begin{macro}{\acknowledgementname}
+%\begin{macro}{\bibsection}
+%\begin{macro}{\suppinfoname}
+% A few macros need to get around the changes.
+% \begin{macrocode}
+\newcommand*\acknowledgementname{Acknowledgement}
+\AtEndOfClass{%
+ \def\bibsection{%
+ \acs@section*{\refname}%
+ }%
+}
+\newcommand*\suppinfoname{Supporting Information Available}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\acs@abstract}
+%\begin{macro}{\acs@endabstract}
+%\begin{macro}{\acs@abstract@start}
+%\begin{macro}{\acs@abstract@end}
+%\begin{macro}{\acs@abstract@iffalse}
+% Removing the abstract, if necessary, is done using a trick from the
+% \pkg{comment} package. However, it code is copied here to keep
+% requirements down.
+% \begin{macrocode}
+\newcommand*\acs@abstract{}
+\let\acs@abstract\abstract
+\newcommand*\acs@endabstract{}
+\let\acs@endabstract\endabstract
+\begingroup
+ \catcode`{ \active
+ \catcode`} 12\relax
+ \catcode`( 1\relax
+ \catcode`) 2\relax
+ \gdef\acs@abstract@start(%
+ \acs@warning(%
+ Abstract not allowed for this\MessageBreak
+ manuscript type
+ )%
+ \@bsphack
+ \catcode`{ \active
+ \catcode`} 12\relax
+ \let\end\fi
+ \let{\acs@abstract@end% }
+ \iffalse
+ )%{
+ \gdef\acs@abstract@end#1}(%
+ \def\@tempa(#1)%
+ \ifx\@tempa\@currenvir
+ \@Esphack\endgroup
+ \if@ignore
+ \global\@ignorefalse
+ \ignorespaces
+ \fi
+ \else
+ \expandafter\acs@abstract@iffalse
+ \fi
+ )
+\endgroup
+\newcommand*\acs@iffalse{\iffalse}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\AbstractOff}
+%\begin{macro}{\AbstractOn}
+% A very similar pattern to before.
+% \begin{macrocode}
+\newcommand*\AbstractOff{%
+ \let\abstract\acs@abstract@start
+ \let\endabstract\acs@abstract@end
+}
+\@onlypreamble\AbstractOff
+\newcommand*\AbstractOn{%
+ \let\abstract\acs@abstract
+ \let\endabstract\acs@endabstract
+}
+\@onlypreamble\AbstractOn
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\acs@collect@toks}
+%\begin{macro}{\acs@collect@content}
+%\begin{macro}{\acs@collect@content}
+% The content of the graphic TOC entry is processed using a method from
+% \pkg{amsmath} \emph{via} \pkg{environ}. The entire environment is
+% gathered for typesetting in a box. First, some storage is needed.
+% \begin{macrocode}
+\newtoks\acs@collect@toks
+\newtoks\acs@collect@empty@toks
+\newcommand*\acs@collect@begins{}
+\newcommand*\acs@collect@content{}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@collect}
+%\begin{macro}{\acs@collect@aux}
+%\begin{macro}{\acs@collect@begins@}
+%\begin{macro}{\acs@collect@body}
+% This is a \cs{long} version of \cs{collect@body}.
+% \begin{macrocode}
+\newcommand\acs@collect[1]{%
+ \acs@collect@toks{%
+ \expandafter#1\expandafter{\the\acs@collect@toks}%
+ }%
+ \edef\acs@collect@content{%
+ \the\acs@collect@toks
+ \noexpand\end{\@currenvir}%
+ }%
+ \acs@collect@toks\acs@collect@empty@toks
+ \def\acs@collect@begins{b}%
+ \begingroup
+ \expandafter\let\csname\@currenvir\endcsname\acs@collect@aux
+ \edef\acs@collect@content{%
+ \expandafter\noexpand\csname\@currenvir\endcsname
+ }%
+ \acs@collect@content
+}
+\newcommand*\acs@collect@aux{}
+\long\def\acs@collect@aux#1\end#2{%
+ \edef\acs@collect@begins{%
+ \acs@collect@begins@#1\begin\end
+ \expandafter\@gobble\acs@collect@begins
+ }%
+ \ifx\@empty\acs@collect@begins
+ \endgroup
+ \@checkend{#2}%
+ \acs@collect@body{#1}%
+ \else
+ \acs@collect@body{#1\end{#2}}%
+ \fi
+ \acs@collect@content
+}
+\newcommand*\acs@collect@begins@{}
+\long\def\acs@collect@begins@#1\begin#2{%
+ \ifx\end#2\else
+ b\expandafter\acs@collect@begins@
+ \fi
+}
+\newcommand\acs@collect@body[1]{%
+ \global\acs@collect@toks\expandafter{\the\acs@collect@toks#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@abstract@print}
+% Delayed abstract printing works in a similar way, but with some
+% formatting `built-in'.
+% \begin{macrocode}
+\newcommand\acs@abstract@print[1]{%
+ \global\long\def\acs@abstract@text{%
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse\newpage
+ \fi
+ \acs@section*{Abstract}%
+ #1%
+ \if@restonecol
+ \twocolumn
+ \else
+ \newpage
+ \fi
+ }%
+ \AtEndDocument{\acs@abstract@text}%
+}
+% \end{macrocode}
+%\end{macro}
+% \begin{macro}{\acs@tocentry@print}
+% \begin{macro}{\acs@tocentry@print@aux}
+% \begin{macro}{\acs@tocentry@text}
+% \changes{v3.10b}{2015/06/24}{Define \cs{acs@tocentry@text} in all cases}
+% \changes{v3.11a}{2018/04/02}{Print abstract at full size}
+% The same approach is taken for the graphical table of content
+% printing. This is done in a box so that everything has a frame around
+% it.
+% \begin{macrocode}
+\newcommand{\acs@tocentry@print}[1]{%
+ \gdef\acs@tocentry@text{\normalsize#1}%
+ \AtEndDocument{%
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse\newpage
+ \fi
+ \acs@tocentry@print@aux
+ \if@restonecol
+ \twocolumn
+ \else
+ \newpage
+ \fi
+ }%
+}
+\newcommand*{\acs@tocentry@print@aux}{%
+ \begingroup
+ \let\@startsection\acs@startsection@orig
+ \acs@section*{\tocentryname}%
+ \tocsize
+ \sffamily
+ \singlespacing
+ \begin{center}
+ \fbox
+ {%
+ \begin{minipage}{\acs@tocentry@height}
+ \vbox to \acs@tocentry@width{\acs@tocentry@text}%
+ \end{minipage}%
+ }%
+ \end{center}%
+ \endgroup
+}
+\newcommand*\acs@tocentry@text{TOC ENTRY REQUIRED}
+\newlength{\acs@tocentry@height}
+\newlength{\acs@tocentry@width}
+\setlength{\acs@tocentry@height}{9 cm}
+\setlength{\acs@tocentry@width}{3.5 cm}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%\begin{environment}{tocentry}
+% Actually creating the entry is pretty easy.
+% \begin{macrocode}
+\newenvironment{tocentry}{\acs@collect\acs@tocentry@print}{}
+% \end{macrocode}
+%\end{environment}
+%\begin{macro}{\tocentryname}
+% A simple name macro.
+% \begin{macrocode}
+\newcommand*\tocentryname{Graphical TOC Entry}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\tocsize}
+% The font size for printing the TOC entry.
+% \begin{macrocode}
+\newcommand*\tocsize{%
+ \@setfontsize\tocsize\@viiipt\@ixpt
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\acs@type@list}
+%\begin{macro}{\acs@type@default}
+%\begin{macro}{\acs@type@check}
+% Different journals allow different types of article. A list is set
+% up here: different journals can then alter it. A check function
+% is also provided along with a default.
+% \begin{macrocode}
+\newcommand*\acs@type@list{article,communication,suppinfo}
+\newcommand*\acs@type@default{article}
+\newcommand*\acs@type@check{%
+ \@tempswafalse
+ \@for\@tempa:=\acs@type@list\do{%
+ \ifx\@tempa\acs@manuscript
+ \expandafter\@tempswatrue
+ \fi
+ }%
+ \if@tempswa\else
+ \acs@warning{%
+ Invalid manuscript type \acs@manuscript:\MessageBreak
+ changed to default type \acs@type@default
+ }%
+ \let\acs@manuscript\acs@type@default
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+% A few bits for older versions.
+% \begin{macrocode}
+\newcommand*\acs@setkeys{\setkeys{acs}}
+\let\acs@killabstract\AbstractOff
+\let\acs@killsecs\SectionsOff
+\newcommand*\acs@validtype[2][article]{%
+ \def\acs@type@default{#1}%
+ \def\acs@type@list{#2}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\acs@par}
+% A saved paragraph.
+% \begin{macrocode}
+\newcommand*\acs@par{}
+\let\acs@par\par
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@layout@shared}
+%\begin{environment}{acknowledgement}
+%\begin{environment}{suppinfo}
+% Some code is used generally when setting up ``press ready'' layouts.
+% There is quite a bit here, mainly layout related.
+% \begin{macrocode}
+\newcommand*\acs@layout@shared{%
+ \AtBeginDocument{\singlespacing}%
+ \twocolumn
+ \tolerance=2000\relax
+ \emergencystretch=10pt\relax
+ \geometry{
+ letterpaper,
+ top = 12.7mm,
+ bottom = 16.8mm,
+ left = 19.3mm,
+ right = 19.3mm
+ }%
+ \setlength{\columnsep}{8.1mm}%
+ \setlength{\parindent}{3.3mm}%
+ \renewenvironment{acknowledgement}{%
+ \def\@tempa{acknowledgement}%
+ \ifx\@currenvir\@tempa
+ \let\par\relax
+ \acksize
+ \vspace{6pt}%
+ \textbf{\acknowledgementname}%
+ \else
+ \acs@section*{\acknowledgementname}%
+ \fi
+ }{%
+ \acs@par
+ }%
+}
+% \end{macrocode}
+%\end{environment}
+%\end{environment}
+%\end{macro}
+%\begin{macro}{\acksize}
+%\begin{macro}{\suppsize}
+% More sizes.
+% \begin{macrocode}
+\newcommand*\acksize{\normalsize}
+\newcommand*\suppsize{\normalsize}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@layout@nine}
+%\begin{macro}{\@xipt}
+%\begin{macro}{\acs@layout@ten}
+% The class loads twelve point text. To reset it for print layouts, it
+% is easiest to do things directly.
+% \begin{macrocode}
+\newcommand*\acs@layout@nine{%
+ \def\@xipt{11}%
+ \long\def\normalsize{%
+ \@setfontsize\normalsize\@ixpt\@xipt
+ }%
+ \normalsize
+ \let\@listi\@listI
+ \abovedisplayskip 5\p@ \@plus2\p@ \@minus 5\p@\relax
+ \abovedisplayshortskip \z@ \@plus3\p@\relax
+ \belowdisplayshortskip 3\p@ \@plus3\p@ \@minus 3\p@\relax
+ \belowdisplayskip\abovedisplayskip\relax
+ \abovecaptionskip 5\p@\relax
+ \intextsep 7\p@ \@plus 2\p@ \@minus 2\p@\relax
+}
+\newcommand*\acs@layout@ten{%
+ \long\def\normalsize{%
+ \@setfontsize\normalsize\@xpt\@xiipt
+ }%
+ \normalsize
+ \@setfontsize\normalsize\@xpt\@xiipt
+ \let\@listi\@listI
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@\relax
+ \abovedisplayshortskip \z@ \@plus3\p@\relax
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@\relax
+ \belowdisplayskip \abovedisplayskip\relax
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+% With all of the standard settings done, the journal configuration can
+% be loaded.
+% \begin{macrocode}
+\InputIfFileExists{achemso-\acs@journal.cfg}{}{%
+ \acs@warning{%
+ Unknown journal `\acs@journal':\MessageBreak
+ using default configuration JACSAT%
+ }%
+ \input{achemso-jacsat.cfg}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\thepage}
+% Some changes that can always be applied if the manuscript type is
+% appropriate: this saves some repetition in the configuration files.
+% \begin{macrocode}
+\acs@type@check
+\ifx\acs@manuscript\acs@manuscript@note
+ \SectionsOff
+\fi
+\ifx\acs@manuscript\acs@manuscript@review
+ \SectionsOn
+ \SectionNumbersOn
+\fi
+\ifx\acs@manuscript\acs@manuscript@suppinfo
+ \setkeys{acs}{maxauthors = 0}
+ \def\thepage{S-\arabic{page}}
+ \renewcommand*\thefigure{S\@arabic\c@figure}
+ \renewcommand*\thescheme{S\@arabic\c@scheme}
+ \renewcommand*\thetable{S\@arabic\c@table}
+ \AtBeginDocument
+ {%
+ \renewcommand*\citenumfont[1]{S#1}%
+ \renewcommand*\bibnumfmt[1]{(S#1)}%
+ }
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+% Set up two column layout.
+% \begin{macrocode}
+\begingroup
+ \def\@tempa{twocolumn}
+ \ifx\acs@layout\@tempa
+ \aftergroup\acs@layout@shared
+ \fi
+ \def\@tempa{two-column}
+ \ifx\acs@layout\@tempa
+ \aftergroup\acs@layout@shared
+ \fi
+\endgroup
+%</class>
+% \end{macrocode}
+%
+%\subsection{Late shared code}
+%
+%\begin{macro}{\citenumfont}
+% \changes{v3.9b}{2015/03/22}{Allow for setting \opt{super} after
+% loading}
+% Changes to citations can now be made. The citation styles supplied
+% here require \pkg{natbib}, which is loaded with the appropriate
+% options. This part applies to the package as well as the class: it is
+% here so that the load order is correct.
+% \begin{macrocode}
+%<*class|package>
+\ifacs@super
+ \RequirePackage[sort&compress,numbers,super]{natbib}
+\else
+ \RequirePackage[sort&compress,numbers,round]{natbib}
+ \def\citenumfont{\textit}
+\fi
+\define@key{acs}{super}[true]{%
+ \def\@tempa{#1}%
+ \def\@tempb{true}%
+ \ifx\@tempa\@tempb
+ \setcitestyle{super,open={},close={}}%
+ \renewcommand*\citenumfont{}%
+ \else
+ \setcitestyle{round}%
+ \renewcommand*\citenumfont{\textit}
+ \fi
+}
+\RequirePackage{natmove}
+% \end{macrocode}
+%\end{macro}
+% The \pkg{mciteplus} package allows the construction of lists of
+% references with sub-letters. However, it might not be available, and
+% so it is only loaded if available: the \file{.bst} files should work
+% either way. There is also a patch to get cross-references correct
+% with the modified \cs{ref} macro used here. The reason for ensuring
+% that \cs{@mciteNatbibCiteCmdList} is defined is that it allows for
+% the case where people prevent \pkg{mciteplus} being loaded using
+% \cs{ver@mciteplus.sty}.
+% \begin{macrocode}
+\IfFileExists{mciteplus.sty}{%
+ \RequirePackage{mciteplus}
+ \providecommand*{\@mciteNatbibCiteCmdList}{}%
+ \edef\@tempa{\noexpand\in@{citenum}{\@mciteNatbibCiteCmdList}}%
+ \@tempa
+ \ifin@
+ \else
+ \edef\@mciteNatbibCiteCmdList{\@mciteNatbibCiteCmdList,citenum}%
+ \fi
+%<*!package>
+ \def\@mciteSubRef[##1]##2{\plainref{\@mcitereflabelprefix:##1:##2}}
+%</!package>
+}{}
+% \end{macrocode}
+%
+%\begin{macro}{\acs@bibstyle}
+% The next step is to sort out bibliography formatting. With both the
+% package and the class, the bibliography style is determined without
+% user intervention. The style is stored as it may need to be
+% altered later.
+% \begin{macrocode}
+\newcommand*\acs@bibstyle{achemso}
+\ifacs@biochem
+ \def\acs@bibstyle{biochem}
+ \bibliographystyle{biochem}
+\else
+ \bibliographystyle{achemso}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@bibliographystyle}
+%\begin{macro}{\bibliographystyle}
+% The original \cs{bibliographystyle} macro is now disabled: the
+% underlying command is repeated otherwise problems cop up with
+% \pkg{chapterbib}.
+% \begin{macrocode}
+\newcommand*\acs@bibliographystyle{}
+\let\acs@bibliographystyle\bibliographystyle
+\def\bibliographystyle#1{%
+ \acs@warning{\string\bibliographystyle\space ignored}%
+ \expandafter\acs@bibliographystyle\expandafter{\acs@bibstyle}%
+}
+%</class|package>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{Late package-only code}
+%
+% The \pkg{notes2bib} code may or may not be activated.
+% \begin{macrocode}
+%<*package>
+\AtBeginDocument{%
+ \@ifpackageloaded{notes2bib}{}{%
+ \acs@niib@create
+ }%
+}
+%</package>
+% \end{macrocode}
+%
+%\subsection{Moving citations with \pkg{natbib}}
+%
+% The code for moving citations is created as a separate package, as
+% the code needed is the same in both cases.
+% \begin{macrocode}
+%<*natmove>
+\ProvidesPackage{natmove}
+ [2010/01/15 v1.1a Automatic citation moving with natbib]
+\RequirePackage{natbib}
+% \end{macrocode}
+%
+%\begin{macro}{\nmv@ifmtarg}
+%\begin{macro}{\nmv@xifmtarg}
+% To keep down dependence on other packages, the very short code block
+% from \pkg{ifmtarg} is copied here with an internal name.
+% \begin{macrocode}
+\newcommand*\nmv@ifmtarg{}
+\newcommand*\nmv@xifmtarg{}
+\begingroup
+ \catcode`\Q 3\relax
+ \long\gdef\nmv@ifmtarg#1{%
+ \nmv@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil
+ }
+ \long\gdef\nmv@xifmtarg#1#2Q#3#4#5\@nil{#4}
+\endgroup
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifnmv@cite}
+% A flag is need to watch whether \cs{cite} or another macro is in use.
+% \begin{macrocode}
+\newif\ifnmv@cite
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\nmv@citex}
+% Using the flag, either the new internal macro, or the \pkg{natbib}
+% original, can be called.
+% \begin{macrocode}
+\newcommand*\nmv@citex{%
+ \ifnmv@cite
+ \expandafter\nmv@citex@moving
+ \else
+ \expandafter\nmv@citex@nat
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\nmv@after}
+% Later, the argument for \cs{cite} will need to be saved.
+% \begin{macrocode}
+\newcommand*\nmv@after{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\nmv@citex@moving}
+% The new version of \cs{@citex} is needed that looks ahead of the
+% citation using \cs{futurelet}. There are three arguments to
+% \cs{@citex} when using \pkg{natbib}. Other than that, the trick
+% used here is similar to that in \pkg{cite}.
+% \begin{macrocode}
+\newcommand*\nmv@citex@moving{}
+\def\nmv@citex@moving[#1][#2]#3{%
+ \leavevmode
+ \skip@\lastskip\relax
+ \unskip
+ \begingroup
+ \def\nmv@after{\nmv@citex@nat[#1][#2]{#3}}%
+ \global\nmv@citefalse
+ \nmv@citex@get@next\relax
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\nmv@citex@end}
+% To get things right at the end.
+% \begin{macrocode}
+\newcommand*\nmv@citex@end{%
+ \nmv@after
+ \endgroup
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\nmv@citex@get@next}
+%\begin{macro}{\nmv@citex@next}
+% The next token on the input stack is saved into
+% \cs{nmv@citex@next}, after gobbling up one token.
+% \begin{macrocode}
+\newcommand*\nmv@citex@get@next[1]{%
+ \futurelet\nmv@citex@next\nmv@citex@punct
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\nmv@citex@punct}
+%\begin{macro}{\nmv@citex@punct@undouble}
+%\begin{macro}{\nmv@citex@loop}
+% The working macro for moving the punctuation. This is very much
+% like \cs{@citey} in the \pkg{cite} package. The initial assumption
+% is that the loop will terminate, and so the recursion call will
+% simply do the finalisation.
+% \begin{macrocode}
+\newcommand*\nmv@citex@punct{%
+ \let\nmv@citex@loop\nmv@citex@end
+ \ifx\nmv@citex@next.\relax
+ \ifnum\spacefactor<\nmv@citex@sfac\else
+ \expandafter\expandafter\expandafter\nmv@citex@punct@undouble
+ \fi
+ \fi
+ \expandafter\nmv@citex@punct@aux\natmovechars\@nil
+ \nmv@citex@loop
+}
+\newcommand*\nmv@citex@punct@undouble{%
+ \let\nmv@citex@next\relax
+ \let\nmv@citex@loop\nmv@citex@get@next
+}
+\newcommand*\nmv@citex@loop{}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\nmv@citex@punct@aux}
+% The final part of the punctuation moving system.
+% \begin{macrocode}
+\newcommand*\nmv@citex@punct@aux[1]{%
+ \ifx\nmv@citex@next#1\@empty
+ #1%
+ \let\nmv@citex@loop\nmv@citex@get@next
+ \fi
+ \ifx#1\@nil\else
+ \expandafter\nmv@citex@punct@aux
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\nmv@citex@sfac}
+% The value of the spacing factor after a full stop is used to signal
+% doubled punctuation. For French spacing, a bit of patching is
+% needed.
+% \begin{macrocode}
+\mathchardef\nmv@citex@sfac3000\relax
+\expandafter\def\expandafter\frenchspacing\expandafter{%
+ \frenchspacing
+ \mathchardef\nmv@citex@sfac1001\relax
+ \sfcode`\.\nmv@citex@sfac
+ \sfcode`\?\nmv@citex@sfac
+ \sfcode`\!\nmv@citex@sfac
+}
+\ifnum\sfcode`\.=\@m
+ \frenchspacing
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\nmv@citex@nat}
+%\begin{macro}{\nmv@activate}
+%\begin{macro}{\cite}
+% The swap has to be done at the beginning of the document. The
+% internal flag from \pkg{natbib} is used, but under the
+% circumstances we should be safe. \cs{cite} is also patched to make
+% the system active.
+% \begin{macrocode}
+\newcommand*\nmv@citex@nat{}
+\newcommand*\nmv@activate{%
+ \let\nmv@citex@nat\@citex
+ \let\@citex\nmv@citex
+ \let\nmv@cite\cite
+ \renewcommand*{\cite}[2][]{%
+ \nmv@ifmtarg{##1}{%
+ \nmv@citetrue
+ \nmv@cite{##2}%
+ }{%
+ \nmv@citefalse
+ \nmv@cite[##1]{##2}}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\nmv@natbib@detect}
+% So that \pkg{natbib} options can be set without worrying about load
+% order, \pkg{natmove} doesn't require \pkg{natbib}. So a test is needed
+% to see if it is actually loaded. This is done as a macro so that the
+% effect can be changed by \pkg{achemso}.
+% \begin{macrocode}
+\newcommand*\nmv@natbib@detect{%
+ \@ifpackageloaded{natbib}{%
+ \ifNAT@super
+ \expandafter\nmv@activate
+ \fi
+ }{%
+ \PackageInfo{natmove}{%
+ The natbib package is not loaded.\MessageBreak
+ Loading natmove will do nothing
+ }%
+ }%
+}
+\AtBeginDocument{\nmv@natbib@detect}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\natmovechars}
+% A user macro is needed for moving characters.
+% \begin{macrocode}
+\newcommand*\natmovechars{.,;:}
+%</natmove>
+% \end{macrocode}
+%\end{macro}
+%
+%\subsection{The configuration files}
+%
+% The configuration files for different journals are not very complex.
+% Keeping everything separate simply helps with maintenance.
+%
+% \begin{macrocode}
+%<*achre4>
+\ProvidesFile{achemso-achre4.cfg}
+ [2019-02-14 v3.12a achemso configuration: Acc. Chem. Res.]
+\setkeys{acs}{biblabel = plain}
+\def\acs@type@list{article,suppinfo}
+\def\abstractname{Conspectus}
+%</achre4>
+%<*aaembp>
+\ProvidesFile{achemso-aaembp.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Appl. Electron. Mater.]
+\def\acs@type@list{article,letter,suppinfo}
+\setkeys{acs}{keywords = true}
+%</aaembp>
+%<*aaemcq>
+\ProvidesFile{achemso-aaemcq.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Appl. Energy Mater.]
+\def\acs@type@list{article,letter,suppinfo}
+\setkeys{acs}{keywords = true}
+%</aaemcq>
+%<*aamick>
+\ProvidesFile{achemso-aamick.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Appl. Mater. Interfaces]
+\def\acs@type@list{article,letter,suppinfo}
+\setkeys{acs}{keywords = true}
+%</aamick>
+%<*aanmf6>
+\ProvidesFile{achemso-aanmf6.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Appl. Nano Mater.]
+\def\acs@type@list{article,letter,suppinfo}
+\setkeys{acs}{keywords = true}
+%</aanmf6>
+%<*aapmcd>
+\ProvidesFile{achemso-aapmcd.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Appl. Polym. Mater.]
+\def\acs@type@list{article,letter,suppinfo}
+\setkeys{acs}{keywords = true}
+%</aapmcd>
+%<*abseba>
+\ProvidesFile{achemso-abseba.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Biomater. Sci. Eng.]
+\setkeys{acs}{keywords = true}
+\def\acs@type@list{article,review,suppinfo}
+%</abseba>
+%<*accacs>
+\ProvidesFile{achemso-accacs.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Catal.]
+\setkeys{acs}{keywords = true}
+\def\acs@type@list{article,letter,perspective,review,viewpoints,suppinfo}
+\SectionNumbersOff
+%</accacs>
+%<*acscii>
+\ProvidesFile{achemso-acscii.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Central Sci.]
+\def\acs@type@list{article,review,suppinfo}
+\setkeys{acs}{doi = true}
+\SectionNumbersOff
+%</acscii>
+%<*acbcct>
+\ProvidesFile{achemso-acbcct.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Chem. Biol.]
+\setkeys{acs}{
+ biblabel = fullstop,
+ biochem = true,
+ super = false
+}
+\def\acs@type@list{article,letter,review,suppinfo}
+\SectionNumbersOff
+%</acbcct>
+%<*acncdm>
+\ProvidesFile{achemso-acncdm.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Chem. Neurosci.]
+\def\acs@type@list{article,review,letter,suppinfo,viewpoint}
+\setkeys{acs}{
+ biblabel = fullstop,
+ biochem = true,
+ keywords = true,
+ super = false
+}
+%</acncdm>
+%<*acsccc>
+\ProvidesFile{achemso-acsccc.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Combinatorial Sci.]
+\def\acs@type@list{article,letter,review,perspective,account,note,suppinfo}
+\setkeys{acs}{keywords = true}
+\SectionNumbersOff
+%</acsccc>
+%<*aesccq>
+\ProvidesFile{achemso-aesccq.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Earth Space Chem.]
+\def\acs@type@list{article,suppinfo}
+\setkeys{acs}{keywords = true}
+%</aesccq>
+%<*aelccp>
+\ProvidesFile{achemso-aelccp.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Energy Lett.]
+\def\acs@type@list{letter,perspective,review,viewpoint,focus}
+\SectionsOff
+%</aelccp>
+%<*ascefj>
+\ProvidesFile{achemso-ascefj.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Infect. Dis.]
+\def\acs@type@list{article,letter,perspective,review,viewpoint,suppinfo}
+\setkeys{acs}{keywords = true}
+\SectionsOff
+%</ascefj>
+%<*amlccd>
+\ProvidesFile{achemso-amlccd.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Macro Lett.]
+\def\acs@type@list{letter,suppinfo}
+\SectionsOff
+\setlength{\acs@tocentry@height}{8 cm}
+\setlength{\acs@tocentry@width}{4 cm}
+%</amlccd>
+% \changes{v3.12a}{2019-02-14}{New \texttt{amlcef} configuration}
+%<*amlcef>
+\ProvidesFile{achemso-amlcef.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Mater. Lett.]
+\def\acs@type@list{letter,perspective,review,viewpoint,focus}
+\SectionsOff
+%</amlcef>
+%<*amclct>
+\ProvidesFile{achemso-amclct.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Med. Chem. Lett.]
+\def\acs@type@list{article,letter,perspective,suppinfo}
+\SectionNumbersOff
+%</amclct>
+% \changes{v3.8n}{2015/01/13}{\emph{ACS Nano} want abbreviations}
+% \changes{v3.11}{2018/04/02}{Change \emph{ACS Nano} truncation}
+%<*ancac3>
+\ProvidesFile{achemso-ancac3.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Nano]
+\setkeys{acs}{
+ abbreviations = true,
+ biblabel = fullstop,
+ etalmode = truncate,
+ maxauthors = 20,
+ keywords = true
+}
+\def\acs@type@list{article,perspective,suppinfo}
+\newcommand*{\latin}[1]{\emph{#1}}
+\SectionNumbersOff
+%</ancac3>
+%<*acsodf>
+\ProvidesFile{achemso-acsodf.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Omega.]
+\def\acs@type@list{article}
+%</acsodf>
+%<*apchd5>
+\ProvidesFile{achemso-apchd5.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Photon.]
+\def\acs@type@list{article,letter,perspective,review,suppinfo}
+\setkeys{acs}{keywords = true}
+\ifx\acs@manuscript\acs@manuscript@letter
+ \SectionNumbersOff
+\fi
+%</apchd5>
+%<*aidcbc>
+\ProvidesFile{achemso-aidcbc.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Sensors]
+\def\acs@type@list{article,letter,perspective,review,suppinfo}
+\setkeys{acs}{keywords = true}
+\SectionNumbersOff
+%</aidcbc>
+%<*ascecg>
+\ProvidesFile{achemso-ascecg.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Sustainable Chem Eng.]
+\setkeys{acs}{
+ biblabel = fullstop,
+ keywords = true
+}
+\SectionNumbersOff
+\def\acs@type@list{article,feature,letter,perspective,review,suppinfo}
+%</ascecg>
+%<*asbcd6>
+\ProvidesFile{achemso-asbcd6.cfg}
+ [2019-02-14 v3.12a achemso configuration: ACS Synth. Biol.]
+\setkeys{acs}{
+ abbreviations = true,
+ biblabel = fullstop,
+ biochem = true,
+ keywords = true,
+ super = false
+}
+\def\acs@type@list{article,letter,note,tutorial,review,suppinfo}
+%</asbcd6>
+%<*ancham>
+\ProvidesFile{achemso-ancham.cfg}
+ [2019-02-14 v3.12a achemso configuration: Anal. Chem.]
+\def\acs@type@list{article,note,suppinfo}
+\SectionNumbersOff
+%</ancham>
+%<*bichaw>
+\ProvidesFile{achemso-bichaw.cfg}
+ [2019-02-14 v3.12a achemso configuration: Biochemistry]
+\setkeys{acs}{
+ abbreviations = true,
+ biblabel = brackets,
+ biochem = true,
+}
+\SectionNumbersOff
+\def\acs@maketitle@extras@hook{%
+ \par
+ \acs@title@short@print
+}
+\g@addto@macro{\maketitle}{\newpage}
+% \end{macrocode}
+%\begin{macro}{\acs@author@fnsymbol}
+% Some changes to do with footnotes: symbols are different and symbol
+% number one can only be used for the title.
+% \begin{macrocode}
+\def\acs@author@fnsymbol#1{%
+ \ensuremath{%
+ \ifcase #1 *\or
+ \dagger\or
+ \ddagger\or
+ \S\or
+ \parallel\or
+ \perp\or
+ \P\or
+ \|\or
+ \bot\or
+ \#\or
+ @\or
+ \triangle\or
+ \nabla\else
+ #1%
+ \fi
+ }%
+}
+\def\@maketitle@title@hook{%
+ \ifnum\acs@footnote@cnt>\@ne
+ \else
+ \global\acs@footnote@cnt\@ne
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+%</bichaw>
+%<*bcches>
+\ProvidesFile{achemso-bcches.cfg}
+ [2019-02-14 v3.12a achemso configuration: Bioconjugate Chem.]
+\setkeys{acs}{
+ biochem = true,
+ super = false
+}
+\SectionNumbersOff
+%</bcches>
+%<*bomaf6>
+\ProvidesFile{achemso-bomaf6.cfg}
+ [2019-02-14 v3.12a achemso configuration: Biomacromolecules]
+\def\acs@type@list{article,comment,communication,note,review,suppinfo}
+\SectionNumbersOff
+\AtEndOfClass{\SectionsOn}
+%</bomaf6>
+%<*crtoec>
+\ProvidesFile{achemso-crtoec.cfg}
+ [2019-02-14 v3.12a achemso configuration: Chem. Res. Toxicol.]
+\setkeys{acs}{
+ abbreviations = true,
+ biochem = true,
+ keywords = true
+}
+\def\acs@maketitle@extras@hook{%
+ \par
+ \acs@title@short@print
+}
+\def\acs@type@list{%
+ article,perspective,profile,review,suppinfo%
+}
+\SectionNumbersOff
+%</crtoec>
+%<*chreay>
+\ProvidesFile{achemso-chreay.cfg}
+ [2019-02-14 v3.12a achemso configuration: Chem. Rev.]
+\def\acs@type@default{review}
+\def\acs@type@list{review}
+% \end{macrocode}
+% The references section is numbered in \emph{Chem.\ Rev.}
+% \begin{macrocode}
+\def\bibsection{\acs@section{\refname}}
+%</chreay>
+%<*cmatex>
+% \begin{macrocode}
+\ProvidesFile{achemso-cmatex.cfg}
+ [2019-02-14 v3.12a achemso configuration: Chem. Mater.]
+\setkeys{acs}{keywords = true}
+\SectionNumbersOff
+\ifx\acs@manuscript\acs@manuscript@communication
+ \AbstractOff
+ \SectionsOff
+\fi
+%</cmatex>
+%<*cgdefu>
+\ProvidesFile{achemso-cgdefu.cfg}
+ [2019-02-14 v3.12a achemso configuration: Cryst. Growth Des.]
+\def\acs@type@list{%
+ article,communication,perspective,suppinfo%
+}
+\SectionNumbersOff
+\ifx\acs@manuscript\acs@manuscript@communication
+ \SectionsOff
+\fi
+\setlength{\acs@tocentry@height}{8.9 cm}
+\setlength{\acs@tocentry@width}{4.6 cm}
+%</cgdefu>
+%<*enfuem>
+\ProvidesFile{achemso-enfuem.cfg}
+ [2019-02-14 v3.12a achemso configuration: Energy Fuels]
+\def\acs@type@list{article,review,suppinfo}
+\SectionNumbersOff
+%</enfuem>
+%<*esthag>
+\ProvidesFile{achemso-esthag.cfg}
+ [2019-02-14 v3.12a achemso configuration: Environ. Sci. Technol.]
+\def\acs@type@list{article,suppinfo}
+\SectionNumbersOff
+%</esthag>
+%<*estlcu>
+\ProvidesFile{achemso-estlcu.cfg}
+ [2019-02-14 v3.12a achemso configuration: Environ. Sci. Technol. Lett.]
+\def\acs@type@list{letter,suppinfo}
+\SectionNumbersOff
+%</estlcu>
+% \changes{v3.8m}{2014/11/24}{Fixes for \emph{Ind.\ Eng.\ Chem.\ Res.}\ style}
+%<*iecred>
+\ProvidesFile{achemso-iecred.cfg}
+ [2019-02-14 v3.12a achemso configuration: Ind. Eng. Chem. Res.]
+\setkeys{acs}{biblabel = brackets}
+\SectionNumbersOff
+%</iecred>
+%<*inoraj>
+\ProvidesFile{achemso-inoraj.cfg}
+ [2019-02-14 v3.12a achemso configuration: Inorg. Chem.]
+\SectionNumbersOff
+\ifx\acs@manuscript\acs@manuscript@communication
+ \AbstractOff
+ \SectionsOff
+\fi
+\setkeys{acs}{doi = true}
+%</inoraj>
+%<*jafcau>
+\ProvidesFile{achemso-jafcau.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Agric. Food Chem.]
+\setkeys{acs}{keywords = true}
+\def\acs@type@list{article,suppinfo}
+\SectionNumbersOff
+%</jafcau>
+%<*jceda8>
+\ProvidesFile{achemso-jceda8.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Chem. Ed.]
+\setkeys{acs}{keywords = true}
+\SectionNumbersOff
+\def\acs@type@list{article,suppinfo}
+\SectionNumbersOff
+%</jceda8>
+%<*jceaax>
+\ProvidesFile{achemso-jceaax.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Chem. Eng. Data]
+\def\acs@type@list{article,suppinfo}
+\def\refname{Literature Cited}
+\SectionNumbersOff
+%</jceaax>
+%<*jcisd8>
+\ProvidesFile{achemso-jcisd8.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Chem. Inf. Model.]
+\def\acs@type@list{article,suppinfo}
+\SectionNumbersOff
+%</jcisd8>
+%<*jctcce>
+\ProvidesFile{achemso-jctcce.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Chem. Theory Comput.]
+\def\acs@type@list{article,suppinfo}
+\setkeys{acs}{maxauthors = 0}
+%</jctcce>
+%<*jmcmar>
+\ProvidesFile{achemso-jmcmar.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Med. Chem.]
+\def\acs@type@list{article,letter,perspective,suppinfo}
+\SectionNumbersOff
+\setlength{\acs@tocentry@height}{5.5cm}
+\setlength{\acs@tocentry@width}{21cm}
+%</jmcmar>
+%<*jnprdf>
+\ProvidesFile{achemso-jnprdf.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Nat. Prod.]
+\renewcommand*{\abstractname}{ABSTRACT}
+\renewcommand*{\acknowledgementname}{ACKNOWLEDGEMENT}
+\renewcommand*{\suppinfoname}{ASSOCIATED CONTENT}
+\SectionNumbersOff
+\renewcommand*{\acs@abstract}{%
+ \quotation
+ \textbf{\abstractname :}%
+}
+\AbstractOn
+\ifx\acs@manuscript\acs@manuscript@communication
+ \AbstractOff
+ \SectionsOff
+\fi
+\def\refname{REFERENCES}
+\captionsetup{
+ labelfont = bf,
+ labelsep = period
+}
+%</jnprdf>
+%<*joceah>
+\ProvidesFile{achemso-joceah.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Org. Chem.]
+\ifx\acs@manuscript\acs@manuscript@communication
+ \AbstractOff
+ \SectionsOff
+\fi
+\floatstyle{plaintop}
+\restylefloat{scheme}
+\floatstyle{plain}
+\renewcommand*\acs@type@list{article,communication,note,perspective,review,suppinfo}
+%</joceah>
+% \end{macrocode}
+% \changes{v3.8n}{2015/01/13}{Drop use of keywords for \emph{J.~Phys.\ Chem.}\
+% A, B and C}
+% \begin{macrocode}
+%<*jpcafh>
+\ProvidesFile{achemso-jpcafh.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Phys. Chem. A]
+\def\acs@type@list{article,suppinfo}
+\setkeys{acs}{
+ etalmode = truncate,
+ maxauthors = 10
+}
+\SectionNumbersOff
+\captionsetup[table]{labelfont=bf,textfont=bf}
+% \end{macrocode}
+% Title
+% \begin{macrocode}
+\g@addto@macro{\maketitle}{\newpage}
+%</jpcafh>
+%<*jpcbfk>
+\ProvidesFile{achemso-jpcbfk.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Phys. Chem. B]
+\def\acs@type@list{article,suppinfo}
+\setkeys{acs}{
+ etalmode = truncate,
+ maxauthors = 10
+}
+\SectionNumbersOff
+\captionsetup[table]{labelfont=bf,textfont=bf}
+\g@addto@macro{\maketitle}{\newpage}
+%</jpcbfk>
+%<*jpccck>
+\ProvidesFile{achemso-jpccck.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Phys. Chem. C]
+\def\acs@type@list{article,suppinfo}
+\setkeys{acs}{
+ etalmode = truncate,
+ maxauthors = 10
+}
+\SectionNumbersOff
+\captionsetup[table]{labelfont=bf,textfont=bf}
+\g@addto@macro{\maketitle}{\newpage}
+%</jpccck>
+% \end{macrocode}
+% \changes{v3.8m}{2014/08/24}{\emph{J.~Phys.\ Chem.\ Lett.}\ uses a
+% non-standard size for the TOC graphic}
+% \begin{macrocode}
+%<*jpclcd>
+\ProvidesFile{achemso-jpclcd.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Phys. Chem. Lett.]
+\setkeys{acs}{
+ etalmode = truncate,
+ maxauthors = 10
+}
+\def\acs@type@default{letter}
+\def\acs@type@list{letter}
+\SectionNumbersOff
+\captionsetup[table]{labelfont=bf,textfont=bf}
+\g@addto@macro{\maketitle}{\newpage}
+\renewcommand{\acs@tocentry@print}[1]{%
+ \gdef\acs@tocentry@text{#1}%
+}
+\renewcommand*{\acs@abstract@extras}{%
+ \begingroup
+ \acs@tocentry@print@aux
+ \endgroup
+ \acs@keywords@print
+ \newpage
+}
+\setlength\acs@tocentry@height{2in}
+\setlength\acs@tocentry@width{2in}
+%</jpclcd>
+%<*jprobs>
+\ProvidesFile{achemso-jprobs.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Proteome Res.]
+\setkeys{acs}{keywords = true}
+\def\acs@type@list{article,review,suppinfo}
+\SectionNumbersOff
+%</jprobs>
+% \end{macrocode}
+% \changes{v3.12a}{2019-02-14}{\emph{J.~Am.\ Chem.\ Soc.}\ now requires titles}
+% The \emph{J.~Am.\ Chem.\ Soc.}~configuration is rather more
+% complicated as there is the need to construct a ``galley-like''
+% layout for communications.
+% \begin{macrocode}
+%<*jacsat>
+\ProvidesFile{achemso-jacsat.cfg}
+ [2019-02-14 v3.12a achemso configuration: J. Am. Chem. Soc.]
+\SectionNumbersOff
+\ifx\acs@manuscript\acs@manuscript@communication\else
+ \expandafter\endinput
+\fi
+\setkeys{acs}{articletitle = true}
+% \end{macrocode}
+% Everything from here onward applies only to communications. Some
+% adjustments are now made using the existing tools.
+% \begin{macrocode}
+\setkeys{acs}{
+ email = true,
+ layout = twocolumn
+}
+\SectionsOff
+\acs@layout@nine
+% \end{macrocode}
+%
+%\begin{environment}{abstract}
+% The abstract appears at the start of the document, with lines around
+% it.s
+% \begin{macrocode}
+\renewenvironment{abstract}{%
+ \hrule
+ \vspace{2 mm}%
+ \sffamily
+ \noindent
+ \emph{\textbf{Abstract:}}%
+}{%
+ \vspace{2 mm}%
+ \hrule
+ \vspace{6 mm}%
+}
+% \end{macrocode}
+%\end{environment}
+%
+%\begin{macro}{\acksize}
+%\begin{macro}{\affilsize}
+%\begin{macro}{\authorsize}
+%\begin{macro}{\emailsize}
+%\begin{macro}{\capsize}
+%\begin{macro}{\refsize}
+%\begin{macro}{\suppsize}
+%\begin{macro}{\titlesize}
+% To keep things logical, the size macros are given names related to
+% their function. Some of these are new, some are defined in the class.
+% \begin{macrocode}
+\def\affilsize{%
+ \@setfontsize\affilsize\@ixpt\@xpt
+}
+\def\acksize{%
+ \@setfontsize\acksize\@ixpt\@xipt
+}
+\def\authorsize{%
+ \@setfontsize\authorsize{10.5}{12.5}%
+}
+\newcommand*\capsize{%
+ \@setfontsize\capsize\@viiipt\@ixpt
+}
+\def\emailsize{%
+ \@setfontsize\emailsize\@viiipt{15}%
+}
+\newcommand*\refsize{%
+ \@setfontsize\refsize{7.5}{7.5}%
+}
+\def\suppsize{%
+ \@setfontsize\suppsize{8.5}{10.5}%
+}
+\def\titlesize{%
+ \@setfontsize\titlesize\@xiipt{13}%
+}
+\let\footnotesize\refsize
+\let\captionfont\capsize
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\emailfont}
+% A slight font change.
+% \begin{macrocode}
+\def\emailfont{\sffamily}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ps@plain}
+%\begin{macro}{\ps@jacs}
+% The header styles are done the hard way, to keep down the number of
+% packages loaded.
+% \begin{macrocode}
+\def\ps@plain{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty
+ \def\@oddfoot{%
+ \reset@font
+ \sffamily
+ \textbf{\thepage}%
+ \hfil
+ }%
+ \let\@evenhead\@empty
+ \let\@evenfoot\@oddfoot
+}
+\def\ps@acs{%
+ \def\@oddfoot{%
+ \reset@font
+ \sffamily
+ \textbf{\thepage}%
+ \hfil
+ }%
+ \def\@evenfoot{%
+ \reset@font
+ \hfil
+ \sffamily
+ \textbf{\thepage}%
+ }%
+ \def\@oddhead{}%
+ \let\@evenhead\@oddhead
+}
+\pagestyle{acs}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@space@pre@title}
+%\begin{macro}{\acs@space@post@title}
+%\begin{macro}{\acs@space@post@author}
+%\begin{macro}{\acs@space@post@address}
+%\begin{macro}{\acs@space@post@email}
+% Length adjustments for the title.
+% \begin{macrocode}
+\setlength\acs@space@pre@title{16mm}
+\setlength\acs@space@post@title{0mm}
+\setlength\acs@space@post@author{0mm}
+\setlength\acs@space@post@address{0mm}
+\setlength\acs@space@post@email{-1mm}
+\setlength\acs@maketitle@width{152.4mm}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\acs@contact@details}
+% Contact details are different here.
+% \begin{macrocode}
+\def\acs@contact@details{%
+ Received \today; E-mail: \acs@email@list
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acs@maketitle@extras}
+% No keywords or abbreviations for \emph{J.~Am.\ Chem.\ Soc.}.
+% \begin{macrocode}
+\let\acs@maketitle@extras\relax
+% \end{macrocode}
+%\end{macro}
+% Getting the floats correct is a difficult task ``by hand''; using
+% the \pkg{caption} package makes this a lot easier.
+% \begin{macrocode}
+\floatstyle{plaintop}
+\restylefloat{scheme}
+\floatstyle{plain}
+\DeclareCaptionLabelSeparator{perquad}{.\quad}
+\captionsetup{
+ singlelinecheck = off,
+ labelfont = {bf,it,sf},
+ textfont = sf,
+ labelsep = perquad
+}
+\captionsetup[figure]{textfont=rm}
+% \end{macrocode}
+%\begin{macro}{\acs@table}
+%\begin{macro}{\table}
+% A patch or \cs{table}.
+% \begin{macrocode}
+\newcommand*\acs@table{}
+\let\acs@table\table
+\def\table{%
+ \capsize
+ \acs@table
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% The bibliography has to be adjusted.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \def\bibsection{%
+ \@startsection
+ {section}
+ {1}
+ {\z@}{\z@}{2.5mm}%
+ {\normalfont\acksize\bfseries}
+ {\hrule\nobreak\vspace{1.2mm}\noindent\refname}%
+ }%
+ \let\bibfont\refsize
+ \setlength{\bibhang}{0.61cm}%
+ \setlength{\bibsep}{0mm}%
+}
+%</jacsat>
+%<*langd5>
+\ProvidesFile{achemso-langd5.cfg}
+ [2019-02-14 v3.12a achemso configuration: Langmuir]
+\def\acs@type@list{article,letter,suppinfo}
+\SectionNumbersOff
+%</langd5>
+%<*mamobx>
+\ProvidesFile{achemso-mamobx.cfg}
+ [2019-02-14 v3.12a achemso configuration: Macromolecules]
+\SectionNumbersOff
+\setkeys{acs}{doi = true}
+%</mamobx>
+%<*mpohbp>
+\ProvidesFile{achemso-mpohbp.cfg}
+ [2019-02-14 v3.12a achemso configuration: Mol. Pharm.]
+\setkeys{acs}{keywords = true}
+\def\acs@type@list{article,suppinfo}
+\SectionNumbersOff
+%</mpohbp>
+%<*nalefd>
+\ProvidesFile{achemso-nalefd.cfg}
+ [2019-02-14 v3.12a achemso configuration: Nano Lett.]
+\setkeys{acs}{keywords = true}
+\def\acs@type@default{letter}
+\def\acs@type@list{letter}
+\SectionNumbersOff
+%</nalefd>
+%<*orlef7>
+\ProvidesFile{achemso-orlef7.cfg}
+ [2019-02-14 v3.12a achemso configuration: Org. Lett.]
+\def\acs@type@default{communication}
+\def\acs@type@list{communication}
+\SectionNumbersOff
+\setkeys{acs}{layout = twocolumn}
+\RequirePackage{xcolor}
+\definecolor{orglett}{RGB}{128,0,0}
+%</orlef7>
+%<*oprdfk>
+\ProvidesFile{achemso-oprdfk.cfg}
+ [2019-02-14 v3.12a achemso configuration: Org. Proc. Res. Dev.]
+\def\acs@type@list{article,highlight,review,suppinfo}
+\SectionNumbersOff
+%</oprdfk>
+%<*orgnd7>
+\ProvidesFile{achemso-orgnd7.cfg}
+ [2019-02-14 v3.12a achemso configuration: Organometallics]
+\SectionNumbersOff
+%</orgnd7>
+% \end{macrocode}
+%
+%\Finale
+%
+%\iffalse
+%<*bst>
+% Database entries
+
+ENTRY
+ {
+ address
+ author
+ booktitle
+ chapter
+ ctrl-article-title
+ ctrl-chapter-title
+ ctrl-doi
+ ctrl-etal-firstonly
+ ctrl-etal-number
+ ctrl-use-title
+ doi
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ maintitle
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ version
+ volume
+ year
+ }
+ { }
+ {
+ label
+ short.names
+ }
+
+% Generic logic functions, from the core BibTeX styles
+
+FUNCTION { and } {
+ { }
+ {
+ pop$
+ #0
+ }
+ if$
+}
+
+FUNCTION { not } {
+ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION { or } {
+ {
+ pop$
+ #1
+ }
+ { }
+ if$
+}
+
+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
+}
+
+FUNCTION { chr.to.value } {
+ chr.to.int$ #48 -
+ duplicate$
+ #0 <
+ { chr.to.value.error }
+ {
+ duplicate$
+ #9 >
+ { chr.to.value.error }
+ { }
+ if$
+ }
+ if$
+}
+
+STRINGS {
+ extract.input.str
+ extract.output.str
+}
+
+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$ }
+ while$
+ "" =
+}
+
+FUNCTION { extract.number } {
+ duplicate$
+ 'extract.input.str :=
+ "" 'extract.output.str :=
+ { extract.input.str empty$ not }
+ {
+ extract.input.str #1 #1 substring$
+ extract.input.str #2 global.max$ substring$ 'extract.input.str :=
+ duplicate$
+ is.a.number
+ { extract.output.str swap$ * 'extract.output.str := }
+ {
+ pop$
+ "" 'extract.input.str :=
+ }
+ if$
+ }
+ while$
+ extract.output.str empty$
+ { }
+ {
+ pop$
+ extract.output.str
+ }
+ if$
+}
+
+FUNCTION { field.or.null } {
+ duplicate$
+ empty$
+ {
+ pop$
+ ""
+ }
+ { }
+ if$
+}
+
+INTEGERS {
+ multiply.a.int
+ multiply.b.int
+}
+
+FUNCTION { multiply } {
+ 'multiply.a.int :=
+ 'multiply.b.int :=
+ multiply.b.int #0 <
+ {
+ #-1
+ #0 multiply.b.int - 'multiply.b.int :=
+ }
+ { #1 }
+ if$
+ #0
+ { multiply.b.int #0 > }
+ {
+ multiply.a.int +
+ multiply.b.int #1 - 'multiply.b.int :=
+ }
+ while$
+ swap$
+ { }
+ { #0 swap$ - }
+ if$
+}
+
+INTEGERS { str.conversion.int }
+
+FUNCTION { str.to.int.aux.ii } {
+ {
+ duplicate$
+ empty$ not
+ }
+ {
+ swap$
+ #10 multiply 'str.conversion.int :=
+ duplicate$
+ #1 #1 substring$
+ chr.to.value
+ str.conversion.int +
+ swap$
+ #2 global.max$ substring$
+ }
+ while$
+ pop$
+}
+
+FUNCTION { str.to.int.aux.i } {
+ duplicate$
+ #1 #1 substring$
+ "-" =
+ {
+ #1 swap$
+ #2 global.max$ substring$
+ }
+ {
+ #0 swap$
+ }
+ if$
+ #0
+ swap$
+ str.to.int.aux.ii
+ swap$
+ { #0 swap$ - }
+ { }
+ if$
+}
+
+FUNCTION { str.to.int } {
+ duplicate$
+ empty$
+ {
+ pop$
+ #0
+ }
+ { str.to.int.aux.i }
+ if$
+}
+
+FUNCTION { tie.or.space.connect } {
+ duplicate$
+ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION { yes.no.to.bool } {
+ duplicate$
+ empty$
+ {
+ pop$
+ #0
+ }
+ {
+ "l" change.case$
+ "yes" =
+ { #1 }
+ { #0 }
+ if$
+ }
+ if$
+}
+
+% Functions of formatting
+
+FUNCTION { bold } {
+ duplicate$
+ empty$
+ {
+ pop$
+ ""
+ }
+ { "\textbf{" swap$ * "}" * }
+ if$
+}
+
+FUNCTION { emph } {
+ duplicate$
+ empty$
+ {
+ pop$
+ ""
+ }
+ { "\emph{" swap$ * "}" * }
+ if$
+}
+
+
+FUNCTION { paren } {
+ duplicate$
+ empty$
+ {
+ pop$
+ ""
+ }
+ { "(" swap$ * ")" * }
+ if$
+}
+
+% Functions for punctuation
+
+FUNCTION { add.comma } { ", " * }
+
+FUNCTION { add.colon } { ": " * }
+
+FUNCTION { add.period } { add.period$ " " * }
+
+FUNCTION { add.semicolon } { "; " * }
+
+FUNCTION { add.space } { " " * }
+
+% Bibliography strings: fixed values collected into functions
+
+FUNCTION { bbl.and } { "and" }
+
+FUNCTION { bbl.chapter } { "Chapter" }
+
+FUNCTION { bbl.doi } { "DOI:" }
+
+FUNCTION { bbl.editor } { "Ed." }
+
+FUNCTION { bbl.editors } { "Eds." }
+
+FUNCTION { bbl.edition } { "ed." }
+
+FUNCTION { bbl.etal } { "\latin{et~al.}" }
+
+FUNCTION { bbl.in } { "In" }
+
+FUNCTION { bbl.inpress } { "in press" }
+
+FUNCTION { bbl.msc } { "M.Sc.\ thesis" }
+
+FUNCTION { bbl.page } { "p" }
+
+FUNCTION { bbl.pages } { "pp" }
+
+FUNCTION { bbl.phd } { "Ph.D.\ thesis" }
+
+FUNCTION { bbl.version } { "version" }
+
+FUNCTION { bbl.volume } { "Vol." }
+
+% Functions for number formatting
+
+STRINGS { pages.str }
+
+FUNCTION { hyphen.to.dash } {
+ 'pages.str :=
+ ""
+ { pages.str empty$ not }
+ {
+ pages.str #1 #1 substring$
+ "-" =
+ {
+ "--" *
+ {
+ pages.str #1 #1 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$
+}
+
+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$
+ multiresult.bool
+}
+
+% Functions for calculating the label data needed by natbib
+
+
+INTEGERS {
+ current.name.int
+ names.separate.comma
+ names.separate.semicolon
+ names.separate.comma.bool
+ remaining.names.int
+ total.names.int
+}
+
+STRINGS {
+ current.name.str
+ names.str
+}
+
+FUNCTION { full.format.names } {
+ 'names.str :=
+ #1 'current.name.int :=
+ names.str num.names$ 'remaining.names.int :=
+ { remaining.names.int #0 > }
+ {
+ names.str current.name.int "{vv~}{ll}" format.name$
+ current.name.int #1 >
+ {
+ swap$ add.comma swap$
+ remaining.names.int #1 >
+ { }
+ {
+ duplicate$
+ "others" =
+ { bbl.etal }
+ { bbl.and }
+ if$
+ add.space swap$ *
+ }
+ if$
+ *
+ }
+ { }
+ if$
+ remaining.names.int #1 - 'remaining.names.int :=
+ current.name.int #1 + 'current.name.int :=
+ }
+ while$
+}
+
+FUNCTION { full.author } {
+ author empty$
+ { "" }
+ { author full.format.names }
+ if$
+}
+
+FUNCTION { full.author.editor } {
+ author empty$
+ {
+ editor empty$
+ { "" }
+ { editor full.format.names }
+ if$
+ }
+ { author full.format.names }
+ if$
+}
+
+FUNCTION { full.editor } {
+ editor empty$
+ { "" }
+ { editor full.format.names }
+ if$
+}
+
+FUNCTION { short.format.names } {
+ 'names.str :=
+ names.str #1 "{vv~}{ll}" format.name$
+ names.str num.names$
+ duplicate$
+ #2 >
+ {
+ pop$
+ add.space bbl.etal *
+ }
+ {
+ #2 <
+ { }
+ {
+ names.str #2 "{ff }{vv }{ll}{ jj}" format.name$
+ "others" =
+ { add.space bbl.etal * }
+ {
+ add.space
+ bbl.and add.space
+ *
+ names.str #2 "{vv~}{ll}" format.name$
+ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION { 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$
+ }
+ { author short.format.names }
+ if$
+}
+
+FUNCTION { short.author.key.organization } {
+ author empty$
+ {
+ key empty$
+ {
+ organization empty$
+ { cite$ #1 #3 substring$ }
+ {
+ organization #1 #4 substring$
+ "The " =
+ { organization }
+ { organization #5 global.max$ substring$ }
+ if$
+ #3 text.prefix$
+ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author short.format.names }
+ if$
+}
+
+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$
+}
+
+FUNCTION { calculate.short.names } {
+ type$ "book" =
+ type$ "inbook" =
+ or
+ { short.author.editor.key }
+ {
+ type$ "proceedings" =
+ { short.editor.key.organization }
+ {
+ type$ "manual" =
+ { short.author.key.organization }
+ { short.author.key }
+ if$
+ }
+ if$
+ }
+ if$
+ 'short.names :=
+}
+
+FUNCTION { calculate.names } {
+ calculate.short.names
+ short.names
+ year empty$
+ { "()" }
+ { "(" year * ")" * }
+ if$
+ *
+ 'label :=
+}
+
+% Counting up the number of entries
+
+INTEGERS { entries.int }
+
+FUNCTION { initialize.count.entries } {
+ #0 'entries.int :=
+}
+
+FUNCTION { count.entries } {
+ entries.int #1 + 'entries.int :=
+}
+
+% Start and end of bibliography functions
+
+FUNCTION { begin.bib } {
+ "achemso 2019-02-14 v3.12a" top$
+ preamble$ empty$
+ { }
+ {
+ preamble$ write$
+ newline$
+ }
+ if$
+ "\providecommand{\latin}[1]{#1}" write$
+ newline$
+ "\makeatletter" write$
+ newline$
+ "\providecommand{\doi}" write$
+ newline$
+ " {\begingroup\let\do\@makeother\dospecials" write$
+ newline$
+ " \catcode`\{=1 \catcode`\}=2 \doi@aux}" write$
+ newline$
+ "\providecommand{\doi@aux}[1]{\endgroup\texttt{#1}}" write$
+ newline$
+ "\makeatother" write$
+ newline$
+ "\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 { end.bib } {
+ newline$
+ "\end{mcitethebibliography}" write$
+ newline$
+}
+
+% Functions used for the special "control" entry type, to pass data
+% from LaTeX to BibTeX
+
+INTEGERS {
+ ctrl.article.title.bool
+ ctrl.chapter.title.bool
+ ctrl.doi.bool
+ ctrl.etal.firstonly.bool
+ ctrl.etal.number.int
+}
+
+FUNCTION { initialize.control.values } {
+ #1 'ctrl.article.title.bool :=
+ #0 'ctrl.chapter.title.bool :=
+ #0 'ctrl.doi.bool :=
+ #1 'ctrl.etal.firstonly.bool :=
+ #15 'ctrl.etal.number.int :=
+}
+
+FUNCTION { control } {
+ ctrl-article-title yes.no.to.bool 'ctrl.article.title.bool :=
+ ctrl-chapter-title yes.no.to.bool 'ctrl.chapter.title.bool :=
+ ctrl-doi yes.no.to.bool 'ctrl.doi.bool :=
+ ctrl-etal-firstonly yes.no.to.bool 'ctrl.etal.firstonly.bool :=
+ ctrl-etal-number str.to.int 'ctrl.etal.number.int :=
+ ctrl-use-title empty$
+ 'skip$
+ { ctrl-use-title yes.no.to.bool 'ctrl.article.title.bool := }
+ 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 { initialize.tracker } {
+ #0 'next.punct.comma :=
+ #1 'next.punct.period :=
+ #2 'next.punct.semicolon :=
+ #3 'next.punct.space :=
+}
+
+INTEGERS { next.punct.int }
+
+FUNCTION { output } {
+ swap$
+ duplicate$ empty$
+ { pop$ }
+ {
+ 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$
+ }
+ if$
+ next.punct.comma 'next.punct.int :=
+}
+
+% Functions for each bibliography entry: start and finish
+
+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 :=
+}
+
+INTEGERS { add.period.length.int }
+
+FUNCTION { would.add.period } {
+ duplicate$
+ add.period$
+ text.length$ 'add.period.length.int :=
+ duplicate$
+ text.length$
+ add.period.length.int =
+ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION { 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$
+}
+
+% 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.names.loop } {
+ { remaining.names.int #0 > }
+ {
+ names.str current.name.int "{vv~}{ll,}{~f.}{,~jj}" format.name$
+ duplicate$
+ 'current.name.str :=
+ current.name.int #1 >
+ {
+ duplicate$
+ "others," =
+ {
+ pop$
+ *
+ 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$
+ remaining.names.int #1 - 'remaining.names.int :=
+ current.name.int #1 + 'current.name.int :=
+ }
+ while$
+}
+
+FUNCTION { format.names.all } {
+ total.names.int 'remaining.names.int :=
+ format.names.loop
+}
+
+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 { format.names } {
+ 'names.separate.comma.bool :=
+ 'names.str :=
+ #1 'current.name.int :=
+ names.str num.names$ 'total.names.int :=
+ total.names.int ctrl.etal.number.int >
+ {
+ ctrl.etal.number.int #0 =
+ { format.names.all }
+ { format.names.etal }
+ if$
+ }
+ { format.names.all }
+ if$
+}
+
+% 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 { make.ordinal } {
+ 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$
+ }
+ if$
+ }
+ 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
+}
+
+% 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.editors } {
+ editor empty$
+ { }
+ {
+ editor names.separate.comma format.names
+ add.comma
+ editor num.names$ #1 >
+ { bbl.editors }
+ { bbl.editor }
+ if$
+ *
+ output
+ next.punct.semicolon 'next.punct.int :=
+ }
+ if$
+}
+
+FUNCTION { format.authors.or.editors } {
+ author empty$
+ { format.editors }
+ { format.authors }
+ if$
+ next.punct.space 'next.punct.int :=
+}
+
+FUNCTION { format.chapter } {
+ chapter empty$
+ { }
+ {
+ bbl.chapter add.space
+ chapter
+ *
+ output
+ }
+ if$
+}
+
+FUNCTION { format.doi } {
+ doi empty$
+ 'skip$
+ {
+ bbl.doi add.space
+ "\doi{" * doi * "}" *
+ output
+ }
+ if$
+}
+
+FUNCTION { format.edition } {
+ edition empty$
+ { }
+ {
+ edition convert.to.ordinal
+ add.space bbl.edition *
+ output
+ }
+ if$
+ next.punct.semicolon 'next.punct.int :=
+}
+
+FUNCTION { format.group.address } {
+ duplicate$
+ empty$
+ { pop$ }
+ {
+ address empty$
+ { }
+ {
+ add.colon
+ address
+ *
+ }
+ if$
+ output
+ }
+ if$
+}
+
+FUNCTION { format.howpublished } {
+ howpublished empty$
+ { }
+ {
+ howpublished
+ output
+ }
+ if$
+}
+
+FUNCTION { format.journal } {
+ journal emph
+ output
+ next.punct.space 'next.punct.int :=
+}
+
+FUNCTION { format.journal.unpub } {
+ journal emph
+ output
+}
+
+FUNCTION { format.note } {
+ note empty$
+ { }
+ {
+ note
+ output
+ }
+ if$
+}
+
+FUNCTION { format.number.series } {
+ series empty$
+ { }
+ {
+ series
+ number empty$
+ { }
+ {
+ add.space
+ number *
+ }
+ if$
+ output
+ next.punct.semicolon 'next.punct.int :=
+ }
+ if$
+}
+
+
+FUNCTION { format.organization } {
+ organization empty$
+ { }
+ {
+ organization paren
+ output
+ next.punct.period 'next.punct.int :=
+ }
+ if$
+}
+
+FUNCTION { format.organization.address } {
+ organization format.group.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$
+ ctrl.doi.bool
+ { format.doi }
+ 'skip$
+ if$
+}
+
+FUNCTION { format.pages.article } {
+ pages empty$
+ { }
+ {
+ pages hyphen.to.dash
+ output
+ }
+ if$
+ ctrl.doi.bool
+ { format.doi }
+ 'skip$
+ if$
+}
+
+FUNCTION { format.publisher.address } {
+ publisher format.group.address
+}
+
+FUNCTION { format.school.address } {
+ school
+ duplicate$
+ empty$
+ { pop$ }
+ {
+ address empty$
+ { }
+ {
+ add.comma
+ address
+ *
+ }
+ if$
+ output
+ }
+ if$
+}
+
+FUNCTION { format.title } {
+ title empty$
+ { }
+ {
+ title
+ output
+ next.punct.period 'next.punct.int :=
+ }
+ if$
+}
+
+FUNCTION { format.title.article } {
+ ctrl.article.title.bool
+ {
+ title empty$
+ { }
+ {
+ title
+ output
+ next.punct.period 'next.punct.int :=
+ }
+ if$
+ }
+ { }
+ if$
+}
+
+FUNCTION { format.title.techreport } {
+ title empty$
+ { }
+ {
+ title emph
+ output
+ next.punct.semicolon 'next.punct.int :=
+ }
+ if$
+}
+
+FUNCTION { format.title.booktitle } {
+ title empty$
+ { }
+ {
+ title
+ output
+ next.punct.period 'next.punct.int :=
+ }
+ if$
+ booktitle empty$
+ { }
+ {
+ booktitle
+ output
+ next.punct.period 'next.punct.int :=
+ }
+ if$
+}
+
+STRINGS {
+ book.title
+ chapter.title
+}
+
+FUNCTION { format.title.booktitle.book } {
+ "" 'chapter.title :=
+ booktitle empty$
+ {
+ "" 'chapter.title :=
+ title 'book.title :=
+ }
+ {
+ ctrl.chapter.title.bool
+ {
+ title empty$
+ 'skip$
+ { title 'chapter.title := }
+ if$
+ }
+ 'skip$
+ if$
+ maintitle empty$
+ { booktitle 'book.title := }
+ { maintitle add.period booktitle * 'book.title := }
+ if$
+ }
+ if$
+ chapter.title empty$
+ { }
+ {
+ chapter.title
+ output
+ next.punct.period 'next.punct.int :=
+ }
+ if$
+ book.title emph
+ chapter.title empty$
+ {
+ author empty$
+ { }
+ {
+ editor empty$
+ { }
+ { bbl.in add.space swap$ * }
+ if$
+ }
+ if$
+ }
+ { bbl.in add.space swap$ * }
+ if$
+ output
+}
+
+FUNCTION { format.type } {
+ type empty$
+ { }
+ {
+ pop$
+ type
+ }
+ if$
+ output
+}
+
+FUNCTION { format.type.number } {
+ type empty$
+ { }
+ {
+ type
+ number empty$
+ { }
+ { number tie.or.space.connect }
+ if$
+ output
+ }
+ if$
+}
+
+FUNCTION { format.url } {
+ url empty$
+ { }
+ {
+ "\url{" url * "}" *
+ output
+ }
+ if$
+}
+
+FUNCTION { format.year } {
+ year empty$
+ { }
+ {
+ year
+ output
+ next.punct.semicolon 'next.punct.int :=
+ }
+ if$
+}
+
+FUNCTION { format.year.article } {
+ year empty$
+ { }
+ {
+%<*bio>
+ year paren
+ output
+ next.punct.space 'next.punct.int :=
+%</bio>
+%<*!bio>
+ year bold
+ output
+%</!bio>
+ }
+ if$
+}
+
+FUNCTION { format.version } {
+ version empty$
+ { }
+ {
+ bbl.version add.space
+ version
+ *
+ output
+ }
+ if$
+}
+
+FUNCTION { format.volume.article } {
+ volume emph
+ output
+}
+
+FUNCTION { format.volume } {
+ volume empty$
+ { }
+ {
+ bbl.volume
+ volume
+ tie.or.space.connect
+ output
+ next.punct.semicolon 'next.punct.int :=
+ }
+ if$
+}
+
+% 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 { book } {
+ begin.bibitem
+ format.authors.or.editors
+ format.title.booktitle.book
+ format.edition
+ author empty$
+ { }
+ { format.editors }
+ if$
+ format.number.series
+ format.publisher.address
+ format.year
+ format.volume
+ format.chapter
+ format.pages
+ format.note
+ end.bibitem
+}
+
+FUNCTION { inbook } { book }
+
+FUNCTION { booklet } {
+ begin.bibitem
+ format.authors
+ format.title
+ format.howpublished
+ format.address
+ format.year
+ format.note
+ end.bibitem
+}
+
+FUNCTION { collection } { book }
+
+FUNCTION { incollection } { book }
+
+FUNCTION { inpress } {
+ begin.bibitem
+ format.authors
+%<*bio>
+ format.year.article
+%</bio>
+ format.journal.unpub
+ doi empty$
+ {
+ bbl.inpress
+ output
+ }
+ {
+%<*!bio>
+ format.year.article
+%</!bio>
+ next.punct.comma 'next.punct.int :=
+ format.doi
+ }
+ if$
+ format.note
+ end.bibitem
+}
+
+FUNCTION { inproceedings } {
+ 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
+ next.punct.comma 'next.punct.int :=
+ format.doi
+ }
+ if$
+ format.note
+ end.bibitem
+}
+
+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
+
+READ
+
+EXECUTE { initialize.control.values }
+
+EXECUTE { initialize.count.entries }
+
+EXECUTE { initialize.name.separator }
+
+EXECUTE { initialize.tracker }
+
+ITERATE { calculate.names }
+
+ITERATE { count.entries }
+
+EXECUTE { begin.bib }
+
+ITERATE { call.type$ }
+
+EXECUTE { end.bib }
+%</bst>
+%\fi
diff --git a/macros/latex/contrib/achemso/achemso.pdf b/macros/latex/contrib/achemso/achemso.pdf
new file mode 100644
index 0000000000..8f2958cb75
--- /dev/null
+++ b/macros/latex/contrib/achemso/achemso.pdf
Binary files differ