% \iffalse meta-comment
%
% Copyright (C) 2007 by
%    Joseph Wright <joseph.wright@morningstar2.co.uk>
%
% Released under the GNU General Public License v2
% See http://www.gnu.org/licenses/gpl.txt
%
% This work consists of the main source file chemstyle.dtx
% and the derived files chemstyle.sty and chemstyle.pdf
%
%<*driver>
\documentclass{ltxdoc}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
%\OnlyDescription
\usepackage[T1]{fontenc}
\usepackage[english,UKenglish]{babel}
\usepackage{mathpazo,booktabs,array,url,graphicx,courier,unitsdef}
\usepackage{upgreek}
\usepackage[scaled=0.95]{helvet}
\usepackage[version=3]{mhchem}
\usepackage[final]{microtype}
\usepackage{\jobname}
\begin{document}
  \DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{481}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \GetFileInfo{\jobname.sty}
%
%\changes{v1.0}{2006/08/06}{Initial release of package}
%
%\DoNotIndex{\@fs@capt,\@fs@cfont,\@fs@iftopcapt,\@fs@mid,\@fs@post}
%\DoNotIndex{\@fs@pre,\@ifclassloaded,\@ifnextchar,\@ifpackageloaded}
%\DoNotIndex{\@undefined,\abovecaptionskip,\addto,\AtBeginDocument}
%\DoNotIndex{\begin,\begingroup,\belowcaptionskip,\bfseries,\bibname}
%\DoNotIndex{\captionsetup,\cm,\color,\csname,\CurrentOption}
%\DoNotIndex{\DeclareCaptionFormat,\DeclareCaptionLabelSeparator}
%\DoNotIndex{\DeclareOption,\DeclareRobustCommand,\def}
%\DoNotIndex{\documentclass,\edef,\else,\emph,\end,\endcsname}
%\DoNotIndex{\endgroup,\ensuremath,\ExecuteOptions,\expandafter}
%\DoNotIndex{\femtogram,\fg,\fi,\figurename,\floatc@plain}
%\DoNotIndex{\floatc@ruled,\floatcontentscentre,\floatplacement}
%\DoNotIndex{\floatstyle,\hertz,\hrule,\iffalse,\iftrue,\ifx,\input}
%\DoNotIndex{\InputIfFileExists,\kern,\labelformat,\languagename}
%\DoNotIndex{\let,\MakeUppercase,\MessageBreak,\NeedsTeXFormat}
%\DoNotIndex{\newcommand,\newfloat,\newif,\newunit,\PackageInfo}
%\DoNotIndex{\PackageWarning,\PassOptionsToPackage,\ProcessOptions}
%\DoNotIndex{\providecommand,\ProvidesFile,\ProvidesPackage,\quad}
%\DoNotIndex{\refname,\relax\renewcommand,\RequirePackage}
%\DoNotIndex{\restylefloat,\rotatebox,\selectlanguage,\space}
%\DoNotIndex{\tablename,\textsc,\textsuperscript,\unitsep}
%\DoNotIndex{\unitsuperscript,\usepackage,\varnothing,\vspace}
%\DoNotIndex{\xspace}
%
% \title{\texttt{chemstyle} --- Writing chemistry with style%
%   \thanks{This file describes version \fileversion, last revised
%           \filedate.}}
% \author{Joseph Wright%
%   \thanks{E-mail: joseph.wright@morningstar2.co.uk}}
% \date{Released \filedate}
%
% \maketitle
%
% \begin{abstract}
%
% The |chemstyle| package provides a ``one-stop shop'' for setting up
% formatting of LaTeX documents following the editorial policies of
% various chemical journals.  It provides a number of handy
% chemistry-related commands, and loads several support packages to
% aid the chemist.
%
% \end{abstract}
%
% \section{Introduction}
%
% The aim of |chemstyle| is to provide a quick method to set up
% various document parameters (such as caption formatting), simply
% by specifying the model journal.  The package has also been
% designed to allow rapid addition of new journal styles.  Each
% style definition is a separate file, and new styles can be added
% very readily. |chemstyle| has grown out of the |rsc| package,
% which had a similar aim but was much more limited (and less
% robustly implemented).  The |chemstyle| package is also
% designed with the use of |biblatex| in mind: the |rsc| package
% is closely bound to traditional BibTeX use.
%
% As a successor to the |rsc| package, |chemstyle| provides a range
% of chemistry-related additional macros.  The set provided here is
% an extended version of those provide by |rsc|.  Everything that
% can be done using the |rsc| LaTeX package is therefore possible
% using the |chemstyle| package.
%
% The formatting system provided by |chemstyle| are intended for
% writing a variety of documents.  Thus the stylistic changes made
% by the package do not seek to reproduce the appearance of printed
% journal articles.  The package aims to be suitable for use in
% preparing drafts of papers, but also for writing reports, theses
% and so on.
%
% \section{Style options for \texttt{chemstyle}}
%
% |chemstyle| should be loaded with a package option specifying which
% journal style to follow.  Currently, |chemstyle| is aware of a the
% styles listed in Table~\ref{styles}.  New styles can be developed
% by creating a new file modelled on the existing definitions;
% |chemstyle| will automatically search for
% correctly-named styles.
% \begin{table}
%   \begin{tabular}{ll}
%     \toprule
%     Option & Journals using this style \\
%     \midrule
%     none &  Not applicable\\
%     angew & \emph{Angew.\ Chem.}, \emph{Chem.\ Eur.\ J.} \\
%     ic & \emph{Inorg.\ Chem.} \\
%     jacs & \emph{J.\ Am.\ Chem.\ Soc.} \\
%     jcp & \emph{J.\ Phys.\ Chem.\ A}, \emph{J.\ Phys.\ Chem.\ B} \\
%     orglett & \emph{Org.~Lett.}\\
%     rsc & \emph{Chem.\ Commun.}, \emph{Org.\ Biomol.\ Chem.} \\
%      & \emph{Dalton Trans.} \\
%     \bottomrule
%   \end{tabular}
%   \caption{Styles provided by \texttt{chemstyle}}\label{styles}
% \end{table}
% The style files provided with |chemstyle| have been derived from
% current practice in the target journals.  It is not always easy to
% pick the correct stylistic settings from (sometimes inconsistent)
% real-world examples.  The package author welcomes feedback on
% the styles provided.
%
% The |none| style is notable as it is not based on a journal.
% Instead this is a minimal style, which provides the additional
% commands without making formatting changes.  It is also the
% default style if no option is given.
%
% \subsection{Package options}
%
% In addition to the style options, |chemstyle| will pass options
% through to the |chemscheme| package, which is used to provide
% support for schemes.  Users should consult the |chemscheme|
% documentation for the options applicable.
%
% The package recognises the |nonotes| option, which affects
% how the References section is headed.  By default, |chemstyle|
% alters the value of \cmd{\bibname} or \cmd{\refname} (as
% appropriate) to the form of words chosen by the target journal
% for the ``References and Notes'' section.  The |nonotes| option
% prevents this, and results in only ``References'' being output.
%
% The ``References'' naming commands are language-aware, \emph{via}
% the |babel| interface.  Currently, |chemstyle| includes appropriate
% labels for babel languages |english|, |UKenglish|, |ngerman| and
% |french|.\footnote{The \texttt{french} option for \texttt{babel}
% causes a clash with \texttt{unitsdef} concerning the command
% \texttt{\textbackslash fg}.  \texttt{babel} uses this for
% guillemets, while \texttt{unitsdef} uses it as an abbreviation for
% \texttt{\textbackslash femtogram}.  The \texttt{chemstyle} package
% prevents the clash, and leaves the \texttt{babel} definition intact.}
% Other languages can be added if appropriate wordings are provided
% to the author.
%
% \section{Additional macros}
%
% \subsection{Additional units}
%
% The |unitsdef| package provides a great number of easy to use unit
% commands, and handles spacing between numbers and units very well.
% However, it misses out a few useful units for chemistry.  The
% |unitsdef| package is loaded by |rsc.sty|, and is then used to
% provide five additional units.
% \DescribeMacro{\Hz}
% The most obvious of these is \cmd{\Hz}, which simply gives \Hz.  The
% |unitsdef| package only defines \cmd{\hertz}, which is not as
% obvious.
% \DescribeMacro{\mmHg}
% The command \cmd{\mmHg} has a non-breaking thin space, leading to
% \mmHg.
% \DescribeMacro{\molar}
% \DescribeMacro{\Molar}
% Two related commands are given for concentration: \cmd{\molar}
% gives \molar, whilst \cmd{\Molar} gives \Molar.
% \DescribeMacro{\cmc}
% Finally, the command \cmd{\cmc} is provided for generating \cmc.  All
% space correctly with numbers, so inputting |10\cmc| gives 10\cmc,
% with a non-breaking space.
%
%\subsection{The standard state symbol}
%
% \DescribeMacro{\standardstate}
% Related to, but not exactly a unit is the \cmd{\standardstate}
% command.  This generates the tricky \standardstate\ symbol, letting
% you put |$\Delta S \standardstate$| to generate $\Delta S
% \standardstate$.  Note that this is safe in either text or maths
% mode.
%
% \subsection{Alkyl radicals}
%
% \DescribeMacro{\iPr}
% \DescribeMacro{\iPr}
% \DescribeMacro{\nBu}
% \DescribeMacro{\iBu}
% \DescribeMacro{\sBu}
% \DescribeMacro{\tBu}
% There are a few alkyl radicals that come up all of the time.  No
% one seems to have put these into a package, so they are provided
% here. As you would expect, \cmd{\iPr} gives \iPr, \cmd{\iBu} gives
% \iBu and \cmd{\tBu} gives \tBu, and so on.  The style of the output
% depends on the journal style specified; most journals seem to
% favour one version of the abbreviation.
%
% \subsection{Latin phrases}
%
% \DescribeMacro{\latin}
% \DescribeMacro{\etc}
% \DescribeMacro{\eg}
% \DescribeMacro{\ie}
% \DescribeMacro{\etal}
% \DescribeMacro{\invacuo}
% The various Latin phrases commonly used in chemistry are made
% available as the obvious commands.  By altering the definition
% of \cmd{\latin}, this allows ready switching from italic to
% Roman typesetting.  Notice that \cmd{\etc}, \cmd{\ie} and \cmd{\eg}
% are aware of trailing periods, and so doubling-up should not occur.
%
% \iffalse
%<*template>
% \fi
% \section{A template for chemical articles}
%
% This is a very simple template for chemistry-related documents.
% Hopefully it contains a few extra hints for getting well-formatted
% documents quickly.  For simplicity, the template assumes that the
% user is writing a thesis for a U.K.~university.  Hence it uses
% U.K.~defaults and RSC-based styling.
%
% The versatile \textsc{koma-script} bundle provides more advanced
% versions of the standard document classes.  If you want paragraphs
% separated out, with no indents (a common style for theses), add the
% |parskip| option to the font and paper size ones given here.
%    \begin{macrocode}
\documentclass[fontsize=10pt,paper=a4]{scrreprt}
%    \end{macrocode}
% The |babel| system is loaded to sort out hyphenation and so on,
% and could be useful if there are any foreign-language quotes.
%    \begin{macrocode}
\usepackage[english,UKenglish]{babel}
%    \end{macrocode}
% Load |chemstyle| (of course) to give not only some easy formatting,
% but also to automatically provide a float type for schemes, thanks
% to the |chemscheme| package.  This also loads either |bpchem| or
% (optionally) |chemcompounds| to track compound numbers.
%    \begin{macrocode}
\usepackage[rsc]{chemstyle}
%    \end{macrocode}
% The |mhchem| package provides the \cmd{\ce} command for rapidly
% typesetting formulas, so that you can type |\ce{H2SO4}| and get
% \ce{H2SO4}.
%    \begin{macrocode}
\usepackage[version=3]{mhchem}
%    \end{macrocode}
% Greek letters should be italic if used for variables, but upright
% (Roman) if used otherwise.  So the standard LaTeX |$\delta$| is
% fine for typesetting an NMR shift (\eg $\delta = \ldots$ ppm.),
% but not for a $\upsigma$-bond or a $\uppi$-complex.  The |upgreek|
% package provides commands such as |$\upsigma$| and |$\uppi$| which
% are ideal for this.
%    \begin{macrocode}
\usepackage{upgreek}
%    \end{macrocode}
% The default LaTeX table formatting is not very good.  The
% |booktabs| package does things properly, and has good
% advice in the manual.  A highly-recommended package for
% those interested in formatting (\ie all (La)TeX users!).
%    \begin{macrocode}
\usepackage{booktabs}
%    \end{macrocode}
% The bulk of the document can then start.
%    \begin{macrocode}
\begin{document}
\end{document}
%    \end{macrocode}
% \iffalse
%</template>
% \fi
%
% \section{Advice for users of \texttt{rsc} and \texttt{achemso}}
%
% The |chemstyle| package is intended as a replacement for the |rsc|
% package.  As such, it covers almost everything the the |rsc| LaTeX
% package does, and more.  Users of |rsc| are strongly encouraged to
% update to using |chemstyle|.
%
% Both |achemso| and |rsc| provide appropriate BibTeX styles.  These
% will continue to be supported, but
%
% \StopEventually{}
%
% \iffalse
%<*package>
% \fi
% \section{The package code}
%
% \subsection{Setup code}
%
% First of all, the package identifies itself and loads other
% packages needed to function.  Loading |chemscheme| is deferred
% until later, to allow processing of options at the correct point.
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{chemstyle}
  [2007/08/23 v1.0a Writing chemistry with style]
%    \end{macrocode}
% The \cmd{\fg} macro is defined in French as a \emph{guillemet} sign,
% and so to avoid a clash a bit of patching is needed. A check to see
% if |babel| has already defined \cmd{\fg}. If it has, the definition
% is saved and deleted.
%    \begin{macrocode}
\ifx\fg\@undefined
\else
  \ifx\fg\relax
  \else
    \let\cst@fg\fg
    \let\fg\@undefined
  \fi
\fi
%    \end{macrocode}
% Now package loading can take place.
%\changes{v1.0a}{2007/08/23}{No longer load \texttt{fixltx2e}
%  package}
%    \begin{macrocode}
\RequirePackage{graphicx,amssymb,varioref,xspace,unitsdef}
%    \end{macrocode}
% If \cmd{\cst@fg} exists, it is restored here, otherwise \cmd{\fg}
% is undefined.  At the beginning of the document, \cmd{\fg} is
% defined as an abbreviation for a femtogram if it is not being used
% by |babel|.  This way there is not a problem if |babel| is loaded
% after |chemstyle|.
%    \begin{macrocode}
\ifx\cst@fg\@undefined
  \let\fg\@undefined
\else
  \let\fg\cst@fg
\fi
\AtBeginDocument{%
  \ifx\fg\@undefined
    \newcommand{\fg}{\femtogram}
  \fi
}
%    \end{macrocode}
%
% \subsection{Extra units and related commands}
%
% \begin{macro}{\cubiccentimeter}
% \begin{macro}{\cmc}
% \begin{macro}{\Hz}
% \begin{macro}{\Molar}
% \begin{macro}{\molar}
% \begin{macro}{\mmHg}
% A few additional unit types are provides, which the |unitsdef|
% package omits for some reason.  These do not change with different
% journal styles, and so are declared directly.
%    \begin{macrocode}
\newunit{\cubiccentimeter}{\cm\unitsuperscript{3}}
\newcommand{\cmc}{\cubiccentimeter}
\newcommand{\Hz}{\hertz}
\newunit{\Molar}{\textsc{m}}
\newunit{\molar}{\mole\unitsep\dm\unitsuperscript{--3}}
\newunit{\mmHg}{mm\unitsep{}Hg}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\standardstate}
% In a very similar vein, the ``standard state'' symbol is handy. This
% is produced by rotating a symbol from the \textsc{ams} symbol set.
% Note that the rotation angle here has been carefully checked, but
% is set by eye.  Changing the font used for \cmd{\varnothing} will
% mess this up.
%    \begin{macrocode}
\newcommand*{\standardstate}%
  {\textsuperscript{\rotatebox[origin=c]{140.8}%
  {\ensuremath{\varnothing}}}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Alkyl radicals}
%
% Alkyl radical abbreviations are produced using the macro
% \cmd{\cst@radical}.  This uses a series of formatting commands,
% which have default values provided here.  The names are
% hopefully pretty self-explanatory.
%    \begin{macrocode}
\let\cst@emph\relax
\def\cst@hyph{}
\let\cst@super\relax
\newif  \ifcst@prefix   \cst@prefixtrue
%    \end{macrocode}
% \begin{macro}{\cst@radical}
% The \cmd{\cst@radical} macro does the hard work of declaring
% each abbreviation.  To ensure there is no unexpected clash of
% names, \cmd{\newcommand} is used first to check for any problems.
% The commands are made robust so they can (hopefully) be used
% anywhere.
%    \begin{macrocode}
\def\cst@radical#1#2{%
  \expandafter\newcommand\expandafter{\csname #1#2\endcsname}{}%
  \expandafter\DeclareRobustCommand\expandafter{%
    \csname #1#2\endcsname}{%
    \ifcst@prefix
      \cst@super{\cst@emph{#1}}\cst@hyph#2%
    \else
      #2\cst@hyph\cst@super{\cst@emph{#1}}%
    \fi%
    \xspace
  }
}
%    \end{macrocode}
% \end{macro}
% With a mechanism in place, the abbreviations are declared.  The
% format of the resulting output will depend upon the configuration
% file used.
%    \begin{macrocode}
\cst@radical{n}{Pr}%
\cst@radical{i}{Pr}%
\cst@radical{n}{Bu}%
\cst@radical{i}{Bu}%
\cst@radical{s}{Bu}%
\cst@radical{t}{Bu}%
%    \end{macrocode}
%
% \subsection{Option handling}
%
% Firstly, the ``pass through'' options are handled, as these will be
% sent through to |chemscheme|.  The package option |nonotes| is also
% handled here.
%    \begin{macrocode}
\newif  \ifcst@notes    \cst@notestrue
\DeclareOption{ch}{\ExecuteOptions{chapter}}
\DeclareOption{chapter}%
  {\PassOptionsToPackage{chapter}{chemscheme}}
\DeclareOption{chemcompounds}%
  {\PassOptionsToPackage{chemcompounds}{chemscheme}}
\DeclareOption{nonotes}{\cst@notesfalse}
%    \end{macrocode}
% In order to handle the loading of style definitions correctly, a
% bit of care is needed.  The package options need to be loaded
% \emph{before} |chemscheme|, but the style definitions need to
% be loaded after |chemscheme|.  This is achieved by saving the
% options and looking at them again once the package loading is done.
% Notice that only one style definition can be used, so this is
% taken care of with a warning if needed.
%    \begin{macrocode}
\let\cst@option\relax
\DeclareOption*{%
  \ifx\cst@option\relax\else
    \PackageWarning{chemstyle}
      {Extra option \cst@option\space ignored}
  \fi
  \edef\cst@option{\CurrentOption}
}
\ProcessOptions*
\RequirePackage{chemscheme}
%    \end{macrocode}
%
% \subsection{Float formatting}
%
% The next step is to format the floats correctly. Unfortunately,
% |memoir| does not provide all of the commands needed to achieve
% this.  Thus the |float| package is needed; in order to load it, the
% \cmd{\newfloat} command in |memoir| is killed off.  The
% |chemscheme| package does not load |float| when |memoir| is being
%  used, because creating a new float type is catered for directly
% by |memoir|.  Unfortunately, the |memoir| system isn't flexible
% enough for what is needed by |chemstyle|, so the hard work of
% |chemscheme| is undone here!  For other document classes, |float|
% will already have been loaded by |chemscheme|.
%    \begin{macrocode}
\@ifclassloaded{memoir}
  {\let\newfloat\@undefined
   \RequirePackage{float}}
  {}
%    \end{macrocode}
% The standard float types are now restyled to place the captions
% correctly (for most journals).  Normally in chemical documents
% the author expects the float to be ``here'' if possible; this is
% therefore set as the default.
%    \begin{macrocode}
\floatstyle{plaintop}
\restylefloat{table}
\floatstyle{plain}
\restylefloat{scheme}
\restylefloat{figure}
\floatplacement{table}{htbp}
\floatplacement{scheme}{htbp}
\floatplacement{figure}{htbp}
%    \end{macrocode}
% The contents of floats are centred by default, using the hook
% from the |chemstyle| package.
%    \begin{macrocode}
\floatcontentscentre
%    \end{macrocode}
%
% \subsection{Cross-references}
%
% The naming for cross-references is sorted out properly using the
% |varioref| package.
%    \begin{macrocode}
\labelformat{scheme}{\schemename~#1}
\labelformat{figure}{\figurename~#1}
\labelformat{table}{\tablename~#1}
%    \end{macrocode}
%
% \subsection{Latin words}
%
% \begin{macro}{\latin}
% \begin{macro}{\latinemphon}
% \begin{macro}{\latinemphoff}
% A series of Latin phrases are provided, with a quick switch to
% print them in Roman letters if needed.  A mechanism is needed
% to alter the effect of the \cmd{\latin} command \emph{only}
% if the user does not have their own version.  This is achieved
% here.  The default is then set to emphasise Latin words.
%    \begin{macrocode}
\ifx\latin\@undefined
  \newcommand{\latinemphon}{\let\latin\emph}
  \newcommand{\latinemphoff}{\let\latin\relax}
  \latinemphon
\else
  \let\latinemphon\relax
  \let\latinemphoff\relax
\fi

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\etc}
% \begin{macro}{\invacuo}
% \begin{macro}{\etal}
% \begin{macro}{\eg}
% \begin{macro}{\ie}
% For the macros themselves, care is taken about trailing full stops.
% The \cmd{\xspace} command deals with any problems of spacing.
% Things could go wrong with complex punctuation, as no other checks
% are performed.  All of these functions use \cmd{\providecommand}
% to avoid standing on the user's own versions, if they exist.
%    \begin{macrocode}
\providecommand{\etc}{\latin{etc}\@ifnextchar.{}{.\xspace}}
\providecommand{\invacuo}{\latin{in vacuo}\xspace}
\providecommand{\etal}{\latin{et~al}\@ifnextchar.{}{.\xspace}}
\providecommand{\eg}{\latin{e.g}\@ifnextchar.{}{.\xspace}}
\providecommand{\ie}{\latin{i.e}\@ifnextchar.{}{.\xspace}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \subsection{Handling section naming}
%
% First, a new if is needed to differentiate between ``Notes and
% References'' and ``References and Notes.''
%    \begin{macrocode}
\newif  \ifcst@notesbefore  \cst@notesbeforetrue
%    \end{macrocode}
% \begin{macro}{\cst@name@refs}
% To keep life simple in the main macro, and to save on redundant
% code, the ordering of ``Notes,'' ``and'' and ``References'' is
% handled here.
%    \begin{macrocode}
\def\cst@name@refs#1#2#3{%
  \ifcst@notesbefore
    #3\ #2\ #1%
  \else
    #1\ #2\ #3%
  \fi
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\cst@language}
% The default language of the document is probably English.  However,
% this is alterable if needed, as it is not set in stone.
% Anyone needing to mess with this is probably happy using
% \cmd{\makeatletter}, so the command is kept out of user space.
%    \begin{macrocode}
\def\cst@language{english}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\cst@refsection}
% The existence of a suitable reference section name command is
% checked here.  Some document classes (\eg minimal) may not define
% a suitable command. Assuming that is not the case,
% \cmd{\cst@refsection} is used to store the name of the macro
% holding the references section.
%    \begin{macrocode}
\ifx\refname\@undefined
   \ifx\bibname\@undefined
      \PackageWarning{chemstyle}%
        {No bibliography name command defined in document class}
      \def\cst@namerefs#1#2#3#4{}%
    \else
      \def\cst@refsection{\bibname}
    \fi
 \else
   \def\cst@refsection{\refname}
\fi
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\cst@namerefs}
% \begin{macro}{\cst@language@check}
% The main macro of the heading-altering section takes four
% parameters, \marg{language}, \marg{references}, \marg{and}
% and \marg{notes}.  The first is the |babel| label for the language
% that the words are four, and the other three parameters and the
% words ``References'', ``and'' and ``Notes'', respectively.
%    \begin{macrocode}
\ifx\cst@namerefs\@undefined
  \def\cst@namerefs#1#2#3#4{%
    \ifcst@notes%
%    \end{macrocode}
% The non-|babel| version of the function only does anything if the
% language passed in |#1| is the default document language (probably
% English). The check for this needs the macro
% \cmd{\cst@language@check} to get |\ifx| to behave as desired.
%    \begin{macrocode}
      \def\cst@language@check{#1}
      \ifx\cst@language\cst@language@check
        \expandafter\renewcommand\expandafter{\cst@refsection}%
          {\cst@name@refs{#2}{#3}{#4}}%
      \fi
%    \end{macrocode}
% To ensure that things work whether |babel| is loaded or not, a few
% hoops have to be jumped through.  Altering the |babel| strings is
% delayed until the start of the document, in case |babel| is loaded
% after |chemstyle|.  There is also a complication that MikTeX
% defines \cmd{\languagename} even if |babel| is not loaded.  This
% may contain an undesired value, and so the presence of |babel|
% needs to be tested for to avoid strange errors.
%    \begin{macrocode}
      \AtBeginDocument{%
        \@ifpackageloaded{babel}{%
          \expandafter\addto\expandafter{\csname captions#1\endcsname}%
            {\expandafter\renewcommand\expandafter{\cst@refsection}%
            {\cst@name@refs{#2}{#3}{#4}}}%
          \expandafter\selectlanguage\expandafter{\languagename}}
        {}}
    \else%
      \ifx#1\cst@language
        \expandafter\renewcommand\expandafter{\cst@refsection}{#2}%
      \fi
      \AtBeginDocument{%
        \@ifpackageloaded{babel}{%
          \expandafter\addto\expandafter{\csname captions#1\endcsname}%
            {\expandafter\renewcommand\expandafter{\cst@refsection}{#2}}%
          \expandafter\selectlanguage\expandafter{\languagename}}%
        {}}
    \fi%
  }
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
% Finally, default names are loaded for a range of languages.  Most
% journals stick to the same words, with only the order changing.
%    \begin{macrocode}
\cst@namerefs{english}{References}{and}{Notes}
\cst@namerefs{UKenglish}{References}{and}{Notes}
\cst@namerefs{ngerman}{Literatur}{und}{Notizen}
\cst@namerefs{french}{R\'ef\'erences}{et}{Notes}
%    \end{macrocode}
%
% \subsection{Loading the style definition}
%
% The style definition is loaded here, once else  everything is in
% place.  A style must be loaded, so a default is provided to be on
% the safe side.  The journal style file must have extension
% |.jdf|.
%    \begin{macrocode}
\ifx\cst@option\relax
  \PackageWarning{chemstyle}
    {You didn't say which style to use \MessageBreak
     Defaulting to the ``no change'' style: none}
  \def\cst@option{none}
\fi
\InputIfFileExists{\cst@option.jdf}
  {\PackageInfo{chemstyle}
    {Loaded \cst@option.jdf}}
  {\PackageWarning{chemstyle}
    {Required style \cst@option\space does not exist}}
%    \end{macrocode}
% \iffalse
%</package>
% \fi
%
% \section{Configuration files}
%
% Each journal style needs slightly differing commands to get the
% formatting just right.  This is handled here, with each style in
% a separate file.  There is not a lot happening in most of these
% files, as the information is by its nature quite repetitive.
%
% \iffalse
%<*rsc>
% \fi
%
% \subsection{RSC style}
%
%    \begin{macrocode}
\ProvidesFile{rsc.jdf}[2007/08/23 v1.0a]
\renewcommand{\figurename}{Fig.}
\RequirePackage[labelsep=quad,labelfont=bf]{caption}
\let\cst@emph\relax
\def\cst@hyph{}
\let\cst@super\textsuperscript
\cst@prefixfalse
%    \end{macrocode}
% \iffalse
%</rsc>
%<*angew>
% \fi
%
%\subsection{\emph{Angew.~Chem.}~style}
%\changes{v1.0a}{2007/08/23}{Fixed incorrect Latin formatting for
%  \texttt{angew} option}
%    \begin{macrocode}
\ProvidesFile{cst-angew.def}[2007/08/23 v1.0a]
\RequirePackage[labelsep=period,labelfont={bf,it},font=sf]{caption}
\captionsetup[table]{labelsep=colon}
\captionsetup{singlelinecheck=off}
\let\cst@emph\emph
\def\cst@hyph{}
\let\cst@super\relax
\cst@prefixtrue
\latinemphoff
%    \end{macrocode}
% \iffalse
%</angew>
%<*jacs>
% \fi
%
% \subsection{\emph{J.~Am.~Chem.~Soc.}~style}
%
%    \begin{macrocode}
\ProvidesFile{jacs.jdf}[2007/08/23 v1.0a]
\RequirePackage[labelfont={bf,it,sf},textfont=sf]{caption}
\DeclareCaptionLabelSeparator{perquad}{.\quad}
\captionsetup{labelsep=perquad}
\captionsetup[figure]{textfont=rm}
\captionsetup{singlelinecheck=off}
\let\cst@emph\emph
\def\cst@hyph{}
\let\cst@super\textsuperscript
\cst@prefixtrue
\floatstyle{plaintop}
\restylefloat{scheme}
\floatstyle{plain}
\latinemphoff
\cst@notesbeforefalse
%    \end{macrocode}
% \iffalse
%</jacs>
%<*ic>
% \fi
%
% \subsection{\emph{Inorg.~Chem.}~style}
%
% Almost exactly the same as for \emph{J.~Am.~Chem.~Soc.}, so most of
% the work is left to |jacs.jdf|.
%    \begin{macrocode}
\ProvidesFile{ic.jdf}[2007/08/23 v1.0a]
\input {jacs.jdf}
\captionsetup{textfont=rm}
%    \end{macrocode}
%\iffalse
%</ic>
%<*jpc>
%\fi
%
%\subsection{\emph{J.~Phys.~Chem.}~style}
%\changes{v1.0a}{2007/08/23}{Added \emph{J.~Phys.~Chem.}~style}
%
%    \begin{macrocode}
\ProvidesFile{jpc.jdf}[2007/08/23 v1.0a]
\RequirePackage[font=bf,labelsep=colon]{caption}
\DeclareCaptionFormat{labelcaps}{\MakeUppercase{#1}#2#3}
\captionsetup{format=labelcaps}
\captionsetup[figure]{format=plain,textfont=md,labelsep=period}
\captionsetup{singlelinecheck=off}
\let\cst@emph\emph
\def\cst@hyph{}
\let\cst@super\textsuperscript
\cst@prefixtrue
\floatstyle{plaintop}
\restylefloat{scheme}
\floatstyle{plain}
\latinemphoff
\cst@notesbeforefalse
%    \end{macrocode}
%\iffalse
%</jpc>
%<*orglett>
% \fi
%
% \subsection{\emph{Org.~Lett.}~style}
%\changes{v1.0a}{2007/08/23}{Added \emph{Org.~Lett.}~style}
%
%    \begin{macrocode}
\ProvidesFile{orglett.jdf}[2007/08/23 v1.0a]
\RequirePackage{xcolor}
%    \end{macrocode}
%\begin{macro}{\OrgLettColour}
% To allow the user to control the colour of the ``bars'' in this
% style, an additional macro is provided.  The |purple| colour looks
% about right for matching the printed journal, but if anyone has a
% better suggestion please let the package author know.
%    \begin{macrocode}
\newcommand*{\OrgLettColour}{purple}
%    \end{macrocode}
%\end{macro}
% In order to get the distinctive coloured bars used by
% \emph{Org.~Lett.}, a new style for floats is needed.  This is based
% on the |ruled| style from the |float| package.
%    \begin{macrocode}
\newcommand\fs@orglett{\def\@fs@cfont{\bfseries}
  \let\@fs@capt\floatc@ruled
  \def\@fs@pre{\begingroup\color{\OrgLettColour}
    \hrule height12pt depth0pt \kern2pt\endgroup}%
%    \end{macrocode}
% This is the same \cmd{\@fs@mid} as is used in the |float| package
% for |plaintop| floats.
%    \begin{macrocode}
  \def\@fs@mid{\vspace\belowcaptionskip\relax}%
  \def\@fs@post{\begingroup\color{\OrgLettColour}\kern2pt
    \hrule height1.5pt depth0pt\endgroup}%
  \let\@fs@iftopcapt\iftrue}
%    \end{macrocode}
% Figures need to be slightly different, so an almost identical
% command is needed.
%    \begin{macrocode}
\newcommand\fs@orglettfig{\def\@fs@cfont{\bfseries}
  \let\@fs@capt\floatc@plain
  \def\@fs@pre{\begingroup\color{\OrgLettColour}
    \hrule height12pt depth0pt \kern2pt\endgroup}%
  \def\@fs@mid{\vspace\abovecaptionskip\relax}%
  \def\@fs@post{\begingroup\color{\OrgLettColour}\kern2pt
    \hrule height1.5pt depth0pt\endgroup}%
  \let\@fs@iftopcapt\iffalse}
%    \end{macrocode}
% The new style is now applied.  Users can change back to normal
% floats by changing back to the |plain| style.
%    \begin{macrocode}
\floatstyle{orglettfig}
\restylefloat{figure}
\floatstyle{orglett}
\restylefloat{scheme}
\restylefloat{table}
%    \end{macrocode}
% The more usual style commands now occur.
%    \begin{macrocode}
\RequirePackage[labelfont=bf]{caption}
\DeclareCaptionLabelSeparator{perquad}{.\quad}
\captionsetup{labelsep=perquad}
\let\cst@emph\emph
\def\cst@hyph{}
\let\cst@super\textsuperscript
\cst@prefixtrue
\latinemphoff
\cst@notesbeforefalse
%    \end{macrocode}
% \iffalse
%</orglett>
%<*none>
%\fi
%
% \subsection{The empty style --- none}
%
% To allow the user to load the extra macros provided here without
% any style changes, a ``do nothing'' style is provided.  It simply
% makes sure that nothing changes compared to the LaTeX kernel.
% This requires undoing the defaults provided above.  For commands
% where a default is needed (\eg the \cmd{\latin} command) the
% style of the RSC is followed.
%    \begin{macrocode}
\ProvidesFile{none.jdf}[2007/08/23 v1.0a]
\RequirePackage{caption}
\floatstyle{plain}
\restylefloat{table}
\labelformat{scheme}{#1}
\labelformat{figure}{#1}
\labelformat{table}{#1}
\floatplacement{table}{tbp}
\floatplacement{scheme}{tbp}
\floatplacement{figure}{tbp}
%    \end{macrocode}
% \iffalse
%</none>
% \fi
% \PrintChanges
% \PrintIndex
% \Finale
