summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/mhchem/mhchem.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-06-30 13:18:19 +0000
committerKarl Berry <karl@freefriends.org>2006-06-30 13:18:19 +0000
commit587e2649317c29ebe59d9ab905a972faa3452e6c (patch)
treedce6f5589c163639ad18825725f42f56ead58edc /Master/texmf-dist/tex/latex/mhchem/mhchem.sty
parent2848e8054ecf9fb4840f537847372fbf6654e383 (diff)
mhchem update
git-svn-id: svn://tug.org/texlive/trunk@1731 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/mhchem/mhchem.sty')
-rw-r--r--Master/texmf-dist/tex/latex/mhchem/mhchem.sty629
1 files changed, 417 insertions, 212 deletions
diff --git a/Master/texmf-dist/tex/latex/mhchem/mhchem.sty b/Master/texmf-dist/tex/latex/mhchem/mhchem.sty
index b3eec4f0670..0aa67f2967e 100644
--- a/Master/texmf-dist/tex/latex/mhchem/mhchem.sty
+++ b/Master/texmf-dist/tex/latex/mhchem/mhchem.sty
@@ -1,5 +1,5 @@
%% mhchem.sty
-%% Copyright 2004-2005 M.a-r.t-i.n H.e-n.s-e.l
+%% Copyright 2004-2006 M.a-r.t-i.n H.e-n.s-e.l
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3
@@ -29,7 +29,7 @@
% mhchem.pdf, legal.txt and whatsnew.txt.
%
%
-\ProvidesPackage{mhchem}[2005/07/15 v3.00 for typesetting chemical formulae]
+\ProvidesPackage{mhchem}[2006/06/23 v3.03 for typesetting chemical formulae]
\RequirePackage{ifthen}
\RequirePackage{calc}[1998/07/07]
\RequirePackage{twoopt}
@@ -37,147 +37,45 @@
\RequirePackage{keyval}
\RequirePackage{graphics}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%% Options %%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\def\mhchem@option@version{0}
-\define@key{mhchem}{version}{\def\mhchem@option@version{#1}}
-\def\mhchem@option@mathfont{\mathrm}
-\def\mhchem@option@textfont{}
-\define@key{mhchem}{textfontcommand}{\def\mhchem@option@textfont{#1}}
-\define@key{mhchem}{textfontname}{\def\mhchem@option@textfont{\csname#1\endcsname}}
-\define@key{mhchem}{mathfontcommand}{\def\mhchem@option@mathfont{#1}}
-\define@key{mhchem}{mathfontname}{\def\mhchem@option@mathfont{\csname#1\endcsname}}
-\define@key{mhchem}{font}{%
- \ifthenelse{\equal{sf}{#1}}{%
- \def\mhchem@option@textfont{\sffamily}%
- \def\mhchem@option@mathfont{\mathsf}%
- }{\ifthenelse{\equal{}{#1}}{%
- \def\mhchem@option@textfont{}%
- \def\mhchem@option@mathfont{\mathrm}%
- }{\PackageError{mhchem}{Font option `#1' unknown}}}%
-}
-\newlength\mhchem@option@minussidebearingleft
-\newlength\mhchem@option@minussidebearingright
-\setlength\mhchem@option@minussidebearingleft{0.06em}
-\setlength\mhchem@option@minussidebearingright{0.11em}
-\define@key{mhchem}{minus-sidebearing-left}{\setlength\mhchem@option@minussidebearingleft{#1}}
-\define@key{mhchem}{minus-sidebearing-right}{\setlength\mhchem@option@minussidebearingright{#1}}
-
-\providecommand\mhchemoptions[1]{\setkeys{mhchem}{#1}}
-
-%%% begin: standard keyval handling as in many other packages
-\def\ProcessOptionsWithKV#1{%
- \let\@tempc\relax
- \let\mhchem@tempa\@empty
- \@for\CurrentOption:=\@classoptionslist\do{%
- \@ifundefined{KV@#1@\CurrentOption}%
- {}%
- {%
- \edef\mhchem@tempa{\mhchem@tempa,\CurrentOption,}%
- \@expandtwoargs\@removeelement\CurrentOption
- \@unusedoptionlist\@unusedoptionlist
- }%
- }%
- \edef\mhchem@tempa{%
- \noexpand\setkeys{#1}{%
- \mhchem@tempa\@ptionlist{\@currname.\@currext}%
- }%
- }%
- \mhchem@tempa
- \let\CurrentOption\@empty
- \AtEndOfPackage{\let\@unprocessedoptions\relax}
-}
-\ProcessOptionsWithKV{mhchem}\relax
-%%% end:
-
-\ifnum0=\mhchem@option@version%
- \PackageWarningNoLine{mhchem}{%
- You did not specify a 'version' option for the mhchem\MessageBreak
- package. This means you EITHER have an existing\MessageBreak
- document and mhchem was updated to a newer version.\MessageBreak
- Please check the mhchem manual in that case! OR, you\MessageBreak
- are about to create a new document, in this case,\MessageBreak
- please write \string\usepackage[version=2] in your preamble in\MessageBreak
- order to use the most recent version of mhchem}%
- \def\mhchem@option@version{1}%
-\else%
-\fi%
-
-%
-%
-%
-%
-%
-%
-%
-%
-%
-%
-%
-%
-%
-%
-%
-
-\def\mhchem@option@usenonsimultaneoussubsuperscripts{0}%
-\def\mhchem@option@alwaystextmode{0}%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%% %%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\providecommand\cmath[1]{\ensuremath{#1}}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% misc %%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand*\cmath[1]{\ensuremath{\text{\ensuremath{#1}}}}%
\DeclareMathSymbol{\mhchem@hyphen}{0}{operators}{45}
-
\def\mhchem@empty{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% \ce %%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ifnum1<\mhchem@option@version%
- \newtoks\tok@mhchem@ce@i%
- \newtoks\tok@mhchem@ce@ii%
- \providecommand*{\cee}[1]{%
+\newtoks\tok@mhchem@ce@i%
+\newtoks\tok@mhchem@ce@ii%
+
+\newcommand*{\cee}[1]{%
+ \ifnum1<\mhchem@option@version%
\def\mhchem@ce@out{}%
- %\ifx\mhchem@END#1\mhchem@END\else%
{\mhchem@ce@v#1\mhchem@empty\\\mhchem@END\mhchem@ENDEND}%
- %\fi%
\ensuremath{%
\mhchem@ce@out%
}%
- }%
-\fi%
-\providecommand*{\ce}[1]{%
- \def\hyphen{\mhchem@hyphen}%
- \bgroup%
- \ifnum1<\mhchem@option@version%
- \ifmmode\else\def\mhchem@option@alwaystextmode{1}\fi%
- \fi%
- \ifx\mhchem@END#1\mhchem@END\else%
- \ifmmode\else\mhchem@option@textfont\fi%
- \ensuremath{%
- \mhchem@ce@i#1 \mhchem@END\mhchem@ENDEND%
- }%
+ \else%
+ \PackageWarningNoLine{mhchem}{%
+ The \string\cee{} command of mhchem is only available\MessageBreak
+ when you secify [version=2] or greater}%
\fi%
- \egroup%
}%
\def\mhchem@ce@v#1\\#2#3\mhchem@ENDEND{%
\ifx\mhchem@END#2%
- %\ifx\mhchem@END#1\mhchem@END\else%
- \mhchem@ce@vii#1&\mhchem@END\mhchem@ENDEND%
- %\fi%
+ \mhchem@ce@vii#1&\mhchem@END\mhchem@ENDEND%
\else%
\mhchem@ce@vii#1&\mhchem@END\mhchem@ENDEND%
\g@addto@macro\mhchem@ce@out{\\}%
\mhchem@ce@v#2#3\mhchem@ENDEND%
\fi%
}
-%
+
\long\def\mhchem@ce@vii#1&#2#3\mhchem@ENDEND{%
\ifx\mhchem@END#2%
\g@addto@macro\mhchem@ce@out{\ce{#1}}%
@@ -190,6 +88,25 @@
%%%
+\@ifundefined{hyphen}{%
+ \def\hyphen{}%
+}{}
+
+\DeclareRobustCommand*{\ce}[1]{%
+ \bgroup%
+ \protect\def\hyphen{\mhchem@hyphen}%
+ \ifnum1<\mhchem@option@version%
+ \ifmmode\else\def\mhchem@option@alwaystextmode{1}\fi%
+ \fi%
+ \ifx\mhchem@END#1\mhchem@END\else%
+ \ifmmode\else\mhchem@option@textfont\fi%
+ \ensuremath{%
+ \mhchem@ce@i#1 \mhchem@END\mhchem@ENDEND%
+ }%
+ \fi%
+ \egroup%
+}%
+
\def\mhchem@ce@i#1#2 #3\mhchem@ENDEND{%
\ifcat a#1 {\mhchem@ce@ii{#1#2}}%
\else\ifx 1#1{\mhchem@ce@ii{#1#2}}%
@@ -315,12 +232,6 @@
\else%
\cf{#1}%
\fi\fi\fi\fi%
-% \ifthenelse{\equal{{{#1}}}{{{(^)}}}}{{}\mathop{\uparrow}{}}{%
-% \ifthenelse{\equal{#1}{^}}{{}\mathop{\uparrow}{}}{%
-% \ifthenelse{\equal{#1}{(v)}}{{}\mathop{\downarrow}{}}{%
-% \ifthenelse{\equal{#1}{v}}{{}\mathop{\downarrow}{}}{%
-% \cf{#1}%
-% }%}}}%
}%
\def\mhchem@ce@cmath#1#2\mhchem@END{\cmath{#1}\cf{#2}}
@@ -332,50 +243,16 @@
\setlength{\mhchem@arrowminlength}{1em}
%TODO: adapt min length to each of the math modes
-\newcommandtwoopt*{\mhchem@gives}[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
- \xrightarrow%
- [{#2}]%
- {{#1}}}}
-\newcommandtwoopt*{\mhchem@givesT}[2][\hspace{\mhchem@arrowminlength}][]%
- {\mhchem@gives[\text{#1}][\text{#2}]}
-\newcommandtwoopt*{\mhchem@givesC}[2][\hspace{\mhchem@arrowminlength}][]%
- {\mhchem@gives[\ce{#1}][\ce{#2}]}
-
-\newcommandtwoopt*{\mhchem@givesleft}[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
- \xleftarrow%
- [{#2}]%
- {{#1}}}}
-\newcommandtwoopt*{\mhchem@givesleftT}[2][\hspace{\mhchem@arrowminlength}][]%
- {\mhchem@givesleft[\text{#1}][\text{#2}]}
-\newcommandtwoopt*{\mhchem@givesleftC}[2][\hspace{\mhchem@arrowminlength}][]%
- {\mhchem@givesleft[\ce{#1}][\ce{#2}]}
-
-\newcommandtwoopt*{\mhchem@mesomeric}[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
- \ext@arrow 3399\leftrightarrowfill@%
- {{#2}}%
- {{#1}}}}
-\newcommandtwoopt*{\mhchem@mesomericT}[2][\hspace{\mhchem@arrowminlength}][]%
- {\mhchem@mesomeric[\text{#1}][\text{#2}]}
-\newcommandtwoopt*{\mhchem@mesomericC}[2][\hspace{\mhchem@arrowminlength}][]%
- {\mhchem@mesomeric[\ce{#1}][\ce{#2}]}
-
-%%% idea taken from http://www.texnik.de/misc/harpoon.phtml
+%%% for font arrows
+%%%%% idea taken from http://www.texnik.de/misc/harpoon.phtml
\def\mhchem@rightharpoonupfill@{\arrowfill@\relbar\relbar\rightharpoonup}
\def\mhchem@leftharpoondownfill@{\arrowfill@\leftharpoondown\relbar\relbar}
-\newcommand*{\mhchem@xrightleftharpoons}[2][]{\mathrel{%
- \rlap{\protect\raisebox{.22ex}{$\ext@arrow 3399\mhchem@rightharpoonupfill@{\hphantom{#1}}{#2}$}}%
- \raisebox{-.22ex}{$\ext@arrow 3399\mhchem@leftharpoondownfill@{#1}{\hphantom{#2}}$}}}
-\newcommandtwoopt*{\mhchem@equilibrium}[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
- \mhchem@xrightleftharpoons%
- [{#2}]%
- {{#1}}}}
-\newcommandtwoopt*{\mhchem@equilibriumT}[2][\hspace{\mhchem@arrowminlength}][]%
- {\mhchem@equilibrium[\text{#1}][\text{#2}]}
-\newcommandtwoopt*{\mhchem@equilibriumC}[2][\hspace{\mhchem@arrowminlength}][]%
- {\mhchem@equilibrium[\ce{#1}][\ce{#2}]}
-
-\newsavebox{\mhchem@arrows@box}%
-\newcommand*{\mhchem@xlongrightshortleftharpoons}[2][]{\mathrel{%
+\newcommand*\mhchem@xrightleftharpoons[2][]{%
+ \mathrel{%
+ \rlap{\protect\raisebox{.22ex}{$\ext@arrow 3399\mhchem@rightharpoonupfill@{}{\mhchem@mathbox[#1]{#2}}$}}%
+ \raisebox{-.22ex}{$\ext@arrow 3399\mhchem@leftharpoondownfill@{#1}{\hphantom{#2}}$}}}%
+\newsavebox\mhchem@arrows@box%
+\newcommand*\mhchem@xlongrightshortleftharpoons[2][]{\mathrel{%
\sbox{\mhchem@arrows@box}%
{$\mkern9mu\ext@arrow 3399\mhchem@leftharpoondownfill@%
{#1}{\hphantom{#2}\mkern-6mu\mkern-12mu}$}%
@@ -383,16 +260,7 @@
\protect\raisebox{.22ex}{$\ext@arrow 3399\mhchem@rightharpoonupfill@%
{\hphantom{\usebox{\mhchem@arrows@box}}\mkern-6mu}{#2}$}%
}}
-\newcommandtwoopt*{\mhchem@equilibriumRight}[2][\hphantom{\makebox[\mhchem@arrowminlength]{}}][]{\ensuremath{%
- \mhchem@xlongrightshortleftharpoons%
- [{#2}]%
- {{#1}}}}
-\newcommandtwoopt*{\mhchem@equilibriumRightT}[2][\hspace{\mhchem@arrowminlength}][]%
- {\mhchem@equilibriumRight[\text{#1}][\text{#2}]}
-\newcommandtwoopt*{\mhchem@equilibriumRightC}[2][\hspace{\mhchem@arrowminlength}][]%
- {\mhchem@equilibriumRight[\ce{#1}][\ce{#2}]}
-
-\newcommand*{\mhchem@xshortrightlongleftharpoons}[2][]{\mathrel{%
+\newcommand*\mhchem@xshortrightlongleftharpoons[2][]{\mathrel{%
\sbox{\mhchem@arrows@box}%
{$\mkern9mu\ext@arrow 3399\mhchem@rightharpoonupfill@%
{\hphantom{#1}\mkern-6mu\mkern-12mu}{#2}$}%
@@ -400,15 +268,213 @@
\protect\raisebox{-.22ex}{$\ext@arrow 3399\mhchem@leftharpoondownfill@%
{#1}{\hphantom{\usebox{\mhchem@arrows@box}}\mkern-6mu}$}%
}}
-\newcommandtwoopt*{\mhchem@equilibriumLeft}[2][][\hspace{\mhchem@arrowminlength}]{\ensuremath{%
- \mhchem@xshortrightlongleftharpoons%
- [{#2}]%
- {{#1}}}}
+%\newcommand*\mhchem@xleftrightarrow[2][]{\ext@arrow 3095\leftrightarrowfill@{#1}{#2}}
+
+
+%%% for pgf arrows
+\newcommand*\mhchem@rightarrow@pgf[1]{%
+ \begin{tikzpicture}[baseline]%
+ \draw[use as bounding box] (0,0) (#1,0.85ex);
+ \draw[cap=round, join=round, line width=0.09ex]
+ (0cm,0.575ex) -- ++(#1,0cm)
+ %\draw[cap=round, join=round, line width=0.07ex]
+ % (#1,0.575ex)
+ arc (250:198:0.6ex) arc (198:250:0.6ex)
+ arc (110:162:0.6ex);
+ \end{tikzpicture}%
+}%
+\newcommand*\mhchem@leftarrow@pgf[1]{%
+ \begin{tikzpicture}[baseline]%
+ \draw[use as bounding box] (0,0) (#1,0.85ex);
+ \draw[cap=round, join=round, line width=0.09ex]
+ (#1,0.575ex) -- (0cm,0.575ex)
+ %\draw[cap=round, join=round, line width=0.07ex]
+ % (0cm,0.575ex)
+ arc (70:18:0.6ex) arc (18:70:0.6ex)
+ arc (-70:-18:0.6ex);
+ \end{tikzpicture}%
+}%
+\newcommand*\mhchem@leftrightarrow@pgf[1]{%
+ \begin{tikzpicture}[baseline]%
+ \draw[use as bounding box] (0,0) (#1,0.85ex);
+ \draw[cap=round, join=round, line width=0.09ex]
+ (0cm,0.575ex)
+ arc (70:18:0.6ex) arc (18:70:0.6ex)
+ arc (-70:-18:0.6ex) arc (-18:-70:0.6ex)
+ -- ++(#1,0cm)
+ arc (250:198:0.6ex) arc (198:250:0.6ex)
+ arc (110:162:0.6ex);
+ \end{tikzpicture}%
+}%
+\newcommand*\mhchem@leftrightharpoon@pgf[1]{%
+ \begin{tikzpicture}[baseline]%
+ \draw[use as bounding box] (0,0) (#1,1ex);
+ \draw[cap=round, join=round, line width=0.09ex]
+ (0cm,0.575ex+0.22ex) -- ++(#1,0cm) arc (250:198:0.9ex);
+ \draw[cap=round, join=round, line width=0.09ex]
+ (#1,0.575ex-0.22ex) -- ++(-#1,0cm) arc (70:18:0.9ex);
+ \end{tikzpicture}%
+}%
+\newcommand*\mhchem@longrightshortleftharpoons@pgf[1]{%
+ \begin{tikzpicture}[baseline]%
+ \draw[use as bounding box] (0,0) (#1,1ex);
+ \draw[cap=round, join=round, line width=0.09ex]
+ (0.0cm,0.575ex+0.22ex) -- ++(#1,0cm) arc (250:198:0.9ex);
+ \draw[cap=round, join=round, line width=0.09ex]
+ (#1+0.5em-1em,0.575ex-0.22ex) -- (0.5em,0.575ex-0.22ex) arc (70:18:0.9ex);
+ \end{tikzpicture}%
+}%
+\newcommand*\mhchem@shortrightlongleftharpoons@pgf[1]{%
+ \begin{tikzpicture}[baseline]%
+ \draw[use as bounding box] (0,0) (#1,1ex);
+ \draw[cap=round, join=round, line width=0.09ex]
+ (0.5em,0.575ex+0.22ex) -- ++(#1-1em,0cm) arc (250:198:0.9ex);
+ \draw[cap=round, join=round, line width=0.09ex]
+ (#1,0.575ex-0.22ex) -- ++(-#1,0cm) arc (70:18:0.9ex);
+ \end{tikzpicture}%
+}%
+
+\newlength{\mhchem@arrowlength@pgf}
+\newlength{\mhchem@arrowminlength@pgf}
+%TODO: use \mhchem@arrowminlength
+\def\mhchem@labeledarrow@pgf#1#2#3#4#5#6#7{% 1-4 muskips 5 arrow 6 text above 7 below
+ \setlength\mhchem@arrowlength@pgf{\widthof{\ensuremath{%
+ \mkern#3mu%
+ \mathop{}%
+ \limits%
+ \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi%
+ #7\if0#2\else\mkern#2mu\fi}}%
+ \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi%
+ #6\if0#2\else\mkern#2mu\fi}}%
+ \mkern#4mu%
+ }}}%
+ %
+ \setlength\mhchem@arrowminlength@pgf{10pt+0.5em}%
+ \ifthenelse{\equal{hhleftrightarrow}{#5}}{\setlength\mhchem@arrowminlength@pgf{10pt+0.7em}}{}%
+ \ifthenelse{\equal{hhleftrightharpoon}{#5}}{\setlength\mhchem@arrowminlength@pgf{10pt+0.7em}}{}%
+ \ifthenelse{\equal{mhchem@longrightshortleftharpoons@pgf}{#5}}{
+ \setlength\mhchem@arrowminlength@pgf{1.85em}%
+ \setlength\mhchem@arrowlength@pgf{\widthof{\ensuremath{%
+ \mkern#3mu%
+ \mathop{}%
+ \limits%
+ \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi%
+ #7\if0#2\else\mkern#2mu\fi}}%
+ \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi%
+ \hspace{1em}% %%
+ #6\if0#2\else\mkern#2mu\fi}}%
+ \mkern#4mu%
+ }}}%
+ }{}%
+ \ifthenelse{\equal{mhchem@shortrightlongleftharpoons@pgf}{#5}}{
+ \setlength\mhchem@arrowminlength@pgf{1.85em}%
+ \setlength\mhchem@arrowlength@pgf{\widthof{\ensuremath{%
+ \mkern#3mu%
+ \mathop{}%
+ \limits%
+ \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi%
+ \hspace{1em}% %%
+ #7\if0#2\else\mkern#2mu\fi}}%
+ \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi%
+ #6\if0#2\else\mkern#2mu\fi}}%
+ \mkern#4mu%
+ }}}%
+ }{}%
+ %
+ \ifdim\mhchem@arrowlength@pgf<\mhchem@arrowminlength@pgf%
+ \setlength\mhchem@arrowlength@pgf{\mhchem@arrowminlength@pgf}%
+ \fi%
+ \mathrel{\mkern#3mu\mathop{\csname#5\endcsname{\mhchem@arrowlength@pgf}%
+ }%
+ \limits
+ \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi%
+ #7\if0#2\else\mkern#2mu\fi}}%
+ \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi%
+ #6\if0#2\else\mkern#2mu\fi}}%
+ \mkern#4mu%
+ }%}
+}%
+
+\newcommandtwoopt*\mhchem@gives[2][][]{}
+\newcommandtwoopt*\mhchem@givesleft[2][][]{}
+\newcommandtwoopt*\mhchem@mesomeric[2][][]{}
+\newcommandtwoopt*\mhchem@equilibrium[2][][]{}
+\newcommandtwoopt*\mhchem@equilibriumRight[2][][]{}
+\newcommandtwoopt*\mhchem@equilibriumLeft[2][][]{}
+
+\newcommand\mhchem@definearrows[1]{%
+ %%% font
+ \ifthenelse{\equal{#1}{font}}{%
+ \renewcommandtwoopt*\mhchem@gives[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
+ \xrightarrow%
+ [{##2}]%
+ {##1}}}%
+ \renewcommandtwoopt*\mhchem@givesleft[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
+ \xleftarrow%
+ [{##2}]%
+ {##1}}}%
+ \renewcommandtwoopt*\mhchem@mesomeric[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
+ \ext@arrow 3399\leftrightarrowfill@%
+ {##2}%
+ {##1}}}%
+ \renewcommandtwoopt*{\mhchem@equilibrium}[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
+ \mhchem@xrightleftharpoons%
+ [{##2}]%
+ {##1}}}%
+ \renewcommandtwoopt*{\mhchem@equilibriumRight}[2][\hphantom{\makebox[\mhchem@arrowminlength]{}}][]{\ensuremath{%
+ \mhchem@xlongrightshortleftharpoons%
+ [{##2}]%
+ {##1}}}%
+ \renewcommandtwoopt*{\mhchem@equilibriumLeft}[2][][\hspace{\mhchem@arrowminlength}]{\ensuremath{%
+ \mhchem@xshortrightlongleftharpoons%
+ [{##2}]%
+ {##1}}}%
+ }{%%% pgf
+ \ifthenelse{\equal{#1}{pgf}}{%
+ \renewcommandtwoopt*\mhchem@gives[2][][]%
+ {\ensuremath{\mhchem@labeledarrow@pgf{1.5}{5}{1.5}{1}{mhchem@rightarrow@pgf}{##2}{##1}}}%
+ \renewcommandtwoopt*\mhchem@givesleft[2][][]%
+ {\ensuremath{\mhchem@labeledarrow@pgf{5}{1.5}{1}{1.5}{mhchem@leftarrow@pgf}{##2}{##1}}}%
+ \renewcommandtwoopt*\mhchem@mesomeric[2][][]%
+ {\ensuremath{\mhchem@labeledarrow@pgf{5}{5}{1}{1}{mhchem@leftrightarrow@pgf}{##2}{##1}}}%
+ \renewcommandtwoopt*\mhchem@equilibrium[2][][]%
+ {\ensuremath{\mhchem@labeledarrow@pgf{6}{6}{1}{1}{mhchem@leftrightharpoon@pgf}{##2}{##1}}}%
+ \renewcommandtwoopt*\mhchem@equilibriumRight[2][][]%
+ {\ensuremath{\mhchem@labeledarrow@pgf{6}{6}{1}{1}{mhchem@longrightshortleftharpoons@pgf}{##2}{##1}}}%
+ \renewcommandtwoopt*\mhchem@equilibriumLeft[2][][]%
+ {\ensuremath{\mhchem@labeledarrow@pgf{6}{6}{1}{1}{mhchem@shortrightlongleftharpoons@pgf}{##2}{##1}}}%
+ }{%
+ \PackageError{mhchem}{The option font=#1 is not supported}%
+ }%
+ }%
+}
+
+\newcommandtwoopt*\mhchem@givesT[2][\hspace{\mhchem@arrowminlength}][]%
+ {\mhchem@gives[\text{#1}][\text{#2}]}%
+\newcommandtwoopt*\mhchem@givesC[2][\hspace{\mhchem@arrowminlength}][]%
+ {\mhchem@gives[\ce{#1}][\ce{#2}]}%
+\newcommandtwoopt*\mhchem@givesleftT[2][\hspace{\mhchem@arrowminlength}][]%
+ {\mhchem@givesleft[\text{#1}][\text{#2}]}%
+\newcommandtwoopt*\mhchem@givesleftC[2][\hspace{\mhchem@arrowminlength}][]%
+ {\mhchem@givesleft[\ce{#1}][\ce{#2}]}%
+\newcommandtwoopt*\mhchem@mesomericT[2][\hspace{\mhchem@arrowminlength}][]%
+ {\mhchem@mesomeric[\text{#1}][\text{#2}]}%
+\newcommandtwoopt*\mhchem@mesomericC[2][\hspace{\mhchem@arrowminlength}][]%
+ {\mhchem@mesomeric[\ce{#1}][\ce{#2}]}%
+\newcommandtwoopt*{\mhchem@equilibriumT}[2][\hspace{\mhchem@arrowminlength}][]%
+ {\mhchem@equilibrium[\text{#1}][\text{#2}]}
+\newcommandtwoopt*{\mhchem@equilibriumC}[2][\hspace{\mhchem@arrowminlength}][]%
+ {\mhchem@equilibrium[\ce{#1}][\ce{#2}]}
+\newcommandtwoopt*{\mhchem@equilibriumRightT}[2][\hspace{\mhchem@arrowminlength}][]%
+ {\mhchem@equilibriumRight[\text{#1}][\text{#2}]}
+\newcommandtwoopt*{\mhchem@equilibriumRightC}[2][\hspace{\mhchem@arrowminlength}][]%
+ {\mhchem@equilibriumRight[\ce{#1}][\ce{#2}]}
\newcommandtwoopt*{\mhchem@equilibriumLeftT}[2][][\hspace{\mhchem@arrowminlength}]%
{\mhchem@equilibriumLeft[\text{#1}][\text{#2}]}
\newcommandtwoopt*{\mhchem@equilibriumLeftC}[2][][\hspace{\mhchem@arrowminlength}]%
{\mhchem@equilibriumLeft[\ce{#1}][\ce{#2}]}
+
%%%%%%%%%%
% bonds - basic definition see in \cf
\newlength\mhchem@bondwidth%
@@ -484,9 +550,10 @@
%%%%%%%%%% \cf %%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newtoks\mhchem@cf@sup%
+\newtoks\mhchem@cf@number
\newtoks\tok@mhchem@cf@i%
-\providecommand*{\cf}[2][]{%
+\newcommand*{\cf}[2][]{%
\bgroup%
\def\sbond{{\ensuremath{-}}}%
\def\dbond{\rlap{\protect\raisebox{.2ex}{\sbond}}\protect\raisebox{-.2ex}{\sbond}}%
@@ -498,13 +565,18 @@
\edef\mhchem@mathortext##1{\noexpand\text{##1}}%
\edef\mhchem@mathortext@ii##1##2{##2}%
\else%
- \edef\mhchem@mathortext##1{\ifmmode\noexpand\mhchem@option@mathfont{##1}\else\noexpand\text{##1}\fi}%
- \edef\mhchem@mathortext@ii##1##2{\ifmmode\noexpand\mhchem@option@mathfont{##1}\else ##2\fi}%
+ \ifnum1<\mhchem@option@version%
+ \edef\mhchem@mathortext##1{\ifmmode\noexpand\mhchem@option@mathfont{##1}\else\noexpand\text{##1}\fi}%
+ \edef\mhchem@mathortext@ii##1##2{\ifmmode\noexpand\mhchem@option@mathfont{##1}\else ##2\fi}%
+ \else
+ \edef\mhchem@mathortext##1{\ifmmode ##1\else\noexpand\text{##1}\fi}%
+ \edef\mhchem@mathortext@ii##1##2{\ifmmode ##1\else ##2\fi}%
+ \fi%
\fi%
\ifmmode\else\mhchem@option@textfont\fi%
\ensuremath{%
\def\mhchem@cf@element{}%
- \def\mhchem@cf@number{}%
+ %\def\mhchem@cf@number{}%
%\def\mhchem@cf@sup{}%
\def\mhchem@cf@presub{}%
\def\mhchem@cf@presup{}%
@@ -527,20 +599,21 @@
\if\mhchem@cf@state s%
%
\else\if\mhchem@cf@state 1%
- {\mhchem@mathortext{\expandafter\mhchem@cf@frac\mhchem@cf@number/\mhchem@END}}%
+ {\mhchem@mathortext{\expandafter\mhchem@cf@frac\the\mhchem@cf@number/\mhchem@END}}%
\else\if\mhchem@cf@state n%
- {\mhchem@mathortext{\expandafter\mhchem@cf@frac\mhchem@cf@number/\mhchem@END}}%
+ {\mhchem@mathortext{\expandafter\mhchem@cf@frac\the\mhchem@cf@number/\mhchem@END}}%
\else%
\if\mhchem@option@usenonsimultaneoussubsuperscripts 0%
\mhchem@chemfive{\mhchem@cf@presup}{\mhchem@cf@presub}%
- {\mhchem@cf@element}{\mhchem@cf@number}{\the\mhchem@cf@sup}{}%
+ {\mhchem@cf@element}{\the\mhchem@cf@number}{\the\mhchem@cf@sup}{}%
\else%
\mhchem@chemfive{\mhchem@cf@presup}{\mhchem@cf@presub}%
- {\mhchem@cf@element}{\mhchem@cf@number}{}{\the\mhchem@cf@sup}%
+ {\mhchem@cf@element}{\the\mhchem@cf@number}{}{\the\mhchem@cf@sup}%
\fi%
\fi\fi\fi%
\def\mhchem@cf@element{}%
- \def\mhchem@cf@number{}%
+ %
+ \mhchem@cf@number{}%
%
\mhchem@cf@sup{}%
\def\mhchem@cf@presub{}%
@@ -618,35 +691,35 @@
\mhchem@cf@output%
\else%
\if\mhchem@cf@state e%
- \tok@mhchem@cf@i=\expandafter{\mhchem@cf@replaceminus{#1}}%
\mhchem@cf@sup=\expandafter{\the\mhchem@cf@sup%
- \expandafter\mhchem@cf@replacedot\expandafter{\the\tok@mhchem@cf@i}}%
+ \expandafter\mhchem@cf@replacedot\expandafter{\mhchem@cf@replaceminus{#1}}}%
+ %
+ %
+ %
+ %
\def\mhchem@cf@state{+}%
\else\if\mhchem@cf@state E%
\mhchem@cf@sup=\expandafter{\the\mhchem@cf@sup%
\mhchem@mathortext@ii{\mhchem@option@mathfont{#1}}{#1}}%
\def\mhchem@cf@state{+}%
\else\if\mhchem@cf@state p%
- \edef\mhchem@cf@presup{\mhchem@cf@presup%
- %\mhchem@cf@replaceminus{
- #1}%
- %}%
+ \g@addto@macro\mhchem@cf@presup{#1}%
\def\mhchem@cf@state{*}%
\else\if\mhchem@cf@state P%
\edef\mhchem@cf@presup{\mhchem@cf@presup%
\mhchem@mathortext@ii{\mhchem@option@mathfont{#1}}{#1}}%
\def\mhchem@cf@state{*}%
\else\if\mhchem@cf@state f%
- \g@addto@macro\mhchem@cf@number{#1}%
+ \mhchem@cf@number=\expandafter{\the\mhchem@cf@number#1}%
\def\mhchem@cf@state{+}%
\else\if\mhchem@cf@state F%
- \if\mhchem@END\mhchem@cf@number\mhchem@END%
- \else\edef\mhchem@cf@number{\mhchem@cf@number\,}\fi%
- \edef\mhchem@cf@number{\mhchem@cf@number%
+ \if\mhchem@END\the\mhchem@cf@number\mhchem@END%
+ \else\mhchem@cf@number=\expandafter{\the\mhchem@cf@number\,}\fi%
+ \mhchem@cf@number=\expandafter{\the\mhchem@cf@number%
\mhchem@mathortext@ii{\mhchem@option@mathfont{#1}}{#1}}%
\def\mhchem@cf@state{+}%
\else\if\mhchem@cf@state q%
- \edef\mhchem@cf@presub{\mhchem@cf@presub #1}%
+ \g@addto@macro\mhchem@cf@presub{#1}%
\def\mhchem@cf@state{*}%
\else\if\mhchem@cf@state Q%
\edef\mhchem@cf@presub{\mhchem@cf@presub%
@@ -747,7 +820,7 @@
\def\mhchem@cf@state{2}%
\fi\fi%
\fi%
- \edef\mhchem@cf@number{\mhchem@cf@number #1}%
+ \mhchem@cf@number=\expandafter{\the\mhchem@cf@number #1}%
\else\ifcat a\noexpand#1%
\if\mhchem@cf@state a%
\else%
@@ -764,20 +837,27 @@
\if\mhchem@cf@state s\def\mhchem@cf@state{p}%
\else\if\mhchem@cf@state 1\mhchem@cf@output\def\mhchem@cf@state{p}%
\else\if\mhchem@cf@state *\def\mhchem@cf@state{p}%
- \else\def\mhchem@cf@state{e}%
+ \else%
+ \if\mhchem@END\the\mhchem@cf@sup\mhchem@END%
+ \else\mhchem@cf@sup=\expandafter{\the\mhchem@cf@sup\,}\fi%
+ \def\mhchem@cf@state{e}%
\fi\fi\fi%
\else\if^\noexpand#1%
\if\mhchem@cf@state s\def\mhchem@cf@state{p}%
\else\if\mhchem@cf@state 1\mhchem@cf@output\def\mhchem@cf@state{p}%
\else\if\mhchem@cf@state *\def\mhchem@cf@state{p}%
- \else\def\mhchem@cf@state{e}%
+ \else%
+ \if\mhchem@END\the\mhchem@cf@sup\mhchem@END%
+ \else\mhchem@cf@sup=\expandafter{\the\mhchem@cf@sup\,}\fi%
+ \def\mhchem@cf@state{e}%
\fi\fi\fi%
\else\ifcat _\noexpand#1%
\if\mhchem@cf@state s\def\mhchem@cf@state{q}%
\else\if\mhchem@cf@state 1\mhchem@cf@output\def\mhchem@cf@state{q}%
\else\if\mhchem@cf@state *\def\mhchem@cf@state{q}%
+ \else\if\mhchem@cf@state 2\mhchem@cf@number=\expandafter{\the\mhchem@cf@number\,}\def\mhchem@cf@state{f}%
\else\def\mhchem@cf@state{f}%
- \fi\fi\fi%
+ \fi\fi\fi\fi%
\else%
\mhchem@cf@output@o{#1}%
\fi\fi\fi%
@@ -829,7 +909,7 @@
\mhchem@minispace% [3]
}%
\mhchem@mathortext@ii{% [5]
- \mhchem@option@mathfont{#3}%
+ \mhchem@option@mathfont #3%
}{\text{#3}}% [5]
\ifthenelse{\equal{#4#5}{}}{}{%
_{%
@@ -869,26 +949,150 @@
%
}
-\newcommand*{\mhchem@mathbox}[1]{\mathchoice%
+\newcommand*\mhchem@mathbox[2][]{%
+ \mathchoice%
+ {\mhchem@mathbox@ii{\displaystyle}{#1}{#2}}%
+ {\mhchem@mathbox@ii{\textstyle}{#1}{#2}}%
+ {\mhchem@mathbox@ii{\scriptstyle}{#1}{#2}}%
+ {\mhchem@mathbox@ii{\scriptscriptstyle}{#1}{#2}}}%
+\newcommand*\mhchem@mathbox@ii[3]{%
+ \setlength{\dimen1}{\widthof{\ensuremath{#1#2}}}%
+ \setlength{\dimen2}{\widthof{\ensuremath{#1#3}}}%
+ \ifdim\dimen1<\dimen2%
+ \mhchem@mathbox@i{#3}%
+ \else%
+ \makebox[\dimen1]{\ensuremath{\displaystyle#3}}%
+ \fi}
+\newcommand*\mhchem@mathbox@i[1]{\mathchoice%
{\mbox{\ensuremath{\displaystyle#1}}}%
{\mbox{\ensuremath{\textstyle#1}}}%
{\mbox{\ensuremath{\scriptstyle#1}}}%
{\mbox{\ensuremath{\scriptscriptstyle#1}}}}
-
-\newcommand*{\mhchem@mathboxright}[2]{\mathchoice%
+
+\newcommand*\mhchem@mathboxright[2]{\mathchoice%
{\makebox[#1][r]{\ensuremath{\displaystyle#2}}}%
{\makebox[#1][r]{\ensuremath{\textstyle#2}}}%
{\makebox[#1][r]{\ensuremath{\scriptstyle#2}}}%
{\makebox[#1][r]{\ensuremath{\scriptscriptstyle#2}}}}
-\def\mhchem@minispace{%
- \setlength{\dimen2}{0pt-\widthof{${}^8_8$}+
+\newcommand*\mhchem@minispace{%
+ \setlength{\dimen2}{0pt-\widthof{${}^8_8$}+%
\widthof{$\text{C}^8_8$}-\widthof{$\text{C}^{}_{}$}}% [3]
\kern\dimen2%
%
%
}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% Options %%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\mhchem@option@version{0}
+\define@key{mhchem}{version}{\def\mhchem@option@version{#1}}
+
+\def\mhchem@option@mathfont{\mathrm}
+\def\mhchem@option@textfont{}
+\define@key{mhchem}{textfontcommand}{\def\mhchem@option@textfont{#1}}
+\define@key{mhchem}{textfontname}{\def\mhchem@option@textfont{\csname#1\endcsname}}
+\define@key{mhchem}{mathfontcommand}{\def\mhchem@option@mathfont{#1}}
+\define@key{mhchem}{mathfontname}{\def\mhchem@option@mathfont{\csname#1\endcsname}}
+\define@key{mhchem}{font}{%
+ \ifthenelse{\equal{sf}{#1}}{%
+ \def\mhchem@option@textfont{\sffamily}%
+ \def\mhchem@option@mathfont{\mathsf}%
+ }{\ifthenelse{\equal{}{#1}}{%
+ \def\mhchem@option@textfont{}%
+ \def\mhchem@option@mathfont{\mathrm}%
+ }{\PackageError{mhchem}{Font option `#1' unknown}}}%
+}
+
+\newlength\mhchem@option@minussidebearingleft
+\newlength\mhchem@option@minussidebearingright
+\setlength\mhchem@option@minussidebearingleft{0.06em}
+\setlength\mhchem@option@minussidebearingright{0.11em}
+\define@key{mhchem}{minus-sidebearing-left}{\setlength\mhchem@option@minussidebearingleft{#1}}
+\define@key{mhchem}{minus-sidebearing-right}{\setlength\mhchem@option@minussidebearingright{#1}}
+
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+
+\def\mhchem@option@usenonsimultaneoussubsuperscripts{0}%
+\def\mhchem@option@alwaystextmode{0}%
+
+\mhchem@definearrows{font}
+\define@key{mhchem}{arrows}{%
+ \ifthenelse{\equal{pgf}{#1}}{%
+ \RequirePackage{pgf}% for finding the tikz package more easily
+ \RequirePackage{tikz}%
+ }{}%
+ \mhchem@definearrows{#1}%
+}
+
+%%% begin: standard keyval handling as in many other packages
+\def\ProcessOptionsWithKV#1{%
+ \let\@tempc\relax%
+ \let\mhchem@tempa\@empty%
+ \@for\CurrentOption:=\@classoptionslist\do{%
+ \@ifundefined{KV@#1@\CurrentOption}%
+ {}%
+ {%
+ \edef\mhchem@tempa{\mhchem@tempa,\CurrentOption,}%
+ \@expandtwoargs\@removeelement\CurrentOption%
+ \@unusedoptionlist\@unusedoptionlist%
+ }%
+ }%
+ \edef\mhchem@tempa{%
+ \noexpand\setkeys{#1}{%
+ \mhchem@tempa\@ptionlist{\@currname.\@currext}%
+ }%
+ }%
+ \mhchem@tempa%
+ \let\CurrentOption\@empty%
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+}
+\ProcessOptionsWithKV{mhchem}\relax
+%%% end:
+
+\define@key{mhchem}{arrows}{\mhchem@definearrows{#1}}
+
+\newcommand*\mhchemoptions[1]{\setkeys{mhchem}{#1}}
+
+\ifnum0=\mhchem@option@version%
+ \PackageWarningNoLine{mhchem}{%
+ You did not specify a 'version' option for the mhchem\MessageBreak
+ package. This means you EITHER have an existing\MessageBreak
+ document and mhchem was updated to a newer version.\MessageBreak
+ Please check the mhchem manual in that case! OR, you\MessageBreak
+ are about to create a new document; in this case,\MessageBreak
+ please write \string\usepackage[version=3]{mhchem} in your preamble in\MessageBreak
+ order to use the most recent version of mhchem}%
+ \def\mhchem@option@version{1}%
+\else%
+\fi%
+
+
+
+
+
+
+
+
+
+
%TODO: option for CrO_4{}^{2-} instead of CrO_4^{2-} - proper switch option [wordstyle] and documentation
%TODO: option to use nicefrac
%TODO: option for automatically using nicefrac im text mode
@@ -903,4 +1107,5 @@
%TODO: always minimum length of arrows? override?
%TODO: count0 und dimen@ eliminieren
%
-%- ? option for labels on arrows in \scriptstyle? \textstyle? \ No newline at end of file
+%
+%- option for centered bonds? \ No newline at end of file