texlive[41829] Master/texmf-dist: mhchem (9aug16)

commits+karl at tug.org commits+karl at tug.org
Wed Aug 10 00:39:41 CEST 2016


Revision: 41829
          http://tug.org/svn/texlive?view=revision&revision=41829
Author:   karl
Date:     2016-08-10 00:39:41 +0200 (Wed, 10 Aug 2016)
Log Message:
-----------
mhchem (9aug16)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/mhchem/README
    trunk/Master/texmf-dist/doc/latex/mhchem/mhchem.pdf
    trunk/Master/texmf-dist/doc/latex/mhchem/mhchem.tex
    trunk/Master/texmf-dist/tex/latex/mhchem/mhchem.sty

Modified: trunk/Master/texmf-dist/doc/latex/mhchem/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/mhchem/README	2016-08-09 01:17:15 UTC (rev 41828)
+++ trunk/Master/texmf-dist/doc/latex/mhchem/README	2016-08-09 22:39:41 UTC (rev 41829)
@@ -1,7 +1,7 @@
-The mhchem Bundle 2016-02-09
+The mhchem Bundle 2016-08-08
 
 containing
-- mhchem v4.04
+- mhchem v4.05
 - hpstatement v1.02
 - rsphrase v3.11
 

Modified: trunk/Master/texmf-dist/doc/latex/mhchem/mhchem.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/mhchem/mhchem.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/mhchem/mhchem.tex	2016-08-09 01:17:15 UTC (rev 41828)
+++ trunk/Master/texmf-dist/doc/latex/mhchem/mhchem.tex	2016-08-09 22:39:41 UTC (rev 41829)
@@ -67,7 +67,7 @@
   The mhchem Bundle\\[0.3em]
   \Large\textmd{%
     Documentation for the \LaTeX{} Packages\\
-    mhchem v4.04,\\% check
+    mhchem v4.05,\\% check
     hpstatement v1.02 and\\
     rsphrase v3.11}%
 }
@@ -76,7 +76,7 @@
   mhchem\makebox[0pt][l]{\textcolor{white}{NOSPAM}}@MartinHensel\makebox[1pt][l]{\textcolor{white}{.}}.de%
 }
 \date{%
-  2016-02-09% check
+  2016-08-08% check
 }
 \maketitle
 
@@ -268,7 +268,7 @@
 Both, \macro{left} and \macro{right} macros, need to be in the same math environment, so you might have to put \macro{ce} into \verb|$| into \macro{ce}, but that's fine.
 
 $\displaystyle\ce{CH4 + 2 $\left( \ce{O2 + 79/21 N2} \right)$}$\par
-{\raggedleft\verb|\[\ce{CH4 + 2 $\left( \ce{O2 + 79/21 N2} \right)$}\]|\par}
+{\raggedleft\verb|\ce{CH4 + 2 $\left( \ce{O2 + 79/21 N2} \right)$}|\par}
 
 
 \section{States of Aggregation}
@@ -303,7 +303,7 @@
 
 \section {Variables like x, n, 2n+1}
 
-Typographical conventions say that variables are typeset in italic font, while othes (like chemical element) are typeset in an upright font.
+Typographical conventions say that variables are typeset in italic font, while other entities (like chemical elements) are typeset in an upright font.
 
 mhchem tries to recognize common patterns and use the correct (italic) font, like the $x$ and $2n$ in the following examples.
 
@@ -325,9 +325,9 @@
 
 Just write \macro{alpha} etc. This works in text mode and math mode.
 
-Typographical conventions say that variables are typeset in italic font, while othes (like chemical element) are typeset in an upright font.
+Typographical conventions say that variables are typeset in italic font, while other entities (like chemical elements) are typeset in an upright font.
 
-Here, the Greek character is \emph{not} a variable that stands for a number, therefore an unright-font is used.
+Here, the Greek character is \emph{not} a variable that stands for a number, therefore an upright font is used.
 
 \begin{SideBySideExample}[xrightmargin=4cm]
   \ce{\mu-Cl}
@@ -359,7 +359,6 @@
 \end{SideBySideExample}
 
 In font-corrected math mode, mhchem regonizes some common patterns and prints them font-corrected (e.\,g. for use in headings). Otherwise, it will fall back to `full math mode'.
-It is a full math mode.
 
 \begin{SideBySideExample}[xrightmargin=4cm]
   $\ce{NO_$x$}$ \sffamily\bfseries \ce{NO_$x$}
@@ -430,7 +429,7 @@
   \ce{A-B=C#D}
 \end{SideBySideExample}
 
-mhchem tries to differentiate if \verb|\ce{-}| should be a bond, a charge or even a hyphen.
+mhchem tries to differentiate whether \verb|\ce{-}| should be a bond, a charge or a hyphen.
 
 The \verb|#| bond might not work if you pass it through other commands. In this case, use \verb|\bond{3}| instead.
 
@@ -470,8 +469,9 @@
 
 \makebox[3cm][l]{\ce{A -> B}}\verb|\ce{A -> B}|\\
 \makebox[3cm][l]{\ce{A <- B}}\verb|\ce{A <- B}|\\
-\makebox[3cm][l]{\ce{A <-> B}}\verb|\ce{A <-> B}% should not be used according to IUPAC|\\ % Green Book p.52
+\makebox[3cm][l]{\ce{A <-> B}}\verb|\ce{A <-> B}% not to be used according to IUPAC|\\ % Green Book p.52
 \makebox[3cm][l]{\ce{A <--> B}}\verb|\ce{A <--> B}|\\
+\makebox[3cm][l]{\ce{A <=> B}}\verb|\ce{A <=> B}|\\
 \makebox[3cm][l]{\ce{A <=>> B}}\verb|\ce{A <=>> B}|\\
 \makebox[3cm][l]{\ce{A <<=> B}}\verb|\ce{A <<=> B}|
 
@@ -871,7 +871,7 @@
 
 \begin{SideBySideExample}[xrightmargin=3cm]
   \mhchemoptions{layout=stacked}
-  \ce{CrO4^2-}% not according to IUPAC
+  \ce{CrO4^2-}% not IUPAC-conform
 \end{SideBySideExample}
 
 
@@ -899,6 +899,14 @@
 
 \section{Most Recent Changes}% check
 
+\minisec{2016-08-07 mhchem v4.05}
+\begin{compactitem}
+\item extended variable recognition -- single lower-case letters in superscripts/subscripts are typeset in an italic font
+\item improved bond/charge/hyphen distinction 
+\item fixed error handling for nonstopmode
+\end{compactitem}
+
+
 \minisec{2016-02-07 mhchem v4.04}
 \begin{compactitem}
 \item support for negative subscripts, \verb|\ce{^0_-1n-}|

Modified: trunk/Master/texmf-dist/tex/latex/mhchem/mhchem.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/mhchem/mhchem.sty	2016-08-09 01:17:15 UTC (rev 41828)
+++ trunk/Master/texmf-dist/tex/latex/mhchem/mhchem.sty	2016-08-09 22:39:41 UTC (rev 41829)
@@ -27,13 +27,13 @@
 % This work consists of all files listed in manifest.txt.
 %
 %
-\ProvidesPackage{mhchem}[2016/02/07 v4.04 for typesetting chemical formulae]
+\ProvidesPackage{mhchem}[2016/08/07 v4.05 for typesetting chemical formulae]
 \RequirePackage{expl3}
 \RequirePackage{l3keys2e}
 \RequirePackage{l3regex}
 \RequirePackage{calc}[1998/07/07]
 \RequirePackage{amsmath}
-\RequirePackage{chemgreek}[2015/04/09]
+\RequirePackage{chemgreek}[2016/02/10]
 \RequirePackage{graphics}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -47,22 +47,16 @@
 %%%%%%%%%%   global helpers   %%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\def\mhchem at appendToks#1#2{%
-  #1=\expandafter{\the#1#2}%
-}
-
 \ExplSyntaxOn
 
 \cs_generate_variant:Nn \str_if_eq:nnTF { Vn }
 \cs_generate_variant:Nn \str_case:nnF { VnF }
-\cs_generate_variant:Nn \regex_match:nnTF { nV }
-\cs_generate_variant:Nn \regex_match:nnTF { no }
 \cs_generate_variant:Nn \regex_match:NnTF { NV }
 \cs_generate_variant:Nn \regex_match:NnTF { No }
 \cs_new_protected:Npn \__mhchem_regex_peek_compile:Nn #1#2
   {
     \regex_const:Nn #1 { \A the\ (character|letter)\ (#2) \Z }
-}
+  }
 
 \cs_new_protected:Npn \__mhchem_regex_peek:NTF #1#2#3
   {
@@ -75,17 +69,20 @@
       }
   }
 
-\regex_const:Nn \l__mhchem_regex_digitCommaDigit_regex { \d\,\d }
-\regex_const:Nn \l__mhchem_regex_oneLetter_regex { [nmptx] }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%   RegExp helpers   %%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\regex_const:Nn \l__mhchem_regex_oneLowercaseLetter_regex { [a-z] }
 \regex_const:Nn \l__mhchem_regex_hyphen_regex { - }
 \regex_const:Nn \l__mhchem_regex_letters_regex { [a-zA-Z]+ }
 \regex_const:Nn \l__mhchem_regex_spaces_regex { [\ ]+ }
 
 \regex_const:Nn \l__mhchem_regex_digits_fregex { \A [0-9]+ \Z}
-\regex_const:Nn \l__mhchem_regex_oneToThreeLetters_fregex { \A (.+) (\([a-z]{1,3}\)) \Z }
-\regex_const:Nn \l__mhchem_regex_oneLetter_fregex { \A [nmptx] \Z }
-\regex_const:Nn \l__mhchem_regex_oneLetterPlus_fregex
-  { \A ([nmptx]|\c{eta|mu|kappa}|\c{__mhchem_cg_withinMathTokens:n}\cB.[nmptx]\cE.|[0-9]+|[0-9]+\/[0-9]+) \Z }
+\regex_const:Nn \l__mhchem_regex_stateOfAggregationAtEnd_fregex { \A (.+) (\([a-z]{1,3}\)) \Z }
+\regex_const:Nn \l__mhchem_regex_oneLowercaseLetter_fregex { \A [a-z] \Z }
+\regex_const:Nn \l__mhchem_regex_oneLowercaseLetterPlus_fregex
+  { \A ( (\c{__mhchem_cg_withinMathTokens:n}\cB.)? ([a-z]|\c{alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega}) (\cE.)? | \(?[0-9]+ | \(?[0-9]+\/[0-9]+ ) \Z }
 \regex_const:Nn \l__mhchem_regex_romanNumeral_fregex { \A [IVX]+ \Z }
 \regex_const:Nn \l__mhchem_regex_bracedGroup_fregex { \A \cB. [^\cE.]* \cE. \Z }
 \regex_const:Nn \l__mhchem_regex_oneGreekLetter_fregex
@@ -92,26 +89,28 @@
   { \A \c{alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Alpha|Beta|Gamma|Delta|Epsilon|Zeta|Eta|Theta|Iota|Kappa|Lambda|Mu|Nu|Xi|Omicron|Pi|Rho|Sigma|Tau|Upsilon|Phi|Chi|Psi|Omega} \Z }
 \regex_const:Nn \l__mhchem_regex_digitOrLetterOrGreek_fregex
   { \A [1-9a-zA-Z\ \~\+\-\,\.\(\)\c{alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Alpha|Beta|Gamma|Delta|Epsilon|Zeta|Eta|Theta|Iota|Kappa|Lambda|Mu|Nu|Xi|Omicron|Pi|Rho|Sigma|Tau|Upsilon|Phi|Chi|Psi|Omega}]+ \Z }
+\regex_const:Nn \l__mhchem_regex_nonFormula_fregex { \A \( [a-z]+ \) \Z }
 \regex_const:Nn \l__mhchem_regex_formula_fregex
-  { \A ([0-9\ \+\-\,\.\(\)]* [nmptx] [0-9\ \+\-\,\.\(\)]*)+ \Z }
+  { \A (  [a-z]  |  ([0-9\ \+\-\,\.\(\)]+ [a-z])+ [0-9\ \+\-\,\.\(\)]*  |  ([a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?  ) \Z }
 \regex_const:Nn \l__mhchem_regex_formulaAmount_fregex
-  { \A \c{__mhchem_cg_withinMathTokens:n}\cB. (([0-9nmptx]+ [\+\-])? [nmptx] ([\+\-] [0-9nmptx]+)?) \cE. \Z }
+  { \A \c{__mhchem_cg_withinMathTokens:n}\cB. (([0-9]*[a-z]? [\+\-])? [a-z] ([\+\-] [0-9]+[a-z]?)?) \cE. \Z }
 \regex_const:Nn \l__mhchem_regex_fraction_fregex
   { \A ([0-9]+)\/([0-9]+) \Z }
 \regex_const:Nn \l__mhchem_regex_fracMacro_fregex { \A \c{frac} \Z }
+\regex_const:Nn \l__mhchem_regex_ceOperator_fregex { \A ( \+ | - | = | \c{pm} | \$\c{pm}\$ | \(v\) | v | \(\^\) | \^ | \. | \* ) \Z }
 
-\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digit_pregex { [ 0-9 ] }
-\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digitOrPlus_pregex { [ 0-9 \+ ] }
-\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digitOrMinus_pregex { [ 0-9 \-] }
-\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digitOrDot_pregex { [ 0-9 . ] }
-\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digitOrSlash_pregex { [ 0-9 \/ ] }
-\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digitOrDotPlus_pregex { [ 0-9 \) \. \/ ] }
-\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_dotOrAsterisk_pregex { [ \. \* ] }
-\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_letter_pregex { [ a-zA-Z ] }
-\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_uppercaseLetterOrParenthesis_pregex { [ A-Z( ] }
+\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digit_pregex { [0-9] }
+\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digitOrPlus_pregex { [0-9 \+] }
+\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digitOrMinus_pregex { [0-9 \-] }
+\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digitOrDot_pregex { [0-9 .] }
+\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digitOrSlash_pregex { [0-9 \/] }
+\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_digitOrDotPlus_pregex { [0-9 \) \. \/] }
+\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_dotOrAsterisk_pregex { [\. \*] }
+\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_letter_pregex { [a-zA-Z] }
+\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_uppercaseLetterOrParenthesis_pregex { [ A-Z \( \[ ] }
 \__mhchem_regex_peek_compile:Nn \l__mhchem_regex_openingBracket_pregex { [ \( \[ ] }
 \__mhchem_regex_peek_compile:Nn \l__mhchem_regex_closingBracket_pregex { [ \) \] \/ ] }
-\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_oneLetter_pregex { [ nmptx ] }
+\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_oneLowercaseLetter_pregex { [a-z] }
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%   loop helpers   %%%%%%%%%%
@@ -172,6 +171,9 @@
 \cs_new_protected:Npn \__mhchem_loopHelper_ignoreNextToken:Nn #1#2
   { #1 }
 
+\cs_new_protected:Npn \__mhchem_loopHelper_breakLoop:w #1#2\q_recursion_stop
+  { #1 }
+
 \ExplSyntaxOff
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -232,7 +234,7 @@
 \bool_new:N \l__mhchem_cesplit_odd_bool
 
 \tl_new:N \l__mhchem_cesplit_tmpa_tl
-\newcommand\cesplit[2]
+\newcommand*\cesplit[2]
   {
     \bool_set_true:N \l__mhchem_cesplit_odd_bool
     \tl_set:Nn \l__mhchem_cesplit_tmpa_tl { \__mhchem_ce:n {#2} }
@@ -260,12 +262,7 @@
 %%%%%%%%%%   \cee   %%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\newcommand*\mhchem at cee[1]{
-  \__mhchem_cee:n {#1}
-}
-
-\ExplSyntaxOn
-\cs_new_protected:Npn \__mhchem_cee:n #1
+\cs_new_protected:Npn \mhchem at cee #1  % \__mhchem_cee:n
   {
     \cesplit
       {
@@ -295,8 +292,6 @@
 \tl_new:N \l__mhchem_ce_arrowTextOne_tl
 \tl_new:N \l__mhchem_ce_arrowTypeTwo_tl
 \tl_new:N \l__mhchem_ce_arrowTextTwo_tl
-\bool_new:N \l__mhchem_ce_potentialSpacing_bool
-\bool_new:N \l__mhchem_ce_potentialSpacingAllowed_bool
 
 \cs_new_protected:Npn \__mhchem_ce:n #1
   {
@@ -407,9 +402,8 @@
     \tl_clear:N \l__mhchem_ce_result_tl
     \tl_clear:N \l__mhchem_ce_part_tl
     \tl_set:Nn \l__mhchem_ce_state_tl { c }
-    \bool_set_false:N \l__mhchem_ce_potentialSpacing_bool
     \int_set:Nn \l__mhchem_ce_distanceFromLastComma_int { 9 }
-    \tl_clear:N \l__mhchem_cf_lastElement_tl
+    \tl_clear:N \l__mhchem_cf_lastNonIsotopeElement_tl
     \__mhchem_ce_loop: #1 \q_recursion_stop
     \int_compare:nTF { \l__mhchem_option_version_int > 1 }
       { \tl_use:N \l__mhchem_ce_result_tl }
@@ -427,19 +421,9 @@
             \str_case:VnF \l__mhchem_ce_part_tl
               {
                 { + }
-                  {
-                    \tl_put_right:Nn \l__mhchem_ce_result_tl
-                      { \__mhchem_output_operatorPlus: }
-                    \tl_clear:N \l__mhchem_ce_part_tl
-                    \tl_set:Nn \l__mhchem_ce_state_tl { a-end }
-                  }
+                  { \__mhchem_ce_output:nn { 0 } { 0 } }
                 { \pm }
-                  {
-                    \tl_put_right:Nn \l__mhchem_ce_result_tl
-                      { \__mhchem_output_operatorPlusMinus: }
-                    \tl_clear:N \l__mhchem_ce_part_tl
-                    \tl_set:Nn \l__mhchem_ce_state_tl { a-end }
-                  }
+                  { \__mhchem_ce_output:nn { 0 } { 0 } }
                 { -> }
                   {
                     \tl_set:Nn \l__mhchem_ce_arrowName_tl { yields }
@@ -482,7 +466,7 @@
       {}
     \peek_meaning_remove:NTF \q_recursion_stop
       {
-        \__mhchem_ce_output:
+        \__mhchem_ce_output:nn { 1 } { 0 }
       }{
     \str_case:VnF \l__mhchem_ce_state_tl
       {
@@ -512,14 +496,10 @@
               {
                 \int_compare:nTF { \l__mhchem_ce_distanceFromLastComma_int = 1 }
                   {
-                    \__mhchem_ce_output:
-                    \bool_set_false:N \l__mhchem_ce_potentialSpacing_bool
+                    \__mhchem_ce_output:nn { 1 } { 0 }
                   }
                   {
-                    \__mhchem_ce_output:
-                    \bool_if:NTF \l__mhchem_ce_potentialSpacingAllowed_bool
-                      { \bool_set_true:N \l__mhchem_ce_potentialSpacing_bool }
-                      { \bool_set_false:N \l__mhchem_ce_potentialSpacing_bool }
+                    \__mhchem_ce_output:nn { 1 } { 1 }
                   }
                 \__mhchem_ce_loop:
               }{
@@ -542,7 +522,7 @@
           {
             \peek_charcode_remove:NTF \c_space_token
               {
-                \__mhchem_ce_output:
+                \__mhchem_ce_output:nn { 0 } { 0 }
                 \__mhchem_ce_loop:
               }{
             \peek_charcode:NTF T
@@ -595,7 +575,7 @@
                           }
                         % else
                           {
-                            \__mhchem_ce_output:
+                            \__mhchem_ce_output:nn { 0 } { 0 }
                             \tl_set:Nn \l__mhchem_ce_state_tl { a-end }
                             \__mhchem_ce_loop:
                           }
@@ -613,7 +593,7 @@
                           }
                         % else
                           {
-                            \__mhchem_ce_output:
+                            \__mhchem_ce_output:nn { 0 } { 0 }
                             \tl_set:Nn \l__mhchem_ce_state_tl { a-end }
                             \__mhchem_ce_loop:
                           }
@@ -621,7 +601,7 @@
                   }
                   % else
                   {
-                    \__mhchem_ce_output:
+                    \__mhchem_ce_output:nn { 0 } { 0 }
                     \tl_set:Nn \l__mhchem_ce_state_tl { a-end }
                     \__mhchem_ce_loop:
                   }
@@ -637,7 +617,7 @@
               }
             % else
               {
-                \__mhchem_ce_output:
+                \__mhchem_ce_output:nn { 0 } { 0 }
                 \tl_set:Nn \l__mhchem_ce_state_tl { a-end }
                 \__mhchem_ce_loop:
               }
@@ -678,7 +658,7 @@
           {
             \peek_charcode_remove:NTF \c_space_token
               {
-                \__mhchem_ce_output:
+                \__mhchem_ce_output:nn { 0 } { 0 }
                 \__mhchem_ce_loop:
               }{
             \peek_charcode:NTF T
@@ -709,7 +689,7 @@
               }
             % else
               {
-                \__mhchem_ce_output:
+                \__mhchem_ce_output:nn { 0 } { 0 }
                 \tl_set:Nn \l__mhchem_ce_state_tl { a-end }
                 \__mhchem_ce_loop:
               }
@@ -724,7 +704,7 @@
               }
             % else
               {
-                \__mhchem_ce_output:
+                \__mhchem_ce_output:nn { 0 } { 0 }
                 \tl_set:Nn \l__mhchem_ce_state_tl { a-end }
                 \__mhchem_ce_loop:
               }
@@ -750,7 +730,7 @@
               }{
             \peek_charcode:NTF ]
               {
-                \__mhchem_ce_output:
+                \__mhchem_ce_output:nn { 0 } { 0 }
                 \tl_set:Nn \l__mhchem_ce_state_tl { a-end }
                 \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_ce_loop:
               }
@@ -764,7 +744,6 @@
           }
         { a-end }
           {
-            \bool_set_false:N \l__mhchem_ce_potentialSpacing_bool
             \tl_set:Nn \l__mhchem_ce_state_tl { c }
             \peek_charcode_remove:NTF \c_space_token
               {
@@ -785,68 +764,110 @@
       }
     }
   }
-\cs_new_protected:Npn \__mhchem_ce_output:
+\tl_new:N \l__mhchem_ce_output_cache_part_tl
+\tl_new:N \l__mhchem_ce_output_cache_state_tl
+\cs_new_protected:Npn \__mhchem_ce_output:nn #1#2  % #1 0/1 can be connected with previous to a cf phrase, #2 0/1 can be connected with following to a cf phrase
   {
-    \bool_set_true:N \l__mhchem_ce_potentialSpacingAllowed_bool
-    \str_case:VnF \l__mhchem_ce_state_tl
+    \regex_match:NVTF \l__mhchem_regex_ceOperator_fregex \l__mhchem_ce_part_tl
       {
+        \__mhchem_ce_output_cache:
+        \tl_set:NV \l__mhchem_ce_output_cache_state_tl \l__mhchem_ce_state_tl
+        \tl_set:NV \l__mhchem_ce_output_cache_part_tl \l__mhchem_ce_part_tl
+        \__mhchem_ce_output_cache:
+      }
+      {
+        \bool_if:nTF
+          {
+            \str_if_eq_p:nn { #1 } { 0 }  ||
+            ( ! \tl_if_empty_p:N \l__mhchem_ce_output_cache_state_tl  &&
+              ! \str_if_eq_p:VV \l__mhchem_ce_output_cache_state_tl \l__mhchem_ce_state_tl )
+          }
+          {
+            \__mhchem_ce_output_cache:
+            \tl_set:NV \l__mhchem_ce_output_cache_state_tl \l__mhchem_ce_state_tl
+            \tl_set:NV \l__mhchem_ce_output_cache_part_tl \l__mhchem_ce_part_tl
+            \str_if_eq:nnT { #2 } { 0 }
+              {
+                \__mhchem_ce_output_cache:
+              }
+          }
+          {
+            \tl_if_empty:NF \l__mhchem_ce_output_cache_part_tl
+              {
+                \tl_if_empty:NF \l__mhchem_ce_part_tl
+                  { \tl_put_right:Nn \l__mhchem_ce_output_cache_part_tl { ~ } }
+              }
+            \tl_put_right:NV \l__mhchem_ce_output_cache_part_tl \l__mhchem_ce_part_tl
+            \tl_set:NV \l__mhchem_ce_output_cache_state_tl \l__mhchem_ce_state_tl
+            \str_if_eq:nnT { #2 } { 0 }
+              { \__mhchem_ce_output_cache: }
+          }
+      }
+    \tl_clear:N \l__mhchem_ce_part_tl
+    \tl_set:Nn \l__mhchem_ce_state_tl { c }
+  }
+\cs_new_protected:Npn \__mhchem_ce_output_cache:
+  {
+    \str_case:VnF \l__mhchem_ce_output_cache_state_tl
+      {
         { c }
           {
-            \str_case:VnF \l__mhchem_ce_part_tl
+            \str_case:VnF \l__mhchem_ce_output_cache_part_tl
               {
+                { + }
+                  {
+                    \tl_put_right:Nn \l__mhchem_ce_result_tl
+                      { \__mhchem_output_operatorPlus: }
+                  }
                 { - }
                   {
                     \tl_put_right:Nn \l__mhchem_ce_result_tl
                       { \__mhchem_output_operatorMinus: }
-                    \bool_set_false:N \l__mhchem_ce_potentialSpacingAllowed_bool
                   }
                 { = }
                   {
                     \tl_put_right:Nn \l__mhchem_ce_result_tl
                       { \__mhchem_output_operatorEquals: }
-                    \bool_set_false:N \l__mhchem_ce_potentialSpacingAllowed_bool
                   }
+                { \pm }
+                  {
+                    \tl_put_right:Nn \l__mhchem_ce_result_tl
+                      { \__mhchem_output_operatorPlusMinus: }
+                  }
                 { $\pm$ }
                   {
                     \tl_put_right:Nn \l__mhchem_ce_result_tl
                       { \__mhchem_output_operatorPlusMinus: }
-                    \bool_set_false:N \l__mhchem_ce_potentialSpacingAllowed_bool
                   }
                 { (v) }
                   {
                     \tl_put_right:Nn \l__mhchem_ce_result_tl
                       { \ensuremath{{}\mathop{\downarrow}{}} }
-                    \bool_set_false:N \l__mhchem_ce_potentialSpacingAllowed_bool
                   }
                 { v }
                   {
                     \tl_put_right:Nn \l__mhchem_ce_result_tl
                       { \ensuremath{{}\mathop{\downarrow}{}} }
-                    \bool_set_false:N \l__mhchem_ce_potentialSpacingAllowed_bool
                   }
                 { (^) }
                   {
                     \tl_put_right:Nn \l__mhchem_ce_result_tl
                       { \ensuremath{{}\mathop{\uparrow}{}} }
-                    \bool_set_false:N \l__mhchem_ce_potentialSpacingAllowed_bool
                   }
                 { ^ }
                   {
                     \tl_put_right:Nn \l__mhchem_ce_result_tl
                       { \ensuremath{{}\mathop{\uparrow}{}} }
-                    \bool_set_false:N \l__mhchem_ce_potentialSpacingAllowed_bool
                   }
                 { . }
                   {
                     \tl_put_right:Nn \l__mhchem_ce_result_tl
                       { \__mhchem_output_additionCompound: }
-                    \bool_set_false:N \l__mhchem_ce_potentialSpacingAllowed_bool
                   }
                 { * }
                   {
                     \tl_put_right:Nn \l__mhchem_ce_result_tl
                       { \__mhchem_output_additionCompound: }
-                    \bool_set_false:N \l__mhchem_ce_potentialSpacingAllowed_bool
                   }
                 {  }
                   {
@@ -856,22 +877,20 @@
               {
                 \int_compare:nTF { \l__mhchem_option_version_int > 3 }
                   {
-                    \bool_if:NT \l__mhchem_ce_potentialSpacing_bool
-                      { \tl_put_right:Nn \l__mhchem_ce_result_tl { \__mhchem_output_skipAfterAmount: } }
                     \regex_match:NVTF
-                      \l__mhchem_regex_oneToThreeLetters_fregex
-                      \l__mhchem_ce_part_tl
+                      \l__mhchem_regex_stateOfAggregationAtEnd_fregex
+                      \l__mhchem_ce_output_cache_part_tl
                       {
                          \regex_replace_once:NnN
-                           \l__mhchem_regex_oneToThreeLetters_fregex
+                           \l__mhchem_regex_stateOfAggregationAtEnd_fregex
                            {
                              \c{__mhchem_cf:nn}\cB[\cE]\cB[ \1 \cE]
                              \c{__mhchem_output_skipBeforeStateOfAggregation:}
                              \c{__mhchem_cf:nn}\cB[\cE]\cB[ \2 \cE]
                            }
-                           \l__mhchem_ce_part_tl
+                           \l__mhchem_ce_output_cache_part_tl
                         \tl_put_right:Nx \l__mhchem_ce_result_tl
-                          { \exp_not:V \l__mhchem_ce_part_tl }
+                          { \exp_not:V \l__mhchem_ce_output_cache_part_tl }
                       }
                       {
                         \tl_put_right:Nx \l__mhchem_ce_result_tl
@@ -878,7 +897,7 @@
                           {
                             \exp_not:N \__mhchem_cf:nn
                             {}
-                            { \exp_not:V \l__mhchem_ce_part_tl }
+                            { \exp_not:V \l__mhchem_ce_output_cache_part_tl }
                           }
                       }
                   }
@@ -887,7 +906,7 @@
                       {
                         \exp_not:N \__mhchem_cf:nn
                         {}
-                        { \exp_not:V \l__mhchem_ce_part_tl }
+                        { \exp_not:V \l__mhchem_ce_output_cache_part_tl }
                       }
                   }
               }
@@ -909,10 +928,9 @@
               {}
               {}
               {}
-            \tl_set:NV \l__mhchem_ce_part_tl \l__mhchem_ce_arrowTypeOne_tl
-            \tl_set:Nn \l__mhchem_ce_state_tl { c }
-            \bool_set_false:N \l__mhchem_ce_potentialSpacing_bool
-            \__mhchem_ce_output:
+            \tl_set:NV \l__mhchem_ce_output_cache_part_tl \l__mhchem_ce_arrowTypeOne_tl
+            \tl_set:Nn \l__mhchem_ce_output_cache_state_tl { c }
+            \__mhchem_ce_output_cache:
           }
         { a-]1 }
           {
@@ -940,10 +958,9 @@
               { \l__mhchem_ce_arrowTextOne_tl }
               {}
               {}
-            \tl_set:NV \l__mhchem_ce_part_tl \l__mhchem_ce_arrowTypeTwo_tl
-            \tl_set:Nn \l__mhchem_ce_state_tl { c }
-            \bool_set_false:N \l__mhchem_ce_potentialSpacing_bool
-            \__mhchem_ce_output:
+            \tl_set:NV \l__mhchem_ce_output_cache_part_tl \l__mhchem_ce_arrowTypeTwo_tl
+            \tl_set:Nn \l__mhchem_ce_output_cache_state_tl { c }
+            \__mhchem_ce_output_cache:
           }
         { a-]2 }
           {
@@ -956,9 +973,8 @@
           }
       }
       {}
-    \tl_clear:N \l__mhchem_ce_part_tl
-    \tl_set:Nn \l__mhchem_ce_state_tl { c }
-    \bool_set_false:N \l__mhchem_ce_potentialSpacing_bool
+    \tl_clear:N \l__mhchem_ce_output_cache_state_tl
+    \tl_clear:N \l__mhchem_ce_output_cache_part_tl
   }
 \cs_new_protected:Npn \__mhchem_ce_outputArrow:nnnnn #1#2#3#4#5
   {
@@ -1357,7 +1373,7 @@
 \tl_new:N \l__mhchem_cf_sup_tl
 \tl_new:N \l__mhchem_cf_supState_tl
 \tl_new:N \l__mhchem_cf_subState_tl
-\tl_new:N \l__mhchem_cf_lastElement_tl
+\tl_new:N \l__mhchem_cf_lastNonIsotopeElement_tl
 \bool_new:N \g__mhchem_cf_lastElementWithScript_bool
 \cs_new_protected:Npn \__mhchem_cf_resetOutput:
   {
@@ -1399,19 +1415,11 @@
     \tl_set:Nn \l__mhchem_cf_state_tl { s }
     \bool_set_false:N \l__mhchem_cf_startedWithBond_bool
     \__mhchem_cf_resetOutput:
-    \tl_set:Nn \l__mhchem_cf_result_tl {#2}
-    \regex_replace_once:NnNTF
-      \l__mhchem_regex_oneLetter_fregex
-      { \c{__mhchem_output_withFont:n}\cB[ \c{__mhchem_cg_itshape:n}\cB[ \0 \cE]\cE] }
-      \l__mhchem_cf_result_tl
-      {}
-      {
-        \tl_clear:N \l__mhchem_cf_result_tl
-        \__mhchem_cf_loop: #2 \q_recursion_stop
-      }
-      \tl_if_empty:nTF {#1}
-        { \ensuremath{\tl_use:N \l__mhchem_cf_result_tl} }
-        { \ensuremath{\overset{#1}{\tl_use:N \l__mhchem_cf_result_tl}} }
+    \tl_clear:N \l__mhchem_cf_result_tl
+    \__mhchem_cf_loop: #2 \q_recursion_stop
+    \tl_if_empty:nTF {#1}
+      { \ensuremath{\tl_use:N \l__mhchem_cf_result_tl} }
+      { \ensuremath{\overset{#1}{\tl_use:N \l__mhchem_cf_result_tl}} }
     \group_end:
   }
 \tl_new:N \l__mhchem_cf_loop_tmpa_l
@@ -1438,6 +1446,46 @@
           {}
         \__mhchem_cf_outputAndReset:
       }{
+    \peek_charcode_remove:NTF \c_space_token
+      {
+        \str_case:VnF \l__mhchem_cf_state_tl
+          {
+            { - }
+              {
+                \bool_if:NTF \l__mhchem_cf_startedWithBond_bool
+                  { \__mhchem_cf_outputRaw:n { \__mhchem_output_bond_single: } }
+                  { \tl_put_right:Nn \l__mhchem_cf_sup_tl { - } }
+              }
+            { 1 }
+              { \tl_set:Nn \l__mhchem_cf_state_tl {9} }
+            { frac2 }
+              { \__mhchem_cf_outputRawElementAndReset: }
+            { a }
+              {
+                \bool_if:nT
+                  {
+                    \tl_if_empty_p:N \l__mhchem_cf_presup_tl  &&
+                    \tl_if_empty_p:N \l__mhchem_cf_presub_tl  &&
+                    \tl_if_empty_p:N \l__mhchem_cf_sub_tl  &&
+                    \tl_if_empty_p:N \l__mhchem_cf_sup_tl
+                  }
+                  {
+                    \regex_replace_once:NnNTF
+                      \l__mhchem_regex_oneLowercaseLetter_fregex
+                      { \c{__mhchem_output_withFont:n}\cB[ \c{__mhchem_cg_itshape:n}\cB[ \0 \cE]\cE] }
+                      \l__mhchem_cf_element_tl
+                      {}
+                      {}
+                  }
+              }
+          }
+          {}
+        \__mhchem_cf_outputAndReset:
+        \int_compare:nT { \l__mhchem_option_version_int > 3 }
+          { \__mhchem_cf_outputRaw:n { \__mhchem_output_skipAfterAmount: } }
+        \tl_set:Nn \l__mhchem_cf_state_tl { s }
+        \__mhchem_cf_loop:
+      }{
     \peek_meaning:NTF \relax
       { \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: }{
     \peek_meaning:NTF \protect
@@ -1447,16 +1495,18 @@
         { - }
           {
             \__mhchem_cf_outputAndReset:
-            \regex_match:NVTF
-              \l__mhchem_regex_oneLetterPlus_fregex
-              \l__mhchem_cf_lastElement_tl
+            \int_compare:nTF { \l__mhchem_option_version_int > 3 }
               {
-                \__mhchem_cf_outputRaw:n
-                  { \__mhchem_cg_escapeFromMathToTextOrFaketext:n { - } }
+                \regex_match:NVTF
+                  \l__mhchem_regex_oneLowercaseLetterPlus_fregex
+                  \l__mhchem_cf_lastNonIsotopeElement_tl
+                  {
+                    \__mhchem_cf_outputRaw:n
+                      { \__mhchem_cg_escapeFromMathToTextOrFaketext:n { - } }
+                  }
+                  { \__mhchem_cf_outputRaw:n { \__mhchem_output_bond_single: } }
               }
-              {
-                \__mhchem_cf_outputRaw:n { \__mhchem_output_bond_single: }
-              }
+              { \__mhchem_cf_outputRaw:n { \__mhchem_output_bond_single: } }
             \tl_set:Nn \l__mhchem_cf_state_tl { s }
             \__mhchem_cf_loop:
           }
@@ -1478,13 +1528,13 @@
           }
         { ps }
           {
-            \__mhchem_cf_outputAndReset:
             \__mhchem_regex_peek:NTF \l__mhchem_regex_uppercaseLetterOrParenthesis_pregex
               {
                 \regex_match:NVTF
                   \l__mhchem_regex_formulaAmount_fregex
-                  \l__mhchem_cf_lastElement_tl
+                  \l__mhchem_cf_element_tl
                   {
+                    \__mhchem_cf_outputAndReset:
                     \tl_put_right:Nn
                       \l__mhchem_cf_result_tl
                       { \__mhchem_output_skipAfterAmount: }
@@ -1675,7 +1725,10 @@
                   \__mhchem_cf_loop:
               }
             % else
-              { \msg_error:nnn { mhchem } { cf / unexpected-input } }
+              {
+                \__mhchem_loopHelper_breakLoop:w
+                  { \msg_error:nnn { mhchem } { cf / unexpected-input } }
+              }
             }}}}}}}}}}}}}}}}}
           }
         { c }
@@ -1973,7 +2026,7 @@
             \peek_charcode:NTF -
               {
                 \regex_match:NVTF
-                  \l__mhchem_regex_oneLetterPlus_fregex
+                  \l__mhchem_regex_oneLowercaseLetterPlus_fregex
                   \l__mhchem_cf_element_tl
                   {
                     \tl_set:Nn \l__mhchem_cf_state_tl { - }
@@ -2118,7 +2171,7 @@
           \l__mhchem_cf_result_tl
           \__mhchem_cf_loop:
       }
-    }}}
+    }}}}
   }
 
 \cs_new_protected:Npn \__mhchem_cf_output:
@@ -2134,7 +2187,13 @@
       {
       }
       {
-        \tl_set:NV \l__mhchem_cf_lastElement_tl \l__mhchem_cf_element_tl
+        \bool_if:nT
+          {
+            \tl_if_empty_p:N \l__mhchem_cf_presup_tl  &&
+            \tl_if_empty_p:N \l__mhchem_cf_presub_tl
+          }
+          { \tl_set:NV \l__mhchem_cf_lastNonIsotopeElement_tl \l__mhchem_cf_element_tl }
+          { \tl_clear:N \l__mhchem_cf_lastNonIsotopeElement_tl }
         \bool_gset:Nn \g__mhchem_cf_lastElementWithScript_bool
           {
             ! \tl_if_empty_p:N \l__mhchem_cf_sub_tl  ||
@@ -2240,7 +2299,7 @@
   }
 \cs_new_protected:Npn \__mhchem_cf_outputRawElement:
   {
-    \tl_set:NV \l__mhchem_cf_lastElement_tl \l__mhchem_cf_element_tl
+    \tl_set:NV \l__mhchem_cf_lastNonIsotopeElement_tl \l__mhchem_cf_element_tl
     \tl_put_right:Nx \l__mhchem_cf_result_tl  { \exp_not:V \l__mhchem_cf_element_tl }
   }
 \cs_new_protected:Npn \__mhchem_cf_outputAndReset:
@@ -2413,28 +2472,35 @@
     \int_compare:nTF { \l__mhchem_option_version_int > 3}
       {
         \regex_match:NVTF
-          \l__mhchem_regex_formula_fregex
+          \l__mhchem_regex_nonFormula_fregex
           #1
           {
-            \regex_replace_all:NnN
-              \l__mhchem_regex_oneLetter_regex
-              { \c{__mhchem_output_withFont:n}\cB[ \c{__mhchem_cg_itshape:n}\cB[ \0 \cE]\cE] }
-              #1
-            \regex_replace_all:NnN
-              \l__mhchem_regex_hyphen_regex
-              { \c{__mhchem_output_minus:} }
-              #1
-            \regex_replace_all:NnN
-              \l__mhchem_regex_digitCommaDigit_regex
-              { \c{__mhchem_output_commaDecimal:} }
-              #1
-          }
-          {
             \tl_clear:N \l__mhchem_cg_replaceForSubscript_result_tl
             \tl_set:Nn \l__mhchem_cg_replaceForSubscript_state_tl { s }
             \exp_after:wN \__mhchem_cg_replaceForSubscript_loop: #1 \q_recursion_stop
             \tl_set:NV #1 \l__mhchem_cg_replaceForSubscript_result_tl
           }
+          {
+            \regex_match:NVTF
+              \l__mhchem_regex_formula_fregex
+              #1
+              {
+                \regex_replace_all:NnN
+                  \l__mhchem_regex_oneLowercaseLetter_regex
+                  { \c{__mhchem_output_withFont:n}\cB[ \c{__mhchem_cg_itshape:n}\cB[ \0 \cE]\cE] }
+                  #1
+                \regex_replace_all:NnN
+                  \l__mhchem_regex_hyphen_regex
+                  { \c{__mhchem_output_minus:} }
+                  #1
+              }
+              {
+                \tl_clear:N \l__mhchem_cg_replaceForSubscript_result_tl
+                \tl_set:Nn \l__mhchem_cg_replaceForSubscript_state_tl { s }
+                \exp_after:wN \__mhchem_cg_replaceForSubscript_loop: #1 \q_recursion_stop
+                \tl_set:NV #1 \l__mhchem_cg_replaceForSubscript_result_tl
+              }
+          }
       }
     % else
       {
@@ -2510,8 +2576,14 @@
 
 \tl_new:N \l__mhchem_cg_replaceForSuperscript_result_tl
 \tl_new:N \l__mhchem_cg_replaceForSuperscript_state_tl
+\bool_new:N \l__mhchem_cg_replaceForSuperscript_isFormula_bool
 \cs_new_protected:Npn \__mhchem_cg_replaceForSuperscript:N #1
   {
+    \regex_match:NVTF
+      \l__mhchem_regex_formula_fregex
+      #1
+      { \bool_set_true:N \l__mhchem_cg_replaceForSuperscript_isFormula_bool }
+      { \bool_set_false:N \l__mhchem_cg_replaceForSuperscript_isFormula_bool }
     \tl_clear:N \l__mhchem_cg_replaceForSuperscript_result_tl
     \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { s }
     \exp_after:wN \__mhchem_cg_replaceForSuperscript_loop: #1 \q_recursion_stop
@@ -2583,7 +2655,7 @@
           }
         \__mhchem_cg_replaceForSuperscript_loop:
       }{
-    \__mhchem_regex_peek:NTF \l__mhchem_regex_oneLetter_pregex
+    \__mhchem_regex_peek:NTF \l__mhchem_regex_oneLowercaseLetter_pregex
       {
         \str_if_eq:VnT \l__mhchem_cg_replaceForSuperscript_state_tl { 9. }
           {
@@ -2591,11 +2663,20 @@
               { \__mhchem_output_electronDot: }
           }
         \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { s }
-        \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl
-          { \__mhchem_cg_itshape:n }
-        \__mhchem_loopHelper_appendNextGroup:NNn
-          \l__mhchem_cg_replaceForSuperscript_result_tl
-          \__mhchem_cg_replaceForSuperscript_loop:
+        \bool_if:NTF
+          \l__mhchem_cg_replaceForSuperscript_isFormula_bool
+          {
+            \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl
+              { \__mhchem_cg_itshape:n }
+            \__mhchem_loopHelper_appendNextGroup:NNn
+              \l__mhchem_cg_replaceForSuperscript_result_tl
+              \__mhchem_cg_replaceForSuperscript_loop:
+          }
+          {
+            \__mhchem_loopHelper_appendNextToken:NNn
+              \l__mhchem_cg_replaceForSuperscript_result_tl
+              \__mhchem_cg_replaceForSuperscript_loop:
+          }
       }{
     \__mhchem_regex_peek:NTF \l__mhchem_regex_digit_pregex
       {
@@ -3350,3 +3431,4 @@
     \DeclareRobustCommand\cf[2][]{\mhchem at cf[#1]{#2}}
     \DeclareRobustCommand\cee[1]{\mhchem at cee{#1}}
   }
+



More information about the tex-live-commits mailing list