diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/mhchem/mhchem.sty |
Initial commit
Diffstat (limited to 'macros/latex/contrib/mhchem/mhchem.sty')
-rw-r--r-- | macros/latex/contrib/mhchem/mhchem.sty | 3424 |
1 files changed, 3424 insertions, 0 deletions
diff --git a/macros/latex/contrib/mhchem/mhchem.sty b/macros/latex/contrib/mhchem/mhchem.sty new file mode 100644 index 0000000000..594b5e6d0e --- /dev/null +++ b/macros/latex/contrib/mhchem/mhchem.sty @@ -0,0 +1,3424 @@ +%% mhchem.sty +%% Copyright 2004-2018 Martin Hensel +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License version 1.3c +% which is included as lppl-1-3c.txt. +% +% This work has the LPPL maintenance status "maintained". +% The Current Maintainer of this work is Martin Hensel. +% +% ( In order to fight spam, the maintainer's contact ) +% ( information is "encrypted" with ROT13. ) +% ( If you do not know ROT13 yet and have no tool for ) +% ( decryption, simply do an Internet search for "ROT13". ) +% +% ,---[ ROT 13 ]--- +% | Gur Pheerag Znvagnvare bs guvf jbex vf Znegva Urafry +% | jub pna or pbagnpgrq ivn +% | zupurz@ZnegvaUrafry.qr +% | be ivn znvy +% | Znegva Urafry +% | Cbfgfge. 20 +% | 09232 Unegznaafqbes +% | Treznal +% `---------- +% +% This work consists of all files listed in manifest.txt. +% +% +\ProvidesPackage{mhchem}[2018/06/22 v4.08 for typesetting chemical formulae] +\RequirePackage{expl3} +\RequirePackage{l3keys2e} +\RequirePackage{calc}[1998/07/07] +\RequirePackage{amsmath} +\RequirePackage{chemgreek}[2016/02/10] +\RequirePackage{graphics} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% misc %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\DeclareMathSymbol{\mhchem@hyphen}{0}{operators}{45} +\def\mhchem@macro{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% global helpers %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\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_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 + { + \peek_catcode:NTF ## + {#3} + { + \regex_match:NoTF + #1 + { \token_to_meaning:N \l_peek_token } {#2} {#3} + } + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% 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_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 + { \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 ( [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-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_openingBracket_pregex { [ \( \[ ] } +\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_closingBracket_pregex { [ \) \] \/ ] } +\__mhchem_regex_peek_compile:Nn \l__mhchem_regex_oneLowercaseLetter_pregex { [a-z] } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% loop helpers %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\cs_new_protected:Npn \__mhchem_loopHelper_appendNextToken:NNn #1#2#3 + { + \tl_put_right:Nn #1 {#3} + #2 + } +\cs_new_protected:Npn \__mhchem_loopHelper_appendNextGroup:NNn #1#2#3 + { + \tl_put_right:Nn #1 { { #3 } } + #2 + } +\cs_new_protected:Npn \__mhchem_loopHelper_appendNextGroupAsCe:NNn #1#2#3 + { + \tl_put_right:Nn #1 { { \ce{#3} } } + #2 + } +\cs_new_protected:Npn \__mhchem_loopHelper_appendNextGroup_prefix_doIfEmpty:NnnNn #1#2#3#4#5 + { + \tl_if_empty:nTF {#5} + { #3 } + { \tl_put_right:Nn #1 { #2 { #5 } } } + #4 + } + +\cs_new_protected:Npn \__mhchem_loopHelper_appendMathA:NNw #1#2#3$ + { + \tl_put_right:Nn #1 { $ #3 $ } + #2 + } +\cs_new_protected:Npn \__mhchem_loopHelper_appendMathAAsGroup:NNw #1#2#3$ + { + \tl_put_right:Nn #1 { $ { #3 } $ } + #2 + } +\cs_new_protected:Npn \__mhchem_loopHelper_appendWithinMathTokens:nn #1#2 + { + \peek_catcode:NTF \c_group_begin_token + { \__mhchem_loopHelper_appendWithinMathTokens_aux_group:ccw {#1} {#2} } + { \__mhchem_loopHelper_appendWithinMathTokens_aux:ccw {#1} {#2} } + } +\cs_new_protected:Npn \__mhchem_loopHelper_appendWithinMathTokens_aux:NNw #1#2#3$ + { + \tl_put_right:Nn #1 { \__mhchem_cg_withinMathTokens:n {#3} } + #2 + } +\cs_generate_variant:Nn \__mhchem_loopHelper_appendWithinMathTokens_aux:NNw {ccw} +\cs_new_protected:Npn \__mhchem_loopHelper_appendWithinMathTokens_aux_group:NNw #1#2#3$ + { + \tl_put_right:Nn #1 { \__mhchem_cg_withinMathTokens:n { {#3} } } + #2 + } +\cs_generate_variant:Nn \__mhchem_loopHelper_appendWithinMathTokens_aux_group:NNw {ccw} + +\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 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% \ce %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%% \/ %%% Prevent argument from expanding when written to .aux +%%%%%%%%%% Solution by Heiko Oberdiek +%%%%%%%%%% http://tex.stackexchange.com/questions/160306/prevent-caption-from-expanding-argument-too-early +\newcommand*{\ce}{% + \ifx\protect\@typeset@protect + \csname ce \expandafter\endcsname + \else + \ifx\protect\@unexpandable@protect + \protect@unexpand@cmd@arg\ce + \else + \ifx\protect\string + \protect@string@cmd@arg\ce + \else + \expandafter\protect@unknown@cmd@arg + \csname ce \endcsname + \fi + \fi + \fi +} +\expandafter\newcommand\csname ce \endcsname[1]{% + \mhchem@cee{#1}% +} +% unexpanded protect +\def\protect@unexpand@cmd@arg#1\else#2\fi\fi\fi#3{% + \fi\fi + \ifx\thepage\relax + \detokenize + \else + \unexpanded + \fi + {#1{#3}}% +} +% display protect +\def\protect@string@cmd@arg#1\else#2\fi\fi\fi#3{% + \fi\fi\fi + \detokenize{#1{#3}}% +} +% unknown protect +\def\protect@unknown@cmd@arg#1\fi\fi\fi{% + \fi\fi\fi + \protect#1% +} +%%%%%%%%%% +%%% /\ %%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% \cesplit %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ExplSyntaxOn + +\cs_generate_variant:Nn \regex_replace_all:nnN { VnN } +\bool_new:N \l__mhchem_cesplit_odd_bool + +\tl_new:N \l__mhchem_cesplit_tmpa_tl +\newcommand*\cesplit[2] + { + \bool_set_true:N \l__mhchem_cesplit_odd_bool + \tl_set:Nn \l__mhchem_cesplit_tmpa_tl { \__mhchem_ce:n {#2} } + + \tl_map_inline:nn {#1} + { + \bool_if:NTF \l__mhchem_cesplit_odd_bool + { + \tl_set:Nn \__mhchem_cesplit_key_tl {##1} + \bool_set_false:N \l__mhchem_cesplit_odd_bool + } + % else + { + \regex_replace_all:VnN + \__mhchem_cesplit_key_tl + { \cE] ##1 \c{__mhchem_ce:n}\cB[ } + \l__mhchem_cesplit_tmpa_tl + \bool_set_true:N \l__mhchem_cesplit_odd_bool + } + } + \tl_use:N \l__mhchem_cesplit_tmpa_tl + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% \cee %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\cs_new_protected:Npn \mhchem@cee #1 % \__mhchem_cee:n + { + \cesplit + { + { \c{\\}(\[.*?\])? } { \0 } + { \& } { \0 } + } + {#1} + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% \__mhchem_ce:n %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\msg_new:nnn { mhchem } { ce / unexpected-state } + { + Assertion~failed:~Unexpected~internal~state~'#1' (ce).~ + You~found~a~bug.~Please~contact~the~package~author. + } +\bool_new:N \l__mhchem_ce_ceActive_bool +\bool_set_false:N \l__mhchem_ce_ceActive_bool +\tl_new:N \l__mhchem_ce_state_tl +\int_new:N \l__mhchem_ce_distanceFromLastComma_int +\tl_new:N \l__mhchem_ce_result_tl +\tl_new:N \l__mhchem_ce_part_tl +\tl_new:N \l__mhchem_ce_arrowName_tl +\tl_new:N \l__mhchem_ce_arrowTypeOne_tl +\tl_new:N \l__mhchem_ce_arrowTextOne_tl +\tl_new:N \l__mhchem_ce_arrowTypeTwo_tl +\tl_new:N \l__mhchem_ce_arrowTextTwo_tl + +\cs_new_protected:Npn \__mhchem_ce:n #1 + { + \group_begin: + \mhchem@hook@beforeCe + \bool_if:NF \l__mhchem_ce_ceActive_bool + { + \bool_set_true:N \l__mhchem_ce_ceActive_bool + \__mhchem_output_defMathOrText: + \def\hyphen{\mhchem@hyphen}% + \cs_set_eq:NN \__mhchem_output_greek_orig_alpha \alpha + \cs_set_eq:NN \__mhchem_output_greek_orig_beta \beta + \cs_set_eq:NN \__mhchem_output_greek_orig_gamma \gamma + \cs_set_eq:NN \__mhchem_output_greek_orig_delta \delta + \cs_set_eq:NN \__mhchem_output_greek_orig_epsilon \epsilon + \cs_set_eq:NN \__mhchem_output_greek_orig_zeta \zeta + \cs_set_eq:NN \__mhchem_output_greek_orig_eta \eta + \cs_set_eq:NN \__mhchem_output_greek_orig_theta \theta + \cs_set_eq:NN \__mhchem_output_greek_orig_iota \iota + \cs_set_eq:NN \__mhchem_output_greek_orig_kappa \kappa + \cs_set_eq:NN \__mhchem_output_greek_orig_lambda \lambda + \cs_set_eq:NN \__mhchem_output_greek_orig_mu \mu + \cs_set_eq:NN \__mhchem_output_greek_orig_nu \nu + \cs_set_eq:NN \__mhchem_output_greek_orig_xi \xi + \cs_set_eq:NN \__mhchem_output_greek_orig_omicron \omicron + \cs_set_eq:NN \__mhchem_output_greek_orig_pi \pi + \cs_set_eq:NN \__mhchem_output_greek_orig_rho \rho + \cs_set_eq:NN \__mhchem_output_greek_orig_sigma \sigma + \cs_set_eq:NN \__mhchem_output_greek_orig_tau \tau + \cs_set_eq:NN \__mhchem_output_greek_orig_upsilon \upsilon + \cs_set_eq:NN \__mhchem_output_greek_orig_phi \phi + \cs_set_eq:NN \__mhchem_output_greek_orig_chi \chi + \cs_set_eq:NN \__mhchem_output_greek_orig_psi \psi + \cs_set_eq:NN \__mhchem_output_greek_orig_omega \omega + \cs_set_eq:NN \__mhchem_output_greek_orig_Alpha \Alpha + \cs_set_eq:NN \__mhchem_output_greek_orig_Beta \Beta + \cs_set_eq:NN \__mhchem_output_greek_orig_Gamma \Gamma + \cs_set_eq:NN \__mhchem_output_greek_orig_Delta \Delta + \cs_set_eq:NN \__mhchem_output_greek_orig_Epsilon \Epsilon + \cs_set_eq:NN \__mhchem_output_greek_orig_Zeta \Zeta + \cs_set_eq:NN \__mhchem_output_greek_orig_Eta \Eta + \cs_set_eq:NN \__mhchem_output_greek_orig_Theta \Theta + \cs_set_eq:NN \__mhchem_output_greek_orig_Iota \Iota + \cs_set_eq:NN \__mhchem_output_greek_orig_Kappa \Kappa + \cs_set_eq:NN \__mhchem_output_greek_orig_Lambda \Lambda + \cs_set_eq:NN \__mhchem_output_greek_orig_Mu \Mu + \cs_set_eq:NN \__mhchem_output_greek_orig_Nu \Nu + \cs_set_eq:NN \__mhchem_output_greek_orig_Xi \Xi + \cs_set_eq:NN \__mhchem_output_greek_orig_Omicron \Omicron + \cs_set_eq:NN \__mhchem_output_greek_orig_Pi \Pi + \cs_set_eq:NN \__mhchem_output_greek_orig_Rho \Rho + \cs_set_eq:NN \__mhchem_output_greek_orig_Sigma \Sigma + \cs_set_eq:NN \__mhchem_output_greek_orig_Tau \Tau + \cs_set_eq:NN \__mhchem_output_greek_orig_Upsilon \Upsilon + \cs_set_eq:NN \__mhchem_output_greek_orig_Phi \Phi + \cs_set_eq:NN \__mhchem_output_greek_orig_Chi \Chi + \cs_set_eq:NN \__mhchem_output_greek_orig_Psi \Psi + \cs_set_eq:NN \__mhchem_output_greek_orig_Omega \Omega + \cs_set_protected:Npn \alpha { \__mhchem_output_greek:n { alpha } } + \cs_set_protected:Npn \beta { \__mhchem_output_greek:n { beta } } + \cs_set_protected:Npn \gamma { \__mhchem_output_greek:n { gamma } } + \cs_set_protected:Npn \delta { \__mhchem_output_greek:n { delta } } + \cs_set_protected:Npn \epsilon { \__mhchem_output_greek:n { epsilon } } + \cs_set_protected:Npn \zeta { \__mhchem_output_greek:n { zeta } } + \cs_set_protected:Npn \eta { \__mhchem_output_greek:n { eta } } + \cs_set_protected:Npn \theta { \__mhchem_output_greek:n { theta } } + \cs_set_protected:Npn \iota { \__mhchem_output_greek:n { iota } } + \cs_set_protected:Npn \kappa { \__mhchem_output_greek:n { kappa } } + \cs_set_protected:Npn \lambda { \__mhchem_output_greek:n { lambda } } + \cs_set_protected:Npn \mu { \__mhchem_output_greek:n { mu } } + \cs_set_protected:Npn \nu { \__mhchem_output_greek:n { nu } } + \cs_set_protected:Npn \xi { \__mhchem_output_greek:n { xi } } + \cs_set_protected:Npn \omicron { \__mhchem_output_greek:n { omicron } } + \cs_set_protected:Npn \pi { \__mhchem_output_greek:n { pi } } + \cs_set_protected:Npn \rho { \__mhchem_output_greek:n { rho } } + \cs_set_protected:Npn \sigma { \__mhchem_output_greek:n { sigma } } + \cs_set_protected:Npn \tau { \__mhchem_output_greek:n { tau } } + \cs_set_protected:Npn \upsilon { \__mhchem_output_greek:n { upsilon } } + \cs_set_protected:Npn \phi { \__mhchem_output_greek:n { phi } } + \cs_set_protected:Npn \chi { \__mhchem_output_greek:n { chi } } + \cs_set_protected:Npn \psi { \__mhchem_output_greek:n { psi } } + \cs_set_protected:Npn \omega { \__mhchem_output_greek:n { omega } } + \cs_set_protected:Npn \Alpha { \__mhchem_output_greek:n { Alpha } } + \cs_set_protected:Npn \Beta { \__mhchem_output_greek:n { Beta } } + \cs_set_protected:Npn \Gamma { \__mhchem_output_greek:n { Gamma } } + \cs_set_protected:Npn \Delta { \__mhchem_output_greek:n { Delta } } + \cs_set_protected:Npn \Epsilon { \__mhchem_output_greek:n { Epsilon } } + \cs_set_protected:Npn \Zeta { \__mhchem_output_greek:n { Zeta } } + \cs_set_protected:Npn \Eta { \__mhchem_output_greek:n { Eta } } + \cs_set_protected:Npn \Theta { \__mhchem_output_greek:n { Theta } } + \cs_set_protected:Npn \Iota { \__mhchem_output_greek:n { Iota } } + \cs_set_protected:Npn \Kappa { \__mhchem_output_greek:n { Kappa } } + \cs_set_protected:Npn \Lambda { \__mhchem_output_greek:n { Lambda } } + \cs_set_protected:Npn \Mu { \__mhchem_output_greek:n { Mu } } + \cs_set_protected:Npn \Nu { \__mhchem_output_greek:n { Nu } } + \cs_set_protected:Npn \Xi { \__mhchem_output_greek:n { Xi } } + \cs_set_protected:Npn \Omicron { \__mhchem_output_greek:n { Omicron } } + \cs_set_protected:Npn \Pi { \__mhchem_output_greek:n { Pi } } + \cs_set_protected:Npn \Rho { \__mhchem_output_greek:n { Rho } } + \cs_set_protected:Npn \Sigma { \__mhchem_output_greek:n { Sigma } } + \cs_set_protected:Npn \Tau { \__mhchem_output_greek:n { Tau } } + \cs_set_protected:Npn \Upsilon { \__mhchem_output_greek:n { Upsilon } } + \cs_set_protected:Npn \Phi { \__mhchem_output_greek:n { Phi } } + \cs_set_protected:Npn \Chi { \__mhchem_output_greek:n { Chi } } + \cs_set_protected:Npn \Psi { \__mhchem_output_greek:n { Psi } } + \cs_set_protected:Npn \Omega { \__mhchem_output_greek:n { Omega } } + } + \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 } + \int_set:Nn \l__mhchem_ce_distanceFromLastComma_int { 9 } + \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 } + { \ensuremath{\tl_use:N \l__mhchem_ce_result_tl} } + \mhchem@hook@afterCe + \group_end: + } +\cs_new_protected:Npn \__mhchem_ce_loop: + { + \int_incr:N \l__mhchem_ce_distanceFromLastComma_int + \str_case:VnF \l__mhchem_ce_state_tl + { + { c } + { + \str_case:VnF \l__mhchem_ce_part_tl + { + { + } + { \__mhchem_ce_output:nn { 0 } { 0 } } + { \pm } + { \__mhchem_ce_output:nn { 0 } { 0 } } + { -> } + { + \tl_set:Nn \l__mhchem_ce_arrowName_tl { yields } + \__mhchem_ce_loop_startArrow: + } + { <- } + { + \tl_set:Nn \l__mhchem_ce_arrowName_tl { yieldsLeft } + \__mhchem_ce_loop_startArrow: + } + { <--> } + { + \tl_set:Nn \l__mhchem_ce_arrowName_tl { yieldsLeftRight } + \__mhchem_ce_loop_startArrow: + } + { <-> } + { + \tl_set:Nn \l__mhchem_ce_arrowName_tl { mesomerism } + \__mhchem_ce_loop_startArrow: + } + { <=> } + { + \tl_set:Nn \l__mhchem_ce_arrowName_tl { equilibrium } + \__mhchem_ce_loop_startArrow: + } + { <<=> } + { + \tl_set:Nn \l__mhchem_ce_arrowName_tl { equilibriumLeft } + \__mhchem_ce_loop_startArrow: + } + { <=>> } + { + \tl_set:Nn \l__mhchem_ce_arrowName_tl { equilibriumRight } + \__mhchem_ce_loop_startArrow: + } + } + {} + } + } + {} + \peek_meaning_remove:NTF \q_recursion_stop + { + \__mhchem_ce_output:nn { 1 } { 0 } + }{ + \str_case:VnF \l__mhchem_ce_state_tl + { + { c } + { + \peek_catcode_remove:NTF \c_math_toggle_token + { + \peek_catcode:NTF \c_group_begin_token + { + \__mhchem_loopHelper_appendMathAAsGroup:NNw + \l__mhchem_ce_part_tl + \__mhchem_ce_loop: + } + { + \__mhchem_loopHelper_appendMathA:NNw + \l__mhchem_ce_part_tl + \__mhchem_ce_loop: + } + }{ + \peek_catcode:NTF \c_group_begin_token + { + \__mhchem_loopHelper_appendNextGroup:NNn + \l__mhchem_ce_part_tl + \__mhchem_ce_loop: + }{ + \peek_charcode_remove:NTF \c_space_token + { + \int_compare:nTF { \l__mhchem_ce_distanceFromLastComma_int = 1 } + { + \__mhchem_ce_output:nn { 1 } { 0 } + } + { + \__mhchem_ce_output:nn { 1 } { 1 } + } + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF , + { + \int_set:Nn \l__mhchem_ce_distanceFromLastComma_int { 0 } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_part_tl + \__mhchem_ce_loop: + } + % else + { + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_part_tl + \__mhchem_ce_loop: + } + }}} + } + { a-t1 } + { + \peek_charcode_remove:NTF \c_space_token + { + \__mhchem_ce_output:nn { 0 } { 0 } + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF T + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-[1 } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_arrowTypeOne_tl + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF M + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-[1 } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_arrowTypeOne_tl + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF C + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-[1 } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_arrowTypeOne_tl + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF [ + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-]1 } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_ce_loop: + } + % else + { + \str_case:VnF \l__mhchem_ce_arrowName_tl + { + { yieldsLeft } + { + \peek_charcode:NTF - + { + \tl_set:Nn \l__mhchem_ce_state_tl { c } + \tl_set:Nn \l__mhchem_ce_part_tl { <- } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_part_tl + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF > + { + \tl_set:Nn \l__mhchem_ce_state_tl { c } + \tl_set:Nn \l__mhchem_ce_part_tl { <- } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_part_tl + \__mhchem_ce_loop: + } + % else + { + \__mhchem_ce_output:nn { 0 } { 0 } + \tl_set:Nn \l__mhchem_ce_state_tl { a-end } + \__mhchem_ce_loop: + } + } + } + { equilibrium } + { + \peek_charcode:NTF > + { + \tl_set:Nn \l__mhchem_ce_state_tl { c } + \tl_set:Nn \l__mhchem_ce_part_tl { <=> } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_part_tl + \__mhchem_ce_loop: + } + % else + { + \__mhchem_ce_output:nn { 0 } { 0 } + \tl_set:Nn \l__mhchem_ce_state_tl { a-end } + \__mhchem_ce_loop: + } + } + } + % else + { + \__mhchem_ce_output:nn { 0 } { 0 } + \tl_set:Nn \l__mhchem_ce_state_tl { a-end } + \__mhchem_ce_loop: + } + } + }}}} + } + { a-[1 } + { + \peek_charcode:NTF [ + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-]1 } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_ce_loop: + } + % else + { + \__mhchem_ce_output:nn { 0 } { 0 } + \tl_set:Nn \l__mhchem_ce_state_tl { a-end } + \__mhchem_ce_loop: + } + } + { a-]1 } + { + \peek_catcode:NTF \c_group_begin_token + { + \__mhchem_loopHelper_appendNextGroup:NNn + \l__mhchem_ce_arrowTextOne_tl + \__mhchem_ce_loop: + }{ + \peek_catcode_remove:NTF \c_math_toggle_token + { + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_ce_arrowTextOne_tl } + { __mhchem_ce_loop: } + }{ + \peek_charcode_remove:NTF \c_space_token + { + \tl_put_right:Nn \l__mhchem_ce_arrowTextOne_tl { ~ } + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF ] + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-t2 } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_ce_loop: + } + % else + { + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_arrowTextOne_tl + \__mhchem_ce_loop: + } + }}} + } + { a-t2 } + { + \peek_charcode_remove:NTF \c_space_token + { + \__mhchem_ce_output:nn { 0 } { 0 } + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF T + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-[2 } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_arrowTypeTwo_tl + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF M + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-[2 } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_arrowTypeTwo_tl + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF C + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-[2 } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_arrowTypeTwo_tl + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF [ + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-]2 } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_ce_loop: + } + % else + { + \__mhchem_ce_output:nn { 0 } { 0 } + \tl_set:Nn \l__mhchem_ce_state_tl { a-end } + \__mhchem_ce_loop: + } + }}}} + } + { a-[2 } + { + \peek_charcode:NTF [ + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-]2 } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_ce_loop: + } + % else + { + \__mhchem_ce_output:nn { 0 } { 0 } + \tl_set:Nn \l__mhchem_ce_state_tl { a-end } + \__mhchem_ce_loop: + } + } + { a-]2 } + { + \peek_catcode:NTF \c_group_begin_token + { + \__mhchem_loopHelper_appendNextGroup:NNn + \l__mhchem_ce_arrowTextTwo_tl + \__mhchem_ce_loop: + }{ + \peek_catcode_remove:NTF \c_math_toggle_token + { + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_ce_arrowTextTwo_tl } + { __mhchem_ce_loop: } + }{ + \peek_charcode_remove:NTF \c_space_token + { + \tl_put_right:Nn \l__mhchem_ce_arrowTextTwo_tl { ~ } + \__mhchem_ce_loop: + }{ + \peek_charcode:NTF ] + { + \__mhchem_ce_output:nn { 0 } { 0 } + \tl_set:Nn \l__mhchem_ce_state_tl { a-end } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_ce_loop: + } + % else + { + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_arrowTextTwo_tl + \__mhchem_ce_loop: + } + }}} + } + { a-end } + { + \tl_set:Nn \l__mhchem_ce_state_tl { c } + \peek_charcode_remove:NTF \c_space_token + { + \__mhchem_ce_loop: + } + % else + { + \__mhchem_ce_loop: + } + } + } + { + \msg_error:nnx { mhchem } { ce / unexpected-state } + { \l__mhchem_ce_state_tl } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_ce_result_tl + \__mhchem_ce_loop: + } + } + } +\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 + { + \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_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: } + } + { = } + { + \tl_put_right:Nn \l__mhchem_ce_result_tl + { \__mhchem_output_operatorEquals: } + } + { \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: } + } + { (v) } + { + \tl_put_right:Nn \l__mhchem_ce_result_tl + { \ensuremath{{}\mathop{\downarrow}{}} } + } + { v } + { + \tl_put_right:Nn \l__mhchem_ce_result_tl + { \ensuremath{{}\mathop{\downarrow}{}} } + } + { (^) } + { + \tl_put_right:Nn \l__mhchem_ce_result_tl + { \ensuremath{{}\mathop{\uparrow}{}} } + } + { ^ } + { + \tl_put_right:Nn \l__mhchem_ce_result_tl + { \ensuremath{{}\mathop{\uparrow}{}} } + } + { . } + { + \tl_put_right:Nn \l__mhchem_ce_result_tl + { \__mhchem_output_additionCompound: } + } + { * } + { + \tl_put_right:Nn \l__mhchem_ce_result_tl + { \__mhchem_output_additionCompound: } + } + { } + { + } + } + % else + { + \int_compare:nTF { \l__mhchem_option_version_int > 3 } + { + \regex_match:NVTF + \l__mhchem_regex_stateOfAggregationAtEnd_fregex + \l__mhchem_ce_output_cache_part_tl + { + \regex_replace_once:NnN + \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_output_cache_part_tl + \tl_put_right:Nx \l__mhchem_ce_result_tl + { \exp_not:V \l__mhchem_ce_output_cache_part_tl } + } + { + \tl_put_right:Nx \l__mhchem_ce_result_tl + { + \exp_not:N \__mhchem_cf:nn + {} + { \exp_not:V \l__mhchem_ce_output_cache_part_tl } + } + } + } + { + \tl_put_right:Nx \l__mhchem_ce_result_tl + { + \exp_not:N \__mhchem_cf:nn + {} + { \exp_not:V \l__mhchem_ce_output_cache_part_tl } + } + } + } + } + { a-t1 } + { + \__mhchem_ce_outputArrow:ooooo + { \l__mhchem_ce_arrowName_tl } + {} + {} + {} + {} + } + { a-[1 } + { + \__mhchem_ce_outputArrow:ooooo + { \l__mhchem_ce_arrowName_tl } + {} + {} + {} + {} + \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 } + { + \__mhchem_ce_outputArrow:ooooo + { \l__mhchem_ce_arrowName_tl } + { \l__mhchem_ce_arrowTypeOne_tl } + { \l__mhchem_ce_arrowTextOne_tl } + {} + {} + } + { a-t2 } + { + \__mhchem_ce_outputArrow:ooooo + { \l__mhchem_ce_arrowName_tl } + { \l__mhchem_ce_arrowTypeOne_tl } + { \l__mhchem_ce_arrowTextOne_tl } + {} + {} + } + { a-[2 } + { + \__mhchem_ce_outputArrow:ooooo + { \l__mhchem_ce_arrowName_tl } + { \l__mhchem_ce_arrowTypeOne_tl } + { \l__mhchem_ce_arrowTextOne_tl } + {} + {} + \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 } + { + \__mhchem_ce_outputArrow:ooooo + { \l__mhchem_ce_arrowName_tl } + { \l__mhchem_ce_arrowTypeOne_tl } + { \l__mhchem_ce_arrowTextOne_tl } + { \l__mhchem_ce_arrowTypeTwo_tl } + { \l__mhchem_ce_arrowTextTwo_tl } + } + } + {} + \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 + { + \tl_put_right:Nn \l__mhchem_ce_result_tl + { + \__mhchem_arrow_deploy:nnnnn {#1} {#2} {#3} {#4} {#5} + } + \tl_clear:N \l__mhchem_ce_part_tl + \tl_set:Nn \l__mhchem_ce_state_tl { c } + } +\cs_generate_variant:Nn \__mhchem_ce_outputArrow:nnnnn {ooooo} +\cs_new_protected:Npn \__mhchem_ce_loop_startArrow: + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-t1 } + \tl_clear:N \l__mhchem_ce_arrowTypeOne_tl + \tl_clear:N \l__mhchem_ce_arrowTextOne_tl + \tl_clear:N \l__mhchem_ce_arrowTypeTwo_tl + \tl_clear:N \l__mhchem_ce_arrowTextTwo_tl + \tl_clear:N \l__mhchem_ce_part_tl + } +\cs_new_protected:Npn \__mhchem_ce_loop_abortArrow: + { + \tl_put_right:Nx \l__mhchem_ce_part_tl + { + \tl_set:Nn \l__mhchem_ce_state_tl { a-t1 } + \exp_not:V \l__mhchem_ce_arrowTypeOne_tl + \exp_not:V \l__mhchem_ce_arrowTextOne_tl + \exp_not:V \l__mhchem_ce_arrowTypeTwo_tl + \exp_not:V \l__mhchem_ce_arrowTextTwo_tl + } + \tl_set:Nn \l__mhchem_ce_state_tl { c } + } +\ExplSyntaxOff + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% arrows %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ExplSyntaxOn +\cs_new:Npn \__mhchem_arrow_options_minLength:n { {2em} } +\tl_new:N \mhchem@option@arrow@pgf@tip +\tl_new:N \mhchem@option@arrow@pgf@linewidth + +\msg_new:nnn { mhchem } { error-arrow-type } + { + Cannot~understand~arrow~type~'#1'. + } +\msg_new:nnn { mhchem } { unexpected-arrow-type } + { + Assertion~failed:~Unexpected~arrow~type~'#1'.~ + You~found~a~bug.~Please~contact~the~package~author. + } +\msg_new:nnn { mhchem } { unexpected-arrow-name } + { + Assertion~failed:~Unexpected~arrow~name~'#1'.~ + You~found~a~bug.~Please~contact~the~package~author. + } +\msg_new:nnn { mhchem } { unexpected-arrow-label-type } + { + Assertion~failed:~Unexpected~arrow~label~type~'#1'.~ + You~found~a~bug.~Please~contact~the~package~author. + } + +\cs_new_protected:Npn \__mhchem_arrow_init_pgf: #1 + { + \bool_if:NTF { \l__mhchem_option_inPreamble_bool } + { + \RequirePackage{pgf} + \RequirePackage{tikz} + \AtBeginDocument { + \usetikzlibrary{arrows.meta} + \__mhchem_arrow_init_pgf_ii: {#1} + } + } + { \__mhchem_arrow_init_pgf_ii: {#1} } + } +\tl_new:N \l__mhchem_arrow_init_pgf_tl +\cs_new_protected:Npn \__mhchem_arrow_init_pgf_ii: #1 + { + \tl_set:Nn \l__mhchem_option_arrowType_tl { pgf } + \str_case:nnF {#1} + { + { pgf } + { + \tikzset{mhchemtip /.tip = {Computer~Modern~Rightarrow[length=0pt~5,width'=0pt~1.8]}} + \tl_set:Nn \mhchem@option@arrow@pgf@linewidth { 0.09ex } + } + { pgf-filled } + { + \tikzset{mhchemtip /.tip = {Stealth[round,length=0pt~10,width'=0pt~0.65]}} + \tl_set:Nn \mhchem@option@arrow@pgf@linewidth { 0.09ex } + } + } + { + \regex_extract_once:nnNTF + { \A pgf \cB. (.+?) \cE. \cB. (.+?) \cE. \Z } + {#1} + \l__mhchem_tmp_arrow_seq + { + \seq_pop_left:NN \l__mhchem_tmp_arrow_seq \l__mhchem_option_tmpa_tl + \seq_pop_left:NN \l__mhchem_tmp_arrow_seq \l__mhchem_option_tmpa_tl + \tl_set:Nx \l__mhchem_arrow_init_pgf_tl { mhchemtip /.tip = {\l__mhchem_option_tmpa_tl} } + \exp_after:wN \tikzset \exp_after:wN { \l__mhchem_arrow_init_pgf_tl } + \seq_pop_left:NN \l__mhchem_tmp_arrow_seq \l__mhchem_option_tmpa_tl + \tl_set_eq:NN \mhchem@option@arrow@pgf@linewidth \l__mhchem_option_tmpa_tl + } + { + { \msg_error:nnn { mhchem } { error-arrow-type } {#1} } + } + } + } + +\tl_new:N \l__mhchem_arrow_deploy_a_tl +\tl_new:N \l__mhchem_arrow_deploy_b_tl +\cs_new_protected:Npn \__mhchem_arrow_deploy:nnnnn #1#2#3#4#5 + { + \str_case:nnF {#2} + { + { } + { + \int_compare:nTF { \l__mhchem_option_version_int > 3 } + { + \tl_if_empty:nTF + {#3} + { \tl_clear:N \l__mhchem_arrow_deploy_a_tl } + { \tl_set:Nn \l__mhchem_arrow_deploy_a_tl { \ce {#3} } } + \tl_if_empty:nTF + {#5} + { \tl_clear:N \l__mhchem_arrow_deploy_b_tl } + { \tl_set:Nn \l__mhchem_arrow_deploy_b_tl { \ce {#5} } } + \__mhchem_arrow_output:nVV {#1} \l__mhchem_arrow_deploy_a_tl \l__mhchem_arrow_deploy_b_tl + } + { \__mhchem_arrow_output:nnn {#1} {#3} {#5} } + } + { M } + { \__mhchem_arrow_output:nnn {#1} {#3} {#5} } + { T } + { + \tl_if_empty:nTF + {#3} + { \tl_clear:N \l__mhchem_arrow_deploy_a_tl } + { \tl_set:Nn \l__mhchem_arrow_deploy_a_tl { \__mhchem_output_escapeFromMathToText:n {#3} } } + \tl_if_empty:nTF + {#5} + { \tl_clear:N \l__mhchem_arrow_deploy_b_tl } + { \tl_set:Nn \l__mhchem_arrow_deploy_b_tl { \__mhchem_output_escapeFromMathToText:n {#5} } } + \__mhchem_arrow_output:nVV {#1} \l__mhchem_arrow_deploy_a_tl \l__mhchem_arrow_deploy_b_tl + } + { C } + { + \tl_if_empty:nTF + {#3} + { \tl_clear:N \l__mhchem_arrow_deploy_a_tl } + { \tl_set:Nn \l__mhchem_arrow_deploy_a_tl { \ce {#3} } } + \tl_if_empty:nTF + {#5} + { \tl_clear:N \l__mhchem_arrow_deploy_b_tl } + { \tl_set:Nn \l__mhchem_arrow_deploy_b_tl { \ce {#5} } } + \__mhchem_arrow_output:nVV {#1} \l__mhchem_arrow_deploy_a_tl \l__mhchem_arrow_deploy_b_tl + } + } + { \msg_error:nnn { mhchem } { unexpected-arrow-label-type } {#2} } + } +\cs_new_protected:Npn \__mhchem_arrow_output:nnn #1#2#3 + { + \str_case:VnF \l__mhchem_option_arrowType_tl + { + { font } + { + \cs_set_protected:Npn \__mhchem_arrow_base: { \__mhchem_arrow_ext:nnnnnnnn } + \cs_set_protected:Npn \__mhchem_arrow_rightArrowFill: { \rightarrowfill@ } + \cs_set_protected:Npn \__mhchem_arrow_leftArrowFill: { \leftarrowfill@ } + \cs_set_protected:Npn \__mhchem_arrow_leftRightArrowFill: { \leftrightarrowfill@ } + \cs_set_protected:Npn \__mhchem_arrow_rightHarpoonUpFill: { \__mhchem_arrow_rightharpoonupfill } + \cs_set_protected:Npn \__mhchem_arrow_leftHarpoonDownFill: { \__mhchem_arrow_leftharpoondownfill } + } + { pgf } + { + \cs_set_protected:Npn \__mhchem_arrow_base: { \__mhchem_arrow_extPgf:nnnnnnnn } + \cs_set_protected:Npn \__mhchem_arrow_rightArrowFill: { \mhchem@arrow@right@pgf } + \cs_set_protected:Npn \__mhchem_arrow_leftArrowFill: { \mhchem@arrow@left@pgf } + \cs_set_protected:Npn \__mhchem_arrow_leftRightArrowFill: { \mhchem@arrow@leftright@pgf } + \cs_set_protected:Npn \__mhchem_arrow_rightHarpoonUpFill: { \mhchem@arrow@rightharpoonup@pgf } + \cs_set_protected:Npn \__mhchem_arrow_leftHarpoonDownFill: { \mhchem@arrow@leftharpoondown@pgf } + } + } + { \msg_error:nnx { mhchem } { unexpected-arrow-type } { \l__mhchem_option_arrowType_tl } } + \str_case:nnF {#1} + { + { yields } + { \ensuremath{{}\__mhchem_arrow_base:{5}{9}{#2}{5}{9}{#3}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_rightArrowFill:}{}} } + { yieldsLeft } + { \ensuremath{{}\__mhchem_arrow_base:{9}{5}{#2}{9}{5}{#3}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_leftArrowFill:}{}} } + { yieldsLeftRight } + { + \ensuremath{{}\mathrel{ + \@ifempty{#3} + {\rlap{\raisebox{.44ex}{$\__mhchem_arrow_base:{9}{9}{#2}{9}{9}{}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_rightArrowFill:}$}}} + {\rlap{\raisebox{.44ex}{$\__mhchem_arrow_base:{9}{9}{#2}{9}{9}{\hphantom{#3}}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_rightArrowFill:}$}}} + \@ifempty{#2} + {\raisebox{-.44ex}{$\__mhchem_arrow_base:{9}{9}{}{9}{9}{#3}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_leftArrowFill:}$}} + {\raisebox{-.44ex}{$\__mhchem_arrow_base:{9}{9}{\hphantom{#2}}{9}{9}{#3}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_leftArrowFill:}$}} + }{}} + } + { mesomerism } + { \ensuremath{{}\__mhchem_arrow_base:{9}{9}{#2}{9}{9}{#3}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_leftRightArrowFill:}{}} } + { equilibrium } + { + \ensuremath{{}\mathrel{ + \@ifempty{#3} + {\rlap{\raisebox{.22ex}{$\__mhchem_arrow_base:{5}{9}{#2}{9}{9}{}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_rightHarpoonUpFill:}$}}} + {\rlap{\raisebox{.22ex}{$\__mhchem_arrow_base:{9}{9}{#2}{9}{5}{\hphantom{#3}}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_rightHarpoonUpFill:}$}}} + \@ifempty{#2} + {\raisebox{-.22ex}{$\__mhchem_arrow_base:{9}{9}{}{9}{5}{#3}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_leftHarpoonDownFill:}$}} + {\raisebox{-.22ex}{$\__mhchem_arrow_base:{5}{9}{\hphantom{#2}}{9}{9}{#3}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_leftHarpoonDownFill:}$}} + }{}} + } + { equilibriumRight } + { + \ensuremath{{}\mathrel{ + \@ifempty{#2}{ + \rlap{\raisebox{-.22ex}{$\kern0.5em\__mhchem_arrow_base:{0}{0}{}{9}{5}{#3}{\__mhchem_arrow_options_minLength:n-1em}{\__mhchem_arrow_leftHarpoonDownFill:}$}} + \@ifempty{#3} + {\raisebox{.22ex}{$\__mhchem_arrow_base:{0}{0}{}{0}{0}{}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_rightHarpoonUpFill:}$}} + {\raisebox{.22ex}{$\__mhchem_arrow_base:{0}{0}{}{9}{5}{\hphantom{#3}\kern1em}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_rightHarpoonUpFill:}$}} + }{ + \rlap{\raisebox{-.22ex}{$\kern0.5em\__mhchem_arrow_base:{5}{9}{\hphantom{#2}\kern-1em}{9}{9}{#3}{\__mhchem_arrow_options_minLength:n-1em}{\__mhchem_arrow_leftHarpoonDownFill:}$}} + \@ifempty{#3} + {\raisebox{.22ex}{$\__mhchem_arrow_base:{5}{9}{#2}{0}{0}{}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_rightHarpoonUpFill:}$}} + {\raisebox{.22ex}{$\__mhchem_arrow_base:{9}{9}{#2}{9}{9}{\hphantom{#3}\kern1em}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_rightHarpoonUpFill:}$}} + } + }{}} + } + { equilibriumLeft } + { + \ensuremath{{}\mathrel{ + \@ifempty{#3}{ + \rlap{\raisebox{.22ex}{$\kern0.5em\__mhchem_arrow_base:{5}{9}{#2}{0}{0}{}{\__mhchem_arrow_options_minLength:n-1em}{\__mhchem_arrow_rightHarpoonUpFill:}$}} + \@ifempty{#2} + {\raisebox{-.22ex}{$\__mhchem_arrow_base:{0}{0}{}{0}{0}{}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_leftHarpoonDownFill:}$}} + {\raisebox{-.22ex}{$\__mhchem_arrow_base:{5}{9}{\hphantom{#2}\kern1em}{0}{0}{}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_leftHarpoonDownFill:}$}} + }{ + \rlap{\raisebox{.22ex}{$\kern0.5em\__mhchem_arrow_base:{9}{9}{#2}{5}{9}{\hphantom{#3}\kern-1em}{\__mhchem_arrow_options_minLength:n-1em}{\__mhchem_arrow_rightHarpoonUpFill:}$}} + \@ifempty{#2} + {\raisebox{-.22ex}{$\__mhchem_arrow_base:{0}{0}{}{9}{5}{#3}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_leftHarpoonDownFill:}$}} + {\raisebox{-.22ex}{$\__mhchem_arrow_base:{9}{9}{\hphantom{#2}\kern1em}{9}{9}{#3}{\__mhchem_arrow_options_minLength:n}{\__mhchem_arrow_leftHarpoonDownFill:}$}} + } + }{}} + } + } + { \msg_error:nnn { mhchem } { unexpected-arrow-name } {#1} } + } +\cs_generate_variant:Nn \__mhchem_arrow_output:nnn {nVV} + +%%% Font arrows +\cs_new_protected:Npn \__mhchem_arrow_ext:nnnnnnnn #1#2#3#4#5#6#7#8 % adaption of amsmath's ext@arrow + { + \mathrel{ + \mathop{\makebox[#7]{#8\displaystyle}} + \limits + \@ifnotempty{#3}{^{\mkern#1mu#3\mkern#2mu}} + \@ifnotempty{#6} + { + \c_math_subscript_token{\makebox{ + \raisebox{1.25ex-\heightof{$\scriptstyle\mkern#4mu#6\mkern#5mu$}}[0pt] + {$\scriptstyle\mkern#4mu#6\mkern#5mu$} + }} + } + } + } +\cs_new_protected:Npn \__mhchem_arrow_rightharpoonupfill + { \arrowfill@\relbar\relbar\rightharpoonup } +\cs_new_protected:Npn \__mhchem_arrow_leftharpoondownfill + { \arrowfill@\leftharpoondown\relbar\relbar } +%%% pgf arrows +\skip_new:N \__mhchem_arrow_extPgfLength_skip +\cs_new_protected:Npn \__mhchem_arrow_extPgf:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \setlength \__mhchem_arrow_extPgfLength_skip + { + \widthof{\ensuremath{ + \__mhchem_arrow_ext:nnnnnnnn{#1}{#2}{#3}{#4}{#5}{#6}{#7}{\rightarrowfill@} + }} + } + \mathrel{ + \mathop{\kern0.7pt#8{\__mhchem_arrow_extPgfLength_skip-1.8pt}\kern0.7pt} + \limits + \@ifnotempty{#3}{^{\mkern#1mu#3\mkern#2mu}} + \@ifnotempty{#6}{\c_math_subscript_token{\mkern#4mu#6\mkern#5mu}} + } + } +\ExplSyntaxOff + +\newcommand*\mhchem@arrow@right@pgf[1]{% + \begin{tikzpicture}[baseline]% + \draw[use as bounding box] (0,0) (#1,0.85ex); + \draw[arrows={-mhchemtip}, shorten <=0.5*\mhchem@option@arrow@pgf@linewidth, cap=round, line width=\mhchem@option@arrow@pgf@linewidth] + (0cm,0.575ex) -- ++(#1,0cm); + \end{tikzpicture}% +}% +\newcommand*\mhchem@arrow@left@pgf[1]{% + \begin{tikzpicture}[baseline]% + \draw[use as bounding box] (0,0) (#1,0.85ex); + \draw[arrows={mhchemtip-}, shorten >=0.5*\mhchem@option@arrow@pgf@linewidth, cap=round, line width=\mhchem@option@arrow@pgf@linewidth] + (0cm,0.575ex) -- ++(#1,0cm); + \end{tikzpicture}% +}% +\newcommand*\mhchem@arrow@leftright@pgf[1]{% + \begin{tikzpicture}[baseline]% + \draw[use as bounding box] (0,0) (#1,0.85ex); + \draw[arrows={mhchemtip-mhchemtip}, cap=round, line width=\mhchem@option@arrow@pgf@linewidth] + (0cm,0.575ex) -- ++(#1,0cm); + \end{tikzpicture}% +}% +\newcommand*\mhchem@arrow@rightharpoonup@pgf[1]{% + \begin{tikzpicture}[baseline]% + \draw[use as bounding box] (0,0) (#1,0.85ex); + \draw[arrows={-mhchemtip[harpoon]}, shorten <=0.5*\mhchem@option@arrow@pgf@linewidth, cap=round, line width=\mhchem@option@arrow@pgf@linewidth, ] + (0cm,0.575ex) -- ++(#1,0cm); + \end{tikzpicture}% +}% +\newcommand*\mhchem@arrow@leftharpoondown@pgf[1]{% + \begin{tikzpicture}[baseline]% + \draw[use as bounding box] (0,0) (#1,0.85ex); + \draw[arrows={mhchemtip[harpoon]-}, shorten >=0.5*\mhchem@option@arrow@pgf@linewidth, cap=round, line width=\mhchem@option@arrow@pgf@linewidth, ] + (0cm,0.575ex) -- ++(#1,0cm); + \end{tikzpicture}% +}% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% loop helpers %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ExplSyntaxOn + +\msg_new:nnn { mhchem } { cf / unexpected-input } + { + Assertion~failed:~Unexpected~input~character.~ + In~case~you~think~this~is~a~bug,~ + please~contact~the~package~author. + } +\msg_new:nnn { mhchem } { cf / unexpected-state } + { + Assertion~failed:~Unexpected~internal~state~'#1' (cf).~ + You~found~a~bug.~Please~contact~the~package~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~package~author. + } + +\cs_new_protected:Npn + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:nNn #1#2#3 + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn \l__mhchem_cf_element_tl { \__mhchem_output_withFont:n {#3} } + \__mhchem_cf_outputRawElementAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl {#1} + #2 + } +\cs_new_protected:Npn + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:nnNn #1#2#3#4 + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn \l__mhchem_cf_element_tl {#1} + \__mhchem_cf_outputRawElementAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl {#2} + #3 + } +\cs_new_protected:Npn + \__mhchem_loopHelper_outputAndReset_append_appendNextGroupToResult:nNnn #1#2#3 + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn \l__mhchem_cf_element_tl {#1} + \tl_put_right:Nn \l__mhchem_cf_element_tl {{#3}} + \__mhchem_cf_outputRawElementAndReset: + #2 + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% \cf %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand*\mhchem@cf[2][]{ + \__mhchem_cf:nn {#1} {#2} +} + +\bool_new:N \l__mhchem_cf_startedWithBond_bool + +\tl_new:N \l__mhchem_cf_state_tl +\tl_new:N \l__mhchem_cf_presup_tl +\tl_new:N \l__mhchem_cf_presub_tl +\tl_new:N \l__mhchem_cf_presupState_tl +\tl_new:N \l__mhchem_cf_presubState_tl +\tl_new:N \l__mhchem_cf_element_tl +\tl_new:N \l__mhchem_cf_sub_tl +\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_lastNonIsotopeElement_tl +\bool_new:N \g__mhchem_cf_lastElementWithScript_bool +\cs_new_protected:Npn \__mhchem_cf_resetOutput: + { + \tl_clear:N \l__mhchem_cf_presup_tl + \tl_clear:N \l__mhchem_cf_presub_tl + \tl_set:Nn \l__mhchem_cf_presupState_tl { - } + \tl_set:Nn \l__mhchem_cf_presubState_tl { - } + \tl_clear:N \l__mhchem_cf_element_tl + \tl_clear:N \l__mhchem_cf_sub_tl + \tl_clear:N \l__mhchem_cf_sup_tl + \tl_set:Nn \l__mhchem_cf_supState_tl { - } + \tl_set:Nn \l__mhchem_cf_subState_tl { - } + } + +\bool_new:N \l__mhchem_cf_cfActive_bool +\bool_set_false:N \l__mhchem_cf_cfActive_bool +\tl_new:N \l__mhchem_cf_result_tl +\cs_new_protected:Npn \__mhchem_cf:nn #1#2 + { + \group_begin: + \bool_if:NF \l__mhchem_cf_cfActive_bool + { + \bool_set_true:N \l__mhchem_cf_cfActive_bool + \bool_if:NF \l__mhchem_ce_ceActive_bool + { \__mhchem_output_defMathOrText: } + \int_compare:nTF { \l__mhchem_option_version_int < 3 } + { \cs_set_eq:NN \bond \__mhchem_output_bond_single: } + { + \cs_set_protected:Npn \bond { \mhchem@bond } + } + \int_compare:nT { \l__mhchem_option_version_int < 4 } + { + \cs_set_protected:Npn \sbond { \__mhchem_output_bond_single: } + \cs_set_protected:Npn \dbond { \__mhchem_output_bond_double: } + \cs_set_protected:Npn \tbond { \__mhchem_output_bond_triple: } + } + \cs_set_protected:Npn \hyphen {\mhchem@hyphen} + } + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \bool_set_false:N \l__mhchem_cf_startedWithBond_bool + \__mhchem_cf_resetOutput: + \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 +\tl_new:N \l__mhchem_cf_loop_tmpb_l +\tl_new:N \l__mhchem_cf_loop_tmpc_l +\tl_new:N \l__mhchem_cf_loop_tmpd_l +\cs_new_protected:Npn \__mhchem_cf_loop: + { + \peek_meaning_remove:NTF \q_recursion_stop + { + \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: } + } + {} + \__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 + { \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: }{ + \str_case:VnF \l__mhchem_cf_state_tl + { + { - } + { + \__mhchem_cf_outputAndReset: + \int_compare:nTF { \l__mhchem_option_version_int > 3 } + { + \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: } } + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \__mhchem_cf_loop: + } + { ( } + { + \__mhchem_regex_peek:NTF \l__mhchem_regex_digit_pregex + { + \tl_set:Nn \l__mhchem_cf_state_tl { 1 } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + } + % else + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \__mhchem_cf_loop: + } + } + { ps } + { + \__mhchem_regex_peek:NTF \l__mhchem_regex_uppercaseLetterOrParenthesis_pregex + { + \regex_match:NVTF + \l__mhchem_regex_formulaAmount_fregex + \l__mhchem_cf_element_tl + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn + \l__mhchem_cf_result_tl + { \__mhchem_output_skipAfterAmount: } + } + {} + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_cf_loop: + } + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_cf_loop: + } + } + { s } + { + \peek_catcode:NTF \mhchem@macro + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { c } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + }{ + \peek_catcode:NTF \c_group_begin_token + { + \__mhchem_cf_outputAndReset: + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { + \__mhchem_loopHelper_outputAndReset_append_appendNextGroupToResult:nNnn + {} + \__mhchem_cf_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextGroup_prefix_doIfEmpty:NnnNn + \l__mhchem_cf_element_tl + { \__mhchem_cg_escapeFromMathToTextOrFaketext:n } + { \tl_set:Nn \l__mhchem_cf_state_tl { s } } + \__mhchem_cf_loop: + } + }{ + \peek_catcode_remove:NTF \c_math_toggle_token + { + \int_compare:nTF { \l__mhchem_option_version_int > 3 } + { \tl_set:Nn \l__mhchem_cf_state_tl { ps } } + { \tl_set:Nn \l__mhchem_cf_state_tl { a } } + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_cf_element_tl } + { __mhchem_cf_loop: } + }{ + \peek_charcode:NTF - + { + \__mhchem_cf_outputAndReset: + \int_compare:nTF { \l__mhchem_option_version_int > 1 } + { + \tl_set:Nn \l__mhchem_cf_state_tl { - } + \bool_set_true:N \l__mhchem_cf_startedWithBond_bool + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \tl_put_right:Nn \l__mhchem_cf_sup_tl { - } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF = + { + \__mhchem_cf_outputAndReset: + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:nnNn + { \__mhchem_output_bond_double: } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ## + { + \__mhchem_cf_outputAndReset: + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:nnNn + { \__mhchem_output_bond_triple: } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ^ + { + \str_if_eq:VnF \l__mhchem_cf_presupState_tl { - } + { \__mhchem_cf_outputAndReset: } + \tl_set:Nn \l__mhchem_cf_presupState_tl { d } + \tl_set:Nn \l__mhchem_cf_state_tl { p } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF _ + { + \str_if_eq:VnF \l__mhchem_cf_presubState_tl { - } + { \__mhchem_cf_outputAndReset: } + \tl_set:Nn \l__mhchem_cf_presubState_tl { d } + \tl_set:Nn \l__mhchem_cf_state_tl { q } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ` + { + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { + \str_if_eq:VnF \l__mhchem_cf_presupState_tl { - } + { \__mhchem_cf_outputAndReset: } + \tl_set:Nn \l__mhchem_cf_presupState_tl { rm } + \tl_set:Nn \l__mhchem_cf_state_tl { p } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF , + { + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { + \str_if_eq:VnF \l__mhchem_cf_presubState_tl { - } + { \__mhchem_cf_outputAndReset: } + \tl_set:Nn \l__mhchem_cf_presubState_tl { rm } + \tl_set:Nn \l__mhchem_cf_state_tl { q } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + } + % else + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { 1 } + \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF * + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:nnNn + { \__mhchem_output_additionCompound: } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF + + { + \str_if_eq:VnF \l__mhchem_cf_presupState_tl { - } + { \__mhchem_cf_outputAndReset: } + \tl_set:Nn \l__mhchem_cf_presupState_tl { d } + \tl_set:Nn \l__mhchem_cf_state_tl { p } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ( + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { ( } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF [ + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:nNn + { s } + \__mhchem_cf_loop: + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_closingBracket_pregex + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:nNn + { a } + \__mhchem_cf_loop: + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_letter_pregex + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_digitOrDot_pregex + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { 1 } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF | + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:nnNn + { \__mhchem_output_verticalBar: } + { s } + \__mhchem_cf_loop: + } + % else + { + \__mhchem_loopHelper_breakLoop:w + { \msg_error:nnn { mhchem } { cf / unexpected-input } } + } + }}}}}}}}}}}}}}}}} + } + { c } + { + \regex_match:NVTF + \l__mhchem_regex_oneGreekLetter_fregex + \l__mhchem_cf_element_tl + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_cf_loop: + }{ + \regex_match:NVTF + \l__mhchem_regex_fracMacro_fregex + \l__mhchem_cf_element_tl + { + \tl_set:Nn \l__mhchem_cf_state_tl { frac1 } + \__mhchem_loopHelper_appendNextGroupAsCe:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + }{ + \peek_catcode:NTF \c_group_begin_token + { + \__mhchem_loopHelper_appendNextGroup:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + } + % else + { + \__mhchem_cf_outputRawElementAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_cf_loop: + } + }} + } + { frac1 } + { + \tl_set:Nn \l__mhchem_cf_state_tl { frac2 } + \__mhchem_loopHelper_appendNextGroupAsCe:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + } + { frac2 } + { + \__mhchem_cf_outputRawElementAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_cf_loop: + } + { 1 } + { + \__mhchem_regex_peek:NTF \l__mhchem_regex_digitOrDotPlus_pregex + { + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF , + { + \tl_put_right:Nn \l__mhchem_cf_element_tl { \__mhchem_output_commaDecimal: } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF - + { + \tl_set:Nn \l__mhchem_cf_state_tl { 9 } + \__mhchem_cf_outputAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { - } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + } + % else + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \__mhchem_cf_loop: + } + }} + } + { a } + { + \peek_catcode:NTF \mhchem@macro + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { c } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + }{ + \peek_catcode:NTF \c_group_begin_token + { + \__mhchem_cf_outputAndReset: + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { + \__mhchem_loopHelper_appendNextGroup:NNn + \l__mhchem_cf_result_tl + \__mhchem_cf_loop: + } + % else + { + \__mhchem_loopHelper_appendNextGroup_prefix_doIfEmpty:NnnNn + \l__mhchem_cf_element_tl + { \__mhchem_cg_escapeFromMathToTextOrFaketext:n } + {} + \__mhchem_cf_loop: + } + }{ + \peek_catcode_remove:NTF \c_math_toggle_token + { + \str_if_eq:VnF \l__mhchem_cf_supState_tl { - } + { \__mhchem_cf_outputAndReset: } + \str_if_eq:VnF \l__mhchem_cf_subState_tl { - } + { \__mhchem_cf_outputAndReset: } + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_cf_element_tl } + { __mhchem_cf_loop: } + }{ + \peek_charcode:NTF - + { + \tl_set:Nn \l__mhchem_cf_state_tl { - } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF = + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:nnNn + { \__mhchem_output_bond_double: } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ## + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:nnNn + { \__mhchem_output_bond_triple: } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ^ + { + \str_if_eq:VnF \l__mhchem_cf_supState_tl { - } + { \__mhchem_cf_outputAndReset: } + \str_if_eq:VnTF \l__mhchem_cf_subState_tl { - } + { \tl_set:Nn \l__mhchem_cf_supState_tl { kv } } + { \tl_set:Nn \l__mhchem_cf_supState_tl { d } } + \tl_set:Nn \l__mhchem_cf_state_tl { e } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF _ + { + \str_if_eq:VnF \l__mhchem_cf_subState_tl { - } + { \__mhchem_cf_outputAndReset: } + \tl_set:Nn \l__mhchem_cf_subState_tl { d } + \tl_set:Nn \l__mhchem_cf_state_tl { f } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + }{ + \peek_charcode:NTF ` + { + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { + \str_if_eq:VnF \l__mhchem_cf_supState_tl { - } + { \__mhchem_cf_outputAndReset: } + \tl_set:Nn \l__mhchem_cf_supState_tl { rm } + \tl_set:Nn \l__mhchem_cf_state_tl { e } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + } + % else + { + \str_if_eq:VnF \l__mhchem_cf_supState_tl { - } + { \__mhchem_cf_outputAndReset: } + \str_if_eq:VnF \l__mhchem_cf_subState_tl { - } + { \__mhchem_cf_outputAndReset: } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + } + }{ + \peek_charcode:NTF , + { + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { + \str_if_eq:VnF \l__mhchem_cf_subState_tl { - } + { \__mhchem_cf_outputAndReset: } + \tl_set:Nn \l__mhchem_cf_subState_tl { rm } + \tl_set:Nn \l__mhchem_cf_state_tl { f } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + } + % else + { + \__mhchem_cf_outputRaw:n + { \__mhchem_output_commaEnumeration: } + \__mhchem_loopHelper_ignoreNextToken:Nn \__mhchem_cf_loop: + } + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_dotOrAsterisk_pregex + { + \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:nnNn + { \__mhchem_output_additionCompound: } + { s } + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF + + { + \tl_set:Nn \l__mhchem_cf_supState_tl { d } + \tl_set:Nn \l__mhchem_cf_state_tl { e } + \__mhchem_cf_loop: + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_openingBracket_pregex + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:nNn + { s } + \__mhchem_cf_loop: + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_closingBracket_pregex + { + \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:nNn + { a } + \__mhchem_cf_loop: + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_letter_pregex + { + \str_if_eq:VnTF \l__mhchem_cf_supState_tl { - } + { + \str_if_eq:VnF \l__mhchem_cf_subState_tl { - } + { \__mhchem_cf_outputAndReset: } + } + { + \regex_match:NVTF + \l__mhchem_regex_digits_fregex + \l__mhchem_cf_sup_tl + { + \tl_set:NV \l__mhchem_cf_loop_tmpa_l \l__mhchem_cf_sup_tl + \tl_set:NV \l__mhchem_cf_loop_tmpb_l \l__mhchem_cf_supState_tl + \tl_set:NV \l__mhchem_cf_loop_tmpc_l \l__mhchem_cf_sub_tl + \tl_set:NV \l__mhchem_cf_loop_tmpd_l \l__mhchem_cf_subState_tl + \tl_clear:N \l__mhchem_cf_sup_tl + \tl_set:Nn \l__mhchem_cf_supState_tl { - } + \tl_clear:N \l__mhchem_cf_sub_tl + \tl_set:Nn \l__mhchem_cf_subState_tl { - } + \__mhchem_cf_outputAndReset: + \tl_set:NV \l__mhchem_cf_presup_tl \l__mhchem_cf_loop_tmpa_l + \tl_set:NV \l__mhchem_cf_presupState_tl \l__mhchem_cf_loop_tmpb_l + \tl_set:NV \l__mhchem_cf_presub_tl \l__mhchem_cf_loop_tmpc_l + \tl_set:NV \l__mhchem_cf_presubState_tl \l__mhchem_cf_loop_tmpd_l + } + { \__mhchem_cf_outputAndReset: } + } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_element_tl + \__mhchem_cf_loop: + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_digit_pregex + { + \str_if_eq:VnF \l__mhchem_cf_subState_tl { - } + { \__mhchem_cf_outputAndReset: } + \tl_set:Nn \l__mhchem_cf_subState_tl { d } + \tl_set:Nn \l__mhchem_cf_state_tl { f } + \__mhchem_cf_loop: + } + % else + { + \__mhchem_cf_outputAndReset: + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \__mhchem_cf_loop: + } + }}}}}}}}}}}}}}} + } + { e } + { + \peek_catcode_remove:NTF \c_math_toggle_token + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_cf_sup_tl } + { __mhchem_cf_loop: } + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_digit_pregex + { + \tl_set:Nn \l__mhchem_cf_state_tl { e+ } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_sup_tl + \__mhchem_cf_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_sup_tl + \__mhchem_cf_loop: + } + } + } + { e+ } + { + \__mhchem_regex_peek:NTF \l__mhchem_regex_digitOrPlus_pregex + { + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_sup_tl + \__mhchem_cf_loop: + }{ + \peek_charcode:NTF - + { + \regex_match:NVTF + \l__mhchem_regex_oneLowercaseLetterPlus_fregex + \l__mhchem_cf_element_tl + { + \tl_set:Nn \l__mhchem_cf_state_tl { - } + \__mhchem_loopHelper_ignoreNextToken:Nn + \__mhchem_cf_loop: + } + { + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_sup_tl + \__mhchem_cf_loop: + } + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_cf_loop: + } + } + } + { f } + { + \peek_catcode_remove:NTF \c_math_toggle_token + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_cf_sub_tl } + { __mhchem_cf_loop: } + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_digitOrSlash_pregex + { + \tl_set:Nn \l__mhchem_cf_state_tl { f+ } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_sub_tl + \__mhchem_cf_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_sub_tl + \__mhchem_cf_loop: + } + } + } + { f+ } + { + \__mhchem_regex_peek:NTF \l__mhchem_regex_digitOrSlash_pregex + { + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_sub_tl + \__mhchem_cf_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { a } + \__mhchem_cf_loop: + } + } + { p } + { + \peek_catcode_remove:NTF \c_math_toggle_token + { + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_cf_presup_tl } + { __mhchem_cf_loop: } + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_digitOrMinus_pregex + { + \tl_set:Nn \l__mhchem_cf_state_tl { p+ } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_presup_tl + \__mhchem_cf_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_presup_tl + \__mhchem_cf_loop: + } + } + } + { p+ } + { + \__mhchem_regex_peek:NTF \l__mhchem_regex_digit_pregex + { + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_presup_tl + \__mhchem_cf_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \__mhchem_cf_loop: + } + } + { q } + { + \peek_catcode_remove:NTF \c_math_toggle_token + { + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_cf_presub_tl } + { __mhchem_cf_loop: } + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_digitOrMinus_pregex + { + \tl_set:Nn \l__mhchem_cf_state_tl { q+ } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_presub_tl + \__mhchem_cf_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_presub_tl + \__mhchem_cf_loop: + } + } + } + { q+ } + { + \__mhchem_regex_peek:NTF \l__mhchem_regex_digit_pregex + { + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_presub_tl + \__mhchem_cf_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cf_state_tl { s } + \__mhchem_cf_loop: + } + } + } + { + \msg_error:nnx { mhchem } { cf / unexpected-state } + { \l__mhchem_cf_state_tl } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cf_result_tl + \__mhchem_cf_loop: + } + }}}} + } + +\cs_new_protected:Npn \__mhchem_cf_output: + { + \bool_if:nTF + { + \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_element_tl && + \tl_if_empty_p:N \l__mhchem_cf_sub_tl && + \tl_if_empty_p:N \l__mhchem_cf_sup_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 || + ! \tl_if_empty_p:N \l__mhchem_cf_sup_tl + } + \str_case:VnF \l__mhchem_cf_state_tl + { + { 1 } + { + \__mhchem_cg_replaceForAmount:N \l__mhchem_cf_element_tl + \tl_put_right:Nx \l__mhchem_cf_result_tl + { + \exp_not:N \__mhchem_output_amount:n { + \exp_not:V \l__mhchem_cf_element_tl + } + } + } + { 9 } + { + \__mhchem_cg_replaceForAmount:N \l__mhchem_cf_element_tl + \tl_put_right:Nx \l__mhchem_cf_result_tl + { + \exp_not:N \__mhchem_output_withFont:n { + \exp_not:V \l__mhchem_cf_element_tl + } + } + } + } + { + \str_if_eq:VnTF \l__mhchem_cf_presupState_tl { rm } + { \tl_set:Nx \l__mhchem_cf_presup_tl { \exp_not:N \__mhchem_output_escapeToRomanMath:n { \exp_not:V \l__mhchem_cf_presup_tl } } } + { \__mhchem_cg_replaceForSuperscript:N \l__mhchem_cf_presup_tl } + \str_if_eq:VnTF \l__mhchem_cf_presubState_tl { rm } + { \tl_set:Nx \l__mhchem_cf_presub_tl { \exp_not:N \__mhchem_output_escapeToRomanMath:n { \exp_not:V \l__mhchem_cf_presub_tl } } } + { \__mhchem_cg_replaceForSubscript:N \l__mhchem_cf_presub_tl } + \__mhchem_cg_replaceForElement:N \l__mhchem_cf_element_tl + \str_if_eq:VnTF \l__mhchem_cf_subState_tl { rm } + { \tl_set:Nx \l__mhchem_cf_sub_tl { \exp_not:N \__mhchem_output_escapeToRomanMath:n { \exp_not:V \l__mhchem_cf_sub_tl } } } + { \__mhchem_cg_replaceForSubscript:N \l__mhchem_cf_sub_tl } + \str_if_eq:VnTF \l__mhchem_cf_supState_tl { rm } + { \tl_set:Nx \l__mhchem_cf_sup_tl { \exp_not:N \__mhchem_output_escapeToRomanMath:n { \exp_not:V \l__mhchem_cf_sup_tl } } } + { \__mhchem_cg_replaceForSuperscript:N \l__mhchem_cf_sup_tl } + \str_if_eq:VnT \l__mhchem_cf_supState_tl { kv } + { + \regex_match:NVTF + \l__mhchem_regex_romanNumeral_fregex + \l__mhchem_cf_sup_tl + { \tl_set:Nn \l__mhchem_cf_supState_tl { ox } } + {} + } + \bool_if:nT + { + \str_if_eq_p:Vn \l__mhchem_cf_supState_tl { kv } && + \tl_if_empty_p:V \l__mhchem_cf_sub_tl + } + { \tl_set:Nn \l__mhchem_cf_supState_tl { d } } + \str_case:VnF \l__mhchem_cf_supState_tl + { + { kv } + { + \tl_put_right:Nx \l__mhchem_cf_result_tl + { + \exp_not:N \__mhchem_output_coreFive:nnnnnnn + { \exp_not:V \l__mhchem_cf_presup_tl } + { \exp_not:V \l__mhchem_cf_presub_tl } + { \exp_not:V \l__mhchem_cf_element_tl } + {} + { \exp_not:V \l__mhchem_cf_sup_tl } + { \exp_not:V \l__mhchem_cf_sub_tl } + {} + } + } + { ox } + { + \tl_put_right:Nx \l__mhchem_cf_result_tl + { + \exp_not:N \__mhchem_output_coreFive:nnnnnnn + { \exp_not:V \l__mhchem_cf_presup_tl } + { \exp_not:V \l__mhchem_cf_presub_tl } + { \exp_not:V \l__mhchem_cf_element_tl } + { \exp_not:V \l__mhchem_cf_sup_tl } + {} + { \exp_not:V \l__mhchem_cf_sub_tl } + {} + } + } + } + { + \tl_put_right:Nx \l__mhchem_cf_result_tl + { + \exp_not:N \__mhchem_output_coreFive:nnnnnnn + { \exp_not:V \l__mhchem_cf_presup_tl } + { \exp_not:V \l__mhchem_cf_presub_tl } + { \exp_not:V \l__mhchem_cf_element_tl } + {} + {} + { \exp_not:V \l__mhchem_cf_sub_tl } + { \exp_not:V \l__mhchem_cf_sup_tl } + } + } + } + } + } +\cs_new_protected:Npn \__mhchem_cf_outputRawElement: + { + \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: + { + \__mhchem_cf_output: + \__mhchem_cf_resetOutput: + } +\cs_new_protected:Npn \__mhchem_cf_outputRawElementAndReset: + { + \__mhchem_cf_outputRawElement: + \__mhchem_cf_resetOutput: + } +\cs_new_protected:Npn \__mhchem_cf_outputRaw:n #1 + { + \__mhchem_cf_outputAndReset: + \tl_put_right:Nn \l__mhchem_cf_element_tl {#1} + \__mhchem_cf_outputRawElementAndReset: + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% cg %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\tl_new:N \l__mhchem_cg_withinMathTokens_tmpa_tl +\bool_new:N \l__mhchem_cg_withinMathTokens_bool +\bool_set_false:N \l__mhchem_cg_withinMathTokens_bool +\cs_new_protected:Npn \__mhchem_cg_withinMathTokens:n #1 + { + \group_begin: + \bool_set_true:N \l__mhchem_cg_withinMathTokens_bool + \int_compare:nTF { \l__mhchem_option_version_int > 3 } + { + \regex_match:NnTF + \l__mhchem_regex_bracedGroup_fregex + {#1} + { + \__mhchem_output_escapeToItalicMath:n {#1} + } + % else + { + \regex_match:NnTF + \l__mhchem_regex_digitOrLetterOrGreek_fregex + {#1} + { + \group_begin: + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { + \text { \ensuremath + { + \thinmuskip=0mu \medmuskip=0mu \thickmuskip=0mu + \__mhchem_output_escapeFromMathToItalicMath:n {#1} + } } + } + { + \tl_set:Nn \l__mhchem_cg_withinMathTokens_tmpa_tl { #1 } + \regex_replace_all:NnN + \l__mhchem_regex_letters_regex + { \c{__mhchem_output_escapeFromTextToItalicText:n} \cB[ \0 \cE] } + \l__mhchem_cg_withinMathTokens_tmpa_tl + \regex_replace_all:NnN + \l__mhchem_regex_spaces_regex + {} + \l__mhchem_cg_withinMathTokens_tmpa_tl + \regex_replace_all:NnN + \l__mhchem_regex_hyphen_regex + { \c{mhchem@option@textminus} } + \l__mhchem_cg_withinMathTokens_tmpa_tl + \tl_use:N \l__mhchem_cg_withinMathTokens_tmpa_tl + } + \group_end: + } + { + \__mhchem_output_escapeToItalicMath:n {#1} + } + } + } + % else + { + \__mhchem_output_escapeFromMathToItalicMath:n {#1} + } + \group_end: + } +\cs_new_protected:Npn \__mhchem_cg_itshape:n #1 + { + \int_compare:nTF { \l__mhchem_option_version_int > 3 } + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { \__mhchem_output_escapeFromMathToItalicMath:n {#1} } + { \__mhchem_output_escapeFromTextToItalicText:n {#1} } + } + { #1 } + } +\cs_new_protected:Npn \__mhchem_cg_escapeFromMathToTextOrFaketext:n #1 + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { \__mhchem_cg_escapeFromMathToFakeText:n {#1} } + { \__mhchem_output_escapeFromMathToText:n { #1 } } + } +\tl_new:N \l__mhchem_cg_escapeFromMathToFakeText_result_tl +\cs_new_protected:Npn \__mhchem_cg_escapeFromMathToFakeText:n #1 + { + \tl_clear:N \l__mhchem_cg_escapeFromMathToFakeText_result_tl + \__mhchem_cg_escapeFromMathToFakeText_loop: #1 \q_recursion_stop + \__mhchem_output_escapeFromMathToRomanMath:n { \tl_use:N \l__mhchem_cg_escapeFromMathToFakeText_result_tl } + } +\cs_new_protected:Npn \__mhchem_cg_escapeFromMathToFakeText_loop: + { + \peek_meaning:NTF \q_recursion_stop + { \use_none:n } + { + \peek_catcode_remove:NTF \c_math_toggle_token + { + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_cg_escapeFromMathToFakeText_result_tl } + { __mhchem_cg_escapeFromMathToFakeText_loop: } + } + { + \peek_catcode:NTF \c_group_begin_token + { + \__mhchem_loopHelper_appendNextGroup:NNn + \l__mhchem_cg_escapeFromMathToFakeText_result_tl + \__mhchem_cg_escapeFromMathToFakeText_loop: + }{ + \peek_charcode_remove:NTF \c_space_token + { + \tl_put_right:Nn + \l__mhchem_cg_escapeFromMathToFakeText_result_tl + { \mkern6mu } + \__mhchem_cg_escapeFromMathToFakeText_loop: + }{ + \peek_charcode_remove:NTF - + { + \tl_put_right:Nn + \l__mhchem_cg_escapeFromMathToFakeText_result_tl + { \mhchem@hyphen } + \__mhchem_cg_escapeFromMathToFakeText_loop: + } + % else + { + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cg_escapeFromMathToFakeText_result_tl + \__mhchem_cg_escapeFromMathToFakeText_loop: + } + }}}} + } + +\cs_new_protected:Npn \__mhchem_cg_replaceForAmount:N #1 + { + \regex_replace_once:NnN + \l__mhchem_regex_fraction_fregex + { \c{__mhchem_cg_frac:nn} \cB[\1\cE] \cB[\2\cE] } + #1 + } +\cs_new_protected:Npn \__mhchem_cg_frac:nn #1#2 + { + \ensuremath{\frac + { \__mhchem_output_withFont:n {#1} } + { \__mhchem_output_withFont:n {#2} } + } + } + +\cs_new_protected:Npn \__mhchem_cg_replaceForElement:N #1 + {} + +\tl_new:N \l__mhchem_cg_replaceForSubscript_result_tl +\tl_new:N \l__mhchem_cg_replaceForSubscript_state_tl +\cs_new_protected:Npn \__mhchem_cg_replaceForSubscript:N #1 + { + \int_compare:nTF { \l__mhchem_option_version_int > 3} + { + \regex_match:NVTF + \l__mhchem_regex_nonFormula_fregex + #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_cg_itshape:n}\cB[ \0 \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 + { + \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 + } + } +\cs_new_protected:Npn \__mhchem_cg_replaceForSubscript_loop: + { + \peek_meaning:NTF \q_recursion_stop + { \use_none:n } + { + \peek_catcode_remove:NTF \c_math_toggle_token + { + \tl_set:Nn \l__mhchem_cg_replaceForSubscript_state_tl { s } + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_cg_replaceForSubscript_result_tl } + { __mhchem_cg_replaceForSubscript_loop: } + } + { + \peek_catcode:NTF \c_group_begin_token + { + \tl_set:Nn \l__mhchem_cg_replaceForSubscript_state_tl { s } + \__mhchem_loopHelper_appendNextGroup:NNn + \l__mhchem_cg_replaceForSubscript_result_tl + \__mhchem_cg_replaceForSubscript_loop: + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_digit_pregex + { + \tl_set:Nn \l__mhchem_cg_replaceForSubscript_state_tl { 9 } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cg_replaceForSubscript_result_tl + \__mhchem_cg_replaceForSubscript_loop: + }{ + \peek_charcode_remove:NTF - + { + \int_compare:nTF { \l__mhchem_option_version_int > 3 } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSubscript_result_tl + { \__mhchem_output_minus: } + } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSubscript_result_tl { - } + } + \tl_set:Nn \l__mhchem_cg_replaceForSubscript_state_tl { s } + \__mhchem_cg_replaceForSubscript_loop: + }{ + \peek_charcode_remove:NTF , + { + \str_if_eq:VnTF \l__mhchem_cg_replaceForSubscript_state_tl { 9 } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSubscript_result_tl + { \__mhchem_output_commaAutoSmall: } + } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSubscript_result_tl + { \__mhchem_output_commaEnumerationSmall: } + } + \tl_set:Nn \l__mhchem_cg_replaceForSubscript_state_tl { s } + \__mhchem_cg_replaceForSubscript_loop: + } + % else + { + \tl_set:Nn \l__mhchem_cg_replaceForSubscript_state_tl { s } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cg_replaceForSubscript_result_tl + \__mhchem_cg_replaceForSubscript_loop: + } + }}}}} + } + +\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 + \tl_set:NV #1 \l__mhchem_cg_replaceForSuperscript_result_tl + } +\cs_new_protected:Npn \__mhchem_cg_replaceForSuperscript_loop: + { + \peek_meaning:NTF \q_recursion_stop + { + \str_if_eq:VnT \l__mhchem_cg_replaceForSuperscript_state_tl { 9. } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_electronDot: } + } + \use_none:n + }{ + \peek_catcode_remove:NTF \c_math_toggle_token + { + \str_if_eq:VnT \l__mhchem_cg_replaceForSuperscript_state_tl { 9. } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_electronDot: } + } + \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { s } + \__mhchem_loopHelper_appendWithinMathTokens:nn + { l__mhchem_cg_replaceForSuperscript_result_tl } + { __mhchem_cg_replaceForSuperscript_loop: } + }{ + \peek_catcode:NTF \c_group_begin_token + { + \str_if_eq:VnT \l__mhchem_cg_replaceForSuperscript_state_tl { 9. } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_electronDot: } + } + \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { s } + \__mhchem_loopHelper_appendNextGroup:NNn + \l__mhchem_cg_replaceForSuperscript_result_tl + \__mhchem_cg_replaceForSuperscript_loop: + }{ + \peek_charcode_remove:NTF - + { + \str_if_eq:VnT \l__mhchem_cg_replaceForSuperscript_state_tl { 9. } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_electronDot: } + } + \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { s } + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_minus: } + \__mhchem_cg_replaceForSuperscript_loop: + }{ + \peek_charcode_remove:NTF . + { + \str_case:VnF \l__mhchem_cg_replaceForSuperscript_state_tl + { + { 9. } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_electronDot: \__mhchem_output_electronDot: } + \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { s } + } + { 9 } + { \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { 9. } } + } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_electronDot: } + } + \__mhchem_cg_replaceForSuperscript_loop: + }{ + \__mhchem_regex_peek:NTF \l__mhchem_regex_oneLowercaseLetter_pregex + { + \str_if_eq:VnT \l__mhchem_cg_replaceForSuperscript_state_tl { 9. } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_electronDot: } + } + \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { s } + \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 + { + \str_if_eq:VnT \l__mhchem_cg_replaceForSuperscript_state_tl { 9. } + { \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl { . } } + \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { 9 } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cg_replaceForSuperscript_result_tl + \__mhchem_cg_replaceForSuperscript_loop: + }{ + \peek_charcode_remove:NTF * + { + \str_if_eq:VnT \l__mhchem_cg_replaceForSuperscript_state_tl { 9. } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_electronDot: } + } + \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { s } + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_excited: } + \__mhchem_cg_replaceForSuperscript_loop: + }{ + \peek_charcode_remove:NTF , + { + \str_case:VnF \l__mhchem_cg_replaceForSuperscript_state_tl + { + { 9. } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_electronDot: } + } + { 9 } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_commaAutoSmall: } + } + } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_commaEnumerationSmall: } + } + \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { s } + \__mhchem_cg_replaceForSuperscript_loop: + } + % else + { + \str_if_eq:VnT \l__mhchem_cg_replaceForSuperscript_state_tl { 9. } + { + \tl_put_right:Nn \l__mhchem_cg_replaceForSuperscript_result_tl + { \__mhchem_output_electronDot: } + } + \tl_set:Nn \l__mhchem_cg_replaceForSuperscript_state_tl { s } + \__mhchem_loopHelper_appendNextToken:NNn + \l__mhchem_cg_replaceForSuperscript_result_tl + \__mhchem_cg_replaceForSuperscript_loop: + } + }}}}}}}} + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% output %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\bool_new:N \l__mhchem_output_isMathMode_bool +\cs_new_protected:Npn \__mhchem_output_defMathOrText: + { + \bool_if:nTF + { + \mode_if_math_p: || + ( \l__mhchem_ce_ceActive_bool && \int_compare_p:n { \l__mhchem_option_version_int < 2 } ) + } + { + \bool_set_true:N \l__mhchem_output_isMathMode_bool + } + { + \bool_set_false:N \l__mhchem_output_isMathMode_bool + \mhchem@option@textFont + } + } + +\cs_new_protected:Npn \__mhchem_output_amount:n #1 + { + \__mhchem_output_withFont:n {#1} + \__mhchem_output_skipAfterAmount: + } +\cs_new_protected:Npn \__mhchem_output_coreFive:nnnnnnn #1#2#3#4#5#6#7 + { + \group_begin: + \bool_if:nT + { \tl_if_empty_p:n {#7} && ! \tl_if_empty_p:n {#5} } + { \bool_set_true:N \l__mhchem_option_superscriptsStacked_bool } + \m@th + \ensuremath + { + \tl_if_empty:nF {#1#2} + { + \hphantom { {}^{\__mhchem_output_withFont:n{#1}}\c_math_subscript_token{\__mhchem_output_withFont:n{#2}} } + { \vphantom { \__mhchem_output_withFont:n { X } } } + ^ { + \__mhchem_output_coreFive_llap:n + { + \vphantom { \smash[t] { \__mhchem_output_scriptWithFont:n { 2 } } } + \__mhchem_output_scriptWithFont:n {#1} + } + } + \tl_if_empty:nF {#2} + { + \c_math_subscript_token { + \__mhchem_output_coreFive_llap:n + { + \vphantom { \__mhchem_output_scriptWithFont:n { 2 } } + \smash[t] { \__mhchem_output_scriptWithFont:n {#2} } + } + } + } + \mhchem@minispace + } + \__mhchem_output_withFont:n {#3} + \tl_if_empty:nF {#4#5#6#7} + { + \bool_if:NTF \l__mhchem_option_superscriptsStacked_bool + { + { \vphantom { \__mhchem_output_withFont:n { X } } } + \tl_if_empty:nF {#6} + { + \c_math_subscript_token + { + \vphantom { \__mhchem_output_scriptWithFont:n { 2 } } + \smash[t] { \__mhchem_output_scriptWithFont:n {#6} } + } + } + ^ { + \vphantom { \smash[t] { \__mhchem_output_scriptWithFont:n { 2 } } } + \__mhchem_output_scriptWithFont:n {#4#5#7} + } + } + % else + { + \bool_if:NTF \l__mhchem_option_subscriptsDeep_bool + { + \tl_if_empty:nF {#4} + { + { \vphantom { \__mhchem_output_withFont:n { X } } } + ^ { + \vphantom { \smash[t] { \__mhchem_output_scriptWithFont:n { 2 } } } + \__mhchem_output_scriptWithFont:n {#4} + } + \c_math_subscript_token + { + \vphantom { \__mhchem_output_scriptWithFont:n { 2 } } + } + } + \tl_if_empty:nF {#5#6#7} + { + { \vphantom { \__mhchem_output_withFont:n { X } } } + \tl_if_empty:nF {#6} + { + \c_math_subscript_token + { + \vphantom { \__mhchem_output_scriptWithFont:n { 2 } } + \smash[t] { \__mhchem_output_scriptWithFont:n {#6} } + } + } + ^ { + \vphantom { \smash[t] { \__mhchem_output_scriptWithFont:n { 2 } } } + \hphantom { \__mhchem_output_scriptWithFont:n {#6} } + \__mhchem_output_scriptWithFont:n {#5#7} + } + } + } + { + \tl_if_empty:nF {#4} + { + { \vphantom { \__mhchem_output_withFont:n { X } } } + ^ { + \__mhchem_output_scriptWithFont:n {#4} + } + } + \tl_if_empty:nF {#6} + { + { \vphantom { \__mhchem_output_withFont:n { X } } } + \c_math_subscript_token + { + \smash[t] { \__mhchem_output_scriptWithFont:n {#6} } + } + } + \tl_if_empty:nF {#5#7} + { + { \vphantom { \__mhchem_output_withFont:n { X } } } + ^ { + \__mhchem_output_scriptWithFont:n {#5#7} + } + } + } + } + } + } + \group_end: + } +\cs_new_protected:Npn \__mhchem_output_coreFive_llap:n #1 + { + \mathchoice + {\llap{\ensuremath{\displaystyle#1}}} + {\llap{\ensuremath{\textstyle#1}}} + {\llap{\ensuremath{\scriptstyle#1}}} + {\llap{\ensuremath{\scriptscriptstyle#1}}} + } +%%% @minispace +\newlength\mhchem@minispace@tmp +\newcommand*\mhchem@minispace{% + \setlength{\mhchem@minispace@tmp}{0pt-\widthof{${}^8\c_math_subscript_token8$}+% + \widthof{$\text{C}^8\c_math_subscript_token8$}-\widthof{$\text{C}^{}\c_math_subscript_token{}$}}% + \kern\mhchem@minispace@tmp% +} +%%% @minibackspace +\newlength\mhchem@minibackspace@tmp +\newcommand*\mhchem@minibackspace{% + \setlength{\mhchem@minibackspace@tmp}{0pt-\widthof{${}\c_math_subscript_token{2}{}\c_math_subscript_token{2}$}+\widthof{${}\c_math_subscript_token{22}$}}% + \kern\mhchem@minibackspace@tmp% +} + +\cs_new_protected:Npn \__mhchem_output_withFont:n #1 + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { \__mhchem_output_escapeFromMathToRomanMath:n {#1} } + { \__mhchem_output_escapeFromMathToText:n {#1} } + } +\cs_new_protected:Npn \__mhchem_output_scriptWithFont:n #1 + { + \int_compare:nT + { \l__mhchem_option_version_int > 3 } + { + \thinmuskip=0mu + \medmuskip=0mu + \thickmuskip=0mu + } + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { + \int_compare:nTF + { \l__mhchem_option_version_int < 2 } + {#1} + { \__mhchem_output_escapeFromMathToRomanMath:n {#1} } + } + { \__mhchem_output_escapeFromMathToText:n {#1} } + } +\cs_new_protected:Npn \__mhchem_output_escapeFromMathToText:n #1 + { \text { \mhchem@hook@beforeText #1 } } +\cs_new_protected:Npn \__mhchem_output_escapeToRomanMath:n #1 + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { \__mhchem_output_escapeFromMathToRomanMath:n {#1} } + { \__mhchem_output_escapeFromTextToRomanMath:n {#1} } + } +\cs_new_protected:Npn \__mhchem_output_escapeFromTextToRomanMath:n #1 + { \ensuremath { \__mhchem_output_escapeFromMathToRomanMath:n {#1} } } +\cs_new_protected:Npn \__mhchem_output_escapeFromMathToRomanMath:n #1 + { \mhchem@option@mathFont { \mhchem@hook@beforeRomanMath #1 } } +\cs_new_protected:Npn \__mhchem_output_escapeFromTextToItalicText:n #1 + { \group_begin: \itshape \mhchem@hook@beforeItalicText #1 \group_end: \/ } +\cs_new_protected:Npn \__mhchem_output_escapeToItalicMath:n #1 + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { \__mhchem_output_escapeFromMathToItalicMath:n {#1} } + { \ensuremath { \mhchem@hook@beforeItalicMath #1 } } + } +\cs_new_protected:Npn \__mhchem_output_escapeFromMathToItalicMath:n #1 + { + \bool_if:NTF \l__mhchem_option_unicodemath_bool + { \text { \ensuremath { \symit { \mhchem@hook@beforeItalicMath #1 } } } } + { \text { \ensuremath { \mhchem@hook@beforeItalicMath #1 } } } + } + +\cs_new_protected:Npn \__mhchem_output_skipAfterAmount: + { \, } +\cs_new_protected:Npn \__mhchem_output_skipBeforeStateOfAggregation: + { \bool_if:NF \g__mhchem_cf_lastElementWithScript_bool { \hspace{0.2ex} } } +\cs_new_protected:Npn \__mhchem_output_minus: + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { - } + { \mhchem@option@textminus } + } +\cs_new_protected:Npn \__mhchem_output_operatorPlus: + { + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { \ensuremath { {}+{} } } + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { {}+{} } + { \nobreak \hspace{0.5ex plus 0.3ex minus 0.3ex} + \hspace{0.5ex plus 0.3ex minus 0.3ex} } + } + } +\cs_new_protected:Npn \__mhchem_output_operatorMinus: + { + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { \ensuremath { {}-{} } } + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { \nobreak \hspace{0.5ex plus 0.3ex minus 0.1ex} {-} \hspace{0.5ex plus 0.3ex minus 0.1ex} } + { \nobreak \hspace{0.6ex plus 0.3ex minus 0.1ex} -- \hspace{0.6ex plus 0.3ex minus 0.1ex} } + } + } +\cs_new_protected:Npn \__mhchem_output_operatorEquals: + { + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { {}={} } + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { \nobreak \hspace{0.5ex plus 0.3ex minus 0.1ex} {=} \hspace{0.5ex plus 0.3ex minus 0.1ex} } + { \nobreak \hspace{0.6ex plus 0.3ex minus 0.1ex} = \hspace{0.6ex plus 0.3ex minus 0.1ex} } + } + } +\cs_new_protected:Npn \__mhchem_output_operatorPlusMinus: + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { {}\pm{} } + { \nobreak \ensuremath { {}\pm{} } } + } +\cs_new_protected:Npn \__mhchem_output_electronDot: + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { \mhchem@option@textElectronDot } + { \mhchem@option@textElectronDot } + } +\cs_new_protected:Npn \__mhchem_output_additionCompound: + { + \ensuremath { \,{\mhchem@option@cdot}\, } + } +\cs_new_protected:Npn \__mhchem_output_verticalBar: + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { | } + { \text{\textbar} } + } +\cs_new_protected:Npn \__mhchem_output_excited: + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { \ast } + { \smash{\raisebox{-0.4em}{\scalebox{1.3}{*}}} } + } +\cs_new_protected:Npn \__mhchem_output_commaDecimal: + { \__mhchem_output_withFont:n { {,} } } +\cs_new_protected:Npn \__mhchem_output_commaEnumeration: + { \__mhchem_output_withFont:n { {,} } \ensuremath { \mkern3mu } } +\cs_new_protected:Npn \__mhchem_output_commaAuto: + { + \__mhchem_regex_peek:NTF \l__mhchem_regex_digit_pregex + { \__mhchem_output_commaDecimal: } + { \__mhchem_output_commaEnumeration: } + } +\cs_new_protected:Npn \__mhchem_output_commaEnumerationSmall: + { \__mhchem_output_withFont:n { {,} } \ensuremath { \mkern1mu } } +\cs_new_protected:Npn \__mhchem_output_commaAutoSmall: + { + \__mhchem_regex_peek:NTF \l__mhchem_regex_digit_pregex + { \__mhchem_output_commaDecimal: } + { \__mhchem_output_commaEnumerationSmall: } + } + +\cs_new_protected:Npn \__mhchem_output_greek:n #1 + { + \group_begin: + \cs_set_eq:NN \alpha \__mhchem_output_greek_orig_alpha + \cs_set_eq:NN \beta \__mhchem_output_greek_orig_beta + \cs_set_eq:NN \gamma \__mhchem_output_greek_orig_gamma + \cs_set_eq:NN \delta \__mhchem_output_greek_orig_delta + \cs_set_eq:NN \epsilon \__mhchem_output_greek_orig_epsilon + \cs_set_eq:NN \zeta \__mhchem_output_greek_orig_zeta + \cs_set_eq:NN \eta \__mhchem_output_greek_orig_eta + \cs_set_eq:NN \theta \__mhchem_output_greek_orig_theta + \cs_set_eq:NN \iota \__mhchem_output_greek_orig_iota + \cs_set_eq:NN \kappa \__mhchem_output_greek_orig_kappa + \cs_set_eq:NN \lambda \__mhchem_output_greek_orig_lambda + \cs_set_eq:NN \mu \__mhchem_output_greek_orig_mu + \cs_set_eq:NN \nu \__mhchem_output_greek_orig_nu + \cs_set_eq:NN \xi \__mhchem_output_greek_orig_xi + \cs_set_eq:NN \omicron \__mhchem_output_greek_orig_omicron + \cs_set_eq:NN \pi \__mhchem_output_greek_orig_pi + \cs_set_eq:NN \rho \__mhchem_output_greek_orig_rho + \cs_set_eq:NN \sigma \__mhchem_output_greek_orig_sigma + \cs_set_eq:NN \tau \__mhchem_output_greek_orig_tau + \cs_set_eq:NN \upsilon \__mhchem_output_greek_orig_upsilon + \cs_set_eq:NN \phi \__mhchem_output_greek_orig_phi + \cs_set_eq:NN \chi \__mhchem_output_greek_orig_chi + \cs_set_eq:NN \psi \__mhchem_output_greek_orig_psi + \cs_set_eq:NN \omega \__mhchem_output_greek_orig_omega + \cs_set_eq:NN \Alpha \__mhchem_output_greek_orig_Alpha + \cs_set_eq:NN \Beta \__mhchem_output_greek_orig_Beta + \cs_set_eq:NN \Gamma \__mhchem_output_greek_orig_Gamma + \cs_set_eq:NN \Delta \__mhchem_output_greek_orig_Delta + \cs_set_eq:NN \Epsilon \__mhchem_output_greek_orig_Epsilon + \cs_set_eq:NN \Zeta \__mhchem_output_greek_orig_Zeta + \cs_set_eq:NN \Eta \__mhchem_output_greek_orig_Eta + \cs_set_eq:NN \Theta \__mhchem_output_greek_orig_Theta + \cs_set_eq:NN \Iota \__mhchem_output_greek_orig_Iota + \cs_set_eq:NN \Kappa \__mhchem_output_greek_orig_Kappa + \cs_set_eq:NN \Lambda \__mhchem_output_greek_orig_Lambda + \cs_set_eq:NN \Mu \__mhchem_output_greek_orig_Mu + \cs_set_eq:NN \Nu \__mhchem_output_greek_orig_Nu + \cs_set_eq:NN \Xi \__mhchem_output_greek_orig_Xi + \cs_set_eq:NN \Omicron \__mhchem_output_greek_orig_Omicron + \cs_set_eq:NN \Pi \__mhchem_output_greek_orig_Pi + \cs_set_eq:NN \Rho \__mhchem_output_greek_orig_Rho + \cs_set_eq:NN \Sigma \__mhchem_output_greek_orig_Sigma + \cs_set_eq:NN \Tau \__mhchem_output_greek_orig_Tau + \cs_set_eq:NN \Upsilon \__mhchem_output_greek_orig_Upsilon + \cs_set_eq:NN \Phi \__mhchem_output_greek_orig_Phi + \cs_set_eq:NN \Chi \__mhchem_output_greek_orig_Chi + \cs_set_eq:NN \Psi \__mhchem_output_greek_orig_Psi + \cs_set_eq:NN \Omega \__mhchem_output_greek_orig_Omega + \bool_if:NTF \l__mhchem_cg_withinMathTokens_bool + { + { \chemgreek_get_from_mapping:nn { default } {#1} } + } + { + \mode_if_math:TF + { \chemgreek_get_from_mapping:nn { mhchem-math } {#1} } + { \chemgreek_get_from_mapping:nn { mhchem-text } {#1} } + } + \group_end: + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% bonds %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\cs_new_protected:Npn \__mhchem_output_bond_single: + { + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { {\ensuremath{-}} } + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { {\ensuremath{-}} } + { \text{\mhchem@option@textminus} } + } + } +\cs_new_protected:Npn \__mhchem_output_bond_double: + { + \rlap { \protect \raisebox { .2ex }{ \__mhchem_output_bond_single: } } + \protect \raisebox { -.2ex }{ \__mhchem_output_bond_single: } + } +\cs_new_protected:Npn \__mhchem_output_bond_triple: + { + \rlap { \protect \raisebox { .4ex } { \__mhchem_output_bond_single: } } + \rlap{ \__mhchem_output_bond_single: } + \protect \raisebox { -.4ex } { \__mhchem_output_bond_single: } + } +\cs_new_protected:Npn \__mhchem_output_bond_half: + { + \mhchem@setbondwidth + \mhchem@halfbond + } +\cs_new_protected:Npn \__mhchem_output_bond_oneAndHalf: + { + \mhchem@setbondwidth + \rlap{\protect\raisebox{.2ex}{\mhchem@halfbond}} + \protect\raisebox{-.2ex}{\__mhchem_output_bond_single:} + } +\cs_new_protected:Npn \__mhchem_output_bond_twoAndHalf: + { + \mhchem@setbondwidth + \rlap{\protect\raisebox{.4ex}{\mhchem@halfbond}} + \rlap{\__mhchem_output_bond_single:} + \protect\raisebox{-.4ex}{\__mhchem_output_bond_single:} + } +\cs_new_protected:Npn \__mhchem_output_bond_twoAndHalff: + { + \mhchem@setbondwidth + \rlap{\protect\raisebox{.4ex}{\__mhchem_output_bond_single:}} + \rlap{\mhchem@halfbond} + \protect\raisebox{-.4ex}{\__mhchem_output_bond_single:} + } +\cs_new_protected:Npn \__mhchem_output_bond_dotdotdot: + { {\cdot}{\cdot}{\cdot} } +\cs_new_protected:Npn \__mhchem_output_bond_dotdotdotdot: + { {\cdot}{\cdot}{\cdot}{\cdot} } +\cs_new_protected:Npn \__mhchem_output_bond_rightArrow: + { {\rightarrow} } +\cs_new_protected:Npn \__mhchem_output_bond_leftArrow: + { {\leftarrow} } + +\newlength\mhchem@bondwidth% +\newlength\mhchem@bondheight% +\newlength\mhchem@smallbondwidth@tmpA% +\newlength\mhchem@smallbondwidth@tmpB% +\newlength\mhchem@smallbondwidth% +\newlength\mhchem@bondtmp@minussidebearingleft +\newlength\mhchem@bondtmp@minussidebearingright + +\def\mhchem@setbondwidth{% + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { + \setlength\mhchem@bondtmp@minussidebearingleft{\mhchem@option@minusmathsidebearingleft} + \setlength\mhchem@bondtmp@minussidebearingright{\mhchem@option@minusmathsidebearingright} + } + { + \bool_if:NTF \l__mhchem_output_isMathMode_bool + { + \setlength\mhchem@bondtmp@minussidebearingleft{\mhchem@option@minusmathsidebearingleft} + \setlength\mhchem@bondtmp@minussidebearingright{\mhchem@option@minusmathsidebearingright} + } + { + \setlength\mhchem@bondtmp@minussidebearingleft{\mhchem@option@minustextsidebearingleft} + \setlength\mhchem@bondtmp@minussidebearingright{\mhchem@option@minustextsidebearingright} + } + } + \setlength\mhchem@bondwidth{\widthof{\__mhchem_output_bond_single:}}% + \setlength\mhchem@bondheight{\heightof{\__mhchem_output_bond_single:}}% + \setlength\mhchem@smallbondwidth@tmpA{% + \mhchem@bondwidth-\mhchem@bondtmp@minussidebearingleft-\mhchem@bondtmp@minussidebearingright}% + \setlength\mhchem@smallbondwidth@tmpB{% + \widthof{\__mhchem_output_bond_single:\__mhchem_output_bond_single:\__mhchem_output_bond_single:}-\mhchem@bondtmp@minussidebearingleft-% + \mhchem@bondtmp@minussidebearingright}% + \setlength\mhchem@smallbondwidth{\mhchem@bondwidth*% + \ratio{\mhchem@smallbondwidth@tmpA}{\mhchem@smallbondwidth@tmpB}}% +} +\def\mhchem@halfbond{\rlap{\hspace{\mhchem@bondtmp@minussidebearingleft}% + \resizebox{\mhchem@smallbondwidth}{\mhchem@bondheight}{\__mhchem_output_bond_single:}\unskip% + \resizebox{\mhchem@smallbondwidth}{\mhchem@bondheight}{\__mhchem_output_bond_single:}% + \resizebox{\mhchem@smallbondwidth}{\mhchem@bondheight}{\__mhchem_output_bond_single:}}% + \phantom{\__mhchem_output_bond_single:}}% + +\msg_new:nnn { mhchem } { bond / unknown } + { Unknown~bond~type~in~\string\bond~(#1) } + +\ExplSyntaxOff +\ExplSyntaxOn % with special tilde +\char_set_catcode_letter:n { 126 } % tilde +\cs_new_protected:Npn \mhchem@bond #1 + { + \ensuremath + { + \str_case:nnF {#1} + { + { - } { \__mhchem_output_bond_single: } + { 1 } { \__mhchem_output_bond_single: } + { = } { \__mhchem_output_bond_double: } + { 2 } { \__mhchem_output_bond_double: } + { ## } { \__mhchem_output_bond_triple: } + { 3 } { \__mhchem_output_bond_triple: } + { ~ } { \__mhchem_output_bond_half: } + { ~- } { \__mhchem_output_bond_oneAndHalf: } + { ~-- } { \__mhchem_output_bond_twoAndHalf: } + { ~= } { \__mhchem_output_bond_twoAndHalf: } + { -~- } { \__mhchem_output_bond_twoAndHalff: } + { ... } { \__mhchem_output_bond_dotdotdot: } + { .... } { \__mhchem_output_bond_dotdotdotdot: } + { -> } { \__mhchem_output_bond_rightArrow: } + { <- } { \__mhchem_output_bond_leftArrow: } + } + { + \msg_error:nnx { mhchem } { bond / unknown } {#1} + } + } + } +\ExplSyntaxOff % end of Expl with tilde + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% Package Options %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ExplSyntaxOn + +\tl_new:N \l__mhchem_option_tmpa_tl +\msg_new:nnn { mhchem } { options / version-too-high } + { + You~are~using~version~4.xx~of~mhchem, + but~you~entered~a~higher~version~number~that~is~not~supported~yet. + } + +\def\mhchem@option@mathFont{\mathrm} +\def\mhchem@option@textFont{} +\def\mhchem@hook@beforeCe{} +\def\mhchem@hook@afterCe{} +\def\mhchem@hook@beforeText{} +\def\mhchem@hook@beforeItalicText{} +\def\mhchem@hook@beforeRomanMath{} +\def\mhchem@hook@beforeItalicMath{} +\bool_new:N \l__mhchem_option_layoutWasSet_bool +\bool_set_false:N \l__mhchem_option_layoutWasSet_bool +\bool_new:N \l__mhchem_option_superscriptsStacked_bool +\bool_new:N \l__mhchem_option_subscriptsDeep_bool +\cs_new_protected:Npn \mhchem@option@textElectronDot {} +\cs_new_protected:Npn \mhchem@option@cdot {} +\bool_new:N \l__mhchem_option_textgreekSelectedByUser_bool +\bool_set_false:N \l__mhchem_option_textgreekSelectedByUser_bool +\bool_new:N \l__mhchem_option_mathgreekSelectedByUser_bool +\bool_set_false:N \l__mhchem_option_mathgreekSelectedByUser_bool + +\keys_define:nn { mhchem } + { + version .int_set:N = \l__mhchem_option_version_int, + version .value_required:n = true, + version .initial:n = { -1 }, + version .default:n = { -1 }, + + textfontcommand .code:n = { \def\mhchem@option@textFont{#1} }, + textfontname .code:n = { \def\mhchem@option@textFont{\csname#1\endcsname} }, + mathfontcommand .code:n = { \def\mhchem@option@mathFont{#1} }, + mathfontname .code:n = { \def\mhchem@option@mathFont{\csname#1\endcsname} }, + font .choice:, + font / sf .code:n = + { + \def\mhchem@option@textFont{\sffamily} + \def\mhchem@option@mathFont{\mathsf} + }, + font / .code:n = + { + \def\mhchem@option@textFont{} + \def\mhchem@option@mathFont{\mathrm} + }, + + text-greek .code:n = + { + \chemgreek_declare_mapping_alias:nn { mhchem-text } {#1} + \bool_set_true:N \l__mhchem_option_textgreekSelectedByUser_bool + }, + math-greek .code:n = + { + \chemgreek_declare_mapping_alias:nn { mhchem-math } {#1} + \bool_set_true:N \l__mhchem_option_mathgreekSelectedByUser_bool + }, + + layout .choice:, + layout / stacked .code:n = + { + \bool_set_true:N \l__mhchem_option_layoutWasSet_bool + \bool_set_true:N \l__mhchem_option_superscriptsStacked_bool + }, + layout / staggered-deep .code:n = + { + \bool_set_true:N \l__mhchem_option_layoutWasSet_bool + \bool_set_false:N \l__mhchem_option_superscriptsStacked_bool + \bool_set_true:N \l__mhchem_option_subscriptsDeep_bool + }, + layout / staggered-flat .code:n = + { + \bool_set_true:N \l__mhchem_option_layoutWasSet_bool + \bool_set_false:N \l__mhchem_option_superscriptsStacked_bool + \bool_set_false:N \l__mhchem_option_subscriptsDeep_bool + }, + + minus-sidebearing-left .dim_set:N = \mhchem@option@minusmathsidebearingleft, + minus-sidebearing-right .dim_set:N = \mhchem@option@minusmathsidebearingright, + minus-math-sidebearing-left .dim_set:N = \mhchem@option@minusmathsidebearingleft, + minus-math-sidebearing-left .initial:n = { 0.06em }, + minus-math-sidebearing-right .dim_set:N = \mhchem@option@minusmathsidebearingright, + minus-math-sidebearing-right .initial:n = { 0.11em }, + minus-text-sidebearing-left .dim_set:N = \mhchem@option@minustextsidebearingleft, + minus-text-sidebearing-left .initial:n = { 0.10em }, + minus-text-sidebearing-right .dim_set:N = \mhchem@option@minustextsidebearingright, + minus-text-sidebearing-right .initial:n = { 0.16em }, + + arrows .code:n = + { + \str_case:nnF {#1} + { + { font } + { \tl_set:Nn \l__mhchem_option_arrowType_tl {#1} } + } + { + \regex_match:nnTF + { \A pgf .* \Z } + {#1} + { \__mhchem_arrow_init_pgf: {#1} } + { + { \msg_error:nnn { mhchem } { error-arrow-type } {#1} } + } + } + }, + arrows .initial:n = { font }, + + textminus .tl_set:N = \mhchem@option@textminus, + textminus .initial:n = { \hspace{0.3ex} -- \hspace{0.3ex} }, + + cdot .tl_set:N = \mhchem@option@cdot, + cdot .initial:n = { \cdot }, + textelectrondot .tl_set:N = \mhchem@option@textElectronDot, + textelectrondot .initial:n = + { + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { \ensuremath{\textbf{\fontfamily{cmr}\selectfont\textperiodcentered}} } + { \ensuremath { \bullet } } + }, + + } + +\newcommand*\mhchemoptions[1] + { \keys_set:nn { mhchem } {#1} } + +\bool_new:N \l__mhchem_option_inPreamble_bool +\bool_set_true:N \l__mhchem_option_inPreamble_bool +\ProcessKeysPackageOptions{mhchem} +\bool_set_false:N \l__mhchem_option_inPreamble_bool + +\int_compare:nT { -1 = \l__mhchem_option_version_int } + { + \PackageWarningNoLine { mhchem } + { + You~did~not~specify~a~'version'~option~for~the~mhchem\MessageBreak + package.~Please~write~\string\usepackage[version=4]{mhchem}\MessageBreak + in~your~preamble~(or~any~lower~number~for\MessageBreak + compatibility~mode),~because~you~might~get~slightly\MessageBreak + different~output~with~the~same~input~in~future~versions + } + \int_set:Nn \l__mhchem_option_version_int { 4 } + } +% else + { + \int_compare:nT { \l__mhchem_option_version_int > 4 } + { + \msg_error:nn { mhchem } { options / version-too-high } + } + } +\bool_if:NF \l__mhchem_option_layoutWasSet_bool + { + \int_compare:nTF { \l__mhchem_option_version_int < 4 } + { \mhchemoptions{layout=staggered-deep} } + { \mhchemoptions{layout=staggered-flat} } + } + +\bool_new:N \l__mhchem_option_unicodemath_bool +\AtBeginDocument + { + \bool_if:nF \l__mhchem_option_textgreekSelectedByUser_bool + { + \chemgreek_declare_mapping_alias:nn { mhchem-text } { \l_chemgreek_active_mapping_tl } + } + \bool_if:nF \l__mhchem_option_mathgreekSelectedByUser_bool + { + \chemgreek_declare_mapping_alias:nn { mhchem-math } { \l_chemgreek_active_mapping_tl } + } + \@ifpackageloaded {unicode-math} + { \bool_set_true:N \l__mhchem_option_unicodemath_bool } + { \bool_set_false:N \l__mhchem_option_unicodemath_bool } + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% legacy %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\int_compare:nT { \l__mhchem_option_version_int < 4 } + { + \newcommand*\cmath[1]{\__mhchem_output_escapeFromMathToItalicMath:n{#1}} + \DeclareRobustCommand\cf[2][]{\mhchem@cf[#1]{#2}} + \DeclareRobustCommand\cee[1]{\mhchem@cee{#1}} + } + |