summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/chemstyle/chemstyle.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-08-15 18:53:30 +0000
committerKarl Berry <karl@freefriends.org>2007-08-15 18:53:30 +0000
commite48b37809878cd01b7b78357f6baa132ba1e1533 (patch)
tree30a51b6da2feda0c507ee478d1ac9ddbbd676b0a /Master/texmf-dist/source/latex/chemstyle/chemstyle.dtx
parent6aa70f95ff129e91c74fee91d02c115047c34ceb (diff)
new latex package chemstyle (13aug07)
git-svn-id: svn://tug.org/texlive/trunk@4736 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/chemstyle/chemstyle.dtx')
-rw-r--r--Master/texmf-dist/source/latex/chemstyle/chemstyle.dtx816
1 files changed, 816 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/chemstyle/chemstyle.dtx b/Master/texmf-dist/source/latex/chemstyle/chemstyle.dtx
new file mode 100644
index 00000000000..5fd549067dd
--- /dev/null
+++ b/Master/texmf-dist/source/latex/chemstyle/chemstyle.dtx
@@ -0,0 +1,816 @@
+% \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{371}
+%
+% \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{\',\@ifclassloaded,\@ifnextchar,\@ifundefined}
+% \DoNotIndex{\@ifpackageloaded,\@undefined,\ ,\begin}
+% \DoNotIndex{\AtBeginDocument,\captionsetup,\csname,\CurrentOption}
+% \DoNotIndex{\DeclareCaptionLabelSeparator,\DeclareOption}
+% \DoNotIndex{\DeclareRobustCommand,\def,\documentclass,\edef}
+% \DoNotIndex{\else,\emph,\end,\endcsname,\ensuremath}
+% \DoNotIndex{\ExecuteOptions,\expandafter,\fi,\figurename}
+% \DoNotIndex{\floatcontentscentre,\floatplacement,\floatstyle}
+% \DoNotIndex{\ifx,\input,\InputIfFileExists,\labelformat}
+% \DoNotIndex{\languagename,\let,\MessageBreak,\NeedsTeXFormat}
+% \DoNotIndex{\newcommand,\newfloat,\newif,\newunit,\PackageInfo}
+% \DoNotIndex{\PackageInfo,\PackageWarning,\PassOptionsToPackage}
+% \DoNotIndex{\ProcessOptions,\providecommand,\ProvidesFile}
+% \DoNotIndex{\ProvidesPackage,\quad,\relax,\renewcommand}
+% \DoNotIndex{\RequirePackage,\restylefloat,\rotatebox}
+% \DoNotIndex{\selectlanguage,\schemename,\space,\tablename}
+% \DoNotIndex{\textsc,\textsuperscript,\unitsep,\unitsuperscript}
+% \DoNotIndex{\usepackage,\varnothing,\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.} \\
+% 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/13 v1.0 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.
+% \begin{macrocode}
+\RequirePackage{graphicx,amssymb,fixltx2e,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/13 v1.0]
+\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}
+%
+% \begin{macrocode}
+\ProvidesFile{cst-angew.def}[2007/08/113 v1.0]
+\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
+% \end{macrocode}
+% \iffalse
+%</angew>
+%<*jacs>
+% \fi
+%
+% \subsection{\emph{J.~Am.~Chem.~Soc.}~style}
+%
+% \begin{macrocode}
+\ProvidesFile{jacs.jdf}[2007/08/13 v1.0]
+\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/13 v1.0]
+\input {jacs.jdf}
+\captionsetup{textfont=rm}
+% \end{macrocode}
+% \iffalse
+%</ic>
+%<*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/13 v1.0]
+\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