diff options
author | Karl Berry <karl@freefriends.org> | 2014-02-02 21:54:50 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2014-02-02 21:54:50 +0000 |
commit | 854f058d812a95468e75e7e8f722c2fa29a18305 (patch) | |
tree | 2edee8d02b0d310e227a9a900c2637e82ae9e8e8 /Master/texmf-dist/tex/latex/mhchem/mhchem.sty | |
parent | 02a4fc71679895429385a94acdbd1f9f37a23b13 (diff) |
mhchem (2feb14)
git-svn-id: svn://tug.org/texlive/trunk@32850 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 | 2143 |
1 files changed, 1113 insertions, 1030 deletions
diff --git a/Master/texmf-dist/tex/latex/mhchem/mhchem.sty b/Master/texmf-dist/tex/latex/mhchem/mhchem.sty index 9f8d8f2fc34..949bd97f148 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-2013 Martin Hensel +%% Copyright 2004-2014 Martin Hensel % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License version 1.3c @@ -27,7 +27,7 @@ % This work consists of all files listed in manifest.txt. % % -\ProvidesPackage{mhchem}[2013/06/17 v3.12 for typesetting chemical formulae] +\ProvidesPackage{mhchem}[2014/02/01 v3.15 for typesetting chemical formulae] \RequirePackage{ifthen} \RequirePackage{calc}[1998/07/07] \RequirePackage{twoopt} @@ -35,6 +35,7 @@ \RequirePackage{keyval} \RequirePackage{graphics} \RequirePackage{pdftexcmds} +\RequirePackage{expl3} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%% misc %%%%%%%%%% @@ -52,7 +53,7 @@ \newcommand*{\cee}[1]{% \def\mhchem@ce@out{}% - {\mhchem@cee@i#1\mhchem@empty\\\mhchem@END\mhchem@ENDEND}% + {\mhchem@cee@i#1\\\mhchem@END\mhchem@ENDEND}% \ensuremath{% \mhchem@ce@out% }% @@ -793,10 +794,16 @@ \def\mhchem@bond#1{% \ifnum\pdf@strcmp{#1}{-}=0% \sbond% + \else\ifnum\pdf@strcmp{#1}{1}=0% + \sbond% \else\ifnum\pdf@strcmp{#1}{=}=0% \dbond% + \else\ifnum\pdf@strcmp{#1}{2}=0% + \dbond% \else\ifnum\pdf@strcmp{#1}{##}=0% \tbond% + \else\ifnum\pdf@strcmp{#1}{3}=0% + \tbond% \else\ifnum\pdf@strcmp{#1}{~}=0% \mhchem@setbondwidth% \mhchem@halfbond% @@ -829,944 +836,1039 @@ {\leftarrow}% \else \PackageError{mhchem}{Unknown bond type in \string\bond (#1)}% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% loop helper %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ExplSyntaxOn + +\msg_new:nnn { mhchem } { cf / unexpected-input } { Assertion~failed:~Unexpected~input~character.~You~found~a~bug.~Please~contact~the~author. } +\msg_new:nnn { mhchem } { cf / unexpected-state } { Assertion~failed:~Unexpected~internal~state~'#1'.~You~found~a~bug.~Please~contact~the~author. } +\msg_new:nnn { mhchem } { cf / unexpected-two-superscripts } { Assertion~failed:~Two~superscripts.~You~entered~an~invalid~formula.~Or~you~found~a~bug,~in~which~case~you~should~contact~the~author. } + +\cs_generate_variant:Nn \peek_catcode_remove:NTF { oTF } +\cs_generate_variant:Nn \peek_catcode:NTF { oTF } +\cs_generate_variant:Nn \str_case:nnn { Vnn } + +\cs_new:Npn \__mhchem_loopHelper_appendNextToken:NNn #1#2#3 + { + \tl_put_right:Nn #1 { #3 } + #2 + } +\cs_new:Npn \__mhchem_loopHelper_appendNextGroup:NNn #1#2#3 + { + \tl_put_right:Nn #1 { { #3 } } + #2 + } +\cs_new:Npn \__mhchem_loopHelper_appendMath:NNw #1#2#3$ + { + \tl_put_right:Nn #1 { \text { \ensuremath { #3 } } } + #2 + } +\cs_new:Npn \__mhchem_loopHelper_appendMathAsGroup:NNw #1#2#3$ + { + \tl_put_right:Nn #1 { \text { \ensuremath { #3 } } } + #2 + } +\cs_new:Npn \__mhchem_loopHelper_appendNextTokenAsMathrm:NNn #1#2#3 + { + \tl_put_right:Nn #1 { \ensuremath { \mathrm{ #3 } } } + #2 + } +\cs_new:Npn \__mhchem_loopHelper_useNone:Nn #1#2 + { + #1 + } +\cs_new:Npn \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn #1#2#3 + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn \__mhchem_cf_result_tl { \mhchem@mathOrText{#3} } + \tl_set:Nn \__mhchem_cf_state_tl { #1 } + #2 + } +\cs_new:Npn \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn #1#2#3#4 + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn \__mhchem_cf_result_tl { #1 } + \tl_set:Nn \__mhchem_cf_state_tl { #2 } + #3 + } + %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%% \cf %%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newtoks\mhchem@cf@result% \newcommand*\mhchem@cf[2][]{% - \bgroup% - \def\sbond{{\ensuremath{-}}}% - \ifnum 2=\mhchem@option@version% - \let\bond\sbond% - \else\ifnum 2<\mhchem@option@version% - \DeclareRobustCommand*\bond{\mhchem@bond}% - \fi\fi% - \DeclareRobustCommand\dbond{\rlap{\protect\raisebox{.2ex}{\sbond}}\protect\raisebox{-.2ex}{\sbond}}% - \DeclareRobustCommand\tbond{\rlap{\protect\raisebox{.4ex}{\sbond}}% - \rlap{\sbond}\protect\raisebox{-.4ex}{\sbond}}% - \def\hyphen{\mhchem@hyphen}% - \ifmmode\else\def\mhchem@option@alwaystextmode{1}\fi% - \if 1\mhchem@option@alwaystextmode% - \edef\mhchem@mathOrText##1{\noexpand\text{##1}}% - \edef\mhchem@mathOrText@ii##1##2{##2}% - \else% - \ifnum 1<\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% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@startedWithBond{0}% - \mhchem@cf@outputReset% - \mhchem@cf@result={}% - \mhchem@cf@continue#2\mhchem@END% - \ifthenelse{\equal{#1}{}}% - {% - \ensuremath{\the\mhchem@cf@result}% - }{% - \ensuremath{\overset{#1}{\the\mhchem@cf@result}}% - }% - \egroup% -}% -\def\mhchem@cf@i{% - \ifx\mhchem@END\mhchem@cf@lookahead% - \if -\mhchem@cf@state% - \ifnum 4>\mhchem@option@version% - \mhchem@appendToks{\mhchem@cf@sup}{-}% - \else% - \if 0\mhchem@cf@startedWithBond% - \mhchem@appendToks{\mhchem@cf@sup}{-}% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\sbond}% - \fi% - \fi% - \else\if 1\mhchem@cf@state% - \def\mhchem@cf@state{9}% - \fi\fi% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \let\mhchem@cf@action\mhchem@gobble% - \else\ifx\relax\mhchem@cf@lookahead% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\ifx\protect\mhchem@cf@lookahead% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \if -\mhchem@cf@state% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\sbond}% - \def\mhchem@cf@state{+}% - \fi% - \if s\mhchem@cf@state% - \ifx \{\mhchem@cf@lookahead% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifx \}\mhchem@cf@lookahead% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if ##\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\tbond}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead% - \def\mhchem@cf@state{p}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead% - \def\mhchem@cf@state{p}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if _\mhchem@cf@lookahead% - \def\mhchem@cf@state{q}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if `\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@state{P}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \fi% - \else\if ,\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@state{Q}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{1}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@amount}{{,}}}% - \fi% - \else\if .\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else% - \def\mhchem@cf@state{1}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \fi% - \else\if +\mhchem@cf@lookahead% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}% - \else\expandafter\ifx\mhchem@char@hyphen@other\mhchem@cf@lookahead% - \ifnum 1<\mhchem@option@version% - \def\mhchem@cf@state{-}% - \def\mhchem@cf@startedWithBond{1}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}% - \fi% - \else\expandafter\ifx\mhchem@char@hyphen@active\mhchem@cf@lookahead% - \ifnum 1<\mhchem@option@version% - \def\mhchem@cf@state{-}% - \def\mhchem@cf@startedWithBond{1}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}% - \fi% - \else\if |\mhchem@cf@lookahead% - \let\mhchem@cf@action\mhchem@cf@switchState% - \else\if (\mhchem@cf@lookahead% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if )\mhchem@cf@lookahead% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if [\mhchem@cf@lookahead% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if ]\mhchem@cf@lookahead% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if *\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead% - \def\mhchem@cf@state{c}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\ifcat a\mhchem@cf@lookahead% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifcat 1\mhchem@cf@lookahead% - \def\mhchem@cf@state{1}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \else\if\mhchem@char@lbrace\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}% - \else% - \def\mhchem@cf@state{1}% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@amount}}% - \fi% - \else\if $\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}% - \else% - \def\mhchem@cf@state{1}% - \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@amount}}% - \fi% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% - \else\if C\mhchem@cf@state% - \if\mhchem@char@lbrace\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \fi% - \def\mhchem@cf@state{c}% - \else\if c\mhchem@cf@state% - \if\mhchem@char@lbrace\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}% - \else% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@continue}% - \fi% - \else\if 1\mhchem@cf@state% - \ifx \{\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifx \}\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if ##\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\tbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{p}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{p}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if _\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{q}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if `\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{E}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \fi% - \else\if ,\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@amount}{{,}}}% - \else\if .\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \else\if |\mhchem@cf@lookahead% - \PackageWarning{mhchem}{The symbol | is not allowed here}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if (\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if )\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if [\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if ]\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if *\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{c}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\ifcat a\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifcat 1\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \else\if\mhchem@char@lbrace\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@amount}}% - \fi% - \else\if $\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@amount}}% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% - \else\if a\mhchem@cf@state% - \ifx \{\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifx \}\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if ##\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\tbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead% - \def\mhchem@cf@state{e}% - \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else% - \mhchem@appendToks{\mhchem@cf@sup}{,}% - \fi% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead% - \def\mhchem@cf@state{e}% - \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else% - \mhchem@appendToks{\mhchem@cf@sup}{,}% - \fi% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if _\mhchem@cf@lookahead% - \def\mhchem@cf@state{f}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if `\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@state{E}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \fi% - \else\if ,\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@element}{,}}% - \fi% - \else\if .\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \fi% - \else\if +\mhchem@cf@lookahead% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}% - \else\expandafter\ifx\mhchem@char@hyphen@other\mhchem@cf@lookahead% - \ifnum 1<\mhchem@option@version% - \def\mhchem@cf@state{-}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}% - \fi% - \else\expandafter\ifx\mhchem@char@hyphen@active\mhchem@cf@lookahead% - \ifnum 1<\mhchem@option@version% - \def\mhchem@cf@state{-}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}% - \fi% - \else\if |\mhchem@cf@lookahead% - \PackageWarning{mhchem}{The symbol | is not allowed here}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if (\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if )\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if [\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if ]\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if *\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{c}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\ifcat a\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifcat 1\mhchem@cf@lookahead% - \def\mhchem@cf@state{2}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \else\if\mhchem@char@lbrace\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroupAsMath{% - \mhchem@cf@element}}% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}% - \fi% - \else\if $\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% - \else\if 2\mhchem@cf@state% - \ifx \{\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifx \}\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if ##\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\tbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead% - \def\mhchem@cf@state{e}% - \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else% - \mhchem@appendToks{\mhchem@cf@sup}{,}% - \fi% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead% - \def\mhchem@cf@state{e}% - \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else% - \mhchem@appendToks{\mhchem@cf@sup}{,}% - \fi% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if _\mhchem@cf@lookahead% - \def\mhchem@cf@state{f}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if `\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@state{E}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \fi% - \else\if ,\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@state{F}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@amount}{,}}% - \fi% - \else\if .\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \fi% - \else\if +\mhchem@cf@lookahead% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}% - \else\expandafter\ifx\mhchem@char@hyphen@other\mhchem@cf@lookahead% - \ifnum 1<\mhchem@option@version% - \def\mhchem@cf@state{-}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}% - \fi% - \else\expandafter\ifx\mhchem@char@hyphen@active\mhchem@cf@lookahead% - \ifnum 1<\mhchem@option@version% - \def\mhchem@cf@state{-}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}% - \fi% - \else\if |\mhchem@cf@lookahead% - \PackageWarning{mhchem}{The symbol | is not allowed here}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if (\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if )\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if [\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if ]\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if *\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{c}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\ifcat a\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifcat 1\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \else\if\mhchem@char@lbrace\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}% - \fi% - \else\if $\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% - \else\if e\mhchem@cf@state% - \def\mhchem@cf@state{+}% - \if $\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@sup}}% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}% - \fi% - \else\if f\mhchem@cf@state% - \def\mhchem@cf@state{+}% - \if $\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@amount}}% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \fi% - \else\if p\mhchem@cf@state% - \def\mhchem@cf@state{*}% - \if $\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@presup}}% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@presup}}% - \fi% - \else\if q\mhchem@cf@state% - \def\mhchem@cf@state{*}% - \if $\mhchem@cf@lookahead% - \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@presub}}% - \else% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@presub}}% - \fi% - \else\if E\mhchem@cf@state% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{% - \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@sup}}% - \else\if F\mhchem@cf@state% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{% - \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@amount}}% - \else\if P\mhchem@cf@state% - \def\mhchem@cf@state{*}% - \def\mhchem@cf@action{% - \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@presup}}% - \else\if Q\mhchem@cf@state% - \def\mhchem@cf@state{*}% - \def\mhchem@cf@action{% - \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@presub}}% - \else\if +\mhchem@cf@state% - \ifx \{\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifx \}\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if ##\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\tbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead% - \def\mhchem@cf@state{e}% - \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else% - \mhchem@appendToks{\mhchem@cf@sup}{,}% - \fi% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead% - \def\mhchem@cf@state{e}% - \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else% - \mhchem@appendToks{\mhchem@cf@sup}{,}% - \fi% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if _\mhchem@cf@lookahead% - \def\mhchem@cf@state{f}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if `\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@state{E}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \fi% - \else\if ,\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@state{F}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@element}{,}}% - \fi% - \else\if .\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \fi% - \else\if +\mhchem@cf@lookahead% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}% - \else\expandafter\ifx\mhchem@char@hyphen@other\mhchem@cf@lookahead% - \ifnum 1<\mhchem@option@version% - \def\mhchem@cf@state{-}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}% - \fi% - \else\expandafter\ifx\mhchem@char@hyphen@active\mhchem@cf@lookahead% - \ifnum 1<\mhchem@option@version% - \def\mhchem@cf@state{-}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{+}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}% - \fi% - \else\if |\mhchem@cf@lookahead% - \PackageWarning{mhchem}{The symbol | is not allowed here}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if (\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if )\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if [\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if ]\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if *\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{c}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\ifcat a\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifcat 1\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\if\mhchem@char@lbrace\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}% - \fi% - \else\if $\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% - \else\if *\mhchem@cf@state% - \ifx \{\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\ifx \}\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\dbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if ##\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \mhchem@appendToks{\mhchem@cf@result}{\tbond}% - \def\mhchem@cf@state{+}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead% - \def\mhchem@cf@state{p}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead% - \def\mhchem@cf@state{p}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if _\mhchem@cf@lookahead% - \def\mhchem@cf@state{q}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if `\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@state{P}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \fi% - \else\if ,\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \def\mhchem@cf@state{Q}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@element}{,}}% - \fi% - \else\if .\mhchem@cf@lookahead% - \ifnum 4>\mhchem@option@version% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \fi% - \else\if |\mhchem@cf@lookahead% - \PackageWarning{mhchem}{The symbol | is not allowed here}% - \let\mhchem@cf@action\mhchem@cf@gobbleNextToken% - \else\if (\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\if )\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\if [\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\if ]\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\if *\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}% - {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}% - \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{c}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \else\ifcat a\mhchem@cf@lookahead% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}% - \else\ifcat 1\mhchem@cf@lookahead% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{1}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}% - \else\if\mhchem@char@lbrace\mhchem@cf@lookahead% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}% - \else\if $\mhchem@cf@lookahead% - \def\mhchem@cf@state{a}% - \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}% - \else% - \mhchem@cf@outputAndReset{\mhchem@cf@result}% - \def\mhchem@cf@state{s}% - \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% - \else% - \PackageWarning{mhchem}{Assertion failed: unknown internal state \mhchem@cf@state}% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% - \fi\fi\fi% - \mhchem@cf@action% -}% -\def\mhchem@cf@continue{% - \futurelet\mhchem@cf@lookahead\mhchem@cf@i% -}% -\def\mhchem@cf@gobbleNextToken#1{% - \mhchem@cf@continue% -}% -\def\mhchem@cf@appendNextToken#1#2{% - \mhchem@appendToks{#1}{#2}% - \mhchem@cf@continue% + \__mhchem_cf{#1}{#2}% } -\def\mhchem@cf@appendNextTokenAsMathrm#1#2{% - \mhchem@appendToks{#1}{\ensuremath{\mathrm{#2}}}% - \mhchem@cf@continue% -} -\def\mhchem@cf@appendNextGroup#1#2{% - \mhchem@appendToks{#1}{{#2}}% - \mhchem@cf@continue% -} -\def\mhchem@cf@appendNextGroupAsMath#1#2{% - \mhchem@appendToks{#1}{\text{\ensuremath{#2}}}% - \mhchem@cf@continue% -} -\def\mhchem@cf@append#1#2#3{% - \mhchem@appendToks{#1}{#2}% - \mhchem@cf@continue% -}% -\def\mhchem@cf@appendMath#1#2#3${% - \mhchem@appendToks{#1}{\text{\ensuremath{#3}}}% - \mhchem@cf@continue% -}% -\def\mhchem@cf@appendMathAsGroup#1#2#3${% - \mhchem@appendToks{#1}{{\text{\ensuremath{#3}}}}% - \mhchem@cf@continue% -}% +\tl_new:N \__mhchem_cf_state_tl +\bool_new:N \__mhchem_cf_startedWithBond_bool +\bool_new:N \__mhchem_cf_cfActive_bool +\bool_set_false:N \__mhchem_cf_cfActive_bool +\int_new:N \__mhchem_option_version_int +\cs_new:Npn \__mhchem_cf #1#2 + { + \group_begin: + \int_set:Nn \__mhchem_option_version_int { \mhchem@option@version } + \def\sbond{{\ensuremath{-}}}% + \ifnum 2=\mhchem@option@version% + \let\bond\sbond% + \else\ifnum 2<\mhchem@option@version% + \DeclareRobustCommand*\bond{\mhchem@bond}% + \fi\fi% + \DeclareRobustCommand\dbond{\rlap{\protect\raisebox{.2ex}{\sbond}}\protect\raisebox{-.2ex}{\sbond}}% + \DeclareRobustCommand\tbond{\rlap{\protect\raisebox{.4ex}{\sbond}}% + \rlap{\sbond}\protect\raisebox{-.4ex}{\sbond}}% + \def\hyphen{\mhchem@hyphen}% + \bool_if:NF \__mhchem_cf_cfActive_bool + { + \bool_set_true:N \__mhchem_cf_cfActive_bool + \mode_if_math:F + { + \def\mhchem@option@alwaystextmode{1} + \mhchem@option@textFont + } + \str_if_eq:nnTF { 1 } { \mhchem@option@alwaystextmode } + { + \cs_set:Npx \mhchem@mathOrText ##1 { \exp_not:N \text{##1} } + \cs_set:Npx \mhchem@mathOrText@ii ##1##2 { ##2 } + } + { + \int_compare:nTF { 1 < \mhchem@option@version } + { + \cs_set:Npx \mhchem@mathOrText ##1 + { + \mode_if_math:TF { \exp_not:N \mhchem@option@mathFont{##1} } { \exp_not:N \text{##1} } + } + \cs_set:Npx \mhchem@mathOrText@ii ##1##2 + { + \mode_if_math:TF { \exp_not:N \mhchem@option@mathFont{##1} } { ##2 } + } + } + { + \cs_set:Npx \mhchem@mathOrText ##1 + { + \mode_if_math:TF { ##1 } { \exp_not:N \text{##1} } + } + \cs_set:Npx \mhchem@mathOrText@ii ##1##2 + { + \mode_if_math:TF { ##1 } { ##2 } + } + } + } + } + \tl_set:Nn \__mhchem_cf_state_tl { s } + \bool_set_false:N \__mhchem_cf_startedWithBond_bool + \__mhchem_cf_resetOutput: + \tl_clear_new:N \__mhchem_cf_result_tl + \__mhchem_cf_loop: #2 \q_recursion_stop + \str_if_eq:nnTF {#1} {} + { \ensuremath{\tl_use:N \__mhchem_cf_result_tl} } + { \ensuremath{\overset{#1}{\tl_use:N \__mhchem_cf_result_tl}} } + \bool_set_false:N \__mhchem_cf_cfActive_bool + \group_end: + } +\cs_new:Nn \__mhchem_cf_loop: + { + \peek_meaning_remove:NTF \q_recursion_stop + { + \str_case:Vnn { \__mhchem_cf_state_tl } + { + { - } + { + \bool_if:NTF \__mhchem_cf_startedWithBond_bool + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn \__mhchem_cf_result_tl {\sbond} + } + { \tl_put_right:Nn \__mhchem_cf_sup_tl {-} } + } + { 1 } + { \tl_set:Nn \__mhchem_cf_state_tl {9} } + } + {} + \__mhchem_cf_outputAndReset: + }{ + \peek_meaning:NTF \relax + { \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: }{ + \peek_meaning:NTF \protect + { \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: }{ + \str_case:Vnn { \__mhchem_cf_state_tl } + { + { - } + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn \__mhchem_cf_result_tl {\sbond} + \tl_set:Nn \__mhchem_cf_state_tl { + } + \__mhchem_cf_loop: + } + { s } + { + \peek_charcode:NTF - + { + \int_compare:nTF { 1 < \__mhchem_option_version_int } + { + \tl_set:Nn \__mhchem_cf_state_tl { - } + \bool_set_true:N \__mhchem_cf_startedWithBond_bool + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \tl_set:Nn \__mhchem_cf_state_tl { + } + \tl_put_right:Nn \__mhchem_cf_sup_tl { - } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF = + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \dbond } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ## + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \tbond } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ^ + { + \tl_set:Nn \__mhchem_cf_state_tl { p } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF _ + { + \tl_set:Nn \__mhchem_cf_state_tl { q } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ` + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { P } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF , + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { Q } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \tl_set:Nn \__mhchem_cf_state_tl { 1 } + \tl_put_right:Nn \__mhchem_cf_sub_tl { {,} } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF . + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF * + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF + + { + \tl_set:Nn \__mhchem_cf_state_tl { + } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop: + }{ + \peek_charcode:NTF | + { + \let\mhchem@cf@action\mhchem@cf@switchState + }{ + \peek_charcode:NTF ( + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ) + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { a } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF [ + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ] + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { a } + \__mhchem_cf_loop: + }{ + \peek_catcode:NTF \mhchem@macro + { + \tl_set:Nn \__mhchem_cf_state_tl { c } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + }{ + \peek_catcode:NTF a + { + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn + \__mhchem_cf_element_tl \__mhchem_cf_loop: + }{ + \peek_catcode:NTF 1 + { + \tl_set:Nn \__mhchem_cf_state_tl { 1 } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + }{ + \peek_catcode:oTF \c_group_begin_token + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + } + { + \tl_set:Nn \__mhchem_cf_state_tl { 1 } + \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop: + } + }{ + \peek_catcode_remove:oTF \c_math_toggle_token + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + { + \tl_set:Nn \__mhchem_cf_state_tl { 1 } + \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + } + { + \msg_error:nnn { mhchem } { cf/unexpected-input } + } + }}}}}}}}}}}}}}}}}}} + } + { C } + { + \peek_catcode:oTF \c_group_begin_token + { + \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + } + \tl_set:Nn \__mhchem_cf_state_tl { c } + } + { c } + { + \peek_catcode:oTF \c_group_begin_token + { + \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + } + { + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_cf_loop: + } + } + { 1 } + { + \peek_charcode:NTF 1 + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF 2 + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF 3 + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF 4 + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF 5 + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF 6 + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF 7 + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF 8 + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF 9 + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF 0 + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF . + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \peek_charcode:NTF , + { + \tl_put_right:Nn \__mhchem_cf_element_tl { {,} } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \peek_charcode:NTF / + { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { s } + \__mhchem_cf_loop: + }}}}}}}}}}}}} + } + { a } + { + \peek_charcode:NTF - + { + \tl_set:Nn \__mhchem_cf_state_tl { - } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF = + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \dbond } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ## + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \tbond } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ^ + { + \tl_set:Nn \__mhchem_cf_state_tl { k } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF _ + { + \tl_set:Nn \__mhchem_cf_state_tl { f } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ` + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { E } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF , + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { F } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \tl_set:Nn \__mhchem_cf_state_tl { 1 } + \tl_put_right:Nn \__mhchem_cf_sub_tl { , } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF . + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF * + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF + + { + \tl_set:Nn \__mhchem_cf_state_tl { + } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop: + }{ + \peek_charcode:NTF | + { + \PackageWarning{mhchem}{The symbol | is not allowed here} + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ( + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ) + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { a } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF [ + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ] + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { a } + \__mhchem_cf_loop: + }{ + \peek_catcode:NTF \mhchem@macro + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { c } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + }{ + \peek_catcode:NTF a + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + }{ + \peek_catcode:NTF 1 + { + \tl_set:Nn \__mhchem_cf_state_tl { 2 } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop: + }{ + \peek_catcode:oTF \c_group_begin_token + { + \__mhchem_cf_outputAndReset: + \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + }{ + \peek_catcode_remove:oTF \c_math_toggle_token + { + \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_element_tl \__mhchem_cf_loop: + }{ + \msg_error:nnn { mhchem } { cf/unexpected-input } + }}}}}}}}}}}}}}}}}}}} + } + { 2 } + { + \peek_charcode:NTF - + { + \tl_set:Nn \__mhchem_cf_state_tl { - } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF = + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn \__mhchem_cf_result_tl {\dbond} + \tl_set:Nn \__mhchem_cf_state_tl { s } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ## + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn \__mhchem_cf_result_tl {\tbond} + \tl_set:Nn \__mhchem_cf_state_tl { s } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ^ + { + \tl_set:Nn \__mhchem_cf_state_tl { e } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF _ + { + \tl_set:Nn \__mhchem_cf_state_tl { f } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ` + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { E } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF , + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { F } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \tl_put_right:Nn \__mhchem_cf_sub_tl { , } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF . + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} } + { s } + \__mhchem_cf_loop: + } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF * + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF + + { + \tl_set:Nn \__mhchem_cf_state_tl { + } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop: + }{ + \peek_charcode:NTF | + { + \PackageWarning{mhchem}{The symbol | is not allowed here} + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ( + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ) + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { a } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF [ + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ] + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { a } + \__mhchem_cf_loop: + }{ + \peek_catcode:NTF \mhchem@macro + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { c } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + }{ + \peek_catcode:NTF a + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + }{ + \peek_catcode:NTF 1 + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop: + }{ + \peek_catcode:oTF \c_group_begin_token + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { s } + \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + }{ + \peek_catcode_remove:oTF \c_math_toggle_token + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { s } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + }}}}}}}}}}}}}}}}}}}} + } + { e } + { + \tl_set:Nn \__mhchem_cf_state_tl { + } + \peek_catcode_remove:oTF \c_math_toggle_token + { + \__mhchem_loopHelper_appendMathAsGroup:NNw \__mhchem_cf_sup_tl \__mhchem_cf_loop: + } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop: + } + } + { k } + { + \tl_set:Nn \__mhchem_cf_state_tl { + } + \peek_catcode_remove:oTF \c_math_toggle_token + { + \__mhchem_loopHelper_appendMathAsGroup:NNw \__mhchem_cf_supA_tl \__mhchem_cf_loop: + } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_supA_tl \__mhchem_cf_loop: + } + } + { f } + { + \tl_set:Nn \__mhchem_cf_state_tl { + } + \peek_catcode_remove:oTF \c_math_toggle_token + { + \__mhchem_loopHelper_appendMathAsGroup:NNw \__mhchem_cf_sub_tl \__mhchem_cf_loop: + } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop: + } + } + { p } + { + \tl_set:Nn \__mhchem_cf_state_tl { * } + \peek_catcode_remove:oTF \c_math_toggle_token + { + \__mhchem_loopHelper_appendMathAsGroup:NNw \__mhchem_cf_presup_tl \__mhchem_cf_loop: + } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_presup_tl \__mhchem_cf_loop: + } + } + { q } + { + \tl_set:Nn \__mhchem_cf_state_tl { * } + \peek_catcode_remove:oTF \c_math_toggle_token + { + \__mhchem_loopHelper_appendMathAsGroup:NNw \__mhchem_cf_presub_tl \__mhchem_cf_loop: + } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_presub_tl \__mhchem_cf_loop: + } + } + { E } + { + \tl_set:Nn \__mhchem_cf_state_tl { + } + \__mhchem_loopHelper_appendNextTokenAsMathrm:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop: + } + { F } + { + \tl_set:Nn \__mhchem_cf_state_tl { + } + \__mhchem_loopHelper_appendNextTokenAsMathrm:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop: + } + { P } + { + \tl_set:Nn \__mhchem_cf_state_tl { * } + \__mhchem_loopHelper_appendNextTokenAsMathrm:NNn \__mhchem_cf_presup_tl \__mhchem_cf_loop: + } + { Q } + { + \tl_set:Nn \__mhchem_cf_state_tl { * } + \__mhchem_loopHelper_appendNextTokenAsMathrm:NNn \__mhchem_cf_presub_tl \__mhchem_cf_loop: + } + { + } + { + \peek_charcode:NTF - + { + \tl_set:Nn \__mhchem_cf_state_tl { - } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF = + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \dbond } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ## + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \tbond } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ^ + { + \tl_set:Nn \__mhchem_cf_state_tl { e } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF _ + { + \tl_set:Nn \__mhchem_cf_state_tl { f } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ` + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { E } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF , + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { F } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { a } + \tl_put_right:Nn \__mhchem_cf_element_tl { , } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF . + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} } + { s } + \__mhchem_cf_loop: + } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF * + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn + { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF + + { + \tl_set:Nn \__mhchem_cf_state_tl { + } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop: + }{ + \peek_charcode:NTF | + { + \PackageWarning{mhchem}{The symbol | is not allowed here} + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ( + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ) + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { a } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF [ + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ] + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn + { a } + \__mhchem_cf_loop: + }{ + \peek_catcode:NTF \mhchem@macro + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { c } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + }{ + \peek_catcode:NTF a + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + }{ + \peek_catcode:NTF 1 + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + }{ + \peek_catcode:oTF \c_group_begin_token + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { s } + \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + }{ + \peek_catcode_remove:oTF \c_math_toggle_token + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { s } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + }}}}}}}}}}}}}}}}}}}} + } + { * } + { + \peek_charcode:NTF ^ + { + \tl_set:Nn \__mhchem_cf_state_tl { p } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF _ + { + \tl_set:Nn \__mhchem_cf_state_tl { q } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ` + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { P } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \tl_set:Nn \__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF , + { + \int_compare:nTF { 4 > \mhchem@option@version } + { + \tl_set:Nn \__mhchem_cf_state_tl { Q } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + { + \tl_set:Nn \__mhchem_cf_state_tl { a } + \tl_put_right:Nn \__mhchem_cf_element_tl { , } + \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: + } + } + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \__mhchem_cf_state_tl { s } + \__mhchem_cf_loop: + }}}} + } + } + { + \msg_error:nnx { mhchem } { cf / unexpected-state } { \__mhchem_cf_state_tl } + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop: + } + }}} + } \def\mhchem@cf@switchState#1#2|{% \ifthenelse{\equal{1}{#2}}{% - \def\mhchem@cf@state{a}% + \tl_set:Nn \__mhchem_cf_state_tl { a }% }{% \PackageWarning{mhchem}{Command |#2| unknown}% }% \mhchem@cf@continue% }% -\newtoks\mhchem@cf@element% -\newtoks\mhchem@cf@amount% -\newtoks\mhchem@cf@sup% -\newtoks\mhchem@cf@presub% -\newtoks\mhchem@cf@presup% -\def\mhchem@cf@output{% - \if s\mhchem@cf@state% - \else\if 1\mhchem@cf@state% - \noexpand\mhchem@mathOrText{\noexpand\mhchem@cf@frac\the\mhchem@cf@amount/\noexpand\mhchem@END{\mhchem@option@skipAfterFracAmount}}% - \else\if 9\mhchem@cf@state% - \noexpand\mhchem@mathOrText{\noexpand\mhchem@cf@frac\the\mhchem@cf@amount/\noexpand\mhchem@END{}}% - \else% - \if\mhchem@option@usenonsimultaneoussubsuperscripts 0\relax% - \noexpand\mhchem@chemfive% - {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presup}}% - {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presub}}% - {\the\mhchem@cf@element}% - {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@amount}}% - {\noexpand\mhchem@cf@replaceMathMinusDot{\the\mhchem@cf@sup}}% - {}% - \else% - \noexpand\mhchem@chemfive% - {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presup}}% - {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presub}}% - {\the\mhchem@cf@element}% - {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@amount}}% - {}% - {\noexpand\mhchem@cf@replaceMathMinusDot{\the\mhchem@cf@sup}}% - \fi% - \fi\fi\fi% +\tl_new:N \__mhchem_cf_presup_tl +\tl_new:N \__mhchem_cf_presub_tl +\tl_new:N \__mhchem_cf_element_tl +\tl_new:N \__mhchem_cf_supA_tl +\tl_new:N \__mhchem_cf_sub_tl +\tl_new:N \__mhchem_cf_sup_tl +\cs_new:Nn \__mhchem_cf_output: + { + \str_case:Vnn { \__mhchem_cf_state_tl } + { + { s } { } + { 1 } + { + \tl_put_right:Nx \__mhchem_cf_result_tl + { \exp_not:N \mhchem@mathOrText { \exp_not:N \mhchem@cf@frac \exp_not:V \__mhchem_cf_element_tl / \exp_not:N \mhchem@END { \mhchem@option@skipAfterFracAmount } } } } + { 9 } + { + \tl_put_right:Nx \__mhchem_cf_result_tl + { \exp_not:N \mhchem@mathOrText { \exp_not:N \mhchem@cf@frac \exp_not:V \__mhchem_cf_element_tl / \exp_not:N \mhchem@END {} } } + } + } + { + \tl_if_empty:NTF \__mhchem_cf_sub_tl + { + \tl_put_right:NV \__mhchem_cf_supA_tl \__mhchem_cf_sup_tl + \tl_clear:N \__mhchem_cf_sup_tl + } + { + \tl_if_empty:NTF \__mhchem_cf_sup_tl + { } + { + \tl_if_empty:NTF \__mhchem_cf_supA_tl + { } + { + \msg_error:nnn { mhchem } { cf/unexpected-two-superscripts } + } + } + } + \tl_put_right:Nx \__mhchem_cf_result_tl + { + \exp_not:N \__mhchem_chemfive:nnnnnn + { \exp_not:N \__mhchem_cf_replaceMath:n { \exp_not:V \__mhchem_cf_presup_tl } } + { \exp_not:N \__mhchem_cf_replaceMath:n { \exp_not:V \__mhchem_cf_presub_tl } } + { \exp_not:V \__mhchem_cf_element_tl } + { \exp_not:N \__mhchem_cf_replaceMathMinusDot:n { \exp_not:V \__mhchem_cf_supA_tl } } + { \exp_not:N \__mhchem_cf_replaceMath:n { \exp_not:V \__mhchem_cf_sub_tl } } + { \exp_not:N \__mhchem_cf_replaceMathMinusDot:n { \exp_not:V \__mhchem_cf_sup_tl } } + } + } + } +\cs_new:Npn \__mhchem_cf_output_aux:NV #1#2 { + #1 { #2 } } -\def\mhchem@cf@outputReset{% - \mhchem@cf@element={}% - \mhchem@cf@amount={}% - \mhchem@cf@sup={}% - \mhchem@cf@presub={}% - \mhchem@cf@presup={}% -} -\def\mhchem@cf@outputAndReset#1{% - \edef\mhchem@cf@outputAndReset@i{#1={\the#1\mhchem@cf@output}}% - \mhchem@cf@outputAndReset@i% - \mhchem@cf@outputReset% -} - - +\cs_new:Nn \__mhchem_cf_resetOutput: + { + \tl_clear:N \__mhchem_cf_presup_tl + \tl_clear:N \__mhchem_cf_presub_tl + \tl_clear:N \__mhchem_cf_element_tl + \tl_clear:N \__mhchem_cf_supA_tl + \tl_clear:N \__mhchem_cf_sub_tl + \tl_clear:N \__mhchem_cf_sup_tl + } +\cs_new:Nn \__mhchem_cf_outputAndReset: + { + \__mhchem_cf_output: + \__mhchem_cf_resetOutput: + } %%% frac \def\mhchem@cf@frac#1/#2\mhchem@END#3{% @@ -1786,152 +1888,137 @@ \def\mhchem@getlastchars#1#2\mhchem@ENDgetlastchars{#2} %%% replaceMath -\newtoks\mhchem@cf@replaceMath@result -\newcommand\mhchem@cf@replaceMath[1]{% - \mhchem@cf@replaceMath@result={}% - \mhchem@cf@replaceMath@continue#1\mhchem@END% - \the\mhchem@cf@replaceMath@result% -} -\def\mhchem@cf@replaceMath@i{% - \ifx\mhchem@END\mhchem@cf@replaceMath@lookahead% - \let\mhchem@cf@replaceMath@action\mhchem@gobble% - \else\if\mhchem@char@lbrace\mhchem@cf@replaceMath@lookahead% - \let\mhchem@cf@replaceMath@action\mhchem@cf@replaceMath@appendNextGroup% - \else\if $\mhchem@cf@replaceMath@lookahead% - \let\mhchem@cf@replaceMath@action\mhchem@cf@replaceMath@appendMath% - \else% - \let\mhchem@cf@replaceMath@action\mhchem@cf@replaceMath@appendNextToken% - \fi\fi\fi% - \mhchem@cf@replaceMath@action% -} -\def\mhchem@cf@replaceMath@continue{% - \futurelet\mhchem@cf@replaceMath@lookahead\mhchem@cf@replaceMath@i% -} -\def\mhchem@cf@replaceMath@appendNextGroup#1{% - \mhchem@appendToks{\mhchem@cf@replaceMath@result}{{#1}}% - \mhchem@cf@replaceMath@continue% -} -\def\mhchem@cf@replaceMath@appendNextToken#1{% - \mhchem@appendToks{\mhchem@cf@replaceMath@result}{#1}% - \mhchem@cf@replaceMath@continue% -} -\def\mhchem@cf@replaceMath@appendMath#1#2${% - \mhchem@appendToks{\mhchem@cf@replaceMath@result}{\text{\ensuremath{#2}}}% - \mhchem@cf@replaceMath@continue% -} +\tl_new:N \__mhchem_cf_replaceMath_result_tl +\cs_new:Npn \__mhchem_cf_replaceMath:n #1 + { + \tl_clear:N \__mhchem_cf_replaceMath_result_tl + \__mhchem_cf_replaceMath_loop: #1 \q_recursion_stop + \__mhchem_cf_replaceMath_result_tl + } +\cs_new:Nn \__mhchem_cf_replaceMath_loop: + { + \peek_meaning:NTF \q_recursion_stop + { \use_none:n } + { + \peek_catcode_remove:oTF \c_math_toggle_token % math $ + { \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_replaceMath_result_tl \__mhchem_cf_replaceMath_loop: } + { + \peek_catcode:oTF \c_group_begin_token + { \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_replaceMath_result_tl \__mhchem_cf_replaceMath_loop: } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_replaceMath_result_tl \__mhchem_cf_replaceMath_loop: + }}} + } %%% replaceMathMinusDot -\newtoks\mhchem@cf@replaceMathMinusDot@result -\newcommand\mhchem@cf@replaceMathMinusDot[1]{% - \mhchem@cf@replaceMathMinusDot@result={}% - \mhchem@cf@replaceMathMinusDot@continue#1\mhchem@END% - \the\mhchem@cf@replaceMathMinusDot@result% -} -\def\mhchem@cf@replaceMathMinusDot@i{% - \ifx\mhchem@END\mhchem@cf@replaceMathMinusDot@lookahead% - \let\mhchem@cf@replaceMathMinusDot@action\mhchem@gobble% - \else\expandafter\ifx\mhchem@char@hyphen@other\mhchem@cf@replaceMathMinusDot@lookahead\relax% - \def\mhchem@cf@replaceMathMinusDot@action{\mhchem@cf@replaceMathMinusDot@append{\mhchem@mathOrText@ii{-}{\mhchem@option@textminus}}}% - \else\expandafter\ifx\mhchem@char@hyphen@active\mhchem@cf@replaceMathMinusDot@lookahead\relax% - \def\mhchem@cf@replaceMathMinusDot@action{\mhchem@cf@replaceMathMinusDot@append{\mhchem@mathOrText@ii{-}{\mhchem@option@textminus}}}% - \else\if .\mhchem@cf@replaceMathMinusDot@lookahead\relax% - \def\mhchem@cf@replaceMathMinusDot@action{\mhchem@cf@replaceMathMinusDot@append{\ensuremath{\textbf{\fontfamily{cmr}\selectfont\textperiodcentered}}}}% - \else\if\mhchem@char@lbrace\mhchem@cf@replaceMathMinusDot@lookahead% - \let\mhchem@cf@replaceMathMinusDot@action\mhchem@cf@replaceMathMinusDot@appendNextGroup% - \else\if $\mhchem@cf@replaceMathMinusDot@lookahead% - \let\mhchem@cf@replaceMathMinusDot@action\mhchem@cf@replaceMathMinusDot@appendMath% - \else% - \let\mhchem@cf@replaceMathMinusDot@action\mhchem@cf@replaceMathMinusDot@appendNextToken% - \fi\fi\fi\fi\fi\fi% - \mhchem@cf@replaceMathMinusDot@action% -} -\def\mhchem@cf@replaceMathMinusDot@continue{% - \futurelet\mhchem@cf@replaceMathMinusDot@lookahead\mhchem@cf@replaceMathMinusDot@i% -} -\def\mhchem@cf@replaceMathMinusDot@append#1#2{% - \mhchem@appendToks{\mhchem@cf@replaceMathMinusDot@result}{#1}% - \mhchem@cf@replaceMathMinusDot@continue% -} -\def\mhchem@cf@replaceMathMinusDot@appendNextGroup#1{% - \mhchem@appendToks{\mhchem@cf@replaceMathMinusDot@result}{{#1}}% - \mhchem@cf@replaceMathMinusDot@continue% -} -\def\mhchem@cf@replaceMathMinusDot@appendNextToken#1{% - \mhchem@appendToks{\mhchem@cf@replaceMathMinusDot@result}{#1}% - \mhchem@cf@replaceMathMinusDot@continue% -} -\def\mhchem@cf@replaceMathMinusDot@appendMath#1#2${% - \mhchem@appendToks{\mhchem@cf@replaceMathMinusDot@result}{\text{\ensuremath{#2}}}% - \mhchem@cf@replaceMathMinusDot@continue% -}% +\tl_new:N \__mhchem_cf_replaceMathMinusDot_result_tl +\cs_new:Npn \__mhchem_cf_replaceMathMinusDot:n #1 + { + \tl_clear:N \__mhchem_cf_replaceMathMinusDot_result_tl + \__mhchem_cf_replaceMathMinusDot_loop: #1 \q_recursion_stop + \__mhchem_cf_replaceMathMinusDot_result_tl + } +\cs_new:Nn \__mhchem_cf_replaceMathMinusDot_loop: + { + \peek_meaning:NTF \q_recursion_stop + { \use_none:n } + { + \peek_charcode_remove:NTF - + { + \tl_put_right:Nn \__mhchem_cf_replaceMathMinusDot_result_tl + { \mhchem@mathOrText@ii{-}{\mhchem@option@textminus} } + \__mhchem_cf_replaceMathMinusDot_loop: + }{ + \peek_charcode_remove:NTF . + { + \tl_put_right:Nn \__mhchem_cf_replaceMathMinusDot_result_tl + { \ensuremath{\textbf{\fontfamily{cmr}\selectfont\textperiodcentered}} } + \__mhchem_cf_replaceMathMinusDot_loop: + }{ + \peek_catcode_remove:oTF \c_math_toggle_token % math $ + { \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_replaceMathMinusDot_result_tl \__mhchem_cf_replaceMathMinusDot_loop: } + { + \peek_catcode:oTF \c_group_begin_token + { \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_replaceMathMinusDot_result_tl \__mhchem_cf_replaceMathMinusDot_loop: } + { + \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_replaceMathMinusDot_result_tl \__mhchem_cf_replaceMathMinusDot_loop: + }}}}} + } %%%%%%%%%%%%%%%%%%%%% %%% @chemfive %%% %%%%%%%%%%%%%%%%%%%%% -\newcommand*\mhchem@chemfive[6]{% - {% +\cs_new:Npn \__mhchem_chemfive:nnnnnn #1#2#3#4#5#6 + { \mhchem@prepostscript% - [\mhchem@mathOrText{\smash[t]{2+}}]% + {\mhchem@mathOrText{\smash[t]{2+}}}% + {\mhchem@mathOrText{\smash[t]{2}}}% {\mhchem@mathOrText{#1}}% {\mhchem@mathOrText{#2}}% {\mhchem@mathOrText@ii{\mhchem@option@mathFont{#3}}{\text{#3}}}% {\mhchem@mathOrText{#4}}% {\mhchem@mathOrText{#5}}% {\mhchem@mathOrText{#6}}% - }% -} + } +\ExplSyntaxOff + %%% @prepostscript \newlength\mhchem@prepostscript@tmp@i% \newlength\mhchem@prepostscript@tmp@ii% -\newcommand*\mhchem@prepostscript[7][]{% +\newcommand*\mhchem@prepostscript[8]{% \m@th% \ensuremath{% - \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#2#3$}}% + \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#3#4$}}% \ifdim\mhchem@prepostscript@tmp@i>0pt% - \setlength{\mhchem@prepostscript@tmp@i}{\widthof{${}^{#2}$}}% - \setlength{\mhchem@prepostscript@tmp@ii}{\widthof{${}_{#3}$}}% + \setlength{\mhchem@prepostscript@tmp@i}{\widthof{${}^{#3}$}}% + \setlength{\mhchem@prepostscript@tmp@ii}{\widthof{${}_{#4}$}}% \ifdim\mhchem@prepostscript@tmp@i<\mhchem@prepostscript@tmp@ii% \setlength{\mhchem@prepostscript@tmp@i}{\mhchem@prepostscript@tmp@ii}\fi% - \vphantom{#4}% + \vphantom{#5}% {}% ^{% \mhchem@mathboxright{\mhchem@prepostscript@tmp@i}{% - \vphantom{#6#7}% + \vphantom{#6#8}% \vphantom{#1}% - #2% + #3% }% }% _{% \mhchem@mathboxright{\mhchem@prepostscript@tmp@i}{% - \vphantom{#5}% - #3% + \vphantom{#7}% + \vphantom{#2}% + #4% }% }% \mhchem@minispace% \fi% - #4% - \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#5#6$}}% + #5% + \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#7#6$}}% \ifdim\mhchem@prepostscript@tmp@i>0pt% _{% - \vphantom{#3}% - #5% + \vphantom{#4}% + \vphantom{#2}% + #7% }% ^{% - \vphantom{#2#7}% + \vphantom{#3#8}% \vphantom{#1}% #6% }% \fi% - \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#7$}}% + \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#8$}}% \ifdim\mhchem@prepostscript@tmp@i>0pt% \mhchem@minispace% {}% - _{\vphantom{#3#5}}% + _{% + \vphantom{#4#7}% + \vphantom{#2}% + }% ^{% - \vphantom{#2#6}% + \vphantom{#3#6}% \vphantom{#1}% - #7% + #8% }% \fi% }% @@ -2009,10 +2096,6 @@ \define@key{mhchem}{minus-sidebearing-right}{\setlength\mhchem@option@minussidebearingright{#1}} -% Replicate layout of MS Word (superscript after subscript, not over) -\def\mhchem@option@usenonsimultaneoussubsuperscripts{0}% -% There is no key defined for this option, as to promote good typographic conventions. - \mhchem@definearrows{font} \define@key{mhchem}{arrows}{% \ifthenelse{\equal{pgf}{#1} \or \equal{pgf-filled}{#1}}{% @@ -2072,7 +2155,7 @@ \def\mhchem@option@version{3}% \else\ifnum 4=\mhchem@option@version% \PackageWarningNoLine{mhchem}{% - You are using version 3.09 of mhchem. You entered\MessageBreak + You are using version 3.xx of mhchem. You entered\MessageBreak the parameter version=4. This means, you are using\MessageBreak some beta features of mhchem that are subject\MessageBreak to change without notice}% @@ -2086,4 +2169,4 @@ \newcommand*\mhchem@cmath[1]{\ensuremath{\text{\ensuremath{#1}}}}% \newcommand*\cmath[1]{\mhchem@cmath{#1}} \DeclareRobustCommand\cf[2][]{\mhchem@cf[#1]{#2}} -\fi +\fi
\ No newline at end of file |