diff options
author | Karl Berry <karl@freefriends.org> | 2006-06-30 13:18:19 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-06-30 13:18:19 +0000 |
commit | 587e2649317c29ebe59d9ab905a972faa3452e6c (patch) | |
tree | dce6f5589c163639ad18825725f42f56ead58edc /Master/texmf-dist/tex/latex/mhchem/mhchem.sty | |
parent | 2848e8054ecf9fb4840f537847372fbf6654e383 (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.sty | 629 |
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#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 |