texlive[61712] Master/texmf-dist: chemformula (23jan22)

commits+karl at tug.org commits+karl at tug.org
Sun Jan 23 22:05:37 CET 2022


Revision: 61712
          http://tug.org/svn/texlive?view=revision&revision=61712
Author:   karl
Date:     2022-01-23 22:05:36 +0100 (Sun, 23 Jan 2022)
Log Message:
-----------
chemformula (23jan22)

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

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/chemformula/HISTORY

Added: trunk/Master/texmf-dist/doc/latex/chemformula/HISTORY
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chemformula/HISTORY	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/chemformula/HISTORY	2022-01-23 21:05:36 UTC (rev 61712)
@@ -0,0 +1,252 @@
+--------------------------------------------------------------------------
+the CHEMFORMULA package
+
+  typeset chemical compounds and reactions
+
+--------------------------------------------------------------------------
+Clemens Niederberger
+--------------------------------------------------------------------------
+https://github.com/cgnieder/chemformula/
+contact at mychemistry.eu
+--------------------------------------------------------------------------
+If you have any ideas, questions, suggestions or bugs to report, please
+feel free to contact me.
+--------------------------------------------------------------------------
+Copyright 2011--2022 Clemens Niederberger
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+  http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Clemens Niederberger.
+--------------------------------------------------------------------------
+VERSION HISTORY
+2012/01/28 - version 3.0   - bundled with packages `chemmacros' and `ghs'
+2012/01/30 - version 3.0a  - bugfix
+                           - renamed formula => chemformula
+                             (following a request by Karl Berry for TeXlive)
+2012/02/03 - version 3.0b  - stepped number with `chemmacros'
+2012/02/05 - version 3.0c  - stepped number with `chemmacros'
+2012/02/10 - version 3.0d  - several bugfixes
+                           - new arrow type <>
+2012/02/19 - version 3.1   - new arrow types -/>, </- and <o>
+                           - new commands \DeclareChemArrow, \RenewChemArrow and
+                             \ShowChemArrow
+2012/02/26 - version 3.1a  - stepped number with `chemmacros'
+2012/03/03 - version 3.1b  - arrow types are stored in a sequence to automate the
+                             search and replace in the right order 
+                           - new arrow type ==                                   
+                           - IUPAC compliance for stoichiometric factors
+                           - new handling of super- and subscripts to correct
+                             various flaws: clear distinction between isotope and
+                             formula
+                           - new option charge-vshift
+2012/03/14 - version 3.1c  - improved arrow labels
+2012/03/20 - version 3.2   - new: option input via @{<options>}
+2012/05/07 - version 3.3   - \ch now bypasses \ref{}, \label{}, and \intertext{}
+2012/05/13 - version 3.3a  - stepped number with `chemmacros'
+2012/05/18 - version 3.3b  - stepped number with `chemmacros'
+2012/05/18 - version 3.3c  - stepped number with `chemmacros'
+2012/07/24 - version 3.3d  - stepped number with `chemmacros'
+                           - default bond length set to 1.1667ex
+                           - bug fix in the bonds
+2012/08/21 - version 3.3e  - stepped number with `chemmacros'
+2012/09/11 - version 3.4   - cleaned a little, minor bug fixes
+                           - switched to internal scratch variables
+                           - new command \bond, more bond types
+                           - new commands \DeclareChemBond, \DeclareChemBondAlias,
+                             \RenewChemBond and \ShowChemBond
+                           - radical point thicker, new options `radical-style'
+                             and `radical-radius'
+2012/10/03 - version 3.4a  - stepped number with `chemmacros'
+2013/01/04 - version 3.4b  - bug fix in the sub- and superscript handling
+2013/01/28 - version 3.5   - disallow breaks at bonds
+                           - allow breaks after arrows
+                           - made some spaces in chemformulas stretch- and
+                             shrinkable
+                           - various internal code improvements
+                           - changed defaults for horizontal spaces that have in
+                             set in ex into corresponding values in em.
+                           - improvements to the placement of sub- and superscripts
+2013/02/19 - version 3.5a  - stepped number with `chemmacros'
+2013/02/26 - version 3.6   - support for use with the `breqn' package
+                           - math escaping also via \(\)
+                           - internal: clearer escaping macros
+                           - new options: `radical-vshift', `radical-hshift'
+                             and `radical-space'
+                           - bug fix: `radical-...' options are now correctly set
+                           - stoichiometric factors: add leading 0 if missing
+                           - new option: `stoich-paren-parse'
+                           - internal changes: be way more rigid about protected
+                             and expandable macros
+                           - internal changes: clearer distinction between
+                             private macros and accessable module macros
+                           - internal changes: clearer distinction between
+                             document commands and module level commands
+                           - !()() syntax now also works with babel's French
+2013/02/27 - version 3.6a  - bug fix: escaped text and math stays escaped, i.e.
+                             also arrow code like `<=>'
+2013/04/19 - version 3.6b  - new option `arrow-min-length'
+                           - bug fix: stoichiometric fractions correctly displayed
+2013/07/06 - version 4.0   - don't need `chemmacros' package any more,
+                             `chemformula' can be used stand-alone;
+                             this has lead to a few definitions that previously
+                             were done by chemmacros; chemmacros will get them
+                             now from chemformula when needed
+                           - bug fix: allow braces in subscripts and superscripts
+                             by disabling superfluous \chemformula_subscript:n
+                             and \chemformula_superscript:n in the scripts write
+                             commands
+                           - remove superfluous rescanning at the begin of the
+                             formula input; this is handled by the sanitize
+                             command later anyway
+                           - changed internal mathshifts from $ ... $ to \( ... \)
+                           - removed superfluous \textstyle from math-frac
+                             definition
+                           - new command \charrow{}[][] that allows direct
+                             access to chemformula's arrows
+                           - new command \chname()() that allows direct access
+                             to chemformula's naming
+                           - new command \chcpd[]{} that allows typesetting a
+                             simple single formula - also not nestable with \ch
+                           - new command \setchemformula
+                           - package option: `strict'
+                           - don't allow a line break before a plus
+                             (`chem-and')
+                           - don't allow a line break between a stoichiometric
+                             factor and a compound
+                           - changed formal charges to match ``plain'' charges
+2013/07/26 - version 4.0a  - added options `arrow-penalty' (0), `plus-penalty'
+                             (700) and `bond-penalty' (10000) that determine if
+                             there may be a break after an arrow, a bond or the
+                             plus
+2013/08/24 - version 4.1   - changed `0' values in TikZ coordinates into `0pt'
+                             see http://tex.stackexchange.com/q/128792/5049 and
+                             http://tex.stackexchange.com/q/118467/5049 for
+                             reference
+                           - new option `tikz-external-disable'
+                           - new option `frac-math-cmd'
+2013/10/24 - version 4.2   - \chemformula_font_inner: is only applied /once/ to
+                             a formula, and at the beginning, fixes
+                             https://bitbucket.org/cgnieder/chemmacros/issue/23
+                           - fixed wrong setting of the TikZ bond style
+                           - new option `arrow-style'
+                           - new command \chlewis
+2013/11/04 - version 4.2a  - bug fix in \chcpd,
+                           - change sanitizing/restoring of category codes
+2014/01/24 - version 4.3   - changed behaviour of \DeclareChem to match
+                             \DeclareRobustCommand, i.e., no check if command
+                             is defined; added a \NewChem variant to each that
+                             /does/ check; use \NewChem instead of \DeclareChem
+                             for definitions
+                           - new option stoich-print
+                           - new command \chstoich
+2014/01/29 - version 4.4   - treat a single `-' as a minus sign
+2014/04/07 - version 4.5   - make sure that < and > have catcode 12 when read
+                             as parts of arrows
+                           - new arrow types `>=<', `>=<<', `>>=<' and `<==>'
+                           - arrow lengths and compound offset now correctly
+                             adapts to new fontsize if relative lengths (em,ex)
+                             are used
+                           - allow optional arguments to \\ in equation
+                             environments
+                           - allow optional arguments to \label in equation
+                             environments
+                             (credits: http://tex.stackexchange.com/a/166661/5049)
+                           - support for Kröger-Vink notation
+2014/06/30 - version 4.6   - fix: a comma in a superscript is typeset according
+                             to `decimal-marker' again
+                           - fix charge type behaviour: option `circled' and
+                             `circletype' are now obeyed if the option is
+                             changed mid-document
+                           - new option `chemformula/circled' similar to
+                             `chemmacros/circled'
+                           - new option `chemformula/circletype' similar to
+                             `chemmacros/circletype'
+2014/08/04 - version 4.7   - change dependency: pgf library `arrows.meta'
+                             instead of `arrows'
+                           - new arrow tip definition allows redeclaration to
+                             other existing tips by \pgfkeys{cf/.tip=<tip>}
+2014/08/08 - version 4.8   - fix bug introduced in last update: `butt cap' now
+                             needs to be `Butt Cap' with the new `arrows.meta'
+                             library
+                           - split from `chemmacros' bundle as independent
+                             package
+2014/10/07 - version 4.9   - new options: `minus-space', `minus-penalty',
+                             `plus-output-symbol' and `minus-output-symbol'
+2015/03/16 - version 4.10  - new macros \NewChemCompoundProperty,
+                             \RenewChemCompoundProperty,
+                             \DeclareChemCompoundProperty,
+                             \RemoveChemCompoundProperty
+2015/04/03 - version 4.10a - bug fix in \__chemformula_input_stoich:n
+2015/06/30 - version 4.11  - small changes in \chcpd
+                           - remove unnecessary \mathchoice => noticable speed
+                             improvement
+                           - \NewChemAdditionSymbol
+                           - \NewChemSymbol
+2015/08/12 - version 4.12  - remove chemmacros' `circletype' and `circled'
+                             options. They really belong to chemmacros
+                           - change requirement amsmath -> amstext
+                           - shorten definition of double and triple bonds
+2015/08/29 - version 4.12a - \chemformula_formal_plus: ,
+                             \chemformula_formal_minus:
+                             \ProvideChem... equivalents to all \NewChem...
+                             macros 
+2015/09/08 - version 4.12b - trim spaces of \ch input -- due to a change in
+                             l3kernel
+2015/01/01 - version 4.13  - clean up code
+                           - check for blank input
+                           - drop support for \[ and \]
+                           - new option `atom-format'
+2015/10/21 - version 4.14  - fix issue
+                             https://github.com/cgnieder/chemformula/issues/2
+                           - new option `adduct-penalty'
+2016/01/07 - version 4.14a - \prop_get:Nn => \prop_item:Nn
+2016/05/03 - version 4.14b - local options now are correctly working again
+                           - `atom-format' is only applied to formulas
+2016/05/11 - version 4.15  - arrow definitions don't have to be made in a
+                             certain order any more
+                           - new quasi equilibria arrows
+                           - bug fix in \RenewChemArrow
+                           - meaningful error if \charrow if used with an
+                             unknown arrow type
+2016/06/08 - version 4.15a - change requirement amstext -> amsmath; \chname
+                             uses \underset which needs amsmath
+2016/06/08 - version 4.15b - add missing variant of kernel function
+2016/08/21 - version 4.15c - corrected redundant definition of
+                             \chemformula_single_bond:
+                           - fix problem with TikZ externalization and
+                             Kroeger-Vink notation
+2017/02/02 - version 4.15d - allow `name-format' to end with a macro that
+                             takes an argument
+2017/03/23 - version 4.15e - small bug fix (issue #5)
+                           - implement \shortintertext bypass
+2019/09/23 - version 4.15f - add missing definition for temporary variable
+2019/09/27 - version 4.15g - bug fix in fontspec option
+2019/10/13 - version 4.15h - new (undocumented) option `set-catcodes'
+                           - fix behaviour with category codes
+                             (https://tex.stackexchange.com/q/511592/)
+                           - fix bug: local format changes are now applied
+                             again
+2020/02/01 - version 4.15i - fix issue #12
+2020/03/07 - version 4.15j - make sure that < and > have catcode 12 when read
+                             as arrows -- again...
+2020/03/15 - version 4.15k - fix https://tex.stackexchange.com/questions/532674/
+2020/12/22 - version 4.16  - new option `math-scripts'
+                           - use LaTeX's new hooks
+                           - get rid of unnecessary package dependencies
+2022/01/23 - version 4.17  - adjust options `stoich-print' and `frac-math-cmd'
+                             and correct bug in `stoich-print'
+                           - deprecate `stoich-print' and introduce `stoich-format'
+                           - lazy boolean evaluation where possible
+                           - fix deprecated file hook
+                           - implement issue #17
+                           - fix issue #18
+                           - fix issue #19
+                           - fix typos in code

Modified: trunk/Master/texmf-dist/doc/latex/chemformula/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chemformula/README	2022-01-23 16:29:03 UTC (rev 61711)
+++ trunk/Master/texmf-dist/doc/latex/chemformula/README	2022-01-23 21:05:36 UTC (rev 61712)
@@ -1,5 +1,5 @@
 --------------------------------------------------------------------------
-the CHEMFORMULA package v4.16 2020/12/22
+the CHEMFORMULA package v4.17 2022/01/23
 
   typeset chemical compounds and reactions
 
@@ -8,7 +8,7 @@
 Web:    https://github.com/cgnieder/chemformula/
 E-Mail: contact at mychemistry.eu
 --------------------------------------------------------------------------
-Copyright 2011--2020 Clemens Niederberger
+Copyright 2011--2022 Clemens Niederberger
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3c
@@ -23,9 +23,14 @@
 The Current Maintainer of this work is Clemens Niederberger.
 --------------------------------------------------------------------------
 The chemformula package consists of the following files
- - chemformula.sty,
- - chemformula-manual.cls, chemformula-manual.tex, chemformula-manual.pdf,
- - README
+ == STYLE FILES ==
+    chemformula.sty
+ == DOCUMENTATION FILES ==
+    chemformula-manual.tex
+    chemformula-manual.pdf
+    chemformula-manual.cls
+    README
+    HISTORY
 --------------------------------------------------------------------------
 If you have any ideas, questions, suggestions or bugs to report, please
 feel free to contact me.

Modified: trunk/Master/texmf-dist/doc/latex/chemformula/chemformula-manual.cls
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chemformula/chemformula-manual.cls	2022-01-23 16:29:03 UTC (rev 61711)
+++ trunk/Master/texmf-dist/doc/latex/chemformula/chemformula-manual.cls	2022-01-23 21:05:36 UTC (rev 61712)
@@ -12,7 +12,7 @@
 % If you have any ideas, questions, suggestions or bugs to report, please
 % feel free to contact me.
 % --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
+% Copyright 2011--2022 Clemens Niederberger
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3
@@ -26,7 +26,7 @@
 %
 % The Current Maintainer of this work is Clemens Niederberger.
 % --------------------------------------------------------------------------
-\ProvidesClass{chemformula-manual}[2020/02/01]
+\ProvidesClass{chemformula-manual}[2022/01/23]
 
 \LoadClass[load-preamble,add-index]{cnltx-doc}
 \RequirePackage{imakeidx}
@@ -301,6 +301,30 @@
   \itemize\let\change\item
 }{\enditemize}
 
+\chemsetup{
+  greek = newtx ,
+  formula = chemformula ,
+  chemformula/format = \libertineLF
+}
+
+\usepackage{acro}
+\acsetup{
+  format/long  = \scshape ,
+  format/short = \scshape
+}
+\DeclareAcronym{iupac}{
+  short     = iupac ,
+  long      = International Union of Pure and Applied Chemistry ,
+  pdfstring = IUPAC ,
+  short-acc = IUPAC
+}
+
+\sisetup{
+  detect-mode=false,
+  mode=text,
+  text-font-command=\libertineLF
+}
+
 \chemformula at add@version{2012-01-28}{3.0}
 \chemformula at add@version{2012-01-30}{3.0a}
 \chemformula at add@version{2012-02-03}{3.0b}
@@ -360,5 +384,6 @@
 \chemformula at add@version{2020-03-07}{4.15j}
 \chemformula at add@version{2020-03-15}{4.15k}
 \chemformula at add@version{2020-12-22}{4.16}
+\chemformula at add@version{2022-01-23}{4.17}
 
 \endinput

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

Modified: trunk/Master/texmf-dist/doc/latex/chemformula/chemformula-manual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chemformula/chemformula-manual.tex	2022-01-23 16:29:03 UTC (rev 61711)
+++ trunk/Master/texmf-dist/doc/latex/chemformula/chemformula-manual.tex	2022-01-23 21:05:36 UTC (rev 61712)
@@ -1,7 +1,7 @@
-% !arara: pdflatex
-% !arara: biber
 % arara: pdflatex
+% arara: biber
 % arara: pdflatex
+% arara: pdflatex
 % --------------------------------------------------------------------------
 % the CHEMFORMULA package
 %
@@ -16,7 +16,7 @@
 % If you have any ideas, questions, suggestions or bugs to report, please
 % feel free to contact me.
 % --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
+% Copyright 2011--2022 Clemens Niederberger
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3c
@@ -33,31 +33,6 @@
 \documentclass{chemformula-manual}
 
 \addbibresource{cnltx.bib}
-
-\chemsetup{
-  greek = newtx ,
-  formula = chemformula ,
-  chemformula/format = \libertineLF
-}
-
-\usepackage{acro}
-\acsetup{
-  format/long  = \scshape ,
-  format/short = \scshape
-}
-\DeclareAcronym{iupac}{
-  short     = iupac ,
-  long      = International Union of Pure and Applied Chemistry ,
-  pdfstring = IUPAC ,
-  short-acc = IUPAC
-}
-
-\sisetup{
-  detect-mode=false,
-  mode=text,
-  text-rm=\libertineLF
-}
-
 \addbibresource{\jobname.bib}
 \begin{filecontents*}{\jobname.bib}
 @book{iupac:greenbook,
@@ -231,16 +206,15 @@
  (1/5) K "\ox{7,Mn}" O4 + (8/5) HCl == (1/5) "\ox{2,Mn}" Cl2 + (1/2) Cl2 + (1/5) KCl + (4/5) H2O
 \end{reaction*}
 
-There are a few possibilities to customize the output.
+There are a few possibilities to customize the output:
 \begin{options}
   \keyval{decimal-marker}{marker}\Default{.}
     The symbol to indicate the decimal.
   \keychoice{frac-style}{math,xfrac,nicefrac}\Default{math}
     Determines how fractions are displayed.
-  \keyval{frac-math-cmd}{command sequence}\Default{\cs*{frac}}
-    \sinceversion{4.1}Allows you to choose which command is used with
-    \keyis{frac-style}{math}.  This needs to be a command sequence that takes
-    two arguments that are set in math mode.
+  \keyval{frac-math-cmd}{command sequence}\Default{\cs*{frac}\Marg{\#1}\Marg{\#2}}
+    \changedversion{4.17}Allows you to choose which command is used with
+    \keyis{frac-style}{math}.
   \keyval{stoich-space}{skip}\Default{.1667em plus .0333em minus .0117em}
     The space that is placed after the stoichiometric factor.  A rubber
     length.
@@ -247,12 +221,14 @@
   \keybool{stoich-paren-parse}\Default{false}
     If set to true stoichiometric factors enclosed by parentheses also are
     parsed.
-  \keyval{stoich-print}{cs}\Default{\cs{chstoich}}
-    This option allows to redefine the macro that prints the stoichiometric
-    factors.  \meta{cs} should be a macro that takes one mandatory argument.
-    \emph{Please note that using this option will disable \chemformula's
-      stoichiometric parsing as that is done by the default command
-      \cs{chstoich}.}
+  \keyval{stoich-format}{code}\Default
+    \sinceversion{4.17}Allows formatting of the stoichiometric factors. The
+    last macro given may take an argument.
+  \keyval{stoich-print}{code containing \#1}\Default{\#1}
+    \changedversion{4.17}This option allows to use specify a macro for
+    printing the stoichiometric factors where \code{\#1} represents the
+    factor.  \emph{This option is depecated and will be removed some time in
+      the future.  Use \option{stoich-format} instead.}
 \end{options}
 
 \begin{example}
@@ -360,11 +336,6 @@
 \end{sourcecode}
 See section~\ref{ssec:text} for a way around this.
 
-Please also note that formulas are placed inside a group!
-\begin{example}[side-by-side]
-  \ch{A2\color{red}B3 C4}
-\end{example}
-
 \subsection{Charges and Other Superscripts}
 \paragraph{Basics}
 If a compound \emph{ends} with a plus or minus sign it will be treated as
@@ -870,7 +841,7 @@
 \end{commands}
 \begin{example}
   \ch{H2O +}\textcolor{red}{\ch{H2SO4}}\ch{-> H3O+ + HSO4-} \par
-  \ch{H2O + @{format=\color{red}} H2SO4 -> H3O+ + HSO4-} \par
+  \ch{H2O + @{atom-format=\color{red}} H2SO4 -> H3O+ + HSO4-} \par
   or of course:\par
   \ch{H2O + \textcolor{red}{H2SO4} -> H3O+ + HSO4-}\par\bigskip
   \ch{H2O +}\ch[subscript-vshift=2pt]{H2SO4}\ch{-> H3O+ + HSO4-} \par
@@ -1020,6 +991,16 @@
   \ch{A ->[ "\chemfig{-[:30]-[:-30]OH}" ] B} \par
 \end{example}
 
+The\sinceversion{4.17} labels are typeset inside of a \env*{tabular}\Marg{c}
+environment.  This means you can get several lines:
+\begin{example}[side-by-side]
+  \ch{A ->[{a\\b}] B} \par
+  \ch{A ->[a \newline b] B}
+\end{example}
+The command \cs*{\textbackslash} must be hidden in order to
+work. \cs*{tabularnewline} does work, of course. For convenience \chemformula\
+also allows \cs*{newline} here.
+
 \subsection{Customization}
 These are the options which enable you to customize the arrows:
 \begin{options}
@@ -1192,7 +1173,8 @@
 \chemformula\ provides two options to customize the output of the names:
 \begin{options}
  \keyval{name-format}{commands}\Default{\cs*{scriptsize}\cs*{centering}}
-   The format of the name.  This can be arbitrary input.
+   \changedversion{4.15d}The format of the name.  This can be arbitrary input
+   and the last macro may receive the name as an argument.
  \keychoice{name-width}{\meta{dim},auto}\Default{auto}
    The width of the box where the label is put into.  \code{auto} will detect
    the width of the name and set the box to this width.
@@ -1578,6 +1560,13 @@
     and code.
 \end{changes}
 
+\begin{changes}{4.17}
+  \change Various bug fixes.
+  \change Lazy boolean evaluation where possible.
+  \change Place arrow's arguments in a tabular.  This allows for multiple
+    lines.
+\end{changes}
+
 \printbibliography
 
 \end{document}

Modified: trunk/Master/texmf-dist/tex/latex/chemformula/chemformula.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/chemformula/chemformula.sty	2022-01-23 16:29:03 UTC (rev 61711)
+++ trunk/Master/texmf-dist/tex/latex/chemformula/chemformula.sty	2022-01-23 21:05:36 UTC (rev 61712)
@@ -12,7 +12,7 @@
 % If you have any ideas, questions, suggestions or bugs to report, please
 % feel free to contact me.
 % --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
+% Copyright 2011--2022 Clemens Niederberger
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3
@@ -30,8 +30,8 @@
 \usetikzlibrary{arrows.meta}
 
 \ExplSyntaxOn
-\tl_const:Nn \c_chemformula_date_tl {2020/12/22}
-\tl_const:Nn \c_chemformula_version_number_tl {4.16}
+\tl_const:Nn \c_chemformula_date_tl {2022/01/23}
+\tl_const:Nn \c_chemformula_version_number_tl {4.17}
 \tl_const:Nn \c_chemformula_version_suffix_tl {}
 \tl_const:Nx \c_chemformula_version_tl
   { \c_chemformula_version_number_tl \c_chemformula_version_suffix_tl }
@@ -128,6 +128,41 @@
     \NewChemSymbol \c_space_tl but~ a~ symbol~ `#1'~ doesn't~ exist.
   }
 
+\msg_new:nnn {chemformula} {deprecated}
+  {
+    On~ line~ \msg_line_number: : \\
+    The~ #1~ `#2'~ is~ deprecated.~ Use~ #1~ `#3'~ instead .
+  }
+
+\msg_new:nnn {chemformula} {deprecated-function}
+  { The~ command~ #1~ is~ deprecated.~ Use~ #2 instead . }
+
+\msg_new:nnn {chemformula} {removed-function}
+  { The~ command~ #1~ has~ been~ removed. }
+
+\msg_new:nnn {chemformula} {removed}
+  {
+    On~ line~ \msg_line_number: : \\
+    The~ #1~ `#2'~ has~ been~ removed~ from~ chemformula. \\
+    If~ you~ need~ it~ back~ please~ open~ an~ issue~ on~ \\
+    https://github.com/cgnieder/chemformula/issues
+    \tl_if_blank:nF {#3} { \\ #3 }
+  }
+
+\msg_new:nnn {chemformula} {load-time-option}
+  {
+    `#1'~ is~ a~ load-time~ option! \\
+    You~ cannot~ set~ it~ with~ \token_to_str:N \setchemformula ! \\
+    You~ need~ to~ use~ \token_to_str:N \usepackage [#1] {chemformula} .
+  }
+
+\msg_new:nnn {chemformula} {unknown-option}
+  {
+    Unknown~ option~ `#1' \\
+    I~ dont'~ know~ the~ option~ `#1'.~ Please~ make~ sure~ there~ is~ no~
+    typo.~ Check~ the~ manual~ for~ help.
+  }
+  
 % --------------------------------------------------------------------------
 % variants of kernel functions:
 \cs_generate_variant:Nn \keys_set:nn         {nV}
@@ -134,8 +169,9 @@
 \cs_generate_variant:Nn \tl_if_blank:nF      {V}
 \cs_generate_variant:Nn \tl_if_in:nnT        {x,nV}
 \cs_generate_variant:Nn \tl_if_eq:nnT        {V,x}
-\cs_generate_variant:Nn \tl_if_eq:nnTF       {o}
-\cs_generate_variant:Nn \tl_set:Nn           {cV}
+\cs_generate_variant:Nn \tl_if_eq:nnTF       {o,V}
+\cs_generate_variant:Nn \tl_set:Nn           {cV,Ne}
+\cs_generate_variant:Nn \tl_put_right:Nn     {Ne}
 \cs_generate_variant:Nn \tl_replace_all:Nnn  {NV,Nnx}
 \cs_generate_variant:Nn \tl_replace_once:Nnn {Nxx}
 \cs_generate_variant:Nn \tl_set_rescan:Nnn   {NnV}
@@ -168,6 +204,7 @@
 \bool_new:N \l__chemformula_tmpa_bool
 
 % booleans
+\bool_new:N \l__chemformula_debug_bool
 \bool_new:N \l_chemformula_inside_ch_bool
 \bool_new:N \l_chemformula_formal_charges_bool
 \bool_new:N \l_chemformula_formal_chem_bool
@@ -178,6 +215,7 @@
 \bool_new:N \l__chemformula_is_addition_symbol_bool
 \bool_new:N \l__chemformula_is_symbol_bool
 \bool_new:N \l__chemformula_is_arrow_bool
+\bool_new:N \l__chemformula_arrow_has_options_bool
 \bool_new:N \l__chemformula_is_name_bool
 \bool_new:N \l__chemformula_stoich_is_iupac_bool
 \bool_new:N \l__chemformula_stoich_parse_iupac_bool
@@ -265,6 +303,7 @@
 \tl_new:N \g__chemformula_output_tl
 \tl_new:N \l__chemformula_input_tl
 \tl_new:N \l__chemformula_stoich_tl
+\tl_new:N \l__chemformula_stoich_format_tl
 \tl_new:N \l__chemformula_decimal_output_tl
 \tl_new:N \l__chemformula_font_family_tl
 \tl_new:N \l__chemformula_font_series_tl
@@ -365,7 +404,90 @@
 \skip_set:Nn \l__chemformula_stoich_space_skip { .1667em plus .0333em minus .0117em }
 \skip_set:Nn \l__chemformula_math_space_skip { .1667em plus .0333em minus .0117em }
 
+% ----------------------------------------------------------------------------
+% debugging
+\prg_new_conditional:Npnn \__chemformula_if_debug: {T,F,TF}
+  {
+    \bool_if:NTF \l__chemformula_debug_bool
+      { \prg_return_true: }
+      { \prg_return_false: }
+  }
+  
+% ----------------------------------------------------------------------------
+% deprecation & removal:
+% #1: type
+% #2: old
+% #3: new
+\cs_new_protected:Npn \__chemformula_deprecation_warning:nnn #1#2#3
+  { \msg_warning:nnnnn {chemformula} {deprecated} {#1} {#2} {#3} }
+\cs_generate_variant:Nn \__chemformula_deprecation_warning:nnn {nne,nV}
+
+% #1: type
+% #2: old
+% #3: additional text
+\cs_new_protected:Npn \chemformula_removal_warning:nnn #1#2#3
+  { \msg_warning:nnnnn {chemformula} {removed} {#1} {#2} {#3} }
+\cs_generate_variant:Nn \chemformula_removal_warning:nnn {nV}
+
+% #1: type
+% #2: old
+\cs_new_protected:Npn \chemformula_removal_warning:nn #1#2
+  { \msg_warning:nnnn {chemformula} {removed} {#1} {#2} }
+\cs_generate_variant:Nn \chemformula_removal_warning:nn {nV}
+
+% #1: new
+\cs_new_protected:Npn \chemformula_deprecate_option:n #1
+  { \__chemformula_deprecation_warning:nVn {option} \l_keys_key_str {#1} }
+
+% #1: additional text
+\cs_new_protected:Npn \chemformula_remove_option:n #1
+  { \chemformula_removal_warning:nVn {option} \l_keys_key_str {#1} }
+
+\cs_new_protected:Npn \chemformula_remove_option:
+  { \chemformula_removal_warning:nV {option} \l_keys_key_str }
+
+% #1: old
+% #2: new
+\cs_new_protected:Npn \chemformula_deprecate_function:NN #1#2
+  {
+    \cs_set_protected:Npn #1
+      {
+        \msg_error:nnnn {chemformula} {deprecated-function} {#1} {#2}
+        #2
+      }
+  }
+
+% #1: old
+\cs_new_protected:Npn \chemformula_remove_function:N #1
+  {
+    \cs_set_protected:Npn #1
+      { \msg_error:nnn {chemformula} {removed-function} {#1} }
+  }
+
 % --------------------------------------------------------------------------
+% load-time options:
+\cs_new_protected:Npn \__chemformula_loadtime_error:n #1
+   { \msg_error:nnV {chemformula} {#1} \l_keys_key_str }
+
+\cs_new_protected:Npn \__chemformula_loadtime_warning:n #1
+  { \msg_warning:nnV {chemformula} {#1} \l_keys_key_str }
+
+\keys_define:nn {chemformula/load-time}
+  {
+    debug .bool_set:N = \l__chemformula_debug_bool ,
+    debug .initial:n  = false
+  }
+
+\ProcessKeysPackageOptions {chemformula/load-time}
+
+\keys_define:nn {chemformula}
+  {
+    debug   .code:n = \__chemformula_loadtime_error:n {load-time-option} ,
+    unknown .code:n = \__chemformula_loadtime_warning:n {unknown-option} ,
+    load-time / debug .meta:nn = {chemformula} {debug}
+  }
+
+% --------------------------------------------------------------------------
 % catcode stuff
 \cs_new_protected:Npn \__chemformula_save_catcodes:
   {
@@ -413,8 +535,8 @@
       {
         \__chemformula_basic_catcodes:
         % disable some of the specials (needed for sub- and superscripts):
-        \char_set_catcode_letter:N \{
-        \char_set_catcode_letter:N \}
+        \char_set_catcode_other:N \{
+        \char_set_catcode_other:N \}
       }
       {#2}
   }
@@ -891,9 +1013,17 @@
       { \__chemformula_basic_catcodes: } {#1}
     % determine length of the arrow
     \hbox_set:Nn \l__chemformula_arrow_arg_i_box
-      { \tl_use:N \l__chemformula_arrow_label_style_tl #2 }
+      {
+        \tl_use:N \l__chemformula_arrow_label_style_tl
+        \cs_set:Npn \newline { \tabularnewline }
+        \begin {tabular} {c} #2 \end {tabular}
+      }
     \hbox_set:Nn \l__chemformula_arrow_arg_ii_box
-      { \tl_use:N \l__chemformula_arrow_label_style_tl #3 }
+      {
+        \tl_use:N \l__chemformula_arrow_label_style_tl
+        \cs_set:Npn \newline { \tabularnewline }
+        \begin {tabular} {c} #3 \end {tabular}
+      }
     \__chemformula_determine_arrow_length:NN
       \l__chemformula_arrow_arg_i_box
       \l__chemformula_arrow_arg_ii_box
@@ -1124,37 +1254,42 @@
 
 % --------------------------------------------------------------------------
 % MAIN COMMAND
-\cs_new_protected:Npn \__chemformula_ch_main:n #1
+\cs_set_protected:Npn \__chemformula_ch_main:n #1
   {
     \group_begin:
       % abort if `#1' is blank:
       \tl_if_blank:nF {#1}
         {
-          \tl_set:Nn \l__chemmacros_tmpa_tl {#1}
-          \tl_trim_spaces:N \l__chemmacros_tmpa_tl
-          \seq_set_split:NnV \l__chemformula_input_seq {~} \l__chemmacros_tmpa_tl
-          % remove empty items in order to avoid unnecessary processing:
-          \seq_remove_all:Nn \l__chemformula_input_seq {}
           % disable \xspace:
           \cs_set_eq:NN \xspace \scan_stop:
           \bool_set_true:N \l_chemformula_inside_ch_bool
           \tl_if_blank:VF \g__chemformula_options_tl
-            {
-              \keys_set:nV
-                {chemformula}
-                \g__chemformula_options_tl
-            }
-          \seq_map_function:NN
-            \l__chemformula_input_seq
-            \__chemformula_input:n
+            { \keys_set:nV {chemformula} \g__chemformula_options_tl }
+          \__chemformula_read_input:n {#1}
           \__chemformula_prepare_output:NV
             \l__chemformula_input_tl
             \l__chemformula_catcodes_tl
           \chemformula_write:V \l__chemformula_input_tl
+          \__chemformula_if_debug:T { \tl_show:N \l__chemformula_input_tl }
         }
     \group_end:
   }
 
+\cs_new_protected:Npn \__chemformula_read_input:n #1
+  { \__chemformula_read_input:w #1 ~ \q_stop }
+\cs_generate_variant:Nn \__chemformula_read_input:n {V}
+
+\cs_new_protected:Npn \__chemformula_read_input:w #1 ~ #2 \q_stop
+  {
+    \__chemformula_input:n {#1}
+    \tl_set:Nn \l__chemformula_tmpa_tl {#2}
+    \tl_if_blank:VF \l__chemformula_tmpa_tl
+      {
+        \tl_trim_spaces:N \l__chemformula_tmpa_tl
+        \__chemformula_read_input:V \l__chemformula_tmpa_tl
+      }
+  }
+
 \cs_new_protected:Npn \chemformula_write:n #1
   {
     \mode_if_math:TF
@@ -1171,7 +1306,7 @@
       \tl_if_blank:nTF {#1}
         { \tl_gclear:N \g__chemformula_options_tl }
         { \tl_gset:Nn  \g__chemformula_options_tl {#1} }
-      \__chemformula_ch_newline:w #2 \\ \q_no_value \q_stop
+      \__chemformula_ch_newline:w #2 \\ \q_nil \q_stop
     \group_align_safe_end:
     \tl_use:N    \g__chemformula_output_tl
     \tl_gclear:N \g__chemformula_output_tl
@@ -1182,8 +1317,8 @@
 % bypass \\:
 \cs_new_protected:Npn \__chemformula_ch_newline:w #1 \\ #2 \q_stop
   {
-    \__chemformula_ch_align:w #1 & \q_no_value \q_stop
-    \quark_if_no_value:nF {#2}
+    \__chemformula_ch_align:w #1 & \q_nil \q_stop
+    \quark_if_nil:nF {#2}
       {
         \tl_gput_right:Nn \g__chemformula_output_tl { \\ }
         % look for optional argument:
@@ -1203,8 +1338,8 @@
 % bypass &:
 \cs_new_protected:Npn \__chemformula_ch_align:w #1 & #2 \q_stop
   {
-    \__chemformula_ch_intertext:w #1 \intertext{} \q_no_value \q_stop
-    \quark_if_no_value:nF {#2}
+    \__chemformula_ch_intertext:w #1 \intertext{} \q_nil \q_stop
+    \quark_if_nil:nF {#2}
       {
         \tl_gput_right:Nn \g__chemformula_output_tl {&}
         \__chemformula_ch_align:w #2 \q_stop
@@ -1214,8 +1349,8 @@
 % bypass \intertext:
 \cs_new_protected:Npn \__chemformula_ch_intertext:w #1 \intertext#2 #3 \q_stop
   {
-    \__chemformula_ch_shortintertext:w #1 \shortintertext{} \q_no_value \q_stop
-    \quark_if_no_value:nF {#3}
+    \__chemformula_ch_shortintertext:w #1 \shortintertext{} \q_nil \q_stop
+    \quark_if_nil:nF {#3}
       {
         \tl_gput_right:Nn \g__chemformula_output_tl { \intertext {#2} }
         \__chemformula_ch_intertext:w #3 \q_stop
@@ -1227,7 +1362,7 @@
   {
     \tl_gput_right:Nn \g__chemformula_output_tl
       { \__chemformula_ch_main:n {#1} }
-    \quark_if_no_value:nF {#3}
+    \quark_if_nil:nF {#3}
       {
         \tl_gput_right:Nn \g__chemformula_output_tl { \shortintertext {#2} }
         \__chemformula_ch_shortintertext:w #3 \q_stop
@@ -1330,6 +1465,11 @@
             \prop_map_break:
           }
       }
+    \bool_if:NT \l__chemformula_is_arrow_bool
+      {
+        \tl_if_in:nnT {#1} {[}
+          { \bool_set_true:N \l__chemformula_arrow_has_options_bool }
+      }
   }
 
 % --------------------------------------------------------------------------
@@ -1348,19 +1488,11 @@
           \bool_if:NF \l__chemformula_name_width_bool
             {
               \chemformula_dim_to_width:Nn \l__chemformula_name_dim
-                {
-                  \group_begin:
-                  \l__chemformula_name_format_tl {#1}
-                  \group_end:
-                }
+                { \chemformula_name_write:n {#1} }
             }
           \parbox
             { \dim_use:N \l__chemformula_name_dim }
-            {
-              \group_begin:
-              \l__chemformula_name_format_tl {#1}
-              \group_end:
-            }
+            { \chemformula_name_write:n {#1} }
         }
         {
           \text
@@ -1373,6 +1505,13 @@
     \c_math_toggle_token
   }
 
+\cs_new_protected:Npn \chemformula_name_write:n #1
+  {
+    \group_begin:
+      \l__chemformula_name_format_tl {#1}
+    \group_end:
+  }
+
 \cs_new_protected:Npn \__chemformula_generate_name:Nn #1#2
   {
     \__chemformula_sanitize:Nn \l__chemformula_tmpa_tl {#2}
@@ -1716,7 +1855,7 @@
   {
     \bool_if:NTF \l__chemformula_number_style_math_bool
       { \ensuremath {#1} }
-      { \ensuremath { \text {#1} } }
+      { \ensuremath { \text { { \chemformula_atom: #1 } } } }
   }
 \cs_generate_variant:Nn \__chemformula_number_style:n {V}
 
@@ -1724,7 +1863,7 @@
   {
     \bool_if:NTF \l__chemformula_charge_style_math_bool
       { \ensuremath {#1} }
-      { \ensuremath { \text {#1} } }
+      { \ensuremath { \text { { \chemformula_atom: #1 } } } }
   }
 \cs_generate_variant:Nn \chemformula_charge_style:n {V}
 
@@ -1769,6 +1908,7 @@
   }
 \cs_generate_variant:Nn \__chemformula_subscript:n {V}
 
+
 \cs_new_protected:Npn \chemformula_add_subscript_cleanup:nn #1#2
   {
     \seq_put_right:Nn \l__chemformula_clean_subscript_seq {#1}
@@ -2121,7 +2261,7 @@
     \__chemformula_input_escape_text:V \l__chemformula_chemformula_tmpa_tl
     \__chemformula_input_escape_math:n {#1}
     \__chemformula_input_stoich:n {#1}
-    \__chemformula_clean_chemmacros:V \l__chemformula_chemformula_tmpa_tl
+    \__chemformula_clean_chemformula:V \l__chemformula_chemformula_tmpa_tl
     \__chemformula_input_compound:NV
       \l__chemformula_input_tl
       \l__chemformula_chemformula_tmpa_tl
@@ -2135,19 +2275,15 @@
 % set options for next compound:
 \cs_new_protected:Npn \__chemformula_input_options:n #1
   {
-    % \makeatother
-    \char_set_catcode_other:N \@
-    \tl_set_rescan:Nnn \l__chemformula_tmpa_tl
-      { \char_set_catcode_letter:N \@ }
-      {#1}
-    \tl_if_in:VnTF \l__chemformula_tmpa_tl { @ }
+    \tl_set_rescan:Nnn \l__chemformula_tmpa_tl {} {#1}
+    \tl_set:Ne \l__chemformula_tmpb_tl { \tl_tail:V \l__chemformula_tmpa_tl }
+    \tl_set:Ne \l__chemformula_tmpa_tl { \tl_head:V \l__chemformula_tmpa_tl }
+    \str_if_eq:VnTF \l__chemformula_tmpa_tl {@}
       {
         \bool_set_false:N \l__chemformula_options_bool
         \bool_set_true:N \l__chemformula_is_option_bool
-        \tl_remove_all:Nn \l__chemformula_tmpa_tl { @ }
         \exp_last_unbraced:Nno
-        \tl_set:Nn \l__chemformula_internal_options_tl
-          { \l__chemformula_tmpa_tl }
+        \tl_set:Nn \l__chemformula_internal_options_tl { \l__chemformula_tmpb_tl }
       }
       { \bool_set_false:N \l__chemformula_is_option_bool }
   }
@@ -2164,7 +2300,10 @@
     \tl_map_inline:nn {#1}
       {
         \prop_if_in:NnF \l__chemformula_no_stoich_prop {##1}
-          { \bool_set_false:N \l__chemformula_no_stoich_bool }
+          {
+            \bool_set_false:N \l__chemformula_no_stoich_bool
+            \tl_map_break:
+          }
       }
     \bool_if:NF \l__chemformula_no_stoich_bool
       {
@@ -2175,7 +2314,10 @@
                 \bool_if:NT \l__chemformula_stoich_bool
                   { \tl_put_right:NV \l__chemformula_stoich_tl \l__chemformula_tmpa_tl }
               }
-              { \bool_set_false:N \l__chemformula_stoich_bool }
+              {
+                \bool_set_false:N \l__chemformula_stoich_bool
+                \tl_map_break:
+              }
            }
       }
     \bool_if:NTF \l__chemformula_stoich_bool
@@ -2186,7 +2328,7 @@
             \__chemformula_sanitize:NV
               \l__chemformula_stoich_tl
               \l__chemformula_stoich_tl
-            \__chemformula_print_stoich:V
+            \chemformula_print_stoich:V
               \l__chemformula_stoich_tl
           }
       }
@@ -2195,15 +2337,23 @@
 
 \cs_new_protected:Npn \chemformula_bm:n #1 {#1}
 
-\cs_new_protected:Npn \__chemformula_print_stoich:n #1
+\cs_new_protected:Npn \chemformula_print_stoich:n #1
   { \chemformula_parse_stoich:n {#1} }
-\cs_generate_variant:Nn \__chemformula_print_stoich:n {V}
+\cs_generate_variant:Nn \chemformula_print_stoich:n {V}
 
+\cs_new_protected:Npn \__chemformula_print_stoich:n #1
+  { { \l__chemformula_stoich_format_tl {#1} } }
+
 \cs_new_protected:Npn \chemformula_parse_stoich:n #1
   { \__chemformula_parse_stoich:w #1 \q_nil }
 
 \NewDocumentCommand \chstoich {m}
-  { \chemformula_parse_stoich:n {#1} }
+  {
+    \group_begin:
+      \__chemformula_input_stoich:n {#1}
+      \l__chemformula_input_tl
+    \group_end:
+  }
 
 \cs_new_protected:Npn \__chemformula_parse_stoich:w \q_mark #1 \q_nil
   {
@@ -2235,8 +2385,14 @@
     \tl_set:Nn \l__chemformula_tmpb_tl { \chemformula_decimal: }
     % check if stoich starts with decimal-marker and add leading 0 if so:
     \tl_if_eq:NNTF \l__chemformula_tmpa_tl \l__chemformula_tmpb_tl
-      { \tl_put_right:Nn \l__chemformula_input_tl { 0#1 } }
-      { \tl_put_right:Nn \l__chemformula_input_tl {#1} }
+      {
+        \tl_put_right:Nn \l__chemformula_input_tl
+          { \__chemformula_print_stoich:n {0#1} }
+      }
+      {
+        \tl_put_right:Nn \l__chemformula_input_tl
+          { \__chemformula_print_stoich:n {#1} }
+      }
   }
 
 \cs_new_protected:Npn \__chemformula_parse_stoich_frac:n #1
@@ -2249,13 +2405,13 @@
 \cs_new_protected:Npn \__chemformula_parse_stoich_frac:w #1/#2 \q_nil
   {
     \tl_put_right:Nn \l__chemformula_input_tl
-      { \__chemformula_frac:nn {#1} {#2} }
+      { \__chemformula_print_stoich:n { \__chemformula_frac:nn {#1} {#2} } }
   }
 
 \cs_new_protected:Npn \__chemformula_parse_stoich_misc_frac:w #1_#2/#3 \q_nil
   {
     \tl_put_right:Nn \l__chemformula_input_tl
-      { \__chemformula_misc_frac:nnn {#1} {#2} {#3} }
+      { \__chemformula_print_stoich:n { \__chemformula_misc_frac:nnn {#1} {#2} {#3} } }
   }
 
 \cs_new_protected:Npn \__chemformula_parse_stoich_iupac:n #1
@@ -2262,7 +2418,7 @@
   {
     \bool_if:NTF \l__chemformula_stoich_parse_iupac_bool
       { \__chemformula_parse_stoich_iupac:w #1 \q_nil }
-      { \tl_put_right:Nn \l__chemformula_input_tl {#1} }
+      { \tl_put_right:Nn \l__chemformula_input_tl { \__chemformula_print_stoich:n {#1} } }
   }
 
 \cs_new_protected:Npn \__chemformula_parse_stoich_iupac:w (#1) \q_nil
@@ -2304,6 +2460,9 @@
   }
 
 % --------------------------------------------------------------------------
+\cs_new_protected:Npn \chemformula_atom:
+  { \mode_if_math:F { \l__chemformula_atom_format_tl } }
+
 % input compounds
 \cs_new_protected:Npn \__chemformula_input_compound:Nn #1#2
   {
@@ -2317,7 +2476,7 @@
         \bool_if:NT \l__chemformula_is_option_bool
           {
             \bool_set_true:N \l__chemformula_options_bool
-            \tl_put_right:Nx #1
+            \tl_put_right:Ne #1
               {
                 \group_begin:
                   % open group
@@ -2324,19 +2483,22 @@
                   \keys_set:nn
                     {chemformula}
                     { \exp_not:V \l__chemformula_internal_options_tl }
+                  \chemformula_atom:
               }
+            \tl_clear:N \l__chemformula_internal_options_tl
           }
-        \bool_if:nT
+        \bool_lazy_any:nF
           {
-            !\l__chemformula_is_option_bool &&
-            !\l__chemformula_is_addition_symbol_bool &&
-            !\l__chemformula_is_symbol_bool &&
-            !\l__chemformula_is_arrow_bool &&
-            !\l__chemformula_is_name_bool &&
-            !\l__chemformula_first_last_text_bool &&
-            !\l__chemformula_first_last_math_bool
+            { \l__chemformula_is_option_bool }
+            { \l__chemformula_is_addition_symbol_bool }
+            { \l__chemformula_is_symbol_bool }
+            { \l__chemformula_is_arrow_bool }
+            { \l__chemformula_is_name_bool }
+            { \l__chemformula_first_last_text_bool }
+            { \l__chemformula_first_last_math_bool }
           }
           {
+            \chemformula_atom:
             \__chemformula_input_compound_no_check:Nn #1 {#2}
             \bool_if:NT \l__chemformula_options_bool
               {
@@ -2344,7 +2506,6 @@
                   {
                     % end group
                     \group_end:
-                    \tl_clear:N \l__chemformula_internal_options_tl
                   }
                 \bool_set_false:N \l__chemformula_options_bool
               }
@@ -2497,13 +2658,6 @@
     \__chemformula_if_only_parens:nTF {#2}
       { \tl_put_right:Nn #1 {#2} }
       {
-        % start with formatting:
-        \tl_put_right:Nn #1
-          {
-            \tl_use:N \l__chemformula_format_tl
-            \group_begin:
-              \l__chemformula_atom_format_tl
-          }
         \__chemformula_sanitize:Nn \l__chemformula_tmpa_tl {#2}
         % let's see if the compound starts with a sub- or superscript - if yes
         % this is an isotope:
@@ -2526,8 +2680,15 @@
                 \prop_get:NnNTF \l__chemformula_compound_prop
                   {##1}
                   \l__chemformula_tmpb_tl
-                  { \tl_put_right:NV #1 \l__chemformula_tmpb_tl }
-                  { \tl_put_right:Nn #1 {##1} }
+                  {
+                    \tl_put_right:NV #1
+                      \l__chemformula_tmpb_tl
+                  }
+                  {
+                    \token_if_letter:NTF ##1
+                      { \tl_put_right:Nn #1 {  ##1 } }
+                      { \tl_put_right:Nn #1 {##1} }
+                  }
               }
           }
         % if Kroeger-Vink notation is active:
@@ -2537,8 +2698,6 @@
               { \chemformula_prime: }
               { \chemformula_superscript:n { \chemformula_prime: } }
           }
-        % finish formatting:
-        \tl_put_right:Nn #1 { \group_end: }
       }
      \tl_clear:N \l__chemformula_tmpa_tl
   }
@@ -2545,14 +2704,14 @@
 \cs_generate_variant:Nn \__chemformula_input_compound_no_check:Nn {NV}
 
 % --------------------------------------------------------------------------
-% clean up chemmacros commands:
-\cs_new_protected:Npn \__chemformula_clean_chemmacros:n #1
+% clean up chemformula commands:
+\cs_new_protected:Npn \__chemformula_clean_chemformula:n #1
   {
-    \cs_set:Nn \chemmacros_text:n
+    \cs_set:Nn \chemformula_text:n
       { \mode_if_math:TF { \text {##1} } {##1} }
-    \cs_set:Npn \chemmacros_xspace: {}
+    \cs_set:Npn \chemformula_xspace: {}
   }
-\cs_generate_variant:Nn \__chemformula_clean_chemmacros:n {V}
+\cs_generate_variant:Nn \__chemformula_clean_chemformula:n {V}
 
 % --------------------------------------------------------------------------
 % input "and" sign
@@ -2733,11 +2892,11 @@
 % input arrow
 \cs_new_protected:Npn \__chemformula_input_arrow:n #1
   {
-    \bool_if:nT
+    \bool_lazy_all:nT
       {
-        \l__chemformula_is_arrow_bool &&
-        !\l__chemformula_first_last_text_bool &&
-        !\l__chemformula_first_last_math_bool
+        { \l__chemformula_is_arrow_bool }
+        { !\l__chemformula_first_last_text_bool }
+        { !\l__chemformula_first_last_math_bool }
       }
       {
         \__chemformula_generate_arrows:Nn \l__chemformula_tmpa_tl {#1}
@@ -2751,11 +2910,11 @@
 % input compound name
 \cs_new_protected:Npn \__chemformula_input_name:n #1
   {
-    \bool_if:nT
+    \bool_lazy_all:nT
       {
-        \l__chemformula_is_name_bool &&
-        !\l__chemformula_first_last_text_bool &&
-        !\l__chemformula_first_last_math_bool
+        { \l__chemformula_is_name_bool }
+        { !\l__chemformula_first_last_text_bool }
+        { !\l__chemformula_first_last_math_bool }
       }
       {
         \__chemformula_generate_name:Nn \l__chemformula_tmpa_tl {#1}
@@ -2961,25 +3120,24 @@
       \bool_set_false:N \l__chemformula_xfrac_bool
       \bool_set_true:N \l__chemformula_nicefrac_bool
       \bool_set_false:N \l__chemformula_mathfrac_bool ,
-    frac-math-cmd         .code:n     =
-      { \cs_set_eq:NN \chemformula_math_frac:nn #1 } ,
+    frac-math-cmd         .cs_set_protected:Np = \chemformula_math_frac:nn #1#2 ,
+    frac-math-cmd         .initial:n  = \frac {#1} {#2} ,
     stoich-paren-parse    .bool_set:N = \l__chemformula_stoich_parse_iupac_bool ,
     stoich-space          .skip_set:N = \l__chemformula_stoich_space_skip ,
+    stoich-format         .tl_set:N   = \l__chemformula_stoich_format_tl ,
     stoich-print          .code:n     =
-      \cs_set_eq:NN \chemformula_print_stoich:n #1 ,
+      \chemformula_remove_option:n {Use~ the~ option~ `stoich-format'~ instead.} ,
     adduct-space          .dim_set:N  = \l__chemformula_adduct_space_dim ,
     adduct-penalty        .tl_set:N   = \l__chemformula_adduct_penalty_tl ,
     math-space            .skip_set:N = \l__chemformula_math_space_skip ,
     name-format           .tl_set:N   = \l__chemformula_name_format_tl ,
     name-width            .code:n     =
-      {
-        \tl_if_eq:nnTF {#1} { auto }
-          { \bool_set_false:N \l__chemformula_name_width_bool }
-          {
-            \bool_set_true:N \l__chemformula_name_width_bool
-            \dim_set:Nn \l__chemformula_name_dim {#1}
-          }
-      } ,
+      \tl_if_eq:nnTF {#1} { auto }
+        { \bool_set_false:N \l__chemformula_name_width_bool }
+        {
+          \bool_set_true:N \l__chemformula_name_width_bool
+          \dim_set:Nn \l__chemformula_name_dim {#1}
+        } ,
     bond-length           .dim_set:N = \l__chemformula_bond_dim ,
     bond-offset           .dim_set:N = \l__chemformula_bond_space_dim ,
     bond-style            .code:n    =
@@ -3282,7 +3440,7 @@
 
 % --------------------------------------------------------------------------
 % hyperref support
-\hook_gput_code:nnn {package/after/hyperref} {chemformula}
+\hook_gput_code:nnn {package/hyperref/after} {chemformula}
   {
     \pdfstringdefDisableCommands
       {
@@ -3295,224 +3453,4 @@
   }
 
 \file_input_stop:
-
 % --------------------------------------------------------------------------
-VERSION HISTORY
-2012/01/28 - version 3.0   - bundled with packages `chemmacros' and `ghs'
-2012/01/30 - version 3.0a  - bugfix
-                           - renamed formula => chemformula
-                             (following a request by Karl Berry for TeXlive)
-2012/02/03 - version 3.0b  - stepped number with `chemmacros'
-2012/02/05 - version 3.0c  - stepped number with `chemmacros'
-2012/02/10 - version 3.0d  - several bugfixes
-                           - new arrow type <>
-2012/02/19 - version 3.1   - new arrow types -/>, </- and <o>
-                           - new commands \DeclareChemArrow, \RenewChemArrow and
-                             \ShowChemArrow
-2012/02/26 - version 3.1a  - stepped number with `chemmacros'
-2012/03/03 - version 3.1b  - arrow types are stored in a sequence to automate the
-                             search and replace in the right order 
-                           - new arrow type ==                                   
-                           - IUPAC compliance for stoichiometric factors
-                           - new handling of super- and subscripts to correct
-                             various flaws: clear distinction between isotope and
-                             formula
-                           - new option charge-vshift
-2012/03/14 - version 3.1c  - improved arrow labels
-2012/03/20 - version 3.2   - new: option input via @{<options>}
-2012/05/07 - version 3.3   - \ch now bypasses \ref{}, \label{}, and \intertext{}
-2012/05/13 - version 3.3a  - stepped number with `chemmacros'
-2012/05/18 - version 3.3b  - stepped number with `chemmacros'
-2012/05/18 - version 3.3c  - stepped number with `chemmacros'
-2012/07/24 - version 3.3d  - stepped number with `chemmacros'
-                           - default bond length set to 1.1667ex
-                           - bug fix in the bonds
-2012/08/21 - version 3.3e  - stepped number with `chemmacros'
-2012/09/11 - version 3.4   - cleaned a little, minor bug fixes
-                           - switched to internal scratch variables
-                           - new command \bond, more bond types
-                           - new commands \DeclareChemBond, \DeclareChemBondAlias,
-                             \RenewChemBond and \ShowChemBond
-                           - radical point thicker, new options `radical-style'
-                             and `radical-radius'
-2012/10/03 - version 3.4a  - stepped number with `chemmacros'
-2013/01/04 - version 3.4b  - bug fix in the sub- and superscript handling
-2013/01/28 - version 3.5   - disallow breaks at bonds
-                           - allow breaks after arrows
-                           - made some spaces in chemformulas stretch- and
-                             shrinkable
-                           - various internal code improvements
-                           - changed defaults for horizontal spaces that have in
-                             set in ex into corresponding values in em.
-                           - improvements to the placement of sub- and superscripts
-2013/02/19 - version 3.5a  - stepped number with `chemmacros'
-2013/02/26 - version 3.6   - support for use with the `breqn' package
-                           - math escaping also via \(\)
-                           - internal: clearer escaping macros
-                           - new options: `radical-vshift', `radical-hshift'
-                             and `radical-space'
-                           - bug fix: `radical-...' options are now correctly set
-                           - stoichiometric factors: add leading 0 if missing
-                           - new option: `stoich-paren-parse'
-                           - internal changes: be way more rigid about protected
-                             and expandable macros
-                           - internal changes: clearer distinction between
-                             private macros and accessable module macros
-                           - internal changes: clearer distinction between
-                             document commands and module level commands
-                           - !()() syntax now also works with babel's French
-2013/02/27 - version 3.6a  - bug fix: escaped text and math stays escaped, i.e.
-                             also arrow code like `<=>'
-2013/04/19 - version 3.6b  - new option `arrow-min-length'
-                           - bug fix: stoichiometric fractions correctly displayed
-2013/07/06 - version 4.0   - don't need `chemmacros' package any more,
-                             `chemformula' can be used stand-alone;
-                             this has lead to a few definitions that previously
-                             were done by chemmacros; chemmacros will get them
-                             now from chemformula when needed
-                           - bug fix: allow braces in subscripts and superscripts
-                             by disabling superfluous \chemformula_subscript:n
-                             and \chemformula_superscript:n in the scripts write
-                             commands
-                           - remove superfluous rescanning at the begin of the
-                             formula input; this is handled by the sanitize
-                             command later anyway
-                           - changed internal mathshifts from $ ... $ to \( ... \)
-                           - removed superfluous \textstyle from math-frac
-                             definition
-                           - new command \charrow{}[][] that allows direct
-                             access to chemformula's arrows
-                           - new command \chname()() that allows direct access
-                             to chemformula's naming
-                           - new command \chcpd[]{} that allows typesetting a
-                             simple single formula - also not nestable with \ch
-                           - new command \setchemformula
-                           - package option: `strict'
-                           - don't allow a line break before a plus
-                             (`chem-and')
-                           - don't allow a line break between a stoichiometric
-                             factor and a compound
-                           - changed formal charges to match ``plain'' charges
-2013/07/26 - version 4.0a  - added options `arrow-penalty' (0), `plus-penalty'
-                             (700) and `bond-penalty' (10000) that determine if
-                             there may be a break after an arrow, a bond or the
-                             plus
-2013/08/24 - version 4.1   - changed `0' values in TikZ coordinates into `0pt'
-                             see http://tex.stackexchange.com/q/128792/5049 and
-                             http://tex.stackexchange.com/q/118467/5049 for
-                             reference
-                           - new option `tikz-external-disable'
-                           - new option `frac-math-cmd'
-2013/10/24 - version 4.2   - \chemformula_font_inner: is only applied /once/ to
-                             a formula, and at the beginning, fixes
-                             https://bitbucket.org/cgnieder/chemmacros/issue/23
-                           - fixed wrong setting of the TikZ bond style
-                           - new option `arrow-style'
-                           - new command \chlewis
-2013/11/04 - version 4.2a  - bug fix in \chcpd,
-                           - change sanitizing/restoring of category codes
-2014/01/24 - version 4.3   - changed behaviour of \DeclareChem to match
-                             \DeclareRobustCommand, i.e., no check if command
-                             is defined; added a \NewChem variant to each that
-                             /does/ check; use \NewChem instead of \DeclareChem
-                             for definitions
-                           - new option stoich-print
-                           - new command \chstoich
-2014/01/29 - version 4.4   - treat a single `-' as a minus sign
-2014/04/07 - version 4.5   - make sure that < and > have catcode 12 when read
-                             as parts of arrows
-                           - new arrow types `>=<', `>=<<', `>>=<' and `<==>'
-                           - arrow lengths and compound offset now correctly
-                             adapts to new fontsize if relative lengths (em,ex)
-                             are used
-                           - allow optional arguments to \\ in equation
-                             environments
-                           - allow optional arguments to \label in equation
-                             environments
-                             (credits: http://tex.stackexchange.com/a/166661/5049)
-                           - support for Kröger-Vink notation
-2014/06/30 - version 4.6   - fix: a comma in a superscript is typeset according
-                             to `decimal-marker' again
-                           - fix charge type behaviour: option `circled' and
-                             `circletype' are now obeyed if the option is
-                             changed mid-document
-                           - new option `chemformula/circled' similar to
-                             `chemmacros/circled'
-                           - new option `chemformula/circletype' similar to
-                             `chemmacros/circletype'
-2014/08/04 - version 4.7   - change dependency: pgf library `arrows.meta'
-                             instead of `arrows'
-                           - new arrow tip definition allows redeclaration to
-                             other existing tips by \pgfkeys{cf/.tip=<tip>}
-2014/08/08 - version 4.8   - fix bug introduced in last update: `butt cap' now
-                             needs to be `Butt Cap' with the new `arrows.meta'
-                             library
-                           - split from `chemmacros' bundle as independent
-                             package
-2014/10/07 - version 4.9   - new options: `minus-space', `minus-penalty',
-                             `plus-output-symbol' and `minus-output-symbol'
-2015/03/16 - version 4.10  - new macros \NewChemCompoundProperty,
-                             \RenewChemCompoundProperty,
-                             \DeclareChemCompoundProperty,
-                             \RemoveChemCompoundProperty
-2015/04/03 - version 4.10a - bug fix in \__chemformula_input_stoich:n
-2015/06/30 - version 4.11  - small changes in \chcpd
-                           - remove unnecessary \mathchoice => noticable speed
-                             improvement
-                           - \NewChemAdditionSymbol
-                           - \NewChemSymbol
-2015/08/12 - version 4.12  - remove chemmacros' `circletype' and `circled'
-                             options. They really belong to chemmacros
-                           - change requirement amsmath -> amstext
-                           - shorten definition of double and triple bonds
-2015/08/29 - version 4.12a - \chemformula_formal_plus: ,
-                             \chemformula_formal_minus:
-                             \ProvideChem... equivalents to all \NewChem...
-                             macros 
-2015/09/08 - version 4.12b - trim spaces of \ch input -- due to a change in
-                             l3kernel
-2015/01/01 - version 4.13  - clean up code
-                           - check for blank input
-                           - drop support for \[ and \]
-                           - new option `atom-format'
-2015/10/21 - version 4.14  - fix issue
-                             https://github.com/cgnieder/chemformula/issues/2
-                           - new option `adduct-penalty'
-2016/01/07 - version 4.14a - \prop_get:Nn => \prop_item:Nn
-2016/05/03 - version 4.14b - local options now are correctly working again
-                           - `atom-format' is only applied to formulas
-2016/05/11 - version 4.15  - arrow definitions don't have to be made in a
-                             certain order any more
-                           - new quasi equilibria arrows
-                           - bug fix in \RenewChemArrow
-                           - meaningful error if \charrow if used with an
-                             unknown arrow type
-2016/06/08 - version 4.15a - change requirement amstext -> amsmath; \chname
-                             uses \underset which needs amsmath
-2016/06/08 - version 4.15b - add missing variant of kernel function
-2016/08/21 - version 4.15c - corrected redundant definition of
-                             \chemformula_single_bond:
-                           - fix problem with TikZ externalization and
-                             Kroeger-Vink notation
-2017/02/02 - version 4.15d - allow `name-format' to end with a macro that
-                             takes an argument
-2017/03/23 - version 4.15e - small bug fix (issue #5)
-                           - implement \shortintertext bypass
-2019/09/23 - version 4.15f - add missing definition for temporary variable
-2019/09/27 - version 4.15g - bug fix in fontspec option
-2019/10/13 - version 4.15h - new (undocumented) option `set-catcodes'
-                           - fix behaviour with category codes
-                             (https://tex.stackexchange.com/q/511592/)
-                           - fix bug: local format changes are now applied
-                             again
-2020/02/01 - version 4.15i - fix issue #12
-2020/03/07 - version 4.15j - make sure that < and > have catcode 12 when read
-                             as arrows -- again...
-2020/03/15 - version 4.15k - fix https://tex.stackexchange.com/questions/532674/
-2020/12/22 - version 4.16  - new option `math-scripts'
-                           - use LaTeX's new hooks
-                           - get rid of unnecessary package dependencies
-
-% --------------------------------------------------------------------------
-% IDEAS:
-- Addukte: Zahlen nach * und . automatisch erkennen?



More information about the tex-live-commits mailing list.