summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/chemformula
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/chemformula')
-rw-r--r--macros/latex/contrib/chemformula/HISTORY252
-rw-r--r--macros/latex/contrib/chemformula/README15
-rw-r--r--macros/latex/contrib/chemformula/chemformula-manual.cls29
-rw-r--r--macros/latex/contrib/chemformula/chemformula-manual.pdfbin899303 -> 851188 bytes
-rw-r--r--macros/latex/contrib/chemformula/chemformula-manual.tex81
-rw-r--r--macros/latex/contrib/chemformula/chemformula.sty598
6 files changed, 592 insertions, 383 deletions
diff --git a/macros/latex/contrib/chemformula/HISTORY b/macros/latex/contrib/chemformula/HISTORY
new file mode 100644
index 0000000000..0cc66d3a76
--- /dev/null
+++ b/macros/latex/contrib/chemformula/HISTORY
@@ -0,0 +1,252 @@
+--------------------------------------------------------------------------
+the CHEMFORMULA package
+
+ typeset chemical compounds and reactions
+
+--------------------------------------------------------------------------
+Clemens Niederberger
+--------------------------------------------------------------------------
+https://github.com/cgnieder/chemformula/
+contact@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
diff --git a/macros/latex/contrib/chemformula/README b/macros/latex/contrib/chemformula/README
index c25182cc82..fd8728046b 100644
--- a/macros/latex/contrib/chemformula/README
+++ b/macros/latex/contrib/chemformula/README
@@ -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 @@ Clemens Niederberger
Web: https://github.com/cgnieder/chemformula/
E-Mail: contact@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 @@ This work has the LPPL maintenance status `maintained'.
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.
diff --git a/macros/latex/contrib/chemformula/chemformula-manual.cls b/macros/latex/contrib/chemformula/chemformula-manual.cls
index e9da59b2c5..0c0061d1a4 100644
--- a/macros/latex/contrib/chemformula/chemformula-manual.cls
+++ b/macros/latex/contrib/chemformula/chemformula-manual.cls
@@ -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@add@version{2012-01-28}{3.0}
\chemformula@add@version{2012-01-30}{3.0a}
\chemformula@add@version{2012-02-03}{3.0b}
@@ -360,5 +384,6 @@
\chemformula@add@version{2020-03-07}{4.15j}
\chemformula@add@version{2020-03-15}{4.15k}
\chemformula@add@version{2020-12-22}{4.16}
+\chemformula@add@version{2022-01-23}{4.17}
\endinput
diff --git a/macros/latex/contrib/chemformula/chemformula-manual.pdf b/macros/latex/contrib/chemformula/chemformula-manual.pdf
index 6ce31cd5de..a313fc06d2 100644
--- a/macros/latex/contrib/chemformula/chemformula-manual.pdf
+++ b/macros/latex/contrib/chemformula/chemformula-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/chemformula/chemformula-manual.tex b/macros/latex/contrib/chemformula/chemformula-manual.tex
index 00b7b2aa89..e1d592a263 100644
--- a/macros/latex/contrib/chemformula/chemformula-manual.tex
+++ b/macros/latex/contrib/chemformula/chemformula-manual.tex
@@ -1,5 +1,5 @@
-% !arara: pdflatex
-% !arara: biber
+% arara: pdflatex
+% arara: biber
% arara: pdflatex
% arara: pdflatex
% --------------------------------------------------------------------------
@@ -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,28 +206,29 @@ parentheses in the \acs{iupac} Green Book~\cite{iupac:greenbook}:
(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.
\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 @@ expands.
\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 @@ the spacing. That's why there is an alternative:
\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 @@ of the labels. What stays constant is the part that protrudes the labels.
\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 @@ creating a name you only have to make sure it isn't followed by parentheses.
\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 @@ There are a number of options for customizations:
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}
diff --git a/macros/latex/contrib/chemformula/chemformula.sty b/macros/latex/contrib/chemformula/chemformula.sty
index 4ba76f16b5..3a7b1d94a1 100644
--- a/macros/latex/contrib/chemformula/chemformula.sty
+++ b/macros/latex/contrib/chemformula/chemformula.sty
@@ -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,14 +128,50 @@
\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}
\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,6 +404,89 @@
\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,20 +2405,20 @@
\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
{
\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,26 +2476,29 @@
\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
\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,22 +2698,20 @@
{ \chemformula_prime: }
{ \chemformula_superscript:n { \chemformula_prime: } }
}
- % finish formatting:
- \tl_put_right:Nn #1 { \group_end: }
}
\tl_clear:N \l__chemformula_tmpa_tl
}
\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?