summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros-manual.cls383
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.acid-base.code.tex167
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.all.code.tex75
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.base.code.tex487
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.charges.code.tex157
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.chemformula.code.tex243
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.errorcheck.code.tex130
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.greek.code.tex70
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.isotopes.code.tex238
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.lang.code.tex177
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.mechanisms.code.tex165
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.newman.code.tex212
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.nomenclature.code.tex978
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.orbital.code.tex576
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.particles.code.tex141
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.phases.code.tex140
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.polymers.code.tex182
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.reactions.code.tex445
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.redox.code.tex458
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.scheme.code.tex333
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.spectroscopy.code.tex515
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.symbols.code.tex89
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.thermodynamics.code.tex147
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.tikz.code.tex187
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.units.code.tex68
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.xfrac.code.tex137
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty6802
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros4.sty4100
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/chemmacros5.sty330
29 files changed, 6657 insertions, 11475 deletions
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros-manual.cls b/Master/texmf-dist/tex/latex/chemmacros/chemmacros-manual.cls
deleted file mode 100644
index 7a243d4bfcf..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros-manual.cls
+++ /dev/null
@@ -1,383 +0,0 @@
-% --------------------------------------------------------------------------
-% 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--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ProvidesClass{chemmacros-manual}[2020/02/03]
-
-\LoadClass[load-preamble,add-index]{cnltx-doc}
-\RequirePackage{imakeidx}
-\RequirePackage[utf8]{inputenc}
-
-\RequirePackage[compatibility=newest]{chemmacros}
-\setcnltx{
- package = {chemmacros},
- info = {comprehensive support for typesetting chemistry documents},
- url = https://github.com/cgnieder/chemmacros ,
- authors = Clemens Niederberger ,
- email = contact@mychemistry.eu ,
- abstract = {%
- \centering
- \includegraphics{chemmacros-logo.pdf}
- \par
- } ,
- quote-format = \small\biolinumLF ,
- add-cmds = {
- abinitio, activatechemgreekmapping, AddRxnDesc, anti, aq, aqi,
- ba, bond, bridge,
- cd, ch, changechemgreeksymbol, charrow, chcpd, chemabove, chemalpha,
- chembeta, ChemCleverefSupport, chemdelta, chemDelta,
- ChemFancyrefSupport, chemformula@bondlength, chemgamma, ChemModule,
- chemomega, chemphi, chemPhi, chemsetup, chlewis, chname , cip, cis, ch,
- CNMR,
- data, DeclareChemArrow, DeclareChemBond, DeclareChemBondAlias,
- DeclareChemCharge, DeclareChemEqConstant, declarechemgreekmapping,
- DeclareChemIUPAC, DeclareChemIUPACShorthand, DeclareChemLatin,
- DeclareChemNMR, DeclareChemNucleophile, DeclareChemPartialCharge,
- DeclareChemParticle, DeclareChemPhase, DeclareChemReaction,
- DeclareChemState,
- delm, delp, Delta, dexter, Dfi,
- el, ElPot, endo, entgegen, Enthalpy, enthalpy, entropy,
- fdelm, fdelp, fmch, fminus, fpch, fplus, fscrm, fscrp,
- gas, ghs, ghslistall, ghspic, gibbs, gram,
- hapto, HNMR, Helmholtz, hydrogen,
- IfChemCompatibilityF, IfChemCompatibilityT, IfChemCompatibilityTF, insitu,
- invacuo, isotope, iupac,
- Ka, Kb, Kw,
- laevus, Lfi, listofreactions, lqd,
- makepolymerdelims, mch, mega, meta, mhName,
- NewChemArrow, NewChemBond, NewChemBondAlias,
- NewChemCharge, NewChemEqConstant, newchemgreekmapping, NewChemIUPAC,
- NewChemIUPACShorthand, NewChemLatin, NewChemMacroset, NewChemNMR,
- NewChemNucleophile, NewChemPartialCharge, NewChemParticle, NewChemPhase,
- NewChemReaction, NewChemState,
- newman, nitrogen, NMR, Nu, Nuc,
- orbital, ortho, ox, OX, oxygen,
- para, pch, per, pH, phase, phosphorus, photon, pKa, pKb, pOH, pos,
- positron, Pot, ProvideChemArrow, ProvideChemBond, ProvideChemCharge,
- ProvideChemEqConstant, ProvideChemIUPAC, ProvideChemIUPACShorthand,
- ProvideChemLatin, ProvideChemNMR, ProvideChemNucleophile,
- ProvideChemPartialCharge, ProvideChemParticle, ProvideChemPhase,
- ProvideChemReaction,
- ProvideChemState, prt,
- Rad, redox, RemoveChemIUPACShorthand, RenewChemArrow, RenewChemBond,
- RenewChemCharge, RenewChemEqConstant, renewchemgreekmapping,
- RenewChemIUPAC, RenewChemIUPACShorthand, RenewChemLatin, RenewChemNMR,
- RenewChemNucleophile, RenewChemPartialCharge, RenewChemParticle,
- RenewChemPhase, RenewChemState,
- Sf, scrm, scrp, second, selectchemgreekmapping, setchemformula,
- ShowChemArrow, ShowChemBond, sld, Sod, state, sulfur,
- trans,
- usechemmodule,
- val,
- zusammen
- } ,
- add-silent-cmds = {
- addplot,
- bottomrule,
- cancel, cdot, ce, cee, celsius, centering, chemfig, chemname, clap,
- cnsetup, code, color, cstack, cstsetup,
- DeclareInstance, DeclareSIUnit, definecolor, draw,
- electronvolt, endtikzpicture,
- footnotesize,
- glqq, grqq,
- hertz, hspace,
- includegraphics, intertext, IUPAC,
- joule,
- kelvin, kilo,
- latin, lc, lewis, Lewis, liquid, ltn,
- metre, midrule, milli, mmHg, mole,
- nano, nicefrac, num, numrange,
- ominus, oplus,
- percent, pgfarrowsdeclarealias, pgfarrowsrenewalias,
- renewtagform, rightarrow,
- sample, scriptscriptstyle, setchemfig, sfrac, shade,
- shadedraw, shorthandoff, si, SI, sisetup, square, subsection,
- textcolor, textendash, textsuperscript, tikz, tikzpicture, tiny, toprule,
- upbeta, upeta, upgamma, usetikzlibrary,
- volt, vphantom, vspave,
- xspace,
- z@, z@skip
- } ,
- index-setup = { othercode = \footnotesize , level = \section } ,
- makeindex-setup = { columns = 2 , columnsep = 1em }
-}
-
-\RequirePackage{booktabs,array,longtable}
-
-\RequirePackage{chemfig,cancel,varioref,csquotes}
-
-\RequirePackage[
- a4paper,
- top = .1\paperheight,
- bottom = .1\paperheight,
- left = .2\paperwidth,
- right = .1\paperwidth
-]{geometry}
-
-\def\libertine@figurestyle{LF}
-\RequirePackage{amsmath}
-\undef\lvert \undef\lVert
-\undef\rvert \undef\rVert
-\RequirePackage[libertine]{newtxmath}
-\def\libertine@figurestyle{OsF}
-
-\RequirePackage[biblatex]{embrac}
-\ChangeEmph{[}[,.02em]{]}[.055em,-.08em]
-\ChangeEmph{(}[-.01em,.04em]{)}[.04em,-.05em]
-
-\RequirePackage[accsupp]{acro}
-\acsetup{
- long-format = \scshape ,
- short-format = \scshape
-}
-
-\RequirePackage{fontawesome}
-\RequirePackage{datetime2}
-\DTMsetup{useregional=numeric,datesep=/}
-\newrobustcmd*\chemmacros@add@version[2]{%
- \csdef{chemmacros@ver@#2}{%
- \DTMdate{#1}%
- \csgdef{chemmacros@ver@#2used}{}%
- \csdef{chemmacros@ver@#2}{\DTMdate{#1}}%
- }%
-}
-
-\newrobustcmd*\chemmacros@date[1]{%
- \ifcsdef{chemmacros@ver@#1used}{}{ (\csuse{chemmacros@ver@#1})}}
-\newrobustcmd*\chemmacros@ifnew[1]{\ifcsstring{c_chemmacros_version_tl}{#1}}
-\newrobustcmd*\chemmacros@NEW{\faStarO\ New}
-
-\renewrobustcmd*\sinceversion[1]{%
- \chemmacros@ifnew{#1}%
- {\cnltx@version@note{\textcolor{red}{\chemmacros@NEW}}}%
- {\cnltx@version@note{\GetTranslation{cnltx-introduced}~#1\chemmacros@date{#1}}}%
-}
-\renewrobustcmd*\changedversion[1]{%
- \cnltx@version@note{\GetTranslation{cnltx-changed}~#1\chemmacros@date{#1}}%
-}
-
-\newnote*\sincechanged[2]{%
- \GetTranslation{cnltx-introduced}~#1\chemmacros@date{#1},
- changed with version~#2\chemmacros@date{#2}\chemmacros@ifnew{#2}{ \chemmacros@NEW}{}%
-}
-
-\RenewDocumentEnvironment{commands}{}
- {%
- \cnltx@set@catcode_{12}%
- \let\command\cnltx@command
- \cnltxlist
- }
- {\endcnltxlist}
-
-\RequirePackage{tcolorbox,xsimverb}
-\tcbuselibrary{skins,breakable}
-\tcbset{enhanced,enhanced jigsaw}
-
-\newtcolorbox{bewareofthedog}{
- colback = white ,
- colframe = red ,
- underlay={%
- \path[draw=none]
- (interior.south west)
- rectangle node[red]{\Huge\bfseries !}
- ([xshift=-4mm]interior.north west);
- }%
-}
-
-\newtcolorbox{cnltxcode}[1][]{
- boxrule = 1pt ,
- colback = cnltxbg ,
- colframe = cnltx ,
- arc = 5pt ,
- beforeafter skip = .5\baselineskip ,%
- #1%
-}
-
-\newcommand*\chemmacros@readoptions[1]{%
- \catcode`\^^M=13
- \chemmacros@read@options{#1}%
-}
-
-\begingroup
-\catcode`\^^M=13
-\gdef\chemmacros@read@options#1#2^^M{%
- \endgroup
- \ifblank{#2}{}{\chemmacros@read@options@#2}%
- #1%
- \XSIMfilewritestart*{\jobname.tmp}%
-}%
-\endgroup
-\def\chemmacros@read@options@[#1]{\pgfqkeys{/cnltx}{#1}}
-
-\RenewDocumentEnvironment{sourcecode}{}
- {%
- \begingroup
- \chemmacros@readoptions{%
- \setlength\cnltx@sidebysidewidth
- {\dimexpr .45\columnwidth -\lst@xleftmargin -\lst@xrightmargin\relax}%
- \expanded{%
- \noexpand\lstset{
- style=cnltx,
- \ifboolexpe{ bool {cnltx@sidebyside} and not bool {cnltx@codeonly} }
- {linewidth=\cnltx@sidebysidewidth,}{}%
- \expandonce\cnltx@local@listings@options
- }%
- }%
- \XSIMgobblechars{2}%
- }%
- }
- {%
- \XSIMfilewritestop
- \cnltxcode[breakable]%
- \lstinputlisting[style=cnltx]{\jobname.tmp}%
- \endcnltxcode
- }
-
-\RenewDocumentEnvironment{example}{}
- {%
- \begingroup
- \chemmacros@readoptions{%
- \setlength\cnltx@sidebysidewidth
- {\dimexpr .45\columnwidth -\lst@xleftmargin -\lst@xrightmargin\relax}%
- \expanded{%
- \noexpand\lstset{
- style=cnltx,
- \ifboolexpe{ bool {cnltx@sidebyside} and not bool {cnltx@codeonly} }
- {linewidth=\cnltx@sidebysidewidth,}{}%
- \expandonce\cnltx@local@listings@options
- }%
- }%
- \XSIMgobblechars{2}%
- }%
- }
- {%
- \XSIMfilewritestop
- \ifbool{cnltx@sidebyside}
- {%
- \cnltxcode
- \noindent
- \minipage[c]{\cnltx@sidebysidewidth}%
- \cnltx@pre@source@hook
- \lstinputlisting[style=cnltx] {\jobname.tmp}%
- \cnltx@after@source@hook
- \endminipage\hfill
- \minipage[c]{\cnltx@sidebysidewidth}%
- \cnltx@pre@example@hook
- \input {\jobname.tmp}%
- \cnltx@after@example@hook
- \endminipage
- }
- {%
- \cnltxcode[breakable]%
- \cnltx@pre@source@hook
- \lstinputlisting{\jobname.tmp}%
- \cnltx@after@source@hook
- \tcblower
- \cnltx@pre@example@hook
- \input {\jobname.tmp}%
- \cnltx@after@example@hook
- }%
- \endcnltxcode
- }
-
-\RequirePackage[
- backend=biber,
- style=cnltx,
- sortlocale=en_US,
- indexing=cite]{biblatex}
-\RequirePackage{csquotes,varioref}
-\defbibheading{bibliography}{\section{References}}
-
-\RequirePackage[biblatex]{embrac}[2012/06/29]
-\ChangeEmph{[}[,.02em]{]}[.055em,-.08em]
-\ChangeEmph{(}[-.01em,.04em]{)}[.04em,-.05em]
-
-\chemmacros@add@version{2012-01-28}{3.0}
-\chemmacros@add@version{2012-01-30}{3.0a}
-\chemmacros@add@version{2012-02-03}{3.0b}
-\chemmacros@add@version{2012-02-05}{3.0c}
-\chemmacros@add@version{2012-02-10}{3.0d}
-\chemmacros@add@version{2012-02-19}{3.1}
-\chemmacros@add@version{2012-02-26}{3.1a}
-\chemmacros@add@version{2012-03-03}{3.1b}
-\chemmacros@add@version{2012-03-14}{3.1c}
-\chemmacros@add@version{2012-03-20}{3.2}
-\chemmacros@add@version{2012-05-07}{3.3}
-\chemmacros@add@version{2012-05-13}{3.3a}
-\chemmacros@add@version{2012-05-18}{3.3b}
-\chemmacros@add@version{2012-05-18}{3.3c}
-\chemmacros@add@version{2012-07-24}{3.3d}
-\chemmacros@add@version{2012-08-21}{3.3e}
-\chemmacros@add@version{2012-09-11}{3.4}
-\chemmacros@add@version{2012-10-03}{3.4a}
-\chemmacros@add@version{2013-01-04}{3.4b}
-\chemmacros@add@version{2013-01-28}{3.5}
-\chemmacros@add@version{2013-02-19}{3.5a}
-\chemmacros@add@version{2013-02-26}{3.6}
-\chemmacros@add@version{2013-02-27}{3.6a}
-\chemmacros@add@version{2013-04-19}{3.6b}
-\chemmacros@add@version{2013-07-06}{4.0}
-\chemmacros@add@version{2013-08-07}{4.0a}
-\chemmacros@add@version{2013-08-24}{4.1}
-\chemmacros@add@version{2013-10-28}{4.2}
-\chemmacros@add@version{2013-10-31}{4.2a}
-\chemmacros@add@version{2013-11-04}{4.2b}
-\chemmacros@add@version{2013-11-20}{4.2c}
-\chemmacros@add@version{2013-12-15}{4.2d}
-\chemmacros@add@version{2014-01-09}{4.2e}
-\chemmacros@add@version{2014-01-24}{4.3}
-\chemmacros@add@version{2014-01-29}{4.4}
-\chemmacros@add@version{2014-04-08}{4.5}
-\chemmacros@add@version{2014-06-30}{4.5a}
-\chemmacros@add@version{2014-08-08}{4.6}
-\chemmacros@add@version{2015-02-08}{4.7}
-\chemmacros@add@version{2015-09-11}{5.0}
-\chemmacros@add@version{2015-09-23}{5.1}
-\chemmacros@add@version{2015-10-14}{5.2}
-\chemmacros@add@version{2016-01-13}{5.3}
-\chemmacros@add@version{2016-01-23}{5.3a}
-\chemmacros@add@version{2016-02-10}{5.4}
-\chemmacros@add@version{2016-03-08}{5.5}
-\chemmacros@add@version{2016-05-02}{5.6}
-\chemmacros@add@version{2016-05-04}{5.6a}
-\chemmacros@add@version{2016-06-07}{5.7}
-\chemmacros@add@version{2016-06-08}{5.7a}
-\chemmacros@add@version{2016-10-05}{5.7b}
-\chemmacros@add@version{2016-12-28}{5.7c}
-\chemmacros@add@version{2017-04-17}{5.8}
-\chemmacros@add@version{2017-06-13}{5.8a}
-\chemmacros@add@version{2017-08-28}{5.8b}
-\chemmacros@add@version{2018-03-02}{5.8c}
-\chemmacros@add@version{2019-09-23}{5.8d}
-\chemmacros@add@version{2019-09-27}{5.8e}
-\chemmacros@add@version{2019-09-30}{5.8f}
-\chemmacros@add@version{2019-11-17}{5.9}
-\chemmacros@add@version{2020-01-16}{5.9a}
-\chemmacros@add@version{2020-02-03}{5.10}
-\chemmacros@add@version{2020-03-07}{5.11}
-
-\endinput
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.acid-base.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.acid-base.code.tex
deleted file mode 100644
index 341a60fc585..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.acid-base.code.tex
+++ /dev/null
@@ -1,167 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `acid-base'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{acid-base}{2018/02/22 acid/base}
-
-\chemmacros_load_modules:n {charges}
-
-% --------------------------------------------------------------------------
-% equilibrium constants:
-
-\tl_new:N \l__chemmacros_equilibrium_constant_tl
-\tl_set:Nn \l__chemmacros_equilibrium_constant_tl {K}
-\prop_new:N \l__chemmacros_eq_constants_prop
-
-\prg_new_conditional:Npnn \chemmacros_if_eq_constant:Nn #1#2 {T,F,TF}
- {
- \cs_if_exist:NTF #1
- {
- \tl_if_eq:xnTF
- { \prop_item:Nn \l__chemmacros_eq_constants_prop {#1} }
- {#2}
- { \prg_return_true: }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
-\cs_generate_variant:Nn \tl_if_eq:nnTF {x}
-
-% #1: cs
-% #2: translation id and option name
-% #3: default translation
-\cs_new_protected:Npn \chemmacros_define_eq_constant:Nnn #1#2#3
- {
- \chemmacros_if_eq_constant:NnF {#1} {#2}
- {
- \cs_new_protected:Npn #1 {}
- \prop_put:Nnn \l__chemmacros_eq_constants_prop {#1} {#2}
- \tl_new:c {l__chemmacros_#2_tl}
- \chemmacros_define_keys:nn {acid-base}
- { #2 .tl_set:c = l__chemmacros_#2_tl }
- }
- \tl_set:cn
- {l__chemmacros_#2_tl}
- { \chemmacros_translate:n {#2} }
- \chemmacros_if_compatibility:nnTF {>=} {5.7}
- { \chemmacros_declare_translation:nnn {#2} {fallback} {#3} }
- { \DeclareTranslationFallback {#2} {#3} }
- \cs_set_protected:Npn #1
- {
- \ensuremath
- {
- \chemmacros_bold:n
- {
- \l__chemmacros_equilibrium_constant_tl
- \c_math_subscript_token
- { \tl_use:c {l__chemmacros_#2_tl} }
- }
- }
- }
- }
-
-\NewChemMacroset {EqConstant} {mmm}
- { \chemmacros_define_eq_constant:Nnn #1 {#2} {#3} }
-
-\NewChemEqConstant \Ka {K-acid} { \mathrm{a} }
-\NewChemEqConstant \Kb {K-base} { \mathrm{b} }
-\NewChemEqConstant \Kw {K-water} { \mathrm{w} }
-
-\chemmacros_if_compatibility:nnT {>=} {5.4}
- {
- \chemmacros_define_keys:nn {acid-base}
- { eq-constant .tl_set:N = \l__chemmacros_equilibrium_constant_tl }
- }
-
-\chemmacros_define_keys:nn {acid-base}
- {
- p-style .choice: ,
- p-style / slanted .code:n = \cs_set_eq:NN \chemmacros_p_style:n \textsl ,
- p-style / italics .code:n = \cs_set_eq:NN \chemmacros_p_style:n \textit ,
- p-style / upright .code:n = \cs_set_eq:NN \chemmacros_p_style:n \textup ,
- p-style .initial:n = upright
- }
-
-\cs_new_protected:Npn \chemmacros_p:n #1
- {
- \group_begin:
- \chemmacros_if_compatibility:nnTF {<=} {5.8b}
- { \mbox }
- { \chemmacros_text:n }
- {
- \chemmacros_p_style:n {p}
- \ensuremath {#1}
- }
- \group_end:
- }
-
-\NewDocumentCommand \p {m} { \chemmacros_p:n {#1} }
-\NewDocumentCommand \pH {} { \chemmacros_p:n { \chemmacros_chemformula:n {H} } }
-\NewDocumentCommand \pOH {} { \chemmacros_p:n { \chemmacros_chemformula:n {OH} } }
-
-\NewDocumentCommand \pKa {o}
- {
- \chemmacros_p:n
- {
- \Ka \IfNoValueF {#1}
- { {} \c_math_subscript_token { \chemmacros_bold:n {#1} } }
- }
- }
-
-\NewDocumentCommand \pKb {o}
- {
- \chemmacros_p:n
- {
- \Kb \IfNoValueF {#1}
- { {} \c_math_subscript_token { \chemmacros_bold:n {#1} } }
- }
- }
-
-% --------------------------------------------------------------------------
-\ChemCompatibilityTo{5.6}
-\DeclareTranslation {English} {K-acid} {\mathrm{a}}
-\DeclareTranslation {German} {K-acid} {\mathrm{s}}
-\DeclareTranslation {Dutch} {K-acid} {\mathrm{z}}
-
-\DeclareTranslation {English} {K-base} {\mathrm{b}}
-
-\DeclareTranslation {English} {K-water} {\mathrm{w}}
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.6}
-\chemmacros_declare_translations:nn {K-acid}
- {
- German = \mathrm {s} ,
- Dutch = \mathrm {z}
- }
-\EndChemCompatibility
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2016/02/04 - \NewChemEqConstant and family, new option `eq-constant'
-2016/04/27 - moved translations from lang module to acid-base module
-2016/05/31 - adapt to changes in `lang' module
-2018/02/22 - fix bug in \chemmacros_p:n (https://tex.stackexchange.com/q/416227/)
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.all.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.all.code.tex
deleted file mode 100644
index af4c6bee172..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.all.code.tex
+++ /dev/null
@@ -1,75 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `all'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{all}{2016/03/07 load all libraries}
-
-\msg_new:nnn {chemmacros} {all-modules}
- {
- You~ are~ loading~ *all*~ of~ chemmacros'~ module~ through~ the~ `all'~
- module!~ This~ is~ fine~ but~ not~ really~ encouraged.~ Do~ really~ need~
- all~ of~ `isotopes' ,~ `mechanisms' ,~ `newman' ,~ `nomenclature' ,~
- `orbital' ,~ `particles' ,~ `phases' ,~ `polymers' ,~ `reactions' ,~
- `redox' ,~ `scheme' ,~ `spectroscopy' ,~ `symbols' ,~ `thermodynamics' ,~
- `units' ...?
- }
-
-\chemmacros_load_modules:n
- {
- base ,
- errorcheck ,
- lang ,
- greek ,
- chemformula ,
- tikz ,
- acid-base ,
- charges ,
- isotopes ,
- mechanisms ,
- newman ,
- nomenclature ,
- orbital ,
- particles ,
- phases ,
- polymers ,
- reactions ,
- redox ,
- scheme ,
- spectroscopy ,
- symbols ,
- thermodynamics ,
- units ,
- xfrac
- }
-
-\msg_info:nn {chemmacros} {all-modules}
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2015/10/14 - add info message discouraging the usage of this module
- - add `errorcheck' module
-2016/03/07 - add `polymer' module
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.base.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.base.code.tex
deleted file mode 100644
index 58948c5f793..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.base.code.tex
+++ /dev/null
@@ -1,487 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `base'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{base}{2020/02/02 basic chemmacros module}
-
-% for the document hooks
-\ChemCompatibilityFrom{5.1}
-\RequirePackage {etoolbox}
-\EndChemCompatibility
-
-% --------------------------------------------------------------------------
-\msg_new:nnn {chemmacros} {command-deprecated}
- {
- The~ command~ \token_to_str:N #1 \c_space_tl is~ deprecated.~ Use~
- \token_to_str:N #2 \c_space_tl instead.
- }
-
-% define a deprecated command with hints to the corresponding new one:
-\cs_new_protected:Npn \chemmacros_define_deprecated:NN #1#2
- {
- \cs_set_protected:Npn #1
- {
- \msg_warning:nnnn {chemmacros} {command-deprecated} {#1} {#2}
- #2
- }
- }
-
-\NewDocumentCommand \DeclareChemDeprecated {mm}
- { \chemmacros_define_deprecated:NN #1 #2 }
-
-% --------------------------------------------------------------------------
-% define a macro set:
-% \NewChem... \RenewChem... \DeclareChem... \ProvideChem...
-% #1: macro names
-% #2: arg spec
-% #3: internal command call
-\cs_new_protected:Npn \chemmacros_new_macroset:nnn #1#2#3
- {
- \exp_args:Nc \NewDocumentCommand
- {
- NewChem
- \str_uppercase:f { \tl_head:n {#1} }
- \tl_tail:n {#1}
- }
- {#2}
- {
- \cs_if_free:NTF ##1
- { #3 }
- { \msg_error:nnn {chemmacros} {new-#1} {##1} }
- }
- \exp_args:Nc \NewDocumentCommand
- {
- RenewChem
- \str_uppercase:f { \tl_head:n {#1} }
- \tl_tail:n {#1}
- }
- {#2}
- {
- \cs_if_free:NTF ##1
- { \msg_error:nnn {chemmacros} {renew-#1} {##1} }
- { #3 }
- }
- \exp_args:Nc \NewDocumentCommand
- {
- DeclareChem
- \str_uppercase:f { \tl_head:n {#1} }
- \tl_tail:n {#1}
- }
- {#2}
- {#3}
- \exp_args:Nc \NewDocumentCommand
- {
- ProvideChem
- \str_uppercase:f { \tl_head:n {#1} }
- \tl_tail:n {#1}
- }
- {#2}
- { \cs_if_free:NT ##1 { #3 } }
- \msg_new:nnn {chemmacros} {new-#1}
- {
- You've~ tried~ to~ define~ a~ #1~ with~ \token_to_str:N
- \NewChem #1 ,~ but~ the~ command~ sequence~ \token_to_str:N ##1
- \c_space_tl already~ exists.~ Please~ choose~ another~ name.
- }
- \msg_new:nnn {chemmacros} {renew-#1}
- {
- You've~ tried~ to~ renew~ the~ #1~ \token_to_str:N ##1 ,~ but~
- it~ doesn't~ exist.
- }
- }
-
-\cs_new_protected:Npn \chemmacros_new_environment_macroset:nnn #1#2#3
- {
- \exp_args:Nc \NewDocumentCommand {NewChem#1} {#2}
- {
- \bool_lazy_and:nnTF
- { \cs_if_free_p:c {##1} }
- { \cs_if_free_p:c {end##1} }
- {#3}
- { \msg_error:nnn {chemmacros} {new-#1} {##1} }
- }
- \exp_args:Nc \NewDocumentCommand {RenewChem#1} {#2}
- {
- \bool_lazy_or:nnTF
- { \cs_if_free_p:c {##1} }
- { \cs_if_free_p:c {end##1} }
- { \msg_error:nnn {chemmacros} {renew-#1} {##1} }
- {#3}
- }
- \exp_args:Nc \NewDocumentCommand {DeclareChem#1} {#2} {#3}
- \exp_args:Nc \NewDocumentCommand {ProvideChem#1} {#2}
- {
- \bool_lazy_and:nT
- { \cs_if_free_p:c {##1} }
- { \cs_if_free_p:c {end##1} }
- {#3}
- }
- \msg_new:nnn {chemmacros} {new-#1}
- {
- You've~ tried~ to~ define~ a~ #1~ with~ \token_to_str:N
- \NewChem #1 ,~ but~ the~ command~ sequence~ \exp_not:c {##1}
- \c_space_tl already~ exists.~ Please~ choose~ another~ name.
- }
- \msg_new:nnn {chemmacros} {renew-#1}
- { You've~ tried~ to~ renew~ the~ #1~ ##1,~ but~ it~ doesn't~ exist. }
- }
-
-\NewDocumentCommand \NewChemMacroset {smmm}
- {
- \IfBooleanTF {#1}
- { \chemmacros_new_environment_macroset:nnn {#2} {#3} {#4} }
- { \chemmacros_new_macroset:nnn {#2} {#3} {#4} }
- }
-
-% --------------------------------------------------------------------------
-\cs_new_protected:Npn \chemmacros_define_keys:nn #1#2
- { \keys_define:nn {chemmacros/#1} {#2} }
-\cs_generate_variant:Nn \chemmacros_define_keys:nn {x}
-
-\cs_new_protected:Npn \chemmacros_set_keys:nn #1#2
- { \keys_set:nn {chemmacros/#1} {#2} }
-\cs_generate_variant:Nn \chemmacros_set_keys:nn {x,nx}
-
-\cs_new_protected:Npn \chemmacros_set_keys_groups:nnn #1#2#3
- { \keys_set_groups:nnn {chemmacros/#1} {#2} {#3} }
-
-\cs_new_protected:Npn \chemmacros_set_keys_filter:nnn #1#2#3
- { \keys_set_filter:nnn {chemmacros/#1} {#2} {#3} }
-
-\cs_new_protected:Npn \chemmacros_define_global_keys:n #1
- { \keys_define:nn {chemmacros} {#1} }
-
-\cs_new_protected:Npn \chemmacros_set_global_keys:n #1
- { \keys_set:nn {chemmacros} {#1} }
-
-% --------------------------------------------------------------------------
-% basic tools:
-\cs_new:Npn \chemmacros_remove_backslash:N #1
- { \exp_after:wN \use_none:n \token_to_str:N #1 }
-
-\cs_new_eq:NN \chemmacros_ignore_spaces: \tex_ignorespaces:D
-
-\cs_new_protected:Npn \chemmacros_nobreak: { \tex_penalty:D 10000 \scan_stop: }
-\cs_new_protected:Npn \chemmacros_allow_break: { \tex_penalty:D \c_zero_int }
-\cs_new_protected:Npn \chemmacros_skip_nobreak:N #1
- {
- \chemmacros_nobreak:
- \skip_horizontal:N #1
- \chemmacros_nobreak:
- }
-
-% this is used at least in the `isotope' module
-\prg_new_conditional:Npnn \chemmacros_if_is_int:n #1 {p,T,F,TF}
- {
- \if_charcode:w ! \if_int_compare:w 9 < 1#1 ! \else: _ \fi:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-
-\prg_new_conditional:Npnn \chemmacros_if_loaded:nn #1#2 {p,T,F,TF}
- {
- \use:c {chemmacros_if_#1_loaded:nTF} {#2}
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-\prg_new_conditional:Npnn \chemmacros_if_package_loaded:n #1 {p,T,F,TF}
- {
- \cs_if_exist:cTF {ver@#1.sty}
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-\prg_new_conditional:Npnn \chemmacros_if_class_loaded:n #1 {p,T,F,TF}
- {
- \cs_if_exist:cTF {ver@#1.cls}
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-\ChemCompatibilityFrom{5.2}
-% this is still true \AtBeginDocument:
-\prg_new_conditional:Npnn \chemmacros_if_preamble: {p,T,F,TF}
- {
- \cs_if_eq:NNTF \@onlypreamble \@notprerr
- { \prg_return_false: }
- { \prg_return_true: }
- }
-
-% this is still false \AtBeginDocument:
-\prg_new_conditional:Npnn \chemmacros_if_document: {p,T,F,TF}
- {
- \bool_if:NTF \l__chemmacros_in_document_bool
- { \prg_return_true: }
- { \prg_return_false: }
- }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.6}
-\cs_new_protected:Npn \chemmacros_cs_if_free_new:Npn #1
- {
- \cs_if_exist:NF #1
- { \cs_new:Npn #1 }
- }
-\cs_generate_variant:Nn \chemmacros_cs_if_free_new:Npn {c}
-
-\cs_new_protected:Npn \chemmacros_cs_if_free_new_protected:Npn #1
- {
- \cs_if_exist:NF #1
- { \cs_new_protected:Npn #1 }
- }
-\cs_generate_variant:Nn \chemmacros_cs_if_free_new_protected:Npn {c}
-
-\RequirePackage{scrlfile}
-
-% #1: counter
-% #2: singular
-% #3: plural
-% #4: Singular
-% #5: Plural
-\cs_new_protected:Npn \chemmacros_add_cleveref_support:nnnnn #1#2#3#4#5
- {
- \AfterPackage* {cleveref}
- {
- \cs_if_exist:cF {cref@#1@name}
- {
- \legacy_if:nTF {@cref@capitalise}
- { \crefname {#1} {#4} {#5} }
- { \crefname {#1} {#2} {#3} }
- \Crefname {#1} {#4} {#5}
- }
- }
- }
-\cs_generate_variant:Nn \chemmacros_add_cleveref_support:nnnnn {nnnx , nnnxx , nnnnx }
-
-% #1: counter
-% #2: singular
-% #3: Singular (optional)
-% #4: plural
-% #5: Plural (optional)
-\NewDocumentCommand \ChemCleverefSupport {mmomo}
- {
- \IfNoValueTF {#3}
- {
- \IfNoValueTF {#5}
- {
- \chemmacros_add_cleveref_support:nnnnn
- {#1}
- {#2}
- {#4}
- { \tl_titlecase:n {#2} }
- { \tl_titlecase:n {#4} }
- }
- {
- \chemmacros_add_cleveref_support:nnnnn
- {#1}
- {#2}
- {#4}
- { \tl_titlecase:n {#2} }
- {#5}
- }
- }
- {
- \IfNoValueTF {#5}
- {
- \chemmacros_add_cleveref_support:nnnnn
- {#1}
- {#2}
- {#4}
- {#3}
- { \tl_titlecase:n {#4} }
- }
- { \chemmacros_add_cleveref_support:nnnnn {#1} {#2} {#4} {#3} {#5} }
- }
- }
-\@onlypreamble\ChemCleverefSupport
-
-% #1: id
-% #2: mid sentence
-% #3: begin sentence
-\cs_new_protected:Npn \chemmacros_add_fancyref_support:nnn #1#2#3
- {
- \AfterPackage* {fancyref}
- {
- \chemmacros_cs_if_free_new:cpn {fancyref#1labelprefix} {#1}
- \chemmacros_cs_if_free_new:cpn {fref#1name} {#2}
- \chemmacros_cs_if_free_new:cpn {Fref#1name} {#3}
- \exp_args:Nnx \frefformat {vario} { \exp_not:c {fancyref#1labelprefix} }
- { \use:c {fref#1name} \fancyrefdefaultspacing ##1##3 }
- \exp_args:Nnx \Frefformat {vario} { \exp_not:c {fancyref#1labelprefix} }
- { \use:c {Fref#1name} \fancyrefdefaultspacing ##1##3 }
- \exp_args:Nnx \frefformat {plain} { \exp_not:c {fancyref#1labelprefix} }
- { \use:c {fref#1name} \fancyrefdefaultspacing ##1 }
- \exp_args:Nnx \Frefformat {plain} { \exp_not:c {fancyref#1labelprefix} }
- { \use:c {Fref#1name} \fancyrefdefaultspacing ##1 }
- }
- }
-\cs_generate_variant:Nn \chemmacros_add_fancyref_support:nnn {nnx}
-
-% #1: id
-% #2: mid sentence
-% #3: begin sentence (optional)
-\NewDocumentCommand \ChemFancyrefSupport {mmo}
- {
- \IfNoValueTF {#3}
- { \chemmacros_add_fancyref_support:nnn {#1} {#2} { \tl_titlecase:n {#3} } }
- { \chemmacros_add_fancyref_support:nnn {#1} {#2} {#3} }
- }
-\@onlypreamble\ChemFancyrefSupport
-\EndChemCompatibility
-
-% --------------------------------------------------------------------------
-% some checks at begin document:
-\bool_new:N \l__chemmacros_in_document_bool
-\bool_new:N \l__chemmacros_chemstyle_bool
-
-\chemmacros_if_compatibility:nnTF {>=} {5.2}
- { \AfterEndPreamble }
- { \AtBeginDocument }
- { \bool_set_true:N \l__chemmacros_in_document_bool }
-
-\AtBeginDocument
- {
- \@ifpackageloaded { chemstyle }
- { \bool_set_true:N \l__chemmacros_chemstyle_bool }
- { \bool_set_false:N \l__chemmacros_chemstyle_bool }
- }
-
-% --------------------------------------------------------------------------
-% detection and handling of bold face:
-\RequirePackage{bm}
-
-\prg_new_protected_conditional:Npnn \chemmacros_if_bold: {T,F,TF}
- {
- \seq_if_in:NVTF \l__chemmacros_if_bf_seq \f@series
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-\seq_new:N \l__chemmacros_if_bf_seq
-
-\seq_set_split:Nnn \l__chemmacros_if_bf_seq { , }
- {
- b , bc , bm , bx , bux ,
- eb , ebc , ebx , mb ,
- sb , sbc , sbx ,
- ub , ubc , ubx
- }
-
-\cs_new_protected:Npn \chemmacros_bold:n #1
- {
- \chemmacros_if_bold:TF
- {
- \mode_if_math:TF
- { \bm {#1} }
- { \textbf {#1} }
- }
- {#1}
- }
-
-\cs_new_protected:Npn \chemmacros_detect_bold:n
- { \error \chemmacros_bold:n }
-
-% --------------------------------------------------------------------------
-\RequirePackage{amstext}
-
-\cs_new_protected:Npn \chemmacros_text:n #1
- { \mode_if_math:TF { \text {#1} } {#1} }
-\cs_generate_variant:Nn \chemmacros_text:n { V }
-
-\cs_new_protected:Npn \chemmacros_math:n #1
- { \chemmacros_text:n { \c_math_toggle_token #1 \c_math_toggle_token } }
-\cs_generate_variant:Nn \chemmacros_math:n { V }
-
-% --------------------------------------------------------------------------
-% a setup command:
-\NewDocumentCommand \chemsetup {om}
- {
- \IfNoValueTF {#1}
- { \keys_set:nn {chemmacros} {#2} }
- { \keys_set:nn {chemmacros/#1} {#2} }
- }
-
-\chemmacros_define_global_keys:n
- { modules .code:n = \chemmacros_load_modules:n {#1} }
-
-% --------------------------------------------------------------------------
-
-% load package #1 and add its options to chemmacros
-% this requires that package #1 defines its options with l3keys using its
-% name as module
-\cs_new_protected:Npn \chemmacros_integrate_package:nnn #1#2#3
- {
- \tl_if_blank:nTF {#3}
- {
- \tl_if_blank:nTF {#1}
- { \RequirePackage {#2} }
- { \RequirePackage [#1] {#2} }
- }
- {
- \tl_if_blank:nTF {#1}
- { \RequirePackage {#2} [#3] }
- { \RequirePackage [#1] {#2} [#3] }
- }
- \chemmacros_define_global_keys:n
- {
- #2 .choice: ,
- #2 / unknown .code:n =
- \keys_set:no {#2} { \l_keys_key_tl = ##1 }
- }
- }
-
-% --------------------------------------------------------------------------
-
-\chemmacros_if_compatibility:nnT {>=} {5.2}
- { \chemmacros_load_module:n {errorcheck} }
-
-% --------------------------------------------------------------------------
-
-\bool_new:N \l__chemmacros_hyperref_bool
-
-\AtEndPreamble
- {
- \chemmacros_if_package_loaded:nT {hyperref}
- { \bool_set_true:N \l__chemmacros_hyperref_bool }
- }
-
-\file_input_stop:
-
-2015/09/23 - new conditionals \chemmacros_if_preamble:TF and
- \chemmacros_if_document:TF
-2015/10/14 - load `errorcheck' module
-2016/02/09 - starred version of \NewChemMacroset
-2016/03/07 - \chemmacros_define_keys:nn and friends
-2016/04/25 - macros for cleveref and fancyref support, \ChemCleverefSupport
- \ChemFancyrefSupport
-2016/05/04 - fix \ChemCleverefSupport
-2017/08/28 - add missing hyperref check
-2020/01/16 - adapt to renaming of string case changing functions
-2020/02/02 - lazy boolean evaluation
-2020/11/21 - exchange \tl_mixed_case:n for \tl_titlecase:n
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.charges.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.charges.code.tex
deleted file mode 100644
index 98ef61f7b64..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.charges.code.tex
+++ /dev/null
@@ -1,157 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `charges'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{charges}{2015/07/30 charges}
-
-\chemmacros_load_module:n {chemformula}
-
-% --------------------------------------------------------------------------
-% circled charge signs: they are defined in the `chemformula' package:
-% use directly:
-\cs_new_protected:Npn \fplus { { \chemformula_fplus: } }
-\cs_new_protected:Npn \fminus { { \chemformula_fminus: } }
-
-% change output depending on circled-option
-\bool_new:N \l__chemmacros_circled_bool
-\bool_set_true:N \l__chemmacros_circled_bool
-\bool_new:N \l__chemmacros_circled_formal_bool
-\bool_set_true:N \l__chemmacros_circled_formal_bool
-\bool_new:N \l__chemmacros_circled_chem_bool
-\bool_set_true:N \l__chemmacros_circled_chem_bool
-
-
-\chemmacros_define_keys:nn {charges}
- {
- circletype .choice: ,
- circletype / math .code:n =
- {
- \bool_set_false:N \l__chemmacros_circled_chem_bool
- \chemmacros_if_package_loaded:nT {chemformula}
- { \bool_set_false:N \l_chemformula_formal_chem_bool }
- } ,
- circletype / chem .code:n =
- {
- \bool_set_true:N \l__chemmacros_circled_chem_bool
- \chemmacros_if_package_loaded:nT {chemformula}
- { \bool_set_true:N \l_chemformula_formal_chem_bool }
- } ,
- circletype .value_required:n = true ,
- circled .choice: ,
- circled / none .code:n =
- {
- \bool_set_false:N \l__chemmacros_circled_bool
- \bool_set_false:N \l__chemmacros_circled_formal_bool
- \chemmacros_if_package_loaded:nT {chemformula}
- { \bool_set_false:N \l_chemformula_formal_charges_bool }
- } ,
- circled / formal .code:n =
- {
- \bool_set_true:N \l__chemmacros_circled_bool
- \bool_set_true:N \l__chemmacros_circled_formal_bool
- \chemmacros_if_package_loaded:nT {chemformula}
- { \bool_set_false:N \l_chemformula_formal_charges_bool }
- } ,
- circled / all .code:n =
- {
- \bool_set_true:N \l__chemmacros_circled_bool
- \bool_set_false:N \l__chemmacros_circled_formal_bool
- \chemmacros_if_package_loaded:nT {chemformula}
- { \bool_set_true:N \l_chemformula_formal_charges_bool }
- } ,
- circled .default:n = all
- }
-
-\cs_new_protected:Npn \chemmacros_plus: { \chemformula_plus: }
-\cs_new_protected:Npn \chemmacros_minus: { \chemformula_minus: }
-
-\cs_new_protected:Npn \chemmacros_formal_plus: { \chemformula_formal_plus: }
-\cs_new_protected:Npn \chemmacros_formal_minus: { \chemformula_formal_minus: }
-
-\cs_new_protected:Npn \chemmacros_charge:n #1
- { \chemmacros_chemformula:n { {}^{#1} } }
-
-\cs_new_protected:Npn \chemmacros_new_charge_command:Nn #1#2
- {
- \DeclareDocumentCommand #1 {o}
- {
- \IfNoValueTF {##1}
- { \chemmacros_charge:n {#2} }
- { \chemmacros_charge:n {##1#2} }
- }
- }
-
-\tl_new:N \l__chemmacros_partial_charge_format_tl
-\tl_set:Nn \l__chemmacros_partial_charge_format_tl { \tiny }
-
-\cs_new_protected:Npn \chemmacros_new_partial_charge_command:Nn #1#2
- {
- \cs_new_protected:Npn #1
- {
- \mbox {
- \l__chemmacros_partial_charge_format_tl
- \c_math_toggle_token \delta #2 \c_math_toggle_token
- }
- }
- }
-
-\NewChemMacroset {Charge} {mm}
- { \chemmacros_new_charge_command:Nn #1 {#2} }
-
-\NewChemMacroset {PartialCharge} {mm}
- { \chemmacros_new_partial_charge_command:Nn #1 {#2} }
-
-\cs_new_protected:Npn \scrm
- { \ensuremath { \scriptstyle \chemmacros_minus: } }
-\cs_new_protected:Npn \scrp
- { \ensuremath { \scriptstyle \chemmacros_plus: } }
-\cs_new_protected:Npn \fscrm
- { \ensuremath { \scriptstyle \chemmacros_formal_minus: } }
-\cs_new_protected:Npn \fscrp
- { \ensuremath { \scriptstyle \chemmacros_formal_plus: } }
-\cs_new_protected:Npn \fsscrm
- { \ensuremath { \scriptscriptstyle \chemmacros_formal_minus: } }
-\cs_new_protected:Npn \fsscrp
- { \ensuremath { \scriptscriptstyle \chemmacros_formal_plus: } }
-
-\chemmacros_define_keys:nn {charges}
- {
- partial-format .tl_set:N = \l__chemmacros_partial_charge_format_tl
- }
-
-% --------------------------------------------------------------------------
-\NewChemCharge \mch { \chemmacros_minus: }
-\NewChemCharge \pch { \chemmacros_plus: }
-\NewChemCharge \fmch { \chemmacros_formal_minus: }
-\NewChemCharge \fpch { \chemmacros_formal_plus: }
-
-% partial charges:
-\NewChemPartialCharge \delm { \chemmacros_minus: }
-\NewChemPartialCharge \delp { \chemmacros_plus: }
-\NewChemPartialCharge \fdelm { \chemmacros_formal_minus: }
-\NewChemPartialCharge \fdelp { \chemmacros_formal_plus: }
-
-% --------------------------------------------------------------------------
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.chemformula.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.chemformula.code.tex
deleted file mode 100644
index 22898910805..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.chemformula.code.tex
+++ /dev/null
@@ -1,243 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `chemformula'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{chemformula}{2020/02/02 integration of chemical formulas}
-
-\RequirePackage{amstext}
-\chemmacros_load_module:n {charges}
-
-\msg_new:nnn {chemmacros} {unknown-formula-method}
- {
- You~ chose~ the~ formula~ method~ `#1'~ which~ is~ not~ available.~
- I'm~ falling~ back~ to~ `chemformula'~ now.
- }
-
-\msg_new:nnn {chemmacros} {default-formula-method}
- {
- You~ haven't~ chosen~ a~ formula~ method~ so~ I'm~ assuming~ the~ default~
- method~ `chemformula'.
- }
-
-\msg_new:nnn {chemmacros} {formula-conflict}
- {
- You~ have~ loaded~ multiple~ formula~ method~ packages~ but~ haven't~
- chosen~ which~ method~ to~ use!~ I~ will~ use~ `chemformula'. \\
- You~ should~ decide~ for~ only~ one~ of~ the~ packages~ for~ having~ a~
- consistent~ layout.
- }
-
-% --------------------------------------------------------------------------
-% generic functions for usage in other packages; those are to be set in each
-% method setup:
-\cs_new_protected:Npn \chemmacros_reaction:n #1 {#1}
-\cs_new_protected:Npn \chemmacros_chemformula:n #1 {#1}
-\cs_generate_variant:Nn \chemmacros_chemformula:n { x,V }
-
-\cs_new_protected:Npn \chemmacros@formula #1 { \chemmacros_chemformula:n {#1} }
-\cs_new_protected:Npn \chemmacros@reaction #1 { \chemmacros_reaction:n {#1} }
-
-% --------------------------------------------------------------------------
-% setup, check and define each method:
-\bool_new:N \l__chemmacros_formula_method_set_bool
-
-\tl_new:N \g_chemmacros_formula_method_tl
-\tl_gset:Nn \g_chemmacros_formula_method_tl {chemformula}
-
-\prop_new:N \l__chemmacros_method_packages_prop
-
-% #1: package/method name
-% #2: preparations
-\cs_new_protected:Npn \chemmacros_add_method_package:nn #1#2
- { \prop_put:Nnn \l__chemmacros_method_packages_prop {#1} {#2} }
-
-\cs_new_protected:Npn \chemmacros_setup_method_package:n #1
- {
- \prop_item:Nn \l__chemmacros_method_packages_prop {#1}
- \tl_gset:Nn \g_chemmacros_formula_method_tl {#1}
- }
-
-\prg_new_conditional:Npnn \chemmacros_if_method_package:n #1 {p,T,F,TF}
- {
- \prop_if_in:NnTF \l__chemmacros_method_packages_prop {#1}
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-\cs_new_protected:Npn \chemmacros_check_formula_method:
- {
- \bool_if:NF \l__chemmacros_formula_method_set_bool
- {
- \bool_set_false:N \l__chemmacros_tmpa_bool
- \prop_map_inline:Nn \l__chemmacros_method_packages_prop
- {
- \chemmacros_if_package_loaded:nT {##1}
- {
- \bool_if:NTF \l__chemmacros_tmpa_bool
- {
- \msg_warning:nn {chemmacros} {formula-conflict}
- \chemmacros_set_formula_method:n {chemformula}
- }
- { \chemmacros_set_formula_method:n {##1} }
- \bool_set_true:N \l__chemmacros_tmpa_bool
- }
- }
- \bool_if:NF \l__chemmacros_tmpa_bool
- {
- \msg_info:nn {chemmacros} {default-formula-method}
- \chemmacros_set_formula_method:n {chemformula}
- }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_set_formula_method:n #1
- {
- \chemmacros_if_method_package:nTF {#1}
- { \chemmacros_setup_method_package:n {#1} }
- {
- \msg_warning:nnn {chemmacros} {unknown-formula-method} {#1}
- \chemmacros_setup_method_package:n {chemformula}
- }
- \bool_set_true:N \l__chemmacros_formula_method_set_bool
- }
-\cs_generate_variant:Nn \chemmacros_set_formula_method:n {V}
-
-% --------------------------------------------------------------------------
-% add formula methods:
-\chemmacros_add_method_package:nn {chemformula}
- {
- \chemmacros_integrate_package:nnn {} {chemformula} {2015/09/08}
- \cs_set_protected:Npn \chemmacros_chemformula:n #1
- { \chemformula_chcpd:nn {} {#1} }
- \cs_set_protected:Npn \chemmacros_reaction:n #1
- { \chemformula_ch:nn {} {#1} }
- }
-
-\chemmacros_add_method_package:nn {mhchem}
- {
- \chemmacros_integrate_package:nnn {version=4} {mhchem} {}
- \cs_set_protected:Npn \chemmacros_chemformula:n #1 { \ce {#1} }
- \cs_set_protected:Npn \chemmacros_reaction:n #1 { \ce {#1} }
- \chemmacros_after_module:nn {charges}
- {
- \cs_set_protected:Npn \chemmacros_elpair:n #1 { \ce{#1} : }
- \cs_set_protected:Npn \chemmacros_plus: { + }
- \cs_set_protected:Npn \chemmacros_minus: { - }
- \cs_set_protected:Npn \chemmacros_formal_plus: { \ensuremath{\oplus} }
- \cs_set_protected:Npn \chemmacros_formal_minus: { \ensuremath{\ominus} }
- \cs_set_protected:Npn \fplus { \ensuremath{\oplus} }
- \cs_set_protected:Npn \fminus { \ensuremath{\ominus} }
- }
- }
-
-\ChemCompatibilityFrom{5.6}
-\chemmacros_add_method_package:nn {chemist}
- {
- \RequirePackage {chemist}
- \cs_set_protected:Npn \chemmacros_chemformula:n #1
- { \chemmacros_text:n { \ChemForm {#1} } }
- \cs_set_protected:Npn \chemmacros_reaction:n #1
- { \chemmacros_text:n { \ChemForm {#1} } }
- \chemmacros_after_module:nn {charges}
- {
- \cs_set_protected:Npn \chemmacros_elpair:n #1
- { \chemmacros_text:n { \ChemForm {#1} : } }
- \cs_set_protected:Npn \chemmacros_plus: { + }
- \cs_set_protected:Npn \chemmacros_minus: { - }
- \cs_set_protected:Npn \chemmacros_formal_plus: { \ensuremath{\oplus} }
- \cs_set_protected:Npn \chemmacros_formal_minus: { \ensuremath{\ominus} }
- \cs_set_protected:Npn \fplus { \ensuremath{\oplus} }
- \cs_set_protected:Npn \fminus { \ensuremath{\ominus} }
- }
- }
-
-\chemmacros_add_method_package:nn {chemfig}
- {
- \RequirePackage {chemfig}
- \cs_set_protected:Npn \chemmacros_chemformula:n #1
- { \printatom {#1} }
- \cs_set_protected:Npn \chemmacros_reaction:n #1
- { \printatom {#1} }
- \chemmacros_after_module:nn {charges}
- {
- \cs_set_protected:Npn \chemmacros_elpair:n #1
- { \Lewis { 0: , \printatom {#1} } }
- \cs_set_protected:Npn \chemmacros_plus: { + }
- \cs_set_protected:Npn \chemmacros_minus: { - }
- \cs_set_protected:Npn \chemmacros_formal_plus: { \ensuremath{\oplus} }
- \cs_set_protected:Npn \chemmacros_formal_minus: { \ensuremath{\ominus} }
- \cs_set_protected:Npn \fplus { \ensuremath{\oplus} }
- \cs_set_protected:Npn \fminus { \ensuremath{\ominus} }
- }
- }
-\EndChemCompatibility
-
-% --------------------------------------------------------------------------
-\ChemCompatibilityTo{5.1}
-\chemmacros_set_formula_method:n {chemformula}
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.1}
-\chemmacros_define_global_keys:n
- { formula .code:n = \chemmacros_set_formula_method:n {#1} }
-\EndChemCompatibility
-
-\def\bla{bla}
-
-\AtEndPreamble
- {
- \bool_if:NF \l__chemmacros_formula_method_set_bool
- {
- \bool_lazy_and:nnTF
- { \chemmacros_if_compatibility_p:nn {>=} {5.2} }
- { \chemmacros_if_compatibility_p:nn {<} {5.6} }
- { \chemmacros_check_formula_method: }
- {
- \chemmacros_if_compatibility:nnTF {>=} {5.6}
- { \msg_info:nn {chemmacros} {default-formula-method} }
- { \msg_warning:nn {chemmacros} {default-formula-method} }
- \chemmacros_set_formula_method:n {chemformula}
- }
- }
- }
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2015/09/22 - new general option `method' which allows a choice between
- `chemformula' and `mhchem'
-2015/10/13 - add missing compatibility definitions
- - check for `mhchem' and `chemformula' and set method accordingly
- if possible
-2016/04/27 - further generalization of the `method' concept, new methods
- `chemist' and `chemfig'
- - don't automatically load an available method: load `chemformula'
- if the users haven't decided for themselves and issue a warning
-2016/05/03 - correct wrong method check
-2020/02/02 - lazy boolean evaluation
-2020/02/29 - use \ch even for simple formulas – resolves issue #28
-2020/03/02 - undo last change: this makes problems with oxidation numbers in a
- reaction
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.errorcheck.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.errorcheck.code.tex
deleted file mode 100644
index cbe43abd09d..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.errorcheck.code.tex
+++ /dev/null
@@ -1,130 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `errorcheck'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{errorcheck}{2016/10/05 error checking for unloaded modules}[5.2]
-
-\RequirePackage{scrlfile}
-
-\msg_new:nnn {chemmacros} {undefined}
- {
- The~ #1~ `#2'~ is~ undefined.~ You~ need~ to~ load~ the~
- `#3'~ module.
- }
-
-\cs_generate_variant:Nn \msg_error:nnnnn {nnnx}
-
-\cs_new_protected:Npn \chemmacros_requires_module:nNn #1#2#3
- {
- \chemmacros_if_module_loaded:nF {#3}
- {
- \cs_if_free:NT #2
- {
- \cs_set:Npn #2
- {
- \msg_error:nnnxn {chemmacros} {undefined}
- {#1}
- {\token_to_str:N #2}
- {#3}
- }
- \chemmacros_before_module:nn {#3} { \cs_undefine:N #2 }
- }
- }
- }
-\cs_generate_variant:Nn \chemmacros_requires_module:nNn {nc}
-
-\cs_new_protected:Npn \chemmacros_command_requires_module:Nn #1#2
- { \chemmacros_requires_module:nNn {command} #1 {#2} }
-
-\cs_new_protected:Npn \chemmacros_environment_requires_module:nn #1#2
- { \chemmacros_requires_module:ncn {environment} {#1} {#2} }
-
-% --------------------------------------------------------------------------
-% add checking for the most common user commands and environments:
-% isotopes module
-\chemmacros_command_requires_module:Nn \isotope {isotopes}
-
-% mechanisms module
-\chemmacros_command_requires_module:Nn \mech {mechanisms}
-
-% newman module
-\chemmacros_command_requires_module:Nn \newman {newman}
-
-% orbital module
-\chemmacros_command_requires_module:Nn \orbital {orbital}
-
-% polymers module
-\chemmacros_command_requires_module:Nn \makepolymerdelims {polymers}
-
-% reactions module
-\chemmacros_environment_requires_module:nn {reaction} {reactions}
-\chemmacros_environment_requires_module:nn {reaction*} {reactions}
-\chemmacros_environment_requires_module:nn {reactions} {reactions}
-\chemmacros_environment_requires_module:nn {reactions*} {reactions}
-\chemmacros_command_requires_module:Nn \listofreactions {reactions}
-\chemmacros_command_requires_module:Nn \AddRxnDesc {reactions}
-
-% redox module
-\chemmacros_command_requires_module:Nn \ox {redox}
-\chemmacros_command_requires_module:Nn \OX {redox}
-\chemmacros_command_requires_module:Nn \redox {redox}
-
-% scheme module
-\chemmacros_environment_requires_module:nn {scheme} {scheme}
-\chemmacros_command_requires_module:Nn \listschemename {scheme}
-\chemmacros_command_requires_module:Nn \schemename {scheme}
-\chemmacros_command_requires_module:Nn \listofschemes {scheme}
-
-\BeforePackage {chemscheme}
- {
- \cs_undefine:N \scheme
- \cs_undefine:N \endscheme
- \cs_undefine:N \listschemename
- \cs_undefine:N \schemename
- \cs_undefine:N \listofschemes
- }
-
-% spectroscopy module
-\chemmacros_command_requires_module:Nn \NMR {spectroscopy}
-\chemmacros_environment_requires_module:nn {experimental} {spectroscopy}
-
-% thermodynamics module
-\chemmacros_command_requires_module:Nn \state {thermodynamics}
-\chemmacros_command_requires_module:Nn \enthalpy {thermodynamics}
-\chemmacros_command_requires_module:Nn \entropy {thermodynamics}
-\chemmacros_command_requires_module:Nn \gibbs {thermodynamics}
-
-% xfrac module
-\chemmacros_command_requires_module:Nn \chemfrac {xfrac}
-
-% --------------------------------------------------------------------------
-
-\file_input_stop:
-
-2015/10/14 - first version
-2016/03/08 - add `polymers' module
-2016/05/31 - enable `chemscheme' to be loaded after chemmacros
-2016/10/06 - check if commands exist before defining them to raise errors
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.greek.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.greek.code.tex
deleted file mode 100644
index 358d0716f96..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.greek.code.tex
+++ /dev/null
@@ -1,70 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `greek'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{greek}{2020/02/02 upright greek symbols}
-
-\RequirePackage{chemgreek}[2020/01/16]
-
-\msg_new:nnn {chemmacros} {no-greek}
- {
- You~ haven't~ loaded~ any~ package~ for~ upright~ Greek~ letters~ or~ no~
- unique~ choice~ was~ possible.~ Either~ load~ one~ of~ packages~
- specified~ in~ the~ manual~ or~ select~ a~ chemgreek~ mapping~ manually.
- }
-
-\msg_new:nnn {chemmacros} {greek-undefined}
- {
- The~ chemgreek~ mapping~ `#1'~ you~ chose~ \msg_line_context: \c_space_tl
- is~ not~ defined.~ Please~ choose~ another~ one.
- }
-
-% chemgreek selects a mapping if an unambiguous choice is possible, otherwise
-% selects `default'. Warn the user in this case:
-\AtBeginDocument{
- \bool_lazy_or:nnT
- { \chemgreek_if_mapping_active_p:n {default} }
- { \chemgreek_if_mapping_active_p:n {var-default} }
- { \msg_warning:nn {chemmacros} {no-greek} }
-}
-
-% an option for manual selection:
-\chemmacros_define_global_keys:n
- { greek .code:n = \chemmacros_choose_chemgreek_mapping:n {#1} }
-
-\cs_new_protected:Npn \chemmacros_choose_chemgreek_mapping:n #1
- {
- \chemgreek_if_mapping_exists:nTF {#1}
- {
- \chemgreek_load_mapping_package:n {#1}
- \chemgreek_activate_mapping:n {#1}
- }
- { \msg_warning:nnn {chemmacros} {greek-undefined} {#1} }
- }
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-2020/02/02 - lazy boolean evaluation
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.isotopes.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.isotopes.code.tex
deleted file mode 100644
index 587bc3c266e..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.isotopes.code.tex
+++ /dev/null
@@ -1,238 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `isotopes'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{isotopes}{2015/07/22 a macro to easily print element isotopes}
-
-\RequirePackage{elements}
-
-\msg_new:nnn {chemmacros} {no-isotope}
- { The~ isotope~ #2~ is~ not~ defined~ for~ element~ #1. }
-
-% --------------------------------------------------------------------------
-\tl_new:N \l__chemmacros_isotope_tl
-\tl_new:N \l__chemmacros_isotope_list_tl
-\seq_new:N \l__chemmacros_isotope_seq
-\seq_new:N \l__chemmacros_check_isotopes_seq
-
-% #1: atomic number|element symbol|element name
-% #2: tokenlist variable
-\cs_new_protected:Npn \chemmacros_get_atom_number:nN #1#2
- {
- \chemmacros_if_is_int:nTF {#1}
- { \tl_set:Nn #2 {#1} }
- {
- \cs_if_exist:cTF { @elements@atom@number@ \str_lowercase:n {#1} }
- { \tl_set:Nx #2 { \use:c { @elements@atom@number@ \str_lowercase:n {#1} } } }
- { \tl_set:Nx #2 { \use:c { @elements@atom@name@num@ \str_lowercase:n {#1} } } }
- }
- }
-\cs_generate_variant:Nn \chemmacros_get_atom_number:nN { V }
-
-% #1: atomic number|element symbol|element name
-% #2: tl to store the result in
-\cs_new_protected:Npn \chemmacros_get_isotope_list:nN #1#2
- {
- \chemmacros_get_atom_number:nN {#1} \l__chemmacros_isotope_tl
- \tl_set:Nx #2
- {
- \use:c
- {
- @elements@atom@isotopes@
- \int_to_roman:n {\l__chemmacros_isotope_tl}
- }
- }
- }
-
-% #1: atomic number|element symbol|element name
-% #2: tokenlist variable
-\cs_new_protected:Npn \chemmacros_get_element_symbol:nN #1#2
- {
- \chemmacros_get_atom_number:nN {#1} \l__chemmacros_isotope_tl
- \tl_set:Nx #2
- {
- \use:c
- {
- @elements@atom@symbol@num@
- \int_to_roman:n {\l__chemmacros_isotope_tl}
- }
- }
- }
-
-% #1: atomic number|element symbol|element name
-% #2: isotope number
-\prg_new_protected_conditional:Npnn \chemmacros_check_isotope:nn #1#2 {T,F,TF}
- {
- \chemmacros_get_isotopes:nN {#1} \l__chemmacros_check_isotopes_seq
- \seq_if_in:NnTF \l__chemmacros_check_isotopes_seq {#2}
- { \prg_return_true: }
- { \prg_return_false: }
- }
-\cs_generate_variant:Nn \chemmacros_check_isotope:nnF { V }
-
-% #1: atomic number|element symbol|element name
-% #2: tl to store the result in
-\cs_new_protected:Npn \chemmacros_get_main_isotope:nN #1#2
- {
- \chemmacros_get_isotope_list:nN {#1} \l__chemmacros_isotope_list_tl
- \seq_set_split:NnV \l__chemmacros_isotope_seq {,} \l__chemmacros_isotope_list_tl
- \seq_map_inline:Nn \l__chemmacros_isotope_seq
- {
- \chemmacros_read_isotope:nNN {##1}
- \l__chemmacros_tmpa_bool
- #2
- \bool_if:NT \l__chemmacros_tmpa_bool
- { \seq_map_break: }
- }
- }
-\cs_generate_variant:Nn \chemmacros_get_main_isotope:nN { V }
-
-% #1: atomic number|element symbol|element name
-% #2: seq to store the results in
-\cs_new_protected:Npn \chemmacros_get_isotopes:nN #1#2
- {
- \seq_clear:N #2
- \chemmacros_get_isotope_list:nN {#1} \l__chemmacros_tmpa_tl
- \seq_set_split:NnV \l__chemmacros_isotope_seq {,} \l__chemmacros_tmpa_tl
- \seq_map_inline:Nn \l__chemmacros_isotope_seq
- {
- \chemmacros_read_isotope:nNN {##1}
- \l__chemmacros_tmpa_bool
- \l__chemmacros_tmpa_tl
- \seq_put_right:NV #2 \l__chemmacros_tmpa_tl
- }
- }
-
-% #1: boolean variable
-% #2: tokenlist variable
-% #3: isotope list entry
-\cs_new_protected:Npn \chemmacros_read_isotope:nNN #1#2#3
- { \__chemmacros_read_isotope:NNw #2#3 !#1!! \q_stop }
-
-% \__chemmacros_read_isotope:NNw N N !!1!! \q_stop
-% \__chemmacros_read_isotope:NNw N N !1!! \q_stop
-\cs_new_protected:Npn \__chemmacros_read_isotope:NNw #1#2#3!#4!#5!#6 \q_stop
- {
- \tl_if_blank:nTF {#5}
- {
- \tl_set:Nn #2 {#4}
- \bool_set_false:N #1
- }
- {
- \tl_set:Nn #2 {#5}
- \bool_set_true:N #1
- }
- }
-
-% --------------------------------------------------------------------------
-% #1: boolean: hide atomic number?
-% #2: nucleons, element symbol
-\cs_new_protected:Npn \chemmacros_isotope:nn #1#2
- { \__chemmacros_isotope:nww {#1} #2,, \q_stop }
-
-\cs_new_protected:Npn \__chemmacros_isotope:nww #1#2,#3,#4 \q_stop
- {
- \tl_if_blank:nTF {#3}
- {
- \chemmacros_get_element_symbol:nN {#2} \l__chemmacros_tmpa_tl
- \chemmacros_get_main_isotope:nN {#2} \l__chemmacros_tmpb_tl
- \chemmacros_get_atom_number:nN {#2} \l__chemmacros_tmpc_tl
- \bool_if:nTF {#1}
- {
- \chemmacros_isotope_write:VnV
- \l__chemmacros_tmpb_tl
- { }
- \l__chemmacros_tmpa_tl
- }
- {
- \chemmacros_isotope_write:VVV
- \l__chemmacros_tmpb_tl
- \l__chemmacros_tmpc_tl
- \l__chemmacros_tmpa_tl
- }
- }
- {
- \chemmacros_get_element_symbol:nN {#3} \l__chemmacros_tmpa_tl
- \chemmacros_get_atom_number:nN {#3} \l__chemmacros_tmpb_tl
- \chemmacros_check_isotope:VnF
- \l__chemmacros_tmpa_tl
- {#2}
- {
- \chemmacros_get_element_symbol:nN {#3} \l__chemmacros_tmpa_tl
- \msg_warning:nnVn {chemmacros} {no-isotope}
- \l__chemmacros_tmpa_tl
- {#2}
- }
- \chemmacros_get_element_symbol:nN {#3} \l__chemmacros_tmpa_tl
- \bool_if:nTF {#1}
- { \chemmacros_isotope_write:nnV {#2} { } \l__chemmacros_tmpa_tl }
- {
- \chemmacros_isotope_write:nVV {#2}
- \l__chemmacros_tmpb_tl
- \l__chemmacros_tmpa_tl
- }
- }
- }
-
-\bool_new:N \l__chemmacros_isotope_super_bool
-\tl_new:N \l__chemmacros_isotope_side_connect_tl
-
-\chemmacros_define_keys:nn {isotopes}
- {
- format .choice: ,
- format / super .code:n =
- \bool_set_true:N \l__chemmacros_isotope_super_bool ,
- format / side .code:n =
- \bool_set_false:N \l__chemmacros_isotope_super_bool ,
- format .initial:n = super ,
- side-connect .tl_set:N = \l__chemmacros_isotope_side_connect_tl ,
- side-connect .initial:n = -
- }
-
-% #1: nucleons
-% #2: atomic number
-% #3: element symbol
-\cs_new_protected:Npn \chemmacros_isotope_write:nnn #1#2#3
- {
- \bool_if:NTF \l__chemmacros_isotope_super_bool
- { \chemmacros_chemformula:n { ^{#1}_{#2}#3 } }
- {
- \chemmacros_chemformula:n {#3}
- \tl_use:N \l__chemmacros_isotope_side_connect_tl
- #1
- }
- }
-\cs_generate_variant:Nn \chemmacros_isotope_write:nnn { VnV , VVV , nnV , nVV }
-
-% TODO: option for the layout of the written isotope: ^{12}_6C vs C-12
-
-\NewDocumentCommand \isotope { sm }
- { \chemmacros_isotope:nn {#1} {#2} }
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-2015/07/22 - first version
-2020/01/16 - adapt to renaming of string case changing functions
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.lang.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.lang.code.tex
deleted file mode 100644
index 19c298940e8..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.lang.code.tex
+++ /dev/null
@@ -1,177 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `lang'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{lang}{2016/05/31 language settings for chemmacros}
-
-\RequirePackage{translations}
-
-\msg_new:nnn {chemmacros} {language-not-defined}
- {
- You~ chose~ the~ language~ `#1'~ which~ is~ not~ defined~ by~ chemmacros.~
- `english'~ is~ used~ instead.~ If~ you~ just~ mistyped~ try~ again!~
- Otherwise~ contact~ the~ author~ and~ he'll~ probably~ add~ your~ language.
- }
-
-% --------------------------------------------------------------------------
-% language settings:
-\bool_new:N \l__chemmacros_language_auto_bool
-\bool_set_true:N \l__chemmacros_language_auto_bool
-% this token list will hold the chosen language for chemmacros; since the
-% language is either chosen automatically or by option it is only available at
-% begin document
-\tl_new:N \l_chemmacros_language_tl
-\tl_set:Nn \l_chemmacros_language_tl {english}
-\tl_new:N \l__chemmacros_current_language_tl
-
-\tl_const:Nx \c__chemmacros_keyword_prefix_tl
- { \chemmacros_if_compatibility:nnT {>=} {5.7} {chem-keyword-} }
-
-\prop_new:N \g_chemmacros_translations_prop
-
-% translate the key #1
-\cs_new:Npn \chemmacros_translate:n #1
- {
- \bool_if:NTF \l__chemmacros_language_auto_bool
- { \GetTranslation { \c__chemmacros_keyword_prefix_tl #1 } }
- {
- \GetTranslationFor
- {\l_chemmacros_language_tl}
- { \c__chemmacros_keyword_prefix_tl #1 }
- }
- }
-
-\DeclareExpandableDocumentCommand \ChemTranslate {m}
- { \chemmacros_translate:n {#1} }
-
-\chemmacros_define_global_keys:n
- {
- language .value_required:n = true ,
- language .code:n =
- \tl_if_eq:nnTF {#1} {auto}
- { \bool_set_true:N \l__chemmacros_language_auto_bool }
- {
- \bool_set_false:N \l__chemmacros_language_auto_bool
- \tl_set:Nn \l__chemmacros_current_language_tl {#1}
- } ,
- language .initial:n = auto
- }
-
-\ChemCompatibilityTo{5.3}
-\chemmacros_define_global_keys:n
- {
- german .meta:n = { language = german } ,
- ngerman .meta:n = { language = ngerman }
- }
-\EndChemCompatibility
-
-\AtBeginDocument{
- \bool_if:NTF \l__chemmacros_language_auto_bool
- {
- \tl_set:Nx \l_chemmacros_language_tl
- { \@trnslt@language{\@trnslt@current@language} }
- }
- {
- \tl_set_eq:NN
- \l_chemmacros_language_tl
- \l__chemmacros_current_language_tl
- }
-}
-
-% --------------------------------------------------------------------------
-\cs_new_protected:Npn \__chemmacros_declare_translation:nw #1#2=#3\q_stop
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl { \tl_trim_spaces:n {#2} }
- \tl_set:Nx \l__chemmacros_tmpb_tl { \tl_trim_spaces:n {#3} }
- \use:x
- {
- \chemmacros_declare_translation:nnn
- { \exp_not:n {#1} }
- { \exp_not:V \l__chemmacros_tmpa_tl }
- { \exp_not:V \l__chemmacros_tmpb_tl }
- }
- }
-
-% #1: key
-% #2: lang
-% #3: translation
-\cs_new_protected:Npn \chemmacros_declare_translation:nnn #1#2#3
- {
- \declaretranslation
- {#2}
- { \c__chemmacros_keyword_prefix_tl #1 }
- {#3}
- \prop_gput:Nnn \g_chemmacros_translations_prop {#1(#2)} {#3}
- }
-\cs_generate_variant:Nn \chemmacros_declare_translation:nnn {V}
-
-% #1: key
-% #2: csv list: { <lang1> = <translation1> , <lang2> = <translation2> }
-\cs_new_protected:Npn \chemmacros_declare_translations:nn #1#2
- {
- \clist_map_inline:nn {#2}
- { \__chemmacros_declare_translation:nw {#1} ##1 \q_stop }
- }
-
-\NewDocumentCommand \DeclareChemTranslations {mm}
- { \chemmacros_declare_translations:nn {#1} {#2} }
-\@onlypreamble \DeclareChemTranslations
-
-\NewDocumentCommand \DeclareChemTranslation {mmm}
- { \chemmacros_declare_translation:nnn {#1} {#2} {#3} }
-\@onlypreamble \DeclareChemTranslation
-
-\cs_new:Npn \__chemmacros_parse_translate_list_entry:nnn #1#2#3 {}
-
-\cs_new_protected:Npn \__chemmacros_parse_translate_list_entry:www #1(#2)\q_mark#3\q_stop
- { \__chemmacros_parse_translate_list_entry:nnn {#1} {#2} {#3} }
-
-\cs_new_protected:Npn \chemmacros_for_all_translations_do:n #1
- {
- \cs_set:Npn \__chemmacros_parse_translate_list_entry:nnn ##1##2##3 {#1}
- \prop_map_inline:Nn \g_chemmacros_translations_prop
- { \__chemmacros_parse_translate_list_entry:www ##1 \q_mark ##2 \q_stop }
- }
-
-\ChemCompatibilityFrom{5.7}
-\NewDocumentCommand \ForAllChemTranslationsDo {+m}
- { \chemmacros_for_all_translations_do:n {#1} }
-\EndChemCompatibility
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2015/11/17 - remove options `german' and `ngerman', starting with v5.3
-2016/02/03 - adapt to changes in `acid-base' module
-2016/04/27 - additions/changes to reaction and scheme translations
- - \chemmacros_declare_translation:nnn and
- \chemmacros_declare_translations:nn
- - \DeclareChemTranslation and \DeclareChemTranslations
- - moved translations from lang module to the corresponding modules
- they belong to
-2016/05/31 - add prefix string to translation keywords
- - add logging of translation keywords
- - \ForAllChemTranslationsDo
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.mechanisms.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.mechanisms.code.tex
deleted file mode 100644
index c506ba05d01..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.mechanisms.code.tex
+++ /dev/null
@@ -1,165 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `mechanisms'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{mechanisms}{2015/06/09 reaction mechanisms}
-
-\RequirePackage{amstext}
-
-% --------------------------------------------------------------------------
-% reaction mechanisms
-% \mech[<type>]
-% <type> - substitutions: {}, 1, 2, se, 1e, 2e, ar
-% - eliminations: e, e1, e2, cb
-\tl_new:N \l__chemmacros_mechanisms_type_tl
-\tl_new:N \l__chemmacros_mechanisms_mol_tl
-\tl_new:N \l__chemmacros_mechanisms_ar_tl
-
-\cs_new_protected:Npn \__chemmacros_set_mechanisms:nnn #1#2#3
- {
- \tl_set:Nn \l__chemmacros_mechanisms_type_tl {#1}
- \tl_set:Nn \l__chemmacros_mechanisms_mol_tl {#2}
- \tl_set:Nn \l__chemmacros_mechanisms_ar_tl {#3}
- }
-
-\chemmacros_define_keys:nn {mechanisms}
- {
- type .choice: ,
- type / .code:n =
- {
- \__chemmacros_set_mechanisms:nnn {S}
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {N} }
- \c_math_toggle_token
- }
- { }
- } ,
- type / 1 .code:n =
- {
- \__chemmacros_set_mechanisms:nnn {S}
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {N} }
- \c_math_toggle_token
- 1
- }
- { }
- } ,
- type / 2 .code:n =
- {
- \__chemmacros_set_mechanisms:nnn {S}
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {N} }
- \c_math_toggle_token
- 2
- }
- { }
- } ,
- type / se .code:n =
- {
- \__chemmacros_set_mechanisms:nnn {S}
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {E} }
- \c_math_toggle_token
- }
- { }
- } ,
- type / 1e .code:n =
- {
- \__chemmacros_set_mechanisms:nnn {S}
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {E} }
- \c_math_toggle_token
- 1
- }
- { }
- } ,
- type / 2e .code:n =
- {
- \__chemmacros_set_mechanisms:nnn {S}
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {E} }
- \c_math_toggle_token
- 2
- }
- { }
- } ,
- type / ar .code:n =
- {
- \__chemmacros_set_mechanisms:nnn {S}
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {E} }
- \c_math_toggle_token
- }
- { Ar - }
- } ,
- type / e .code:n =
- { \__chemmacros_set_mechanisms:nnn {E} { } { } } ,
- type / e1 .code:n =
- { \__chemmacros_set_mechanisms:nnn {E} {1} { } } ,
- type / e2 .code:n =
- { \__chemmacros_set_mechanisms:nnn {E} {2} { } } ,
- type / cb .code:n =
- {
- \__chemmacros_set_mechanisms:nnn {E}
- {
- 1
- \c_math_toggle_token
- \c_math_subscript_token { \text {cb} }
- \c_math_toggle_token
- }
- { }
- } ,
- type .default:n =
- }
-
-\cs_new_protected:Npn \chemmacros_mechanisms:n #1
- {
- \tl_if_blank:nTF {#1}
- { \chemmacros_set_keys:nn {mechanisms} { type } }
- { \chemmacros_set_keys:nn {mechanisms} { type = #1 } }
- \mbox
- {
- \tl_use:N \l__chemmacros_mechanisms_ar_tl
- \tl_use:N \l__chemmacros_mechanisms_type_tl
- \tl_use:N \l__chemmacros_mechanisms_mol_tl
- }
- }
-
-\NewDocumentCommand \mech {o}
- {
- \IfNoValueTF {#1}
- { \chemmacros_mechanisms:n { } }
- { \chemmacros_mechanisms:n {#1} }
- }
-
-% --------------------------------------------------------------------------
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.newman.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.newman.code.tex
deleted file mode 100644
index 9c761137217..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.newman.code.tex
+++ /dev/null
@@ -1,212 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `newman'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{newman}{2016/04/23 newman projections}
-
-\chemmacros_load_module:n {tikz}
-
-% Newman projections
-\fp_new:N \l__chemmacros_newman_rel_angle_fp
-\fp_zero:N \l__chemmacros_newman_rel_angle_fp
-\fp_new:N \l__chemmacros_newman_tmp_angle_fp
-\fp_new:N \l__chemmacros_newman_abs_angle_fp
-\fp_zero:N \l__chemmacros_newman_abs_angle_fp
-\fp_new:N \l__chemmacros_newman_scale_fp
-\fp_set:Nn \l__chemmacros_newman_scale_fp {1}
-\fp_new:N \l__chemmacros_newman_x_fp
-\fp_new:N \l__chemmacros_newman_y_fp
-
-\tl_new:N \l__chemmacros_newman_tikz_ring_tl
-\tl_new:N \l__chemmacros_newman_tikz_front_tl
-\tl_new:N \l__chemmacros_newman_tikz_back_tl
-
-\bool_new:N \l__chemmacros_newman_tikz_back_bool
-
-\chemmacros_define_keys:nn {newman}
- {
- ring .tl_set:N = \l__chemmacros_newman_tikz_ring_tl ,
- atoms .tl_set:N = \l__chemmacros_newman_tikz_front_tl ,
- back-atoms .code:n =
- {
- \bool_set_true:N \l__chemmacros_newman_tikz_back_bool
- \tl_set:Nn \l__chemmacros_newman_tikz_back_tl { #1 }
- } ,
- scale .fp_set:N = \l__chemmacros_newman_scale_fp ,
- scale .default:n = 1 ,
- angle .fp_set:N = \l__chemmacros_newman_abs_angle_fp ,
- angle .default:n = 0
- }
-
-% \newman[<keyval>](<angle>){<1>,<2>,<3>,<4>,<5>,<6>}
-\NewDocumentCommand \newman {od()m}
- {
- \group_begin:
- \IfNoValueF {#1} { \chemmacros_set_keys:nn {newman} {#1} }
- \IfNoValueTF {#2}
- { \chemmacros_newman:nn { } {#3} }
- { \chemmacros_newman:nn {#2} {#3} }
- \group_end:
- }
-
-% #1: angle
-% #2: csv list of atoms
-\cs_new_protected:Npn \chemmacros_newman:nn #1#2
- { \__chemmacros_newman_feed_atoms:nw {#1}#2 ,,,,,, \q_stop }
-
-\cs_new_protected:Npn \__chemmacros_newman_feed_atoms:nw #1#2,#3,#4,#5,#6,#7,#8 \q_stop
- { \chemmacros_newman_atoms:nnnnnnn {#1} {#2} {#3} {#4} {#5} {#6} {#7} }
-
-% place atoms:
-% #1: angle
-% #2 - #7: atoms
-\cs_new_protected:Npn \chemmacros_newman_atoms:nnnnnnn #1#2#3#4#5#6#7
- {
- \tl_if_blank:nTF {#1}
- {
- \fp_set_eq:NN
- \l__chemmacros_newman_rel_angle_fp
- \l__chemmacros_newman_abs_angle_fp
- }
- { \fp_set:Nn \l__chemmacros_newman_rel_angle_fp {#1} }
- \chemmacros_tikz_picture:xn
- {
- scale = \fp_to_decimal:N \l__chemmacros_newman_scale_fp ,
- chemmacros_newman_atom_front / .style =
- {
- inner~sep = 0pt ,
- outer~sep = 0pt ,
- \exp_not:V \l__chemmacros_newman_tikz_front_tl
- },
- chemmacros_newman_atom_back / .style =
- {
- inner~sep = 0pt ,
- outer~sep = 0pt ,
- \bool_if:NTF \l__chemmacros_newman_tikz_back_bool
- { \exp_not:V \l__chemmacros_newman_tikz_back_tl }
- { \exp_not:V \l__chemmacros_newman_tikz_front_tl }
- }
- }
- {
- \chemmacros_tikz_draw:x
- { \exp_not:V \l__chemmacros_newman_tikz_ring_tl }
- (0pt,0pt) circle (\fp_to_dim:N \l__chemmacros_newman_scale_fp * 15) ;
- \chemmacros_newman_back_node:nn {30} {#6}
- \chemmacros_newman_back_node:nn {150} {#7}
- \chemmacros_newman_back_node:nn {270} {#5}
- \chemmacros_newman_front_node:nn {90} {#2}
- \chemmacros_newman_front_node:nn {210} {#3}
- \chemmacros_newman_front_node:nn {330} {#4}
- }
- }
-
-% provide cartesian coordiantes from polar coordinates
-% #1: fp variable for x
-% #2: fp variable for y
-% #3: angle
-% #4: radius
-\cs_new_protected:Npn \chemmacros_polar_to_cartesian:NNnn #1#2#3#4
- {
- \fp_set:Nn #1 { #4 * cos( #3 / 180 * pi ) }% x
- \fp_set:Nn #2 { #4 * sin( #3 / 180 * pi ) }% y
- }
-
-% place back nodes
-\cs_new_protected:Npn \chemmacros_newman_back_node:nn #1#2
- {
- \group_begin:
- \fp_add:Nn \l__chemmacros_newman_rel_angle_fp { #1 }
- \chemmacros_polar_to_cartesian:NNnn
- \l__chemmacros_newman_x_fp
- \l__chemmacros_newman_y_fp
- { \l__chemmacros_newman_rel_angle_fp }
- { \l__chemmacros_newman_scale_fp }
- \chemmacros_tikz_draw:x
- { \exp_not:V \l__chemmacros_newman_tikz_ring_tl }
- (
- 15 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
- 15 * \fp_to_dim:N \l__chemmacros_newman_y_fp
- )
- --
- (
- 30 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
- 30 * \fp_to_dim:N \l__chemmacros_newman_y_fp
- ) ;
- \chemmacros_polar_to_cartesian:NNnn
- \l__chemmacros_newman_x_fp
- \l__chemmacros_newman_y_fp
- { \l__chemmacros_newman_rel_angle_fp }
- { \l__chemmacros_newman_scale_fp }
- \chemmacros_tikz_node:x
- {
- chemmacros_newman_atom_back,
- anchor = -180 + \fp_to_int:N \l__chemmacros_newman_rel_angle_fp
- }
- at
- (
- 31 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
- 31 * \fp_to_dim:N \l__chemmacros_newman_y_fp
- )
- { #2 } ;
- \group_end:
- }
-\cs_generate_variant:Nn \chemmacros_newman_back_node:nn { nf }
-
-% place front nodes:
-\cs_new_protected:Npn \chemmacros_newman_front_node:nn #1#2
- {
- \chemmacros_polar_to_cartesian:NNnn
- \l__chemmacros_newman_x_fp
- \l__chemmacros_newman_y_fp
- { #1 }
- { \l__chemmacros_newman_scale_fp }
- \chemmacros_tikz_draw:x
- { \exp_not:V \l__chemmacros_newman_tikz_ring_tl }
- (0pt,0pt) -- ++
- (
- 30 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
- 30 * \fp_to_dim:N \l__chemmacros_newman_y_fp
- ) ;
- \chemmacros_polar_to_cartesian:NNnn
- \l__chemmacros_newman_x_fp
- \l__chemmacros_newman_y_fp
- { #1 }
- { \l__chemmacros_newman_scale_fp }
- \chemmacros_tikz_node:x
- { chemmacros_newman_atom_front, anchor = -180 + #1 }
- at
- (
- 31 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
- 31 * \fp_to_dim:N \l__chemmacros_newman_y_fp
- )
- { #2 } ;
- }
-\cs_generate_variant:Nn \chemmacros_newman_front_node:nn { nf }
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2016/04/23 - some changes on how \newman is processed internally
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.nomenclature.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.nomenclature.code.tex
deleted file mode 100644
index 05a80488d21..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.nomenclature.code.tex
+++ /dev/null
@@ -1,978 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `nomenclature'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{nomenclature}{2017/06/11 chemical names}
-
-\RequirePackage{scrlfile}
-
-\chemmacros_load_module:n {tikz}
-
-\bool_new:N \l__chemmacros_iupac_restricted_bool
-\bool_new:N \l__chemmacros_iupac_strict_bool
-
-\msg_new:nnn {chemmacros} {new-iupac}
- {
- You've~ tried~ to~ define~ a~ iupac~ naming~ command~ with~
- \token_to_str:N \NewChemIUPAC ,~ but~ the~ iupac~ command~
- \token_to_str:N #1 \c_space_tl already~ exists.~ Choose~ another~ name~
- or~ use~ \token_to_str:N \RenewChemIUPAC .
- }
-
-\msg_new:nnn {chemmacros} {renew-iupac}
- {
- You've~ tried~ to~ renew~ the~ iupac~ command~ \token_to_str:N #1 ,~ but~
- it~ doesn't~ exist.~ Use~ \token_to_str:N \NewChemIUPAC \c_space_tl
- instead.
- }
-
-\msg_new:nnn {chemmacros} {let-iupac}
- {
- You've~ tried~ to~ let~ the~ iupac~ command~ \token_to_str:N #1
- \c_space_tl to~ the~ iupac~ command~ \token_to_str:N #2 ,~ but~ the~
- latter~ doesn't~ exist.~ Use~ \token_to_str:N \NewChemIUPAC \c_space_tl
- instead~ or~declare~ \token_to_str:N #2 \c_space_tl first.
- }
-
-\msg_new:nnn {chemmacros} {new-iupac-shorthand}
- {
- You've~ tried~ to~ define~ a~ iupac~ shorthand~ with~ \token_to_str:N
- \NewChemIUPACShorthand ,~ but~ the~ shorthand~ \token_to_str:N #1
- \c_space_tl already~ exists.~ Please~ choose~ another~ token.
- }
-
-\msg_new:nnn {chemmacros} {renew-iupac-shorthand}
- {
- You've~ tried~ to~ renew~ the~ iupac~ shorthand~ \token_to_str:N #1 ,~
- but~ this~ shorthand~ doesn't~ exist,~ yet.
- }
-
-\msg_new:nnn {chemmacros} {show-iupac}
- { \\ >~ \token_to_str:N #1=iupac~macro: \\ -> #2 }
-
-\msg_new:nnn {chemmacros} {no-iupac-command}
- { \\ >~ \token_to_str:N #1=not~ defined~ as~ iupac~ macro }
-
-\cs_generate_variant:Nn \msg_show:nnnn {nnnV}
-
-% --------------------------------------------------------------------------
-\prop_new:N \l__chemmacros_iupac_prop
-
-\cs_new_protected:Npn \__chemmacros_iupac_name:NN #1#2
- { \str_set:Nx #2 { \chemmacros_remove_backslash:N #1 } }
-
-\cs_new_protected:Npn \__chemmacros_define_iupac:Nn #1#2
- {
- \__chemmacros_iupac_name:NN #1 \l__chemmacros_tmpa_str
- \prop_put:NVn \l__chemmacros_iupac_prop
- \l__chemmacros_tmpa_str
- {#2}
- \chemmacros_make_iupac:
- }
-\cs_generate_variant:Nn \__chemmacros_define_iupac:Nn {NV}
-
-\cs_new_protected:Npn \__chemmacros_let_iupac:NN #1#2
- {
- \__chemmacros_iupac_name:NN #1 \l__chemmacros_tmpa_str
- \__chemmacros_iupac_name:NN #2 \l__chemmacros_tmpb_str
- \tl_set:Nx \l__chemmacros_tmpa_tl
- { \prop_item:NV \l__chemmacros_iupac_prop \l__chemmacros_tmpb_str }
- \__chemmacros_define_iupac:NV #1 \l__chemmacros_tmpa_tl
- }
-
-\cs_new_protected:Npn \chemmacros_show_iupac:N #1
- {
- \group_begin:
- \__chemmacros_iupac_name:NN #1 \l__chemmacros_tmpa_str
- \tl_set:Nx \l__chemmacros_tmpa_tl
- { \prop_item:NV \l__chemmacros_iupac_prop \l__chemmacros_tmpa_str }
- \tl_if_empty:NTF \l__chemmacros_tmpa_tl
- { \msg_show:nnn {chemmacros} {no-iupac-command} {#1} }
- { \msg_show:nnnV {chemmacros} {show-iupac} {#1} \l__chemmacros_tmpa_tl }
- \group_end:
- }
-
-\prg_new_protected_conditional:Npnn \chemmacros_if_iupac:N #1 {T,F,TF}
- {
- \__chemmacros_iupac_name:NN #1 \l__chemmacros_tmpa_str
- \prop_if_in:NVTF \l__chemmacros_iupac_prop \l__chemmacros_tmpa_str
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-\cs_new_protected:Npn \chemmacros_new_iupac:Nn #1#2
- {
- \chemmacros_if_iupac:NTF #1
- { \msg_error:nnn {chemmacros} {new-iupac} {#1} }
- { \__chemmacros_define_iupac:Nn #1 {#2} }
- }
-
-\cs_new_protected:Npn \chemmacros_provide_iupac:Nn #1#2
- {
- \chemmacros_if_iupac:NF #1
- { \__chemmacros_define_iupac:Nn #1 {#2} }
- }
-
-\cs_new_protected:Npn \chemmacros_define_iupac:Nn #1#2
- { \__chemmacros_define_iupac:Nn #1 {#2} }
-
-\cs_new_protected:Npn \chemmacros_renew_iupac:Nn #1#2
- {
- \chemmacros_if_iupac:NTF #1
- { \__chemmacros_define_iupac:Nn #1 {#2} }
- { \msg_error:nnn {chemmacros} {renew-iupac} {#1} }
- }
-
-\cs_new_protected:Npn \chemmacros_let_iupac:NN #1#2
- {
- \chemmacros_if_iupac:NTF #2
- { \__chemmacros_let_iupac:NN #1#2 }
- { \msg_error:nnnn {chemmacros} {let-iupac} {#1} {#2} }
- }
-
-\ChemCompatibilityTo{5.2}
-\cs_new_protected:Npn \chemmacros_make_iupac:
- {
- \bool_if:NT \l__chemmacros_in_document_bool
- {
- \bool_if:NTF \l__chemmacros_inside_iupac_bool
- {
- \prop_map_inline:Nn \l__chemmacros_iupac_prop
- { \cs_set_protected:cpn {##1} {##2} }
- }
- {
- \bool_if:NF \l__chemmacros_iupac_restricted_bool
- {
- \bool_if:NTF \l__chemmacros_iupac_strict_bool
- {
- \prop_map_inline:Nn \l__chemmacros_iupac_prop
- { \cs_set_protected:cpn {##1} {##2} }
- }
- {
- \prop_map_inline:Nn \l__chemmacros_iupac_prop
- {
- \cs_if_exist:cF {##1}
- { \cs_set_protected:cpn {##1} {##2} }
- }
- }
- }
- }
- }
- }
-\AtBeginDocument { \chemmacros_make_iupac: }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.2}
-\cs_new_protected:Npn \chemmacros_make_iupac:
- {
- \chemmacros_if_document:T
- {
- \bool_if:NTF \l__chemmacros_inside_iupac_bool
- {
- \prop_map_inline:Nn \l__chemmacros_iupac_prop
- { \cs_set_protected:cpn {##1} {##2} }
- }
- {
- \bool_if:NF \l__chemmacros_iupac_restricted_bool
- {
- \bool_if:NTF \l__chemmacros_iupac_strict_bool
- {
- \prop_map_inline:Nn \l__chemmacros_iupac_prop
- { \cs_set_protected:cpn {##1} {##2} }
- }
- {
- \prop_map_inline:Nn \l__chemmacros_iupac_prop
- {
- \cs_if_exist:cF {##1}
- { \cs_set_protected:cpn {##1} {##2} }
- }
- }
- }
- }
- }
- }
-\AfterEndPreamble { \chemmacros_make_iupac: }
-\EndChemCompatibility
-
-\NewDocumentCommand \DeclareChemIUPAC {mm}
- { \chemmacros_define_iupac:Nn #1 {#2} }
-
-\NewDocumentCommand \NewChemIUPAC {mm}
- { \chemmacros_new_iupac:Nn #1 {#2} }
-
-\NewDocumentCommand \RenewChemIUPAC {mm}
- { \chemmacros_renew_iupac:Nn #1 {#2} }
-
-\NewDocumentCommand \ProvideChemIUPAC {mm}
- { \chemmacros_provide_iupac:Nn #1 {#2} }
-
-\NewDocumentCommand \LetChemIUPAC {mm}
- { \chemmacros_let_iupac:NN #1 #2 }
-
-% --------------------------------------------------------------------------
-\chemmacros_define_keys:nn {nomenclature}
- {
- iupac .choice: ,
- iupac / restricted .code:n =
- \bool_set_true:N \l__chemmacros_iupac_restricted_bool
- \bool_set_false:N \l__chemmacros_iupac_strict_bool ,
- iupac / auto .code:n =
- \bool_set_false:N \l__chemmacros_iupac_restricted_bool
- \bool_set_false:N \l__chemmacros_iupac_strict_bool ,
- iupac / strict .code:n =
- \bool_set_false:N \l__chemmacros_iupac_restricted_bool
- \bool_set_true:N \l__chemmacros_iupac_strict_bool ,
- }
-
-% --------------------------------------------------------------------------
-% stereo descriptors and other nomenclature commands
-% Cahn-Ingold-Prelog
-\dim_new:N \l__chemmacros_cip_kern_dim
-\dim_set:Nn \l__chemmacros_cip_kern_dim {.075em}
-
-\chemmacros_define_keys:nn {nomenclature}
- { cip-kern .dim_set:N = \l__chemmacros_cip_kern_dim }
-
-\ChemCompatibilityTo{5.2}
-\cs_new_protected:Npn \chemmacros_cip:n #1
- { \textit{#1} \tex_kern:D \l__chemmacros_cip_kern_dim }
-
-\NewDocumentCommand \cip {m}
- { \chemmacros_cip:n {#1} }
-\EndChemCompatibility
-
-\ChemCompatibilityBetween{5.2}{5.8}
-\cs_new_protected:Npn \chemmacros_cip:n #1
- {
- \int_zero:N \l__chemmacros_tmpa_int
- \textup{(}
- \clist_map_inline:nn
- {#1}
- {
- \int_incr:N \l__chemmacros_tmpa_int
- \textit{##1}
- \int_compare:nT
- { \l__chemmacros_tmpa_int < \clist_count:n {#1} }
- { \textup{,} }
- }
- \textup{)}
- \tex_kern:D \l__chemmacros_cip_kern_dim
- }
-\DeclareChemIUPAC \cip { \chemmacros_cip:n }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.8}
-\tl_new:N \l__chemmacros_cip_inner_tl
-\tl_new:N \l__chemmacros_cip_outer_tl
-\tl_new:N \l__chemmacros_cip_number_tl
-
-\chemmacros_define_keys:nn {nomenclature}
- {
- cip-inner-format .tl_set:N = \l__chemmacros_cip_inner_tl ,
- cip-inner-format .initial:n = \itshape ,
- cip-outer-format .tl_set:N = \l__chemmacros_cip_outer_tl ,
- cip-outer-format .initial:n = \upshape ,
- cip-number-format .tl_set:N = \l__chemmacros_cip_number_tl ,
- cip-number-format .initial:n = \itshape
- }
-
-\cs_new_protected:Npn \__chemmacros_cip:n #1
- {
- \tl_set:Nn \l__chemmacros_tmpa_tl {#1}
- \int_step_inline:nnnn {0} {1} {9}
- {
- \tl_replace_all:Nnn \l__chemmacros_tmpa_tl
- {##1}
- { { \l__chemmacros_cip_number_tl ##1} }
- }
- { \l__chemmacros_cip_inner_tl \l__chemmacros_tmpa_tl }
- }
-
-\cs_new_protected:Npn \chemmacros_cip:n #1
- {
- \int_zero:N \l__chemmacros_tmpa_int
- \group_begin:
- \l__chemmacros_cip_outer_tl (
- \clist_map_inline:nn
- {#1}
- {
- \int_incr:N \l__chemmacros_tmpa_int
- \__chemmacros_cip:n {##1}
- \int_compare:nT
- { \l__chemmacros_tmpa_int < \clist_count:n {#1} }
- { , }
- }
- )
- \group_end:
- \tex_kern:D \l__chemmacros_cip_kern_dim
- }
-\DeclareChemIUPAC \cip { \chemmacros_cip:n }
-\EndChemCompatibility
-
-% remember: TikZ needs : to be other
-\cs_new_protected:Npn \chemmacros_sconf:n #1
- {
- \group_begin:
- \chemmacros_tikz:nn
- { baseline,text~ height=1.5ex,text~ depth=.25ex }
- {
- \chemmacros_tikz_node:n {anchor=base} (chemmacros@@Sconf) {#1} ;
- \chemmacros_tikz_draw:n {->,thick,rotate=90}
- ($(chemmacros@@Sconf.center)+(20\c_chemmacros_other_colon_tl.8em)$)
- arc (20\c_chemmacros_other_colon_tl340\c_chemmacros_other_colon_tl.8em);
- }
- \group_end:
- }
-
-\cs_new_protected:Npn \chemmacros_rconf:n #1
- {
- \group_begin:
- \tikz[baseline,text~ height=1.5ex,text~ depth=.25ex]
- {
- \chemmacros_tikz_node:n {anchor=base} (chemmacros@@Rconf) {#1} ;
- \chemmacros_tikz_draw:n {<-,thick,rotate=90}
- ($(chemmacros@@Rconf.center)+(20\c_chemmacros_other_colon_tl.8em)$)
- arc (20\c_chemmacros_other_colon_tl340\c_chemmacros_other_colon_tl.8em) ;
- }
- \group_end:
- }
-
-\NewDocumentCommand \Sconf { O{S} } { \chemmacros_sconf:n {#1} }
-\NewDocumentCommand \Rconf { O{R} } { \chemmacros_rconf:n {#1} }
-
-% coordination chemistry
-\bool_new:N \l__chemmacros_bridge_super_bool
-
-\chemmacros_define_keys:nn {nomenclature}
- {
- bridge-number .choice: ,
- bridge-number / sub .code:n =
- \bool_set_false:N \l__chemmacros_bridge_super_bool ,
- bridge-number / super .code:n =
- \bool_set_true:N \l__chemmacros_bridge_super_bool ,
- coord-use-hyphen .bool_set:N = \l__chemmacros_coord_use_hyphen_bool ,
- coord-use-hyphen .initial:n = true
- }
-
-% #1: boolean - if true hyphen is turned on
-% #2: boolean - if true superscript will be used
-% #3: symbol
-% #4: sub-/superscript
-\cs_new_protected:Npn \chemmacros_coordination_symbol:nnnn #1#2#3#4
- {
- \chemmacros_chemformula:n {#3}
- \tl_if_blank:nF {#4}
- {
- \bool_if:nTF {#2}
- { \chemmacros_chemformula:n { {}^{#4} } }
- { \chemmacros_chemformula:n { {}_{#4} } }
- }
- \bool_if:nT
- {#1}
- { \chemmacros_break_point_hyphen: }
- }
-
-\cs_new_protected:Npn \chemmacros_hapto:n #1
- {
- \chemmacros_coordination_symbol:nnnn
- { \l__chemmacros_coord_use_hyphen_bool }
- {
- \chemmacros_if_compatibility:nnTF {>} {5.7}
- { \c_true_bool }
- { \c_false_bool }
- }
- { \chemeta }
- {#1}
- }
-
-\cs_new_protected:Npn \chemmacros_dento:n #1
- {
- \chemmacros_coordination_symbol:nnnn
- { \l__chemmacros_coord_use_hyphen_bool }
- {
- \chemmacros_if_compatibility:nnTF {>} {5.7}
- { \c_true_bool }
- { \c_false_bool }
- }
- { \chemkappa }
- {#1}
- }
-
-\cs_new_protected:Npn \chemmacros_bridge:n #1
- {
- \chemmacros_coordination_symbol:nnnn
- { \l__chemmacros_coord_use_hyphen_bool }
- { \l__chemmacros_bridge_super_bool }
- { \chemmu }
- {#1}
- }
-
-% \iupac (basically the same as bpchem's \IUPAC)
-% - allows multiple breaking points as compound names can get really long and
-% especially in multicolumn documents can span more than two lines
-% - add a (very) little space before the hyphen and a little negative space
-% after it
-% - add a little space at breaking points if not broken
-% - enables all naming commands regardless if they're definied otherwise or not
-\cs_new_protected:Npn \chemmacros_allow_hyphens:
- {
- \chemmacros_nobreak:
- \chemmacros_if_compatibility:nnTF {<=} {5.7}
- { \skip_horizontal:N \c_zero_dim }
- { \skip_horizontal:N \c_zero_skip }
- }
-
-% #1: pre break
-% #2: post break
-% #3: no break
-\ChemCompatibilityTo{5.1}
-\cs_new_protected:Npn \__chemmacros_break_point_insert:nnn #1#2#3
- {
- \chemmacros_nobreak:
- \tex_discretionary:D { - } { } {#3}
- \chemmacros_allow_hyphens:
- }
-\EndChemCompatibility
-
-\ChemCompatibilityBetween{5.1}{5.8}
-\cs_new_protected:Npn \__chemmacros_break_point_insert:nnn #1#2#3
- {
- \mode_if_math:TF
- {#3}
- {
- \chemmacros_nobreak:
- \tex_discretionary:D {#1} {#2} {#3}
- \chemmacros_allow_hyphens:
- }
- }
-\EndChemCompatibility
-
-\ChemCompatibility{5.8a}
-\cs_new_protected:Npn \__chemmacros_break_point_insert:nnn #1#2#3
- {
- \mode_if_math:TF
- {#3}
- {
- \peek_meaning:NTF \group_end:
- {#3}
- {
- \chemmacros_nobreak:
- \tex_discretionary:D {#1} {#2} {#3}
- \chemmacros_allow_hyphens:
- }
- }
- }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.8b}
-\cs_new_protected:Npn \__chemmacros_peek_if_dash:TF #1#2
- {
- \peek_charcode:NTF -
- {#1}
- {#2}
- }
-
-\cs_new_protected:Npn \__chemmacros_peek_if_paren:TF #1#2
- { % (
- \peek_charcode:NTF )
- {#1}
- { % [
- \peek_charcode:NTF ]
- {#1}
- {#2}
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_break_point_insert:nnn #1#2#3
- {
- \mode_if_math:TF
- {#3}
- {
- \peek_meaning:NTF \group_end:
- {#3}
- {
- \__chemmacros_peek_if_dash:TF
- {#3}
- {
- \__chemmacros_peek_if_paren:TF
- {#3}
- {
- \chemmacros_nobreak:
- \tex_discretionary:D {#1} {#2} {#3}
- \chemmacros_allow_hyphens:
- }
- }
- }
- }
- }
-\EndChemCompatibility
-
-\dim_new:N \l__chemmacros_iupac_hyphen_pre_dim
-\dim_set:Nn \l__chemmacros_iupac_hyphen_pre_dim { .01em }
-\dim_new:N \l__chemmacros_iupac_hyphen_post_dim
-\dim_set:Nn \l__chemmacros_iupac_hyphen_post_dim { -.03em }
-\dim_new:N \l__chemmacros_iupac_break_dim
-\dim_set:Nn \l__chemmacros_iupac_break_dim { .03em }
-\skip_new:N \l__chemmacros_iupac_break_skip
-\skip_set:Nn \l__chemmacros_iupac_break_skip { .03em plus .07em }
-
-\chemmacros_define_keys:nn {nomenclature}
- {
- hyphen-pre-space .dim_set:N = \l__chemmacros_iupac_hyphen_pre_dim ,
- hyphen-post-space .dim_set:N = \l__chemmacros_iupac_hyphen_post_dim ,
- break-space .skip_set:N = \l__chemmacros_iupac_break_skip
- }
-
-\ChemCompatibilityTo{5.2}
-\cs_new_protected:Npn \chemmacros_break_point_hyphen:
- {
- \__chemmacros_break_point_insert:nnn
- {-}
- { }
- {
- \tex_kern:D \l__chemmacros_iupac_hyphen_pre_dim
- -
- \tex_kern:D \l__chemmacros_iupac_hyphen_post_dim
- }
- }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.2}
-\cs_new_protected:Npn \chemmacros_break_point_hyphen:
- {
- \__chemmacros_break_point_insert:nnn
- { \tex_kern:D \l__chemmacros_iupac_hyphen_pre_dim - }
- { }
- {
- \tex_kern:D \l__chemmacros_iupac_hyphen_pre_dim
- -
- \tex_kern:D \l__chemmacros_iupac_hyphen_post_dim
- }
- }
-\EndChemCompatibility
-
-\cs_new_protected:Npn \chemmacros_break_point:
- {
- \__chemmacros_break_point_insert:nnn
- {-}
- { }
- {
- \mode_if_math:TF
- { | }
- { \tex_kern:D \l__chemmacros_iupac_break_dim }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_break_point_opening_paren:
- { \__chemmacros_break_point_insert:nnn { - } { ( } { ( } }
-
-\cs_new_protected:Npn \chemmacros_break_point_closing_paren:
- { \__chemmacros_break_point_insert:nnn { )- } { } { ) } }
-
-\cs_new_protected:Npn \chemmacros_break_point_opening_bracket:
- { \__chemmacros_break_point_insert:nnn { - } { [ } { [ } }
-
-\cs_new_protected:Npn \chemmacros_break_point_closing_bracket:
- { \__chemmacros_break_point_insert:nnn { ]- } { } { ] } }
-
-\cs_new_protected:Npn \chemmacros_superscript:n #1
- { \mode_if_math:TF { \sp {#1} } { \textsuperscript {#1} } }
-
-\bool_new:N \l__chemmacros_inside_iupac_bool
-
-\seq_new:N \l__chemmacros_iupac_shorthands_seq
-\prop_new:N \l__chemmacros_iupac_shorthands_prop
-
-% #1: token
-% #2: definition
-\cs_new_protected:Npn \chemmacros_define_iupac_shorthand:NN #1#2
- {
- \seq_if_in:NnF \l__chemmacros_iupac_shorthands_seq {#1}
- { \seq_put_right:Nn \l__chemmacros_iupac_shorthands_seq {#1} }
- \prop_put:Nnn \l__chemmacros_iupac_shorthands_prop {#1}
- { \char_set_active_eq:NN #1#2 }
- }
-
-\cs_new_protected:Npn \chemmacros_remove_shorthand:N #1
- {
- \chemmacros_define_iupac_shorthand:NN #1 \c_empty_tl
- \seq_remove_all:Nn \l__chemmacros_iupac_shorthands_seq {#1}
- \prop_remove:Nn \l__chemmacros_iupac_shorthands_prop {#1}
- }
-
-\prg_new_conditional:Npnn \chemmacros_if_iupac_shorthand:N #1 {p,T,F,TF}
- {
- \seq_if_in:NnTF \l__chemmacros_iupac_shorthands_seq {#1}
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-\cs_new_protected:Npn \chemmacros_for_all_iupac_shorthands_do:n #1
- { \seq_map_inline:Nn \l__chemmacros_iupac_shorthands_seq {#1} }
-
-\cs_new_protected:Npn \chemmacros_activate_iupac_shorthand:N #1
- { \chemmacros_if_iupac_shorthand:NT #1 { \char_set_catcode_active:N #1 } }
-
-\cs_new_protected:Npn \chemmacros_activate_iupac_shorthands:n #1
- { \tl_map_inline:nn {#1} { \chemmacros_activate_iupac_shorthand:N ##1 } }
-
-\cs_new_protected:Npn \chemmacros_activate_all_iupac_shorthands:
- {
- \chemmacros_for_all_iupac_shorthands_do:n
- { \chemmacros_activate_iupac_shorthand:N ##1 }
- }
-
-\cs_new_protected:Npn \chemmacros_make_shorthands:
- {
- \chemmacros_if_compatibility:nnT {>=} {5.2}
- {
- \chemmacros_if_document:T
- {
- \chemmacros_for_all_iupac_shorthands_do:n
- { \prop_item:Nn \l__chemmacros_iupac_shorthands_prop {##1} }
- }
- }
- }
-
-\NewDocumentCommand \ChemMakeIupacShorthands {}
- { \chemmacros_make_shorthands: }
-
-\NewDocumentCommand \DeclareChemIUPACShorthand {mm}
- { \chemmacros_define_iupac_shorthand:NN #1#2 }
-
-\NewDocumentCommand \NewChemIUPACShorthand {mm}
- {
- \chemmacros_if_iupac_shorthand:NTF #1
- { \msg_error:nnn {chemmacros} {new-iupac-shorthand} {#1} }
- { \chemmacros_define_iupac_shorthand:NN #1#2 }
- }
-
-\NewDocumentCommand \ProvideChemIUPACShorthand {mm}
- {
- \chemmacros_if_iupac_shorthand:NTF #1
- { \chemmacros_define_iupac_shorthand:NN #1#2 }
- }
-
-\NewDocumentCommand \RenewChemIUPACShorthand {mm}
- {
- \chemmacros_if_iupac_shorthand:NTF #1
- { \chemmacros_define_iupac_shorthand:NN #1#2 }
- { \msg_error:nnn {chemmacros} {renew-iupac-shorthand} {#1} }
- }
-
-\NewDocumentCommand \RemoveChemIUPACShorthand {m}
- { \chemmacros_remove_shorthand:N #1 }
-
-\NewChemIUPACShorthand ^ \chemmacros_superscript:n
-\NewChemIUPACShorthand | \chemmacros_break_point:
-\NewChemIUPACShorthand - \chemmacros_break_point_hyphen:
-
-\ChemCompatibilityFrom{5.1}
- \NewChemIUPACShorthand ( \chemmacros_break_point_opening_paren:
- \NewChemIUPACShorthand ) \chemmacros_break_point_closing_paren:
- \NewChemIUPACShorthand [ \chemmacros_break_point_opening_bracket:
- \NewChemIUPACShorthand ] \chemmacros_break_point_closing_bracket:
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.3}
- \NewChemIUPAC \chemprime { \ensuremath {{}^{\prime}} }
- \NewChemIUPACShorthand ' \chemprime
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.8c}
- \NewChemIUPAC \nonbreakinghyphen { \mbox{-} \nobreak \hspace{0pt} }
- \NewChemIUPACShorthand = \nonbreakinghyphen
-\EndChemCompatibility
-
-\cs_new_protected:Npn \chemmacros_iupac:nn #1#2
- {
- \group_begin:
- \bool_set_true:N \l__chemmacros_inside_iupac_bool
- \chemmacros_if_compatibility:nnT {>} {5.10}
- { \bool_set_true:N \l__chemmacros_in_document_bool }
- \chemmacros_set_keys:nn {nomenclature} {#1}
- \chemmacros_make_iupac:
- \chemmacros_make_shorthands:
- % \prop_show:N \l__chemmacros_iupac_shorthands_prop
- \chemmacros_if_compatibility:nnT {<=} {5.2}
- { \chemmacros_define_deprecated:NN \- - }
- \tl_set_rescan:Nnn \l__chemmacros_tmpa_tl
- { \chemmacros_activate_all_iupac_shorthands: }
- {#2}
- % \tl_analysis_show:N
- \l__chemmacros_tmpa_tl
- \group_end:
- }
-
-\cs_new_protected:Npn \chemmacros_iupac:n #1 { \chemmacros_iupac:nn {} {#1} }
-
-\ChemCompatibilityTo{5.3}
-% Thanks to Joseph Wright and Enrico Gregorio for the help on the curious
-% redefinition of \- and the end of the compilation
-% see http://tex.stackexchange.com/q/42405/5049 for reference
-\cs_set_protected:Npx \- { \exp_not:o { \- } }
-\cs_set_eq:NN \@dischyph \-
-\EndChemCompatibility
-
-\NewDocumentCommand \iupac {O{}m} { \chemmacros_iupac:nn {#1} {#2} }
-
-% --------------------------------------------------------------------------
-% R(ectus)/S(inister):
-\NewChemIUPAC \rectus { \cip {R} }
-\NewChemIUPAC \sinister { \cip {S} }
-
-\LetChemIUPAC \R \rectus
-\LetChemIUPAC \S \sinister
-
-% E(ntgegen)/Z(usammen)
-\NewChemIUPAC \entgegen { \cip {E} }
-\NewChemIUPAC \zusammen { \cip {Z} }
-
-\LetChemIUPAC \E \entgegen
-\LetChemIUPAC \Z \zusammen
-
-% cis/trans
-\NewChemIUPAC \cis { \textit {cis} }
-\NewChemIUPAC \trans { \textit {trans} }
-
-% fac/mer
-\NewChemIUPAC \fac { \textit {fac} }
-\NewChemIUPAC \mer { \textit {mer} }
-
-% tert
-\NewChemIUPAC \tert { \textit {tert} }
-
-% Italian descriptors - I forgot what they mean
-\NewChemIUPAC \sin { \textit {sin} }
-\NewChemIUPAC \ter { \textit {ter} }
-
-% Fischer
-\NewChemIUPAC \dexter { \textsc {d} }
-\NewChemIUPAC \laevus { \textsc {l} }
-
-\LetChemIUPAC \D \dexter
-\LetChemIUPAC \L \laevus
-
-% ortho/meta/para
-\NewChemIUPAC \ortho { \textit {o} }
-\NewChemIUPAC \meta { \textit {m} }
-\NewChemIUPAC \para { \textit {p} }
-
-% syn/anti
-\NewChemIUPAC \syn { \textit {syn} }
-\NewChemIUPAC \anti { \textit {anti} }
-
-% coordination chemistry:
-\NewChemIUPAC \hapto { \chemmacros_hapto:n }
-\NewChemIUPAC \dento { \chemmacros_dento:n }
-\NewChemIUPAC \bridge { \chemmacros_bridge:n }
-
-% attachments to heteroatoms / added hydrogen
-\NewChemIUPAC \hydrogen { \textit {H} }
-\NewChemIUPAC \oxygen { \textit {O} }
-\NewChemIUPAC \nitrogen { \textit {N} }
-\NewChemIUPAC \sulfur { \textit {S} }
-\NewChemIUPAC \phosphorus { \textit {P} }
-
-% atoms:
-\LetChemIUPAC \H \hydrogen
-\LetChemIUPAC \O \oxygen
-\LetChemIUPAC \N \nitrogen
-\LetChemIUPAC \Sf \sulfur
-\LetChemIUPAC \P \phosphorus
-
-% greek letters
-\NewChemIUPAC \a { \chemalpha }
-\NewChemIUPAC \b { \chembeta }
-\NewChemIUPAC \g { \chemgamma }
-\NewChemIUPAC \d { \chemdelta }
-\NewChemIUPAC \k { \chemkappa }
-\NewChemIUPAC \m { \chemmu }
-\NewChemIUPAC \n { \chemeta }
-\NewChemIUPAC \w { \chemomega }
-
-% --------------------------------------------------------------------------
-% latin phrases
-\tl_new:N \l__chemmacros_latin_format_tl
-
-\NewChemMacroset {Latin} {mm}
- { \chemmacros_define_latin:Nn #1 {#2} }
-
-\ChemCompatibilityTo{5.7}
-\chemmacros_define_keys:nn {nomenclature}
- {
- latin-format .tl_set:N = \l__chemmacros_latin_format_tl ,
- latin-format .initial:n = \textit ,
- }
-
-\cs_new_protected:Npn \chemmacros_latin:n #1
- { { \l__chemmacros_latin_format_tl {#1} } }
-
-\cs_new_protected:Npn \chemmacros_define_latin:Nn #1#2
- { \cs_set_protected:Npn #1 { \chemmacros_latin:n {#2} } }
-
-\AtBeginDocument
- {
- % if chemstyle is loaded use chemstyle's definition:
- \chemmacros_if_package_loaded:nT {chemstyle}
- {
- \AfterPackage* {chemstyle}
- {
- \cs_undefine:N \invacuo
- \cs_set_eq:NN \chemmacros_latin:n \cst@latin
- }
- }
- \cs_if_exist:NTF \latin
- { \cs_set_eq:NN \latin \chemmacros_latin:n }
- { \cs_new_eq:NN \latin \chemmacros_latin:n }
- \NewChemLatin \insitu {in~situ}
- \NewChemLatin \abinitio {ab~initio}
- \NewChemLatin \invacuo {in~vacuo}
- }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.7}
-\chemmacros_define_keys:nn {nomenclature}
- {
- format .tl_set:N = \l__chemmacros_latin_format_tl ,
- format .initial:n = \emph ,
- }
-
-\cs_new_protected:Npn \chemmacros_write_latin:n #1
- {
- \group_begin:
- \l__chemmacros_latin_format_tl {#1}
- \group_end:
- }
-
-\cs_new_protected:Npn \chemmacros_latin:n #1
- { \chemmacros_write_latin:n {#1} }
-
-\cs_new_protected:Npn \chemmacros_define_latin:Nn #1#2
- { \DeclareDocumentCommand #1 {O{}} { \latin [##1] {#2} } }
-
-\NewDocumentCommand \latin {O{}m}
- {
- \group_begin:
- \chemmacros_set_keys:nn {nomenclature} {#1}
- \chemmacros_latin:n {#2}
- \group_end:
- }
-\EndChemCompatibility
-
-\ChemCompatibilityBetween{5.7}{5.9}
-\AtBeginDocument
- {
- \AfterPackage* {chemstyle} { \cs_undefine:N \invacuo }
- \NewChemLatin \insitu {in~situ}
- \NewChemLatin \abinitio {ab~initio}
- \NewChemLatin \invacuo {in~vacuo}
- }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.9}
-\cs_undefine:N \invacuo
-\NewChemLatin \invacuo {in~vacuo}
-\NewChemLatin \abinitio {ab~initio}
-\NewChemLatin \insitu {in~situ}
-\EndChemCompatibility
-
-% --------------------------------------------------------------------------
-% hyperref support
-% ?? unsure about adding IUPAC commands
-\AfterPackage* {hyperref}
- {
- \pdfstringdefDisableCommands
- {
- % \cs_set:Npn \- { - } % maybe not a good idea...
- % \cs_set:Npn \| { }
- % \cs_set:Npn \pH { pH }
- % \cs_set:Npn \pOH { pOH }
- \cs_set:Npn \iupac #1 {#1}
- \cs_set:Npn \cip #1 {(#1)}
- \cs_set:Npn \cis {cis}
- \cs_set:Npn \trans {trans}
- \cs_set:Npn \tert {tert}
- \cs_set:Npn \ortho {o}
- \cs_set:Npn \meta {m}
- \cs_set:Npn \para {p}
- \cs_set:Npn \syn {syn}
- \cs_set:Npn \anti {anti}
- \cs_set:Npn \R {(R)}
- \cs_set:Npn \S {(S)}
- \cs_set:Npn \E {(E)}
- \cs_set:Npn \Z {(Z)}
- \cs_set:Npn \D {D}
- \cs_set:Npn \L {L}
- \cs_set:Npn \H {H}
- \cs_set:Npn \O {O}
- \cs_set:Npn \N {N}
- \cs_set:Npn \Sf {S}
- \cs_set:Npn \P {P}
- \cs_set:Npn \dexter {D}
- \cs_set:Npn \laevus {L}
- \cs_set:Npn \rectus {(R)}
- \cs_set:Npn \sinister {(S)}
- \cs_set:Npn \entgegen {(E)}
- \cs_set:Npn \zusammen {(Z)}
- \cs_set:Npn \hydrogen {H}
- \cs_set:Npn \oxygen {O}
- \cs_set:Npn \nitrogen {N}
- \cs_set:Npn \sulfur {S}
- \cs_set:Npn \phosphorus {P}
- \cs_set:Npn \chemprime {'}
- }
- }
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2015/10/01 - use new function \chemmacros_if_document:TF for
- \chemmacros_make_iupac:
- - \cip only italicizes elements of csv list
- - fix bug in \RemoveChemIUPACShorthand
-2016/01/02 - \chemprime
-2016/01/23 - give shorthand definitions only inside \iupac
-2016/01/25 - small improvements (?) of the shorthand code
-2016/05/08 - check if \latin is already defined (eg by achemso) and overwrite
- definition
-2016/05/10 - define \chemmacros_hapto:n and friends in terms of
- \chemmacros_coordination_symbol:nnnn
- - \iupac gets an optional argument for setting options
-2016/05/31 - overwrite any \latin definition -- or rather: just define \latin
- - \latin and all macros defined with \NewChemLatin get an optional
- argument for setting options
-2016/06/07 - rename functions which erroneously were assigned to the
- `chemformula' module
-2017/04/17 - fix erroneous definition of \chemmacros_allow_hyphens:
- - new options `cip-inner-format', `cip-outer-format' and
- `cip-number-format'
-2017/06/11 - change behaviour of \__chemmacros_break_point_insert:nnn so
- it does nothing as last token in \iupac
-2020/01/02 - \chemmacros_show_iupac:N
- - \chemmacros_if_iupac:NTF
-2020/02/29 - let \chemmacros_iupac:nn think we're in the document – fixes
- issue #30
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.orbital.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.orbital.code.tex
deleted file mode 100644
index 6f9f0183222..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.orbital.code.tex
+++ /dev/null
@@ -1,576 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `orbital'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{orbital}{2015/07/14 drawing orbital shapes}
-
-\chemmacros_load_module:n {tikz}
-
-% \orbital[<keyval>]{<type>}
-% variables:
-\bool_new:N \l__chemmacros_orbital_type_s_bool
-\bool_new:N \l__chemmacros_orbital_type_p_bool
-\bool_new:N \l__chemmacros_orbital_type_sp_bool
-\bool_new:N \l__chemmacros_orbital_type_sptwo_bool
-\bool_new:N \l__chemmacros_orbital_type_spthree_bool
-\bool_new:N \l__chemmacros_orbital_s_phase_bool
-\bool_set_true:N \l__chemmacros_orbital_s_phase_bool
-\bool_new:N \l__chemmacros_orbital_p_phase_bool
-\bool_set_true:N \l__chemmacros_orbital_p_phase_bool
-\bool_new:N \l__chemmacros_orbital_sp_phase_bool
-\bool_set_true:N \l__chemmacros_orbital_sp_phase_bool
-\bool_new:N \l__chemmacros_orbital_sptwo_phase_bool
-\bool_set_true:N \l__chemmacros_orbital_sptwo_phase_bool
-\bool_new:N \l__chemmacros_orbital_spthree_phase_bool
-\bool_set_true:N \l__chemmacros_orbital_spthree_phase_bool
-\bool_new:N \l__chemmacros_orbital_p_half_bool
-\bool_new:N \l__chemmacros_orbital_overlay_bool
-\bool_new:N \l__chemmacros_orbital_opacity_bool
-
-\tl_new:N \l__chemmacros_orbital_s_color_tl
-\tl_set:Nn \l__chemmacros_orbital_s_color_tl { black }
-\tl_new:N \l__chemmacros_orbital_s_phase_color_tl
-\tl_new:N \l__chemmacros_orbital_p_color_tl
-\tl_set:Nn \l__chemmacros_orbital_p_color_tl { black }
-\tl_new:N \l__chemmacros_orbital_p_pphase_color_tl
-\tl_new:N \l__chemmacros_orbital_p_mphase_color_tl
-\tl_new:N \l__chemmacros_orbital_sp_color_tl
-\tl_set:Nn \l__chemmacros_orbital_sp_color_tl { black }
-\tl_new:N \l__chemmacros_orbital_sp_pphase_color_tl
-\tl_new:N \l__chemmacros_orbital_sp_mphase_color_tl
-\tl_new:N \l__chemmacros_orbital_sptwo_color_tl
-\tl_set:Nn \l__chemmacros_orbital_sptwo_color_tl { black }
-\tl_new:N \l__chemmacros_orbital_sptwo_pphase_color_tl
-\tl_new:N \l__chemmacros_orbital_sptwo_mphase_color_tl
-\tl_new:N \l__chemmacros_orbital_spthree_color_tl
-\tl_set:Nn \l__chemmacros_orbital_spthree_color_tl { black }
-\tl_new:N \l__chemmacros_orbital_spthree_pphase_color_tl
-\tl_new:N \l__chemmacros_orbital_spthree_mphase_color_tl
-\tl_new:N \l__chemmacros_orbital_s_scale_tl
-\tl_set:Nn \l__chemmacros_orbital_s_scale_tl { 1 }
-\tl_new:N \l__chemmacros_orbital_p_scale_tl
-\tl_set:Nn \l__chemmacros_orbital_p_scale_tl { 1 }
-\tl_new:N \l__chemmacros_orbital_sp_scale_tl
-\tl_set:Nn \l__chemmacros_orbital_sp_scale_tl { 1 }
-\tl_new:N \l__chemmacros_orbital_sptwo_scale_tl
-\tl_set:Nn \l__chemmacros_orbital_sptwo_scale_tl { 1 }
-\tl_new:N \l__chemmacros_orbital_spthree_scale_tl
-\tl_set:Nn \l__chemmacros_orbital_spthree_scale_tl { 1 }
-
-\fp_new:N \l__chemmacros_orbital_angle_fp
-\fp_set:Nn \l__chemmacros_orbital_angle_fp { 90 }
-\fp_new:N \l__chemmacros_orbital_opacity_fp
-\fp_set:Nn \l__chemmacros_orbital_opacity_fp { 0.5 }
-
-\cs_new:Npn \__chemmacros_orbital_options:
- {
- \__chemmacros_orbital_overlay: , \__chemmacros_orbital_opacity: ,
- inner~sep=0 , outer~sep=0 , line~width=.2pt ,
- rotate = { \fp_use:N \l__chemmacros_orbital_angle_fp - 90 } ,
- baseline ,
- minimum~size = 0
- }
-
-\cs_new:Npn \__chemmacros_orbital_overlay:
- { \bool_if:NT \l__chemmacros_orbital_overlay_bool { overlay } }
-
-\cs_new:Npn \__chemmacros_orbital_opacity:
- {
- \bool_if:NT \l__chemmacros_orbital_opacity_bool
- { opacity = { \fp_use:N \l__chemmacros_orbital_opacity_fp } }
- }
-
-% --------------------------------------------------------------------------
-% s-orbitals
-\cs_new_protected:Npn \__chemmacros_orbital_type_s:
- {
- \bool_set_true:N \l__chemmacros_orbital_type_s_bool
- \bool_set_false:N \l__chemmacros_orbital_type_p_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
- \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
- }
-
-\chemmacros_define_keys:nn {orbital/s}
- {
- phase .choice: ,
- phase / + .code:n =
- { \bool_set_true:N \l__chemmacros_orbital_s_phase_bool } ,
- phase / - .code:n =
- { \bool_set_false:N \l__chemmacros_orbital_s_phase_bool } ,
- scale .tl_set:N = \l__chemmacros_orbital_s_scale_tl ,
- color .tl_set:N = \l__chemmacros_orbital_s_color_tl
- }
-
-\cs_new_protected:Npn \__chemmacros_orbital_s_draw:n #1
- {
- \chemmacros_set_keys:nn {orbital/s} {#1}
- \bool_if:NTF \l__chemmacros_orbital_s_phase_bool
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_s_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_s_phase_color_tl
- { \tl_use:N \l__chemmacros_orbital_s_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_s_phase_color_tl
- { \tl_use:N \l__chemmacros_orbital_s_color_tl ! 90 }
- }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_s_phase_color_tl
- { black ! 5 }
- }
- \chemmacros_tikz_picture:xn
- { \__chemmacros_orbital_options: }
- {
- \chemmacros_tikz_shade:x
- { ball~color = \exp_not:V \l__chemmacros_orbital_s_phase_color_tl }
- (0pt,0pt) circle (\exp_not:V \l__chemmacros_orbital_s_scale_tl * .6em) ;
- }
- }
-
-% --------------------------------------------------------------------------
-% p-orbitals
-\cs_new_protected:Npn \__chemmacros_orbital_type_p:
- {
- \bool_set_false:N \l__chemmacros_orbital_type_s_bool
- \bool_set_true:N \l__chemmacros_orbital_type_p_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
- \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
- }
-
-\chemmacros_define_keys:nn {orbital/p}
- {
- phase .choice: ,
- phase / + .code:n =
- { \bool_set_true:N \l__chemmacros_orbital_p_phase_bool } ,
- phase / - .code:n =
- { \bool_set_false:N \l__chemmacros_orbital_p_phase_bool } ,
- scale .tl_set:N = \l__chemmacros_orbital_p_scale_tl ,
- angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
- color .tl_set:N = \l__chemmacros_orbital_p_color_tl ,
- half .bool_set:N = \l__chemmacros_orbital_p_half_bool ,
- half .default:n = true
- }
-
-\cs_new_protected:Npn \__chemmacros_orbital_p_draw:n #1
- {
- \chemmacros_set_keys:nn {orbital/p} {#1}
- \bool_if:NTF \l__chemmacros_orbital_p_phase_bool
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_p_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_p_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_p_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_p_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_p_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_p_mphase_color_tl
- { black ! 5 }
-
- }
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_p_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_p_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_p_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_p_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_p_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_p_pphase_color_tl
- { black ! 5 }
- }
- \chemmacros_tikz_picture:xn
- { \__chemmacros_orbital_options: }
- {
- \chemmacros_tikz_shadedraw:x
- {
- draw = \exp_not:V \l__chemmacros_orbital_p_pphase_color_tl ,
- ball~color = \exp_not:V \l__chemmacros_orbital_p_pphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_p_scale_tl * 2em ,
- \l__chemmacros_orbital_p_scale_tl * 2em
- )
- and ++
- (
- \l__chemmacros_orbital_p_scale_tl * 2em ,
- \l__chemmacros_orbital_p_scale_tl * 2em
- )
- .. (0pt,0pt);
- \bool_if:NF \l__chemmacros_orbital_p_half_bool
- {
- \chemmacros_tikz_shadedraw:x
- {
- draw = \exp_not:V \l__chemmacros_orbital_p_mphase_color_tl ,
- ball~color = \exp_not:V \l__chemmacros_orbital_p_mphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_p_scale_tl * 2em ,
- - \l__chemmacros_orbital_p_scale_tl * 2em
- )
- and ++
- (
- \l__chemmacros_orbital_p_scale_tl * 2em ,
- - \l__chemmacros_orbital_p_scale_tl * 2em
- )
- .. (0pt,0pt);
- }
- }
- }
-
-% --------------------------------------------------------------------------
-% sp-orbitals
-\cs_new_protected:Npn \__chemmacros_orbital_type_sp:
- {
- \bool_set_false:N \l__chemmacros_orbital_type_s_bool
- \bool_set_false:N \l__chemmacros_orbital_type_p_bool
- \bool_set_true:N \l__chemmacros_orbital_type_sp_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
- \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
- }
-
-\chemmacros_define_keys:nn {orbital/sp}
- {
- phase .choice: ,
- phase / + .code:n =
- { \bool_set_true:N \l__chemmacros_orbital_sp_phase_bool } ,
- phase / - .code:n =
- { \bool_set_false:N \l__chemmacros_orbital_sp_phase_bool } ,
- scale .tl_set:N = \l__chemmacros_orbital_sp_scale_tl ,
- angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
- color .tl_set:N = \l__chemmacros_orbital_sp_color_tl
- }
-
-\cs_new_protected:Npn \__chemmacros_orbital_sp_draw:n #1
- {
- \chemmacros_set_keys:nn {orbital/sp} {#1}
- \bool_if:NTF \l__chemmacros_orbital_sp_phase_bool
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_sp_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_sp_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sp_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_sp_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sp_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_sp_mphase_color_tl
- { black ! 5 }
-
- }
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_sp_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_sp_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sp_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_sp_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sp_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_sp_pphase_color_tl
- { black ! 5 }
- }
- \chemmacros_tikz_picture:xn
- { \__chemmacros_orbital_options: }
- {
- \chemmacros_tikz_shadedraw:x
- {
- draw = \exp_not:V \l__chemmacros_orbital_sp_pphase_color_tl ,
- ball~color = \exp_not:V \l__chemmacros_orbital_sp_pphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_sp_scale_tl * 2em ,
- \l__chemmacros_orbital_sp_scale_tl * 2em
- )
- and ++
- (
- \l__chemmacros_orbital_sp_scale_tl * 2em ,
- \l__chemmacros_orbital_sp_scale_tl * 2em
- )
- .. (0pt,0pt);
- \chemmacros_tikz_shadedraw:x
- {
- draw = \exp_not:V \l__chemmacros_orbital_sp_mphase_color_tl ,
- ball~color = \exp_not:V \l__chemmacros_orbital_sp_mphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_sp_scale_tl * .6em ,
- - \l__chemmacros_orbital_sp_scale_tl * .6em
- )
- and ++
- (
- \l__chemmacros_orbital_sp_scale_tl * .6em ,
- - \l__chemmacros_orbital_sp_scale_tl * .6em
- )
- .. (0pt,0pt);
- }
- }
-
-% --------------------------------------------------------------------------
-% sp2-orbitals
-\cs_new_protected:Npn \__chemmacros_orbital_type_sptwo:
- {
- \bool_set_false:N \l__chemmacros_orbital_type_s_bool
- \bool_set_false:N \l__chemmacros_orbital_type_p_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
- \bool_set_true:N \l__chemmacros_orbital_type_sptwo_bool
- \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
- }
-
-\chemmacros_define_keys:nn {orbital/sp2}
- {
- phase .choice: ,
- phase / + .code:n =
- { \bool_set_true:N \l__chemmacros_orbital_sptwo_phase_bool } ,
- phase / - .code:n =
- { \bool_set_false:N \l__chemmacros_orbital_sptwo_phase_bool } ,
- scale .tl_set:N = \l__chemmacros_orbital_sptwo_scale_tl ,
- angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
- color .tl_set:N = \l__chemmacros_orbital_sptwo_color_tl
- }
-
-\cs_new_protected:Npn \__chemmacros_orbital_sptwo_draw:n #1
- {
- \chemmacros_set_keys:nn {orbital/sp2} {#1}
- \bool_if:NTF \l__chemmacros_orbital_sptwo_phase_bool
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_sptwo_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_sptwo_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_sptwo_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_sptwo_mphase_color_tl
- { black ! 5 }
-
- }
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_sptwo_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_sptwo_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_sptwo_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_sptwo_pphase_color_tl
- { black ! 5 }
- }
- \chemmacros_tikz_picture:xn
- { \__chemmacros_orbital_options: }
- {
- \chemmacros_tikz_shadedraw:x
- {
- draw = \exp_not:V \l__chemmacros_orbital_sptwo_pphase_color_tl ,
- ball~color = \exp_not:V \l__chemmacros_orbital_sptwo_pphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_sptwo_scale_tl * 2em ,
- \l__chemmacros_orbital_sptwo_scale_tl * 2em
- )
- and ++
- (
- \l__chemmacros_orbital_sptwo_scale_tl * 2em ,
- \l__chemmacros_orbital_sptwo_scale_tl * 2em
- )
- .. (0pt,0pt);
- \chemmacros_tikz_shadedraw:x
- {
- draw = \exp_not:V \l__chemmacros_orbital_sptwo_mphase_color_tl ,
- ball~color = \exp_not:V \l__chemmacros_orbital_sptwo_mphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_sptwo_scale_tl * .8em ,
- - \l__chemmacros_orbital_sptwo_scale_tl * .8em
- )
- and ++
- (
- \l__chemmacros_orbital_sptwo_scale_tl * .8em ,
- - \l__chemmacros_orbital_sptwo_scale_tl * .8em
- )
- .. (0pt,0pt);
- }
- }
-
-% --------------------------------------------------------------------------
-% sp3-orbitals
-\cs_new_protected:Npn \__chemmacros_orbital_type_spthree:
- {
- \bool_set_false:N \l__chemmacros_orbital_type_s_bool
- \bool_set_false:N \l__chemmacros_orbital_type_p_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
- \bool_set_true:N \l__chemmacros_orbital_type_spthree_bool
- }
-
-\chemmacros_define_keys:nn {orbital/sp3}
- {
- phase .choice: ,
- phase / + .code:n =
- { \bool_set_true:N \l__chemmacros_orbital_spthree_phase_bool } ,
- phase / - .code:n =
- { \bool_set_false:N \l__chemmacros_orbital_spthree_phase_bool } ,
- scale .tl_set:N = \l__chemmacros_orbital_spthree_scale_tl ,
- angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
- color .tl_set:N = \l__chemmacros_orbital_spthree_color_tl
- }
-
-\cs_new_protected:Npn \__chemmacros_orbital_spthree_draw:n #1
- {
- \chemmacros_set_keys:nn {orbital/sp3} {#1}
- \bool_if:NTF \l__chemmacros_orbital_spthree_phase_bool
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_spthree_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_spthree_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_spthree_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_spthree_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_spthree_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_spthree_mphase_color_tl
- { black ! 5 }
-
- }
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_spthree_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_spthree_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_spthree_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_spthree_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_spthree_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_spthree_pphase_color_tl
- { black ! 5 }
- }
- \chemmacros_tikz_picture:xn
- { \__chemmacros_orbital_options: }
- {
- \chemmacros_tikz_shadedraw:x
- {
- draw = \exp_not:V \l__chemmacros_orbital_spthree_pphase_color_tl ,
- ball~color = \exp_not:V \l__chemmacros_orbital_spthree_pphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_spthree_scale_tl * 2em ,
- \l__chemmacros_orbital_spthree_scale_tl * 2em
- )
- and ++
- (
- \l__chemmacros_orbital_spthree_scale_tl * 2em ,
- \l__chemmacros_orbital_spthree_scale_tl * 2em
- )
- .. (0pt,0pt);
- \chemmacros_tikz_shadedraw:x
- {
- draw = \exp_not:V \l__chemmacros_orbital_spthree_mphase_color_tl ,
- ball~color = \exp_not:V \l__chemmacros_orbital_spthree_mphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_spthree_scale_tl * 1em ,
- - \l__chemmacros_orbital_spthree_scale_tl * 1em
- )
- and ++
- (
- \l__chemmacros_orbital_spthree_scale_tl * 1em ,
- - \l__chemmacros_orbital_spthree_scale_tl * 1em
- )
- .. (0pt,0pt);
- }
- }
-
-% --------------------------------------------------------------------------
-% main command
-\chemmacros_define_keys:nn {orbital}
- {
- overlay .bool_set:N = \l__chemmacros_orbital_overlay_bool ,
- overlay .default:n = true ,
- opacity .code:n =
- {
- \fp_compare:nTF { #1 = 1 }
- { \bool_set_false:N \l__chemmacros_orbital_opacity_bool }
- { \bool_set_true:N \l__chemmacros_orbital_opacity_bool }
- \fp_set:Nn \l__chemmacros_orbital_opacity_fp { #1 }
- }
- }
-
-\chemmacros_define_keys:nn {orbital/type}
- {
- s .code:n = { \__chemmacros_orbital_type_s: } ,
- p .code:n = { \__chemmacros_orbital_type_p: } ,
- sp .code:n = { \__chemmacros_orbital_type_sp: } ,
- sp2 .code:n = { \__chemmacros_orbital_type_sptwo: } ,
- sp3 .code:n = { \__chemmacros_orbital_type_spthree: }
- }
-
-\cs_new_protected:Npn \chemmacros_orbital:n #1
- {
- \bool_if:NT \l__chemmacros_orbital_type_s_bool
- { \__chemmacros_orbital_s_draw:n { #1 } }
- \bool_if:NT \l__chemmacros_orbital_type_p_bool
- { \__chemmacros_orbital_p_draw:n { #1 } }
- \bool_if:NT \l__chemmacros_orbital_type_sp_bool
- { \__chemmacros_orbital_sp_draw:n { #1 } }
- \bool_if:NT \l__chemmacros_orbital_type_sptwo_bool
- { \__chemmacros_orbital_sptwo_draw:n { #1 } }
- \bool_if:NT \l__chemmacros_orbital_type_spthree_bool
- { \__chemmacros_orbital_spthree_draw:n { #1 } }
- }
-
-\NewDocumentCommand \orbital {om}
- {
- \group_begin:
- \chemmacros_set_keys:nn {orbital/type} {#2}
- \IfNoValueTF {#1}
- { \chemmacros_orbital:n { } }
- { \chemmacros_orbital:n {#1} }
- \group_end:
- }
-% --------------------------------------------------------------------------
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.particles.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.particles.code.tex
deleted file mode 100644
index 24a0ac2e37b..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.particles.code.tex
+++ /dev/null
@@ -1,141 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `particles'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{particles}{2016/04/02 particles}
-
-\chemmacros_load_modules:n {charges,chemformula}
-
-% --------------------------------------------------------------------------
-% particles
-\cs_new_protected:Nn \chemmacros_define_particle:Nn
- {
- \tl_set_rescan:Nnn \l__chemmacros_tmpa_tl { \ExplSyntaxOff } {#2}
- \use:x
- {
- \cs_set_protected:Npn \exp_not:N #1
- { \chemmacros_chemformula:n { \exp_not:V \l__chemmacros_tmpa_tl } }
- }
- }
-
-\NewChemMacroset {Particle} {mm}
- { \chemmacros_define_particle:Nn #1 {#2} }
-
-% --------------------------------------------------------------------------
-% nucleophiles
-\cs_new_protected:Npn \chemmacros_elpair:n #1
- {
- \bool_if:NTF \l__chemmacros_elpair_dots_bool
- { \chlewis { 0: } {#1} }
- { \chlewis { 0| } {#1} }
- }
-
-\bool_new:N \l__chemmacros_nucleophile_elpair_bool
-\bool_new:N \l__chemmacros_elpair_dots_bool
-
-\ChemCompatibilityFrom{5.3}
-\dim_new:N \l__chemmacros_nucleophile_dim
-\dim_set:Nn \l__chemmacros_nucleophile_dim { .1em }
-
-\chemmacros_define_keys:nn {particles}
- {
- space .dim_set:N = \l__chemmacros_nucleophile_dim
- }
-\EndChemCompatibility
-
-\chemmacros_define_keys:nn {particles}
- {
- elpair .choice: ,
- elpair / false .code:n =
- { \bool_set_false:N \l__chemmacros_nucleophile_elpair_bool } ,
- elpair / dots .code:n =
- {
- \bool_set_true:N \l__chemmacros_nucleophile_elpair_bool
- \bool_set_true:N \l__chemmacros_elpair_dots_bool
- } ,
- elpair / dash .code:n =
- {
- \bool_set_true:N \l__chemmacros_nucleophile_elpair_bool
- \bool_set_false:N \l__chemmacros_elpair_dots_bool
- } ,
- elpair .default:n = dots
- }
-
-\cs_new_protected:Npn \chemmacros_declare_nucleophile:Nn #1#2
- {
- \cs_set_protected:cpn {__chemmacros_ \chemmacros_remove_backslash:N #1:}
- {
- \bool_if:NTF \l__chemmacros_nucleophile_elpair_bool
- {
- \chemmacros_elpair:n { #2 }
- \chemmacros_if_compatibility:nnT {>=} {5.3}
- { \skip_horizontal:N \l__chemmacros_nucleophile_dim }
- \chemmacros_chemformula:n { {}^{-} }
- }
- { \chemmacros_chemformula:n { #2^{-} } }
- }
- \DeclareDocumentCommand #1 {o}
- {
- \group_begin:
- \IfNoValueF {##1}
- { \chemmacros_set_keys:nn {particles} {##1} }
- \use:c {__chemmacros_ \chemmacros_remove_backslash:N #1:}
- \group_end:
- }
- }
-
-\NewChemMacroset {Nucleophile} {mm}
- { \chemmacros_declare_nucleophile:Nn #1 {#2} }
-
-% --------------------------------------------------------------------------
-% particles:
-\NewChemParticle \el { e^- }
-\NewChemParticle \prt { p^+ }
-\NewChemParticle \ntr { n^0 }
-
-% ions, molecules
-% proton, hydroxide, hydronium/oxonium, water:
-\NewChemParticle \Hpl { H^+ }
-\NewChemParticle \Hyd { OH^- }
-\NewChemParticle \Oxo { H_3O^+ }
-\NewChemParticle \water { H_2O }
-
-% electrophile:
-\NewChemParticle \El { E^+ }
-
-% nucleophiles:
-\NewChemNucleophile \Nuc {Nu}
-\NewChemNucleophile \ba {ba}
-
-\ChemCompatibilityTo{5.3}
- \DeclareChemDeprecated \Hto \Oxo
- \DeclareChemDeprecated \Nu \Nuc
-\EndChemCompatibility
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-2016/01/13 - new option particles/space
-2016/04/02 - adapt to formula methods `chemist' and `chemfig'
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.phases.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.phases.code.tex
deleted file mode 100644
index 49b19ee9c85..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.phases.code.tex
+++ /dev/null
@@ -1,140 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `phases'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{phases}{2016/05/31 phase descriptors}
-
-\chemmacros_load_module:n {chemformula}
-
-\bool_new:N \l__chemmacros_phases_sub_bool
-\dim_new:N \l__chemmacros_phases_space_dim
-\dim_set:Nn \l__chemmacros_phases_space_dim { .1333 em }
-
-\chemmacros_define_keys:nn {phases}
- {
- pos .choice: ,
- pos / sub .code:n = \bool_set_true:N \l__chemmacros_phases_sub_bool ,
- pos / side .code:n = \bool_set_false:N \l__chemmacros_phases_sub_bool ,
- space .dim_set:N = \l__chemmacros_phases_space_dim
- }
-
-\NewChemMacroset {Phase} {mm}
- { \chemmacros_define_phase:Nn #1 {#2} }
-
-\ChemCompatibilityTo{5.7}
-\cs_new_protected:Npn \chemmacros_define_phase:Nn #1#2
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl { phase-\chemmacros_remove_backslash:N #1 }
- \exp_args:NV \@trnslt@declare@translation
- \l__chemmacros_tmpa_tl
- {fallback}
- {#2}
- \__chemmacros_define_phase:Nx #1
- { \exp_not:N \chemmacros_translate:n { \exp_not:V \l__chemmacros_tmpa_tl } }
- }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.7}
-\cs_new_protected:Npn \chemmacros_define_phase:Nn #1#2
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl { phase-\chemmacros_remove_backslash:N #1 }
- \chemmacros_declare_translation:Vnn
- \l__chemmacros_tmpa_tl
- {fallback}
- {#2}
- \__chemmacros_define_phase:Nx #1
- { \exp_not:N \chemmacros_translate:n { \exp_not:V \l__chemmacros_tmpa_tl } }
- }
-\EndChemCompatibility
-
-\cs_new_protected:Npn \__chemmacros_define_phase:Nn #1#2
- {
- \cs_if_exist:NF #1 { \cs_new:Npn #1 {} }
- \DeclareDocumentCommand #1 {o}
- { \chemmacros_phase:n { #2 \IfNoValueF {##1} {,~##1} } }
- }
-\cs_generate_variant:Nn \__chemmacros_define_phase:Nn { Nx }
-
-\cs_new_protected:Npn \chemmacros_phase:n #1
- {
- \mode_leave_vertical:
- \bool_if:NTF \l__chemmacros_phases_sub_bool
- { \chemformula_subscript:n { (#1) } }
- {
- \skip_horizontal:N \l__chemmacros_phases_space_dim
- \chemmacros_text:n { (#1) }
- }
- }
-
-% --------------------------------------------------------------------------
-\NewDocumentCommand \phase {m} { \chemmacros_phase:n {#1} }
-
-\NewChemPhase \sld {s}
-\NewChemPhase \lqd {l}
-\NewChemPhase \gas {g}
-\NewChemPhase \aq {aq}
-
-% --------------------------------------------------------------------------
-\ChemCompatibilityTo{5.6}
-\DeclareTranslation {English} {phase-sld} {s}
-\DeclareTranslation {German} {phase-sld} {f}
-
-\DeclareTranslation {English} {phase-lqd} {l}
-\DeclareTranslation {German} {phase-lqd} {f\/l}
-
-\DeclareTranslation {English} {phase-gas} {g}
-\DeclareTranslation {German} {phase-gas} {g}
-
-\DeclareTranslation {English} {phase-aq} {aq}
-\DeclareTranslation {German} {phase-aq} {aq}
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.6}
-\chemmacros_declare_translations:nn {phase-sld}
- {
- fallback = s ,
- German = f
- }
-
-\chemmacros_declare_translations:nn {phase-lqd}
- {
- fallback = l ,
- German = f\/l
- }
-
-\chemmacros_declare_translations:nn {phase-gas}
- { fallback = g }
-
-\chemmacros_declare_translations:nn {phase-aq}
- { fallback = aq }
-\EndChemCompatibility
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2015/06/09 - first version
-2016/04/27 - moved translations from lang module to phases module
-2016/05/31 - adapt to changes in `lang' module
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.polymers.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.polymers.code.tex
deleted file mode 100644
index 39a4e54fd94..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.polymers.code.tex
+++ /dev/null
@@ -1,182 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `polymers'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{polymers}{2018/03/02 polymers}
-
-\chemmacros_load_modules:n {nomenclature,tikz}
-
-% --------------------------------------------------------------------------
-% copolymers
-\NewChemIUPAC \copolymer { \textit {co} }
-\LetChemIUPAC \co \copolymer
-
-\NewChemIUPAC \statistical { \textit {stat} }
-\LetChemIUPAC \stat \statistical
-
-\NewChemIUPAC \random { \textit {ran} }
-\LetChemIUPAC \ran \random
-
-\NewChemIUPAC \alternating { \textit {alt} }
-\LetChemIUPAC \alt \alternating
-
-\NewChemIUPAC \periodic { \textit {per} }
-\LetChemIUPAC \per \periodic
-
-\NewChemIUPAC \block { \textit {block} }
-\NewChemIUPAC \graft { \textit {graft} }
-
-% --------------------------------------------------------------------------
-% non-linear (co)polymers
-\NewChemIUPAC \blend { \textit {blend} }
-\NewChemIUPAC \comb { \textit {comb} }
-
-\NewChemIUPAC \complex { \textit {compl} }
-\LetChemIUPAC \compl \complex
-
-\NewChemIUPAC \cyclic { \textit {cyclo} }
-\LetChemIUPAC \cyclo \cyclic
-
-\NewChemIUPAC \branch { \textit {branch} }
-\NewChemIUPAC \network { \textit {net} }
-\LetChemIUPAC \net \network
-
-\NewChemIUPAC \ipnetwork { \textit {ipn} }
-\LetChemIUPAC \ipn \ipnetwork
-
-\NewChemIUPAC \sipnetwork { \textit {sipn} }
-\LetChemIUPAC \sipn \sipnetwork
-
-\NewChemIUPAC \star { \textit {star} }
-
-% --------------------------------------------------------------------------
-
-\tl_new:N \l__chemmacros_polymer_delimiter_left_tl
-\tl_new:N \l__chemmacros_polymer_delimiter_right_tl
-
-\tl_new:N \l__chemmacros_polymer_subscript_tl
-\tl_new:N \l__chemmacros_polymer_superscript_tl
-
-\dim_new:N \l__chemmacros_polymer_delimiter_height_dim
-\dim_new:N \l__chemmacros_polymer_delimiter_depth_dim
-
-\cs_new_protected:Npn \__chemmacros_set_polymer_delimiters:NN #1#2
- {
- \tl_set:Nn \l__chemmacros_polymer_delimiter_left_tl {#1}
- \tl_set:Nn \l__chemmacros_polymer_delimiter_right_tl {#2}
- }
-
-% #1: height
-% #2: depth
-% #3: opening node
-% #4: closing node
-% #5: subscript
-% #6: superscript
-\cs_new_protected:Npn \chemmacros_make_polymer_braces:nnnnnn #1#2#3#4#5#6
- {
- \dim_set:Nn \l__chemmacros_polymer_delimiter_height_dim { (#1+#2)/2 }
- \dim_set:Nn \l__chemmacros_polymer_delimiter_depth_dim { (#1-#2)/2 }
- \chemmacros_tikz_picture:nn {remember~ picture, overlay }
- {
- \chemmacros_tikz_node:n
- { at = (#3) , yshift = \l__chemmacros_polymer_delimiter_depth_dim }
- {
- \c_math_toggle_token
- \tex_left:D \l__chemmacros_polymer_delimiter_left_tl
- \tex_vrule:D
- height \l__chemmacros_polymer_delimiter_height_dim
- depth \l__chemmacros_polymer_delimiter_height_dim
- width \c_zero_dim
- \tex_right:D .
- \c_math_toggle_token
- } ;
- \chemmacros_tikz_node:n
- { at = (#4) , yshift = \l__chemmacros_polymer_delimiter_depth_dim }
- {
- \c_math_toggle_token
- \tex_left:D .
- \tex_vrule:D
- height \l__chemmacros_polymer_delimiter_height_dim
- depth \l__chemmacros_polymer_delimiter_height_dim
- width \c_zero_dim
- \tex_right:D \l__chemmacros_polymer_delimiter_right_tl
- \c_math_subscript_token
- {
- \hbox_overlap_right:n
- {
- \chemmacros_if_compatibility:nnTF {>} {5.8b}
- { \smash {#5} }
- {#5}
- }
- }
- \c_math_superscript_token
- {
- \hbox_overlap_right:n
- {
- \chemmacros_if_compatibility:nnTF {>} {5.8b}
- { \smash {#6} }
- {#6}
- }
- }
- \c_math_toggle_token
- } ;
- }
- }
-\cs_generate_variant:Nn \chemmacros_make_polymer_braces:nnnnnn {nnnnVV}
-
-\chemmacros_define_keys:nn {polymers}
- {
- delimiters .code:n = \__chemmacros_set_polymer_delimiters:NN #1 ,
- delimiters .initial:n = [] ,
- superscript .tl_set:N = \l__chemmacros_polymer_superscript_tl ,
- subscript .tl_set:N = \l__chemmacros_polymer_subscript_tl ,
- subscript .initial:n = $n$
- }
-
-\NewDocumentCommand \makepolymerdelims {O{}momm}
- {
- \group_begin:
- \chemmacros_set_keys:nn {polymers} {#1}
- \IfNoValueTF {#3}
- {
- \chemmacros_make_polymer_braces:nnnnVV {#2} {#2} {#4} {#5}
- \l__chemmacros_polymer_subscript_tl
- \l__chemmacros_polymer_superscript_tl
- }
- {
- \chemmacros_make_polymer_braces:nnnnVV {#2} {#3} {#4} {#5}
- \l__chemmacros_polymer_subscript_tl
- \l__chemmacros_polymer_superscript_tl
- }
- \group_end:
- }
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2016/03/07 - first version
-2016/03/08 - \makepolymerdelims
-2018/03/02 - smash sub- and superscripts of polymer delimiters
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.reactions.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.reactions.code.tex
deleted file mode 100644
index 504a9a58b3d..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.reactions.code.tex
+++ /dev/null
@@ -1,445 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `reactions'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{reactions}{2020/02/02 reaction environments}
-
-\chemmacros_load_module:n {chemformula}
-
-\RequirePackage{mathtools}
-
-% --------------------------------------------------------------------------
-\cs_new_protected:Npn \__chemmacros_record_for_lor:nnnnn #1#2#3#4#5
- {
- \tl_if_eq:nnT {#1} {reaction}
- {
- \group_begin:
- % we need to prevent \Hy@make@anchor from being written to the lor
- % file:
- \bool_if:NT \l__chemmacros_hyperref_bool
- { \cs_set:Npn \Hy@make@anchor {} }
- \addcontentsline {lor} {reaction}
- {
- \tl_use:N \l__chemmacros_reaction_lorname_tl
- \tl_use:N \c_space_tl
- #2 #3 #4 #5
- \tl_use:N \g__chemmacros_reaction_description_tl
- }
- \tl_gclear:N \g__chemmacros_reaction_description_tl
- \group_end:
- }
- }
-
-% redefine mathtools' command \MT_define_tagform:nwnn to ensure we add an
-% entry to the list of reactions even if the user redefines the reaction tag
-% this should probably be done via patching...
-\AfterPackage* { mathtools }
- {
- \cs_set_protected:Npn \MT_define_tagform:nwnn #1[#2]#3#4
- {
- \@namedef{MT_tagform_#1:n}##1
- {
- % this is the original part:
- \maketag@@@{#3\ignorespaces#2{##1}\unskip\@@italiccorr#4}
- % this is added => this disturbs hyperref:
- \__chemmacros_record_for_lor:nnnnn
- {#1} {#3} {#2} {##1} {#4}
- }
- }
- }
-
-\tl_new:N \g__chemmacros_reaction_description_tl
-
-\cs_new_protected:Npn \chemmacros_add_reaction_description:n #1
- {
- \tl_if_blank:nF {#1}
- { \tl_gset:Nn \g__chemmacros_reaction_description_tl {:~#1} }
- }
-
-\NewDocumentCommand \AddRxnDesc {m}
- { \chemmacros_add_reaction_description:n {#1} }
-
-% define \listofreactions
-\tl_new:N \l__chemmacros_reaction_lorname_tl
-\tl_new:N \reactionlistname
-\tl_new:N \l__chemmacros_reaction_heading_tl
-
-\cs_new:Npn \__chemmacros_reaction_heading:n #1
- { \l__chemmacros_reaction_heading_tl {#1} }
-\cs_generate_variant:Nn \__chemmacros_reaction_heading:n { V }
-
-\ChemCompatibilityTo{5.6}
-\tl_set:Nn \l__chemmacros_reaction_lorname_tl
- { \chemmacros_translate:n {reaction} }
-\EndChemCompatibility
-\ChemCompatibilityFrom{5.6}
-\tl_set:Nn \l__chemmacros_reaction_lorname_tl
- { \chemmacros_translate:n {Reaction} }
-\EndChemCompatibility
-
-\tl_set:Nn \reactionlistname { \chemmacros_translate:n {list-of-reactions} }
-
-\chemmacros_define_keys:nn {reactions}
- {
- list-name .tl_set:N = \reactionlistname ,
- list-entry .tl_set:N = \l__chemmacros_reaction_lorname_tl ,
- }
-\ChemCompatibilityFrom{5.2}
-\chemmacros_define_keys:nn {reactions}
- {
- list-heading-cmd .code:n =
- \cs_set_protected:Npn \__chemmacros_reaction_heading:n ##1 {#1}
- }
-\EndChemCompatibility
-
-\cs_if_exist:NTF \chapter
- {
- \chemmacros_if_compatibility:nnTF {>=} {5.2}
- {
- \chemmacros_set_keys:nn {reactions}
- { list-heading-cmd = \chapter* {#1} }
- }
- { \cs_set_protected:Npn \__chemmacros_reaction_heading:n { \chapter* } }
- }
- {
- \chemmacros_if_compatibility:nnTF {>=} {5.2}
- {
- \chemmacros_set_keys:nn {reactions}
- { list-heading-cmd = \section* {#1} }
- }
- { \cs_set_protected:Npn \__chemmacros_reaction_heading:n { \section* } }
- }
-
-\cs_new_protected:Npn \listofreactions
- {
- \__chemmacros_reaction_heading:V \reactionlistname
- \@starttoc {lor}
- }
-
-\ChemCompatibilityTo{5.6}
-\cs_new_protected:Npn \l@reaction #1#2
- { \@dottedtocline {1} {1.5em} {2.3em} {#1} {#2} }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.6}
-\cs_new_eq:NN \l@reaction \l@figure
-
-\bool_new:N \l__chemmacros_reactions_tocbasic_bool
-\cs_if_exist:NT \KOMAClassName
- { \bool_set_true:N \l__chemmacros_reactions_tocbasic_bool }
-
-\tl_new:N \l__chemmacros_reactions_tag_open_tl
-\tl_new:N \l__chemmacros_reactions_tag_close_tl
-\tl_new:N \l__chemmacros_reactions_before_tag_tl
-
-\chemmacros_define_keys:nn {reactions}
- {
- tocbasic .bool_set:N = \l__chemmacros_reactions_tocbasic_bool ,
- tag-open .tl_set:N = \l__chemmacros_reactions_tag_open_tl ,
- tag-open .initial:n = \{ ,
- tag-close .tl_set:N = \l__chemmacros_reactions_tag_close_tl ,
- tag-close .initial:n = \} ,
- before-tag .tl_set:N = \l__chemmacros_reactions_before_tag_tl
- }
-
-\AtEndPreamble
- {
- \bool_lazy_or:nnT
- { \chemmacros_if_package_loaded_p:n {tocbasic} }
- { \l__chemmacros_reactions_tocbasic_bool }
- {
- \RequirePackage {tocbasic}
- \addtotoclist [float] {lor}
- \cs_set_protected:Npn \listofreactions { \listoftoc {lor} }
- \cs_new:Npn \listoflorname { \reactionlistname }
- }
- }
-
-\ChemCleverefSupport {reaction}
- { \chemmacros_translate:n {reaction} }
- [ \chemmacros_translate:n {Reaction} ]
- { \chemmacros_translate:n {reactions} }
- [ \chemmacros_translate:n {Reactions} ]
-
-\AfterPackage* {cleveref}
- {
- \creflabelformat {reaction}
- {
- #2
- \l__chemmacros_reactions_tag_open_tl
- #1
- \l__chemmacros_reactions_tag_close_tl
- #3
- }
- }
-
-\ChemFancyrefSupport {rct}
- { \chemmacros_translate:n {reaction} }
- [ \chemmacros_translate:n {Reaction} ]
-\EndChemCompatibility
-
-% create new tagform
-\ChemCompatibilityTo{5.6}
-\newtagform {reaction} {\{} {\}}
-\EndChemCompatibility
-\ChemCompatibilityFrom{5.6}
-\newtagform {reaction}
- [\l__chemmacros_reactions_before_tag_tl]
- {\l__chemmacros_reactions_tag_open_tl}
- {\l__chemmacros_reactions_tag_close_tl}
-\EndChemCompatibility
-\newcounter {chemmacros_save_reaction}
-\newcounter {reaction}
-
-\ChemCompatibilityTo{5.6}
-\cs_new_protected:Npn \__chemmacros_begin_reaction:
- {
- % create individual names for `hyperref':
- \bool_if:NT \l__chemmacros_hyperref_bool
- {
- \cs_set:Npn \theHequation
- { R . \theHsection . \arabic {reaction} }
- }
- % enable labelformat `reaction':
- \bool_if:NT \l__chemmacros_varioref_bool
- { \cs_set_eq:NN \p@equation \p@reaction }
- \setcounter {chemmacros_save_reaction} { \value {equation} }
- \setcounter {equation} { \value {reaction} }
- \usetagform {reaction}
- }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.6}
-\cs_new_protected:Npn \__chemmacros_begin_reaction:
- {
- \patchcmd \thereaction {reaction} {equation} {} {}
- \cs_set_eq:NN \theequation \thereaction
- \cs_set_eq:NN \r@equation \r@reaction
- \cs_set_eq:NN \p@equation \p@reaction
- \cs_set:Npn \theHequation { R . \theHsection . \theequation }
- \setcounter {chemmacros_save_reaction} { \value {equation} }
- \setcounter {equation} { \value {reaction} }
- \chemmacros_if_package_loaded:nT {cleveref}
- { \crefalias {equation} {reaction} }
- \usetagform {reaction}
- }
-\EndChemCompatibility
-
-% switch back to equation tags
-\cs_new_protected:Npn \__chemmacros_end_reaction:
- {
- \setcounter {reaction} { \value {equation} }
- \setcounter {equation} { \value {chemmacros_save_reaction} }
- }
-
-\tl_new:N \l__chemmacros_reactions_args_tl
-
-\cs_new_protected:Npn \__chemmacros_reactions_build_args:n #1
- { \tl_put_right:Nn \l__chemmacros_reactions_args_tl { {## #1} } }
-
-\cs_new_protected:Npn \chemmacros_define_reaction:nnn #1#2#3
- {
- \int_compare:nNnT {#3+0} > {0}
- {
- \tl_clear:N \l__chemmacros_reactions_args_tl
- \int_step_function:nnnN {2} {1} {#3+1} \__chemmacros_reactions_build_args:n
- }
- \chemmacros_declare_reaction_env:nnnV {#1} {#2} {#3} \l__chemmacros_reactions_args_tl
- }
-
-% #1: chem
-% #2: math
-% #3: args number
-% #4: argument list ({#2}{#3}...)
-\cs_new_protected:Npn \chemmacros_declare_reaction_env:nnnn #1#2#3#4
- {
- \exp_args:Nnx \DeclareDocumentEnvironment {#1}
- { \int_compare:nT { #3+0 = 0 } {!} O{} \prg_replicate:nn {#3+0} {m} }
- {
- \chemmacros_add_reaction_description:n {##1}
- \__chemmacros_begin_reaction:
- \chemmacros_reaction_read:nnw {#2} {#4}
- }
- {
- \__chemmacros_end_reaction:
- \ignorespacesafterend
- }
- }
-\cs_generate_variant:Nn \chemmacros_declare_reaction_env:nnnn {nnnV}
-
-\ChemCompatibilityTo{5.6}
-\cs_new_protected:Npn \chemmacros_reaction_read:nnw #1#2#3 \end
- {
- \begin{#1}#2
- \chemmacros_reaction:n {#3}
- \end{#1}
- \end
- }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.6}
-\cs_new_protected:Npn \chemmacros_reaction_read:nnw #1#2#3 \end
- {
- \tl_clear:N \l__chemmacros_tmpa_tl
- \seq_clear:N \l__chemmacros_tmpc_seq
- \seq_set_split:Nnn \l__chemmacros_tmpa_seq {\\} {#3}
- \int_set:Nn \l__chemmacros_tmpa_int
- { \seq_count:N \l__chemmacros_tmpa_seq }
- \int_zero:N \l__chemmacros_tmpb_int
- \seq_map_inline:Nn \l__chemmacros_tmpa_seq
- {
- \int_incr:N \l__chemmacros_tmpb_int
- \seq_clear:N \l__chemmacros_tmpc_seq
- \seq_set_split:Nnn \l__chemmacros_tmpb_seq {&} {##1}
- \seq_map_inline:Nn \l__chemmacros_tmpb_seq
- {
- \seq_put_right:Nn \l__chemmacros_tmpc_seq
- { \chemmacros_reaction:n {####1} }
- }
- \tl_put_right:Nx \l__chemmacros_tmpa_tl
- { \seq_use:Nn \l__chemmacros_tmpc_seq {&} }
- \int_compare:nF
- { \l__chemmacros_tmpa_int = \l__chemmacros_tmpb_int }
- { \tl_put_right:Nn \l__chemmacros_tmpa_tl {\\} }
- }
- \chemmacros_reaction_write:nnV {#1} {#2} \l__chemmacros_tmpa_tl
- \end
- }
-
-\cs_new_protected:Npn \chemmacros_reaction_write:nnn #1#2#3
- {
- \begin{#1}#2
- #3
- \end{#1}
- }
-\cs_generate_variant:Nn \chemmacros_reaction_write:nnn { nnV }
-\EndChemCompatibility
-
-\NewChemMacroset* {Reaction} {mO{}m}
- { \chemmacros_define_reaction:nnn {#1} {#3} {#2} }
-
-\NewChemReaction {reaction} {equation}
-\NewChemReaction {reaction*} {equation*}
-\NewChemReaction {reactions} {align}
-\NewChemReaction {reactions*} {align*}
-
-% --------------------------------------------------------------------------
-\ChemCompatibilityTo{5.6}
-\DeclareTranslationFallback {list-of-reactions} {List~ of~ Reactions}
-\DeclareTranslation {English} {list-of-reactions} {List~ of~ Reactions}
-\DeclareTranslation {German} {list-of-reactions} {Reaktionsverzeichnis}
-\DeclareTranslation {Italian} {list-of-reactions} {Elenco~ delle~ reazioni}
-\DeclareTranslation {French} {list-of-reactions} {Table~ des~ r\'{e}actions}
-\DeclareTranslation {Dutch} {list-of-reactions} {Lijst~ van~ reacties}
-
-\DeclareTranslationFallback {reaction} {Reaction}
-\DeclareTranslation {English} {reaction} {Reaction}
-\DeclareTranslation {German} {reaction} {Reaktion}
-\DeclareTranslation {Italian} {reaction} {Reazione}
-\DeclareTranslation {French} {reaction} {R\'{e}action}
-\DeclareTranslation {Dutch} {reaction} {Reactie}
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.6}
-\chemmacros_declare_translations:nn {list-of-reactions}
- {
- fallback = List~ of~ Reactions ,
- English = List~ of~ Reactions ,
- German = Reaktionsverzeichnis ,
- Italian = Elenco~ delle~ reazioni ,
- French = Table~ des~ r\'{e}actions ,
- Dutch = Lijst~ van~ reacties ,
- Norwegian = Reaksjonsliste ,
- Nynorsk = Reaksjonsliste
- }
-
-\chemmacros_declare_translations:nn {reaction}
- {
- fallback = reaction ,
- English = reaction ,
- German = Reaktion ,
- Italian = reazione ,
- French = r\'{e}action ,
- Dutch = reactie ,
- Norwegian = reaksjon ,
- Nynorsk = reaksjon
- }
-
-\chemmacros_declare_translations:nn {reactions}
- {
- fallback = reactions ,
- English = reactions ,
- German = Reaktionen ,
- Italian = reazioni ,
- French = r\'{e}actions ,
- Dutch = reacties ,
- Norwegian = reaksjoner ,
- Nynorsk = reaksjonar
- }
-
-\chemmacros_declare_translations:nn {Reaction}
- {
- fallback = Reaction ,
- English = Reaction ,
- German = Reaktion ,
- Italian = Reazione ,
- French = R\'{e}action ,
- Dutch = Reactie ,
- Norwegian = Reaksjon ,
- Nynorsk = Reaksjon
- }
-
-\chemmacros_declare_translations:nn {Reactions}
- {
- fallback = Reactions ,
- English = Reactions ,
- German = Reaktionen ,
- Italian = Reazioni ,
- French = R\'{e}actions ,
- Dutch = Reacties ,
- Norwegian = Reaksjoner ,
- Nynorsk = Reaksjonar
- }
-\EndChemCompatibility
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2015/09/15 - adapt to `method' option => do not use chemformula's macros
- directly
-2015/10/14 - new option `list-heading-cmd'
-2016/02/09 - added \ignorespacesafterend to environments
-2016/03/17 - tocbasic integration of lor
- - add missing compatibility check for the usage of the
- `list-heading-cmd' option
-2016/04/02 - adapt to new formula methods
-2016/04/27 - correct \__chemmacros_begin_reaction: so tags obey \thereaction
- - add cleveref support
- - add fancyref support
- - moved translations from lang module to reactions module
-2016/05/04 - options `tag-open', `tag-close' and `before-tag'
-2019/09/23 - added Norwegian translations
-2019/09/27 - change `O{}' argument of reactions into `!O{}'
-2020/02/02 - lazy boolean evaluation
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.redox.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.redox.code.tex
deleted file mode 100644
index c012a73b10c..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.redox.code.tex
+++ /dev/null
@@ -1,458 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `redox'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{redox}{2020/02/02 oxidation numbers, redox reactions}
-
-\chemmacros_load_modules:n {tikz,xfrac}
-
-\RequirePackage{mathtools,relsize}
-
-\msg_new:nnn {chemmacros} {redox}
- { \token_to_str:N #1 \c_space_tl : ~ #2 ~ \msg_line_context: . }
-
-
-% --------------------------------------------------------------------------
-% oxidation numbers
-% \ox{<number>,<atom>}
-\bool_new:N \l__chemmacros_ox_sign_bool
-\bool_new:N \l__chemmacros_ox_integer_bool
-\bool_new:N \l__chemmacros_ox_explicit_sign_bool
-\ChemCompatibilityFrom{5.2}
-\bool_new:N \l__chemmacros_ox_explicit_zero_sign_bool
-\EndChemCompatibility
-\bool_new:N \l__chemmacros_ox_format_roman_bool
-\bool_new:N \l__chemmacros_ox_decimal_marker_comma_bool
-\bool_new:N \l__chemmacros_ox_parse_bool
-\bool_new:N \l__chemmacros_ox_side_bool
-\bool_new:N \l__chemmacros_ox_super_bool
-\bool_new:N \l__chemmacros_ox_top_bool
-\bool_new:N \l__chemmacros_ox_align_center_bool
-
-\ChemCompatibilityFrom{5.11}
-\tl_new:N \l__chemmacros_ox_format_tl
-\EndChemCompatibility
-
-\int_new:N \l__chemmacros_ox_number_int
-\fp_new:N \l__chemmacros_ox_number_fp
-
-\cs_new_protected:Npn \__chemmacros_ox_format:n #1
- {
- \chemmacros_if_compatibility:nnTF {>=} {5.11}
- { { \l__chemmacros_ox_format_tl {#1} } }
- { \use:n {#1} }
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_process_number:n #1
- {
- \bool_if:NTF \l__chemmacros_ox_parse_bool
- {
- \tl_if_in:nnTF {#1} { / }
- { \__chemmacros_ox_fraction:w #1 \q_stop }
- {
- \__chemmacros_ox_sign:n {#1}
- \__chemmacros_ox_value:n {#1}
- }
- }
- {#1}
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_fraction:w #1/#2 \q_stop
- {
- \group_begin:
- \bool_set_false:N \l__chemmacros_ox_format_roman_bool
- \__chemmacros_ox_sign:n {#1}
- \bool_if:NTF \l__chemmacros_ox_side_bool
- { \chemmacros_ox_text_frac:nn }
- { \chemmacros_ox_super_frac:nn }
- { \__chemmacros_ox_value:n {#1} }
- {#2}
- \group_end:
- }
-
-\ChemCompatibilityTo{5.4}
-\cs_new_protected:Npn \__chemmacros_ox_sign:n #1
- {
- \bool_lazy_and:nnT
- { \fp_compare_p:n { #1 > 0 } }
- { \l__chemmacros_ox_explicit_sign_bool }
- { \c_math_toggle_token + \c_math_toggle_token }
- \bool_lazy_and:nnT
- { \fp_compare_p:n { #1 = 0 } }
- { \l__chemmacros_ox_explicit_sign_bool }
- { \c_math_toggle_token \pm \c_math_toggle_token }
- \fp_compare:nT { #1 < 0 }
- { \c_math_toggle_token - \c_math_toggle_token }
- }
-\EndChemCompatibility
-\ChemCompatibilityFrom{5.4}
-\cs_new_protected:Npn \__chemmacros_ox_sign:n #1
- {
- \bool_lazy_and:nnT
- { \fp_compare_p:n { #1 > 0 } }
- { \l__chemmacros_ox_explicit_sign_bool }
- { \c_math_toggle_token + \c_math_toggle_token }
- \bool_lazy_all:nT
- {
- { \fp_compare_p:n { #1 = 0 } }
- { \l__chemmacros_ox_explicit_sign_bool }
- { \l__chemmacros_ox_explicit_zero_sign_bool }
- }
- { \c_math_toggle_token \pm \c_math_toggle_token }
- \fp_compare:nT { #1 < 0 }
- { \c_math_toggle_token - \c_math_toggle_token }
- }
-\EndChemCompatibility
-
-\cs_new_protected:Npn \__chemmacros_ox_value:n #1
- {
- \fp_set:Nn \l__chemmacros_ox_number_fp { abs(#1) }
- \__chemmacros_ox_is_integer:n { \l__chemmacros_ox_number_fp }
- \bool_if:NTF \l__chemmacros_ox_format_roman_bool
- { \__chemmacros_fp_to_Roman:n { \l__chemmacros_ox_number_fp } }
- {
- \bool_if:NTF \l__chemmacros_ox_integer_bool
- {
- \c_math_toggle_token
- \__chemmacros_fp_to_arabic:n { \l__chemmacros_ox_number_fp }
- \c_math_toggle_token
- }
- {
- \c_math_toggle_token
- \fp_use:N \l__chemmacros_ox_number_fp
- \c_math_toggle_token
- }
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_is_integer:n #1
- {
- \fp_compare:nNnTF {#1} = { round((#1) + 1 , 0 ) - 1 }
- { \bool_set_true:N \l__chemmacros_ox_integer_bool }
- {
- \bool_set_false:N \l__chemmacros_ox_integer_bool
- \bool_set_false:N \l__chemmacros_ox_format_roman_bool
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_fp_to_Roman:n #1
- {
- \group_begin:
- \fp_compare:nNnTF {#1} = { 0 }
- {0}
- { \int_to_Roman:n { \fp_to_int:n {#1} } }
- \group_end:
- }
-
-\cs_new_protected:Npn \__chemmacros_fp_to_arabic:n #1
- {
- \group_begin:
- \bool_if:NTF \l__chemmacros_ox_decimal_marker_comma_bool
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl { \fp_to_decimal:n {#1} }
- \tl_replace_once:Nnn \l__chemmacros_tmpa_tl {.} { {,} }
- \tl_use:N \l__chemmacros_tmpa_tl
- }
- { \fp_to_decimal:n {#1} }
- \group_end:
- }
-
-\tl_new:N \l__chemmacros_ox_side_connect_tl
-
-\cs_new_protected:Npn \__chemmacros_ox_write:nn #1#2
- {
- \tl_if_blank:nT {#1}
- { \msg_error:nnn {chemmacros} {redox} {\ox} {oxidation~number~missing} }
- \tl_if_blank:nT {#2}
- { \msg_error:nnn {chemmacros} {redox} {\ox} {oxidation-atom~missing} }
- \hbox_set:Nn \l__chemmacros_tmpa_box
- {
- \chemmacros_text:n
- {
- \__chemmacros_ox_format:n
- { \relsize {-3} \__chemmacros_ox_process_number:n {#1} }
- }
- }
- \hbox_set:Nn \l__chemmacros_tmpb_box { \chemmacros_chemformula:n {#2} }
- \chemmacros_math:n
- {
- \bool_if:NT \l__chemmacros_ox_super_bool
- {
- \box_use:N \l__chemmacros_tmpb_box
- \c_math_superscript_token { \box_use:N \l__chemmacros_tmpa_box }
- }
- \bool_if:NT \l__chemmacros_ox_side_bool
- {
- \chemmacros_text:n
- {
- \box_use:N \l__chemmacros_tmpb_box
- \tl_use:N \l__chemmacros_ox_side_connect_tl
- (
- \__chemmacros_ox_format:n
- { \__chemmacros_ox_process_number:n {#1} }
- )
- }
- }
- \bool_if:NT \l__chemmacros_ox_top_bool
- {
- \bool_if:NF \l__chemmacros_ox_align_center_bool
- {
- \hbox_set_to_wd:Nnn \l__chemmacros_tmpa_box
- { \box_wd:N \l__chemmacros_tmpb_box }
- { \rlap { \hbox_unpack:N \l__chemmacros_tmpa_box } \hfil }
- }
- \overset
- {
- \bool_if:NTF \l__chemmacros_ox_align_center_bool
- { \clap }
- { \use:n }
- { \box_use:N \l__chemmacros_tmpa_box }
- }
- { \box_use:N \l__chemmacros_tmpb_box }
- }
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_pos_top:
- {
- \bool_set_true:N \l__chemmacros_ox_top_bool
- \bool_set_false:N \l__chemmacros_ox_super_bool
- \bool_set_false:N \l__chemmacros_ox_side_bool
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_pos_super:
- {
- \bool_set_false:N \l__chemmacros_ox_top_bool
- \bool_set_true:N \l__chemmacros_ox_super_bool
- \bool_set_false:N \l__chemmacros_ox_side_bool
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_pos_side:
- {
- \bool_set_false:N \l__chemmacros_ox_top_bool
- \bool_set_false:N \l__chemmacros_ox_super_bool
- \bool_set_true:N \l__chemmacros_ox_side_bool
- }
-
-\chemmacros_define_keys:nn {redox}
- {
- pos .choice: ,
- pos / top .code:n = \__chemmacros_ox_pos_top: ,
- pos / super .code:n = \__chemmacros_ox_pos_super: ,
- pos / side .code:n = \__chemmacros_ox_pos_side: ,
- pos .initial:n = super ,
- side-connect .tl_set:N = \l__chemmacros_ox_side_connect_tl ,
- side-connect .initial:n = \, ,
- text-frac .code:n =
- \cs_set_protected:Npn \chemmacros_ox_text_frac:nn ##1##2 {#1} ,
- text-frac .initial:n = \chemfrac[text]{#1}{#2} ,
- super-frac .code:n =
- \cs_set_protected:Npn \chemmacros_ox_super_frac:nn ##1##2 {#1} ,
- super-frac .initial:n = \chemfrac[superscript]{#1}{#2} ,
- roman .bool_set:N = \l__chemmacros_ox_format_roman_bool ,
- roman .default:n = true ,
- roman .initial:n = true ,
- parse .bool_set:N = \l__chemmacros_ox_parse_bool ,
- parse .default:n = true ,
- parse .initial:n = true ,
- explicit-sign .bool_set:N = \l__chemmacros_ox_explicit_sign_bool ,
- explicit-sign .default:n = true ,
- decimal-marker .choice: ,
- decimal-marker / comma .code:n =
- { \bool_set_true:N \l__chemmacros_ox_decimal_marker_comma_bool } ,
- decimal-marker / point .code:n =
- { \bool_set_false:N \l__chemmacros_ox_decimal_marker_comma_bool } ,
- decimal-marker .initial:n = point ,
- align .choice: ,
- align / center .code:n =
- \bool_set_true:N \l__chemmacros_ox_align_center_bool ,
- align / right .code:n =
- \bool_set_false:N \l__chemmacros_ox_align_center_bool ,
- align .initial:n = center
- }
-
-\ChemCompatibilityFrom{5.4}
-\chemmacros_define_keys:nn {redox}
- {
- explicit-zero-sign .bool_set:N = \l__chemmacros_ox_explicit_zero_sign_bool ,
- explicit-zero-sign .default:n = true
- }
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.11}
-\chemmacros_define_keys:nn {redox}
- { format .tl_set:N = \l__chemmacros_ox_format_tl }
-\EndChemCompatibility
-
-% \ox[<keyval>]{<num>,<atom>}
-% \ox*[<keyval>]{<num>,<atom>} => always number on the top
-\cs_new_protected:Npn \chemmacros_ox:nnnn #1#2#3#4
- {
- \group_begin:
- \chemmacros_set_keys:nn {redox} {#2}
- \tl_if_blank:nF {#1} { \__chemmacros_ox_pos_top: }
- \__chemmacros_ox_write:nn {#3} {#4}
- \group_end:
- }
-
-\NewDocumentCommand \ox { sO{}>{\SplitArgument{1}{,}}m }
- {
- \IfBooleanTF {#1}
- { \chemmacros_ox:nnnn {#1} {#2} #3 }
- { \chemmacros_ox:nnnn { } {#2} #3 }
- }
-
-% ---------------------------------------------------------------------------
-% redox reactions
-\tl_new:N \l__chemmacros_redox_begin_tl
-\tl_new:N \l__chemmacros_redox_end_tl
-\tl_new:N \l__chemmacros_redox_tikz_tl
-\tl_new:N \l__chemmacros_redox_shift_tl
-\tl_new:N \l__chemmacros_redox_anchor_tl
-\tl_new:N \l__chemmacros_redox_side_tl
-
-\fp_new:N \l__chemmacros_redox_shift_fp
-
-\dim_new:N \l__chemmacros_redox_sep_dim
-\dim_new:N \l__chemmacros_redox_sep_default_dim
-\dim_set:Nn \l__chemmacros_redox_sep_default_dim {.2em}
-\dim_new:N \l__chemmacros_redox_dist_dim
-\dim_set:Nn \l__chemmacros_redox_dist_dim {.6em}
-
-% place and name nodes:
-% \OX{<name>,<atom>}
-\NewDocumentCommand \OX { >{\SplitArgument{1}{,}}m }
- { \chemmacros_redox_partner:nn #1 }
-
-% TODO: add option to make `#2' be parsed as chem formula
-\cs_new_protected:Npn \chemmacros_redox_partner:nn #1#2
- {
- \legacy_if:nTF {measuring@}
- {
- \group_begin:
- \tikz[baseline=(#1.base)] { \node [inner~sep=0pt] (#1) {#2} ; }
- \group_end:
- }
- {
- \tl_if_blank:nT {#1}
- { \msg_error:nnnn {chemmacros} {redox} {\OX} {node~name~missing} }
- \tl_if_blank:nT {#2}
- { \msg_error:nnnn {chemmacros} {redox} {\OX} {atom~missing} }
- \tikz[baseline=(#1.base),remember~picture]
- { \node [inner~sep=0pt] (#1) {#2} ; }
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_redox_coordinates:nn #1#2
- {
- \tl_set:Nn \l__chemmacros_redox_begin_tl {#1}
- \tl_set:Nn \l__chemmacros_redox_end_tl {#2}
- }
-
-\cs_new_protected:Npn \chemmacros_redox:nnnnn #1#2#3#4#5
- {
- \tl_clear:N \l__chemmacros_redox_begin_tl
- \tl_clear:N \l__chemmacros_redox_end_tl
- \tl_clear:N \l__chemmacros_redox_tikz_tl
- \__chemmacros_redox_coordinates:nn {#1} {#2}
- \tl_if_blank:nF {#3}
- { \tl_set:Nn \l__chemmacros_redox_tikz_tl {#3} }
- \tl_if_blank:nTF {#4}
- {
- \fp_set:Nn \l__chemmacros_redox_shift_fp {1}
- \tl_set:Nn \l__chemmacros_redox_anchor_tl {above}
- \tl_set:Nn \l__chemmacros_redox_side_tl {north}
- \dim_set_eq:NN
- \l__chemmacros_redox_sep_dim
- \l__chemmacros_redox_sep_default_dim
- }
- {
- \fp_compare:nNnTF {#4} < {0}
- {
- \tl_set:Nn \l__chemmacros_redox_anchor_tl {below}
- \tl_set:Nn \l__chemmacros_redox_side_tl {south}
- \exp_args:NNo \dim_set:Nn \l__chemmacros_redox_sep_dim
- { - \l__chemmacros_redox_sep_default_dim }
- }
- {
- \tl_set:Nn \l__chemmacros_redox_anchor_tl {above}
- \tl_set:Nn \l__chemmacros_redox_side_tl {north}
- \dim_set_eq:NN
- \l__chemmacros_redox_sep_dim
- \l__chemmacros_redox_sep_default_dim
- }
- \fp_set:Nn \l__chemmacros_redox_shift_fp {#4}
- }
- \tl_set:Nx \l__chemmacros_redox_shift_tl
- { \fp_to_decimal:N \l__chemmacros_redox_shift_fp }
- \tikz[remember~picture,overlay]
- {
- \chemmacros_tikz_draw:x { \exp_not:V \l__chemmacros_redox_tikz_tl }
- ($
- (\l__chemmacros_redox_begin_tl .
- \l__chemmacros_redox_side_tl)+(0,\l__chemmacros_redox_sep_dim)
- $)
- --
- ++(0,\l__chemmacros_redox_shift_tl * \l__chemmacros_redox_dist_dim) -|
- node [pos=.25,\l__chemmacros_redox_anchor_tl] { {#5} }
- ($
- (\l__chemmacros_redox_end_tl .
- \l__chemmacros_redox_side_tl)+(0,\l__chemmacros_redox_sep_dim)
- $) ;
- }
- }
-
-\NewDocumentCommand \redox { >{\SplitArgument{1}{,}}r()ooG{} }
- {
- \IfNoValueT {#1}
- {
- \msg_error:nnnn {chemmacros} {redox} {\redox}
- {You~need~to~specify~coordinates}
- }
- \IfNoValueTF {#2}
- { \chemmacros_redox:nnnnn #1 { } { } {#4} }
- {
- \IfNoValueTF {#3}
- { \chemmacros_redox:nnnnn #1 {#2} { } {#4} }
- { \chemmacros_redox:nnnnn #1 {#2} {#3} {#4} }
- }
- }
-
-% redox-keys
-\chemmacros_define_keys:nn {redox}
- {
- dist .dim_set:N = \l__chemmacros_redox_dist_dim ,
- dist .initial:n = {.6em} ,
- sep .dim_set:N = \l__chemmacros_redox_sep_default_dim ,
- sep .initial:n = {.2em}
- }
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-2015/09/30 - new option `explicit-zero-sign'
-2020/02/02 - lazy boolean evaluation
- - prefer \legacy_if:nTF over \chemmacros_if_tex:nnTF
-2020/03/02 - add option redox/format
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.scheme.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.scheme.code.tex
deleted file mode 100644
index 82df4d16240..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.scheme.code.tex
+++ /dev/null
@@ -1,333 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `scheme'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{scheme}{2020/11/21 a scheme floating environment}
-
-\RequirePackage {chemnum}
-
-\bool_new:N \l__chemmacros_float_def_bool
-\tl_new:N \l__chemmacros_float_method_tl
-\seq_new:N \l__chemmacros_float_methods_seq
-\prop_new:N \l__chemmacros_float_methods_prop
-\prop_new:N \l__chemmacros_float_definitions_prop
-
-\msg_new:nnn {chemmacros} {float-method}
- { Detected~ float~ defining~ method~ `#1'. }
-
-% --------------------------------------------------------------------------
-% #1: name
-% #2: check
-\cs_new_protected:Npn \chemmacros_define_float_method:nnn #1#2#3
- {
- \seq_put_right:Nn \l__chemmacros_float_methods_seq {#1}
- \prop_put:Nnn \l__chemmacros_float_methods_prop {#1} {#2}
- \prop_put:Nnn \l__chemmacros_float_definitions_prop {#1}
- { \cs_set_protected:Npn \__chemmacros_define_float:nn ##1##2 {#3} }
- }
-
-% the order in which the methods are defined determines in which order the
-% methods will be checked at begin document:
-\chemmacros_define_float_method:nnn {KOMA}
- { \cs_if_exist_p:N \KOMAClassName }
- {
- \DeclareNewTOC[
- type = #1 ,
- types = #1s ,
- float ,
- name = \chemmacros_translate:n {#1-name} ,
- listname = {\exp_not:N \chemmacros_translate:n {#1-list}}
- ]{#2}
- }
-
-\chemmacros_define_float_method:nnn {memoir}
- { \chemmacros_if_class_loaded_p:n {memoir} }
- {
- \newfloat [chapter] {#1} {#2} {\chemmacros_translate:n {#1-name}}
- \cs_set:cpn {the#1} {\thechapter.\arabic {#1}}
- \newlistof {listof#1s} {#2} {\chemmacros_translate:n {#1-list}}
- \newlistentry [chapter] {#1} {#2} {0}
- \cftsetindents {#1} {0em} {2.3em}
- \tl_put_right:Nn \@memfront@floats
- { \counterwithout {#1} {chapter} }
- \tl_put_right:Nn \@memmain@floats
- { \counterwithin {#1} {chapter} }
- \tl_put_right:Nn \@memback@floats
- {
- \counterwithin {#1} {chapter}
- \setcounter {#1} {0}
- }
- \legacy_if:nT {artopt}
- { \counterwithout {#1} {chapter} }
- }
-
-\chemmacros_define_float_method:nnn {tocbasic}
- { \chemmacros_if_package_loaded_p:n {tocbasic} }
- {
- \DeclareNewTOC[
- type = #1 ,
- types = #1s ,
- float ,
- name = \chemmacros_translate:n {#1-name} ,
- listname = {\exp_not:N \chemmacros_translate:n {#1-list}}
- ]{#2}
- }
-
-\chemmacros_define_float_method:nnn {newfloat}
- { \chemmacros_if_package_loaded_p:n {newfloat} }
- {
- \DeclareFloatingEnvironment[{
- fileext = #2 ,
- listname = {\exp_not:N \chemmacros_translate:n {#1-list}} ,
- name = \chemmacros_translate:n {#1-name}
- }]{#1}
- }
-
-\ChemCompatibilityFrom{5.1}
-\chemmacros_define_float_method:nnn {floatrow}
- { \chemmacros_if_package_loaded_p:n {floatrow} }
- {
- \DeclareNewFloatType{#1}{%
- fileext = #2,
- placement = htp,
- name = \chemmacros_translate:n {#1-name}
- }
- \cs_new_protected:cpn {listof#1s}
- { \listof {#1} {\chemmacros_translate:n {#1-list}} }
- }
-\EndChemCompatibility
-
-\chemmacros_define_float_method:nnn {float}
- { \chemmacros_if_package_loaded_p:n {float} }
- {
- \newfloat {#1} {htp} {#2}
- \floatname {#1} {\chemmacros_translate:n {#1-name}}
- \cs_new_protected:cpn {listof#1s}
- { \listof {#1} {\chemmacros_translate:n {#1-list}} }
- }
-
-% --------------------------------------------------------------------------
-% checks if one of the above defined methods is active. The first one found
-% will be used.
-\cs_new_protected:Npn \chemmacros_check_float_method:n #1
- {
- \prop_get:NnNT \l__chemmacros_float_methods_prop {#1}
- \l__chemmacros_tmpa_tl
- {
- \bool_lazy_and:nnT
- { !\l__chemmacros_float_def_bool }
- { \l__chemmacros_tmpa_tl }
- {
- \bool_set_true:N \l__chemmacros_float_def_bool
- \tl_set:Nn \l__chemmacros_float_method_tl {#1}
- \msg_info:nnn {chemmacros} {float-method} {#1}
- }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_check_float_methods:
- {
- \seq_map_function:NN
- \l__chemmacros_float_methods_seq
- \chemmacros_check_float_method:n
- }
-
-\AtEndPreamble
- {
- % the check is there since v5.3a -- let's wait and see if we actually need
- % a compatibility check here:
- \chemmacros_if_package_loaded:nF {chemscheme}
- {
- \chemmacros_check_float_methods:
- \chemmacros_define_float:nn {scheme} {los}
- }
- }
-
-% --------------------------------------------------------------------------
-\ChemCompatibilityFrom{5.6}
-\ChemCleverefSupport {scheme}
- { \chemmacros_translate:n {scheme} }
- [ \chemmacros_translate:n {Scheme} ]
- { \chemmacros_translate:n {schemes} }
- [ \chemmacros_translate:n {Schemes} ]
-
-\ChemFancyrefSupport {sch}
- { \chemmacros_translate:n {scheme} }
- [ \chemmacros_translate:n {Scheme} ]
-\EndChemCompatibility
-
-% --------------------------------------------------------------------------
-% #1: env name
-\cs_new_protected:Npn \chemmacros_define_float:nn #1#2
- {
- \bool_lazy_and:nnT
- { !\cs_if_exist_p:c {#1} }
- { !\cs_if_exist_p:c {end#1} }
- {
- \bool_if:NTF \l__chemmacros_float_def_bool
- {
- \prop_get:NVN \l__chemmacros_float_definitions_prop
- \l__chemmacros_float_method_tl
- \l__chemmacros_tmpa_tl
- \tl_use:N \l__chemmacros_tmpa_tl
- \__chemmacros_define_float:nn {#1} {#2}
- }
- {
- \newcounter {#1}
- \cs_set:cpn {the#1} {\arabic{#1}}
- \cs_new:cpn {fps@#1} {tbp}
- \cs_new:cpn {ftype@#1} {8}
- \cs_new:cpn {ext@#1} {#2}
- \cs_new:cpx {fnum@#1} {
- \exp_not:c {#1name}
- \exp_not:N \nobreakspace
- \exp_not:c {the#1}}
- \cs_new:cpn {#1name} {\chemmacros_translate:n {#1-name}}
- \cs_new:cpn {list#1name} {\chemmacros_translate:n {#1-list}}
- \newenvironment {#1}
- {\@float{#1}}
- {\end@float}
- \newenvironment {#1*}
- {\@dblfloat{#1}}
- {\end@dblfloat}
- \bool_lazy_or:nnTF
- { \chemmacros_if_class_loaded_p:n {book} }
- { \chemmacros_if_class_loaded_p:n {report} }
- {
- \cs_new_protected:cpn {listof#1s}
- {
- \legacy_if:nTF {@twocolumn}
- { \@restonecoltrue\onecolumn }
- { \@restonecolfalse }
- \chapter* { \use:c {list#1name} }
- \use:x
- {
- \exp_not:N \@mkboth
- { \exp_not:N \MakeUppercase \exp_not:c {list#1name} }
- { \exp_not:N \MakeUppercase \exp_not:c {list#1name} }
- }
- \@starttoc {#2}
- \legacy_if:nT {@restonecol} { \twocolumn }
- }
- }
- {
- \cs_new_protected:cpn {listof#1s}
- {
- \section* {\use:c {list#1name}}
- \use:x
- {
- \exp_not:N \@mkboth
- { \exp_not:N \MakeUppercase \exp_not:c {list#1name} }
- { \exp_not:N \MakeUppercase \exp_not:c {list#1name} }
- }
- \@starttoc {#2}
- }
- }
- \cs_new_eq:cN {l@#1} \l@figure
- }
- }
- \cs_set:cpn {#1name} {\chemmacros_translate:n {#1-name}}
- \cs_set:cpn {list#1name} {\chemmacros_translate:n {#1-list}}
- }
-
-% --------------------------------------------------------------------------
-\ChemCompatibilityTo{5.6}
-\DeclareTranslationFallback {scheme-name} {Scheme}
-\DeclareTranslation {English} {scheme-name} {Scheme}
-\DeclareTranslation {German} {scheme-name} {Schema}
-
-\DeclareTranslationFallback {scheme-list} {List~ of~ Schemes}
-\DeclareTranslation {English} {scheme-list} {List~ of~ Schemes}
-\DeclareTranslation {German} {scheme-list} {Verzeichnis~ der~ Schemata}
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.6}
-\chemmacros_declare_translations:nn {scheme-name}
- {
- fallback = Scheme ,
- English = Scheme ,
- German = Schema ,
- Norwegian = Skjema ,
- Nynorsk = Skjema
- }
-
-\chemmacros_declare_translations:nn {scheme-list}
- {
- fallback = List~ of~ Schemes ,
- English = List~ of~ Schemes ,
- German = Verzeichnis~ der~ Schemata,
- Norwegian = Skjemaliste,
- Nynorsk = Skjemaliste
- }
-
-\chemmacros_declare_translations:nn {scheme}
- {
- fallback = scheme ,
- English = scheme ,
- German = Schema ,
- Norwegian = skjema ,
- Nynorsk = skjema
- }
-
-\chemmacros_declare_translations:nn {Scheme}
- {
- fallback = Scheme ,
- English = Scheme ,
- German = Schema ,
- Norwegian = Skjema ,
- Nynorsk = Skjema
- }
-
-\chemmacros_declare_translations:nn {schemes}
- {
- fallback = schemes ,
- English = schemes ,
- German = Schemata ,
- Norwegian = skjema ,
- Nynorsk = skjema
- }
-
-\chemmacros_declare_translations:nn {Schemes}
- {
- fallback = Schemes ,
- English = Schemes ,
- German = Schemata ,
- Norwegian = Skjema ,
- Nynorsk = Skjema
- }
-\EndChemCompatibility
-
-\file_input_stop:
-% --------------------------------------------------------------------------
-2015/09/19 - make the module compatible with floatrow
-2015/10/23 - add info message to float method detection
-2016/01/23 - make the module compatible with chemscheme
-2016/04/25 - cleveref and fancyref support
-2016/12/28 - bug fix: typo in \chemmacros_if_tex:nnTF usage
-2019/03/23 - added Norwegian translations
-2020/02/03 - lazy boolean evaluation
- - prefer \legacy_if:nTF over \chemmacros_if_tex:nnTF
-2020/11/21 - fix issue #41
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.spectroscopy.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.spectroscopy.code.tex
deleted file mode 100644
index 4f5a1914eae..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.spectroscopy.code.tex
+++ /dev/null
@@ -1,515 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `spectroscopy'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{spectroscopy}{2020/11/21 environment for spectroscopic data}
-
-\chemmacros_load_modules:n {chemformula}
-\RequirePackage{siunitx}
-
-% spectroscopy
-\tl_new:N \g__chemmacros_nmr_isotope_tl
-\tl_new:N \l__chemmacros_nmr_isotope_default_tl
-\tl_set:Nn \l__chemmacros_nmr_isotope_default_tl { 1 }
-\tl_new:N \l__chemmacros_nmr_coupling_nuclei_tl
-\tl_new:N \l__chemmacros_nmr_coupling_nuclei_pre_tl
-\tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_pre_tl { ( }
-\tl_new:N \l__chemmacros_nmr_coupling_nuclei_post_tl
-\tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_post_tl { ) }
-\tl_new:N \l__chemmacros_nmr_coupling_bonds_tl
-\tl_new:N \l__chemmacros_nmr_coupling_bonds_pre_tl
-\tl_new:N \l__chemmacros_nmr_coupling_bonds_post_tl
-\tl_set:Nn \l__chemmacros_nmr_coupling_bonds_pre_tl { }
-\tl_set:Nn \l__chemmacros_nmr_coupling_bonds_post_tl { \! }
-\tl_new:N \l__chemmacros_nmr_coupling_symbol_tl
-\tl_set:Nn \l__chemmacros_nmr_coupling_symbol_tl { J }
-\tl_new:N \g__chemmacros_nmr_element_coupled_tl
-\tl_new:N \g__chemmacros_nmr_element_tl
-\tl_new:N \l__chemmacros_nmr_element_default_tl
-\tl_set:Nn \l__chemmacros_nmr_element_default_tl { H }
-\tl_new:N \l__chemmacros_nmr_format_tl
-\tl_new:N \l__chemmacros_nmr_delta_tl
-\tl_new:N \l__chemmacros_nmr_coupling_unit_tl
-\tl_set:Nn \l__chemmacros_nmr_coupling_unit_tl { \hertz }
-\tl_new:N \l__chemmacros_nmr_unit_tl
-\tl_set:Nn \l__chemmacros_nmr_unit_tl { \mega\hertz }
-\tl_new:N \l__chemmacros_nmr_list_setup_tl
-\tl_set:Nn \l__chemmacros_nmr_list_setup_tl
- {
- \topsep\z@skip \partopsep\z@skip
- \itemsep\z@ \parsep\z@ \itemindent\z@
- \leftmargin\z@
- }
-\tl_new:N \l__chemmacros_nmr_position_tl
-\tl_new:N \l__chemmacros_nmr_element_method_connector_tl
-\tl_set:Nn \l__chemmacros_nmr_element_method_connector_tl {-}
-\tl_new:N \l__chemmacros_nmr_method_tl
-\tl_set:Nn \l__chemmacros_nmr_method_tl {NMR}
-
-\bool_new:N \l__chemmacros_nmr_coupling_nuclei_sub_bool
-\bool_new:N \l__chemmacros_nmr_frequency_bool
-\bool_new:N \l__chemmacros_nmr_solvent_bool
-\bool_new:N \l__chemmacros_nmr_delimiters_bool
-\bool_new:N \l__chemmacros_nmr_comma_bool
-\bool_new:N \l__chemmacros_nmr_inner_bool
-\bool_new:N \l__chemmacros_nmr_position_side_bool
-\bool_new:N \l__chemmacros_nmr_parse_bool
-\bool_set_true:N \l__chemmacros_nmr_parse_bool
-\bool_new:N \l__chemmacros_nmr_list_bool
-\bool_new:N \l__chemmacros_nmr_use_equal_bool
-\bool_new:N \l__chemmacros_nmr_custom_command_active_bool
-\bool_new:N \l__chemmacros_nmr_custom_command_used_bool
-
-\skip_new:N \l__chemmacros_nmr_space_skip
-\skip_set:Nn \l__chemmacros_nmr_space_skip { .16667em }
-
-\cs_new_protected:Npn \__chemmacros_nmr_nucleus:nn #1#2
- {
- \tl_gset:Nn \g__chemmacros_nmr_isotope_tl {#1}
- \tl_if_in:nnTF {#2} {[} % ]
- { \__chemmacros_nmr_element:w #2 \q_stop }
- {
- \tl_gset:No \g__chemmacros_nmr_element_tl {#2}
- \tl_gclear:N \g__chemmacros_nmr_element_coupled_tl
- }
- }
-\cs_generate_variant:Nn \__chemmacros_nmr_nucleus:nn { VV }
-
-\cs_new_protected:Npn \__chemmacros_nmr_nucleus:w #1,#2 \q_stop
- {
- \tl_gset:Nn \g__chemmacros_nmr_isotope_tl {#1}
- \tl_if_in:nnTF {#2} {[} % ]
- { \__chemmacros_nmr_element:w #2 \q_stop }
- {
- \tl_gset:No \g__chemmacros_nmr_element_tl {#2}
- \tl_gclear:N \g__chemmacros_nmr_element_coupled_tl
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_element:w #1[#2] \q_stop
- {
- \tl_gset:Nn \g__chemmacros_nmr_element_tl {#1}
- \tl_gset:Nn \g__chemmacros_nmr_element_coupled_tl {#2}
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_default_nucleus:w #1,#2 \q_stop
- {
- \tl_set:Nn \l__chemmacros_nmr_isotope_default_tl {#1}
- \tl_set:Nn \l__chemmacros_nmr_element_default_tl {#2}
- }
-
-\ChemCompatibilityTo{5.8}
-\cs_new_protected:Npn \__chemmacros_nmr_base:nn #1#2
- {
- \tl_if_blank:VF \g__chemmacros_nmr_element_coupled_tl
- {
- \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl { \{ }
- \tl_put_right:Nn \g__chemmacros_nmr_element_coupled_tl { \} }
- }
- \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl {#2}
- \chemmacros_chemformula:n { ^{#1} }
- \bool_if:NTF \l__chemmacros_nmr_parse_bool
- { \chemmacros_chemformula:V \g__chemmacros_nmr_element_coupled_tl }
- { \g__chemmacros_nmr_element_coupled_tl }
- \tl_use:N \l__chemmacros_nmr_element_method_connector_tl
- \tl_use:N \l__chemmacros_nmr_method_tl
- }
-\EndChemCompatibility
-\ChemCompatibilityFrom{5.8}
-\tl_new:N \l__chemmacros_nmr_base_format_tl
-
-\chemmacros_define_keys:nn {spectroscopy}
- { nmr-base-format .tl_set:N = \l__chemmacros_nmr_base_format_tl }
-
-\cs_new_protected:Npn \__chemmacros_nmr_base:nn #1#2
- {
- \group_begin:
- \tl_use:N \l__chemmacros_nmr_base_format_tl
- \tl_if_blank:VF \g__chemmacros_nmr_element_coupled_tl
- {
- \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl { \{ }
- \tl_put_right:Nn \g__chemmacros_nmr_element_coupled_tl { \} }
- }
- \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl {#2}
- \chemmacros_chemformula:n { ^{#1} }
- \tl_if_blank:VF \g__chemmacros_nmr_element_coupled_tl
- {
- \bool_if:NTF \l__chemmacros_nmr_parse_bool
- { \chemmacros_chemformula:V \g__chemmacros_nmr_element_coupled_tl }
- { \g__chemmacros_nmr_element_coupled_tl }
- }
- \tl_use:N \l__chemmacros_nmr_element_method_connector_tl
- \tl_use:N \l__chemmacros_nmr_method_tl
- \group_end:
- }
-\EndChemCompatibility
-
-\cs_generate_variant:Nn \__chemmacros_nmr_base:nn { VV }
-
-\cs_new_protected:Npn \__chemmacros_nmr_frequency:n #1
- {
- \tl_if_in:nnTF {#1} {,}
- { \__chemmacros_nmr_frequency_aux_i:w #1 \q_stop }
- { \__chemmacros_nmr_frequency_aux_ii:n {#1} }
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_frequency_aux_i:w #1,#2 \q_stop
- { \SI {#1} {#2} }
-
-\cs_new_protected:Npn \__chemmacros_nmr_frequency_aux_ii:n #1
- { \SI {#1} { \tl_use:N \l__chemmacros_nmr_unit_tl } }
-
-\cs_new_eq:NN \__chemmacros_nmr_number:n \use:n
-\cs_new_eq:NN \__chemmacros_nmr_position:n \use:n
-
-\chemmacros_define_keys:nn {spectroscopy}
- {
- unit .tl_set:N = \l__chemmacros_nmr_unit_tl ,
- unit .default:n = \mega\hertz ,
- nucleus .code:n =
- { \__chemmacros_nmr_default_nucleus:w #1 \q_stop } ,
- nucleus .default:n = {1,H} ,
- format .tl_set:N = \l__chemmacros_nmr_format_tl ,
- method .tl_set:N = \l__chemmacros_nmr_method_tl ,
- connector .tl_set:N = \l__chemmacros_nmr_element_method_connector_tl ,
- pos-number .choice: ,
- pos-number / sub .code:n =
- \tl_set:Nn \l__chemmacros_nmr_position_tl {_}
- \bool_set_false:N \l__chemmacros_nmr_position_side_bool ,
- pos-number / super .code:n =
- \tl_set:Nn \l__chemmacros_nmr_position_tl {^}
- \bool_set_false:N \l__chemmacros_nmr_position_side_bool ,
- pos-number / side .code:n =
- \tl_set:Nn \l__chemmacros_nmr_position_tl {-}
- \bool_set_true:N \l__chemmacros_nmr_position_side_bool ,
- pos-number / .initial:n = side ,
- coupling-unit .tl_set:N = \l__chemmacros_nmr_coupling_unit_tl ,
- coupling-pos .choice: ,
- coupling-pos / sub .code:n =
- \bool_set_true:N \l__chemmacros_nmr_coupling_nuclei_sub_bool ,
- coupling-pos / side .code:n =
- \bool_set_false:N \l__chemmacros_nmr_coupling_nuclei_sub_bool ,
- coupling-nuclei-pre .tl_set:N =
- \l__chemmacros_nmr_coupling_nuclei_pre_tl ,
- coupling-nuclei-post .tl_set:N =
- \l__chemmacros_nmr_coupling_nuclei_post_tl ,
- coupling-bonds-pre .tl_set:N =
- \l__chemmacros_nmr_coupling_bonds_pre_tl ,
- coupling-bonds-post .tl_set:N =
- \l__chemmacros_nmr_coupling_bonds_post_tl ,
- coupling-symbol .tl_set:N =
- \l__chemmacros_nmr_coupling_symbol_tl ,
- atom-number-cs .code:n =
- \cs_set_eq:NN \__chemmacros_nmr_number:n #1 ,
- \chemmacros_if_compatibility:nnT {>=} {5.3}
- { atom-number-space .skip_set:N = \l__chemmacros_nmr_space_skip , }
- coupling-pos-cs .code:n =
- \cs_set_eq:NN \__chemmacros_nmr_position:n #1 ,
- parse .bool_set:N = \l__chemmacros_nmr_parse_bool ,
- delta .code:n =
- \tl_set:Nn \l__chemmacros_nmr_delta_tl {\,#1} ,
- list .bool_set:N = \l__chemmacros_nmr_list_bool ,
- list .default:n = true ,
- list-setup .tl_set:N = \l__chemmacros_nmr_list_setup_tl ,
- use-equal .bool_set:N = \l__chemmacros_nmr_use_equal_bool ,
- use-equal .default:n = true
- }
-
-\cs_new_protected:Npn \chemmacros_define_nmr:Nn #1#2
- {
- \cs_if_exist:NTF #1
- {
- \RenewDocumentCommand #1 {s}
- { \IfBooleanTF {##1} { \NMR*{#2} } { \NMR{#2} } }
- }
- {
- \NewDocumentCommand #1 {s}
- { \IfBooleanTF {##1} { \NMR*{#2} } { \NMR{#2} } }
- }
- }
-
-\NewChemMacroset {NMR} {mm}
- { \chemmacros_define_nmr:Nn #1 {#2} }
-
-\NewDocumentCommand \NMR { sG{}D(){}O{} }
- {
- \IfBooleanTF {#1}
- { \chemmacros_nmr:nnnn {*} {#2} {#3} {#4} }
- { \chemmacros_nmr:nnnn { } {#2} {#3} {#4} }
- }
-
-\AtBeginDocument
- {
- % \NMR{<num>,<elem>}(<num>,<unit>)[<solvent>] ALL arguments are optional
- % \NMR* same but without ": $\delta$" at end
- \cs_new_protected:Npn \chemmacros_nmr:nnnn #1#2#3#4
- {
- \bool_if:NT \l__chemmacros_nmr_list_bool { \item \scan_stop: }
- \group_begin:
- \mode_leave_vertical:
- \bool_set_false:N \l__chemmacros_nmr_frequency_bool
- \bool_set_false:N \l__chemmacros_nmr_solvent_bool
- \tl_if_empty:nF {#3}
- { \bool_set_true:N \l__chemmacros_nmr_frequency_bool }
- \tl_if_empty:nF {#4}
- { \bool_set_true:N \l__chemmacros_nmr_solvent_bool }
- \bool_lazy_or:nnT
- { \l__chemmacros_nmr_frequency_bool }
- { \l__chemmacros_nmr_solvent_bool }
- { \bool_set_true:N \l__chemmacros_nmr_delimiters_bool }
- \bool_lazy_and:nnT
- { \l__chemmacros_nmr_frequency_bool }
- { \l__chemmacros_nmr_solvent_bool }
- { \bool_set_true:N \l__chemmacros_nmr_comma_bool }
- \tl_if_empty:nTF {#2}
- {
- \__chemmacros_nmr_nucleus:VV
- \l__chemmacros_nmr_isotope_default_tl
- \l__chemmacros_nmr_element_default_tl
- }
- { \__chemmacros_nmr_nucleus:w #2 \q_stop }
- \mode_if_math:TF
- {
- \text
- {
- \group_begin:
- \tl_use:N \l__chemmacros_nmr_format_tl
- \__chemmacros_nmr_base:VV
- \g__chemmacros_nmr_isotope_tl
- \g__chemmacros_nmr_element_tl
- \bool_if:NT \l__chemmacros_nmr_delimiters_bool
- { ~ ( }
- \bool_if:NT \l__chemmacros_nmr_frequency_bool
- { \__chemmacros_nmr_frequency:n {#3} }
- \bool_if:NT \l__chemmacros_nmr_comma_bool
- { , ~ }
- \bool_if:NT \l__chemmacros_nmr_solvent_bool
- { \chemmacros_chemformula:n {#4} }
- \bool_if:NT \l__chemmacros_nmr_delimiters_bool
- { ) }
- \tl_if_blank:nT {#1} {:~}
- \group_end:
- }
- \tl_if_blank:nT {#1}
- {
- \delta
- \text { \l__chemmacros_nmr_delta_tl }
- \bool_if:NT \l__chemmacros_nmr_use_equal_bool {=}
- }
- }
- {
- \group_begin:
- \tl_use:N \l__chemmacros_nmr_format_tl
- \__chemmacros_nmr_base:VV
- \g__chemmacros_nmr_isotope_tl
- \g__chemmacros_nmr_element_tl
- \bool_if:NT \l__chemmacros_nmr_delimiters_bool
- {~(}
- \bool_if:NT \l__chemmacros_nmr_frequency_bool
- { \__chemmacros_nmr_frequency:n {#3} }
- \bool_if:NT \l__chemmacros_nmr_comma_bool
- {,~}
- \bool_if:NT \l__chemmacros_nmr_solvent_bool
- {
- \bool_if:NTF \l__chemmacros_nmr_parse_bool
- { \chemmacros_chemformula:n {#4} }
- {#4}
- }
- \bool_if:NT \l__chemmacros_nmr_delimiters_bool
- {)}
- \tl_if_blank:nT {#1} {:}
- \group_end:
- \tl_if_blank:nT {#1}
- {
- \tl_use:N \c_space_tl
- \c_math_toggle_token
- \delta
- \c_math_toggle_token
- \l__chemmacros_nmr_delta_tl
- \bool_if:NT \l__chemmacros_nmr_use_equal_bool {~=}
- }
- }
- \group_end:
- }
- }
-
-\NewDocumentCommand \chemmacros_data:w { smo }
- {
- \bool_if:NT \l__chemmacros_nmr_list_bool { \item }
- {
- \tl_use:N \l__chemmacros_nmr_format_tl #2
- \IfNoValueF {#3} { ~ ( #3 ) }
- \IfBooleanT {#1} { \bool_if:NT \l__chemmacros_nmr_use_equal_bool { : } }
- }
- \IfBooleanF {#1} { \bool_if:NT \l__chemmacros_nmr_use_equal_bool { ~ = } }
- }
-
-\cs_new_protected:Npn \chemmacros_val:n #1
- {
- \tl_if_in:nnTF {#1} {--}
- { \chemmacros_val_aux:w #1 \q_nil }
- { \num {#1} }
- }
-
-\cs_new_protected:Npn \chemmacros_val_aux:w #1--#2 \q_nil
- { \numrange {#1} {#2} }
-
-\NewDocumentEnvironment {experimental} {o}
- {
- \group_begin:
- \IfNoValueF {#1} { \chemmacros_set_keys:nn {spectroscopy} {#1} }
- \bool_set_true:N \l__chemmacros_nmr_inner_bool
- \cs_set_eq:NN \# \chemmacros_nmr_number:n
- \cs_set_eq:NN \pos \chemmacros_nmr_position:n
- \cs_set_eq:NN \J \chemmacros_nmr_coupling:w
- \cs_set_eq:NN \data \chemmacros_data:w
- \cs_set_eq:NN \val \chemmacros_val:n
- \bool_if:NT \l__chemmacros_nmr_list_bool
- { \list {} { \l__chemmacros_nmr_list_setup_tl } }
- }
- {
- \bool_if:NT \l__chemmacros_nmr_list_bool
- { \endlist }
- \group_end:
- \chemmacros_ignore_spaces:
- }
-
-\cs_new_protected:Npn \chemmacros_nmr_number:n #1
- {
- \__chemmacros_nmr_number:n {#1}
- \chemmacros_if_compatibility:nnTF {>=} {5.8c}
- { \chemmacros_skip_nobreak:N }
- { \skip_horizontal:N }
- \l__chemmacros_nmr_space_skip
- \chemmacros_chemformula:V \g__chemmacros_nmr_element_tl
- }
-
-\cs_new_protected:Npn \chemmacros_nmr_position:n #1
- {
- \chemmacros_chemformula:x
- {
- \exp_not:V \g__chemmacros_nmr_element_tl
- \bool_if:NF \l__chemmacros_nmr_position_side_bool
- {
- \exp_not:V \l__chemmacros_nmr_position_tl
- \exp_not:n { _{#1} }
- }
- }
- \bool_if:NT \l__chemmacros_nmr_position_side_bool
- {
- \tl_use:N \l__chemmacros_nmr_position_tl
- \__chemmacros_nmr_position:n {#1}
- }
- }
-
-\cs_new_protected:Npn \chemmacros_nmr_coupling:w
- {
- \tl_clear:N \l__chemmacros_nmr_coupling_nuclei_tl
- \tl_clear:N \l__chemmacros_nmr_coupling_bonds_tl
- \peek_meaning:NTF (
- { \__chemmacros_nmr_coupling:w }
- { \__chemmacros_nmr_coupling_aux_i:w }
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_coupling:w (#1;#2)
- {
- \tl_set:Nn \l__chemmacros_nmr_coupling_bonds_tl
- {
- \l__chemmacros_nmr_coupling_bonds_pre_tl
- #1
- \l__chemmacros_nmr_coupling_bonds_post_tl
- }
- \bool_if:NTF \l__chemmacros_nmr_coupling_nuclei_sub_bool
- {
- \tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_tl
- {
- \c_math_subscript_token
- {
- \l__chemmacros_nmr_coupling_nuclei_pre_tl
- \chemmacros_chemformula:n {#2}
- \l__chemmacros_nmr_coupling_nuclei_post_tl
- }
- }
- }
- {
- \tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_tl
- {
- \l__chemmacros_nmr_coupling_nuclei_pre_tl
- \chemmacros_chemformula:n {#2}
- \l__chemmacros_nmr_coupling_nuclei_post_tl
- }
- }
- \__chemmacros_nmr_coupling_aux_i:w
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_coupling_aux_i:w
- {
- \peek_meaning:NTF [
- { \__chemmacros_nmr_coupling_aux_ii:w }
- { \__chemmacros_nmr_coupling_aux_iii:n }
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_coupling_aux_ii:w [#1]#2
- {
- \group_begin:
- \sisetup
- {
- list-final-separator={,~},
- list-pair-separator={,~},
- list-units=single
- }
- \c_math_toggle_token
- ^{ \l__chemmacros_nmr_coupling_bonds_tl }
- \l__chemmacros_nmr_coupling_symbol_tl
- \l__chemmacros_nmr_coupling_nuclei_tl = \SIlist {#2} {#1}
- \c_math_toggle_token
- \group_end:
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_coupling_aux_iii:n #1
- {
- \group_begin:
- \sisetup
- {
- list-final-separator={,~},
- list-pair-separator={,~},
- list-units=single
- }
- \c_math_toggle_token
- ^{ \l__chemmacros_nmr_coupling_bonds_tl }
- \l__chemmacros_nmr_coupling_symbol_tl
- \l__chemmacros_nmr_coupling_nuclei_tl
- = \exp_args:Nno \SIlist {#1} { \l__chemmacros_nmr_coupling_unit_tl }
- \c_math_toggle_token
- \group_end:
- }
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-2015/12/31 - new option `atom-number-space'
-2017/01/27 - new option `nmr-base-format'
-2020/02/02 - lazy boolean evaluation
-2020/11/21 - fix issue #34
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.symbols.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.symbols.code.tex
deleted file mode 100644
index 9f2ab0b368c..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.symbols.code.tex
+++ /dev/null
@@ -1,89 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `symbols'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{symbols}{2015/06/09 symbols}
-
-\RequirePackage{amstext}
-
-% ---------------------------------------------------------------------------
-% transition state symbol
-\cs_new_protected:Npn \__chemmacros_transition_state:
- {
- \text
- {
- \skip_horizontal:n { .1ex }
- \hbox_overlap_right:n
- { \rule { .6ex } { 0pt } \rule { .05ex } { 1.3ex } }
- \hbox_overlap_right:n { \rule [ .4ex ] { 1.3ex } { .05ex } }
- \rule [ .85ex ] { 1.3ex } { .05ex }
- \skip_horizontal:n { .1ex }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_transition_state:
- {
- \ensuremath
- {
- \mathchoice
- { \displaystyle }
- { \textstyle }
- { \scriptstyle }
- { \scriptscriptstyle }
- \__chemmacros_transition_state:
- }
- }
-
-% \DeclareDocumentCommand?
-\cs_new_eq:NN \transitionstatesymbol \chemmacros_transition_state:
-
-% \standardstate as defined by the chemstyle package. Thanks to Joseph Wright
-% the `chemstyle' provides it with \providecommand so it doesn't matter which
-% package defines it first
-\ProvideDocumentCommand \standardstate {}
- { { \ensuremath { \chemmacros_standardstate: } } }
-
-\cs_new_protected:Npn \chemmacros_standardstate:
- { \mathpalette \chemmacros_standardstate_aux: \circ }
-
-\cs_new_protected:Npn \chemmacros_standardstate_aux: #1#2
- {
- \ooalign
- {
- \tex_hfil:D
- \c_math_toggle_token #1- \c_math_toggle_token
- \tex_hfil:D
- \tex_cr:D
- \tex_hfil:D
- \c_math_toggle_token #1#2 \c_math_toggle_token
- \tex_hfil:D
- \tex_cr:D
- }
- }
-
-\cs_new_protected:Npn \changestate { \ensuremath { \mathop{} \! \chemDelta } }
-
-% --------------------------------------------------------------------------
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.thermodynamics.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.thermodynamics.code.tex
deleted file mode 100644
index 4b4ddc6e638..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.thermodynamics.code.tex
+++ /dev/null
@@ -1,147 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `thermodynamics'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{thermodynamics}{2015/06/09 thermodynamics}
-
-\RequirePackage {siunitx}
-
-\tl_new:N \l__chemmacros_state_pre_tl
-\tl_new:N \l__chemmacros_state_post_tl
-\tl_new:N \l__chemmacros_state_sp_left_tl
-\tl_new:N \l__chemmacros_state_sb_left_tl
-\tl_new:N \l__chemmacros_state_sp_right_tl
-\tl_new:N \l__chemmacros_state_sb_right_tl
-\tl_new:N \l__chemmacros_state_sb_pos_tl
-\tl_new:N \l__chemmacros_state_symbol_tl
-\tl_new:N \l__chemmacros_state_unit_tl
-
-\tl_set:Nn \l__chemmacros_state_pre_tl { \changestate }
-\tl_set:Nn \l__chemmacros_state_sp_right_tl { \standardstate }
-\tl_set:Nn \l__chemmacros_state_sb_pos_tl {left}
-
-\chemmacros_define_keys:nn {thermodynamics}
- {
- pre .tl_set:N = \l__chemmacros_state_pre_tl ,
- post .tl_set:N = \l__chemmacros_state_post_tl ,
- superscript-left .tl_set:N = \l__chemmacros_state_sp_left_tl ,
- superscript-right .tl_set:N = \l__chemmacros_state_sp_right_tl ,
- superscript .meta:n = { superscript-right = #1 } ,
- subscript-left .tl_set:N = \l__chemmacros_state_sb_left_tl ,
- subscript-right .tl_set:N = \l__chemmacros_state_sb_right_tl ,
- subscript .meta:n = { subscript-left = #1 } ,
- unit .tl_set:N = \l__chemmacros_state_unit_tl ,
- unit .groups:n = {variables}
- }
-
-\cs_new_protected:Npn \chemmacros_state:nn #1#2
- {
- % pre (\Delta)
- % post
- % superscript-left
- % superscript-right (\standardstate)
- % subscript-left
- % subscript-right
- \group_begin:
- \chemmacros_set_keys:nn {thermodynamics} {#1}
- \ensuremath
- {
- \chemmacros_text:V \l__chemmacros_state_pre_tl
- \c_math_superscript_token
- { \chemmacros_text:V \l__chemmacros_state_sp_left_tl }
- \c_math_subscript_token
- { \chemmacros_text:V \l__chemmacros_state_sb_left_tl }
- #2
- \c_math_superscript_token
- { \chemmacros_text:V \l__chemmacros_state_sp_right_tl }
- \c_math_subscript_token
- { \chemmacros_text:V \l__chemmacros_state_sb_right_tl }
- \chemmacros_text:V \l__chemmacros_state_post_tl
- }
- \group_end:
- }
-\cs_generate_variant:Nn \chemmacros_state:nn { nV }
-
-\DeclareDocumentCommand \state { O{}m }
- { \chemmacros_state:nn {#1} {#2} }
-
-\cs_new_protected:Npn \chemmacros_declare_state:Nn #1#2
- {
- \chemmacros_define_keys:xn
- {thermodynamics/\chemmacros_remove_backslash:N #1}
- {
- pre .meta:nn = {chemmacros/thermodynamics} { pre = ##1 } ,
- post .meta:nn = {chemmacros/thermodynamics} { post = ##1 } ,
- superscript-left .meta:nn = {chemmacros/thermodynamics} { superscript-left = ##1 } ,
- superscript-right .meta:nn = {chemmacros/thermodynamics} { superscript-right = ##1 } ,
- superscript .meta:n = { superscript-right = ##1 } ,
- subscript-left .meta:nn = {chemmacros/thermodynamics} { subscript-left = ##1 } ,
- subscript-right .meta:nn = {chemmacros/thermodynamics} { subscript-right = ##1 } ,
- subscript .meta:n = { subscript-left = ##1 } ,
- subscript-pos .choices:nn =
- { left , right }
- { \tl_set_eq:NN \l__chemmacros_state_sb_pos_tl \l_keys_choice_tl } ,
- symbol .tl_set:N = \l__chemmacros_state_symbol_tl ,
- unit .tl_set:N = \l__chemmacros_state_unit_tl
- }
- \DeclareDocumentCommand #1 { sO{}D(){}m }
- {
- \group_begin:
- \chemmacros_set_keys:xn
- {thermodynamics/\chemmacros_remove_backslash:N #1}
- {#2}
- \tl_if_blank:nF {##3}
- {
- \chemmacros_set_keys:nx {thermodynamics}
- { subscript-\l__chemmacros_state_sb_pos_tl = \exp_not:n {##3} }
- }
- \ensuremath
- {
- \chemmacros_state:nV {##2} \l__chemmacros_state_symbol_tl
- \chemmacros_set_keys_groups:nnn {thermodynamics} {variables} {##2}
- \IfBooleanF {##1} { = \SI {##4} { \l__chemmacros_state_unit_tl } }
- }
- \group_end:
- }
- }
-
-\NewChemMacroset {State} {mm}
- { \chemmacros_declare_state:Nn #1 {#2} }
-
-% --------------------------------------------------------------------------
-% predefined:
-\NewChemState \enthalpy { symbol = H , unit = \kilo\joule\per\mole }
-\NewChemState \entropy { symbol = S , unit = \joule\per\kelvin\per\mole , pre = }
-\NewChemState \gibbs { symbol = G , unit = \kilo\joule\per\mole }
-
-\ChemCompatibilityTo{5.3}
- \DeclareChemDeprecated \State \state
- \DeclareChemDeprecated \Enthalpy \enthalpy
- \DeclareChemDeprecated \Entropy \entropy
- \DeclareChemDeprecated \Gibbs \gibbs
-\EndChemCompatibility
-
-% --------------------------------------------------------------------------
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.tikz.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.tikz.code.tex
deleted file mode 100644
index 660107e52c8..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.tikz.code.tex
+++ /dev/null
@@ -1,187 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `tikz'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule*{tikz}{2015/10/26 upright greek symbols}
-
-\RequirePackage{tikz}
-\usetikzlibrary{calc,decorations.pathmorphing}
-
-\ExplSyntaxOn
-
-\tl_const:Nx \c_chemmacros_other_colon_tl { \token_to_str:N : }
-
-% --------------------------------------------------------------------------
-% TikZ drawings - helper macros
-\cs_new_protected:Npn \chemmacros_tikz_picture:nn #1#2
- { \tikzpicture[{#1}] #2 \endtikzpicture }
-\cs_new_protected:Npn \chemmacros_tikz:nn #1#2 { \tikz[{#1}] {#2} }
-\cs_new_protected:Npn \chemmacros_tikz_draw:n #1 { \draw[{#1}] }
-\cs_new_protected:Npn \chemmacros_tikz_node:n #1 { \node[{#1}] }
-\cs_new_protected:Npn \chemmacros_tikz_shade:n #1 { \shade[{#1}] }
-\cs_new_protected:Npn \chemmacros_tikz_shadedraw:n #1 { \shadedraw[{#1}] }
-\cs_new_protected:Npn \chemmacros_tikz_node_in_draw:n #1 { node[{#1}] }
-
-\cs_generate_variant:Nn \chemmacros_tikz_picture:nn { xn }
-\cs_generate_variant:Nn \chemmacros_tikz_draw:n { x }
-\cs_generate_variant:Nn \chemmacros_tikz_node:n { x }
-\cs_generate_variant:Nn \chemmacros_tikz_shade:n { x }
-\cs_generate_variant:Nn \chemmacros_tikz_shadedraw:n { x }
-\cs_generate_variant:Nn \chemmacros_tikz_node_in_draw:n { x }
-
-% --------------------------------------------------------------------------
-% arrow tips for electron movement
-\dim_new:N \l__chemmacros_el_length_dim
-
-% full tip for pairs
-\pgfarrowsdeclare { el } { el }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfarrowsleftextend { -\l__chemmacros_el_length_dim }
- \pgfarrowsrightextend { .5\pgflinewidth }
- }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfsetdash {} { 0pt }
- \pgfsetroundjoin
- \pgfsetroundcap
- \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } }
- \pgfpathlineto
- {
- \pgfpoint
- { -\l__chemmacros_el_length_dim }
- { .3\l__chemmacros_el_length_dim }
- }
- \pgfpathlineto
- { \pgfpoint { -.5\l__chemmacros_el_length_dim } { 0pt } }
- \pgfpathlineto
- {
- \pgfpoint
- { -\l__chemmacros_el_length_dim }
- { -.3\l__chemmacros_el_length_dim }
- }
- \pgfpathlineto { \pgfpoint { 0pt } { 0pt } }
- \pgfusepathqfillstroke
- }
-
-% half tip on the left
-\pgfarrowsdeclare { left~el } { left~el }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfarrowsleftextend { -\l__chemmacros_el_length_dim }
- \pgfarrowsrightextend { .5\pgflinewidth }
- }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfsetdash {} { 0pt }
- \pgfsetroundjoin
- \pgfsetroundcap
- \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } }
- \pgfpathlineto
- {
- \pgfpoint
- { -\l__chemmacros_el_length_dim }
- { .3\l__chemmacros_el_length_dim }
- }
- \pgfpathlineto { \pgfpoint { -.5\l__chemmacros_el_length_dim } { 0pt } }
- \pgfpathlineto { \pgfpoint { 0pt } { 0pt } }
- \pgfusepathqfillstroke
- }
-
-% half tip in the right
-\pgfarrowsdeclare { right~el } { right~el }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfarrowsleftextend { -\l__chemmacros_el_length_dim }
- \pgfarrowsrightextend { .5\pgflinewidth }
- }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfsetdash {} { 0pt }
- \pgfsetroundjoin
- \pgfsetroundcap
- \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } }
- \pgfpathlineto
- {
- \pgfpoint
- { -\l__chemmacros_el_length_dim }
- { -.3\l__chemmacros_el_length_dim }
- }
- \pgfpathlineto { \pgfpoint { -.5\l__chemmacros_el_length_dim } { 0pt } }
- \pgfpathlineto { \pgfpoint { 0pt } { 0pt } }
- \pgfusepathqfillstroke
- }
-% --------------------------------------------------------------------------
-% http://tex.stackexchange.com/a/25689/
-\ChemCompatibilityFrom{5.3}
-\pgfdeclaredecoration{wave}{initial}{
- \state{initial}[
- width = +0pt ,
- next~ state = sine,
- persistent~ precomputation = {
- \pgfmathsetmacro\matchinglength{
- \pgfdecoratedinputsegmentlength /
- int(\pgfdecoratedinputsegmentlength/\pgfdecorationsegmentlength)
- }
- \setlength{\pgfdecorationsegmentlength}{\matchinglength pt}
- }
- ]{}
- \state{sine}[width=\pgfdecorationsegmentlength]{
- \pgfpathsine{
- \pgfpoint
- {0.25\pgfdecorationsegmentlength}
- {0.5\pgfdecorationsegmentamplitude}
- }
- \pgfpathcosine{
- \pgfpoint
- {0.25\pgfdecorationsegmentlength}
- {-0.5\pgfdecorationsegmentamplitude}
- }
- \pgfpathsine{
- \pgfpoint
- {0.25\pgfdecorationsegmentlength}
- {-0.5\pgfdecorationsegmentamplitude}
- }
- \pgfpathcosine{
- \pgfpoint
- {0.25\pgfdecorationsegmentlength}
- {0.5\pgfdecorationsegmentamplitude}
- }
- }
- \state{final}{}
-}
-\EndChemCompatibility
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2015/10/26 - add decoration `wave' (complete sines)
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.units.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.units.code.tex
deleted file mode 100644
index 404cdbdc4d8..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.units.code.tex
+++ /dev/null
@@ -1,68 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `units'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{units}{2020/02/02 chemical units}
-
-\RequirePackage{siunitx}
-
-% --------------------------------------------------------------------------
-\DeclareSIUnit \atm {atm}
-\DeclareSIUnit \atmosphere {atm}
-\DeclareSIUnit \calory {cal}
-\DeclareSIUnit \cal {cal}
-\DeclareSIUnit \moLar {\mole\per\liter}
-\DeclareSIUnit \MolMass {\gram\per\mole}
-\DeclareSIUnit \normal {\textsc{n}}
-
-\ChemCompatibilityTo{5.8g}
- \DeclareSIUnit \torr {torr}
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.8h}
- \DeclareSIUnit \Torr {Torr}
-\EndChemCompatibility
-
-\ChemCompatibilityFrom{5.10}
- \DeclareSIUnit \torr {Torr}
-\EndChemCompatibility
-
-\AtEndPreamble
- {
- \chemmacros_if_package_loaded:nF {chemstyle}
- {
- \DeclareSIUnit {\cmc } {\cubic\centi\metre}
- \DeclareSIUnit {\molar} {\mole\per\cubic\deci\metre}
- \DeclareSIUnit {\Molar} {\textsc{m}}
- }
- }
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-2015/09/28 - change \AtBeginDocument into \AtEndPreamble
-2019/11/07 - correction torr -> Torr
-
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.xfrac.code.tex b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.xfrac.code.tex
deleted file mode 100644
index 656c03426b2..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.module.xfrac.code.tex
+++ /dev/null
@@ -1,137 +0,0 @@
-% --------------------------------------------------------------------------
-%
-% the CHEMMACROS package -- module: `xfrac'
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\ChemModule{xfrac}{2015/07/22 use xfrac package with chemmacros}
-
-\RequirePackage{xfrac}
-
-% --------------------------------------------------------------------------
-
-% #1: type
-% #2: numerator
-% #3: denominator
-\cs_new_protected:Npn \chemmacros_frac:nnn #1#2#3
- {
- \IfInstanceExistTF {xfrac} {chemmacros-frac-\f@family-#1}
- { \sfrac [chemmacros-frac-\f@family-#1] {#2} {#3} }
- { \sfrac [chemmacros-frac-default-#1]{#2} {#3} }
- }
-
-\NewDocumentCommand \chemfrac {O{text}mm}
- { \chemmacros_frac:nnn {#1} {#2} {#3} }
-
-% --------------------------------------------------------------------------
-
-% default:
-\DeclareInstance {xfrac} {chemmacros-frac-cmr-superscript} {text}
- {
- numerator-top-sep = -.1ex ,
- slash-left-kern = -.2em ,
- slash-right-kern = -.2em ,
- slash-symbol-font = cmr
- }
-
-\DeclareInstance {xfrac} {chemmacros-frac-cmr-text} {text}
- {
- numerator-top-sep = 0ex ,
- slash-left-kern = -.2em ,
- slash-right-kern = -.2em ,
- slash-symbol-font = cmr
- }
-
-% computer modern (same as default):
-\DeclareInstance {xfrac} {chemmacros-frac-cmr-superscript} {text}
- {
- numerator-top-sep = -.1ex ,
- slash-left-kern = -.2em ,
- slash-right-kern = -.2em ,
- slash-symbol-font = cmr
- }
-
-\DeclareInstance {xfrac} {chemmacros-frac-cmr-text} {text}
- {
- numerator-top-sep = 0ex ,
- slash-left-kern = -.2em ,
- slash-right-kern = -.2em ,
- slash-symbol-font = cmr
- }
-
-% Linux Libertine T lining:
-\DeclareInstance {xfrac} {chemmacros-frac-LinuxLibertineT-TLF-text} {text}
- {
- numerator-top-sep = 0ex ,
- slash-left-kern = 0em ,
- slash-right-kern = .05em ,
- slash-symbol-font = LinuxLibertineT-TLF
- }
-
-\DeclareInstance {xfrac} {chemmacros-frac-LinuxLibertineT-TLF-superscript} {text}
- {
- scale-factor = 1.2 ,
- denominator-bot-sep = -.1ex ,
- numerator-top-sep = -.1ex ,
- slash-left-kern = .1em ,
- slash-right-kern = .1em ,
- slash-symbol-font = LinuxLibertineT-TLF
- }
-
-% Linux Libertine T oldstyle:
-\DeclareInstance {xfrac} {chemmacros-frac-LinuxLibertineT-TOsF-text} {text}
- {
- denominator-bot-sep = .1ex ,
- numerator-top-sep = -.2ex ,
- slash-left-kern = 0em ,
- slash-right-kern = 0em ,
- slash-symbol-font = LinuxLibertineT-TOsF
- }
-
-\DeclareInstance {xfrac} {chemmacros-frac-LinuxLibertineT-TOsF-superscript} {text}
- {
- scale-factor = 1.2 ,
- denominator-bot-sep = -.1ex ,
- numerator-top-sep = -.2ex ,
- slash-left-kern = 0em ,
- slash-right-kern = .1em ,
- slash-symbol-font = LinuxLibertineT-TOsF
- }
-
-% lmodern:
-\DeclareInstance {xfrac} {chemmacros-frac-lmr-superscript} {text}
- {
- slash-left-kern = -.2em ,
- slash-right-kern = -.2em ,
- slash-symbol-font = lmr
- }
-
-\DeclareInstance {xfrac} {chemmacros-frac-lmr-text} {text}
- {
- slash-left-kern = -.2em ,
- slash-right-kern = -.2em ,
- slash-symbol-font = lmr
- }
-
-% --------------------------------------------------------------------------
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty
index e56c6284763..5fcbd0a3180 100644
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty
+++ b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty
@@ -12,29 +12,29 @@
% 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
+% 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.3c or later is part of all distributions of LaTeX
-% version 2008/05/04 or later.
+% 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.
% --------------------------------------------------------------------------
-\RequirePackage{expl3,xparse,l3keys2e}
+\RequirePackage{l3keys2e}
\ExplSyntaxOn
% --------------------------------------------------------------------------
% package information:
-\tl_const:Nn \c_chemmacros_date_tl {2020/11/21}
-\tl_const:Nn \c_chemmacros_version_major_number_tl {5}
-\tl_const:Nn \c_chemmacros_version_minor_number_tl {11}
-\tl_const:Nn \c_chemmacros_version_subrelease_tl {a}
+\tl_const:Nn \c_chemmacros_date_tl {2022/01/16}
+\tl_const:Nn \c_chemmacros_version_major_number_tl {6}
+\tl_const:Nn \c_chemmacros_version_minor_number_tl {0}
+\tl_const:Nn \c_chemmacros_version_subrelease_tl {}
\tl_const:Nx \c_chemmacros_version_number_tl
{
\c_chemmacros_version_major_number_tl .
@@ -55,218 +55,6730 @@
{\c_chemmacros_info_tl \c_space_tl (CN)}
% --------------------------------------------------------------------------
-% set compatibility
-\tl_new:N \l__chemmacros_compatibility_version_tl
-\tl_set_eq:NN \l__chemmacros_compatibility_version_tl \c_chemmacros_version_tl
+% variants of kernel functions:
+\cs_generate_variant:Nn \tl_if_eq:nnTF {x,xx,V}
+\cs_generate_variant:Nn \tl_replace_once:Nnn {NnV}
+\cs_generate_variant:Nn \tl_tail:n {e}
-\keys_define:nn {chemmacros/compatibility}
+\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}
+\cs_generate_variant:Nn \seq_item:Nn {cV,NV}
+\cs_generate_variant:Nn \seq_put_right:Nn {Ne}
+
+\cs_generate_variant:Nn \prop_item:Nn {NV}
+\cs_generate_variant:Nn \prop_gput:Nnn {cxx,NVf}
+
+\cs_generate_variant:Nn \int_to_arabic:n {V}
+
+\cs_generate_variant:Nn \msg_error:nnnnn {nnnx}
+\cs_generate_variant:Nn \msg_error:nnnn {nnnx}
+\cs_generate_variant:Nn \msg_error:nnn {nnV}
+\cs_generate_variant:Nn \msg_warning:nnn {nnV}
+\cs_generate_variant:Nn \msg_warning:nnnn {nnV}
+\cs_generate_variant:Nn \msg_show:nnnn {nnnV}
+
+\cs_generate_variant:Nn \vbox_set:Nn {NV}
+
+\cs_generate_variant:Nn \keys_define:nn {x}
+\cs_generate_variant:Nn \keys_set:nn {x,nx}
+
+\cs_generate_variant:Nn \str_if_eq:nnF {xx}
+
+% --------------------------------------------------------------------------
+% load-time messages:
+\msg_new:nnn {chemmacros} {load-time-option}
+ {
+ `#1'~ is~ a~ load-time~ option! \\
+ You~ cannot~ set~ it~ with~ \token_to_str:N \chemsetup ! \\
+ You~ need~ to~ use~ \token_to_str:N \usepackage [#1] {chemmacros} .
+ }
+
+\msg_new:nnn {chemmacros} {unknown-option}
+ {
+ Unknown~ option~ `#1' \\
+ I~ dont'~ know~ the~ option~ `#1'.~ Please~ make~ sure~ there~ is~ no~
+ typo.~ Check~ the~ manual~ for~ help.
+ }
+
+\msg_new:nnn {chemmacros} {module-mechanism}
+ {
+ The~ module~ mechanism~ has~ changed~ with~ v6! \\
+ ==== ======= ========== ==== ======== ===== === \\
+ *~ All~ modules~ have~ been~ integrated~ into~ \\
+ the~ main~ package~ and~ thus~ are~ preloaded~ \\
+ already~ (unless~ you~ have~ loaded~ \\
+ `chemmacros'~ with~ the~ `minimal'~ option). \\
+ *~ The~ new~ default~ corresponds~ to~ the~ \\
+ earlier~ setting~ `modules=all'.
+ \tl_if_blank:nF {#1}
+ { \\ The~ command~ \token_to_str:N #1 is~ deprecated. }
+ }
+
+\cs_new_protected:Npn \__chemmacros_loadtime_error:n #1
+ { \msg_error:nnV {chemmacros} {#1} \l_keys_key_str }
+
+\cs_new_protected:Npn \__chemmacros_loadtime_warning:n #1
+ { \msg_warning:nnV {chemmacros} {#1} \l_keys_key_str }
+
+\clist_new:N \l_chemmacros_modules_clist
+\clist_set:Nn \l_chemmacros_modules_clist
+ {
+ base, errorcheck, lang, greek, chemformula, charges, acid-base, symbols,
+ particles, phases, nomenclature, tikz, xfrac, translations
+ }
+
+\clist_const:Nn \c_chemmacros_all_modules_clist
+ {
+ base, errorcheck, lang, greek, chemformula, charges, acid-base, symbols,
+ particles, phases, nomenclature, tikz, isotopes, mechanisms, newman,
+ orbital, polymers, reactions, redox, xfrac, scheme, spectroscopy,
+ thermodynamics, units, reactants, translations
+ }
+
+\keys_define:nn {chemmacros/package-options}
+ {
+ minimal .bool_set:N = \l__chemmacros_minimal_bool ,
+ minimal .initial:n = false ,
+ modules .code:n =
+ \clist_if_in:NF \l_chemmacros_modules_clist
+ { \clist_put_right:Nn \l_chemmacros_modules_clist {#1} } ,
+ unknown .code:n = \__chemmacros_loadtime_warning:n {unknown-option}
+ }
+
+\ProcessKeysPackageOptions {chemmacros/package-options}
+
+\keys_define:nn {chemmacros}
+ {
+ minimal .code:n = \__chemmacros_loadtime_error:n {load-time-option} ,
+ modules .code:n =
+ \msg_warning:nn {chemmacros} {module-mechanism}
+ \__chemmacros_loadtime_warning:n {load-time-option} ,
+ package-options / minimal .meta:nn = {chemmacros} {minimal} ,
+ package-options / modules .meta:nn = {chemmacros} {modules}
+ }
+
+\NewDocumentCommand \usechemmodule {m}
+ { \msg_warning:nnn {chemmacros} {module-mechanism} {\usechemmodule} }
+
+\bool_if:NF \l__chemmacros_minimal_bool
+ {
+ \clist_set_eq:NN
+ \l_chemmacros_modules_clist
+ \c_chemmacros_all_modules_clist
+ }
+
+% --------------------------------------------------------------------------
+% temporary variables:
+\tl_new:N \l__chemmacros_tmpa_tl
+\tl_new:N \l__chemmacros_tmpb_tl
+\tl_new:N \l__chemmacros_tmpc_tl
+\tl_new:N \l__chemmacros_tmpd_tl
+
+\bool_new:N \l__chemmacros_tmpa_bool
+\bool_new:N \l__chemmacros_tmpb_bool
+\bool_new:N \l__chemmacros_tmpc_bool
+
+\dim_new:N \l__chemmacros_tmpa_dim
+\dim_new:N \l__chemmacros_tmpb_dim
+\dim_new:N \l__chemmacros_tmpc_dim
+
+\seq_new:N \l__chemmacros_tmpa_seq
+\seq_new:N \l__chemmacros_tmpb_seq
+\seq_new:N \l__chemmacros_tmpc_seq
+
+\int_new:N \l__chemmacros_tmpa_int
+\int_new:N \l__chemmacros_tmpb_int
+\int_new:N \l__chemmacros_tmpc_int
+
+\box_new:N \l__chemmacros_tmpa_box
+\box_new:N \l__chemmacros_tmpb_box
+\box_new:N \l__chemmacros_tmpc_box
+
+\clist_new:N \l__chemmacros_tmpa_clist
+\clist_new:N \l__chemmacros_tmpb_clist
+\clist_new:N \l__chemmacros_tmpc_clist
+
+\str_new:N \l__chemmacros_tmpa_str
+\str_new:N \l__chemmacros_tmpb_str
+\str_new:N \l__chemmacros_tmpc_str
+
+% ----------------------------------------------------------------------------
+% module mechanism:
+\msg_new:nnn {chemmacros} {module-missing}
+ {
+ You've~ requested~ the~ chemmacros~ module~ `#1'~ but~ it~ appears~ to~
+ be~ missing~ on~ your~ system.~ Maybe~ you've~ misspelled~ the~ name?~
+ Loading~ the~ module~ will~ abort~ \msg_line_context:
+ }
+
+\msg_new:nnn {chemmacros} {loading-module}
+ { Loading~ the~ chemmacros~ module~ `#1'~ ... }
+
+\msg_new:nnn {chemmacros} {wrong-module-name}
+ { The~ module~ file~ name~ is~ `#2'~ but~ it~ provides~ module~ `#1'. }
+
+\msg_new:nnn {chemmacros} {forbidden-module}
+ {
+ You've~ requested~ the~ chemmacros~ module~ `modules'~ \msg_line_context: .~
+ This~ module~ is~ a~ pseudo~ module~ which~ may~ not~ be~ loaded~ through~
+ the~ module~ loading~ mechansim.
+ }
+
+% ----------------------------------------------------------------------------
+\prg_new_conditional:Npnn \chemmacros_package_if_loaded:n #1 {p,T,F,TF}
+ {
+ \cs_if_exist:cTF {ver@#1.sty}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% ----------------------------------------------------------------------------
+% this is for external file modules called "styles":
+\tl_const:Nn \c__chemmacros_module_extension_tl {code.tex}
+\tl_const:Nn \c__chemmacros_module_prefix_tl {chemmacros}
+
+\tl_new:N \g__chemmacros_modules_loaded_tl
+
+\cs_new_protected:Npn \chemmacros_modules_load:n #1
+ { \clist_map_inline:nn {#1} { \chemmacros_module_load:n {##1} } }
+
+\cs_new_protected:Npn \chemmacros_module_load:n #1
+ {
+ \tl_set:Nx \l_tmpa_tl { \tl_trim_spaces:n {#1} }
+ \str_if_eq:VnTF \l_tmpa_tl {modules}
+ { \msg_error:nn {chemmacros} {forbidden-module} }
+ { \__chemmacros_module_load:V \l_tmpa_tl }
+ }
+
+\cs_new_protected:Npn \__chemmacros_module_load:n #1
+ {
+ \chemmacros_module_if_loaded:nF {#1}
+ {
+ \chemmacros_module_if_exist:nTF {#1}
+ {
+ \__chemmacros_module_hook_use:nn {#1} {before}
+ \msg_info:nnn {chemmacros} {loading-module} {#1}
+ \@onefilewithoptions
+ {\c__chemmacros_module_prefix_tl.#1}[][]
+ \c__chemmacros_module_extension_tl
+ \__chemmacros_module_hook_use:nn {#1} {after}
+ }
+ { \msg_error:nnn {chemmacros} {module-missing} {#1} }
+ }
+ }
+\cs_generate_variant:Nn \__chemmacros_module_load:n {V}
+
+\prg_new_conditional:Npnn \chemmacros_module_if_loaded:n #1 {p,T,F,TF}
+ {
+ \tl_if_in:NnTF \g__chemmacros_modules_loaded_tl {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\prg_new_conditional:Npnn \chemmacros_module_if_exist:n #1 {p,T,F,TF}
+ {
+ \file_if_exist:nTF
+ {\c__chemmacros_module_prefix_tl.#1.\c__chemmacros_module_extension_tl}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% --------------------------------------------------------------------------
+% module hooks:
+% #1: module
+% #2: code
+\cs_new_protected:Npn \chemmacros_module_after:nn #1#2
+ {
+ \chemmacros_module_if_loaded:nTF {#1}
+ {#2}
+ { \__chemmacros_add_to_module_hook:nnn {#1} {after} {#2} }
+ }
+
+% #1: module
+% #2: code
+\cs_new_protected:Npn \chemmacros_module_before:nn #1#2
+ {
+ % TODO: error in T case?
+ \chemmacros_module_if_loaded:nF {#1}
+ { \__chemmacros_add_to_module_hook:nnn {#1} {before} {#2} }
+ }
+
+% #1: module
+% #2: hook name
+% #3: code
+\cs_new_protected:Npn \__chemmacros_add_to_module_hook:nnn #1#2#3
+ {
+ \chemmacros_module_if_loaded:nF {#1}
+ {
+ \tl_if_exist:cF {g__chemmacros_module_hook_#1_#2_tl}
+ { \tl_new:c {g__chemmacros_module_hook_#1_#2_tl} }
+ \tl_gput_right:cn {g__chemmacros_module_hook_#1_#2_tl} {#3}
+ }
+ }
+
+% #1: module
+% #2: hook name
+\cs_new_protected:Npn \__chemmacros_module_hook_use:nn #1#2
+ {
+ \tl_if_exist:cT {g__chemmacros_module_hook_#1_#2_tl}
+ {
+ \tl_use:c {g__chemmacros_module_hook_#1_#2_tl}
+ \tl_gclear:c {g__chemmacros_module_hook_#1_#2_tl}
+ }
+ }
+\cs_generate_variant:Nn \__chemmacros_module_hook_use:nn {V}
+
+% --------------------------------------------------------------------------
+\tl_new:N \l__chemmacros_module_date_tl
+\tl_new:N \l__chemmacros_module_version_tl
+
+\tl_set_eq:NN \l__chemmacros_module_date_tl \c_chemmacros_date_tl
+\tl_set_eq:NN \l__chemmacros_module_version_tl \c_chemmacros_version_tl
+
+\cs_new_protected:Npn \__chemmacros_module:nn #1#2
+ {
+ \tl_gput_right:Nn \g__chemmacros_modules_loaded_tl {{#1}}
+ \str_if_eq:xxF
+ {\c__chemmacros_module_prefix_tl.#1.\c__chemmacros_module_extension_tl}
+ {\@currname.\@currext}
+ {
+ \msg_error:nnnxx {chemmacros} {wrong-module-name}
+ {#1}
+ {\@currname.\@currext}
+ }
+ \ProvidesFile
+ {\c__chemmacros_module_prefix_tl.#1.\c__chemmacros_module_extension_tl}
+ [
+ \l__chemmacros_module_date_tl
+ \c_space_tl
+ v \l__chemmacros_module_version_tl
+ \c_space_tl
+ chemmacros~ style~ file~ `#1'~ (#2)
+ ]
+ }
+
+% --------------------------------------------------------------------------
+% define internal chemmacros modules:
+\tl_new:N \g_chemmacros_module_tl
+\tl_new:N \g__chemmacros_module_stop_tl
+
+\cs_new_protected:Npn \chemmacros_stop_module:n #1
+ { \tl_gput_right:Nn \g__chemmacros_module_stop_tl {{#1}} }
+
+% #1: name
+% #2: description
+\cs_new_protected:Npn \ChemModule #1#2
+ {
+ \str_if_in:NnT \g__chemmacros_module_stop_tl {{#1}}
+ { \__chemmacros_gobble_module:w }
+ \msg_log:nnnn {chemmacros} {loading-module} {#1} {#2}
+ \msg_term:nnnn {chemmacros} {loading-module} {#1} {#2}
+ \tl_gput_right:Nn \g__chemmacros_modules_loaded_tl {{#1}}
+ \tl_gset:Nn \g_chemmacros_module_tl {#1}
+ \__chemmacros_module_hook_use:nn {#1} {before}
+ }
+
+\cs_new_protected:Npn \ChemModuleEnd
+ { \__chemmacros_module_hook_use:Vn \g_chemmacros_module_tl {after} }
+
+\cs_new_protected:Npn \__chemmacros_gobble_module:w #1 \ChemModuleEnd {}
+
+\clist_map_inline:Nn \c_chemmacros_all_modules_clist
+ {
+ \clist_if_in:NnF \l_chemmacros_modules_clist {#1}
+ { \chemmacros_stop_module:n {#1} }
+ }
+
+% --------------------------------------------------------------------------
+\ChemModule{base}{2022/01/10 basic chemmacros module}
+
+% --------------------------------------------------------------------------
+\msg_new:nnn {chemmacros} {command-deprecated}
+ {
+ The~ command~ \token_to_str:N #1 \c_space_tl is~ deprecated.~ Use~
+ \token_to_str:N #2 \c_space_tl instead.
+ }
+
+% define a deprecated command with hints to the corresponding new one:
+\cs_new_protected:Npn \chemmacros_define_deprecated:NN #1#2
+ {
+ \cs_set_protected:Npn #1
+ { \msg_warning:nnnn {chemmacros} {command-deprecated} {#1} {#2} #2 }
+ }
+
+\NewDocumentCommand \DeclareChemDeprecated {mm}
+ { \chemmacros_define_deprecated:NN #1 #2 }
+
+% --------------------------------------------------------------------------
+% define a macro set:
+% \NewChem... \RenewChem... \DeclareChem... \ProvideChem...
+% #1: macro names
+% #2: arg spec
+% #3: internal command call
+\cs_new_protected:Npn \chemmacros_new_macroset:nnn #1#2#3
+ {
+ \exp_args:Nc \NewDocumentCommand
+ {
+ NewChem
+ \str_uppercase:f { \tl_head:n {#1} }
+ \tl_tail:n {#1}
+ }
+ {#2}
+ {
+ \cs_if_free:NTF ##1
+ { #3 }
+ { \msg_error:nnn {chemmacros} {new-#1} {##1} }
+ }
+ \exp_args:Nc \NewDocumentCommand
+ {
+ RenewChem
+ \str_uppercase:f { \tl_head:n {#1} }
+ \tl_tail:n {#1}
+ }
+ {#2}
+ {
+ \cs_if_free:NTF ##1
+ { \msg_error:nnn {chemmacros} {renew-#1} {##1} }
+ { #3 }
+ }
+ \exp_args:Nc \NewDocumentCommand
+ {
+ DeclareChem
+ \str_uppercase:f { \tl_head:n {#1} }
+ \tl_tail:n {#1}
+ }
+ {#2}
+ {#3}
+ \exp_args:Nc \NewDocumentCommand
+ {
+ ProvideChem
+ \str_uppercase:f { \tl_head:n {#1} }
+ \tl_tail:n {#1}
+ }
+ {#2}
+ { \cs_if_free:NT ##1 { #3 } }
+ \msg_new:nnn {chemmacros} {new-#1}
+ {
+ You've~ tried~ to~ define~ a~ #1~ with~ \token_to_str:N
+ \NewChem #1 ,~ but~ the~ command~ sequence~ \token_to_str:N ##1
+ \c_space_tl already~ exists.~ Please~ choose~ another~ name.
+ }
+ \msg_new:nnn {chemmacros} {renew-#1}
+ {
+ You've~ tried~ to~ renew~ the~ #1~ \token_to_str:N ##1 ,~ but~
+ it~ doesn't~ exist.
+ }
+ }
+
+\cs_new_protected:Npn \chemmacros_new_environment_macroset:nnn #1#2#3
+ {
+ \exp_args:Nc \NewDocumentCommand {NewChem#1} {#2}
+ {
+ \bool_lazy_and:nnTF
+ { \cs_if_free_p:c {##1} }
+ { \cs_if_free_p:c {end##1} }
+ {#3}
+ { \msg_error:nnn {chemmacros} {new-#1} {##1} }
+ }
+ \exp_args:Nc \NewDocumentCommand {RenewChem#1} {#2}
+ {
+ \bool_lazy_or:nnTF
+ { \cs_if_free_p:c {##1} }
+ { \cs_if_free_p:c {end##1} }
+ { \msg_error:nnn {chemmacros} {renew-#1} {##1} }
+ {#3}
+ }
+ \exp_args:Nc \NewDocumentCommand {DeclareChem#1} {#2} {#3}
+ \exp_args:Nc \NewDocumentCommand {ProvideChem#1} {#2}
+ {
+ \bool_lazy_and:nT
+ { \cs_if_free_p:c {##1} }
+ { \cs_if_free_p:c {end##1} }
+ {#3}
+ }
+ \msg_new:nnn {chemmacros} {new-#1}
+ {
+ You've~ tried~ to~ define~ a~ #1~ with~ \token_to_str:N
+ \NewChem #1 ,~ but~ the~ command~ sequence~ \exp_not:c {##1}
+ \c_space_tl already~ exists.~ Please~ choose~ another~ name.
+ }
+ \msg_new:nnn {chemmacros} {renew-#1}
+ { You've~ tried~ to~ renew~ the~ #1~ ##1,~ but~ it~ doesn't~ exist. }
+ }
+
+\NewDocumentCommand \NewChemMacroset {smmm}
+ {
+ \IfBooleanTF {#1}
+ { \chemmacros_new_environment_macroset:nnn {#2} {#3} {#4} }
+ { \chemmacros_new_macroset:nnn {#2} {#3} {#4} }
+ }
+
+% --------------------------------------------------------------------------
+\cs_new_protected:Npn \chemmacros_define_keys:nn #1#2
+ { \keys_define:nn {chemmacros/#1} {#2} }
+\cs_generate_variant:Nn \chemmacros_define_keys:nn {x}
+
+\cs_new_protected:Npn \chemmacros_set_keys:nn #1#2
+ { \keys_set:nn {chemmacros/#1} {#2} }
+\cs_generate_variant:Nn \chemmacros_set_keys:nn {x,nx}
+
+\cs_new_protected:Npn \chemmacros_set_keys_groups:nnn #1#2#3
+ { \keys_set_groups:nnn {chemmacros/#1} {#2} {#3} }
+
+\cs_new_protected:Npn \chemmacros_set_keys_filter:nnn #1#2#3
+ { \keys_set_filter:nnn {chemmacros/#1} {#2} {#3} }
+
+\cs_new_protected:Npn \chemmacros_define_global_keys:n #1
+ { \keys_define:nn {chemmacros} {#1} }
+
+\cs_new_protected:Npn \chemmacros_set_global_keys:n #1
+ { \keys_set:nn {chemmacros} {#1} }
+
+% --------------------------------------------------------------------------
+% basic tools:
+\cs_new:Npn \chemmacros_remove_backslash:N #1
+ { \exp_after:wN \use_none:n \token_to_str:N #1 }
+
+\cs_new_eq:NN \chemmacros_ignore_spaces: \tex_ignorespaces:D
+
+\cs_new_protected:Npn \chemmacros_nobreak: { \tex_penalty:D 10000 \scan_stop: }
+\cs_new_protected:Npn \chemmacros_allow_break: { \tex_penalty:D \c_zero_int }
+\cs_new_protected:Npn \chemmacros_skip_nobreak:N #1
+ {
+ \chemmacros_nobreak:
+ \skip_horizontal:N #1
+ \chemmacros_nobreak:
+ }
+
+% this is used at least in the `isotope' module
+\prg_new_conditional:Npnn \chemmacros_if_is_int:n #1 {p,T,F,TF}
+ {
+ \if_charcode:w ! \if_int_compare:w 9 < 1#1 ! \else: _ \fi:
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+
+\prg_new_conditional:Npnn \chemmacros_if_loaded:nn #1#2 {p,T,F,TF}
+ {
+ \use:c {chemmacros_if_#1_loaded:nTF} {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\prg_new_conditional:Npnn \chemmacros_if_package_loaded:n #1 {p,T,F,TF}
+ {
+ \cs_if_exist:cTF {ver@#1.sty}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\prg_new_conditional:Npnn \chemmacros_if_class_loaded:n #1 {p,T,F,TF}
+ {
+ \cs_if_exist:cTF {ver@#1.cls}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% this is still true \AtBeginDocument:
+\prg_new_conditional:Npnn \chemmacros_if_preamble: {p,T,F,TF}
+ {
+ \cs_if_eq:NNTF \@onlypreamble \@notprerr
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+
+% this is still false \AtBeginDocument:
+\prg_new_conditional:Npnn \chemmacros_if_document: {p,T,F,TF}
+ {
+ \bool_if:NTF \l__chemmacros_in_document_bool
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_new_protected:Npn \chemmacros_cs_if_free_new:Npn #1
+ {
+ \cs_if_exist:NF #1
+ { \cs_new:Npn #1 }
+ }
+\cs_generate_variant:Nn \chemmacros_cs_if_free_new:Npn {c}
+
+\cs_new_protected:Npn \chemmacros_cs_if_free_new_protected:Npn #1
+ {
+ \cs_if_exist:NF #1
+ { \cs_new_protected:Npn #1 }
+ }
+\cs_generate_variant:Nn \chemmacros_cs_if_free_new_protected:Npn {c}
+
+% #1: counter
+% #2: singular
+% #3: plural
+% #4: Singular
+% #5: Plural
+\cs_new_protected:Npn \chemmacros_add_cleveref_support:nnnnn #1#2#3#4#5
+ {
+ \hook_gput_code:nnn {package/cleveref/after} {chemmacros}
+ {
+ \cs_if_exist:cF {cref@#1@name}
+ {
+ \legacy_if:nTF {@cref@capitalise}
+ { \crefname {#1} {#4} {#5} }
+ { \crefname {#1} {#2} {#3} }
+ \Crefname {#1} {#4} {#5}
+ }
+ }
+ }
+\cs_generate_variant:Nn \chemmacros_add_cleveref_support:nnnnn {nnnx,nnnxx,nnnnx}
+
+% #1: counter
+% #2: singular
+% #3: Singular (optional)
+% #4: plural
+% #5: Plural (optional)
+\NewDocumentCommand \ChemCleverefSupport {mmomo}
+ {
+ \IfNoValueTF {#3}
+ {
+ \IfNoValueTF {#5}
+ {
+ \chemmacros_add_cleveref_support:nnnnn
+ {#1}
+ {#2}
+ {#4}
+ { \text_titlecase:n {#2} }
+ { \text_titlecase:n {#4} }
+ }
+ {
+ \chemmacros_add_cleveref_support:nnnnn
+ {#1}
+ {#2}
+ {#4}
+ { \text_titlecase:n {#2} }
+ {#5}
+ }
+ }
+ {
+ \IfNoValueTF {#5}
+ {
+ \chemmacros_add_cleveref_support:nnnnn
+ {#1}
+ {#2}
+ {#4}
+ {#3}
+ { \text_titlecase:n {#4} }
+ }
+ { \chemmacros_add_cleveref_support:nnnnn {#1} {#2} {#4} {#3} {#5} }
+ }
+ }
+\@onlypreamble\ChemCleverefSupport
+
+% #1: id
+% #2: mid sentence
+% #3: begin sentence
+\cs_new_protected:Npn \chemmacros_add_fancyref_support:nnn #1#2#3
{
- compatibility .code:n =
- \str_case:nnTF {#1}
+ \hook_gput_code:nnn {package/fancyref/after} {chemmacros}
+ {
+ \chemmacros_cs_if_free_new:cpn {fancyref#1labelprefix} {#1}
+ \chemmacros_cs_if_free_new:cpn {fref#1name} {#2}
+ \chemmacros_cs_if_free_new:cpn {Fref#1name} {#3}
+ \exp_args:Nnx \frefformat {vario} { \exp_not:c {fancyref#1labelprefix} }
+ { \use:c {fref#1name} \fancyrefdefaultspacing ##1##3 }
+ \exp_args:Nnx \Frefformat {vario} { \exp_not:c {fancyref#1labelprefix} }
+ { \use:c {Fref#1name} \fancyrefdefaultspacing ##1##3 }
+ \exp_args:Nnx \frefformat {plain} { \exp_not:c {fancyref#1labelprefix} }
+ { \use:c {fref#1name} \fancyrefdefaultspacing ##1 }
+ \exp_args:Nnx \Frefformat {plain} { \exp_not:c {fancyref#1labelprefix} }
+ { \use:c {Fref#1name} \fancyrefdefaultspacing ##1 }
+ }
+ }
+\cs_generate_variant:Nn \chemmacros_add_fancyref_support:nnn {nnx}
+
+% #1: id
+% #2: mid sentence
+% #3: begin sentence (optional)
+\NewDocumentCommand \ChemFancyrefSupport {mmo}
+ {
+ \IfNoValueTF {#3}
+ { \chemmacros_add_fancyref_support:nnn {#1} {#2} { \text_titlecase:n {#3} } }
+ { \chemmacros_add_fancyref_support:nnn {#1} {#2} {#3} }
+ }
+\@onlypreamble\ChemFancyrefSupport
+
+% --------------------------------------------------------------------------
+% some checks at begin document:
+\bool_new:N \l__chemmacros_in_document_bool
+\bool_new:N \l__chemmacros_chemstyle_bool
+
+\hook_gput_code:nnn {begindocument/before} {chemmacros}
+ {
+ \bool_set_true:N \l__chemmacros_in_document_bool
+ \chemmacros_if_package_loaded:nT {chemstyle}
+ { \bool_set_true:N \l__chemmacros_chemstyle_bool }
+ }
+
+% --------------------------------------------------------------------------
+% detection and handling of bold face:
+\RequirePackage{bm}
+
+\prg_new_protected_conditional:Npnn \chemmacros_if_bold: {T,F,TF}
+ {
+ \seq_if_in:NVTF \l__chemmacros_if_bf_seq \f@series
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\seq_new:N \l__chemmacros_if_bf_seq
+
+\seq_set_split:Nnn \l__chemmacros_if_bf_seq { , }
+ {
+ b , bc , bm , bx , bux ,
+ eb , ebc , ebx , mb ,
+ sb , sbc , sbx ,
+ ub , ubc , ubx
+ }
+
+\cs_new_protected:Npn \chemmacros_bold:n #1
+ {
+ \chemmacros_if_bold:TF
+ {
+ \mode_if_math:TF
+ { \bm {#1} }
+ { \textbf {#1} }
+ }
+ {#1}
+ }
+
+\cs_new_protected:Npn \chemmacros_detect_bold:n
+ { \error \chemmacros_bold:n }
+
+% --------------------------------------------------------------------------
+\RequirePackage{amstext}
+
+\cs_new_protected:Npn \chemmacros_text:n #1
+ { \mode_if_math:TF { \text {#1} } {#1} }
+\cs_generate_variant:Nn \chemmacros_text:n {V}
+
+\cs_new_protected:Npn \chemmacros_math:n #1
+ { \chemmacros_text:n { \c_math_toggle_token #1 \c_math_toggle_token } }
+\cs_generate_variant:Nn \chemmacros_math:n {V}
+
+% --------------------------------------------------------------------------
+% a setup command:
+\NewDocumentCommand \chemsetup {om}
+ {
+ \IfNoValueTF {#1}
+ { \keys_set:nn {chemmacros} {#2} }
+ { \keys_set:nn {chemmacros/#1} {#2} }
+ }
+
+% --------------------------------------------------------------------------
+
+% load package #1 and add its options to chemmacros
+% this requires that package #1 defines its options with l3keys using its
+% name as module
+\cs_new_protected:Npn \chemmacros_integrate_package:nnn #1#2#3
+ {
+ \tl_if_blank:nTF {#3}
+ {
+ \tl_if_blank:nTF {#1}
+ { \RequirePackage {#2} }
+ { \RequirePackage [#1] {#2} }
+ }
+ {
+ \tl_if_blank:nTF {#1}
+ { \RequirePackage {#2} [#3] }
+ { \RequirePackage [#1] {#2} [#3] }
+ }
+ \chemmacros_define_global_keys:n
+ {
+ #2 .choice: ,
+ #2 / unknown .code:n =
+ \keys_set:no {#2} { \l_keys_key_tl = ##1 }
+ }
+ }
+
+% --------------------------------------------------------------------------
+
+\bool_new:N \l__chemmacros_hyperref_bool
+
+\hook_gput_code:nnn {begindocument/end} {chemmacros}
+ {
+ \chemmacros_if_package_loaded:nT {hyperref}
+ { \bool_set_true:N \l__chemmacros_hyperref_bool }
+ }
+
+\ChemModuleEnd
+\ChemModule{errorcheck}{2022/01/16 error checking for unloaded modules}
+
+\msg_new:nnn {chemmacros} {undefined}
+ {
+ The~ #1~ `#2'~ is~ undefined.~ You~ need~ to~ load~ the~
+ `#3'~ module.
+ }
+
+\cs_new_protected:Npn \chemmacros_requires_module:nNn #1#2#3
+ {
+ \chemmacros_module_if_loaded:nF {#3}
+ {
+ \cs_if_free:NT #2
+ {
+ \str_case:nn {#1}
+ {
+ {command} {
+ \cs_set:Npn #2
+ {
+ \msg_error:nnnxn {chemmacros} {undefined}
+ {#1}
+ { \token_to_str:N #2 }
+ {#3}
+ }
+ \chemmacros_module_before:nn {#3} { \cs_undefine:N #2 }
+ }
+ {environment} {
+ \cs_set:Npn #2
+ {
+ \msg_error:nnnxn {chemmacros} {undefined}
+ {#1}
+ { \tl_tail:e { \token_to_str:N #2 } }
+ {#3}
+ }
+ \chemmacros_module_before:nn {#3} { \cs_undefine:N #2 }
+ }
+ }
+ }
+ }
+ }
+\cs_generate_variant:Nn \chemmacros_requires_module:nNn {nc}
+
+\cs_new_protected:Npn \chemmacros_command_requires_module:Nn #1#2
+ { \chemmacros_requires_module:nNn {command} #1 {#2} }
+
+\cs_new_protected:Npn \chemmacros_environment_requires_module:nn #1#2
+ { \chemmacros_requires_module:ncn {environment} {#1} {#2} }
+
+% --------------------------------------------------------------------------
+% add checking for the most common user commands and environments:
+% isotopes module
+\chemmacros_command_requires_module:Nn \isotope {isotopes}
+
+% mechanisms module
+\chemmacros_command_requires_module:Nn \mech {mechanisms}
+
+% newman module
+\chemmacros_command_requires_module:Nn \newman {newman}
+
+% orbital module
+\chemmacros_command_requires_module:Nn \orbital {orbital}
+
+% polymers module
+\chemmacros_command_requires_module:Nn \makepolymerdelims {polymers}
+
+% reactions module
+\chemmacros_environment_requires_module:nn {reaction} {reactions}
+\chemmacros_environment_requires_module:nn {reaction*} {reactions}
+\chemmacros_environment_requires_module:nn {reactions} {reactions}
+\chemmacros_environment_requires_module:nn {reactions*} {reactions}
+\chemmacros_command_requires_module:Nn \listofreactions {reactions}
+\chemmacros_command_requires_module:Nn \AddRxnDesc {reactions}
+
+% redox module
+\chemmacros_command_requires_module:Nn \ox {redox}
+\chemmacros_command_requires_module:Nn \OX {redox}
+\chemmacros_command_requires_module:Nn \redox {redox}
+
+% scheme module
+\chemmacros_environment_requires_module:nn {scheme} {scheme}
+\chemmacros_command_requires_module:Nn \listschemename {scheme}
+\chemmacros_command_requires_module:Nn \schemename {scheme}
+\chemmacros_command_requires_module:Nn \listofschemes {scheme}
+
+\hook_gput_code:nnn {package/chemscheme/before} {chemmacros}
+ {
+ \cs_undefine:N \scheme
+ \cs_undefine:N \endscheme
+ \cs_undefine:N \listschemename
+ \cs_undefine:N \schemename
+ \cs_undefine:N \listofschemes
+ }
+
+% spectroscopy module
+\chemmacros_command_requires_module:Nn \NMR {spectroscopy}
+\chemmacros_environment_requires_module:nn {experimental} {spectroscopy}
+
+% thermodynamics module
+\chemmacros_command_requires_module:Nn \state {thermodynamics}
+\chemmacros_command_requires_module:Nn \enthalpy {thermodynamics}
+\chemmacros_command_requires_module:Nn \entropy {thermodynamics}
+\chemmacros_command_requires_module:Nn \gibbs {thermodynamics}
+
+% xfrac module
+\chemmacros_command_requires_module:Nn \chemfrac {xfrac}
+
+% --------------------------------------------------------------------------
+
+\ChemModuleEnd
+\ChemModule{lang}{2020/11/29 language settings for chemmacros}
+
+\RequirePackage{translations}
+
+\msg_new:nnn {chemmacros} {language-not-defined}
+ {
+ You~ chose~ the~ language~ `#1'~ which~ is~ not~ defined~ by~ chemmacros.~
+ `english'~ is~ used~ instead.~ If~ you~ just~ mistyped~ try~ again!~
+ Otherwise~ contact~ the~ author~ and~ he'll~ probably~ add~ your~ language.
+ }
+
+% --------------------------------------------------------------------------
+% language settings:
+\bool_new:N \l__chemmacros_language_auto_bool
+\bool_set_true:N \l__chemmacros_language_auto_bool
+% this token list will hold the chosen language for chemmacros; since the
+% language is either chosen automatically or by option it is only available at
+% begin document
+\tl_new:N \l_chemmacros_language_tl
+\tl_set:Nn \l_chemmacros_language_tl {english}
+\tl_new:N \l__chemmacros_current_language_tl
+
+\tl_const:Nn \c__chemmacros_keyword_prefix_tl {chem-keyword-}
+
+\prop_new:N \g_chemmacros_translations_prop
+
+% translate the key #1
+\cs_new:Npn \chemmacros_translate:n #1
+ {
+ \bool_if:NTF \l__chemmacros_language_auto_bool
+ { \GetTranslation { \c__chemmacros_keyword_prefix_tl #1 } }
+ {
+ \GetTranslationFor
+ {\l_chemmacros_language_tl}
+ { \c__chemmacros_keyword_prefix_tl #1 }
+ }
+ }
+
+\DeclareExpandableDocumentCommand \ChemTranslate {m}
+ { \chemmacros_translate:n {#1} }
+
+\chemmacros_define_global_keys:n
+ {
+ language .value_required:n = true ,
+ language .code:n =
+ \tl_if_eq:nnTF {#1} {auto}
+ { \bool_set_true:N \l__chemmacros_language_auto_bool }
{
- {newest} {}
- {latest} {}
+ \bool_set_false:N \l__chemmacros_language_auto_bool
+ \tl_set:Nn \l__chemmacros_current_language_tl {#1}
+ } ,
+ language .initial:n = auto
+ }
+
+\hook_gput_code:nnn {begindocument} {package/chemmacros}
+ {
+ \bool_if:NTF \l__chemmacros_language_auto_bool
+ {
+ \tl_set:Nx \l_chemmacros_language_tl
+ { \@trnslt@language{\@trnslt@current@language} }
+ }
+ {
+ \tl_set_eq:NN
+ \l_chemmacros_language_tl
+ \l__chemmacros_current_language_tl
+ }
+ }
+
+% --------------------------------------------------------------------------
+\cs_new_protected:Npn \__chemmacros_declare_translation:nw #1#2=#3\q_stop
+ {
+ \tl_set:Nx \l__chemmacros_tmpa_tl { \tl_trim_spaces:n {#2} }
+ \tl_set:Nx \l__chemmacros_tmpb_tl { \tl_trim_spaces:n {#3} }
+ \use:x
+ {
+ \chemmacros_declare_translation:nnn
+ { \exp_not:n {#1} }
+ { \exp_not:V \l__chemmacros_tmpa_tl }
+ { \exp_not:V \l__chemmacros_tmpb_tl }
+ }
+ }
+
+% #1: key
+% #2: lang
+% #3: translation
+\cs_new_protected:Npn \chemmacros_declare_translation:nnn #1#2#3
+ {
+ \declaretranslation
+ {#2}
+ { \c__chemmacros_keyword_prefix_tl #1 }
+ {#3}
+ \prop_gput:Nnn \g_chemmacros_translations_prop {#1(#2)} {#3}
+ }
+\cs_generate_variant:Nn \chemmacros_declare_translation:nnn {V}
+
+% #1: key
+% #2: csv list: { <lang1> = <translation1> , <lang2> = <translation2> }
+\cs_new_protected:Npn \chemmacros_declare_translations:nn #1#2
+ {
+ \clist_map_inline:nn {#2}
+ { \__chemmacros_declare_translation:nw {#1} ##1 \q_stop }
+ }
+
+\NewDocumentCommand \DeclareChemTranslations {mm}
+ { \chemmacros_declare_translations:nn {#1} {#2} }
+\@onlypreamble \DeclareChemTranslations
+
+\NewDocumentCommand \DeclareChemTranslation {mmm}
+ { \chemmacros_declare_translation:nnn {#1} {#2} {#3} }
+\@onlypreamble \DeclareChemTranslation
+
+\cs_new:Npn \__chemmacros_parse_translate_list_entry:nnn #1#2#3 {}
+
+\cs_new_protected:Npn \__chemmacros_parse_translate_list_entry:www #1(#2)\q_mark#3\q_stop
+ { \__chemmacros_parse_translate_list_entry:nnn {#1} {#2} {#3} }
+
+\cs_new_protected:Npn \chemmacros_for_all_translations_do:n #1
+ {
+ \cs_set:Npn \__chemmacros_parse_translate_list_entry:nnn ##1##2##3 {#1}
+ \prop_map_inline:Nn \g_chemmacros_translations_prop
+ { \__chemmacros_parse_translate_list_entry:www ##1 \q_mark ##2 \q_stop }
+ }
+
+\NewDocumentCommand \ForAllChemTranslationsDo {+m}
+ { \chemmacros_for_all_translations_do:n {#1} }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{greek}{2020/11/29 upright greek symbols}
+
+\DeclareHookRule {begindocument/end} {chemmacros} {after} {chemgreek}
+\RequirePackage{chemgreek}
+
+\msg_new:nnn {chemmacros} {no-greek}
+ {
+ You~ haven't~ loaded~ any~ package~ for~ upright~ Greek~ letters~ or~ no~
+ unique~ choice~ was~ possible.~ Either~ load~ one~ of~ packages~
+ specified~ in~ the~ manual~ or~ select~ a~ chemgreek~ mapping~ manually.
+ }
+
+\msg_new:nnn {chemmacros} {greek-undefined}
+ {
+ The~ chemgreek~ mapping~ `#1'~ you~ chose~ \msg_line_context: \c_space_tl
+ is~ not~ defined.~ Please~ choose~ another~ one.
+ }
+
+% chemgreek selects a mapping if an unambiguous choice is possible, otherwise
+% selects `default'. Warn the user in this case:
+
+\hook_gput_code:nnn {begindocument/end} {chemmacros}
+ {
+ \bool_lazy_or:nnT
+ { \chemgreek_if_mapping_active_p:n {default} }
+ { \chemgreek_if_mapping_active_p:n {var-default} }
+ { \msg_warning:nn {chemmacros} {no-greek} }
+ }
+
+% an option for manual selection:
+\chemmacros_define_global_keys:n
+ { greek .code:n = \chemmacros_choose_chemgreek_mapping:n {#1} }
+
+\cs_new_protected:Npn \chemmacros_choose_chemgreek_mapping:n #1
+ {
+ \chemgreek_if_mapping_exists:nTF {#1}
+ {
+ \chemgreek_load_mapping_package:n {#1}
+ \chemgreek_activate_mapping:n {#1}
+ }
+ { \msg_warning:nnn {chemmacros} {greek-undefined} {#1} }
+ }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{chemformula}{2020/11/29 integration of chemical formulas}
+
+\RequirePackage{amstext}
+
+\msg_new:nnn {chemmacros} {unknown-formula-method}
+ {
+ You~ chose~ the~ formula~ method~ `#1'~ which~ is~ not~ available.~
+ I'm~ falling~ back~ to~ `chemformula'~ now.
+ }
+
+\msg_new:nnn {chemmacros} {default-formula-method}
+ {
+ You~ haven't~ chosen~ a~ formula~ method~ so~ I'm~ assuming~ the~ default~
+ method~ `chemformula'.
+ }
+
+\msg_new:nnn {chemmacros} {formula-conflict}
+ {
+ You~ have~ loaded~ multiple~ formula~ method~ packages~ but~ haven't~
+ chosen~ which~ method~ to~ use!~ I~ will~ use~ `chemformula'. \\
+ You~ should~ decide~ for~ only~ one~ of~ the~ packages~ for~ having~ a~
+ consistent~ layout.
+ }
+
+% --------------------------------------------------------------------------
+% generic functions for usage in other packages; those are to be set in each
+% method setup:
+\cs_new_protected:Npn \chemmacros_reaction:n #1 {#1}
+\cs_new_protected:Npn \chemmacros_chemformula:n #1 {#1}
+\cs_generate_variant:Nn \chemmacros_chemformula:n { x,V }
+
+\cs_new_protected:Npn \chemmacros@formula #1 { \chemmacros_chemformula:n {#1} }
+\cs_new_protected:Npn \chemmacros@reaction #1 { \chemmacros_reaction:n {#1} }
+
+% --------------------------------------------------------------------------
+% setup, check and define each method:
+\bool_new:N \l__chemmacros_formula_method_set_bool
+
+\tl_new:N \g_chemmacros_formula_method_tl
+\tl_gset:Nn \g_chemmacros_formula_method_tl {chemformula}
+
+\prop_new:N \l__chemmacros_method_packages_prop
+
+% #1: package/method name
+% #2: preparations
+\cs_new_protected:Npn \chemmacros_add_method_package:nn #1#2
+ { \prop_put:Nnn \l__chemmacros_method_packages_prop {#1} {#2} }
+
+\cs_new_protected:Npn \chemmacros_setup_method_package:n #1
+ {
+ \prop_item:Nn \l__chemmacros_method_packages_prop {#1}
+ \tl_gset:Nn \g_chemmacros_formula_method_tl {#1}
+ }
+
+\prg_new_conditional:Npnn \chemmacros_if_method_package:n #1 {p,T,F,TF}
+ {
+ \prop_if_in:NnTF \l__chemmacros_method_packages_prop {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\cs_new_protected:Npn \chemmacros_check_formula_method:
+ {
+ \bool_if:NF \l__chemmacros_formula_method_set_bool
+ {
+ \bool_set_false:N \l__chemmacros_tmpa_bool
+ \prop_map_inline:Nn \l__chemmacros_method_packages_prop
+ {
+ \chemmacros_if_package_loaded:nT {##1}
+ {
+ \bool_if:NTF \l__chemmacros_tmpa_bool
+ {
+ \msg_warning:nn {chemmacros} {formula-conflict}
+ \chemmacros_set_formula_method:n {chemformula}
+ }
+ { \chemmacros_set_formula_method:n {##1} }
+ \bool_set_true:N \l__chemmacros_tmpa_bool
+ }
+ }
+ \bool_if:NF \l__chemmacros_tmpa_bool
+ {
+ \msg_info:nn {chemmacros} {default-formula-method}
+ \chemmacros_set_formula_method:n {chemformula}
+ }
+ }
+ }
+
+\cs_new_protected:Npn \chemmacros_set_formula_method:n #1
+ {
+ \chemmacros_if_method_package:nTF {#1}
+ { \chemmacros_setup_method_package:n {#1} }
+ {
+ \msg_warning:nnn {chemmacros} {unknown-formula-method} {#1}
+ \chemmacros_setup_method_package:n {chemformula}
+ }
+ \bool_set_true:N \l__chemmacros_formula_method_set_bool
+ }
+\cs_generate_variant:Nn \chemmacros_set_formula_method:n {V}
+
+% --------------------------------------------------------------------------
+% add formula methods:
+\chemmacros_add_method_package:nn {chemformula}
+ {
+ \chemmacros_integrate_package:nnn {} {chemformula} {2015/09/08}
+ \cs_set_protected:Npn \chemmacros_chemformula:n #1
+ { \chemformula_chcpd:nn {} {#1} }
+ \cs_set_protected:Npn \chemmacros_reaction:n #1
+ { \chemformula_ch:nn {} {#1} }
+ }
+
+\chemmacros_add_method_package:nn {mhchem}
+ {
+ \chemmacros_integrate_package:nnn {version=4} {mhchem} {}
+ \cs_set_protected:Npn \chemmacros_chemformula:n #1 { \ce {#1} }
+ \cs_set_protected:Npn \chemmacros_reaction:n #1 { \ce {#1} }
+ \chemmacros_module_after:nn {charges}
+ {
+ \cs_set_protected:Npn \chemmacros_elpair:n #1 { \ce{#1} : }
+ \cs_set_protected:Npn \chemmacros_plus: { + }
+ \cs_set_protected:Npn \chemmacros_minus: { - }
+ \cs_set_protected:Npn \chemmacros_formal_plus: { \ensuremath{\oplus} }
+ \cs_set_protected:Npn \chemmacros_formal_minus: { \ensuremath{\ominus} }
+ \cs_set_protected:Npn \fplus { \ensuremath{\oplus} }
+ \cs_set_protected:Npn \fminus { \ensuremath{\ominus} }
+ }
+ }
+
+\chemmacros_add_method_package:nn {chemist}
+ {
+ \RequirePackage {chemist}
+ \cs_set_protected:Npn \chemmacros_chemformula:n #1
+ { \chemmacros_text:n { \ChemForm {#1} } }
+ \cs_set_protected:Npn \chemmacros_reaction:n #1
+ { \chemmacros_text:n { \ChemForm {#1} } }
+ \chemmacros_module_after:nn {charges}
+ {
+ \cs_set_protected:Npn \chemmacros_elpair:n #1
+ { \chemmacros_text:n { \ChemForm {#1} : } }
+ \cs_set_protected:Npn \chemmacros_plus: { + }
+ \cs_set_protected:Npn \chemmacros_minus: { - }
+ \cs_set_protected:Npn \chemmacros_formal_plus: { \ensuremath{\oplus} }
+ \cs_set_protected:Npn \chemmacros_formal_minus: { \ensuremath{\ominus} }
+ \cs_set_protected:Npn \fplus { \ensuremath{\oplus} }
+ \cs_set_protected:Npn \fminus { \ensuremath{\ominus} }
+ }
+ }
+
+\chemmacros_add_method_package:nn {chemfig}
+ {
+ \RequirePackage {chemfig}
+ \cs_set_protected:Npn \chemmacros_chemformula:n #1
+ { \printatom {#1} }
+ \cs_set_protected:Npn \chemmacros_reaction:n #1
+ { \printatom {#1} }
+ \chemmacros_module_after:nn {charges}
+ {
+ \cs_set_protected:Npn \chemmacros_elpair:n #1
+ { \Lewis { 0: , \printatom {#1} } }
+ \cs_set_protected:Npn \chemmacros_plus: { + }
+ \cs_set_protected:Npn \chemmacros_minus: { - }
+ \cs_set_protected:Npn \chemmacros_formal_plus: { \ensuremath{\oplus} }
+ \cs_set_protected:Npn \chemmacros_formal_minus: { \ensuremath{\ominus} }
+ \cs_set_protected:Npn \fplus { \ensuremath{\oplus} }
+ \cs_set_protected:Npn \fminus { \ensuremath{\ominus} }
+ }
+ }
+
+% --------------------------------------------------------------------------
+\chemmacros_define_global_keys:n
+ { formula .code:n = \chemmacros_set_formula_method:n {#1} }
+
+\hook_gput_code:nnn {begindocument/before} {chemmacros}
+ {
+ \bool_if:NF \l__chemmacros_formula_method_set_bool
+ {
+ \msg_info:nn {chemmacros} {default-formula-method}
+ \chemmacros_set_formula_method:n {chemformula}
+ }
+ }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{charges}{2020/11/29 charges}
+
+% --------------------------------------------------------------------------
+% circled charge signs: they are defined in the `chemformula' package:
+% use directly:
+\cs_new_protected:Npn \fplus { { \chemformula_fplus: } }
+\cs_new_protected:Npn \fminus { { \chemformula_fminus: } }
+
+% change output depending on circled-option
+\bool_new:N \l__chemmacros_circled_bool
+\bool_set_true:N \l__chemmacros_circled_bool
+\bool_new:N \l__chemmacros_circled_formal_bool
+\bool_set_true:N \l__chemmacros_circled_formal_bool
+\bool_new:N \l__chemmacros_circled_chem_bool
+\bool_set_true:N \l__chemmacros_circled_chem_bool
+
+
+\chemmacros_define_keys:nn {charges}
+ {
+ circletype .choice: ,
+ circletype / math .code:n =
+ {
+ \bool_set_false:N \l__chemmacros_circled_chem_bool
+ \chemmacros_if_package_loaded:nT {chemformula}
+ { \bool_set_false:N \l_chemformula_formal_chem_bool }
+ } ,
+ circletype / chem .code:n =
+ {
+ \bool_set_true:N \l__chemmacros_circled_chem_bool
+ \chemmacros_if_package_loaded:nT {chemformula}
+ { \bool_set_true:N \l_chemformula_formal_chem_bool }
+ } ,
+ circletype .value_required:n = true ,
+ circled .choice: ,
+ circled / none .code:n =
+ {
+ \bool_set_false:N \l__chemmacros_circled_bool
+ \bool_set_false:N \l__chemmacros_circled_formal_bool
+ \chemmacros_if_package_loaded:nT {chemformula}
+ { \bool_set_false:N \l_chemformula_formal_charges_bool }
+ } ,
+ circled / formal .code:n =
+ {
+ \bool_set_true:N \l__chemmacros_circled_bool
+ \bool_set_true:N \l__chemmacros_circled_formal_bool
+ \chemmacros_if_package_loaded:nT {chemformula}
+ { \bool_set_false:N \l_chemformula_formal_charges_bool }
+ } ,
+ circled / all .code:n =
+ {
+ \bool_set_true:N \l__chemmacros_circled_bool
+ \bool_set_false:N \l__chemmacros_circled_formal_bool
+ \chemmacros_if_package_loaded:nT {chemformula}
+ { \bool_set_true:N \l_chemformula_formal_charges_bool }
+ } ,
+ circled .default:n = all
+ }
+
+\cs_new_protected:Npn \chemmacros_plus: { \chemformula_plus: }
+\cs_new_protected:Npn \chemmacros_minus: { \chemformula_minus: }
+
+\cs_new_protected:Npn \chemmacros_formal_plus: { \chemformula_formal_plus: }
+\cs_new_protected:Npn \chemmacros_formal_minus: { \chemformula_formal_minus: }
+
+\cs_new_protected:Npn \chemmacros_charge:n #1
+ { \chemmacros_chemformula:n { {}^{#1} } }
+
+\cs_new_protected:Npn \chemmacros_new_charge_command:Nn #1#2
+ {
+ \DeclareDocumentCommand #1 {o}
+ {
+ \IfNoValueTF {##1}
+ { \chemmacros_charge:n {#2} }
+ { \chemmacros_charge:n {##1#2} }
+ }
+ }
+
+\tl_new:N \l__chemmacros_partial_charge_format_tl
+\tl_set:Nn \l__chemmacros_partial_charge_format_tl { \tiny }
+
+\cs_new_protected:Npn \chemmacros_new_partial_charge_command:Nn #1#2
+ {
+ \cs_new_protected:Npn #1
+ {
+ \mbox {
+ \l__chemmacros_partial_charge_format_tl
+ \c_math_toggle_token \delta #2 \c_math_toggle_token
}
+ }
+ }
+
+\NewChemMacroset {Charge} {mm}
+ { \chemmacros_new_charge_command:Nn #1 {#2} }
+
+\NewChemMacroset {PartialCharge} {mm}
+ { \chemmacros_new_partial_charge_command:Nn #1 {#2} }
+
+\cs_new_protected:Npn \scrm
+ { \ensuremath { \scriptstyle \chemmacros_minus: } }
+\cs_new_protected:Npn \scrp
+ { \ensuremath { \scriptstyle \chemmacros_plus: } }
+\cs_new_protected:Npn \fscrm
+ { \ensuremath { \scriptstyle \chemmacros_formal_minus: } }
+\cs_new_protected:Npn \fscrp
+ { \ensuremath { \scriptstyle \chemmacros_formal_plus: } }
+\cs_new_protected:Npn \fsscrm
+ { \ensuremath { \scriptscriptstyle \chemmacros_formal_minus: } }
+\cs_new_protected:Npn \fsscrp
+ { \ensuremath { \scriptscriptstyle \chemmacros_formal_plus: } }
+
+\chemmacros_define_keys:nn {charges}
+ {
+ partial-format .tl_set:N = \l__chemmacros_partial_charge_format_tl
+ }
+
+% --------------------------------------------------------------------------
+\NewChemCharge \mch { \chemmacros_minus: }
+\NewChemCharge \pch { \chemmacros_plus: }
+\NewChemCharge \fmch { \chemmacros_formal_minus: }
+\NewChemCharge \fpch { \chemmacros_formal_plus: }
+
+% partial charges:
+\NewChemPartialCharge \delm { \chemmacros_minus: }
+\NewChemPartialCharge \delp { \chemmacros_plus: }
+\NewChemPartialCharge \fdelm { \chemmacros_formal_minus: }
+\NewChemPartialCharge \fdelp { \chemmacros_formal_plus: }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{acid-base}{2022/01/13 acid/base}
+
+% --------------------------------------------------------------------------
+% equilibrium constants:
+
+\tl_new:N \l__chemmacros_equilibrium_constant_tl
+\tl_set:Nn \l__chemmacros_equilibrium_constant_tl {K}
+\prop_new:N \l__chemmacros_eq_constants_prop
+
+\prg_new_conditional:Npnn \chemmacros_if_eq_constant:Nn #1#2 {T,F,TF}
+ {
+ \cs_if_exist:NTF #1
+ {
+ \tl_if_eq:xnTF
+ { \prop_item:Nn \l__chemmacros_eq_constants_prop {#1} }
+ {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ { \prg_return_false: }
+ }
+
+% #1: cs
+% #2: translation id and option name
+% #3: default translation
+\cs_new_protected:Npn \chemmacros_define_eq_constant:Nnn #1#2#3
+ {
+ \chemmacros_if_eq_constant:NnF {#1} {#2}
+ {
+ \cs_new_protected:Npn #1 {}
+ \prop_put:Nnn \l__chemmacros_eq_constants_prop {#1} {#2}
+ \tl_new:c {l__chemmacros_#2_tl}
+ \chemmacros_define_keys:nn {acid-base}
+ { #2 .tl_set:c = l__chemmacros_#2_tl }
+ }
+ \tl_set:cn
+ {l__chemmacros_#2_tl}
+ { \chemmacros_translate:n {#2} }
+ \chemmacros_declare_translation:nnn {#2} {fallback} {#3}
+ \cs_set_protected:Npn #1
+ {
+ \ensuremath
+ {
+ \chemmacros_bold:n
+ {
+ \l__chemmacros_equilibrium_constant_tl
+ \c_math_subscript_token
+ { \tl_use:c {l__chemmacros_#2_tl} }
+ }
+ }
+ }
+ }
+
+\NewChemMacroset {EqConstant} {mmm}
+ { \chemmacros_define_eq_constant:Nnn #1 {#2} {#3} }
+
+\NewChemEqConstant \Ka {K-acid} { \mathrm{a} }
+\NewChemEqConstant \Kb {K-base} { \mathrm{b} }
+\NewChemEqConstant \Kw {K-water} { \mathrm{w} }
+
+\chemmacros_define_keys:nn {acid-base}
+ { eq-constant .tl_set:N = \l__chemmacros_equilibrium_constant_tl }
+
+\chemmacros_define_keys:nn {acid-base}
+ {
+ p-style .choice: ,
+ p-style / slanted .code:n = \cs_set_eq:NN \chemmacros_p_style:n \textsl ,
+ p-style / italics .code:n = \cs_set_eq:NN \chemmacros_p_style:n \textit ,
+ p-style / upright .code:n = \cs_set_eq:NN \chemmacros_p_style:n \textup ,
+ p-style .initial:n = upright
+ }
+
+\cs_new_protected:Npn \chemmacros_p:n #1
+ {
+ \group_begin:
+ \chemmacros_text:n
{
- \tl_set_eq:NN
- \l__chemmacros_compatibility_version_tl
- \c_chemmacros_version_tl
+ \chemmacros_p_style:n {p}
+ \ensuremath {#1}
}
- { \tl_set:Nn \l__chemmacros_compatibility_version_tl {#1} } ,
- unknown .code:n =
- \PassOptionsToPackage{\CurrentOption}{chemmacros4}
- \PassOptionsToPackage{\CurrentOption}{chemmacros5}
+ \group_end:
}
-\ProcessKeysPackageOptions {chemmacros/compatibility}
+\NewDocumentCommand \p {m} { \chemmacros_p:n {#1} }
+\NewDocumentCommand \pH {} { \chemmacros_p:n { \chemmacros_chemformula:n {H} } }
+\NewDocumentCommand \pOH {} { \chemmacros_p:n { \chemmacros_chemformula:n {OH} } }
+
+\NewDocumentCommand \pKa {o}
+ {
+ \chemmacros_p:n
+ {
+ \Ka \IfNoValueF {#1}
+ { {} \c_math_subscript_token { \chemmacros_bold:n {#1} } }
+ }
+ }
+
+\NewDocumentCommand \pKb {o}
+ {
+ \chemmacros_p:n
+ {
+ \Kb \IfNoValueF {#1}
+ { {} \c_math_subscript_token { \chemmacros_bold:n {#1} } }
+ }
+ }
% --------------------------------------------------------------------------
-% compare version numbers
-% #1: version
-% #2: relation
-% #3: version
-% #4: true
-% #5: false
-\prg_new_conditional:Npnn \chemmacros_if_version:nnn #1#2#3 {p,T,F,TF}
+\ChemModuleEnd
+\ChemModule{symbols}{2020/11/29 symbols}
+
+\RequirePackage{amstext}
+
+% ---------------------------------------------------------------------------
+% transition state symbol
+\cs_new_protected:Npn \__chemmacros_transition_state:
{
- \fp_compare:nTF
+ \text
{
- (
- \chemmacros_get_major_version:n {#1} * 1e6 +
- \chemmacros_get_minor_version:n {#1} * 1e3 +
- 0 \chemmacros_get_subrelease:n {#1}
- )
- #2
- (
- \chemmacros_get_major_version:n {#3} * 1e6 +
- \chemmacros_get_minor_version:n {#3} * 1e3 +
- 0 \chemmacros_get_subrelease:n {#3}
- )
+ \skip_horizontal:n { .1ex }
+ \hbox_overlap_right:n
+ { \rule { .6ex } { 0pt } \rule { .05ex } { 1.3ex } }
+ \hbox_overlap_right:n { \rule [ .4ex ] { 1.3ex } { .05ex } }
+ \rule [ .85ex ] { 1.3ex } { .05ex }
+ \skip_horizontal:n { .1ex }
+ }
+ }
+
+\cs_new_protected:Npn \chemmacros_transition_state:
+ {
+ \ensuremath
+ {
+ \mathchoice
+ { \displaystyle }
+ { \textstyle }
+ { \scriptstyle }
+ { \scriptscriptstyle }
+ \__chemmacros_transition_state:
+ }
+ }
+
+% \DeclareDocumentCommand?
+\cs_new_eq:NN \transitionstatesymbol \chemmacros_transition_state:
+
+% \standardstate as defined by the chemstyle package. Thanks to Joseph Wright
+% the `chemstyle' provides it with \providecommand so it doesn't matter which
+% package defines it first
+\ProvideDocumentCommand \standardstate {}
+ { { \ensuremath { \chemmacros_standardstate: } } }
+
+\cs_new_protected:Npn \chemmacros_standardstate:
+ { \mathpalette \chemmacros_standardstate_aux: \circ }
+
+\cs_new_protected:Npn \chemmacros_standardstate_aux: #1#2
+ {
+ \ooalign
+ {
+ \tex_hfil:D
+ \c_math_toggle_token #1- \c_math_toggle_token
+ \tex_hfil:D
+ \tex_cr:D
+ \tex_hfil:D
+ \c_math_toggle_token #1#2 \c_math_toggle_token
+ \tex_hfil:D
+ \tex_cr:D
+ }
+ }
+
+\cs_new_protected:Npn \changestate { \ensuremath { \mathop{} \! \chemDelta } }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{particles}{2020/11/29 particles}
+
+% --------------------------------------------------------------------------
+% particles
+\cs_new_protected:Nn \chemmacros_define_particle:Nn
+ {
+ \tl_set_rescan:Nnn \l__chemmacros_tmpa_tl { \ExplSyntaxOff } {#2}
+ \use:x
+ {
+ \cs_set_protected:Npn \exp_not:N #1
+ { \chemmacros_chemformula:n { \exp_not:V \l__chemmacros_tmpa_tl } }
+ }
+ }
+
+\NewChemMacroset {Particle} {mm}
+ { \chemmacros_define_particle:Nn #1 {#2} }
+
+% --------------------------------------------------------------------------
+% nucleophiles
+\cs_new_protected:Npn \chemmacros_elpair:n #1
+ {
+ \bool_if:NTF \l__chemmacros_elpair_dots_bool
+ { \chlewis { 0: } {#1} }
+ { \chlewis { 0| } {#1} }
+ }
+
+\bool_new:N \l__chemmacros_nucleophile_elpair_bool
+\bool_new:N \l__chemmacros_elpair_dots_bool
+
+\dim_new:N \l__chemmacros_nucleophile_dim
+\dim_set:Nn \l__chemmacros_nucleophile_dim { .1em }
+
+\chemmacros_define_keys:nn {particles}
+ { space .dim_set:N = \l__chemmacros_nucleophile_dim }
+
+\chemmacros_define_keys:nn {particles}
+ {
+ elpair .choice: ,
+ elpair / false .code:n =
+ { \bool_set_false:N \l__chemmacros_nucleophile_elpair_bool } ,
+ elpair / dots .code:n =
+ {
+ \bool_set_true:N \l__chemmacros_nucleophile_elpair_bool
+ \bool_set_true:N \l__chemmacros_elpair_dots_bool
+ } ,
+ elpair / dash .code:n =
+ {
+ \bool_set_true:N \l__chemmacros_nucleophile_elpair_bool
+ \bool_set_false:N \l__chemmacros_elpair_dots_bool
+ } ,
+ elpair .default:n = dots
+ }
+
+\cs_new_protected:Npn \chemmacros_declare_nucleophile:Nn #1#2
+ {
+ \cs_set_protected:cpn {__chemmacros_ \chemmacros_remove_backslash:N #1:}
+ {
+ \bool_if:NTF \l__chemmacros_nucleophile_elpair_bool
+ {
+ \chemmacros_elpair:n { #2 }
+ \skip_horizontal:N \l__chemmacros_nucleophile_dim
+ \chemmacros_chemformula:n { {}^{-} }
+ }
+ { \chemmacros_chemformula:n { #2^{-} } }
+ }
+ \DeclareDocumentCommand #1 {o}
+ {
+ \group_begin:
+ \IfNoValueF {##1}
+ { \chemmacros_set_keys:nn {particles} {##1} }
+ \use:c {__chemmacros_ \chemmacros_remove_backslash:N #1:}
+ \group_end:
}
+ }
+
+\NewChemMacroset {Nucleophile} {mm}
+ { \chemmacros_declare_nucleophile:Nn #1 {#2} }
+
+% --------------------------------------------------------------------------
+% particles:
+\NewChemParticle \el { e^- }
+\NewChemParticle \prt { p^+ }
+\NewChemParticle \ntr { n^0 }
+
+% ions, molecules
+% proton, hydroxide, hydronium/oxonium, water:
+\NewChemParticle \Hpl { H^+ }
+\NewChemParticle \Hyd { OH^- }
+\NewChemParticle \Oxo { H_3O^+ }
+\NewChemParticle \water { H_2O }
+
+% electrophile:
+\NewChemParticle \El { E^+ }
+
+% nucleophiles:
+\NewChemNucleophile \Nuc {Nu}
+\NewChemNucleophile \ba {ba}
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{phases}{2020/11/29 phase descriptors}
+
+\bool_new:N \l__chemmacros_phases_sub_bool
+\dim_new:N \l__chemmacros_phases_space_dim
+\dim_set:Nn \l__chemmacros_phases_space_dim { .1333 em }
+
+\chemmacros_define_keys:nn {phases}
+ {
+ pos .choice: ,
+ pos / sub .code:n = \bool_set_true:N \l__chemmacros_phases_sub_bool ,
+ pos / side .code:n = \bool_set_false:N \l__chemmacros_phases_sub_bool ,
+ space .dim_set:N = \l__chemmacros_phases_space_dim
+ }
+
+\NewChemMacroset {Phase} {mm}
+ { \chemmacros_define_phase:Nn #1 {#2} }
+
+\cs_new_protected:Npn \chemmacros_define_phase:Nn #1#2
+ {
+ \tl_set:Nx \l__chemmacros_tmpa_tl { phase-\chemmacros_remove_backslash:N #1 }
+ \chemmacros_declare_translation:Vnn
+ \l__chemmacros_tmpa_tl
+ {fallback}
+ {#2}
+ \__chemmacros_define_phase:Nx #1
+ { \exp_not:N \chemmacros_translate:n { \exp_not:V \l__chemmacros_tmpa_tl } }
+ }
+
+\cs_new_protected:Npn \__chemmacros_define_phase:Nn #1#2
+ {
+ \cs_if_exist:NF #1 { \cs_new:Npn #1 {} }
+ \DeclareDocumentCommand #1 {o}
+ { \chemmacros_phase:n { #2 \IfNoValueF {##1} {,~##1} } }
+ }
+\cs_generate_variant:Nn \__chemmacros_define_phase:Nn { Nx }
+
+\cs_new_protected:Npn \chemmacros_phase:n #1
+ {
+ \mode_leave_vertical:
+ \bool_if:NTF \l__chemmacros_phases_sub_bool
+ { \chemformula_subscript:n { (#1) } }
+ {
+ \skip_horizontal:N \l__chemmacros_phases_space_dim
+ \chemmacros_text:n { (#1) }
+ }
+ }
+
+% --------------------------------------------------------------------------
+\NewDocumentCommand \phase {m} { \chemmacros_phase:n {#1} }
+
+\NewChemPhase \sld {s}
+\NewChemPhase \lqd {l}
+\NewChemPhase \gas {g}
+\NewChemPhase \aq {aq}
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{nomenclature}{2022/01/10 chemical names}
+
+\bool_new:N \l__chemmacros_iupac_restricted_bool
+\bool_new:N \l__chemmacros_iupac_strict_bool
+
+\msg_new:nnn {chemmacros} {new-iupac}
+ {
+ You've~ tried~ to~ define~ a~ iupac~ naming~ command~ with~
+ \token_to_str:N \NewChemIUPAC ,~ but~ the~ iupac~ command~
+ \token_to_str:N #1 \c_space_tl already~ exists.~ Choose~ another~ name~
+ or~ use~ \token_to_str:N \RenewChemIUPAC .
+ }
+
+\msg_new:nnn {chemmacros} {renew-iupac}
+ {
+ You've~ tried~ to~ renew~ the~ iupac~ command~ \token_to_str:N #1 ,~ but~
+ it~ doesn't~ exist.~ Use~ \token_to_str:N \NewChemIUPAC \c_space_tl
+ instead.
+ }
+
+\msg_new:nnn {chemmacros} {let-iupac}
+ {
+ You've~ tried~ to~ let~ the~ iupac~ command~ \token_to_str:N #1
+ \c_space_tl to~ the~ iupac~ command~ \token_to_str:N #2 ,~ but~ the~
+ latter~ doesn't~ exist.~ Use~ \token_to_str:N \NewChemIUPAC \c_space_tl
+ instead~ or~declare~ \token_to_str:N #2 \c_space_tl first.
+ }
+
+\msg_new:nnn {chemmacros} {new-iupac-shorthand}
+ {
+ You've~ tried~ to~ define~ a~ iupac~ shorthand~ with~ \token_to_str:N
+ \NewChemIUPACShorthand ,~ but~ the~ shorthand~ \token_to_str:N #1
+ \c_space_tl already~ exists.~ Please~ choose~ another~ token.
+ }
+
+\msg_new:nnn {chemmacros} {renew-iupac-shorthand}
+ {
+ You've~ tried~ to~ renew~ the~ iupac~ shorthand~ \token_to_str:N #1 ,~
+ but~ this~ shorthand~ doesn't~ exist,~ yet.
+ }
+
+\msg_new:nnn {chemmacros} {show-iupac}
+ { \\ >~ \token_to_str:N #1=iupac~macro: \\ -> #2 }
+
+\msg_new:nnn {chemmacros} {no-iupac-command}
+ { \\ >~ \token_to_str:N #1=not~ defined~ as~ iupac~ macro }
+
+% --------------------------------------------------------------------------
+\prop_new:N \l__chemmacros_iupac_prop
+
+\cs_new_protected:Npn \__chemmacros_iupac_name:NN #1#2
+ { \str_set:Nx #2 { \chemmacros_remove_backslash:N #1 } }
+
+\cs_new_protected:Npn \__chemmacros_define_iupac:Nn #1#2
+ {
+ \__chemmacros_iupac_name:NN #1 \l__chemmacros_tmpa_str
+ \prop_put:NVn \l__chemmacros_iupac_prop
+ \l__chemmacros_tmpa_str
+ {#2}
+ \chemmacros_make_iupac:
+ }
+\cs_generate_variant:Nn \__chemmacros_define_iupac:Nn {NV}
+
+\cs_new_protected:Npn \__chemmacros_let_iupac:NN #1#2
+ {
+ \__chemmacros_iupac_name:NN #1 \l__chemmacros_tmpa_str
+ \__chemmacros_iupac_name:NN #2 \l__chemmacros_tmpb_str
+ \tl_set:Nx \l__chemmacros_tmpa_tl
+ { \prop_item:NV \l__chemmacros_iupac_prop \l__chemmacros_tmpb_str }
+ \__chemmacros_define_iupac:NV #1 \l__chemmacros_tmpa_tl
+ }
+
+\cs_new_protected:Npn \chemmacros_show_iupac:N #1
+ {
+ \group_begin:
+ \__chemmacros_iupac_name:NN #1 \l__chemmacros_tmpa_str
+ \tl_set:Nx \l__chemmacros_tmpa_tl
+ { \prop_item:NV \l__chemmacros_iupac_prop \l__chemmacros_tmpa_str }
+ \tl_if_empty:NTF \l__chemmacros_tmpa_tl
+ { \msg_show:nnn {chemmacros} {no-iupac-command} {#1} }
+ { \msg_show:nnnV {chemmacros} {show-iupac} {#1} \l__chemmacros_tmpa_tl }
+ \group_end:
+ }
+
+\prg_new_protected_conditional:Npnn \chemmacros_if_iupac:N #1 {T,F,TF}
+ {
+ \__chemmacros_iupac_name:NN #1 \l__chemmacros_tmpa_str
+ \prop_if_in:NVTF \l__chemmacros_iupac_prop \l__chemmacros_tmpa_str
{ \prg_return_true: }
{ \prg_return_false: }
}
-\cs_generate_variant:Nn \chemmacros_if_version:nnnTF {fnf}
-\cs_new:Npn \__chemmacros_get_minor_version:w #1.#2.#3 \q_stop
+\cs_new_protected:Npn \chemmacros_new_iupac:Nn #1#2
{
- \tl_if_blank:nTF {#2} {0} {
- \tl_map_function:nN {#2} \__chemmacros_get_minor_number:n
- }
+ \chemmacros_if_iupac:NTF #1
+ { \msg_error:nnn {chemmacros} {new-iupac} {#1} }
+ { \__chemmacros_define_iupac:Nn #1 {#2} }
+ }
+
+\cs_new_protected:Npn \chemmacros_provide_iupac:Nn #1#2
+ {
+ \chemmacros_if_iupac:NF #1
+ { \__chemmacros_define_iupac:Nn #1 {#2} }
+ }
+
+\cs_new_protected:Npn \chemmacros_define_iupac:Nn #1#2
+ { \__chemmacros_define_iupac:Nn #1 {#2} }
+
+\cs_new_protected:Npn \chemmacros_renew_iupac:Nn #1#2
+ {
+ \chemmacros_if_iupac:NTF #1
+ { \__chemmacros_define_iupac:Nn #1 {#2} }
+ { \msg_error:nnn {chemmacros} {renew-iupac} {#1} }
}
-\cs_new:Npn \chemmacros_get_minor_version:n #1
- { \__chemmacros_get_minor_version:w #1.. \q_stop }
+\cs_new_protected:Npn \chemmacros_let_iupac:NN #1#2
+ {
+ \chemmacros_if_iupac:NTF #2
+ { \__chemmacros_let_iupac:NN #1#2 }
+ { \msg_error:nnnn {chemmacros} {let-iupac} {#1} {#2} }
+ }
-\cs_new:Npn \__chemmacros_get_minor_number:n #1
+\cs_new_protected:Npn \chemmacros_make_iupac:
{
- \str_case:nn {#1}
+ \chemmacros_if_document:T
{
- {0} {0}
- {1} {1}
- {2} {2}
- {3} {3}
- {4} {4}
- {5} {5}
- {6} {6}
- {7} {7}
- {8} {8}
- {9} {9}
+ \bool_if:NTF \l__chemmacros_inside_iupac_bool
+ {
+ \prop_map_inline:Nn \l__chemmacros_iupac_prop
+ { \cs_set_protected:cpn {##1} {##2} }
+ }
+ {
+ \bool_if:NF \l__chemmacros_iupac_restricted_bool
+ {
+ \bool_if:NTF \l__chemmacros_iupac_strict_bool
+ {
+ \prop_map_inline:Nn \l__chemmacros_iupac_prop
+ { \cs_set_protected:cpn {##1} {##2} }
+ }
+ {
+ \prop_map_inline:Nn \l__chemmacros_iupac_prop
+ {
+ \cs_if_exist:cF {##1}
+ { \cs_set_protected:cpn {##1} {##2} }
+ }
+ }
+ }
+ }
+ }
+ }
+
+\hook_gput_code:nnn {begindocument/end} {chemmacros}
+ { \chemmacros_make_iupac: }
+
+\NewDocumentCommand \DeclareChemIUPAC {mm}
+ { \chemmacros_define_iupac:Nn #1 {#2} }
+
+\NewDocumentCommand \NewChemIUPAC {mm}
+ { \chemmacros_new_iupac:Nn #1 {#2} }
+
+\NewDocumentCommand \RenewChemIUPAC {mm}
+ { \chemmacros_renew_iupac:Nn #1 {#2} }
+
+\NewDocumentCommand \ProvideChemIUPAC {mm}
+ { \chemmacros_provide_iupac:Nn #1 {#2} }
+
+\NewDocumentCommand \LetChemIUPAC {mm}
+ { \chemmacros_let_iupac:NN #1 #2 }
+
+% --------------------------------------------------------------------------
+\chemmacros_define_keys:nn {nomenclature}
+ {
+ iupac .choice: ,
+ iupac / restricted .code:n =
+ \bool_set_true:N \l__chemmacros_iupac_restricted_bool
+ \bool_set_false:N \l__chemmacros_iupac_strict_bool ,
+ iupac / auto .code:n =
+ \bool_set_false:N \l__chemmacros_iupac_restricted_bool
+ \bool_set_false:N \l__chemmacros_iupac_strict_bool ,
+ iupac / strict .code:n =
+ \bool_set_false:N \l__chemmacros_iupac_restricted_bool
+ \bool_set_true:N \l__chemmacros_iupac_strict_bool ,
+ iupac .initial:n = auto
+ }
+
+% --------------------------------------------------------------------------
+% stereo descriptors and other nomenclature commands
+% Cahn-Ingold-Prelog
+\dim_new:N \l__chemmacros_cip_kern_dim
+\dim_set:Nn \l__chemmacros_cip_kern_dim {.075em}
+
+\chemmacros_define_keys:nn {nomenclature}
+ { cip-kern .dim_set:N = \l__chemmacros_cip_kern_dim }
+
+\tl_new:N \l__chemmacros_cip_inner_tl
+\tl_new:N \l__chemmacros_cip_outer_tl
+\tl_new:N \l__chemmacros_cip_number_tl
+
+\chemmacros_define_keys:nn {nomenclature}
+ {
+ cip-inner-format .tl_set:N = \l__chemmacros_cip_inner_tl ,
+ cip-inner-format .initial:n = \itshape ,
+ cip-outer-format .tl_set:N = \l__chemmacros_cip_outer_tl ,
+ cip-outer-format .initial:n = \upshape ,
+ cip-number-format .tl_set:N = \l__chemmacros_cip_number_tl ,
+ cip-number-format .initial:n = \upshape
+ }
+
+\cs_new_protected:Npn \__chemmacros_cip:n #1
+ {
+ \tl_set:Nn \l__chemmacros_tmpa_tl {#1}
+ \int_step_inline:nnnn {0} {1} {9}
+ {
+ \tl_replace_all:Nnn \l__chemmacros_tmpa_tl
+ {##1}
+ { { \l__chemmacros_cip_number_tl ##1} }
}
+ { \l__chemmacros_cip_inner_tl \l__chemmacros_tmpa_tl }
}
-\cs_new:Npn \__chemmacros_get_major_version:w #1.#2.#3 \q_stop
- { \tl_if_blank:nTF {#1} {0} {#1} }
+\cs_new_protected:Npn \chemmacros_cip:n #1
+ {
+ \int_zero:N \l__chemmacros_tmpa_int
+ \group_begin:
+ \l__chemmacros_cip_outer_tl (
+ \clist_map_inline:nn
+ {#1}
+ {
+ \int_incr:N \l__chemmacros_tmpa_int
+ \__chemmacros_cip:n {##1}
+ \int_compare:nT
+ { \l__chemmacros_tmpa_int < \clist_count:n {#1} }
+ { , }
+ }
+ )
+ \group_end:
+ \tex_kern:D \l__chemmacros_cip_kern_dim
+ }
-\cs_new:Npn \chemmacros_get_major_version:n #1
- { \__chemmacros_get_major_version:w #1.. \q_stop }
+\DeclareChemIUPAC \cip { \chemmacros_cip:n }
-\cs_new:Npn \__chemmacros_get_subrelease:w #1.#2.#3 \q_stop
+% remember: TikZ needs : to be other
+\cs_new_protected:Npn \chemmacros_sconf:n #1
{
- \tl_if_blank:nTF {#2} {0} {
- \tl_map_function:nN {#2} \__chemmacros_get_subrelease_number:n
- }
+ \group_begin:
+ \chemmacros_tikz:nn
+ { baseline,text~ height=1.5ex,text~ depth=.25ex }
+ {
+ \chemmacros_tikz_node:n {anchor=base} (chemmacros@@Sconf) {#1} ;
+ \chemmacros_tikz_draw:n {->,thick,rotate=90}
+ ($(chemmacros@@Sconf.center)+(20\c_chemmacros_other_colon_tl.8em)$)
+ arc (20\c_chemmacros_other_colon_tl340\c_chemmacros_other_colon_tl.8em);
+ }
+ \group_end:
}
-\cs_new:Npn \chemmacros_get_subrelease:n #1
- { \__chemmacros_get_subrelease:w #1.. \q_stop }
+\cs_new_protected:Npn \chemmacros_rconf:n #1
+ {
+ \group_begin:
+ \tikz[baseline,text~ height=1.5ex,text~ depth=.25ex]
+ {
+ \chemmacros_tikz_node:n {anchor=base} (chemmacros@@Rconf) {#1} ;
+ \chemmacros_tikz_draw:n {<-,thick,rotate=90}
+ ($(chemmacros@@Rconf.center)+(20\c_chemmacros_other_colon_tl.8em)$)
+ arc (20\c_chemmacros_other_colon_tl340\c_chemmacros_other_colon_tl.8em) ;
+ }
+ \group_end:
+ }
+
+\NewDocumentCommand \Sconf { O{S} } { \chemmacros_sconf:n {#1} }
+\NewDocumentCommand \Rconf { O{R} } { \chemmacros_rconf:n {#1} }
+
+% coordination chemistry
+\bool_new:N \l__chemmacros_bridge_super_bool
+
+\chemmacros_define_keys:nn {nomenclature}
+ {
+ bridge-number .choice: ,
+ bridge-number / sub .code:n =
+ \bool_set_false:N \l__chemmacros_bridge_super_bool ,
+ bridge-number / super .code:n =
+ \bool_set_true:N \l__chemmacros_bridge_super_bool ,
+ coord-use-hyphen .bool_set:N = \l__chemmacros_coord_use_hyphen_bool ,
+ coord-use-hyphen .initial:n = true
+ }
-\cs_new:Npn \__chemmacros_get_subrelease_number:n #1
+% #1: boolean - if true hyphen is turned on
+% #2: boolean - if true superscript will be used
+% #3: symbol
+% #4: sub-/superscript
+\cs_new_protected:Npn \chemmacros_coordination_symbol:nnnn #1#2#3#4
{
- \str_case:nnF {#1}
+ \chemmacros_chemformula:n {#3}
+ \tl_if_blank:nF {#4}
{
- {0} {}
- {1} {}
- {2} {}
- {3} {}
- {4} {}
- {5} {}
- {6} {}
- {7} {}
- {8} {}
- {9} {}
+ \bool_if:nTF {#2}
+ { \chemmacros_chemformula:n { {}^{#4} } }
+ { \chemmacros_chemformula:n { {}_{#4} } }
}
- { \int_from_alph:n {#1} }
+ \bool_if:nT
+ {#1}
+ { \chemmacros_break_point_hyphen: }
+ }
+
+\cs_new_protected:Npn \chemmacros_hapto:n #1
+ {
+ \chemmacros_coordination_symbol:nnnn
+ { \l__chemmacros_coord_use_hyphen_bool }
+ { \c_true_bool }
+ { \chemeta }
+ {#1}
+ }
+
+\cs_new_protected:Npn \chemmacros_dento:n #1
+ {
+ \chemmacros_coordination_symbol:nnnn
+ { \l__chemmacros_coord_use_hyphen_bool }
+ { \c_true_bool }
+ { \chemkappa }
+ {#1}
+ }
+
+\cs_new_protected:Npn \chemmacros_bridge:n #1
+ {
+ \chemmacros_coordination_symbol:nnnn
+ { \l__chemmacros_coord_use_hyphen_bool }
+ { \l__chemmacros_bridge_super_bool }
+ { \chemmu }
+ {#1}
+ }
+
+% \iupac (basically the same as bpchem's \IUPAC)
+% - allows multiple breaking points as compound names can get really long and
+% especially in multicolumn documents can span more than two lines
+% - add a (very) little space before the hyphen and a little negative space
+% after it
+% - add a little space at breaking points if not broken
+% - enables all naming commands regardless if they're definied otherwise or not
+\cs_new_protected:Npn \chemmacros_allow_hyphens:
+ {
+ \chemmacros_nobreak:
+ \skip_horizontal:N \c_zero_skip
}
-% check compatibility
-% #1: relation
-% #2: number
-% #3: true
-% #4: false
-\prg_new_conditional:Npnn \chemmacros_if_compatibility:nn #1#2 {p,T,F,TF}
+% #1: pre break
+% #2: post break
+% #3: no break
+\cs_new_protected:Npn \__chemmacros_peek_if_dash:TF #1#2
{
- \chemmacros_if_version:fnfTF
- { \l__chemmacros_compatibility_version_tl }
+ \peek_charcode:NTF -
{#1}
{#2}
+ }
+
+\cs_new_protected:Npn \__chemmacros_peek_if_paren:TF #1#2
+ { % (
+ \peek_charcode:NTF )
+ {#1}
+ { % [
+ \peek_charcode:NTF ]
+ {#1}
+ {#2}
+ }
+ }
+
+\cs_new_protected:Npn \__chemmacros_break_point_insert:nnn #1#2#3
+ {
+ \mode_if_math:TF
+ {#3}
+ {
+ \peek_meaning:NTF \group_end:
+ {#3}
+ {
+ \__chemmacros_peek_if_dash:TF
+ {#3}
+ {
+ \__chemmacros_peek_if_paren:TF
+ {#3}
+ {
+ \chemmacros_nobreak:
+ \tex_discretionary:D {#1} {#2} {#3}
+ \chemmacros_allow_hyphens:
+ }
+ }
+ }
+ }
+ }
+
+\dim_new:N \l__chemmacros_iupac_hyphen_pre_dim
+\dim_set:Nn \l__chemmacros_iupac_hyphen_pre_dim { .01em }
+\dim_new:N \l__chemmacros_iupac_hyphen_post_dim
+\dim_set:Nn \l__chemmacros_iupac_hyphen_post_dim { -.03em }
+\dim_new:N \l__chemmacros_iupac_break_dim
+\dim_set:Nn \l__chemmacros_iupac_break_dim { .03em }
+\skip_new:N \l__chemmacros_iupac_break_skip
+\skip_set:Nn \l__chemmacros_iupac_break_skip { .03em plus .07em }
+
+\chemmacros_define_keys:nn {nomenclature}
+ {
+ hyphen-pre-space .dim_set:N = \l__chemmacros_iupac_hyphen_pre_dim ,
+ hyphen-post-space .dim_set:N = \l__chemmacros_iupac_hyphen_post_dim ,
+ break-space .skip_set:N = \l__chemmacros_iupac_break_skip
+ }
+
+\cs_new_protected:Npn \chemmacros_break_point_hyphen:
+ {
+ \__chemmacros_break_point_insert:nnn
+ { \tex_kern:D \l__chemmacros_iupac_hyphen_pre_dim - }
+ { }
+ {
+ \tex_kern:D \l__chemmacros_iupac_hyphen_pre_dim
+ -
+ \tex_kern:D \l__chemmacros_iupac_hyphen_post_dim
+ }
+ }
+
+\cs_new_protected:Npn \chemmacros_break_point:
+ {
+ \__chemmacros_break_point_insert:nnn
+ {-}
+ { }
+ {
+ \mode_if_math:TF
+ { | }
+ { \tex_kern:D \l__chemmacros_iupac_break_dim }
+ }
+ }
+
+\cs_new_protected:Npn \chemmacros_break_point_opening_paren:
+ { \__chemmacros_break_point_insert:nnn { - } { ( } { ( } }
+
+\cs_new_protected:Npn \chemmacros_break_point_closing_paren:
+ { \__chemmacros_break_point_insert:nnn { )- } { } { ) } }
+
+\cs_new_protected:Npn \chemmacros_break_point_opening_bracket:
+ { \__chemmacros_break_point_insert:nnn { - } { [ } { [ } }
+
+\cs_new_protected:Npn \chemmacros_break_point_closing_bracket:
+ { \__chemmacros_break_point_insert:nnn { ]- } { } { ] } }
+
+\cs_new_protected:Npn \chemmacros_superscript:n #1
+ { \mode_if_math:TF { \sp {#1} } { \textsuperscript {#1} } }
+
+\bool_new:N \l__chemmacros_inside_iupac_bool
+
+\seq_new:N \l__chemmacros_iupac_shorthands_seq
+\prop_new:N \l__chemmacros_iupac_shorthands_prop
+
+% #1: token
+% #2: definition
+\cs_new_protected:Npn \chemmacros_define_iupac_shorthand:NN #1#2
+ {
+ \seq_if_in:NnF \l__chemmacros_iupac_shorthands_seq {#1}
+ { \seq_put_right:Nn \l__chemmacros_iupac_shorthands_seq {#1} }
+ \prop_put:Nnn \l__chemmacros_iupac_shorthands_prop {#1}
+ { \char_set_active_eq:NN #1#2 }
+ }
+
+\cs_new_protected:Npn \chemmacros_remove_shorthand:N #1
+ {
+ \chemmacros_define_iupac_shorthand:NN #1 \c_empty_tl
+ \seq_remove_all:Nn \l__chemmacros_iupac_shorthands_seq {#1}
+ \prop_remove:Nn \l__chemmacros_iupac_shorthands_prop {#1}
+ }
+
+\prg_new_conditional:Npnn \chemmacros_if_iupac_shorthand:N #1 {p,T,F,TF}
+ {
+ \seq_if_in:NnTF \l__chemmacros_iupac_shorthands_seq {#1}
{ \prg_return_true: }
{ \prg_return_false: }
}
-\cs_generate_variant:Nn \chemmacros_if_compatibility:nnT {nV}
-% user checks:
-\NewExpandableDocumentCommand \IfChemCompatibilityTF {mm+m+m}
- { \chemmacros_if_compatibility:nnTF {#1} {#2} {#3} {#4} }
+\cs_new_protected:Npn \chemmacros_for_all_iupac_shorthands_do:n #1
+ { \seq_map_inline:Nn \l__chemmacros_iupac_shorthands_seq {#1} }
+
+\cs_new_protected:Npn \chemmacros_activate_iupac_shorthand:N #1
+ { \chemmacros_if_iupac_shorthand:NT #1 { \char_set_catcode_active:N #1 } }
+
+\cs_new_protected:Npn \chemmacros_activate_iupac_shorthands:n #1
+ { \tl_map_inline:nn {#1} { \chemmacros_activate_iupac_shorthand:N ##1 } }
+
+\cs_new_protected:Npn \chemmacros_activate_all_iupac_shorthands:
+ {
+ \chemmacros_for_all_iupac_shorthands_do:n
+ { \chemmacros_activate_iupac_shorthand:N ##1 }
+ }
+
+\cs_new_protected:Npn \chemmacros_make_shorthands:
+ {
+ \chemmacros_if_document:T
+ {
+ \chemmacros_for_all_iupac_shorthands_do:n
+ { \prop_item:Nn \l__chemmacros_iupac_shorthands_prop {##1} }
+ }
+ }
+
+\NewDocumentCommand \ChemMakeIupacShorthands {}
+ { \chemmacros_make_shorthands: }
+
+\NewDocumentCommand \DeclareChemIUPACShorthand {mm}
+ { \chemmacros_define_iupac_shorthand:NN #1#2 }
+
+\NewDocumentCommand \NewChemIUPACShorthand {mm}
+ {
+ \chemmacros_if_iupac_shorthand:NTF #1
+ { \msg_error:nnn {chemmacros} {new-iupac-shorthand} {#1} }
+ { \chemmacros_define_iupac_shorthand:NN #1#2 }
+ }
+
+\NewDocumentCommand \ProvideChemIUPACShorthand {mm}
+ {
+ \chemmacros_if_iupac_shorthand:NTF #1
+ { \chemmacros_define_iupac_shorthand:NN #1#2 }
+ }
+
+\NewDocumentCommand \RenewChemIUPACShorthand {mm}
+ {
+ \chemmacros_if_iupac_shorthand:NTF #1
+ { \chemmacros_define_iupac_shorthand:NN #1#2 }
+ { \msg_error:nnn {chemmacros} {renew-iupac-shorthand} {#1} }
+ }
+
+\NewDocumentCommand \RemoveChemIUPACShorthand {m}
+ { \chemmacros_remove_shorthand:N #1 }
+
+\NewChemIUPACShorthand ^ \chemmacros_superscript:n
+\NewChemIUPACShorthand | \chemmacros_break_point:
+\NewChemIUPACShorthand - \chemmacros_break_point_hyphen:
+\NewChemIUPACShorthand ( \chemmacros_break_point_opening_paren:
+\NewChemIUPACShorthand ) \chemmacros_break_point_closing_paren:
+\NewChemIUPACShorthand [ \chemmacros_break_point_opening_bracket:
+\NewChemIUPACShorthand ] \chemmacros_break_point_closing_bracket:
+\NewChemIUPAC \chemprime { \ensuremath {{}^{\prime}} }
+\NewChemIUPACShorthand ' \chemprime
+\NewChemIUPAC \nonbreakinghyphen { \mbox{-} \nobreak \hspace{0pt} }
+\NewChemIUPACShorthand = \nonbreakinghyphen
+
+\cs_new_protected:Npn \chemmacros_iupac:nn #1#2
+ {
+ \group_begin:
+ \bool_set_true:N \l__chemmacros_inside_iupac_bool
+ \bool_set_true:N \l__chemmacros_in_document_bool
+ \chemmacros_set_keys:nn {nomenclature} {#1}
+ \chemmacros_make_iupac:
+ \chemmacros_make_shorthands:
+ \tl_set_rescan:Nnn \l__chemmacros_tmpa_tl
+ { \chemmacros_activate_all_iupac_shorthands: }
+ {#2}
+ \l__chemmacros_tmpa_tl
+ \group_end:
+ }
+
+\cs_new_protected:Npn \chemmacros_iupac:n #1 { \chemmacros_iupac:nn {} {#1} }
+\cs_generate_variant:Nn \chemmacros_iupac:n {e}
+
+\NewDocumentCommand \iupac {O{}m} { \chemmacros_iupac:nn {#1} {#2} }
+
+% --------------------------------------------------------------------------
+% R(ectus)/S(inister):
+\NewChemIUPAC \rectus { \cip {R} }
+\NewChemIUPAC \sinister { \cip {S} }
+
+\LetChemIUPAC \R \rectus
+\LetChemIUPAC \S \sinister
+
+% E(ntgegen)/Z(usammen)
+\NewChemIUPAC \entgegen { \cip {E} }
+\NewChemIUPAC \zusammen { \cip {Z} }
+
+\LetChemIUPAC \E \entgegen
+\LetChemIUPAC \Z \zusammen
+
+% cis/trans
+\NewChemIUPAC \cis { \textit {cis} }
+\NewChemIUPAC \trans { \textit {trans} }
+
+% fac/mer
+\NewChemIUPAC \fac { \textit {fac} }
+\NewChemIUPAC \mer { \textit {mer} }
+
+% n
+\NewChemIUPAC \normal { \textit {n} }
+
+% tert
+\NewChemIUPAC \tert { \textit {tert} }
+
+% Italian descriptors - I forgot what they mean
+\NewChemIUPAC \sin { \textit {sin} }
+\NewChemIUPAC \ter { \textit {ter} }
+
+% Fischer
+\NewChemIUPAC \dexter { \textsc {d} }
+\NewChemIUPAC \laevus { \textsc {l} }
+
+\LetChemIUPAC \D \dexter
+\LetChemIUPAC \L \laevus
+
+% ortho/meta/para
+\NewChemIUPAC \ortho { \textit {o} }
+\NewChemIUPAC \meta { \textit {m} }
+\NewChemIUPAC \para { \textit {p} }
+
+% syn/anti
+\NewChemIUPAC \syn { \textit {syn} }
+\NewChemIUPAC \anti { \textit {anti} }
+
+% coordination chemistry:
+\NewChemIUPAC \hapto { \chemmacros_hapto:n }
+\NewChemIUPAC \dento { \chemmacros_dento:n }
+\NewChemIUPAC \bridge { \chemmacros_bridge:n }
+
+% attachments to heteroatoms / added hydrogen
+\NewChemIUPAC \hydrogen { \textit {H} }
+\NewChemIUPAC \oxygen { \textit {O} }
+\NewChemIUPAC \nitrogen { \textit {N} }
+\NewChemIUPAC \sulfur { \textit {S} }
+\NewChemIUPAC \phosphorus { \textit {P} }
+
+% atoms:
+\LetChemIUPAC \H \hydrogen
+\LetChemIUPAC \O \oxygen
+\LetChemIUPAC \N \nitrogen
+\LetChemIUPAC \Sf \sulfur
+\LetChemIUPAC \P \phosphorus
+
+% greek letters
+\NewChemIUPAC \a { \chemalpha }
+\NewChemIUPAC \b { \chembeta }
+\NewChemIUPAC \g { \chemgamma }
+\NewChemIUPAC \d { \chemdelta }
+\NewChemIUPAC \k { \chemkappa }
+\NewChemIUPAC \m { \chemmu }
+\NewChemIUPAC \n { \chemeta }
+\NewChemIUPAC \w { \chemomega }
+
+% --------------------------------------------------------------------------
+% latin phrases
+\tl_new:N \l__chemmacros_latin_format_tl
+
+\NewChemMacroset {Latin} {mm}
+ { \chemmacros_define_latin:Nn #1 {#2} }
+
+\chemmacros_define_keys:nn {nomenclature}
+ {
+ format .tl_set:N = \l__chemmacros_latin_format_tl ,
+ format .initial:n = \emph ,
+ }
+
+\cs_new_protected:Npn \chemmacros_write_latin:n #1
+ {
+ \group_begin:
+ \l__chemmacros_latin_format_tl {#1}
+ \group_end:
+ }
+
+\cs_new_protected:Npn \chemmacros_latin:n #1
+ { \chemmacros_write_latin:n {#1} }
+
+\cs_new_protected:Npn \chemmacros_define_latin:Nn #1#2
+ { \DeclareDocumentCommand #1 {O{}} { \latin [##1] {#2} } }
-\NewExpandableDocumentCommand \IfChemCompatibilityT {mm+m}
- { \chemmacros_if_compatibility:nnT {#1} {#2} {#3} }
+\NewDocumentCommand \latin {O{}m}
+ {
+ \group_begin:
+ \chemmacros_set_keys:nn {nomenclature} {#1}
+ \chemmacros_latin:n {#2}
+ \group_end:
+ }
-\NewExpandableDocumentCommand \IfChemCompatibilityF {mm+m}
- { \chemmacros_if_compatibility:nnF {#1} {#2} {#3} }
+\cs_undefine:N \invacuo
+\NewChemLatin \invacuo {in~vacuo}
+\NewChemLatin \abinitio {ab~initio}
+\NewChemLatin \insitu {in~situ}
% --------------------------------------------------------------------------
-% compatibility coding:
-\cs_new_protected:Npn \ChemCompatibility #1#2 \EndChemCompatibility
- { \chemmacros_if_compatibility:nnT {=} {#1} {#2} }
+% hyperref support
+% ?? unsure about adding IUPAC commands
+\hook_gput_code:nnn {package/hyperref/after} {chemmacros}
+ {
+ \pdfstringdefDisableCommands
+ {
+ % \cs_set:Npn \- { - } % maybe not a good idea...
+ % \cs_set:Npn \| { }
+ % \cs_set:Npn \pH { pH }
+ % \cs_set:Npn \pOH { pOH }
+ \cs_set:Npn \iupac #1 {#1}
+ \cs_set:Npn \cip #1 {(#1)}
+ \cs_set:Npn \cis {cis}
+ \cs_set:Npn \trans {trans}
+ \cs_set:Npn \tert {tert}
+ \cs_set:Npn \ortho {o}
+ \cs_set:Npn \meta {m}
+ \cs_set:Npn \para {p}
+ \cs_set:Npn \syn {syn}
+ \cs_set:Npn \anti {anti}
+ \cs_set:Npn \R {(R)}
+ \cs_set:Npn \S {(S)}
+ \cs_set:Npn \E {(E)}
+ \cs_set:Npn \Z {(Z)}
+ \cs_set:Npn \D {D}
+ \cs_set:Npn \L {L}
+ \cs_set:Npn \H {H}
+ \cs_set:Npn \O {O}
+ \cs_set:Npn \N {N}
+ \cs_set:Npn \Sf {S}
+ \cs_set:Npn \P {P}
+ \cs_set:Npn \dexter {D}
+ \cs_set:Npn \laevus {L}
+ \cs_set:Npn \rectus {(R)}
+ \cs_set:Npn \sinister {(S)}
+ \cs_set:Npn \entgegen {(E)}
+ \cs_set:Npn \zusammen {(Z)}
+ \cs_set:Npn \hydrogen {H}
+ \cs_set:Npn \oxygen {O}
+ \cs_set:Npn \nitrogen {N}
+ \cs_set:Npn \sulfur {S}
+ \cs_set:Npn \phosphorus {P}
+ \cs_set:Npn \chemprime {'}
+ }
+ }
-\cs_new_protected:Npn \ChemCompatibilityFrom #1#2 \EndChemCompatibility
- { \chemmacros_if_compatibility:nnT {>=} {#1} {#2} }
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{tikz}{2020/11/29 upright greek symbols}
+
+\ExplSyntaxOff
+\RequirePackage{tikz}
+\usetikzlibrary{calc,decorations.pathmorphing}
+\ExplSyntaxOn
+
+\tl_const:Nx \c_chemmacros_other_colon_tl { \token_to_str:N : }
+
+% --------------------------------------------------------------------------
+% TikZ drawings - helper macros
+\cs_new_protected:Npn \chemmacros_tikz_picture:nn #1#2
+ { \tikzpicture[{#1}] #2 \endtikzpicture }
+\cs_new_protected:Npn \chemmacros_tikz:nn #1#2 { \tikz[{#1}] {#2} }
+\cs_new_protected:Npn \chemmacros_tikz_draw:n #1 { \draw[{#1}] }
+\cs_new_protected:Npn \chemmacros_tikz_node:n #1 { \node[{#1}] }
+\cs_new_protected:Npn \chemmacros_tikz_shade:n #1 { \shade[{#1}] }
+\cs_new_protected:Npn \chemmacros_tikz_shadedraw:n #1 { \shadedraw[{#1}] }
+\cs_new_protected:Npn \chemmacros_tikz_node_in_draw:n #1 { node[{#1}] }
+
+\cs_generate_variant:Nn \chemmacros_tikz_picture:nn {xn}
+\cs_generate_variant:Nn \chemmacros_tikz_draw:n {x}
+\cs_generate_variant:Nn \chemmacros_tikz_node:n {x}
+\cs_generate_variant:Nn \chemmacros_tikz_shade:n {x}
+\cs_generate_variant:Nn \chemmacros_tikz_shadedraw:n {x}
+\cs_generate_variant:Nn \chemmacros_tikz_node_in_draw:n {x}
+
+% --------------------------------------------------------------------------
+% arrow tips for electron movement
+\dim_new:N \l__chemmacros_el_length_dim
+
+% full tip for pairs
+\pgfarrowsdeclare { el } { el }
+ {
+ \dim_set:Nn \l__chemmacros_el_length_dim
+ { 2.5pt + 2.5\pgflinewidth }
+ \pgfarrowsleftextend { -\l__chemmacros_el_length_dim }
+ \pgfarrowsrightextend { .5\pgflinewidth }
+ }
+ {
+ \dim_set:Nn \l__chemmacros_el_length_dim
+ { 2.5pt + 2.5\pgflinewidth }
+ \pgfsetdash {} { 0pt }
+ \pgfsetroundjoin
+ \pgfsetroundcap
+ \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } }
+ \pgfpathlineto
+ {
+ \pgfpoint
+ { -\l__chemmacros_el_length_dim }
+ { .3\l__chemmacros_el_length_dim }
+ }
+ \pgfpathlineto
+ { \pgfpoint { -.5\l__chemmacros_el_length_dim } { 0pt } }
+ \pgfpathlineto
+ {
+ \pgfpoint
+ { -\l__chemmacros_el_length_dim }
+ { -.3\l__chemmacros_el_length_dim }
+ }
+ \pgfpathlineto { \pgfpoint { 0pt } { 0pt } }
+ \pgfusepathqfillstroke
+ }
+
+% half tip on the left
+\pgfarrowsdeclare { left~el } { left~el }
+ {
+ \dim_set:Nn \l__chemmacros_el_length_dim
+ { 2.5pt + 2.5\pgflinewidth }
+ \pgfarrowsleftextend { -\l__chemmacros_el_length_dim }
+ \pgfarrowsrightextend { .5\pgflinewidth }
+ }
+ {
+ \dim_set:Nn \l__chemmacros_el_length_dim
+ { 2.5pt + 2.5\pgflinewidth }
+ \pgfsetdash {} { 0pt }
+ \pgfsetroundjoin
+ \pgfsetroundcap
+ \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } }
+ \pgfpathlineto
+ {
+ \pgfpoint
+ { -\l__chemmacros_el_length_dim }
+ { .3\l__chemmacros_el_length_dim }
+ }
+ \pgfpathlineto { \pgfpoint { -.5\l__chemmacros_el_length_dim } { 0pt } }
+ \pgfpathlineto { \pgfpoint { 0pt } { 0pt } }
+ \pgfusepathqfillstroke
+ }
+
+% half tip in the right
+\pgfarrowsdeclare { right~el } { right~el }
+ {
+ \dim_set:Nn \l__chemmacros_el_length_dim
+ { 2.5pt + 2.5\pgflinewidth }
+ \pgfarrowsleftextend { -\l__chemmacros_el_length_dim }
+ \pgfarrowsrightextend { .5\pgflinewidth }
+ }
+ {
+ \dim_set:Nn \l__chemmacros_el_length_dim
+ { 2.5pt + 2.5\pgflinewidth }
+ \pgfsetdash {} { 0pt }
+ \pgfsetroundjoin
+ \pgfsetroundcap
+ \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } }
+ \pgfpathlineto
+ {
+ \pgfpoint
+ { -\l__chemmacros_el_length_dim }
+ { -.3\l__chemmacros_el_length_dim }
+ }
+ \pgfpathlineto { \pgfpoint { -.5\l__chemmacros_el_length_dim } { 0pt } }
+ \pgfpathlineto { \pgfpoint { 0pt } { 0pt } }
+ \pgfusepathqfillstroke
+ }
+% --------------------------------------------------------------------------
+% http://tex.stackexchange.com/a/25689/
+\pgfdeclaredecoration{wave}{initial}{
+ \state{initial}[
+ width = +0pt ,
+ next~ state = sine,
+ persistent~ precomputation = {
+ \pgfmathsetmacro\matchinglength{
+ \pgfdecoratedinputsegmentlength /
+ int(\pgfdecoratedinputsegmentlength/\pgfdecorationsegmentlength)
+ }
+ \setlength{\pgfdecorationsegmentlength}{\matchinglength pt}
+ }
+ ]{}
+ \state{sine}[width=\pgfdecorationsegmentlength]{
+ \pgfpathsine{
+ \pgfpoint
+ {0.25\pgfdecorationsegmentlength}
+ {0.5\pgfdecorationsegmentamplitude}
+ }
+ \pgfpathcosine{
+ \pgfpoint
+ {0.25\pgfdecorationsegmentlength}
+ {-0.5\pgfdecorationsegmentamplitude}
+ }
+ \pgfpathsine{
+ \pgfpoint
+ {0.25\pgfdecorationsegmentlength}
+ {-0.5\pgfdecorationsegmentamplitude}
+ }
+ \pgfpathcosine{
+ \pgfpoint
+ {0.25\pgfdecorationsegmentlength}
+ {0.5\pgfdecorationsegmentamplitude}
+ }
+ }
+ \state{final}{}
+}
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{isotopes}{2020/11/29 a macro to easily print element isotopes}
+
+\RequirePackage{elements}
-\cs_new_protected:Npn \ChemCompatibilityTo #1#2 \EndChemCompatibility
- { \chemmacros_if_compatibility:nnT {<} {#1} {#2} }
+\msg_new:nnn {chemmacros} {no-isotope}
+ { The~ isotope~ #2~ is~ not~ defined~ for~ element~ #1. }
+
+% --------------------------------------------------------------------------
+\tl_new:N \l__chemmacros_isotope_tl
+\tl_new:N \l__chemmacros_isotope_list_tl
+\seq_new:N \l__chemmacros_isotope_seq
+\seq_new:N \l__chemmacros_check_isotopes_seq
-\cs_new_protected:Npn \ChemCompatibilityBetween #1#2#3 \EndChemCompatibility
+% #1: atomic number|element symbol|element name
+% #2: tokenlist variable
+\cs_new_protected:Npn \chemmacros_get_atom_number:nN #1#2
+ {
+ \chemmacros_if_is_int:nTF {#1}
+ { \tl_set:Nn #2 {#1} }
+ {
+ \cs_if_exist:cTF { @elements@atom@number@ \str_lowercase:n {#1} }
+ { \tl_set:Nx #2 { \use:c { @elements@atom@number@ \str_lowercase:n {#1} } } }
+ { \tl_set:Nx #2 { \use:c { @elements@atom@name@num@ \str_lowercase:n {#1} } } }
+ }
+ }
+\cs_generate_variant:Nn \chemmacros_get_atom_number:nN { V }
+
+% #1: atomic number|element symbol|element name
+% #2: tl to store the result in
+\cs_new_protected:Npn \chemmacros_get_isotope_list:nN #1#2
+ {
+ \chemmacros_get_atom_number:nN {#1} \l__chemmacros_isotope_tl
+ \tl_set:Nx #2
+ {
+ \use:c
+ {
+ @elements@atom@isotopes@
+ \int_to_roman:n {\l__chemmacros_isotope_tl}
+ }
+ }
+ }
+
+% #1: atomic number|element symbol|element name
+% #2: tokenlist variable
+\cs_new_protected:Npn \chemmacros_get_element_symbol:nN #1#2
+ {
+ \chemmacros_get_atom_number:nN {#1} \l__chemmacros_isotope_tl
+ \tl_set:Nx #2
+ {
+ \use:c
+ {
+ @elements@atom@symbol@num@
+ \int_to_roman:n {\l__chemmacros_isotope_tl}
+ }
+ }
+ }
+
+% #1: atomic number|element symbol|element name
+% #2: isotope number
+\prg_new_protected_conditional:Npnn \chemmacros_check_isotope:nn #1#2 {T,F,TF}
+ {
+ \chemmacros_get_isotopes:nN {#1} \l__chemmacros_check_isotopes_seq
+ \seq_if_in:NnTF \l__chemmacros_check_isotopes_seq {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_generate_variant:Nn \chemmacros_check_isotope:nnF { V }
+
+% #1: atomic number|element symbol|element name
+% #2: tl to store the result in
+\cs_new_protected:Npn \chemmacros_get_main_isotope:nN #1#2
+ {
+ \chemmacros_get_isotope_list:nN {#1} \l__chemmacros_isotope_list_tl
+ \seq_set_split:NnV \l__chemmacros_isotope_seq {,} \l__chemmacros_isotope_list_tl
+ \seq_map_inline:Nn \l__chemmacros_isotope_seq
+ {
+ \chemmacros_read_isotope:nNN {##1}
+ \l__chemmacros_tmpa_bool
+ #2
+ \bool_if:NT \l__chemmacros_tmpa_bool
+ { \seq_map_break: }
+ }
+ }
+\cs_generate_variant:Nn \chemmacros_get_main_isotope:nN { V }
+
+% #1: atomic number|element symbol|element name
+% #2: seq to store the results in
+\cs_new_protected:Npn \chemmacros_get_isotopes:nN #1#2
+ {
+ \seq_clear:N #2
+ \chemmacros_get_isotope_list:nN {#1} \l__chemmacros_tmpa_tl
+ \seq_set_split:NnV \l__chemmacros_isotope_seq {,} \l__chemmacros_tmpa_tl
+ \seq_map_inline:Nn \l__chemmacros_isotope_seq
+ {
+ \chemmacros_read_isotope:nNN {##1}
+ \l__chemmacros_tmpa_bool
+ \l__chemmacros_tmpa_tl
+ \seq_put_right:NV #2 \l__chemmacros_tmpa_tl
+ }
+ }
+
+% #1: boolean variable
+% #2: tokenlist variable
+% #3: isotope list entry
+\cs_new_protected:Npn \chemmacros_read_isotope:nNN #1#2#3
+ { \__chemmacros_read_isotope:NNw #2#3 !#1!! \q_stop }
+
+% \__chemmacros_read_isotope:NNw N N !!1!! \q_stop
+% \__chemmacros_read_isotope:NNw N N !1!! \q_stop
+\cs_new_protected:Npn \__chemmacros_read_isotope:NNw #1#2#3!#4!#5!#6 \q_stop
+ {
+ \tl_if_blank:nTF {#5}
+ {
+ \tl_set:Nn #2 {#4}
+ \bool_set_false:N #1
+ }
+ {
+ \tl_set:Nn #2 {#5}
+ \bool_set_true:N #1
+ }
+ }
+
+% --------------------------------------------------------------------------
+% #1: boolean: hide atomic number?
+% #2: nucleons, element symbol
+\cs_new_protected:Npn \chemmacros_isotope:nn #1#2
+ { \__chemmacros_isotope:nww {#1} #2,, \q_stop }
+
+\cs_new_protected:Npn \__chemmacros_isotope:nww #1#2,#3,#4 \q_stop
+ {
+ \tl_if_blank:nTF {#3}
+ {
+ \chemmacros_get_element_symbol:nN {#2} \l__chemmacros_tmpa_tl
+ \chemmacros_get_main_isotope:nN {#2} \l__chemmacros_tmpb_tl
+ \chemmacros_get_atom_number:nN {#2} \l__chemmacros_tmpc_tl
+ \bool_if:nTF {#1}
+ {
+ \chemmacros_isotope_write:VnV
+ \l__chemmacros_tmpb_tl
+ { }
+ \l__chemmacros_tmpa_tl
+ }
+ {
+ \chemmacros_isotope_write:VVV
+ \l__chemmacros_tmpb_tl
+ \l__chemmacros_tmpc_tl
+ \l__chemmacros_tmpa_tl
+ }
+ }
+ {
+ \chemmacros_get_element_symbol:nN {#3} \l__chemmacros_tmpa_tl
+ \chemmacros_get_atom_number:nN {#3} \l__chemmacros_tmpb_tl
+ \chemmacros_check_isotope:VnF
+ \l__chemmacros_tmpa_tl
+ {#2}
+ {
+ \chemmacros_get_element_symbol:nN {#3} \l__chemmacros_tmpa_tl
+ \msg_warning:nnVn {chemmacros} {no-isotope}
+ \l__chemmacros_tmpa_tl
+ {#2}
+ }
+ \chemmacros_get_element_symbol:nN {#3} \l__chemmacros_tmpa_tl
+ \bool_if:nTF {#1}
+ { \chemmacros_isotope_write:nnV {#2} { } \l__chemmacros_tmpa_tl }
+ {
+ \chemmacros_isotope_write:nVV {#2}
+ \l__chemmacros_tmpb_tl
+ \l__chemmacros_tmpa_tl
+ }
+ }
+ }
+
+\bool_new:N \l__chemmacros_isotope_super_bool
+\tl_new:N \l__chemmacros_isotope_side_connect_tl
+
+\chemmacros_define_keys:nn {isotopes}
+ {
+ format .choice: ,
+ format / super .code:n =
+ \bool_set_true:N \l__chemmacros_isotope_super_bool ,
+ format / side .code:n =
+ \bool_set_false:N \l__chemmacros_isotope_super_bool ,
+ format .initial:n = super ,
+ side-connect .tl_set:N = \l__chemmacros_isotope_side_connect_tl ,
+ side-connect .initial:n = -
+ }
+
+% #1: nucleons
+% #2: atomic number
+% #3: element symbol
+\cs_new_protected:Npn \chemmacros_isotope_write:nnn #1#2#3
+ {
+ \bool_if:NTF \l__chemmacros_isotope_super_bool
+ { \chemmacros_chemformula:n { ^{#1}_{#2}#3 } }
+ {
+ \chemmacros_chemformula:n {#3}
+ \tl_use:N \l__chemmacros_isotope_side_connect_tl
+ #1
+ }
+ }
+\cs_generate_variant:Nn \chemmacros_isotope_write:nnn { VnV , VVV , nnV , nVV }
+
+% TODO: option for the layout of the written isotope: ^{12}_6C vs C-12
+
+\NewDocumentCommand \isotope { sm }
+ { \chemmacros_isotope:nn {#1} {#2} }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{mechanisms}{2020/11/29 reaction mechanisms}
+
+\RequirePackage{amstext}
+
+% --------------------------------------------------------------------------
+% reaction mechanisms
+% \mech[<type>]
+% <type> - substitutions: {}, 1, 2, se, 1e, 2e, ar
+% - eliminations: e, e1, e2, cb
+\tl_new:N \l__chemmacros_mechanisms_type_tl
+\tl_new:N \l__chemmacros_mechanisms_mol_tl
+\tl_new:N \l__chemmacros_mechanisms_ar_tl
+
+\cs_new_protected:Npn \__chemmacros_set_mechanisms:nnn #1#2#3
+ {
+ \tl_set:Nn \l__chemmacros_mechanisms_type_tl {#1}
+ \tl_set:Nn \l__chemmacros_mechanisms_mol_tl {#2}
+ \tl_set:Nn \l__chemmacros_mechanisms_ar_tl {#3}
+ }
+
+\chemmacros_define_keys:nn {mechanisms}
+ {
+ type .choice: ,
+ type / .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn {S}
+ {
+ \c_math_toggle_token
+ \c_math_subscript_token { \text {N} }
+ \c_math_toggle_token
+ }
+ { }
+ } ,
+ type / 1 .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn {S}
+ {
+ \c_math_toggle_token
+ \c_math_subscript_token { \text {N} }
+ \c_math_toggle_token
+ 1
+ }
+ { }
+ } ,
+ type / 2 .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn {S}
+ {
+ \c_math_toggle_token
+ \c_math_subscript_token { \text {N} }
+ \c_math_toggle_token
+ 2
+ }
+ { }
+ } ,
+ type / se .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn {S}
+ {
+ \c_math_toggle_token
+ \c_math_subscript_token { \text {E} }
+ \c_math_toggle_token
+ }
+ { }
+ } ,
+ type / 1e .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn {S}
+ {
+ \c_math_toggle_token
+ \c_math_subscript_token { \text {E} }
+ \c_math_toggle_token
+ 1
+ }
+ { }
+ } ,
+ type / 2e .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn {S}
+ {
+ \c_math_toggle_token
+ \c_math_subscript_token { \text {E} }
+ \c_math_toggle_token
+ 2
+ }
+ { }
+ } ,
+ type / ar .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn {S}
+ {
+ \c_math_toggle_token
+ \c_math_subscript_token { \text {E} }
+ \c_math_toggle_token
+ }
+ { Ar - }
+ } ,
+ type / e .code:n =
+ { \__chemmacros_set_mechanisms:nnn {E} { } { } } ,
+ type / e1 .code:n =
+ { \__chemmacros_set_mechanisms:nnn {E} {1} { } } ,
+ type / e2 .code:n =
+ { \__chemmacros_set_mechanisms:nnn {E} {2} { } } ,
+ type / cb .code:n =
+ {
+ \__chemmacros_set_mechanisms:nnn {E}
+ {
+ 1
+ \c_math_toggle_token
+ \c_math_subscript_token { \text {cb} }
+ \c_math_toggle_token
+ }
+ { }
+ } ,
+ type .default:n =
+ }
+
+\cs_new_protected:Npn \chemmacros_mechanisms:n #1
+ {
+ \tl_if_blank:nTF {#1}
+ { \chemmacros_set_keys:nn {mechanisms} { type } }
+ { \chemmacros_set_keys:nn {mechanisms} { type = #1 } }
+ \mbox
+ {
+ \tl_use:N \l__chemmacros_mechanisms_ar_tl
+ \tl_use:N \l__chemmacros_mechanisms_type_tl
+ \tl_use:N \l__chemmacros_mechanisms_mol_tl
+ }
+ }
+
+\NewDocumentCommand \mech {o}
+ {
+ \IfNoValueTF {#1}
+ { \chemmacros_mechanisms:n { } }
+ { \chemmacros_mechanisms:n {#1} }
+ }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{newman}{2020/11/29 newman projections}
+
+% Newman projections
+\fp_new:N \l__chemmacros_newman_rel_angle_fp
+\fp_zero:N \l__chemmacros_newman_rel_angle_fp
+\fp_new:N \l__chemmacros_newman_tmp_angle_fp
+\fp_new:N \l__chemmacros_newman_abs_angle_fp
+\fp_zero:N \l__chemmacros_newman_abs_angle_fp
+\fp_new:N \l__chemmacros_newman_scale_fp
+\fp_set:Nn \l__chemmacros_newman_scale_fp {1}
+\fp_new:N \l__chemmacros_newman_x_fp
+\fp_new:N \l__chemmacros_newman_y_fp
+
+\tl_new:N \l__chemmacros_newman_tikz_ring_tl
+\tl_new:N \l__chemmacros_newman_tikz_front_tl
+\tl_new:N \l__chemmacros_newman_tikz_back_tl
+
+\bool_new:N \l__chemmacros_newman_tikz_back_bool
+
+\chemmacros_define_keys:nn {newman}
+ {
+ ring .tl_set:N = \l__chemmacros_newman_tikz_ring_tl ,
+ atoms .tl_set:N = \l__chemmacros_newman_tikz_front_tl ,
+ back-atoms .code:n =
+ {
+ \bool_set_true:N \l__chemmacros_newman_tikz_back_bool
+ \tl_set:Nn \l__chemmacros_newman_tikz_back_tl { #1 }
+ } ,
+ scale .fp_set:N = \l__chemmacros_newman_scale_fp ,
+ scale .default:n = 1 ,
+ angle .fp_set:N = \l__chemmacros_newman_abs_angle_fp ,
+ angle .default:n = 0
+ }
+
+% \newman[<keyval>](<angle>){<1>,<2>,<3>,<4>,<5>,<6>}
+\NewDocumentCommand \newman {od()m}
+ {
+ \group_begin:
+ \IfNoValueF {#1} { \chemmacros_set_keys:nn {newman} {#1} }
+ \IfNoValueTF {#2}
+ { \chemmacros_newman:nn { } {#3} }
+ { \chemmacros_newman:nn {#2} {#3} }
+ \group_end:
+ }
+
+% #1: angle
+% #2: csv list of atoms
+\cs_new_protected:Npn \chemmacros_newman:nn #1#2
+ { \__chemmacros_newman_feed_atoms:nw {#1}#2 ,,,,,, \q_stop }
+
+\cs_new_protected:Npn \__chemmacros_newman_feed_atoms:nw #1#2,#3,#4,#5,#6,#7,#8 \q_stop
+ { \chemmacros_newman_atoms:nnnnnnn {#1} {#2} {#3} {#4} {#5} {#6} {#7} }
+
+% place atoms:
+% #1: angle
+% #2 - #7: atoms
+\cs_new_protected:Npn \chemmacros_newman_atoms:nnnnnnn #1#2#3#4#5#6#7
+ {
+ \tl_if_blank:nTF {#1}
+ {
+ \fp_set_eq:NN
+ \l__chemmacros_newman_rel_angle_fp
+ \l__chemmacros_newman_abs_angle_fp
+ }
+ { \fp_set:Nn \l__chemmacros_newman_rel_angle_fp {#1} }
+ \chemmacros_tikz_picture:xn
+ {
+ scale = \fp_to_decimal:N \l__chemmacros_newman_scale_fp ,
+ chemmacros_newman_atom_front / .style =
+ {
+ inner~sep = 0pt ,
+ outer~sep = 0pt ,
+ \exp_not:V \l__chemmacros_newman_tikz_front_tl
+ },
+ chemmacros_newman_atom_back / .style =
+ {
+ inner~sep = 0pt ,
+ outer~sep = 0pt ,
+ \bool_if:NTF \l__chemmacros_newman_tikz_back_bool
+ { \exp_not:V \l__chemmacros_newman_tikz_back_tl }
+ { \exp_not:V \l__chemmacros_newman_tikz_front_tl }
+ }
+ }
+ {
+ \chemmacros_tikz_draw:x
+ { \exp_not:V \l__chemmacros_newman_tikz_ring_tl }
+ (0pt,0pt) circle (\fp_to_dim:N \l__chemmacros_newman_scale_fp * 15) ;
+ \chemmacros_newman_back_node:nn {30} {#6}
+ \chemmacros_newman_back_node:nn {150} {#7}
+ \chemmacros_newman_back_node:nn {270} {#5}
+ \chemmacros_newman_front_node:nn {90} {#2}
+ \chemmacros_newman_front_node:nn {210} {#3}
+ \chemmacros_newman_front_node:nn {330} {#4}
+ }
+ }
+
+% provide cartesian coordiantes from polar coordinates
+% #1: fp variable for x
+% #2: fp variable for y
+% #3: angle
+% #4: radius
+\cs_new_protected:Npn \chemmacros_polar_to_cartesian:NNnn #1#2#3#4
+ {
+ \fp_set:Nn #1 { #4 * cos( #3 / 180 * pi ) }% x
+ \fp_set:Nn #2 { #4 * sin( #3 / 180 * pi ) }% y
+ }
+
+% place back nodes
+\cs_new_protected:Npn \chemmacros_newman_back_node:nn #1#2
+ {
+ \group_begin:
+ \fp_add:Nn \l__chemmacros_newman_rel_angle_fp { #1 }
+ \chemmacros_polar_to_cartesian:NNnn
+ \l__chemmacros_newman_x_fp
+ \l__chemmacros_newman_y_fp
+ { \l__chemmacros_newman_rel_angle_fp }
+ { \l__chemmacros_newman_scale_fp }
+ \chemmacros_tikz_draw:x
+ { \exp_not:V \l__chemmacros_newman_tikz_ring_tl }
+ (
+ 15 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
+ 15 * \fp_to_dim:N \l__chemmacros_newman_y_fp
+ )
+ --
+ (
+ 30 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
+ 30 * \fp_to_dim:N \l__chemmacros_newman_y_fp
+ ) ;
+ \chemmacros_polar_to_cartesian:NNnn
+ \l__chemmacros_newman_x_fp
+ \l__chemmacros_newman_y_fp
+ { \l__chemmacros_newman_rel_angle_fp }
+ { \l__chemmacros_newman_scale_fp }
+ \chemmacros_tikz_node:x
+ {
+ chemmacros_newman_atom_back,
+ anchor = -180 + \fp_to_int:N \l__chemmacros_newman_rel_angle_fp
+ }
+ at
+ (
+ 31 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
+ 31 * \fp_to_dim:N \l__chemmacros_newman_y_fp
+ )
+ { #2 } ;
+ \group_end:
+ }
+\cs_generate_variant:Nn \chemmacros_newman_back_node:nn { nf }
+
+% place front nodes:
+\cs_new_protected:Npn \chemmacros_newman_front_node:nn #1#2
+ {
+ \chemmacros_polar_to_cartesian:NNnn
+ \l__chemmacros_newman_x_fp
+ \l__chemmacros_newman_y_fp
+ { #1 }
+ { \l__chemmacros_newman_scale_fp }
+ \chemmacros_tikz_draw:x
+ { \exp_not:V \l__chemmacros_newman_tikz_ring_tl }
+ (0pt,0pt) -- ++
+ (
+ 30 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
+ 30 * \fp_to_dim:N \l__chemmacros_newman_y_fp
+ ) ;
+ \chemmacros_polar_to_cartesian:NNnn
+ \l__chemmacros_newman_x_fp
+ \l__chemmacros_newman_y_fp
+ { #1 }
+ { \l__chemmacros_newman_scale_fp }
+ \chemmacros_tikz_node:x
+ { chemmacros_newman_atom_front, anchor = -180 + #1 }
+ at
+ (
+ 31 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
+ 31 * \fp_to_dim:N \l__chemmacros_newman_y_fp
+ )
+ { #2 } ;
+ }
+\cs_generate_variant:Nn \chemmacros_newman_front_node:nn { nf }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{orbital}{2020/11/29 drawing orbital shapes}
+
+% \orbital[<keyval>]{<type>}
+% variables:
+\bool_new:N \l__chemmacros_orbital_type_s_bool
+\bool_new:N \l__chemmacros_orbital_type_p_bool
+\bool_new:N \l__chemmacros_orbital_type_sp_bool
+\bool_new:N \l__chemmacros_orbital_type_sptwo_bool
+\bool_new:N \l__chemmacros_orbital_type_spthree_bool
+\bool_new:N \l__chemmacros_orbital_s_phase_bool
+\bool_set_true:N \l__chemmacros_orbital_s_phase_bool
+\bool_new:N \l__chemmacros_orbital_p_phase_bool
+\bool_set_true:N \l__chemmacros_orbital_p_phase_bool
+\bool_new:N \l__chemmacros_orbital_sp_phase_bool
+\bool_set_true:N \l__chemmacros_orbital_sp_phase_bool
+\bool_new:N \l__chemmacros_orbital_sptwo_phase_bool
+\bool_set_true:N \l__chemmacros_orbital_sptwo_phase_bool
+\bool_new:N \l__chemmacros_orbital_spthree_phase_bool
+\bool_set_true:N \l__chemmacros_orbital_spthree_phase_bool
+\bool_new:N \l__chemmacros_orbital_p_half_bool
+\bool_new:N \l__chemmacros_orbital_overlay_bool
+\bool_new:N \l__chemmacros_orbital_opacity_bool
+
+\tl_new:N \l__chemmacros_orbital_s_color_tl
+\tl_set:Nn \l__chemmacros_orbital_s_color_tl {black}
+\tl_new:N \l__chemmacros_orbital_s_phase_color_tl
+\tl_new:N \l__chemmacros_orbital_p_color_tl
+\tl_set:Nn \l__chemmacros_orbital_p_color_tl {black}
+\tl_new:N \l__chemmacros_orbital_p_pphase_color_tl
+\tl_new:N \l__chemmacros_orbital_p_mphase_color_tl
+\tl_new:N \l__chemmacros_orbital_sp_color_tl
+\tl_set:Nn \l__chemmacros_orbital_sp_color_tl {black}
+\tl_new:N \l__chemmacros_orbital_sp_pphase_color_tl
+\tl_new:N \l__chemmacros_orbital_sp_mphase_color_tl
+\tl_new:N \l__chemmacros_orbital_sptwo_color_tl
+\tl_set:Nn \l__chemmacros_orbital_sptwo_color_tl {black}
+\tl_new:N \l__chemmacros_orbital_sptwo_pphase_color_tl
+\tl_new:N \l__chemmacros_orbital_sptwo_mphase_color_tl
+\tl_new:N \l__chemmacros_orbital_spthree_color_tl
+\tl_set:Nn \l__chemmacros_orbital_spthree_color_tl {black}
+\tl_new:N \l__chemmacros_orbital_spthree_pphase_color_tl
+\tl_new:N \l__chemmacros_orbital_spthree_mphase_color_tl
+\tl_new:N \l__chemmacros_orbital_s_scale_tl
+\tl_set:Nn \l__chemmacros_orbital_s_scale_tl {1}
+\tl_new:N \l__chemmacros_orbital_p_scale_tl
+\tl_set:Nn \l__chemmacros_orbital_p_scale_tl {1}
+\tl_new:N \l__chemmacros_orbital_sp_scale_tl
+\tl_set:Nn \l__chemmacros_orbital_sp_scale_tl {1}
+\tl_new:N \l__chemmacros_orbital_sptwo_scale_tl
+\tl_set:Nn \l__chemmacros_orbital_sptwo_scale_tl {1}
+\tl_new:N \l__chemmacros_orbital_spthree_scale_tl
+\tl_set:Nn \l__chemmacros_orbital_spthree_scale_tl {1}
+
+\fp_new:N \l__chemmacros_orbital_angle_fp
+\fp_set:Nn \l__chemmacros_orbital_angle_fp {90}
+\fp_new:N \l__chemmacros_orbital_opacity_fp
+\fp_set:Nn \l__chemmacros_orbital_opacity_fp {0.5}
+
+\cs_new:Npn \__chemmacros_orbital_options:
+ {
+ \__chemmacros_orbital_overlay: , \__chemmacros_orbital_opacity: ,
+ inner~sep=0 , outer~sep=0 , line~width=.2pt ,
+ rotate = { \fp_use:N \l__chemmacros_orbital_angle_fp - 90 } ,
+ baseline ,
+ minimum~size = 0
+ }
+
+\cs_new:Npn \__chemmacros_orbital_overlay:
+ { \bool_if:NT \l__chemmacros_orbital_overlay_bool {overlay} }
+
+\cs_new:Npn \__chemmacros_orbital_opacity:
+ {
+ \bool_if:NT \l__chemmacros_orbital_opacity_bool
+ { opacity = { \fp_use:N \l__chemmacros_orbital_opacity_fp } }
+ }
+
+% --------------------------------------------------------------------------
+% s-orbitals
+\cs_new_protected:Npn \__chemmacros_orbital_type_s:
+ {
+ \bool_set_true:N \l__chemmacros_orbital_type_s_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_p_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
+ }
+
+\chemmacros_define_keys:nn {orbital/s}
+ {
+ phase .choice: ,
+ phase / + .code:n =
+ { \bool_set_true:N \l__chemmacros_orbital_s_phase_bool } ,
+ phase / - .code:n =
+ { \bool_set_false:N \l__chemmacros_orbital_s_phase_bool } ,
+ scale .tl_set:N = \l__chemmacros_orbital_s_scale_tl ,
+ color .tl_set:N = \l__chemmacros_orbital_s_color_tl
+ }
+
+\cs_new_protected:Npn \__chemmacros_orbital_s_draw:n #1
+ {
+ \chemmacros_set_keys:nn {orbital/s} {#1}
+ \bool_if:NTF \l__chemmacros_orbital_s_phase_bool
+ {
+ \tl_if_in:NnTF \l__chemmacros_orbital_s_color_tl { ! }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_s_phase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_s_color_tl }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_s_phase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_s_color_tl ! 90 }
+ }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_s_phase_color_tl
+ { black ! 5 }
+ }
+ \chemmacros_tikz_picture:xn
+ { \__chemmacros_orbital_options: }
+ {
+ \chemmacros_tikz_shade:x
+ { ball~color = \exp_not:V \l__chemmacros_orbital_s_phase_color_tl }
+ (0pt,0pt) circle (\exp_not:V \l__chemmacros_orbital_s_scale_tl * .6em) ;
+ }
+ }
+
+% --------------------------------------------------------------------------
+% p-orbitals
+\cs_new_protected:Npn \__chemmacros_orbital_type_p:
+ {
+ \bool_set_false:N \l__chemmacros_orbital_type_s_bool
+ \bool_set_true:N \l__chemmacros_orbital_type_p_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
+ }
+
+\chemmacros_define_keys:nn {orbital/p}
+ {
+ phase .choice: ,
+ phase / + .code:n =
+ { \bool_set_true:N \l__chemmacros_orbital_p_phase_bool } ,
+ phase / - .code:n =
+ { \bool_set_false:N \l__chemmacros_orbital_p_phase_bool } ,
+ scale .tl_set:N = \l__chemmacros_orbital_p_scale_tl ,
+ angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
+ color .tl_set:N = \l__chemmacros_orbital_p_color_tl ,
+ half .bool_set:N = \l__chemmacros_orbital_p_half_bool ,
+ half .default:n = true
+ }
+
+\cs_new_protected:Npn \__chemmacros_orbital_p_draw:n #1
+ {
+ \chemmacros_set_keys:nn {orbital/p} {#1}
+ \bool_if:NTF \l__chemmacros_orbital_p_phase_bool
+ {
+ \tl_if_in:NnTF \l__chemmacros_orbital_p_color_tl { ! }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_p_pphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_p_color_tl }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_p_pphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_p_color_tl ! 90 }
+ }
+ \tl_set:Nn \l__chemmacros_orbital_p_mphase_color_tl
+ { black ! 5 }
+
+ }
+ {
+ \tl_if_in:NnTF \l__chemmacros_orbital_p_color_tl { ! }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_p_mphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_p_color_tl }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_p_mphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_p_color_tl ! 90 }
+ }
+ \tl_set:Nn \l__chemmacros_orbital_p_pphase_color_tl
+ { black ! 5 }
+ }
+ \chemmacros_tikz_picture:xn
+ { \__chemmacros_orbital_options: }
+ {
+ \chemmacros_tikz_shadedraw:x
+ {
+ draw = \exp_not:V \l__chemmacros_orbital_p_pphase_color_tl ,
+ ball~color = \exp_not:V \l__chemmacros_orbital_p_pphase_color_tl
+ }
+ (0pt,0pt) .. controls ++
+ (
+ - \l__chemmacros_orbital_p_scale_tl * 2em ,
+ \l__chemmacros_orbital_p_scale_tl * 2em
+ )
+ and ++
+ (
+ \l__chemmacros_orbital_p_scale_tl * 2em ,
+ \l__chemmacros_orbital_p_scale_tl * 2em
+ )
+ .. (0pt,0pt);
+ \bool_if:NF \l__chemmacros_orbital_p_half_bool
+ {
+ \chemmacros_tikz_shadedraw:x
+ {
+ draw = \exp_not:V \l__chemmacros_orbital_p_mphase_color_tl ,
+ ball~color = \exp_not:V \l__chemmacros_orbital_p_mphase_color_tl
+ }
+ (0pt,0pt) .. controls ++
+ (
+ - \l__chemmacros_orbital_p_scale_tl * 2em ,
+ - \l__chemmacros_orbital_p_scale_tl * 2em
+ )
+ and ++
+ (
+ \l__chemmacros_orbital_p_scale_tl * 2em ,
+ - \l__chemmacros_orbital_p_scale_tl * 2em
+ )
+ .. (0pt,0pt);
+ }
+ }
+ }
+
+% --------------------------------------------------------------------------
+% sp-orbitals
+\cs_new_protected:Npn \__chemmacros_orbital_type_sp:
+ {
+ \bool_set_false:N \l__chemmacros_orbital_type_s_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_p_bool
+ \bool_set_true:N \l__chemmacros_orbital_type_sp_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
+ }
+
+\chemmacros_define_keys:nn {orbital/sp}
+ {
+ phase .choice: ,
+ phase / + .code:n =
+ { \bool_set_true:N \l__chemmacros_orbital_sp_phase_bool } ,
+ phase / - .code:n =
+ { \bool_set_false:N \l__chemmacros_orbital_sp_phase_bool } ,
+ scale .tl_set:N = \l__chemmacros_orbital_sp_scale_tl ,
+ angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
+ color .tl_set:N = \l__chemmacros_orbital_sp_color_tl
+ }
+
+\cs_new_protected:Npn \__chemmacros_orbital_sp_draw:n #1
+ {
+ \chemmacros_set_keys:nn {orbital/sp} {#1}
+ \bool_if:NTF \l__chemmacros_orbital_sp_phase_bool
+ {
+ \tl_if_in:NnTF \l__chemmacros_orbital_sp_color_tl { ! }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_sp_pphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_sp_color_tl }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_sp_pphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_sp_color_tl ! 90 }
+ }
+ \tl_set:Nn \l__chemmacros_orbital_sp_mphase_color_tl
+ { black ! 5 }
+
+ }
+ {
+ \tl_if_in:NnTF \l__chemmacros_orbital_sp_color_tl { ! }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_sp_mphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_sp_color_tl }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_sp_mphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_sp_color_tl ! 90 }
+ }
+ \tl_set:Nn \l__chemmacros_orbital_sp_pphase_color_tl
+ { black ! 5 }
+ }
+ \chemmacros_tikz_picture:xn
+ { \__chemmacros_orbital_options: }
+ {
+ \chemmacros_tikz_shadedraw:x
+ {
+ draw = \exp_not:V \l__chemmacros_orbital_sp_pphase_color_tl ,
+ ball~color = \exp_not:V \l__chemmacros_orbital_sp_pphase_color_tl
+ }
+ (0pt,0pt) .. controls ++
+ (
+ - \l__chemmacros_orbital_sp_scale_tl * 2em ,
+ \l__chemmacros_orbital_sp_scale_tl * 2em
+ )
+ and ++
+ (
+ \l__chemmacros_orbital_sp_scale_tl * 2em ,
+ \l__chemmacros_orbital_sp_scale_tl * 2em
+ )
+ .. (0pt,0pt);
+ \chemmacros_tikz_shadedraw:x
+ {
+ draw = \exp_not:V \l__chemmacros_orbital_sp_mphase_color_tl ,
+ ball~color = \exp_not:V \l__chemmacros_orbital_sp_mphase_color_tl
+ }
+ (0pt,0pt) .. controls ++
+ (
+ - \l__chemmacros_orbital_sp_scale_tl * .6em ,
+ - \l__chemmacros_orbital_sp_scale_tl * .6em
+ )
+ and ++
+ (
+ \l__chemmacros_orbital_sp_scale_tl * .6em ,
+ - \l__chemmacros_orbital_sp_scale_tl * .6em
+ )
+ .. (0pt,0pt);
+ }
+ }
+
+% --------------------------------------------------------------------------
+% sp2-orbitals
+\cs_new_protected:Npn \__chemmacros_orbital_type_sptwo:
+ {
+ \bool_set_false:N \l__chemmacros_orbital_type_s_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_p_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
+ \bool_set_true:N \l__chemmacros_orbital_type_sptwo_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
+ }
+
+\chemmacros_define_keys:nn {orbital/sp2}
+ {
+ phase .choice: ,
+ phase / + .code:n =
+ { \bool_set_true:N \l__chemmacros_orbital_sptwo_phase_bool } ,
+ phase / - .code:n =
+ { \bool_set_false:N \l__chemmacros_orbital_sptwo_phase_bool } ,
+ scale .tl_set:N = \l__chemmacros_orbital_sptwo_scale_tl ,
+ angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
+ color .tl_set:N = \l__chemmacros_orbital_sptwo_color_tl
+ }
+
+\cs_new_protected:Npn \__chemmacros_orbital_sptwo_draw:n #1
+ {
+ \chemmacros_set_keys:nn {orbital/sp2} {#1}
+ \bool_if:NTF \l__chemmacros_orbital_sptwo_phase_bool
+ {
+ \tl_if_in:NnTF \l__chemmacros_orbital_sptwo_color_tl { ! }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_sptwo_pphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_sptwo_pphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl ! 90 }
+ }
+ \tl_set:Nn \l__chemmacros_orbital_sptwo_mphase_color_tl
+ { black ! 5 }
+
+ }
+ {
+ \tl_if_in:NnTF \l__chemmacros_orbital_sptwo_color_tl { ! }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_sptwo_mphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_sptwo_mphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl ! 90 }
+ }
+ \tl_set:Nn \l__chemmacros_orbital_sptwo_pphase_color_tl
+ { black ! 5 }
+ }
+ \chemmacros_tikz_picture:xn
+ { \__chemmacros_orbital_options: }
+ {
+ \chemmacros_tikz_shadedraw:x
+ {
+ draw = \exp_not:V \l__chemmacros_orbital_sptwo_pphase_color_tl ,
+ ball~color = \exp_not:V \l__chemmacros_orbital_sptwo_pphase_color_tl
+ }
+ (0pt,0pt) .. controls ++
+ (
+ - \l__chemmacros_orbital_sptwo_scale_tl * 2em ,
+ \l__chemmacros_orbital_sptwo_scale_tl * 2em
+ )
+ and ++
+ (
+ \l__chemmacros_orbital_sptwo_scale_tl * 2em ,
+ \l__chemmacros_orbital_sptwo_scale_tl * 2em
+ )
+ .. (0pt,0pt);
+ \chemmacros_tikz_shadedraw:x
+ {
+ draw = \exp_not:V \l__chemmacros_orbital_sptwo_mphase_color_tl ,
+ ball~color = \exp_not:V \l__chemmacros_orbital_sptwo_mphase_color_tl
+ }
+ (0pt,0pt) .. controls ++
+ (
+ - \l__chemmacros_orbital_sptwo_scale_tl * .8em ,
+ - \l__chemmacros_orbital_sptwo_scale_tl * .8em
+ )
+ and ++
+ (
+ \l__chemmacros_orbital_sptwo_scale_tl * .8em ,
+ - \l__chemmacros_orbital_sptwo_scale_tl * .8em
+ )
+ .. (0pt,0pt);
+ }
+ }
+
+% --------------------------------------------------------------------------
+% sp3-orbitals
+\cs_new_protected:Npn \__chemmacros_orbital_type_spthree:
+ {
+ \bool_set_false:N \l__chemmacros_orbital_type_s_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_p_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
+ \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
+ \bool_set_true:N \l__chemmacros_orbital_type_spthree_bool
+ }
+
+\chemmacros_define_keys:nn {orbital/sp3}
+ {
+ phase .choice: ,
+ phase / + .code:n =
+ { \bool_set_true:N \l__chemmacros_orbital_spthree_phase_bool } ,
+ phase / - .code:n =
+ { \bool_set_false:N \l__chemmacros_orbital_spthree_phase_bool } ,
+ scale .tl_set:N = \l__chemmacros_orbital_spthree_scale_tl ,
+ angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
+ color .tl_set:N = \l__chemmacros_orbital_spthree_color_tl
+ }
+
+\cs_new_protected:Npn \__chemmacros_orbital_spthree_draw:n #1
+ {
+ \chemmacros_set_keys:nn {orbital/sp3} {#1}
+ \bool_if:NTF \l__chemmacros_orbital_spthree_phase_bool
+ {
+ \tl_if_in:NnTF \l__chemmacros_orbital_spthree_color_tl {!}
+ {
+ \tl_set:Nn \l__chemmacros_orbital_spthree_pphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_spthree_color_tl }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_spthree_pphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_spthree_color_tl ! 90 }
+ }
+ \tl_set:Nn \l__chemmacros_orbital_spthree_mphase_color_tl {black!5}
+ }
+ {
+ \tl_if_in:NnTF \l__chemmacros_orbital_spthree_color_tl {!}
+ {
+ \tl_set:Nn \l__chemmacros_orbital_spthree_mphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_spthree_color_tl }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_orbital_spthree_mphase_color_tl
+ { \tl_use:N \l__chemmacros_orbital_spthree_color_tl ! 90 }
+ }
+ \tl_set:Nn \l__chemmacros_orbital_spthree_pphase_color_tl {black!5}
+ }
+ \chemmacros_tikz_picture:xn
+ { \__chemmacros_orbital_options: }
+ {
+ \chemmacros_tikz_shadedraw:x
+ {
+ draw = \exp_not:V \l__chemmacros_orbital_spthree_pphase_color_tl ,
+ ball~color = \exp_not:V \l__chemmacros_orbital_spthree_pphase_color_tl
+ }
+ (0pt,0pt) .. controls ++
+ (
+ - \l__chemmacros_orbital_spthree_scale_tl * 2em ,
+ \l__chemmacros_orbital_spthree_scale_tl * 2em
+ )
+ and ++
+ (
+ \l__chemmacros_orbital_spthree_scale_tl * 2em ,
+ \l__chemmacros_orbital_spthree_scale_tl * 2em
+ )
+ .. (0pt,0pt);
+ \chemmacros_tikz_shadedraw:x
+ {
+ draw = \exp_not:V \l__chemmacros_orbital_spthree_mphase_color_tl ,
+ ball~color = \exp_not:V \l__chemmacros_orbital_spthree_mphase_color_tl
+ }
+ (0pt,0pt) .. controls ++
+ (
+ - \l__chemmacros_orbital_spthree_scale_tl * 1em ,
+ - \l__chemmacros_orbital_spthree_scale_tl * 1em
+ )
+ and ++
+ (
+ \l__chemmacros_orbital_spthree_scale_tl * 1em ,
+ - \l__chemmacros_orbital_spthree_scale_tl * 1em
+ )
+ .. (0pt,0pt);
+ }
+ }
+
+% --------------------------------------------------------------------------
+% main command
+\chemmacros_define_keys:nn {orbital}
+ {
+ overlay .bool_set:N = \l__chemmacros_orbital_overlay_bool ,
+ overlay .default:n = true ,
+ opacity .code:n =
+ {
+ \fp_compare:nTF { #1 = 1 }
+ { \bool_set_false:N \l__chemmacros_orbital_opacity_bool }
+ { \bool_set_true:N \l__chemmacros_orbital_opacity_bool }
+ \fp_set:Nn \l__chemmacros_orbital_opacity_fp {#1}
+ }
+ }
+
+\chemmacros_define_keys:nn {orbital/type}
+ {
+ s .code:n = { \__chemmacros_orbital_type_s: } ,
+ p .code:n = { \__chemmacros_orbital_type_p: } ,
+ sp .code:n = { \__chemmacros_orbital_type_sp: } ,
+ sp2 .code:n = { \__chemmacros_orbital_type_sptwo: } ,
+ sp3 .code:n = { \__chemmacros_orbital_type_spthree: }
+ }
+
+\cs_new_protected:Npn \chemmacros_orbital:n #1
+ {
+ \bool_if:NT \l__chemmacros_orbital_type_s_bool
+ { \__chemmacros_orbital_s_draw:n {#1} }
+ \bool_if:NT \l__chemmacros_orbital_type_p_bool
+ { \__chemmacros_orbital_p_draw:n {#1} }
+ \bool_if:NT \l__chemmacros_orbital_type_sp_bool
+ { \__chemmacros_orbital_sp_draw:n {#1} }
+ \bool_if:NT \l__chemmacros_orbital_type_sptwo_bool
+ { \__chemmacros_orbital_sptwo_draw:n {#1} }
+ \bool_if:NT \l__chemmacros_orbital_type_spthree_bool
+ { \__chemmacros_orbital_spthree_draw:n {#1} }
+ }
+
+\NewDocumentCommand \orbital {om}
+ {
+ \group_begin:
+ \chemmacros_set_keys:nn {orbital/type} {#2}
+ \IfNoValueTF {#1}
+ { \chemmacros_orbital:n { } }
+ { \chemmacros_orbital:n {#1} }
+ \group_end:
+ }
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{polymers}{2020/11/29 polymers}
+
+% --------------------------------------------------------------------------
+% copolymers
+\NewChemIUPAC \copolymer { \textit {co} }
+\LetChemIUPAC \co \copolymer
+
+\NewChemIUPAC \statistical { \textit {stat} }
+\LetChemIUPAC \stat \statistical
+
+\NewChemIUPAC \random { \textit {ran} }
+\LetChemIUPAC \ran \random
+
+\NewChemIUPAC \alternating { \textit {alt} }
+\LetChemIUPAC \alt \alternating
+
+\NewChemIUPAC \periodic { \textit {per} }
+\LetChemIUPAC \per \periodic
+
+\NewChemIUPAC \block { \textit {block} }
+\NewChemIUPAC \graft { \textit {graft} }
+
+% --------------------------------------------------------------------------
+% non-linear (co)polymers
+\NewChemIUPAC \blend { \textit {blend} }
+\NewChemIUPAC \comb { \textit {comb} }
+
+\NewChemIUPAC \complex { \textit {compl} }
+\LetChemIUPAC \compl \complex
+
+\NewChemIUPAC \cyclic { \textit {cyclo} }
+\LetChemIUPAC \cyclo \cyclic
+
+\NewChemIUPAC \branch { \textit {branch} }
+\NewChemIUPAC \network { \textit {net} }
+\LetChemIUPAC \net \network
+
+\NewChemIUPAC \ipnetwork { \textit {ipn} }
+\LetChemIUPAC \ipn \ipnetwork
+
+\NewChemIUPAC \sipnetwork { \textit {sipn} }
+\LetChemIUPAC \sipn \sipnetwork
+
+\NewChemIUPAC \star { \textit {star} }
+
+% --------------------------------------------------------------------------
+
+\tl_new:N \l__chemmacros_polymer_delimiter_left_tl
+\tl_new:N \l__chemmacros_polymer_delimiter_right_tl
+
+\tl_new:N \l__chemmacros_polymer_subscript_tl
+\tl_new:N \l__chemmacros_polymer_superscript_tl
+
+\dim_new:N \l__chemmacros_polymer_delimiter_height_dim
+\dim_new:N \l__chemmacros_polymer_delimiter_depth_dim
+
+\cs_new_protected:Npn \__chemmacros_set_polymer_delimiters:NN #1#2
+ {
+ \tl_set:Nn \l__chemmacros_polymer_delimiter_left_tl {#1}
+ \tl_set:Nn \l__chemmacros_polymer_delimiter_right_tl {#2}
+ }
+
+% #1: height
+% #2: depth
+% #3: opening node
+% #4: closing node
+% #5: subscript
+% #6: superscript
+\cs_new_protected:Npn \chemmacros_make_polymer_braces:nnnnnn #1#2#3#4#5#6
+ {
+ \dim_set:Nn \l__chemmacros_polymer_delimiter_height_dim { (#1+#2)/2 }
+ \dim_set:Nn \l__chemmacros_polymer_delimiter_depth_dim { (#1-#2)/2 }
+ \chemmacros_tikz_picture:nn {remember~ picture, overlay }
+ {
+ \chemmacros_tikz_node:n
+ { at = (#3) , yshift = \l__chemmacros_polymer_delimiter_depth_dim }
+ {
+ \c_math_toggle_token
+ \tex_left:D \l__chemmacros_polymer_delimiter_left_tl
+ \tex_vrule:D
+ height \l__chemmacros_polymer_delimiter_height_dim
+ depth \l__chemmacros_polymer_delimiter_height_dim
+ width \c_zero_dim
+ \tex_right:D .
+ \c_math_toggle_token
+ } ;
+ \chemmacros_tikz_node:n
+ { at = (#4) , yshift = \l__chemmacros_polymer_delimiter_depth_dim }
+ {
+ \c_math_toggle_token
+ \tex_left:D .
+ \tex_vrule:D
+ height \l__chemmacros_polymer_delimiter_height_dim
+ depth \l__chemmacros_polymer_delimiter_height_dim
+ width \c_zero_dim
+ \tex_right:D \l__chemmacros_polymer_delimiter_right_tl
+ \c_math_subscript_token
+ { \hbox_overlap_right:n { \smash {#5} } }
+ \c_math_superscript_token
+ { \hbox_overlap_right:n { \smash {#6} } }
+ \c_math_toggle_token
+ } ;
+ }
+ }
+\cs_generate_variant:Nn \chemmacros_make_polymer_braces:nnnnnn {nnnnVV}
+
+\chemmacros_define_keys:nn {polymers}
+ {
+ delimiters .code:n = \__chemmacros_set_polymer_delimiters:NN #1 ,
+ delimiters .initial:n = [] ,
+ superscript .tl_set:N = \l__chemmacros_polymer_superscript_tl ,
+ subscript .tl_set:N = \l__chemmacros_polymer_subscript_tl ,
+ subscript .initial:n = $n$
+ }
+
+\NewDocumentCommand \makepolymerdelims {O{}momm}
+ {
+ \group_begin:
+ \chemmacros_set_keys:nn {polymers} {#1}
+ \IfNoValueTF {#3}
+ {
+ \chemmacros_make_polymer_braces:nnnnVV {#2} {#2} {#4} {#5}
+ \l__chemmacros_polymer_subscript_tl
+ \l__chemmacros_polymer_superscript_tl
+ }
+ {
+ \chemmacros_make_polymer_braces:nnnnVV {#2} {#3} {#4} {#5}
+ \l__chemmacros_polymer_subscript_tl
+ \l__chemmacros_polymer_superscript_tl
+ }
+ \group_end:
+ }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{reactions}{2022/01/13 reaction environments}
+
+\RequirePackage{mathtools}
+
+% --------------------------------------------------------------------------
+\cs_new_protected:Npn \__chemmacros_record_for_lor:nnnnn #1#2#3#4#5
+ {
+ \tl_if_eq:nnT {#1} {reaction}
+ {
+ \group_begin:
+ % we need to prevent \Hy@make@anchor from being written to the lor
+ % file:
+ \bool_if:NT \l__chemmacros_hyperref_bool
+ { \cs_set:Npn \Hy@make@anchor {} }
+ \addcontentsline {lor} {reaction}
+ {
+ \tl_use:N \l__chemmacros_reaction_lorname_tl
+ \tl_use:N \c_space_tl
+ #2 #3 #4 #5
+ \tl_use:N \g__chemmacros_reaction_description_tl
+ }
+ \tl_gclear:N \g__chemmacros_reaction_description_tl
+ \group_end:
+ }
+ }
+
+% redefine mathtools' command \MT_define_tagform:nwnn to ensure we add an
+% entry to the list of reactions even if the user redefines the reaction tag
+% this should probably be done via patching...
+\hook_gput_code:nnn {package/mathtools/after} {chemmacros}
+ {
+ \cs_set_protected:Npn \MT_define_tagform:nwnn #1[#2]#3#4
+ {
+ \@namedef{MT_tagform_#1:n}##1
+ {
+ % this is the original part:
+ \maketag@@@{#3\ignorespaces#2{##1}\unskip\@@italiccorr#4}
+ % this is added => this disturbs hyperref:
+ \__chemmacros_record_for_lor:nnnnn
+ {#1} {#3} {#2} {##1} {#4}
+ }
+ }
+ }
+
+\tl_new:N \g__chemmacros_reaction_description_tl
+
+\cs_new_protected:Npn \chemmacros_add_reaction_description:n #1
+ {
+ \tl_if_blank:nF {#1}
+ { \tl_gset:Nn \g__chemmacros_reaction_description_tl {:~#1} }
+ }
+
+\NewDocumentCommand \AddRxnDesc {m}
+ { \chemmacros_add_reaction_description:n {#1} }
+
+% define \listofreactions
+\tl_new:N \l__chemmacros_reaction_lorname_tl
+\tl_new:N \reactionlistname
+\tl_new:N \l__chemmacros_reaction_heading_tl
+
+\cs_new:Npn \__chemmacros_reaction_heading:n #1
+ { \l__chemmacros_reaction_heading_tl {#1} }
+\cs_generate_variant:Nn \__chemmacros_reaction_heading:n { V }
+
+\tl_set:Nn \l__chemmacros_reaction_lorname_tl
+ { \chemmacros_translate:n {Reaction} }
+
+\tl_set:Nn \reactionlistname { \chemmacros_translate:n {list-of-reactions} }
+
+\chemmacros_define_keys:nn {reactions}
+ {
+ list-name .tl_set:N = \reactionlistname ,
+ list-entry .tl_set:N = \l__chemmacros_reaction_lorname_tl ,
+ list-heading-cmd .code:n =
+ \cs_set_protected:Npn \__chemmacros_reaction_heading:n ##1 {#1}
+ }
+
+\cs_if_exist:NTF \chapter
+ { \chemmacros_set_keys:nn {reactions} { list-heading-cmd = \chapter* {#1} } }
+ { \chemmacros_set_keys:nn {reactions} { list-heading-cmd = \section* {#1} } }
+
+\cs_new_protected:Npn \listofreactions
+ {
+ \__chemmacros_reaction_heading:V \reactionlistname
+ \@starttoc {lor}
+ }
+
+\cs_new_eq:NN \l@reaction \l@figure
+
+\bool_new:N \l__chemmacros_reactions_tocbasic_bool
+\cs_if_exist:NT \KOMAClassName
+ { \bool_set_true:N \l__chemmacros_reactions_tocbasic_bool }
+
+\tl_new:N \l__chemmacros_reactions_tag_open_tl
+\tl_new:N \l__chemmacros_reactions_tag_close_tl
+\tl_new:N \l__chemmacros_reactions_before_tag_tl
+
+\chemmacros_define_keys:nn {reactions}
+ {
+ tocbasic .bool_set:N = \l__chemmacros_reactions_tocbasic_bool ,
+ tag-open .tl_set:N = \l__chemmacros_reactions_tag_open_tl ,
+ tag-open .initial:n = \{ ,
+ tag-close .tl_set:N = \l__chemmacros_reactions_tag_close_tl ,
+ tag-close .initial:n = \} ,
+ before-tag .tl_set:N = \l__chemmacros_reactions_before_tag_tl
+ }
+
+\hook_gput_code:nnn {package/tocbasic/after} {chemmacros}
+ {
+ \bool_lazy_or:nnT
+ { \chemmacros_if_package_loaded_p:n {tocbasic} }
+ { \l__chemmacros_reactions_tocbasic_bool }
+ {
+ \RequirePackage {tocbasic}
+ \addtotoclist [float] {lor}
+ \cs_set_protected:Npn \listofreactions { \listoftoc {lor} }
+ \cs_new:Npn \listoflorname { \reactionlistname }
+ }
+ }
+
+\ChemCleverefSupport {reaction}
+ { \chemmacros_translate:n {reaction} }
+ [ \chemmacros_translate:n {Reaction} ]
+ { \chemmacros_translate:n {reactions} }
+ [ \chemmacros_translate:n {Reactions} ]
+
+\hook_gput_code:nnn {package/cleveref/after} {chemmacros}
+ {
+ \creflabelformat {reaction}
+ {
+ #2
+ \l__chemmacros_reactions_tag_open_tl
+ #1
+ \l__chemmacros_reactions_tag_close_tl
+ #3
+ }
+ }
+
+\ChemFancyrefSupport {rct}
+ { \chemmacros_translate:n {reaction} }
+ [ \chemmacros_translate:n {Reaction} ]
+
+% create new tagform
+\newtagform {reaction}
+ [\l__chemmacros_reactions_before_tag_tl]
+ {\l__chemmacros_reactions_tag_open_tl}
+ {\l__chemmacros_reactions_tag_close_tl}
+
+\newcounter {chemmacros_save_reaction}
+\newcounter {reaction}
+
+\cs_new_protected:Npn \__chemmacros_begin_reaction:
+ {
+ \patchcmd \thereaction {reaction} {equation} {} {}
+ \cs_set_eq:NN \theequation \thereaction
+ \cs_set_eq:NN \r@equation \r@reaction
+ \cs_set_eq:NN \p@equation \p@reaction
+ \cs_set:Npn \theHequation { R . \theHsection . \theequation }
+ \setcounter {chemmacros_save_reaction} { \value {equation} }
+ \setcounter {equation} { \value {reaction} }
+ \chemmacros_if_package_loaded:nT {cleveref}
+ { \crefalias {equation} {reaction} }
+ \usetagform {reaction}
+ }
+
+% switch back to equation tags
+\cs_new_protected:Npn \__chemmacros_end_reaction:
+ {
+ \setcounter {reaction} { \value {equation} }
+ \setcounter {equation} { \value {chemmacros_save_reaction} }
+ }
+
+\tl_new:N \l__chemmacros_reactions_args_tl
+
+\cs_new_protected:Npn \__chemmacros_reactions_build_args:n #1
+ { \tl_put_right:Nn \l__chemmacros_reactions_args_tl { {## #1} } }
+
+\cs_new_protected:Npn \chemmacros_define_reaction:nnn #1#2#3
+ {
+ \int_compare:nNnT {#3+0} > {0}
+ {
+ \tl_clear:N \l__chemmacros_reactions_args_tl
+ \int_step_function:nnnN {2} {1} {#3+1} \__chemmacros_reactions_build_args:n
+ }
+ \chemmacros_declare_reaction_env:nnnV {#1} {#2} {#3} \l__chemmacros_reactions_args_tl
+ }
+
+% #1: chem
+% #2: math
+% #3: args number
+% #4: argument list ({#2}{#3}...)
+\cs_new_protected:Npn \chemmacros_declare_reaction_env:nnnn #1#2#3#4
+ {
+ \exp_args:Nnx \DeclareDocumentEnvironment {#1}
+ { \int_compare:nT { #3+0 = 0 } {!} O{} \prg_replicate:nn {#3+0} {m} }
+ {
+ \chemmacros_add_reaction_description:n {##1}
+ \__chemmacros_begin_reaction:
+ \chemmacros_reaction_read:nnw {#2} {#4}
+ }
+ {
+ \__chemmacros_end_reaction:
+ \ignorespacesafterend
+ }
+ }
+\cs_generate_variant:Nn \chemmacros_declare_reaction_env:nnnn {nnnV}
+
+\cs_new_protected:Npn \chemmacros_reaction_read:nnw #1#2#3 \end
+ {
+ \tl_clear:N \l__chemmacros_tmpa_tl
+ \seq_clear:N \l__chemmacros_tmpc_seq
+ \seq_set_split:Nnn \l__chemmacros_tmpa_seq {\\} {#3}
+ \int_set:Nn \l__chemmacros_tmpa_int
+ { \seq_count:N \l__chemmacros_tmpa_seq }
+ \int_zero:N \l__chemmacros_tmpb_int
+ \seq_map_inline:Nn \l__chemmacros_tmpa_seq
+ {
+ \int_incr:N \l__chemmacros_tmpb_int
+ \seq_clear:N \l__chemmacros_tmpc_seq
+ \seq_set_split:Nnn \l__chemmacros_tmpb_seq {&} {##1}
+ \seq_map_inline:Nn \l__chemmacros_tmpb_seq
+ {
+ \seq_put_right:Nn \l__chemmacros_tmpc_seq
+ { \chemmacros_reaction:n {####1} }
+ }
+ \tl_put_right:Nx \l__chemmacros_tmpa_tl
+ { \seq_use:Nn \l__chemmacros_tmpc_seq {&} }
+ \int_compare:nF
+ { \l__chemmacros_tmpa_int = \l__chemmacros_tmpb_int }
+ { \tl_put_right:Nn \l__chemmacros_tmpa_tl {\\} }
+ }
+ \chemmacros_reaction_write:nnV {#1} {#2} \l__chemmacros_tmpa_tl
+ \end
+ }
+
+\cs_new_protected:Npn \chemmacros_reaction_write:nnn #1#2#3
+ {
+ \begin{#1}#2
+ #3
+ \end{#1}
+ }
+\cs_generate_variant:Nn \chemmacros_reaction_write:nnn { nnV }
+
+\NewChemMacroset* {Reaction} {mO{}m}
+ { \chemmacros_define_reaction:nnn {#1} {#3} {#2} }
+
+\NewChemReaction {reaction} {equation}
+\NewChemReaction {reaction*} {equation*}
+\NewChemReaction {reactions} {align}
+\NewChemReaction {reactions*} {align*}
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{redox}{2020/11/29 oxidation numbers, redox reactions}
+
+\RequirePackage{mathtools,relsize}
+
+\msg_new:nnn {chemmacros} {redox}
+ { \token_to_str:N #1 \c_space_tl : ~ #2 ~ \msg_line_context: . }
+
+
+% --------------------------------------------------------------------------
+% oxidation numbers
+% \ox{<number>,<atom>}
+\bool_new:N \l__chemmacros_ox_sign_bool
+\bool_new:N \l__chemmacros_ox_integer_bool
+\bool_new:N \l__chemmacros_ox_explicit_sign_bool
+\bool_new:N \l__chemmacros_ox_explicit_zero_sign_bool
+\bool_new:N \l__chemmacros_ox_format_roman_bool
+\bool_new:N \l__chemmacros_ox_decimal_marker_comma_bool
+\bool_new:N \l__chemmacros_ox_parse_bool
+\bool_new:N \l__chemmacros_ox_side_bool
+\bool_new:N \l__chemmacros_ox_super_bool
+\bool_new:N \l__chemmacros_ox_top_bool
+\bool_new:N \l__chemmacros_ox_align_center_bool
+
+\tl_new:N \l__chemmacros_ox_format_tl
+
+\int_new:N \l__chemmacros_ox_number_int
+\fp_new:N \l__chemmacros_ox_number_fp
+
+\cs_new_protected:Npn \__chemmacros_ox_format:n #1
+ { { \l__chemmacros_ox_format_tl {#1} } }
+
+\cs_new_protected:Npn \__chemmacros_ox_process_number:n #1
+ {
+ \bool_if:NTF \l__chemmacros_ox_parse_bool
+ {
+ \tl_if_in:nnTF {#1} { / }
+ { \__chemmacros_ox_fraction:w #1 \q_stop }
+ {
+ \__chemmacros_ox_sign:n {#1}
+ \__chemmacros_ox_value:n {#1}
+ }
+ }
+ {#1}
+ }
+
+\cs_new_protected:Npn \__chemmacros_ox_fraction:w #1/#2 \q_stop
+ {
+ \group_begin:
+ \bool_set_false:N \l__chemmacros_ox_format_roman_bool
+ \__chemmacros_ox_sign:n {#1}
+ \bool_if:NTF \l__chemmacros_ox_side_bool
+ { \chemmacros_ox_text_frac:nn }
+ { \chemmacros_ox_super_frac:nn }
+ { \__chemmacros_ox_value:n {#1} }
+ {#2}
+ \group_end:
+ }
+
+\cs_new_protected:Npn \__chemmacros_ox_sign:n #1
{
\bool_lazy_and:nnT
- { \chemmacros_if_compatibility_p:nn {>=} {#1} }
- { \chemmacros_if_compatibility_p:nn {<} {#2} }
- {#3}
+ { \fp_compare_p:n { #1 > 0 } }
+ { \l__chemmacros_ox_explicit_sign_bool }
+ { \c_math_toggle_token + \c_math_toggle_token }
+ \bool_lazy_all:nT
+ {
+ { \fp_compare_p:n { #1 = 0 } }
+ { \l__chemmacros_ox_explicit_sign_bool }
+ { \l__chemmacros_ox_explicit_zero_sign_bool }
+ }
+ { \c_math_toggle_token \pm \c_math_toggle_token }
+ \fp_compare:nT { #1 < 0 }
+ { \c_math_toggle_token - \c_math_toggle_token }
+ }
+
+\cs_new_protected:Npn \__chemmacros_ox_value:n #1
+ {
+ \fp_set:Nn \l__chemmacros_ox_number_fp { abs(#1) }
+ \__chemmacros_ox_is_integer:n { \l__chemmacros_ox_number_fp }
+ \bool_if:NTF \l__chemmacros_ox_format_roman_bool
+ { \__chemmacros_fp_to_Roman:n { \l__chemmacros_ox_number_fp } }
+ {
+ \bool_if:NTF \l__chemmacros_ox_integer_bool
+ {
+ \c_math_toggle_token
+ \__chemmacros_fp_to_arabic:n { \l__chemmacros_ox_number_fp }
+ \c_math_toggle_token
+ }
+ {
+ \c_math_toggle_token
+ \fp_use:N \l__chemmacros_ox_number_fp
+ \c_math_toggle_token
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__chemmacros_ox_is_integer:n #1
+ {
+ \fp_compare:nNnTF {#1} = { round((#1) + 1 , 0 ) - 1 }
+ { \bool_set_true:N \l__chemmacros_ox_integer_bool }
+ {
+ \bool_set_false:N \l__chemmacros_ox_integer_bool
+ \bool_set_false:N \l__chemmacros_ox_format_roman_bool
+ }
+ }
+
+\cs_new_protected:Npn \__chemmacros_fp_to_Roman:n #1
+ {
+ \group_begin:
+ \fp_compare:nNnTF {#1} = { 0 }
+ {0}
+ { \int_to_Roman:n { \fp_to_int:n {#1} } }
+ \group_end:
+ }
+
+\cs_new_protected:Npn \__chemmacros_fp_to_arabic:n #1
+ {
+ \group_begin:
+ \bool_if:NTF \l__chemmacros_ox_decimal_marker_comma_bool
+ {
+ \tl_set:Nx \l__chemmacros_tmpa_tl { \fp_to_decimal:n {#1} }
+ \tl_replace_once:Nnn \l__chemmacros_tmpa_tl {.} { {,} }
+ \tl_use:N \l__chemmacros_tmpa_tl
+ }
+ { \fp_to_decimal:n {#1} }
+ \group_end:
+ }
+
+\tl_new:N \l__chemmacros_ox_side_connect_tl
+
+\cs_new_protected:Npn \__chemmacros_ox_write:nn #1#2
+ {
+ \tl_if_blank:nT {#1}
+ { \msg_error:nnn {chemmacros} {redox} {\ox} {oxidation~number~missing} }
+ \tl_if_blank:nT {#2}
+ { \msg_error:nnn {chemmacros} {redox} {\ox} {oxidation-atom~missing} }
+ \hbox_set:Nn \l__chemmacros_tmpa_box
+ {
+ \chemmacros_text:n
+ {
+ \__chemmacros_ox_format:n
+ { \relsize {-3} \__chemmacros_ox_process_number:n {#1} }
+ }
+ }
+ \hbox_set:Nn \l__chemmacros_tmpb_box { \chemmacros_chemformula:n {#2} }
+ \chemmacros_math:n
+ {
+ \bool_if:NT \l__chemmacros_ox_super_bool
+ {
+ \box_use:N \l__chemmacros_tmpb_box
+ \c_math_superscript_token { \box_use:N \l__chemmacros_tmpa_box }
+ }
+ \bool_if:NT \l__chemmacros_ox_side_bool
+ {
+ \chemmacros_text:n
+ {
+ \box_use:N \l__chemmacros_tmpb_box
+ \tl_use:N \l__chemmacros_ox_side_connect_tl
+ (
+ \__chemmacros_ox_format:n
+ { \__chemmacros_ox_process_number:n {#1} }
+ )
+ }
+ }
+ \bool_if:NT \l__chemmacros_ox_top_bool
+ {
+ \bool_if:NF \l__chemmacros_ox_align_center_bool
+ {
+ \hbox_set_to_wd:Nnn \l__chemmacros_tmpa_box
+ { \box_wd:N \l__chemmacros_tmpb_box }
+ { \rlap { \hbox_unpack:N \l__chemmacros_tmpa_box } \hfil }
+ }
+ \overset
+ {
+ \bool_if:NTF \l__chemmacros_ox_align_center_bool
+ { \clap }
+ { \use:n }
+ { \box_use:N \l__chemmacros_tmpa_box }
+ }
+ { \box_use:N \l__chemmacros_tmpb_box }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__chemmacros_ox_pos_top:
+ {
+ \bool_set_true:N \l__chemmacros_ox_top_bool
+ \bool_set_false:N \l__chemmacros_ox_super_bool
+ \bool_set_false:N \l__chemmacros_ox_side_bool
+ }
+
+\cs_new_protected:Npn \__chemmacros_ox_pos_super:
+ {
+ \bool_set_false:N \l__chemmacros_ox_top_bool
+ \bool_set_true:N \l__chemmacros_ox_super_bool
+ \bool_set_false:N \l__chemmacros_ox_side_bool
+ }
+
+\cs_new_protected:Npn \__chemmacros_ox_pos_side:
+ {
+ \bool_set_false:N \l__chemmacros_ox_top_bool
+ \bool_set_false:N \l__chemmacros_ox_super_bool
+ \bool_set_true:N \l__chemmacros_ox_side_bool
+ }
+
+\chemmacros_define_keys:nn {redox}
+ {
+ pos .choice: ,
+ pos / top .code:n = \__chemmacros_ox_pos_top: ,
+ pos / super .code:n = \__chemmacros_ox_pos_super: ,
+ pos / side .code:n = \__chemmacros_ox_pos_side: ,
+ pos .initial:n = super ,
+ side-connect .tl_set:N = \l__chemmacros_ox_side_connect_tl ,
+ side-connect .initial:n = \, ,
+ text-frac .code:n =
+ \cs_set_protected:Npn \chemmacros_ox_text_frac:nn ##1##2 {#1} ,
+ text-frac .initial:n = \chemfrac[text]{#1}{#2} ,
+ super-frac .code:n =
+ \cs_set_protected:Npn \chemmacros_ox_super_frac:nn ##1##2 {#1} ,
+ super-frac .initial:n = \chemfrac[superscript]{#1}{#2} ,
+ roman .bool_set:N = \l__chemmacros_ox_format_roman_bool ,
+ roman .default:n = true ,
+ roman .initial:n = true ,
+ parse .bool_set:N = \l__chemmacros_ox_parse_bool ,
+ parse .default:n = true ,
+ parse .initial:n = true ,
+ explicit-sign .bool_set:N = \l__chemmacros_ox_explicit_sign_bool ,
+ explicit-sign .default:n = true ,
+ decimal-marker .choice: ,
+ decimal-marker / comma .code:n =
+ { \bool_set_true:N \l__chemmacros_ox_decimal_marker_comma_bool } ,
+ decimal-marker / point .code:n =
+ { \bool_set_false:N \l__chemmacros_ox_decimal_marker_comma_bool } ,
+ decimal-marker .initial:n = point ,
+ align .choice: ,
+ align / center .code:n =
+ \bool_set_true:N \l__chemmacros_ox_align_center_bool ,
+ align / right .code:n =
+ \bool_set_false:N \l__chemmacros_ox_align_center_bool ,
+ align .initial:n = center ,
+ explicit-zero-sign .bool_set:N = \l__chemmacros_ox_explicit_zero_sign_bool ,
+ explicit-zero-sign .default:n = true ,
+ format .tl_set:N = \l__chemmacros_ox_format_tl
+ }
+
+
+% \ox[<keyval>]{<num>,<atom>}
+% \ox*[<keyval>]{<num>,<atom>} => always number on the top
+\cs_new_protected:Npn \chemmacros_ox:nnnn #1#2#3#4
+ {
+ \group_begin:
+ \chemmacros_set_keys:nn {redox} {#2}
+ \tl_if_blank:nF {#1} { \__chemmacros_ox_pos_top: }
+ \__chemmacros_ox_write:nn {#3} {#4}
+ \group_end:
+ }
+
+\NewDocumentCommand \ox { sO{}>{\SplitArgument{1}{,}}m }
+ {
+ \IfBooleanTF {#1}
+ { \chemmacros_ox:nnnn {#1} {#2} #3 }
+ { \chemmacros_ox:nnnn { } {#2} #3 }
+ }
+
+% ---------------------------------------------------------------------------
+% redox reactions
+\tl_new:N \l__chemmacros_redox_begin_tl
+\tl_new:N \l__chemmacros_redox_end_tl
+\tl_new:N \l__chemmacros_redox_tikz_tl
+\tl_new:N \l__chemmacros_redox_shift_tl
+\tl_new:N \l__chemmacros_redox_anchor_tl
+\tl_new:N \l__chemmacros_redox_side_tl
+
+\fp_new:N \l__chemmacros_redox_shift_fp
+
+\dim_new:N \l__chemmacros_redox_sep_dim
+\dim_new:N \l__chemmacros_redox_sep_default_dim
+\dim_set:Nn \l__chemmacros_redox_sep_default_dim {.2em}
+\dim_new:N \l__chemmacros_redox_dist_dim
+\dim_set:Nn \l__chemmacros_redox_dist_dim {.6em}
+
+% place and name nodes:
+% \OX{<name>,<atom>}
+\NewDocumentCommand \OX { >{\SplitArgument{1}{,}}m }
+ { \chemmacros_redox_partner:nn #1 }
+
+% TODO: add option to make `#2' be parsed as chem formula
+\cs_new_protected:Npn \chemmacros_redox_partner:nn #1#2
+ {
+ \legacy_if:nTF {measuring@}
+ {
+ \group_begin:
+ \tikz[baseline=(#1.base)] { \node [inner~sep=0pt] (#1) {#2} ; }
+ \group_end:
+ }
+ {
+ \tl_if_blank:nT {#1}
+ { \msg_error:nnnn {chemmacros} {redox} {\OX} {node~name~missing} }
+ \tl_if_blank:nT {#2}
+ { \msg_error:nnnn {chemmacros} {redox} {\OX} {atom~missing} }
+ \tikz[baseline=(#1.base),remember~picture]
+ { \node [inner~sep=0pt] (#1) {#2} ; }
+ }
+ }
+
+\cs_new_protected:Npn \__chemmacros_redox_coordinates:nn #1#2
+ {
+ \tl_set:Nn \l__chemmacros_redox_begin_tl {#1}
+ \tl_set:Nn \l__chemmacros_redox_end_tl {#2}
+ }
+
+\cs_new_protected:Npn \chemmacros_redox:nnnnn #1#2#3#4#5
+ {
+ \tl_clear:N \l__chemmacros_redox_begin_tl
+ \tl_clear:N \l__chemmacros_redox_end_tl
+ \tl_clear:N \l__chemmacros_redox_tikz_tl
+ \__chemmacros_redox_coordinates:nn {#1} {#2}
+ \tl_if_blank:nF {#3}
+ { \tl_set:Nn \l__chemmacros_redox_tikz_tl {#3} }
+ \tl_if_blank:nTF {#4}
+ {
+ \fp_set:Nn \l__chemmacros_redox_shift_fp {1}
+ \tl_set:Nn \l__chemmacros_redox_anchor_tl {above}
+ \tl_set:Nn \l__chemmacros_redox_side_tl {north}
+ \dim_set_eq:NN
+ \l__chemmacros_redox_sep_dim
+ \l__chemmacros_redox_sep_default_dim
+ }
+ {
+ \fp_compare:nNnTF {#4} < {0}
+ {
+ \tl_set:Nn \l__chemmacros_redox_anchor_tl {below}
+ \tl_set:Nn \l__chemmacros_redox_side_tl {south}
+ \exp_args:NNo \dim_set:Nn \l__chemmacros_redox_sep_dim
+ { - \l__chemmacros_redox_sep_default_dim }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_redox_anchor_tl {above}
+ \tl_set:Nn \l__chemmacros_redox_side_tl {north}
+ \dim_set_eq:NN
+ \l__chemmacros_redox_sep_dim
+ \l__chemmacros_redox_sep_default_dim
+ }
+ \fp_set:Nn \l__chemmacros_redox_shift_fp {#4}
+ }
+ \tl_set:Nx \l__chemmacros_redox_shift_tl
+ { \fp_to_decimal:N \l__chemmacros_redox_shift_fp }
+ \tikz[remember~picture,overlay]
+ {
+ \chemmacros_tikz_draw:x { \exp_not:V \l__chemmacros_redox_tikz_tl }
+ ($
+ (\l__chemmacros_redox_begin_tl .
+ \l__chemmacros_redox_side_tl)+(0,\l__chemmacros_redox_sep_dim)
+ $)
+ --
+ ++(0,\l__chemmacros_redox_shift_tl * \l__chemmacros_redox_dist_dim) -|
+ node [pos=.25,\l__chemmacros_redox_anchor_tl] { {#5} }
+ ($
+ (\l__chemmacros_redox_end_tl .
+ \l__chemmacros_redox_side_tl)+(0,\l__chemmacros_redox_sep_dim)
+ $) ;
+ }
+ }
+
+\NewDocumentCommand \redox { >{\SplitArgument{1}{,}}r()oom }
+ {
+ \IfNoValueT {#1}
+ {
+ \msg_error:nnnn {chemmacros} {redox} {\redox}
+ {You~need~to~specify~coordinates}
+ }
+ \IfNoValueTF {#2}
+ { \chemmacros_redox:nnnnn #1 { } { } {#4} }
+ {
+ \IfNoValueTF {#3}
+ { \chemmacros_redox:nnnnn #1 {#2} { } {#4} }
+ { \chemmacros_redox:nnnnn #1 {#2} {#3} {#4} }
+ }
+ }
+
+% redox-keys
+\chemmacros_define_keys:nn {redox}
+ {
+ dist .dim_set:N = \l__chemmacros_redox_dist_dim ,
+ dist .initial:n = {.6em} ,
+ sep .dim_set:N = \l__chemmacros_redox_sep_default_dim ,
+ sep .initial:n = {.2em}
+ }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{xfrac}{2020/11/29 use xfrac package with chemmacros}
+
+\RequirePackage{xfrac}
+
+% --------------------------------------------------------------------------
+
+% #1: type
+% #2: numerator
+% #3: denominator
+\cs_new_protected:Npn \chemmacros_frac:nnn #1#2#3
+ {
+ \IfInstanceExistTF {xfrac} {chemmacros-frac-\f@family-#1}
+ { \sfrac [chemmacros-frac-\f@family-#1] {#2} {#3} }
+ { \sfrac [chemmacros-frac-default-#1]{#2} {#3} }
+ }
+
+\NewDocumentCommand \chemfrac {O{text}mm}
+ { \chemmacros_frac:nnn {#1} {#2} {#3} }
+
+% --------------------------------------------------------------------------
+
+% default:
+\DeclareInstance {xfrac} {chemmacros-frac-cmr-superscript} {text}
+ {
+ numerator-top-sep = -.1ex ,
+ slash-left-kern = -.2em ,
+ slash-right-kern = -.2em ,
+ slash-symbol-font = cmr
+ }
+
+\DeclareInstance {xfrac} {chemmacros-frac-cmr-text} {text}
+ {
+ numerator-top-sep = 0ex ,
+ slash-left-kern = -.2em ,
+ slash-right-kern = -.2em ,
+ slash-symbol-font = cmr
+ }
+
+% computer modern (same as default):
+\DeclareInstance {xfrac} {chemmacros-frac-cmr-superscript} {text}
+ {
+ numerator-top-sep = -.1ex ,
+ slash-left-kern = -.2em ,
+ slash-right-kern = -.2em ,
+ slash-symbol-font = cmr
+ }
+
+\DeclareInstance {xfrac} {chemmacros-frac-cmr-text} {text}
+ {
+ numerator-top-sep = 0ex ,
+ slash-left-kern = -.2em ,
+ slash-right-kern = -.2em ,
+ slash-symbol-font = cmr
+ }
+
+% Linux Libertine T lining:
+\DeclareInstance {xfrac} {chemmacros-frac-LinuxLibertineT-TLF-text} {text}
+ {
+ numerator-top-sep = 0ex ,
+ slash-left-kern = 0em ,
+ slash-right-kern = .05em ,
+ slash-symbol-font = LinuxLibertineT-TLF
+ }
+
+\DeclareInstance {xfrac} {chemmacros-frac-LinuxLibertineT-TLF-superscript} {text}
+ {
+ scale-factor = 1.2 ,
+ denominator-bot-sep = -.1ex ,
+ numerator-top-sep = -.1ex ,
+ slash-left-kern = .1em ,
+ slash-right-kern = .1em ,
+ slash-symbol-font = LinuxLibertineT-TLF
+ }
+
+% Linux Libertine T oldstyle:
+\DeclareInstance {xfrac} {chemmacros-frac-LinuxLibertineT-TOsF-text} {text}
+ {
+ denominator-bot-sep = .1ex ,
+ numerator-top-sep = -.2ex ,
+ slash-left-kern = 0em ,
+ slash-right-kern = 0em ,
+ slash-symbol-font = LinuxLibertineT-TOsF
+ }
+
+\DeclareInstance {xfrac} {chemmacros-frac-LinuxLibertineT-TOsF-superscript} {text}
+ {
+ scale-factor = 1.2 ,
+ denominator-bot-sep = -.1ex ,
+ numerator-top-sep = -.2ex ,
+ slash-left-kern = 0em ,
+ slash-right-kern = .1em ,
+ slash-symbol-font = LinuxLibertineT-TOsF
+ }
+
+% lmodern:
+\DeclareInstance {xfrac} {chemmacros-frac-lmr-superscript} {text}
+ {
+ slash-left-kern = -.2em ,
+ slash-right-kern = -.2em ,
+ slash-symbol-font = lmr
+ }
+
+\DeclareInstance {xfrac} {chemmacros-frac-lmr-text} {text}
+ {
+ slash-left-kern = -.2em ,
+ slash-right-kern = -.2em ,
+ slash-symbol-font = lmr
+ }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{scheme}{2022/01/13 a scheme floating environment}
+
+\RequirePackage {chemnum}
+\RequirePackage {etoolbox}
+
+\msg_new:nnn {chemmacros} {patch-failed}
+ {
+ Patching~ \token_to_str:N #1 \c_space_tl failed.~
+ Please~ inform~ the~ chemmacros~ package~ authors.
+ }
+
+\bool_new:N \l__chemmacros_float_def_bool
+\tl_new:N \l__chemmacros_float_method_tl
+\seq_new:N \l__chemmacros_float_methods_seq
+\prop_new:N \l__chemmacros_float_methods_prop
+\prop_new:N \l__chemmacros_float_definitions_prop
+
+\msg_new:nnn {chemmacros} {float-method}
+ { Detected~ float~ defining~ method~ `#1'. }
+
+% --------------------------------------------------------------------------
+% #1: name
+% #2: check
+\cs_new_protected:Npn \chemmacros_define_float_method:nnn #1#2#3
+ {
+ \seq_put_right:Nn \l__chemmacros_float_methods_seq {#1}
+ \prop_put:Nnn \l__chemmacros_float_methods_prop {#1} {#2}
+ \prop_put:Nnn \l__chemmacros_float_definitions_prop {#1}
+ { \cs_set_protected:Npn \__chemmacros_define_float:nn ##1##2 {#3} }
+ }
+
+% the order in which the methods are defined determines in which order the
+% methods will be checked at begin document:
+\chemmacros_define_float_method:nnn {KOMA}
+ { \cs_if_exist_p:N \KOMAClassName }
+ {
+ \bool_lazy_or:nnTF
+ { \chemmacros_if_class_loaded_p:n {scrbook} }
+ { \chemmacros_if_class_loaded_p:n {scrreprt} }
+ { \DeclareNewTOC[ counterwithin = chapter, }
+ { \DeclareNewTOC[ }
+ type = #1 ,
+ types = #1s ,
+ float ,
+ tocentryindent = 1.5em ,
+ tocentrynumwidth = 2.3em ,
+ name = \chemmacros_translate:n {#1-name} ,
+ listname = { \exp_not:N \chemmacros_translate:n {#1-list} }
+ ]{#2}
+ }
+
+\chemmacros_define_float_method:nnn {memoir}
+ { \chemmacros_if_class_loaded_p:n {memoir} }
+ {
+ \newfloat [chapter] {#1} {#2} {\chemmacros_translate:n {#1-name}}
+ \cs_set:cpn {the#1} {\thechapter.\arabic {#1}}
+ \newlistof {listof#1s} {#2} {\chemmacros_translate:n {#1-list}}
+ \newlistentry [chapter] {#1} {#2} {0}
+ \cftsetindents {#1} {0em} {2.3em}
+ \tl_put_right:Nn \@memfront@floats
+ { \counterwithout {#1} {chapter} }
+ \tl_put_right:Nn \@memmain@floats
+ { \counterwithin {#1} {chapter} }
+ \tl_put_right:Nn \@memback@floats
+ {
+ \counterwithin {#1} {chapter}
+ \setcounter {#1} {0}
+ }
+ \legacy_if:nT {artopt}
+ { \counterwithout {#1} {chapter} }
+ \apptocmd \insertchapterspace
+ { \addtocontents {#2} { \protect \addvspace {10pt} } }
+ {}
+ {}
+ }
+
+\chemmacros_define_float_method:nnn {tocbasic}
+ { \chemmacros_if_package_loaded_p:n {tocbasic} }
+ {
+ \DeclareNewTOC[
+ type = #1 ,
+ types = #1s ,
+ float ,
+ name = \chemmacros_translate:n {#1-name} ,
+ listname = {\exp_not:N \chemmacros_translate:n {#1-list}}
+ ]{#2}
+ }
+
+\chemmacros_define_float_method:nnn {newfloat}
+ { \chemmacros_if_package_loaded_p:n {newfloat} }
+ {
+ \DeclareFloatingEnvironment[{
+ fileext = #2 ,
+ listname = {\exp_not:N \chemmacros_translate:n {#1-list}} ,
+ name = \chemmacros_translate:n {#1-name}
+ }]{#1}
+ }
+
+\chemmacros_define_float_method:nnn {floatrow}
+ { \chemmacros_if_package_loaded_p:n {floatrow} }
+ {
+ \DeclareNewFloatType{#1}{%
+ fileext = #2,
+ placement = htp,
+ name = \chemmacros_translate:n {#1-name}
+ }
+ \cs_new_protected:cpn {listof#1s}
+ { \listof {#1} {\chemmacros_translate:n {#1-list}} }
+ }
+
+\chemmacros_define_float_method:nnn {float}
+ { \chemmacros_if_package_loaded_p:n {float} }
+ {
+ \newfloat {#1} {htp} {#2}
+ \floatname {#1} {\chemmacros_translate:n {#1-name}}
+ \cs_new_protected:cpn {listof#1s}
+ { \listof {#1} {\chemmacros_translate:n {#1-list}} }
+ }
+
+% --------------------------------------------------------------------------
+% checks if one of the above defined methods is active. The first one found
+% will be used.
+\cs_new_protected:Npn \chemmacros_check_float_method:n #1
+ {
+ \prop_get:NnNT \l__chemmacros_float_methods_prop {#1}
+ \l__chemmacros_tmpa_tl
+ {
+ \bool_lazy_and:nnT
+ { !\l__chemmacros_float_def_bool }
+ { \l__chemmacros_tmpa_tl }
+ {
+ \bool_set_true:N \l__chemmacros_float_def_bool
+ \tl_set:Nn \l__chemmacros_float_method_tl {#1}
+ \msg_info:nnn {chemmacros} {float-method} {#1}
+ }
+ }
+ }
+
+\cs_new_protected:Npn \chemmacros_check_float_methods:
+ {
+ \seq_map_function:NN
+ \l__chemmacros_float_methods_seq
+ \chemmacros_check_float_method:n
+ }
+
+\hook_gput_code:nnn {begindocument/before} {chemmacros}
+ {
+ \chemmacros_if_package_loaded:nF {chemscheme}
+ {
+ \chemmacros_check_float_methods:
+ \chemmacros_define_float:nn {scheme} {los}
+ }
+ }
+
+% --------------------------------------------------------------------------
+\ChemCleverefSupport {scheme}
+ { \chemmacros_translate:n {scheme} }
+ [ \chemmacros_translate:n {Scheme} ]
+ { \chemmacros_translate:n {schemes} }
+ [ \chemmacros_translate:n {Schemes} ]
+
+\ChemFancyrefSupport {sch}
+ { \chemmacros_translate:n {scheme} }
+ [ \chemmacros_translate:n {Scheme} ]
+
+% --------------------------------------------------------------------------
+% #1: env name
+\cs_new_protected:Npn \chemmacros_define_float:nn #1#2
+ {
+ \bool_lazy_and:nnT
+ { !\cs_if_exist_p:c {#1} }
+ { !\cs_if_exist_p:c {end#1} }
+ {
+ \bool_if:NTF \l__chemmacros_float_def_bool
+ {
+ \prop_get:NVN \l__chemmacros_float_definitions_prop
+ \l__chemmacros_float_method_tl
+ \l__chemmacros_tmpa_tl
+ \tl_use:N \l__chemmacros_tmpa_tl
+ \__chemmacros_define_float:nn {#1} {#2}
+ }
+ {
+ \bool_lazy_or:nnTF
+ { \chemmacros_if_class_loaded_p:n {book} }
+ { \chemmacros_if_class_loaded_p:n {report} }
+ {
+ \newcounter {#1} [chapter]
+ \cs_set:cpn {the#1}
+ { \ifnum \c@chapter>\z@ \thechapter.\fi \arabic {#1} }
+ }
+ {
+ \newcounter {#1}
+ \cs_set:cpn {the#1} { \arabic {#1} }
+ }
+ \cs_new:cpn {fps@#1} {tbp}
+ \cs_new:cpn {ftype@#1} {8}
+ \cs_new:cpn {ext@#1} {#2}
+ \cs_new:cpx {fnum@#1} {
+ \exp_not:c {#1name}
+ \exp_not:N \nobreakspace
+ \exp_not:c {the#1}}
+ \cs_new:cpn {#1name} {\chemmacros_translate:n {#1-name}}
+ \cs_new:cpn {list#1name} {\chemmacros_translate:n {#1-list}}
+ \newenvironment {#1}
+ {\@float{#1}}
+ {\end@float}
+ \newenvironment {#1*}
+ {\@dblfloat{#1}}
+ {\end@dblfloat}
+ \bool_lazy_or:nnTF
+ { \chemmacros_if_class_loaded_p:n {book} }
+ { \chemmacros_if_class_loaded_p:n {report} }
+ {
+ \cs_new_protected:cpn {listof#1s}
+ {
+ \legacy_if:nTF {@twocolumn}
+ { \@restonecoltrue\onecolumn }
+ { \@restonecolfalse }
+ \chapter* { \use:c {list#1name} }
+ \use:x
+ {
+ \exp_not:N \@mkboth
+ { \exp_not:N \MakeUppercase \exp_not:c {list#1name} }
+ { \exp_not:N \MakeUppercase \exp_not:c {list#1name} }
+ }
+ \@starttoc {#2}
+ \legacy_if:nT {@restonecol} { \twocolumn }
+ }
+ \patchcmd \@chapter
+ { \addtocontents }
+ { \addtocontents {#2} { \protect \addvspace {10\p@} } \addtocontents }
+ {}
+ { \msg_warning:nnn {chemmacros} {patch-failed} { \@chapter } }
+ }
+ {
+ \cs_new_protected:cpn {listof#1s}
+ {
+ \section* {\use:c {list#1name}}
+ \use:x
+ {
+ \exp_not:N \@mkboth
+ { \exp_not:N \MakeUppercase \exp_not:c {list#1name} }
+ { \exp_not:N \MakeUppercase \exp_not:c {list#1name} }
+ }
+ \@starttoc {#2}
+ }
+ }
+ \cs_new_eq:cN {l@#1} \l@figure
+ }
+ }
+ \cs_set:cpn {#1name} {\chemmacros_translate:n {#1-name}}
+ \cs_set:cpn {list#1name} {\chemmacros_translate:n {#1-list}}
+ }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{spectroscopy}{2021/07/24 environment for spectroscopic data}
+
+\RequirePackage{siunitx}
+
+% spectroscopy
+\tl_new:N \g__chemmacros_nmr_isotope_tl
+\tl_new:N \l__chemmacros_nmr_isotope_default_tl
+\tl_set:Nn \l__chemmacros_nmr_isotope_default_tl { 1 }
+\tl_new:N \l__chemmacros_nmr_coupling_nuclei_tl
+\tl_new:N \l__chemmacros_nmr_coupling_nuclei_pre_tl
+\tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_pre_tl { ( }
+\tl_new:N \l__chemmacros_nmr_coupling_nuclei_post_tl
+\tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_post_tl { ) }
+\tl_new:N \l__chemmacros_nmr_coupling_bonds_tl
+\tl_new:N \l__chemmacros_nmr_coupling_bonds_pre_tl
+\tl_new:N \l__chemmacros_nmr_coupling_bonds_post_tl
+\tl_set:Nn \l__chemmacros_nmr_coupling_bonds_pre_tl { }
+\tl_set:Nn \l__chemmacros_nmr_coupling_bonds_post_tl { \! }
+\tl_new:N \l__chemmacros_nmr_coupling_symbol_tl
+\tl_set:Nn \l__chemmacros_nmr_coupling_symbol_tl { J }
+\tl_new:N \g__chemmacros_nmr_element_coupled_tl
+\tl_new:N \g__chemmacros_nmr_element_tl
+\tl_new:N \l__chemmacros_nmr_element_default_tl
+\tl_set:Nn \l__chemmacros_nmr_element_default_tl { H }
+\tl_new:N \l__chemmacros_nmr_format_tl
+\tl_new:N \l__chemmacros_nmr_delta_tl
+\tl_new:N \l__chemmacros_nmr_coupling_unit_tl
+\tl_set:Nn \l__chemmacros_nmr_coupling_unit_tl { \hertz }
+\tl_new:N \l__chemmacros_nmr_unit_tl
+\tl_set:Nn \l__chemmacros_nmr_unit_tl { \mega\hertz }
+\tl_new:N \l__chemmacros_nmr_list_setup_tl
+\tl_set:Nn \l__chemmacros_nmr_list_setup_tl
+ {
+ \topsep\z@skip \partopsep\z@skip
+ \itemsep\z@ \parsep\z@ \itemindent\z@
+ \leftmargin\z@
+ }
+\tl_new:N \l__chemmacros_nmr_position_tl
+\tl_new:N \l__chemmacros_nmr_element_method_connector_tl
+\tl_set:Nn \l__chemmacros_nmr_element_method_connector_tl {-}
+\tl_new:N \l__chemmacros_nmr_method_tl
+\tl_set:Nn \l__chemmacros_nmr_method_tl {NMR}
+
+\bool_new:N \l__chemmacros_nmr_coupling_nuclei_sub_bool
+\bool_new:N \l__chemmacros_nmr_frequency_bool
+\bool_new:N \l__chemmacros_nmr_solvent_bool
+\bool_new:N \l__chemmacros_nmr_delimiters_bool
+\bool_new:N \l__chemmacros_nmr_comma_bool
+\bool_new:N \l__chemmacros_nmr_inner_bool
+\bool_new:N \l__chemmacros_nmr_position_side_bool
+\bool_new:N \l__chemmacros_nmr_parse_bool
+\bool_set_true:N \l__chemmacros_nmr_parse_bool
+\bool_new:N \l__chemmacros_nmr_list_bool
+\bool_new:N \l__chemmacros_nmr_use_equal_bool
+\bool_new:N \l__chemmacros_nmr_custom_command_active_bool
+\bool_new:N \l__chemmacros_nmr_custom_command_used_bool
+
+\skip_new:N \l__chemmacros_nmr_space_skip
+\skip_set:Nn \l__chemmacros_nmr_space_skip { .16667em }
+
+\cs_new_protected:Npn \__chemmacros_nmr_nucleus:nn #1#2
+ {
+ \tl_gset:Nn \g__chemmacros_nmr_isotope_tl {#1}
+ \tl_if_in:nnTF {#2} {[} % ]
+ { \__chemmacros_nmr_element:w #2 \q_stop }
+ {
+ \tl_gset:No \g__chemmacros_nmr_element_tl {#2}
+ \tl_gclear:N \g__chemmacros_nmr_element_coupled_tl
+ }
+ }
+\cs_generate_variant:Nn \__chemmacros_nmr_nucleus:nn { VV }
+
+\cs_new_protected:Npn \__chemmacros_nmr_nucleus:w #1,#2 \q_stop
+ {
+ \tl_gset:Nn \g__chemmacros_nmr_isotope_tl {#1}
+ \tl_if_in:nnTF {#2} {[} % ]
+ { \__chemmacros_nmr_element:w #2 \q_stop }
+ {
+ \tl_gset:No \g__chemmacros_nmr_element_tl {#2}
+ \tl_gclear:N \g__chemmacros_nmr_element_coupled_tl
+ }
+ }
+
+\cs_new_protected:Npn \__chemmacros_nmr_element:w #1[#2] \q_stop
+ {
+ \tl_gset:Nn \g__chemmacros_nmr_element_tl {#1}
+ \tl_gset:Nn \g__chemmacros_nmr_element_coupled_tl {#2}
+ }
+
+\cs_new_protected:Npn \__chemmacros_nmr_default_nucleus:w #1,#2 \q_stop
+ {
+ \tl_set:Nn \l__chemmacros_nmr_isotope_default_tl {#1}
+ \tl_set:Nn \l__chemmacros_nmr_element_default_tl {#2}
+ }
+
+\tl_new:N \l__chemmacros_nmr_base_format_tl
+
+\chemmacros_define_keys:nn {spectroscopy}
+ { nmr-base-format .tl_set:N = \l__chemmacros_nmr_base_format_tl }
+
+\cs_new_protected:Npn \__chemmacros_nmr_base:nn #1#2
+ {
+ \group_begin:
+ \tl_use:N \l__chemmacros_nmr_base_format_tl
+ \tl_if_blank:VF \g__chemmacros_nmr_element_coupled_tl
+ {
+ \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl { \{ }
+ \tl_put_right:Nn \g__chemmacros_nmr_element_coupled_tl { \} }
+ }
+ \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl {#2}
+ \chemmacros_chemformula:n { ^{#1} }
+ \tl_if_blank:VF \g__chemmacros_nmr_element_coupled_tl
+ {
+ \bool_if:NTF \l__chemmacros_nmr_parse_bool
+ { \chemmacros_chemformula:V \g__chemmacros_nmr_element_coupled_tl }
+ { \g__chemmacros_nmr_element_coupled_tl }
+ }
+ \tl_use:N \l__chemmacros_nmr_element_method_connector_tl
+ \tl_use:N \l__chemmacros_nmr_method_tl
+ \group_end:
+ }
+
+\cs_generate_variant:Nn \__chemmacros_nmr_base:nn { VV }
+
+\cs_new_protected:Npn \__chemmacros_nmr_frequency:n #1
+ {
+ \tl_if_in:nnTF {#1} {,}
+ { \__chemmacros_nmr_frequency_aux_i:w #1 \q_stop }
+ { \__chemmacros_nmr_frequency_aux_ii:n {#1} }
+ }
+
+\cs_new_protected:Npn \__chemmacros_nmr_frequency_aux_i:w #1,#2 \q_stop
+ { \SI {#1} {#2} }
+
+\cs_new_protected:Npn \__chemmacros_nmr_frequency_aux_ii:n #1
+ { \SI {#1} { \tl_use:N \l__chemmacros_nmr_unit_tl } }
+
+\cs_new_eq:NN \__chemmacros_nmr_number:n \use:n
+\cs_new_eq:NN \__chemmacros_nmr_position:n \use:n
+
+\chemmacros_define_keys:nn {spectroscopy}
+ {
+ unit .tl_set:N = \l__chemmacros_nmr_unit_tl ,
+ unit .default:n = \mega\hertz ,
+ nucleus .code:n =
+ { \__chemmacros_nmr_default_nucleus:w #1 \q_stop } ,
+ nucleus .default:n = {1,H} ,
+ format .tl_set:N = \l__chemmacros_nmr_format_tl ,
+ method .tl_set:N = \l__chemmacros_nmr_method_tl ,
+ connector .tl_set:N = \l__chemmacros_nmr_element_method_connector_tl ,
+ pos-number .choice: ,
+ pos-number / sub .code:n =
+ \tl_set:Nn \l__chemmacros_nmr_position_tl {_}
+ \bool_set_false:N \l__chemmacros_nmr_position_side_bool ,
+ pos-number / super .code:n =
+ \tl_set:Nn \l__chemmacros_nmr_position_tl {^}
+ \bool_set_false:N \l__chemmacros_nmr_position_side_bool ,
+ pos-number / side .code:n =
+ \tl_set:Nn \l__chemmacros_nmr_position_tl {-}
+ \bool_set_true:N \l__chemmacros_nmr_position_side_bool ,
+ pos-number / .initial:n = side ,
+ coupling-unit .tl_set:N = \l__chemmacros_nmr_coupling_unit_tl ,
+ coupling-pos .choice: ,
+ coupling-pos / sub .code:n =
+ \bool_set_true:N \l__chemmacros_nmr_coupling_nuclei_sub_bool ,
+ coupling-pos / side .code:n =
+ \bool_set_false:N \l__chemmacros_nmr_coupling_nuclei_sub_bool ,
+ coupling-nuclei-pre .tl_set:N =
+ \l__chemmacros_nmr_coupling_nuclei_pre_tl ,
+ coupling-nuclei-post .tl_set:N =
+ \l__chemmacros_nmr_coupling_nuclei_post_tl ,
+ coupling-bonds-pre .tl_set:N =
+ \l__chemmacros_nmr_coupling_bonds_pre_tl ,
+ coupling-bonds-post .tl_set:N =
+ \l__chemmacros_nmr_coupling_bonds_post_tl ,
+ coupling-symbol .tl_set:N =
+ \l__chemmacros_nmr_coupling_symbol_tl ,
+ atom-number-cs .code:n =
+ \cs_set_eq:NN \__chemmacros_nmr_number:n #1 ,
+ atom-number-space .skip_set:N = \l__chemmacros_nmr_space_skip ,
+ coupling-pos-cs .code:n =
+ \cs_set_eq:NN \__chemmacros_nmr_position:n #1 ,
+ parse .bool_set:N = \l__chemmacros_nmr_parse_bool ,
+ delta .code:n =
+ \tl_set:Nn \l__chemmacros_nmr_delta_tl {\,#1} ,
+ list .bool_set:N = \l__chemmacros_nmr_list_bool ,
+ list .default:n = true ,
+ list-setup .tl_set:N = \l__chemmacros_nmr_list_setup_tl ,
+ use-equal .bool_set:N = \l__chemmacros_nmr_use_equal_bool ,
+ use-equal .default:n = true
+ }
+
+\cs_new_protected:Npn \chemmacros_define_nmr:Nn #1#2
+ {
+ \cs_if_exist:NTF #1
+ {
+ \RenewDocumentCommand #1 {s}
+ { \IfBooleanTF {##1} { \NMR*{#2} } { \NMR{#2} } }
+ }
+ {
+ \NewDocumentCommand #1 {s}
+ { \IfBooleanTF {##1} { \NMR*{#2} } { \NMR{#2} } }
+ }
+ }
+
+\NewChemMacroset {NMR} {mm}
+ { \chemmacros_define_nmr:Nn #1 {#2} }
+
+\NewDocumentCommand \NMR { sG{}D(){}O{} }
+ {
+ \IfBooleanTF {#1}
+ { \chemmacros_nmr:nnnn {*} {#2} {#3} {#4} }
+ { \chemmacros_nmr:nnnn { } {#2} {#3} {#4} }
+ }
+
+\hook_gput_code:nnn {begindocument} {chemmacros}
+ {
+ % \NMR{<num>,<elem>}(<num>,<unit>)[<solvent>] ALL arguments are optional
+ % \NMR* same but without ": $\delta$" at end
+ \cs_new_protected:Npn \chemmacros_nmr:nnnn #1#2#3#4
+ {
+ \bool_if:NT \l__chemmacros_nmr_list_bool { \item \scan_stop: }
+ \group_begin:
+ \mode_leave_vertical:
+ \bool_set_false:N \l__chemmacros_nmr_frequency_bool
+ \bool_set_false:N \l__chemmacros_nmr_solvent_bool
+ \tl_if_empty:nF {#3}
+ { \bool_set_true:N \l__chemmacros_nmr_frequency_bool }
+ \tl_if_empty:nF {#4}
+ { \bool_set_true:N \l__chemmacros_nmr_solvent_bool }
+ \bool_lazy_or:nnT
+ { \l__chemmacros_nmr_frequency_bool }
+ { \l__chemmacros_nmr_solvent_bool }
+ { \bool_set_true:N \l__chemmacros_nmr_delimiters_bool }
+ \bool_lazy_and:nnT
+ { \l__chemmacros_nmr_frequency_bool }
+ { \l__chemmacros_nmr_solvent_bool }
+ { \bool_set_true:N \l__chemmacros_nmr_comma_bool }
+ \tl_if_empty:nTF {#2}
+ {
+ \__chemmacros_nmr_nucleus:VV
+ \l__chemmacros_nmr_isotope_default_tl
+ \l__chemmacros_nmr_element_default_tl
+ }
+ { \__chemmacros_nmr_nucleus:w #2 \q_stop }
+ \mode_if_math:TF
+ {
+ \text
+ {
+ \group_begin:
+ \tl_use:N \l__chemmacros_nmr_format_tl
+ \__chemmacros_nmr_base:VV
+ \g__chemmacros_nmr_isotope_tl
+ \g__chemmacros_nmr_element_tl
+ \bool_if:NT \l__chemmacros_nmr_delimiters_bool
+ { ~ ( }
+ \bool_if:NT \l__chemmacros_nmr_frequency_bool
+ { \__chemmacros_nmr_frequency:n {#3} }
+ \bool_if:NT \l__chemmacros_nmr_comma_bool
+ { , ~ }
+ \bool_if:NT \l__chemmacros_nmr_solvent_bool
+ { \chemmacros_chemformula:n {#4} }
+ \bool_if:NT \l__chemmacros_nmr_delimiters_bool
+ { ) }
+ \tl_if_blank:nT {#1} {:~}
+ \group_end:
+ }
+ \tl_if_blank:nT {#1}
+ {
+ \delta
+ \text { \l__chemmacros_nmr_delta_tl }
+ \bool_if:NT \l__chemmacros_nmr_use_equal_bool {=}
+ }
+ }
+ {
+ \group_begin:
+ \tl_use:N \l__chemmacros_nmr_format_tl
+ \__chemmacros_nmr_base:VV
+ \g__chemmacros_nmr_isotope_tl
+ \g__chemmacros_nmr_element_tl
+ \bool_if:NT \l__chemmacros_nmr_delimiters_bool
+ {~(}
+ \bool_if:NT \l__chemmacros_nmr_frequency_bool
+ { \__chemmacros_nmr_frequency:n {#3} }
+ \bool_if:NT \l__chemmacros_nmr_comma_bool
+ {,~}
+ \bool_if:NT \l__chemmacros_nmr_solvent_bool
+ {
+ \bool_if:NTF \l__chemmacros_nmr_parse_bool
+ { \chemmacros_chemformula:n {#4} }
+ {#4}
+ }
+ \bool_if:NT \l__chemmacros_nmr_delimiters_bool
+ {)}
+ \tl_if_blank:nT {#1} {:}
+ \group_end:
+ \tl_if_blank:nT {#1}
+ {
+ \tl_use:N \c_space_tl
+ \c_math_toggle_token
+ \delta
+ \c_math_toggle_token
+ \l__chemmacros_nmr_delta_tl
+ \bool_if:NT \l__chemmacros_nmr_use_equal_bool {~=}
+ }
+ }
+ \group_end:
+ }
+ }
+
+\NewDocumentCommand \chemmacros_data:w { smo }
+ {
+ \bool_if:NT \l__chemmacros_nmr_list_bool { \item }
+ {
+ \tl_use:N \l__chemmacros_nmr_format_tl #2
+ \IfNoValueF {#3} { ~ ( #3 ) }
+ \IfBooleanT {#1} { \bool_if:NT \l__chemmacros_nmr_use_equal_bool { : } }
+ }
+ \IfBooleanF {#1} { \bool_if:NT \l__chemmacros_nmr_use_equal_bool { ~ = } }
+ }
+
+\cs_new_protected:Npn \chemmacros_val:n #1
+ {
+ \tl_if_in:nnTF {#1} {--}
+ { \chemmacros_val_aux:w #1 \q_nil }
+ { \num {#1} }
+ }
+
+\cs_new_protected:Npn \chemmacros_val_aux:w #1--#2 \q_nil
+ { \numrange {#1} {#2} }
+
+\NewDocumentEnvironment {experimental} {o}
+ {
+ \group_begin:
+ \IfNoValueF {#1} { \chemmacros_set_keys:nn {spectroscopy} {#1} }
+ \bool_set_true:N \l__chemmacros_nmr_inner_bool
+ \cs_set_eq:NN \# \chemmacros_nmr_number:n
+ \cs_set_eq:NN \pos \chemmacros_nmr_position:n
+ \cs_set_eq:NN \J \chemmacros_nmr_coupling:w
+ \cs_set_eq:NN \data \chemmacros_data:w
+ \cs_set_eq:NN \val \chemmacros_val:n
+ \bool_if:NT \l__chemmacros_nmr_list_bool
+ { \list {} { \l__chemmacros_nmr_list_setup_tl } }
+ }
+ {
+ \bool_if:NT \l__chemmacros_nmr_list_bool
+ { \endlist }
+ \group_end:
+ \chemmacros_ignore_spaces:
+ }
+
+\cs_new_protected:Npn \chemmacros_nmr_number:n #1
+ {
+ \__chemmacros_nmr_number:n {#1}
+ \chemmacros_skip_nobreak:N \l__chemmacros_nmr_space_skip
+ \chemmacros_chemformula:V \g__chemmacros_nmr_element_tl
+ }
+
+\cs_new_protected:Npn \chemmacros_nmr_position:n #1
+ {
+ \chemmacros_chemformula:x
+ {
+ \exp_not:V \g__chemmacros_nmr_element_tl
+ \bool_if:NF \l__chemmacros_nmr_position_side_bool
+ {
+ \exp_not:V \l__chemmacros_nmr_position_tl
+ \exp_not:n { _{#1} }
+ }
+ }
+ \bool_if:NT \l__chemmacros_nmr_position_side_bool
+ {
+ \tl_use:N \l__chemmacros_nmr_position_tl
+ \__chemmacros_nmr_position:n {#1}
+ }
+ }
+
+\cs_new_protected:Npn \chemmacros_nmr_coupling:w
+ {
+ \tl_clear:N \l__chemmacros_nmr_coupling_nuclei_tl
+ \tl_clear:N \l__chemmacros_nmr_coupling_bonds_tl
+ \peek_meaning:NTF (
+ { \__chemmacros_nmr_coupling:w }
+ { \__chemmacros_nmr_coupling_aux_i:w }
+ }
+
+\cs_new_protected:Npn \__chemmacros_nmr_coupling:w (#1;#2)
+ {
+ \tl_set:Nn \l__chemmacros_nmr_coupling_bonds_tl
+ {
+ \l__chemmacros_nmr_coupling_bonds_pre_tl
+ #1
+ \l__chemmacros_nmr_coupling_bonds_post_tl
+ }
+ \bool_if:NTF \l__chemmacros_nmr_coupling_nuclei_sub_bool
+ {
+ \tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_tl
+ {
+ \c_math_subscript_token
+ {
+ \l__chemmacros_nmr_coupling_nuclei_pre_tl
+ \chemmacros_chemformula:n {#2}
+ \l__chemmacros_nmr_coupling_nuclei_post_tl
+ }
+ }
+ }
+ {
+ \tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_tl
+ {
+ \l__chemmacros_nmr_coupling_nuclei_pre_tl
+ \chemmacros_chemformula:n {#2}
+ \l__chemmacros_nmr_coupling_nuclei_post_tl
+ }
+ }
+ \__chemmacros_nmr_coupling_aux_i:w
+ }
+
+\cs_new_protected:Npn \__chemmacros_nmr_coupling_aux_i:w
+ {
+ \peek_meaning:NTF [
+ { \__chemmacros_nmr_coupling_aux_ii:w }
+ { \__chemmacros_nmr_coupling_aux_iii:n }
+ }
+
+\cs_new_protected:Npn \__chemmacros_nmr_coupling_aux_ii:w [#1]#2
+ {
+ \group_begin:
+ \sisetup
+ {
+ list-final-separator={,~},
+ list-pair-separator={,~},
+ list-units=single
+ }
+ \c_math_toggle_token
+ ^{ \l__chemmacros_nmr_coupling_bonds_tl }
+ \l__chemmacros_nmr_coupling_symbol_tl
+ \l__chemmacros_nmr_coupling_nuclei_tl = \qtylist {#2} {#1}
+ \c_math_toggle_token
+ \group_end:
+ }
+
+\cs_new_protected:Npn \__chemmacros_nmr_coupling_aux_iii:n #1
+ {
+ \group_begin:
+ \sisetup
+ {
+ list-final-separator={,~},
+ list-pair-separator={,~},
+ list-units=single
+ }
+ \c_math_toggle_token
+ ^{ \l__chemmacros_nmr_coupling_bonds_tl }
+ \l__chemmacros_nmr_coupling_symbol_tl
+ \l__chemmacros_nmr_coupling_nuclei_tl
+ = \exp_args:Nno \qtylist {#1} { \l__chemmacros_nmr_coupling_unit_tl }
+ \c_math_toggle_token
+ \group_end:
}
% --------------------------------------------------------------------------
-% messages:
-\msg_new:nnn {chemmacros} {too-low-compatibility}
+\ChemModuleEnd
+\ChemModule{thermodynamics}{2021/07/24 thermodynamics}
+
+\RequirePackage {siunitx}
+
+\tl_new:N \l__chemmacros_state_pre_tl
+\tl_new:N \l__chemmacros_state_post_tl
+\tl_new:N \l__chemmacros_state_sp_left_tl
+\tl_new:N \l__chemmacros_state_sb_left_tl
+\tl_new:N \l__chemmacros_state_sp_right_tl
+\tl_new:N \l__chemmacros_state_sb_right_tl
+\tl_new:N \l__chemmacros_state_sb_pos_tl
+\tl_new:N \l__chemmacros_state_symbol_tl
+\tl_new:N \l__chemmacros_state_unit_tl
+
+\tl_set:Nn \l__chemmacros_state_pre_tl { \changestate }
+\tl_set:Nn \l__chemmacros_state_sp_right_tl { \standardstate }
+\tl_set:Nn \l__chemmacros_state_sb_pos_tl {left}
+
+\chemmacros_define_keys:nn {thermodynamics}
{
- Compatibility~ for~ versions~ below~ v4.7~ is~ not~ supported!~ You~
- requested~ version~ v #1.~ Loading~ v4.7~ instead.
+ pre .tl_set:N = \l__chemmacros_state_pre_tl ,
+ post .tl_set:N = \l__chemmacros_state_post_tl ,
+ superscript-left .tl_set:N = \l__chemmacros_state_sp_left_tl ,
+ superscript-right .tl_set:N = \l__chemmacros_state_sp_right_tl ,
+ superscript .meta:n = { superscript-right = #1 } ,
+ subscript-left .tl_set:N = \l__chemmacros_state_sb_left_tl ,
+ subscript-right .tl_set:N = \l__chemmacros_state_sb_right_tl ,
+ subscript .meta:n = { subscript-left = #1 } ,
+ unit .tl_set:N = \l__chemmacros_state_unit_tl ,
+ unit .groups:n = {variables}
}
-\msg_new:nnn {chemmacros} {too-high-compatibility}
+\cs_new_protected:Npn \chemmacros_state:nn #1#2
{
- You~ requested~ compatibility~ mode~ v #1~ while~ the~ current~ version~
- of~ chemmacros~ is~ v \c_chemmacros_version_tl .~ Falling~ back~
- to~ v \c_chemmacros_version_number_tl !
+ % pre (\Delta)
+ % post
+ % superscript-left
+ % superscript-right (\standardstate)
+ % subscript-left
+ % subscript-right
+ \group_begin:
+ \chemmacros_set_keys:nn {thermodynamics} {#1}
+ \ensuremath
+ {
+ \chemmacros_text:V \l__chemmacros_state_pre_tl
+ \c_math_superscript_token
+ { \chemmacros_text:V \l__chemmacros_state_sp_left_tl }
+ \c_math_subscript_token
+ { \chemmacros_text:V \l__chemmacros_state_sb_left_tl }
+ #2
+ \c_math_superscript_token
+ { \chemmacros_text:V \l__chemmacros_state_sp_right_tl }
+ \c_math_subscript_token
+ { \chemmacros_text:V \l__chemmacros_state_sb_right_tl }
+ \chemmacros_text:V \l__chemmacros_state_post_tl
+ }
+ \group_end:
}
+\cs_generate_variant:Nn \chemmacros_state:nn { nV }
-\msg_new:nnn {chemmacros} {low-compatibility}
+\DeclareDocumentCommand \state { O{}m }
+ { \chemmacros_state:nn {#1} {#2} }
+
+\cs_new_protected:Npn \chemmacros_declare_state:Nn #1#2
{
- You~ requested~ compatibility~ mode~ v #1~ while~ the~ current~ version~
- of~ chemmacros~ is~ v \c_chemmacros_version_tl .~ Not~ all~ features~
- or~ fixes~ will~ be~ available!
+ \chemmacros_define_keys:xn
+ {thermodynamics/\chemmacros_remove_backslash:N #1}
+ {
+ pre .meta:nn = {chemmacros/thermodynamics} { pre = ##1 } ,
+ post .meta:nn = {chemmacros/thermodynamics} { post = ##1 } ,
+ superscript-left .meta:nn = {chemmacros/thermodynamics} { superscript-left = ##1 } ,
+ superscript-right .meta:nn = {chemmacros/thermodynamics} { superscript-right = ##1 } ,
+ superscript .meta:n = { superscript-right = ##1 } ,
+ subscript-left .meta:nn = {chemmacros/thermodynamics} { subscript-left = ##1 } ,
+ subscript-right .meta:nn = {chemmacros/thermodynamics} { subscript-right = ##1 } ,
+ subscript .meta:n = { subscript-left = ##1 } ,
+ subscript-pos .choices:nn =
+ { left , right }
+ { \tl_set_eq:NN \l__chemmacros_state_sb_pos_tl \l_keys_choice_tl } ,
+ symbol .tl_set:N = \l__chemmacros_state_symbol_tl ,
+ unit .tl_set:N = \l__chemmacros_state_unit_tl
+ }
+ \DeclareDocumentCommand #1 { sO{}D(){}m }
+ {
+ \group_begin:
+ \chemmacros_set_keys:xn
+ {thermodynamics/\chemmacros_remove_backslash:N #1}
+ {#2}
+ \tl_if_blank:nF {##3}
+ {
+ \chemmacros_set_keys:nx {thermodynamics}
+ { subscript-\l__chemmacros_state_sb_pos_tl = \exp_not:n {##3} }
+ }
+ \ensuremath
+ {
+ \chemmacros_state:nV {##2} \l__chemmacros_state_symbol_tl
+ \chemmacros_set_keys_groups:nnn {thermodynamics} {variables} {##2}
+ \IfBooleanF {##1} { = \qty {##4} { \l__chemmacros_state_unit_tl } }
+ }
+ \group_end:
+ }
}
+\NewChemMacroset {State} {mm}
+ { \chemmacros_declare_state:Nn #1 {#2} }
+
% --------------------------------------------------------------------------
-% let's see that the max number is the newest (=current) version
-\chemmacros_if_compatibility:nnT {>} { \c_chemmacros_version_tl }
+% predefined:
+\NewChemState \enthalpy { symbol = H , unit = \kilo\joule\per\mole }
+\NewChemState \entropy { symbol = S , unit = \joule\per\kelvin\per\mole , pre = }
+\NewChemState \gibbs { symbol = G , unit = \kilo\joule\per\mole }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{units}{2022/01/16 chemical units}
+
+\RequirePackage{siunitx}
+
+% --------------------------------------------------------------------------
+\DeclareSIUnit \angstrom {\SIUnitSymbolAngstrom}
+\DeclareSIUnit \atm {atm}
+\DeclareSIUnit \atmosphere {atm}
+\DeclareSIUnit \atomicmassunit {u}
+\DeclareSIUnit \bar {bar}
+\DeclareSIUnit \calory {cal}
+\DeclareSIUnit \cal {cal}
+\DeclareSIUnit \elementarycharge {\text{\ensuremath{e}}}
+\DeclareSIUnit \mmHg {mmHg}
+\DeclareSIUnit \moLar {\mole\per\liter}
+\DeclareSIUnit \MolMass {\gram\per\mole}
+\DeclareSIUnit \normal {\textsc{n}}
+\DeclareSIUnit \torr {Torr}
+
+\hook_gput_code:nnn {begindocument/before} {chemmacros}
+ {
+ \chemmacros_if_package_loaded:nF {chemstyle}
+ {
+ \DeclareSIUnit {\cmc } {\cubic\centi\metre}
+ \DeclareSIUnit {\molar} {\mole\per\cubic\deci\metre}
+ \DeclareSIUnit {\Molar} {\textsc{m}}
+ }
+ }
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{reactants}{2021/07/24 typeset reactants and data}
+% idea and main development of this module: Sonja K.
+
+\RequirePackage {chemnum}
+
+\cs_generate_variant:Nn \chemnum_cmpd:nnnn {nnne}
+\cs_generate_variant:Nn \chemnum_init:nn {ne}
+\cs_generate_variant:Nn \chemnum_get_subcompound:nn {nV}
+
+% --------------------------------------------------------------------------
+\msg_new:nnn {chemmacros} {reactant-name}
+ {
+ The~ reactant~ `#1'~ has~ been~ defined~ without~ a~ name!~
+ \msg_line_context:
+ }
+
+\msg_new:nnn {chemmacros} {undefined-key}
+ {
+ The~ reactant~ key~ `#1'~ has~ not~ been~ defined~ using~
+ \token_to_str:N \DeclareChemReactant \c_space_tl \msg_line_context:
+ }
+
+\msg_new:nnn {chemmacros} {double-defined-key}
+ {
+ The~ reactant~ key~ `#1'~ has~ already~ been~ defined~ using~
+ \token_to_str:N \DeclareChemReactant \c_space_tl \msg_line_context:
+ }
+
+\msg_new:nnn {chemmacros} {double-defined-key-acronym}
+ {
+ The~ reactant~ key~ `#1'~ has~ already~ been~ defined~ using~
+ \token_to_str:N \DeclareAcronym \c_space_tl \msg_line_context:
+ }
+
+\msg_new:nnn {chemmacros} {incompatible-equivalents}
+ {
+ Incompatible~ options~ `equivalents=false'~ and~ `main=equiv'~ detected.~
+ `equivalents=false'~ will~ be~ ignored~ \msg_line_context:
+ }
+
+\msg_new:nnn {chemmacros} {acronym-support}
+ {
+ \token_to_str:N #1 is~ only~ available~ when~ setting~ the~
+ `acronym-support'~ option~ accordingly~ \msg_line_context:
+ }
+
+\msg_new:nnn {chemmacros} {missing-printreactants-style}
+ {
+ \token_to_str:N \printreactants \c_space_tl\token_to_str:N was~ used~ without~ a~
+ `printreactants-style'~ option,~ thus~ no~ list~ is~ printed~ \msg_line_context:
+ }
+
+\msg_new:nnn {chemmacros} {package-not-loaded}
+ { The~ command~ \token_to_str:N #1 requires~ the~ package~ `#2'. }
+
+% --------------------------------------------------------------------------
+\seq_new:N \l__chemmacros_reactants_tmpa_seq
+
+\bool_new:N \l__chemmacros_reactants_switch_bool
+\bool_new:N \l__chemmacros_reactants_initiate_bool
+\bool_new:N \l__chemmacros_reactants_equivalents_bool
+
+\bool_new:N \l__chemmacros_reactants_nmo_bool
+\bool_new:N \l__chemmacros_reactants_mno_bool
+\bool_new:N \l__chemmacros_reactants_mon_bool
+
+\bool_new:N \l__chemmacros_reactants_snm_bool
+\bool_new:N \l__chemmacros_reactants_smn_bool
+
+\bool_new:N \l__chemmacros_reactants_acronym_support_bool
+\bool_new:N \l__chemmacros_reactants_printreactants_style_bool
+
+\str_new:N \l__chemmacros_reactants_acronym_support_str
+\str_new:N \l__chemmacros_reactants_printreactants_style_str
+\str_new:N \l__chemmacros_reactants_main_str
+\str_new:N \l__chemmacros_reactants_name_str
+
+\tl_new:N \l__chemmacros_mass_unit_tl
+\tl_new:N \l__chemmacros_volume_unit_tl
+\tl_new:N \l__chemmacros_amount_unit_tl
+\tl_new:N \l__chemmacros_concentration_unit_tl
+\tl_new:N \l__chemmacros_equiv_unit_tl
+\tl_new:N \l__chemmacros_fraction_unit_tl
+\tl_new:N \l__chemmacros_purity_unit_tl
+\tl_new:N \l__chemmacros_solution_name_tl
+
+\chemmacros_define_keys:nn {reactants}
+ {
+ mass-unit .tl_set:N = \l__chemmacros_mass_unit_tl ,
+ mass-unit .initial:n = \gram ,
+ %%
+ volume-unit .tl_set:N = \l__chemmacros_volume_unit_tl ,
+ volume-unit .initial:n = \milli\liter ,
+ %%
+ amount-unit .tl_set:N = \l__chemmacros_amount_unit_tl ,
+ amount-unit .initial:n = \milli\mole ,
+ %%
+ concentration-unit .tl_set:N = \l__chemmacros_concentration_unit_tl ,
+ concentration-unit .initial:n = \Molar ,
+ %%
+ equiv-unit .tl_set:N = \l__chemmacros_equiv_unit_tl ,
+ equiv-unit .initial:n = eq ,
+ %%
+ fraction-unit .tl_set:N = \l__chemmacros_fraction_unit_tl ,
+ fraction-unit .initial:n = w/w \percent ,
+ %%
+ purity-unit .tl_set:N = \l__chemmacros_purity_unit_tl ,
+ purity-unit .initial:n = \percent ,
+ %%
+ solution-name .tl_set:N = \l__chemmacros_solution_name_tl ,
+ solution-name .initial:n = \chemmacros_translate:n {solution} ,
+ %%
+ switch .bool_set:N = \l__chemmacros_reactants_switch_bool ,
+ switch .initial:n = false ,
+ %%
+ initiate .bool_set:N = \l__chemmacros_reactants_initiate_bool ,
+ initiate .initial:n = false ,
+ %%
+ equivalents .bool_set_inverse:N = \l__chemmacros_reactants_equivalents_bool ,
+ equivalents .initial:n = true,
+ %%
+ reactant-output-style .choice: ,
+ reactant-output-style / name-main-other .code:n =
+ \bool_set_true:N \l__chemmacros_reactants_nmo_bool
+ \bool_set_false:N \l__chemmacros_reactants_mno_bool
+ \bool_set_false:N \l__chemmacros_reactants_mon_bool ,
+ reactant-output-style / main-name-other .code:n =
+ \bool_set_false:N \l__chemmacros_reactants_nmo_bool
+ \bool_set_true:N \l__chemmacros_reactants_mno_bool
+ \bool_set_false:N \l__chemmacros_reactants_mon_bool ,
+ reactant-output-style / main-other-name .code:n =
+ \bool_set_false:N \l__chemmacros_reactants_nmo_bool
+ \bool_set_false:N \l__chemmacros_reactants_mno_bool
+ \bool_set_true:N \l__chemmacros_reactants_mon_bool ,
+ reactant-output-style .initial:n = name-main-other ,
+ %%
+ solvent-output-style .choice: ,
+ solvent-output-style / main-name .code:n =
+ \bool_set_false:N \l__chemmacros_reactants_snm_bool
+ \bool_set_true:N \l__chemmacros_reactants_smn_bool ,
+ solvent-output-style / name-main .code:n =
+ \bool_set_true:N \l__chemmacros_reactants_snm_bool
+ \bool_set_false:N \l__chemmacros_reactants_smn_bool ,
+ solvent-output-style .initial:n = main-name ,
+ %%
+ main .choice: ,
+ main / amount .code:n =
+ \str_set:Nn \l__chemmacros_reactants_main_str {amount} ,
+ main / equiv .code:n =
+ \str_set:Nn \l__chemmacros_reactants_main_str {equiv} ,
+ main / default .code:n =
+ \str_set:Nn \l__chemmacros_reactants_main_str {default} ,
+ main .initial:n = default ,
+ %%
+ acronym-support .choice: ,
+ acronym-support / glossaries-extra .code:n =
+ \bool_set_true:N \l__chemmacros_reactants_acronym_support_bool
+ \str_set:Nn \l__chemmacros_reactants_acronym_support_str {glossaries}
+ \RequirePackage [acronyms] {glossaries-extra} ,
+ acronym-support / acro .code:n =
+ \bool_set_true:N \l__chemmacros_reactants_acronym_support_bool
+ \str_set:Nn \l__chemmacros_reactants_acronym_support_str {acro}
+ \RequirePackage {acro} ,
+ acronym-support / none .code:n =
+ \bool_set_false:N \l__chemmacros_reactants_acronym_support_bool
+ \str_clear:N \l__chemmacros_reactants_acronym_support_str ,
+ acronym-support .initial:n = none ,
+ %%
+ printreactants-style .choice: ,
+ printreactants-style / xltabular .code:n =
+ \bool_set_true:N \l__chemmacros_reactants_printreactants_style_bool
+ \str_set:Nn \l__chemmacros_reactants_printreactants_style_str {xltabular}
+ \RequirePackage {xltabular} ,
+ printreactants-style / longtable .code:n =
+ \bool_set_true:N \l__chemmacros_reactants_printreactants_style_bool
+ \str_set:Nn \l__chemmacros_reactants_printreactants_style_str {longtable}
+ \RequirePackage {longtable} ,
+ printreactants-style / none .code:n =
+ \bool_set_false:N \l__chemmacros_reactants_printreactants_style_bool
+ \str_clear:N \l__chemmacros_reactants_printreactants_style_str ,
+ printreactants-style .initial:n = none
+ }
+
+% --------------------------------------------------------------------------
+% #1: key
+% #2: properties
+\NewDocumentCommand \DeclareChemReactant {mm}
+ { \chemmacros_declare_reactant:nn {#1} {#2} }
+
+% #1: key
+% #2: properties
+\cs_new_protected:Npn \chemmacros_declare_reactant:nn #1#2
+ {
+ \cs_if_exist:cT
+ {l__chemmacros_reactants_#1_prop}
+ {\msg_error:nnn {chemmacros} {double-defined-key} {#1} }
+ \prop_new:c {l__chemmacros_reactants_#1_prop}
+ \__chemmacros_reactants_set_properties:nn {#1} {#2}
+ % check if name given:
+ \__chemmacros_reactants_if_property:nnF {#1} {name}
+ { \msg_error:nnn {chemmacros} {reactant-name} {#1} }
+ % check if number given; else use key:
+ \__chemmacros_reactants_if_property:nnF {#1} {number}
+ { \__chemmacros_reactants_set_properties:nn {#1} { number = #1 } }
+ \bool_if:NT \l__chemmacros_reactants_initiate_bool
+ {
+ \hook_gput_code:nnn {begindocument} {chemmacros}
+ { \chemnum_init:ne {} { \__chemmacros_reactants_item:nn {#1} {number} } }
+ }
+ \bool_if:NT \l__chemmacros_reactants_acronym_support_bool
+ {
+ \str_case:Vn \l__chemmacros_reactants_acronym_support_str
+ {
+ {glossaries}
+ {
+ \chemmacros_if_package_loaded:nTF {glossaries-extra}
+ {
+ \__chemmacros_reactants_if_property:nnT {#1} {short}
+ {
+ \exp_args:Nnxx
+ \newacronym
+ {#1}
+ { \__chemmacros_reactants_item:nn {#1} {short} }
+ { \__chemmacros_reactants_item:nn {#1} {name} }
+ }
+ }
+ {
+ \msg_error:nnnn
+ {chemmacros}
+ {package-not-loaded}
+ { \printreactants }
+ {glossaries-extra}
+ }
+ }
+ {acro}
+ {
+ \__chemmacros_reactants_if_property:nnT {#1} {short}
+ {
+ \chemmacros_if_package_loaded:nTF {acro}
+ {
+ \acro_if_defined:nT {#1}
+ { \msg_error:nnn {chemmacros} {double-defined-key-acronym} {#1} }
+ \exp_args:Nnx
+ \DeclareAcronym {#1} {
+ short = \__chemmacros_reactants_item:nn {#1} {short} ,
+ long = \__chemmacros_reactants_item:nn {#1} {name}
+ }
+ }
+ {
+ \msg_error:nnnn
+ {chemmacros}
+ {package-not-loaded}
+ { \printreactants }
+ {acro}
+ }
+ }
+ }
+ }
+ }
+ }
+
+% #1: key
+% #2: properties
+\cs_new_protected:Npn \__chemmacros_reactants_set_properties:nn #1#2
+ {
+ \cs_set_protected:Npn \__chemmacros_reactants_property:nn ##1##2
+ {
+ \str_case:nnF {##1}
+ { {name} { \__chemmacros_reactants_put:nnn {#1} {##1} {##2} } }
+ { \__chemmacros_reactants_put:nnn {#1} {##1} {##2} }
+ }
+ \cs_set_protected:Npn \__chemmacros_reactants_property:n ##1
+ { \__chemmacros_reactants_put:nnn {#1} {##1} {} }
+ \keyval_parse:NNn
+ \__chemmacros_reactants_property:n
+ \__chemmacros_reactants_property:nn
+ {#2}
+ }
+
+% #1: key
+% #2: property
+\prg_new_conditional:Npnn \__chemmacros_reactants_if_property:nn #1#2 {p,T,F,TF}
{
- \tl_set_eq:NN
- \l__chemmacros_compatibility_version_tl
- \c_chemmacros_version_tl
+ \prop_if_in:cnTF {l__chemmacros_reactants_#1_prop} {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+% #1: key
+% #2: property
+\cs_new:Npn \__chemmacros_reactants_item:nn #1#2
+ { \prop_item:cn {l__chemmacros_reactants_#1_prop} {#2} }
+
+% #1: key
+% #2: property
+% #3: value
+\cs_new_protected:Npn \__chemmacros_reactants_put:nnn #1#2#3
+ { \prop_put:cnn {l__chemmacros_reactants_#1_prop} {#2} {#3} }
+
% --------------------------------------------------------------------------
-% compatibility too low:
-\chemmacros_if_compatibility:nnT {<} {4.7}
+% #1: boolean > no name
+% #2: boolean: if true, allow no properties and use cmpd+
+% #3: properties and options
+% #4: key
+\NewDocumentCommand \reactant {st+O{}m}
+ {
+ \group_begin:
+ \str_set:Nn \l__chemmacros_reactants_name_str {regular}
+ \chemmacros_reactant:nnnn {#1} {#2} {#3} {#4}
+ \group_end:
+ }
+
+% #1: boolean > no name
+% #2: boolean: if true, allow no properties and use cmpd+
+% #3: properties and options
+% #4: key
+\NewDocumentCommand \reactants {st+O{}m}
+ {
+ \group_begin:
+ \bool_if:NTF \l__chemmacros_reactants_acronym_support_bool
+ {
+ \str_set:Nn \l__chemmacros_reactants_name_str {short}
+ \chemmacros_reactant:nnnn {#1} {#2} {#3} {#4}
+ }
+ { \msg_error:nnn {chemmacros} {acronym-support} { \reactants } }
+ \group_end:
+ }
+
+% #1: boolean > no name
+% #2: boolean: if true, allow no properties and use cmpd+
+% #3: properties and options
+% #4: key
+\NewDocumentCommand \reactantl {st+O{}m}
+ {
+ \group_begin:
+ \bool_if:NTF \l__chemmacros_reactants_acronym_support_bool
+ {
+ \str_set:Nn \l__chemmacros_reactants_name_str {long}
+ \chemmacros_reactant:nnnn {#1} {#2} {#3} {#4}
+ }
+ { \msg_error:nnn {chemmacros} {acronym-support} { \reactantl } }
+ \group_end:
+ }
+
+% #1: boolean > no name
+% #2: boolean: if true, allow no properties and use cmpd+
+% #3: properties and options
+% #4: key
+\NewDocumentCommand \Reactant {st+O{}m}
+ {
+ \group_begin:
+ \str_set:Nn \l__chemmacros_reactants_name_str {upper}
+ \chemmacros_reactant:nnnn {#1} {#2} {#3} {#4}
+ \group_end:
+ }
+
+
+% #1: boolean > no name
+% #2: boolean: if true, allow no properties and use cmpd+
+% #3: properties and options
+% #4: key
+\cs_new_protected:Npn \chemmacros_reactant:nnnn #1#2#3#4
+ {
+ \group_begin:
+ \bool_if:NT \l__chemmacros_reactants_nmo_bool
+ {
+ \__chemmacros_reactants_set_properties:nn {#4} {#3}
+ % name:
+ \chemmacros_reactants_name:nnnn {#1} {#3} {#4} {#2}
+ \chemmacros_reactants_if_any:nT {#4} {~(}
+ % main:
+ \__chemmacros_reactants_mainproperty:nn {#3} {#4}
+ \bool_lazy_and:nnT
+ { \chemmacros_reactants_if_main_p:n {#4} }
+ { \chemmacros_reactants_if_other_p:n {#4} }
+ {,~}
+ % others:
+ \chemmacros_reactants_properties:nn {#3} {#4}
+ \chemmacros_reactants_if_any:nT {#4} {)}
+ }
+ \bool_if:NT \l__chemmacros_reactants_mno_bool
+ {
+ \__chemmacros_reactants_set_properties:nn {#4} {#3}
+ % main:
+ \__chemmacros_reactants_mainproperty:nn {#3} {#4}
+ \chemmacros_reactants_if_main:nT {#4} {~}
+ % name:
+ \chemmacros_reactants_name:nnnn {#1} {#3} {#4} {#2}
+ % others:
+ \chemmacros_reactants_if_other:nT {#4} {~(}
+ \chemmacros_reactants_properties:nn {#3} {#4}
+ \chemmacros_reactants_if_other:nT {#4} {)}
+ }
+ \bool_if:NT \l__chemmacros_reactants_mon_bool
+ {
+ \__chemmacros_reactants_set_properties:nn {#4} {#3}
+ % main:
+ \__chemmacros_reactants_mainproperty:nn {#3} {#4}
+ \chemmacros_reactants_if_main:nT {#4} {~}
+ % others:
+ \chemmacros_reactants_if_other:nT {#4} {(}
+ \chemmacros_reactants_properties:nn {#3} {#4}
+ \chemmacros_reactants_if_other:nT {#4} {)~}
+ % name
+ \chemmacros_reactants_name:nnnn {#1} {#3} {#4} {#2}
+ }
+ \group_end:
+ }
+
+% #1: key
+\prg_new_conditional:Npnn \chemmacros_reactants_if_main:n #1 {p,T,F,TF}
+ {
+ \bool_lazy_or:nnTF
+ { \__chemmacros_reactants_if_property_p:nn {#1} {mass} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {volume} }
+ { \prg_return_true: }
+ {
+ \str_case:VnF \l__chemmacros_reactants_main_str
+ {
+ {amount} {
+ \__chemmacros_reactants_if_property:nnTF {#1} {amount}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ {equiv} {
+ \__chemmacros_reactants_if_property:nnTF {#1} {equiv}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ }
+ { \prg_return_false: }
+ }
+ }
+
+% #1: key
+\prg_new_conditional:Npnn \chemmacros_reactants_if_other:n #1 {p,T,F,TF}
+ {
+ \bool_lazy_any:nTF
+ {
+ { \__chemmacros_reactants_if_property_p:nn {#1} {fraction} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {purity} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {concentration} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {solvent} }
+ }
+ { \prg_return_true: }
+ {
+ \str_case:VnF \l__chemmacros_reactants_main_str
+ {
+ {default} {
+ \bool_lazy_or:nnTF
+ { \__chemmacros_reactants_if_property_p:nn {#1} {amount} }
+ {
+ \bool_lazy_and_p:nn
+ { \__chemmacros_reactants_if_property_p:nn {#1} {equiv} }
+ { !\l__chemmacros_reactants_equivalents_bool }
+ }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ {amount} {
+ \bool_if:NTF \l__chemmacros_reactants_equivalents_bool
+ { \prg_return_false: }
+ {
+ \__chemmacros_reactants_if_property:nnTF {#1} {equiv}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ }
+ {equiv} {
+ \__chemmacros_reactants_if_property:nnTF {#1} {amount}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ }
+ { \prg_return_false: }
+ }
+ }
+
+% #1: key
+\prg_new_conditional:Npnn \chemmacros_reactants_if_any:n #1 {T,F,TF}
+ {
+ \bool_lazy_any:nTF
+ {
+ { \__chemmacros_reactants_if_property_p:nn {#1} {mass} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {volume} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {fraction} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {amount} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {equiv} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {purity} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {concentration} }
+ { \__chemmacros_reactants_if_property_p:nn {#1} {solvent} }
+ }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: boolean > no name
+% #2: options and keys
+% #3: key
+% #4: boolean: if true, allow no properties and use cmpd+
+\cs_new_protected:Npn \chemmacros_reactants_name:nnnn #1#2#3#4
+ {
+ \group_begin:
+ \keys_set_known:nn {chemmacros/reactants} {#2}
+ \bool_lazy_or:nnT
+ { \bool_lazy_and_p:nn {#1} { !\l__chemmacros_reactants_switch_bool } }
+ { !#1 }
+ {
+ \str_case:Vn \l__chemmacros_reactants_name_str
+ {
+ {regular}
+ { \__chemmacros_reactants_item:nn {#3} {name} }
+ {upper}
+ { \__chemmacros_reactants_item:nn {#3} {upper-name} }
+ {short}
+ {
+ \str_case:Vn \l__chemmacros_reactants_acronym_support_str
+ {
+ {glossaries} { \glsxtrshort {#3} }
+ {acro} { \acs {#3} }
+ }
+ }
+ {long}
+ {
+ \str_case:Vn \l__chemmacros_reactants_acronym_support_str
+ {
+ {glossaries} { \glsxtrlong {#3} }
+ {acro} { \acl {#3} }
+ }
+ }
+ }
+ }
+ \bool_if:nF {#1} { \nobreakspace }
+ \bool_lazy_or:nnT
+ { \bool_lazy_and_p:nn {#1} { \l__chemmacros_reactants_switch_bool } }
+ { !#1 }
+ {
+ \chemnum_cmpd:nnne
+ { \c_false_bool }
+ {#4}
+ { }
+ { \__chemmacros_reactants_item:nn {#3} {number} }
+ % what is this for?
+ % it causes problems when #3 is a combination of main and sub:
+ % \bool_if:nF {#4}
+ % {
+ % \chemnum_compound_if_initiated:nF {#3}
+ % { \msg_warning:nnn {chemmacros} {undefined-key} {#3} }
+ % }
+ }
+ \group_end:
+ }
+
+% #1: options and properties
+% #2: key
+\cs_new_protected:Npn \chemmacros_reactants_properties:nn #1#2
+ {
+ \group_begin:
+ \seq_clear:N \l__chemmacros_tmpa_seq
+ \__chemmacros_reactants_set_properties:nn {#2} {#1}
+ \keys_set_known:nn {chemmacros/reactants} {#1}
+ \bool_lazy_any:nT
+ {
+ { \__chemmacros_reactants_if_property_p:nn {#2} {mass} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {volume} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {fraction} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {amount} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {equiv} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {purity} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {concentration} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {solvent} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {fraction-unit} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {amount-unit} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {equiv-unit} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {purity-unit} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {concentration-unit} }
+ }
+ {
+ \__chemmacros_reactants_change_unit:nnN
+ {#2}
+ {fraction-unit}
+ \l__chemmacros_fraction_unit_tl
+ \__chemmacros_reactants_change_unit:nnN
+ {#2}
+ {amount-unit}
+ \l__chemmacros_amount_unit_tl
+ \bool_if:NF \l__chemmacros_reactants_equivalents_bool
+ {
+ \__chemmacros_reactants_change_unit:nnN
+ {#2}
+ {equiv-unit}
+ \l__chemmacros_equiv_unit_tl
+ }
+ \__chemmacros_reactants_change_unit:nnN
+ {#2}
+ {purity-unit}
+ \l__chemmacros_purity_unit_tl
+ \__chemmacros_reactants_change_unit:nnN
+ {#2}
+ {concentration-unit}
+ \l__chemmacros_concentration_unit_tl
+ \__chemmacros_reactants_add_property:NnnV \l__chemmacros_tmpa_seq
+ {#2}
+ {fraction}
+ \l__chemmacros_fraction_unit_tl
+ \str_if_eq:VnF \l__chemmacros_reactants_main_str {amount}
+ {
+ \__chemmacros_reactants_add_property:NnnV \l__chemmacros_tmpa_seq
+ {#2}
+ {amount}
+ \l__chemmacros_amount_unit_tl
+ }
+ \bool_if:NTF \l__chemmacros_reactants_equivalents_bool
+ {
+ \str_if_eq:VnT \l__chemmacros_reactants_main_str {equiv}
+ { \msg_warning:nnn {chemmacros} {incompatible-equivalents} {#1} }
+ }
+ {
+ \str_if_eq:VnF \l__chemmacros_reactants_main_str {equiv}
+ {
+ \__chemmacros_reactants_add_property:NnnV \l__chemmacros_tmpa_seq
+ {#2}
+ {equiv}
+ \l__chemmacros_equiv_unit_tl
+ }
+ }
+ \__chemmacros_reactants_add_property:NnnV \l__chemmacros_tmpa_seq
+ {#2}
+ {purity}
+ \l__chemmacros_purity_unit_tl
+ \__chemmacros_reactants_add_property:NnnV \l__chemmacros_tmpa_seq
+ {#2}
+ {concentration}
+ \l__chemmacros_concentration_unit_tl
+ \seq_use:Nn \l__chemmacros_tmpa_seq {,~}
+ \__chemmacros_reactants_add_solvent:Nnn
+ {#2}
+ {solvent}
+ \l__chemmacros_solution_name_tl
+ }
+ \group_end:
+ }
+
+% #1: options and properties
+% #2: key
+\cs_new_protected:Npn \__chemmacros_reactants_mainproperty:nn #1#2
+ {
+ \group_begin:
+ \seq_clear:N \l__chemmacros_tmpa_seq
+ \__chemmacros_reactants_set_properties:nn {#2} {#1}
+ \keys_set_known:nn {chemmacros/reactants} {#1}
+ \bool_lazy_or:nnT
+ { \__chemmacros_reactants_if_property_p:nn {#2} {mass-unit} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {volume-unit} }
+ {
+ \__chemmacros_reactants_change_unit:nnN
+ {#2}
+ {mass-unit}
+ \l__chemmacros_mass_unit_tl
+ \__chemmacros_reactants_change_unit:nnN
+ {#2}
+ {volume-unit}
+ \l__chemmacros_volume_unit_tl
+ }
+ \bool_lazy_and:nnT
+ { \str_if_eq_p:Vn \l__chemmacros_reactants_main_str {amount} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {amount-unit} }
+ {
+ \__chemmacros_reactants_change_unit:nnN
+ {#2}
+ {amount-unit}
+ \l__chemmacros_amount_unit_tl
+ }
+ \bool_lazy_and:nnT
+ { \str_if_eq_p:Vn \l__chemmacros_reactants_main_str {equiv} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {equiv-unit} }
+ {
+ \__chemmacros_reactants_change_unit:nnN
+ {#2}
+ {equiv-unit}
+ \l__chemmacros_equiv_unit_tl
+ }
+ \__chemmacros_reactants_add_property:NnnV \l__chemmacros_tmpa_seq
+ {#2}
+ {mass}
+ \l__chemmacros_mass_unit_tl
+ \__chemmacros_reactants_add_property:NnnV \l__chemmacros_tmpa_seq
+ {#2}
+ {volume}
+ \l__chemmacros_volume_unit_tl
+ \str_if_eq:VnT \l__chemmacros_reactants_main_str {amount}
+ {
+ \__chemmacros_reactants_add_property:NnnV \l__chemmacros_tmpa_seq
+ {#2}
+ {amount}
+ \l__chemmacros_amount_unit_tl
+ }
+ \str_if_eq:VnT \l__chemmacros_reactants_main_str {equiv}
+ {
+ \__chemmacros_reactants_add_property:NnnV \l__chemmacros_tmpa_seq
+ {#2}
+ {equiv}
+ \l__chemmacros_equiv_unit_tl
+ }
+ \seq_if_empty:NF \l__chemmacros_tmpa_seq
+ { \seq_use:Nn \l__chemmacros_tmpa_seq {,~} }
+ \group_end:
+ }
+
+% #1: seq variable
+% #2: key
+% #3: property
+% #4: unit
+\cs_new_protected:Npn \__chemmacros_reactants_add_property:Nnnn #1#2#3#4
+ {
+ \__chemmacros_reactants_if_property:nnT {#2} {#3}
+ {
+ \seq_put_right:Ne #1
+ { \qty { \__chemmacros_reactants_item:nn {#2} {#3} } { \exp_not:n {#4} } }
+ }
+ }
+\cs_generate_variant:Nn \__chemmacros_reactants_add_property:Nnnn {NnnV}
+
+% #1: key
+% #2: property (name of solvent)
+% #3: linking text
+\cs_new_protected:Npn \__chemmacros_reactants_add_solvent:Nnn #1#2#3
+ {
+ \__chemmacros_reactants_if_property:nnT {#1} {#2}
+ {
+ \c_space_tl
+ \l__chemmacros_solution_name_tl
+ \c_space_tl
+ \__chemmacros_reactants_item:nn {#1} {#2}
+ }
+ }
+\cs_generate_variant:Nn \__chemmacros_reactants_add_solvent:Nnn {NnV}
+
+% #1: key
+% #2: property
+% #3: new unit
+\cs_new_protected:Npn \__chemmacros_reactants_change_unit:nnN #1#2#3
+ {
+ \__chemmacros_reactants_if_property:nnT {#1} {#2}
+ { \prop_get:cnN {l__chemmacros_reactants_#1_prop} {#2} #3 }
+ }
+
+% #1: properties and options
+% #2: key
+\NewDocumentCommand \solvent {O{}m}
+ {
+ \group_begin:
+ \str_set:Nn \l__chemmacros_reactants_name_str {regular}
+ \chemmacros_solvent:nn {#1} {#2}
+ \group_end:
+ }
+
+% #1: properties and options
+% #2: key
+\NewDocumentCommand \solvents {O{}m}
+ {
+ \group_begin:
+ \bool_if:NTF \l__chemmacros_reactants_acronym_support_bool
+ {
+ \str_set:Nn \l__chemmacros_reactants_name_str {short}
+ \chemmacros_solvent:nn {#1} {#2}
+ }
+ { \msg_error:nnn {chemmacros} {acronym-support} { \solvents } }
+ \group_end:
+ }
+
+% #1: properties and options
+% #2: key
+\NewDocumentCommand \solventl {O{}m}
+ {
+ \group_begin:
+ \bool_if:NTF \l__chemmacros_reactants_acronym_support_bool
+ {
+ \str_set:Nn \l__chemmacros_reactants_name_str {long}
+ \chemmacros_solvent:nn {#1} {#2}
+ }
+ { \msg_error:nnn {chemmacros} {acronym-support} { \solventl } }
+ \group_end:
+ }
+
+% #1: properties and options
+% #2: key
+\NewDocumentCommand \Solvent {O{}m}
+ {
+ \group_begin:
+ \str_set:Nn \l__chemmacros_reactants_name_str {upper}
+ \chemmacros_solvent:nn {#1} {#2}
+ \group_end:
+ }
+
+
+% #1: options and properties
+% #3: key
+\cs_new_protected:Npn \chemmacros_solvent:nn #1#2
+ {
+ \group_begin:
+ \bool_if:NT \l__chemmacros_reactants_snm_bool
+ {
+ \__chemmacros_reactants_set_properties:nn {#2} {#1}
+ \chemmacros_solvent_name:nn {#1} {#2}
+ \chemmacros_reactants_if_main:nT {#2} {~(}
+ \chemmacros_solvent_properties:nn {#1} {#2}
+ \chemmacros_reactants_if_main:nT {#2} {)}
+ }
+ \bool_if:NT \l__chemmacros_reactants_smn_bool
+ {
+ \__chemmacros_reactants_set_properties:nn {#2} {#1}
+ \chemmacros_solvent_properties:nn {#1} {#2}
+ \chemmacros_reactants_if_main:nT {#2} {~}
+ \chemmacros_solvent_name:nn {#1} {#2}
+ }
+ \group_end:
+ }
+
+% #1: options and properties
+% #3: key
+\cs_new_protected:Npn \chemmacros_solvent_properties:nn #1#2
{
- \msg_warning:nnx {chemmacros} {too-low-compatibility}
- { \l__chemmacros_compatibility_version_tl }
+ \group_begin:
+ \__chemmacros_reactants_set_properties:nn {#2} {#1}
+ \keys_set_known:nn {chemmacros/reactants} {#1}
+ \bool_lazy_or:nnT
+ { \__chemmacros_reactants_if_property_p:nn {#2} {volume} }
+ { \__chemmacros_reactants_if_property_p:nn {#2} {volume-unit} }
+ {
+ \__chemmacros_reactants_change_unit:nnN {#2}
+ {volume-unit}
+ \l__chemmacros_volume_unit_tl
+ \qty
+ { \__chemmacros_reactants_item:nn {#2} {volume} }
+ { \l__chemmacros_volume_unit_tl }
+
+ }
+ \group_end:
}
-% not the newest version:
-\chemmacros_if_compatibility:nnT {<} { \c_chemmacros_version_tl }
+% #1: options
+% #2: key
+\cs_new_protected:Npn \chemmacros_solvent_name:nn #1#2
{
- \msg_warning:nnx {chemmacros} {low-compatibility}
- { \l__chemmacros_compatibility_version_tl }
+ \group_begin:
+ \keys_set_known:nn {chemmacros/reactants} {#1}
+ \str_case:Vn \l__chemmacros_reactants_name_str
+ {
+ {regular}
+ { \__chemmacros_reactants_item:nn {#2} {name} }
+ {upper}
+ { \__chemmacros_reactants_item:nn {#2} {upper-name} }
+ {short}
+ {
+ \str_case:Vn \l__chemmacros_reactants_acronym_support_str
+ {
+ {glossaries} { \glsxtrshort {#2} }
+ {acro} { \acs {#2} }
+ }
+ }
+ {long}
+ {
+ \str_case:Vn \l__chemmacros_reactants_acronym_support_str
+ {
+ {glossaries} { \glsxtrlong {#2} }
+ {acro} { \acl {#2} }
+ }
+ }
+ }
+ \group_end:
+ }
+
+% --------------------------------------------------------------------------
+
+% #1: full ID
+\DeclareExpandableDocumentCommand \reactantplain {m}
+ {
+ \chemmacros_if_package_loaded:nF {hyperref}
+ {
+ \msg_expandable_error:nnnn
+ {chemmacros}
+ {package-not-loaded}
+ { \reactantplain }
+ {hyperref}
+ }
+ \__chemmacros_reactants_if_property:nnF {#1} {bookmark}
+ { \msg_expandable_error:nnn {chemmacros} {reactant-bookmark} {#1} }
+ \texorpdfstring
+ { \__chemmacros_reactants_item:nn {#1} {name} ~ \cmpd+ {#1} }
+ { \__chemmacros_reactants_item:nn {#1} {bookmark} \space \cmpdplain {#1} }
+ }
+
+% #1: full ID
+\DeclareExpandableDocumentCommand \Reactantplain {m}
+ {
+ \chemmacros_if_package_loaded:nF {hyperref}
+ {
+ \msg_expandable_error:nnnn
+ {chemmacros}
+ {package-not-loaded}
+ { \reactantplain }
+ {hyperref}
+ }
+ \__chemmacros_reactants_if_property:nnF {#1} {upper-bookmark}
+ { \msg_expandable_error:nnn {chemmacros} {reactant-bookmark} {#1} }
+ \texorpdfstring
+ { \__chemmacros_reactants_item:nn {#1} {upper-name} ~ \cmpd+ {#1} }
+ { \__chemmacros_reactants_item:nn {#1} {upper-bookmark} \space \cmpdplain {#1} }
+ }
+
+
+% #1: main Id
+% #2: sub ID
+\DeclareExpandableDocumentCommand \submainreactantplain {mm}
+ {
+ \chemmacros_if_package_loaded:nF {hyperref}
+ {
+ \msg_expandable_error:nnnn
+ {chemmacros}
+ {package-not-loaded}
+ { \submainreactantplain }
+ {hyperref}
+ }
+ \__chemmacros_reactants_if_property:nnF
+ { #1 \l_chemnum_compound_separator_tl #2 }
+ {bookmark}
+ { \msg_expandable_error:nnn {chemmacros} {reactant-bookmark} {#1.#2} }
+ \texorpdfstring
+ {
+ \__chemmacros_reactants_item:nn
+ { #1 \l_chemnum_compound_separator_tl #2 }
+ {name}
+ \c_space_tl
+ \cmpd+ {#1.#2}
+ }
+ {
+ \__chemmacros_reactants_item:nn
+ { #1 \l_chemnum_compound_separator_tl #2 }
+ {bookmark}
+ \space \submaincmpdplain {#1} {#2}
+ }
+ }
+
+
+% #1: main Id
+% #2: sub ID
+\DeclareExpandableDocumentCommand \Submainreactantplain {mm}
+ {
+ \chemmacros_if_package_loaded:nF {hyperref}
+ {
+ \msg_expandable_error:nnnn
+ {chemmacros}
+ {package-not-loaded}
+ { \submainreactantplain }
+ {hyperref}
+ }
+ \__chemmacros_reactants_if_property:nnF
+ { #1 \l_chemnum_compound_separator_tl #2 }
+ {upper-bookmark}
+ { \msg_expandable_error:nnn {chemmacros} {reactant-bookmark} {#1.#2} }
+ \texorpdfstring
+ {
+ \__chemmacros_reactants_item:nn
+ { #1 \l_chemnum_compound_separator_tl #2 }
+ {upper-name}
+ \c_space_tl
+ \cmpd+ {#1.#2}
+ }
+ {
+ \__chemmacros_reactants_item:nn
+ { #1 \l_chemnum_compound_separator_tl #2 }
+ {upper-bookmark}
+ \space \submaincmpdplain {#1} {#2}
+ }
}
+
+% #1: full ID
+\DeclareExpandableDocumentCommand \solventplain {m}
+ {
+ \chemmacros_if_package_loaded:nF {hyperref}
+ {
+ \msg_expandable_error:nnnn
+ {chemmacros}
+ {package-not-loaded}
+ { \solventplain }
+ {hyperref}
+ }
+ \__chemmacros_reactants_if_property:nnF {#1} {bookmark}
+ { \msg_expandable_error:nnn {chemmacros} {reactant-bookmark} {#1} }
+ \texorpdfstring
+ { \__chemmacros_reactants_item:nn {#1} {name} ~ }
+ { \__chemmacros_reactants_item:nn {#1} {bookmark} ~ }
+ }
+
+% #1: full ID
+\DeclareExpandableDocumentCommand \Solventplain {m}
+ {
+ \chemmacros_if_package_loaded:nF {hyperref}
+ {
+ \msg_expandable_error:nnnn
+ {chemmacros}
+ {package-not-loaded}
+ { \solventplain }
+ {hyperref}
+ }
+ \__chemmacros_reactants_if_property:nnF {#1} {upper-bookmark}
+ { \msg_expandable_error:nnn {chemmacros} {reactant-bookmark} {#1} }
+ \texorpdfstring
+ { \__chemmacros_reactants_item:nn {#1} {upper-name} ~ }
+ { \__chemmacros_reactants_item:nn {#1} {upper-bookmark} ~ }
+ }
+
% --------------------------------------------------------------------------
-\chemmacros_if_compatibility:nnTF {<} {5.0}
- { \RequirePackage{chemmacros4} }
- { \RequirePackage{chemmacros5} }
+% #1: star: include ID in table
+\NewDocumentCommand \printreactants {s}
+ {
+ \group_begin:
+ \chemmacros_set_keys:nn {reactants} { switch = false }
+ \int_step_variable:nNn
+ { \seq_count:N \g_chemnum_initiated_compounds_seq }
+ \l__chemmacros_reactants_tmpa_tl
+ {
+ \seq_put_right:Nx
+ \l__chemmacros_reactants_tmpa_seq
+ {
+ \chemnum_cmpd:nnne { \c_false_bool } { \c_true_bool } {}
+ {
+ \seq_item:NV
+ \g_chemnum_initiated_compounds_seq
+ \l__chemmacros_reactants_tmpa_tl
+ }
+ &
+ \bool_if:nT {#1}
+ {
+ \seq_item:NV
+ \g_chemnum_initiated_compounds_seq
+ \l__chemmacros_reactants_tmpa_tl
+ &
+ }
+ % TODO: expl3-command ??
+ \solvent
+ {
+ \seq_item:NV
+ \g_chemnum_initiated_compounds_seq
+ \l__chemmacros_reactants_tmpa_tl
+ }
+ \tabularnewline
+ }
+ \tl_set:Nx
+ \l__chemmacros_reactants_tmpb_tl
+ {
+ \seq_item:NV
+ \g_chemnum_initiated_compounds_seq
+ \l__chemmacros_reactants_tmpa_tl
+ }
+ \chemmacros_reactants_list_subreactant:Vn
+ \l__chemmacros_reactants_tmpb_tl
+ {#1}
+ }
+ % TODO: longtable ?
+ % table customizable?
+ % first draft of two styles
+ \par
+ \noindent
+ \bool_if:NTF \l__chemmacros_reactants_printreactants_style_bool
+ {
+ \str_case:Vn \l__chemmacros_reactants_printreactants_style_str
+ {
+ {xltabular}
+ {
+ \chemmacros_if_package_loaded:nTF {xltabular}
+ {
+ \bool_if:nTF {#1}
+ {
+ \begin
+ {xltabular}
+ { \textwidth }
+ { @{}ll>{\raggedright\arraybackslash}X@{} }
+ }
+ {
+ \begin
+ {xltabular}
+ { \textwidth }
+ { @{}l>{\raggedright\arraybackslash}X@{} }
+ }
+ \seq_use:Nn \l__chemmacros_reactants_tmpa_seq { }
+ \end{xltabular}
+ }
+ {
+ \msg_expandable_error:nnnn
+ {chemmacros}
+ {package-not-loaded}
+ { \printreactants }
+ {xltabular}
+ }
+ }
+ {longtable}
+ {
+ \chemmacros_if_package_loaded:nTF {longtable}
+ {
+ \bool_if:nTF {#1}
+ {
+ \begin
+ {longtable}[l]
+ { @{}ll>{\raggedright\arraybackslash}p{0.6\textwidth}@{} }
+ }
+ {
+ \begin
+ {longtable}[l]
+ { @{}l>{\raggedright\arraybackslash}p{0.9\textwidth}@{} }
+ }
+ \seq_use:Nn \l__chemmacros_reactants_tmpa_seq { }
+ \end{longtable}
+ }
+ {
+ \msg_expandable_error:nnnn
+ {chemmacros}
+ {package-not-loaded}
+ { \printreactants }
+ {longtable}
+ }
+ }
+ }
+ }
+ {
+ \msg_warning:nn {chemmacros} {missing-printreactants-style}
+ }
+ \group_end:
+ }
+
+% #1: full ID
+% #2: star, include ID in table
+\cs_new_protected:Npn \chemmacros_reactants_list_subreactant:nn #1#2
+ {
+ \chemnum_if_subcompounds:nT {#1}
+ {
+ \int_step_variable:nNn
+ { \chemnum_count_subcompounds:n {#1} }
+ \l__chemmacros_reactants_tmpa_tl
+ {
+ \seq_put_right:Nx
+ \l__chemmacros_reactants_tmpa_seq
+ {
+ \chemnum_cmpd:nnne { \c_false_bool } { \c_true_bool } {}
+ {
+ \exp_not:n {#1}
+ \exp_not:V \l_chemnum_compound_separator_tl
+ \chemnum_get_subcompound:nV
+ {#1}
+ \l__chemmacros_reactants_tmpa_tl
+ }
+ &
+ \bool_if:nT {#2}
+ {
+ #1
+ \l_chemnum_compound_separator_tl
+ \chemnum_get_subcompound:nV
+ {#1}
+ \l__chemmacros_reactants_tmpa_tl
+ &
+ }
+ % TODO: expl3-command ??
+ \solvent
+ {
+ #1
+ \l_chemnum_compound_separator_tl
+ \chemnum_get_subcompound:nV
+ {#1}
+ \l__chemmacros_reactants_tmpa_tl
+ }
+ \tabularnewline
+ }
+ }
+ }
+ }
+\cs_generate_variant:Nn \chemmacros_reactants_list_subreactant:nn {V}
+
+% --------------------------------------------------------------------------
+\ChemModuleEnd
+\ChemModule{translations}{2022/01/16 translations for defined keys at one place}
+
+% --------------------------------------------------------------------------
+\chemmacros_declare_translations:nn {K-acid}
+ {
+ German = \mathrm {s} ,
+ Danish = \mathrm {s} ,
+ Dutch = \mathrm {z}
+ }
+
+\chemmacros_declare_translations:nn {K-acid}
+ { Danish = \mathrm {v} }
+
+% --------------------------------------------------------------------------
+\chemmacros_declare_translations:nn {phase-sld}
+ {
+ fallback = s ,
+ German = f
+ }
+
+\chemmacros_declare_translations:nn {phase-lqd}
+ {
+ fallback = l ,
+ German = f\/l
+ }
+
+\chemmacros_declare_translations:nn {phase-gas}
+ { fallback = g }
+
+\chemmacros_declare_translations:nn {phase-aq}
+ { fallback = aq }
+
+% --------------------------------------------------------------------------
+\chemmacros_declare_translations:nn {solution}
+ {
+ fallback = solution~ in ,
+ English = solution~ in ,
+ German = L\"osung~ in ,
+ }
+
+% --------------------------------------------------------------------------
+\chemmacros_declare_translations:nn {list-of-reactions}
+ {
+ fallback = List~ of~ Reactions ,
+ English = List~ of~ Reactions ,
+ German = Reaktionsverzeichnis ,
+ Italian = Elenco~ delle~ reazioni ,
+ French = Table~ des~ r\'{e}actions ,
+ Dutch = Lijst~ van~ reacties ,
+ Norwegian = Reaksjonsliste ,
+ Nynorsk = Reaksjonsliste ,
+ Danish = Reaktionsliste
+ }
+
+\chemmacros_declare_translations:nn {reaction}
+ {
+ fallback = reaction ,
+ English = reaction ,
+ German = Reaktion ,
+ Italian = reazione ,
+ French = r\'{e}action ,
+ Dutch = reactie ,
+ Norwegian = reaksjon ,
+ Nynorsk = reaksjon ,
+ Danish = reaktion
+ }
+
+\chemmacros_declare_translations:nn {reactions}
+ {
+ fallback = reactions ,
+ English = reactions ,
+ German = Reaktionen ,
+ Italian = reazioni ,
+ French = r\'{e}actions ,
+ Dutch = reacties ,
+ Norwegian = reaksjoner ,
+ Nynorsk = reaksjonar ,
+ Danish = reaktioner
+ }
+
+\chemmacros_declare_translations:nn {Reaction}
+ {
+ fallback = Reaction ,
+ English = Reaction ,
+ German = Reaktion ,
+ Italian = Reazione ,
+ French = R\'{e}action ,
+ Dutch = Reactie ,
+ Norwegian = Reaksjon ,
+ Nynorsk = Reaksjon ,
+ Danish = Reaktion
+ }
+
+\chemmacros_declare_translations:nn {Reactions}
+ {
+ fallback = Reactions ,
+ English = Reactions ,
+ German = Reaktionen ,
+ Italian = Reazioni ,
+ French = R\'{e}actions ,
+ Dutch = Reacties ,
+ Norwegian = Reaksjoner ,
+ Nynorsk = Reaksjonar ,
+ Danish = Reaktioner
+ }
+
+% --------------------------------------------------------------------------
+\chemmacros_declare_translations:nn {scheme-name}
+ {
+ fallback = Scheme ,
+ English = Scheme ,
+ German = Schema ,
+ Norwegian = Skjema ,
+ Nynorsk = Skjema ,
+ Danish = Skema
+ }
+
+\chemmacros_declare_translations:nn {scheme-list}
+ {
+ fallback = List~ of~ Schemes ,
+ English = List~ of~ Schemes ,
+ German = Verzeichnis~ der~ Schemata ,
+ Norwegian = Skjemaliste ,
+ Nynorsk = Skjemaliste ,
+ Danish = Skemaliste
+ }
+
+\chemmacros_declare_translations:nn {scheme}
+ {
+ fallback = scheme ,
+ English = scheme ,
+ German = Schema ,
+ Norwegian = skjema ,
+ Nynorsk = skjema ,
+ Danish = skema
+ }
+
+\chemmacros_declare_translations:nn {Scheme}
+ {
+ fallback = Scheme ,
+ English = Scheme ,
+ German = Schema ,
+ Norwegian = Skjema ,
+ Nynorsk = Skjema ,
+ Danish = Skema
+ }
+
+\chemmacros_declare_translations:nn {schemes}
+ {
+ fallback = schemes ,
+ English = schemes ,
+ German = Schemata ,
+ Norwegian = skjema ,
+ Nynorsk = skjema ,
+ Danish = skemaer
+ }
+
+\chemmacros_declare_translations:nn {Schemes}
+ {
+ fallback = Schemes ,
+ English = Schemes ,
+ German = Schemata ,
+ Norwegian = Skjema ,
+ Nynorsk = Skjema ,
+ Danish = Skemaer
+ }
-\file_input_stop:
% --------------------------------------------------------------------------
-2020/02/03 - lazy boolean evaluation
- - prefer the kernel commands to \chemmacros_leave_vmode: and
- \chemmacros_tex_if:
+\ChemModuleEnd
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros4.sty b/Master/texmf-dist/tex/latex/chemmacros/chemmacros4.sty
deleted file mode 100644
index 650837e701a..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros4.sty
+++ /dev/null
@@ -1,4100 +0,0 @@
-% --------------------------------------------------------------------------
-% the CHEMMACROS package
-%
-% comprehensive support for typesetting chemistry documents
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-\RequirePackage{ expl3 , xparse , l3keys2e }
-\def\chemmacros@version{4.7a}
-\def\chemmacros@date{2015/08/16}
-
-\ExplSyntaxOn
-\ProvidesExplPackage
- {chemmacros4}
- {\chemmacros@date}
- {\chemmacros@version}
- {\c_chemmacros_info_tl \c_space_tl (CN)}
-
-% --------------------------------------------------------------------------
-% variants of kernel commands:
-\cs_generate_variant:Nn \prop_if_in:NnTF { NV , Nx }
-\cs_generate_variant:Nn \prop_put:Nnn { NV , NVV , NVx }
-\cs_generate_variant:Nn \prop_get:NnNTF { NV }
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV }
-\cs_generate_variant:Nn \tl_if_eq:nnTF { V }
-\cs_generate_variant:Nn \tl_const:cn { cV }
-
-% --------------------------------------------------------------------------
-% load required packages
-% the technical ones:
-\RequirePackage { environ , scrlfile , etoolbox , translations }
-% related to other topics like mathematics or graphics:
-\RequirePackage { xfrac , siunitx , tikz, mathtools , bm }
-% other packages of this bundle -- ghsystem is not loaded here but at the end
-% of the preamble depending on a package option:
-\RequirePackage { chemformula , chemgreek }
-% TikZ libraries (the don't like expl3 syntax):
-\ExplSyntaxOff
-\usetikzlibrary{calc,arrows}
-\ExplSyntaxOn
-
-% --------------------------------------------------------------------------
-% boolean variables for the package options
-\bool_new:N \l__chemmacros_xspace_bool
-\bool_set_true:N \l__chemmacros_xspace_bool
-
-\bool_new:N \l__chemmacros_circled_bool
-\bool_set_true:N \l__chemmacros_circled_bool
-\bool_new:N \l__chemmacros_circled_formal_bool
-\bool_set_true:N \l__chemmacros_circled_formal_bool
-\bool_new:N \l__chemmacros_circled_chem_bool
-\bool_set_true:N \l__chemmacros_circled_chem_bool
-
-\bool_new:N \l__chemmacros_EZ_cool_bool
-\bool_new:N \l__chemmacros_Nu_mathspec_bool
-\bool_new:N \l__chemmacros_chemstyle_bool
-\bool_new:N \l__chemmacros_hyperref_bool
-\bool_new:N \l__chemmacros_varioref_bool
-\bool_new:N \l__chemmacros_chemfig_bool
-\bool_new:N \l__chemmacros_ghsystem_bool
-% \bool_set_true:N \l__chemmacros_ghsystem_bool
-
-\bool_new:N \l__chemmacros_iupac_restricted_bool
-\bool_new:N \l__chemmacros_iupac_strict_bool
-\bool_new:N \l__chemmacros_in_document_bool
-
-\AtBeginDocument
- {
- \bool_set_true:N \l__chemmacros_in_document_bool
- \@ifpackageloaded { chemstyle }
- { \bool_set_true:N \l__chemmacros_chemstyle_bool }
- { \bool_set_false:N \l__chemmacros_chemstyle_bool }
- \@ifpackageloaded { varioref }
- { \bool_set_true:N \l__chemmacros_varioref_bool }
- { \bool_set_false:N \l__chemmacros_varioref_bool }
- \@ifpackageloaded { hyperref }
- { \bool_set_true:N \l__chemmacros_hyperref_bool }
- { \bool_set_false:N \l__chemmacros_hyperref_bool }
- \@ifpackageloaded { chemfig }
- { \bool_set_true:N \l__chemmacros_chemfig_bool }
- { \bool_set_false:N \l__chemmacros_chemfig_bool }
- }
-
-% --------------------------------------------------------------------------
-% warning / error messages
-\msg_new:nnnn { chemmacros } { language-not-defined }
- { The~ language~ `#1'~ is~ not~ defined~ by~ chemmacros. }
- {
- You~ chose~ the~ language~ `#1'~ which~ is~ not~ defined~ by~ chemmacros.~
- `english'~ is~ used~ instead.~ If~ you~ just~ mistyped~ try~ again!~
- Otherwise~ contact~ the~ author~ and~ he'll~ probably~ add~ your~ language.
- }
-
-\msg_new:nnnn { chemmacros } { already-defined }
- { The~ command~ #1~ is~ already~ defined. }
- {
- The~ command~ #1~ has~ already~ been~ otherwise.~ chemmacros~ also~ tries~
- to~ define~ it~ and~ fails.~
- }
-
-\msg_new:nnnn { chemmacros } { not-defined }
- { The~ command~ #1~ is~ not~ defined,~ yet. }
- {
- The~ command~ #1~ is~ not~ defined,~ yet.~ chemmacros~ tries~ to~
- redefine~ it~ and~ fails.~
- }
-
-\msg_new:nnnn { chemmacros } { option-deprecated }
- { The~ option~ `#1'~ is~ deprecated.~ I~ will~ ignore~ it. }
- {
- The~ package~ option~ `#1'~ is~ deprecated~ and~ not~ used~ by~
- chemmacros~ any~ more.~ It~ will~ therefore~ simply~ be~ ignored.
- }
-
-\msg_new:nnnn { chemmacros } { command-deprecated }
- {
- The~ command~ \token_to_str:N #1 \c_space_tl is~ deprecated.~ Use~
- \token_to_str:N #2 \c_space_tl instead.
- }
- {
- The~ command~ \token_to_str:N #1 \c_space_tl is~ deprecated.~ Use~
- \token_to_str:N #2 \c_space_tl instead.
- }
-
-\msg_new:nnnn { chemmacros } { command-dropped }
- {
- The~ command~ \token_to_str:N #1 \c_space_tl has~ been~ dropped.~ I'm~
- sorry.
- }
- {
- The~ command~ \token_to_str:N #1 \c_space_tl has~ been~ dropped.~ I'm~
- sorry.
- }
-
-\msg_new:nnnn { chemmacros } { new-particle }
- {
- The~ command~ sequence~ \token_to_str:N #1 \c_space_tl is~ already~
- defined.
- }
- {
- You've~ tried~ to~ define~ a~ particle~ with~ \token_to_str:N
- \NewChemParticle ,~ but~ the~ command~ sequence~ \token_to_str:N #1
- \c_space_tl already~ exists.~ Please~ choose~ another~ name.
- }
-
-\msg_new:nnnn { chemmacros } { renew-particle }
- { The~ particle~ \token_to_str:N #1 \c_space_tl is~ not~ defined. }
- {
- You've~ tried~ to~ renew~ the~ particle~ \token_to_str:N #1 ,~ but~ it~
- doesn't~ exist.
- }
-
-\msg_new:nnnn { chemmacros } { new-latin }
- {
- The~ command~ sequence~ \token_to_str:N #1 \c_space_tl is~ already~
- defined.
- }
- {
- You've~ tried~ to~ define~ a~ latin~ phrase~ with~\token_to_str:N
- \NewChemLatin ,~ but~ the~ command~ sequence~ \token_to_str:N #1
- \c_space_tl already~ exists.~ Please~ choose~ another~ name.
- }
-
-\msg_new:nnnn { chemmacros } { renew-latin }
- { The~ latin~ phrase \token_to_str:N #1 \c_space_tl is~ not~ defined. }
- {
- You've~ tried~ to~ renew~ the~ latin~ phrase~ \token_to_str:N #1 ,~ but~
- it~ doesn't~ exist.
- }
-
-\msg_new:nnnn { chemmacros } { new-nmr }
- {
- The~ command~ sequence~ \token_to_str:N #1 \c_space_tl is~ already~
- defined.
- }
- {
- You've~ tried~ to~ define~ a~ NMR~ command~ with~\token_to_str:N
- \NewChemParticle ,~ but~ the~ command~ sequence~ \token_to_str:N #1
- \c_space_tl already~ exists.~ Please~ choose~ another~ name.
- }
-
-\msg_new:nnnn { chemmacros } { renew-nmr }
- { The~ NMR~ command~ \token_to_str:N #1 \c_space_tl is~ not~ defined. }
- {
- You've~ tried~ to~ renew~ the~ NMR~ command~ \token_to_str:N #1 ,~ but~
- it~ doesn't~ exist.
- }
-
-\msg_new:nnnn { chemmacros } { new-phase }
- {
- The~ command~ sequence~ \token_to_str:N #1 \c_space_tl is~ already~
- defined.
- }
- {
- You've~ tried~ to~ define~ a~ phase~ with~ \token_to_str:N
- \NewChemPhase ,~ but~ the~ command~ sequence~ \token_to_str:N #1
- \c_space_tl already~ exists.~ Please~ choose~ another~ name.
- }
-
-\msg_new:nnnn { chemmacros } { renew-phase }
- { The~ phase~ \token_to_str:N #1 \c_space_tl is~ not~ defined. }
- {
- You've~ tried~ to~ renew~ the~ phase~ \token_to_str:N #1 ,~ but~ it~
- doesn't~ exist.
- }
-
-\msg_new:nnnn { chemmacros } { new-iupac }
- {
- The~ iupac~ naming~ command~ \token_to_str:N #1 \c_space_tl is~ already~
- defined.
- }
- {
- You've~ tried~ to~ define~ a~ iupac~ naming~ command~ with~
- \token_to_str:N \NewChemIUPAC ,~ but~ the~ iupac~ command~
- \token_to_str:N #1 \c_space_tl already~ exists.~ Choose~ another~ name~
- or~ use~ \token_to_str:N \RenewChemIUPAC .
- }
-
-\msg_new:nnnn { chemmacros } { renew-iupac }
- {
- The~ iupac~ naming~ command~ \token_to_str:N #1 \c_space_tl is~ not~
- defined.
- }
- {
- You've~ tried~ to~ renew~ the~ iupac~ command~ \token_to_str:N #1 ,~ but~
- it~ doesn't~ exist.~ Use~ \token_to_str:N \NewChemIUPAC \c_space_tl
- instead.
- }
-
-\msg_new:nnnn { chemmacros } { let-iupac }
- {
- The~ iupac~ naming~ command~ \token_to_str:N #2 \c_space_tl is~ not~
- defined.
- }
- {
- You've~ tried~ to~ let~ the~ iupac~ command~ \token_to_str:N #1 ~ to~ the~
- iupac~ command~ \token_to_str:N #2 ,~ but~ the~ latter~ doesn't~ exist.~
- Use~ \token_to_str:N \NewChemIUPAC \c_space_tl instead~ or~declare~
- \token_to_str:N #2 \c_space_tl first.
- }
-
-\msg_new:nnnn { chemmacros } { ox }
- { \token_to_str:N \ox \c_space_tl : ~ #1 ~ \msg_line_context: . }
- { \token_to_str:N \ox \c_space_tl : ~ #1 ~ \msg_line_context: . }
-
-\msg_new:nnnn { chemmacros } { OX }
- { \token_to_str:N \OX \c_space_tl : ~ #1 ~ \msg_line_context: . }
- { \token_to_str:N \OX \c_space_tl : ~ #1 ~ \msg_line_context: . }
-
-\msg_new:nnnn { chemmacros } { redox }
- { \token_to_str:N \redox \c_space_tl : ~ #1 ~ \msg_line_context: . }
- { \token_to_str:N \redox \c_space_tl : ~ #1 ~ \msg_line_context: . }
-
-\msg_new:nnnn { chemmacros } { chemfig }
- {
- You~ need~ to~ load~ the~ `chemfig'~ package~ in~ order~ to~ make~
- \exp_after:wN \token_to_str:N \cs:w #1 \cs_end: \c_space_tl work~
- properly~ \msg_line_context: .
- }
- {
- You~ need~ to~ load~ the~ `chemfig'~ package~ in~ order~ to~ make~
- \exp_after:wN \token_to_str:N \cs:w #1 \cs_end: \c_space_tl work~
- properly~ \msg_line_context: .
- }
-
-\msg_new:nnnn { chemmacros } { new-state }
- {
- The~ state~ \exp_after:wN \token_to_str:N \cs:w #1 \cs_end: \c_space_tl
- already~ exists.~ You~ need~ to~ use~ \token_to_str:N \RenewChemState
- \c_space_tl to~ alter~ it~ \msg_line_context: .
- }
- {
- The~ state~ \exp_after:wN \token_to_str:N \cs:w #1 \cs_end: \c_space_tl
- already~ exists.~ You~ need~ to~ use~ \token_to_str:N \RenewChemState
- \c_space_tl to~ alter~ it~ \msg_line_context: .
- }
-
-\msg_new:nnnn { chemmacros } { renew-state }
- {
- The~ state~ \exp_after:wN \token_to_str:N \cs:w #1 \cs_end: \c_space_tl
- isn't~ set~ up~ yet.~ You~ need~ to~ use~ \token_to_str:N
- \NewChemState \c_space_tl to~ create~ it~ \msg_line_context: .
- }
- {
- The~ state~ \exp_after:wN \token_to_str:N \cs:w #1 \cs_end: \c_space_tl
- isn't~ set~ up~ yet.~ You~ need~ to~ use~ \token_to_str:N
- \NewChemState \c_space_tl to~ create ~it~ \msg_line_context: .
- }
-
-\msg_new:nnn { chemmacros } { state-syntax }
- {
- You're~ using~ a~ no~ longer~ recommended~ syntax~ to~ (re-)define~ a~
- state~ variable~ \msg_line_context: .~ This~ syntax~ may~ deprecate~ and~
- be~ removed~ in~ the~ future.
- }
-
-% declare an option as deprecated:
-\cs_new_protected:Npn \chemmacros_option_deprecated:n #1
- { \msg_warning:nnn { chemmacros } { option-deprecated } { #1 } }
-
-% define a deprecated command with hints to the corresponding new one:
-\cs_new_protected:Npn \chemmacros_define_deprecated:NN #1#2
- {
- \cs_set_protected:Npn #1
- {
- \msg_warning:nnxx { chemmacros } { command-deprecated }
- { #1 } { #2 }
- #2
- }
- }
-
-\NewDocumentCommand \DeclareChemDeprecated { mm }
- { \chemmacros_define_deprecated:NN #1 #2 }
-
-% define a command as dropped!
-\cs_new_protected:Npn \chemmacros_define_dropped:N #1
- {
- \cs_set_protected:Npn #1
- { \msg_error:nnn { chemmacros } { command-dropped } { #1 } }
- }
-
-\NewDocumentCommand \DeclareChemDropped { m }
- { \chemmacros_define_dropped:N #1 }
-
-% --------------------------------------------------------------------------
-% temporary variables
-\tl_new:N \l__chemmacros_tmpa_tl
-\tl_new:N \l__chemmacros_tmpb_tl
-\int_new:N \l__chemmacros_tmpa_int
-\box_new:N \l__chemmacros_tmpa_box
-
-% --------------------------------------------------------------------------
-% language settings:
-\bool_new:N \l__chemmacros_language_auto_bool
-\bool_set_true:N \l__chemmacros_language_auto_bool
-% this token list will hold the chosen language for chemmacros; since the
-% language is either chosen automatically or by option it is only available at
-% begin document
-\tl_new:N \l_chemmacros_language_tl
-\tl_set:Nn \l_chemmacros_language_tl { english }
-\tl_new:N \l__chemmacros_current_language_tl
-
-% translate the key #1
-\cs_new:Npn \chemmacros_translate:n #1
- {
- \bool_if:NTF \l__chemmacros_language_auto_bool
- { \GetTranslation{#1} }
- { \GetTranslationFor{\l_chemmacros_language_tl}{#1} }
- }
-
-\AtBeginDocument{
- \bool_if:NTF \l__chemmacros_language_auto_bool
- {
- \tl_set:Nx \l_chemmacros_language_tl
- { \@trnslt@language{\@trnslt@current@language} }
- }
- {
- \tl_set_eq:NN
- \l_chemmacros_language_tl
- \l__chemmacros_current_language_tl
- }
-}
-
-% --------------------------------------------------------------------------
-% package options
-% circled => circle charges
-% detect-bold => behaviour when font series bold
-% EZ => cool or chemmacros version of \E
-% german => change pKA => pKS etc
-% iupac => behaviour of nomenclature commands
-% ngerman => an alias :)
-% ghsystem => load ghsystem or don't
-% method => use `chemformula' or `mhchem'
-% strict => errors or warnings
-% synchronize => let particles et.al. adapt chemformula's font selection
-% ugreek => behaviour of \chemDelta, \chemalpha, ...
-% version=1 => compatibility for documents set with v1.*
-% xspace => add an \xspace after a whole bunch of macros
-
-% this boolean has to be public since the other packages of the bundle may
-% want to know its value
-
-\bool_new:N \l__chemmacros_detect_bold_bool
-\bool_set_true:N \l__chemmacros_detect_bold_bool
-
-\bool_new:N \l__chemmacros_option_greek_set_bool
-\bool_new:N \l__chemmacros_use_upgreek_bool
-\bool_new:N \l__chemmacros_use_textgreek_bool
-\bool_new:N \l__chemmacros_use_kpfonts_bool
-\bool_new:N \l__chemmacros_use_newtx_bool
-
-\cs_new:Npn \chemmacros_inner_font: {}
-
-\keys_define:nn { chemmacros / option }
- {
- compatibility .code:n = ,
- bpchem .code:n = \chemmacros_option_deprecated:n { bpchem } ,
- circletype .choice: ,
- circletype / math .code:n =
- { \bool_set_false:N \l__chemmacros_circled_chem_bool } ,
- circletype / chem .code:n =
- { \bool_set_true:N \l__chemmacros_circled_chem_bool } ,
- circletype .default:n = chem ,
- circled .choice: ,
- circled / none .code:n =
- {
- \bool_set_false:N \l__chemmacros_circled_bool
- \bool_set_false:N \l__chemmacros_circled_formal_bool
- } ,
- circled / formal .code:n =
- {
- \bool_set_true:N \l__chemmacros_circled_bool
- \bool_set_true:N \l__chemmacros_circled_formal_bool
- } ,
- circled / all .code:n =
- {
- \bool_set_true:N \l__chemmacros_circled_bool
- \bool_set_false:N \l__chemmacros_circled_formal_bool
- } ,
- circled .default:n = all ,
- detect-bold .code:n = \chemmacros_option_deprecated:n { detect-bold } ,
- EZ .code:n = \chemmacros_option_deprecated:n { EZ } ,
- german .code:n =
- \tl_set:Nn \l__chemmacros_current_language_tl { german } ,
- ngerman .code:n =
- \tl_set:Nn \l__chemmacros_current_language_tl { ngerman } ,
- ghsystem .bool_set:N = \l__chemmacros_ghsystem_bool ,
- ghsystem .default:n = true ,
- iupac .choice: ,
- iupac / restricted .code:n =
- \bool_set_true:N \l__chemmacros_iupac_restricted_bool
- \bool_set_false:N \l__chemmacros_iupac_strict_bool ,
- iupac / auto .code:n =
- \bool_set_false:N \l__chemmacros_iupac_restricted_bool
- \bool_set_false:N \l__chemmacros_iupac_strict_bool ,
- iupac / strict .code:n =
- \bool_set_false:N \l__chemmacros_iupac_restricted_bool
- \bool_set_true:N \l__chemmacros_iupac_strict_bool ,
- language .code:n =
- \tl_if_eq:nnTF { #1 } { auto }
- { \bool_set_true:N \l__chemmacros_language_auto_bool }
- {
- \bool_set_false:N \l__chemmacros_language_auto_bool
- \tl_set:Nn \l__chemmacros_current_language_tl { #1 }
- } ,
- method .choice: ,
- method / chemformula .code:n =
- \chemmacros_option_deprecated:n { method } ,
- method / mhchem .code:n =
- \chemmacros_option_deprecated:n { method } ,
- Nu .choice: ,
- Nu / mathspec .code:n =
- \bool_set_true:N \l__chemmacros_Nu_mathspec_bool ,
- Nu / chemmacros .code:n =
- \bool_set_false:N \l__chemmacros_Nu_mathspec_bool ,
- strict .code:n =
- \chemmacros_option_deprecated:n { strict } ,
- synchronize .choice: ,
- synchronize / true .code:n =
- \cs_set_eq:NN \chemmacros_inner_font: \chemformula_font_inner: ,
- synchronize / false .code:n = \cs_set:Nn \chemmacros_inner_font: {} ,
- synchronize .default:n = true ,
- greek .choice: ,
- greek / upgreek .code:n =
- \chemgreek_activate_mapping:n { upgreek }
- \bool_set_true:N \l__chemmacros_option_greek_set_bool ,
- greek / textgreek .code:n =
- \chemgreek_activate_mapping:n { textgreek }
- \bool_set_true:N \l__chemmacros_option_greek_set_bool ,
- greek / kpfonts .code:n =
- \chemgreek_activate_mapping:n { kpfonts }
- \bool_set_true:N \l__chemmacros_option_greek_set_bool ,
- greek / newtx .code:n =
- \chemgreek_activate_mapping:n { newtx }
- \bool_set_true:N \l__chemmacros_option_greek_set_bool ,
- greek / mathdesign .code:n =
- \chemgreek_activate_mapping:n { mathdesign }
- \bool_set_true:N \l__chemmacros_option_greek_set_bool ,
- greek / fourier .code:n =
- \chemgreek_activate_mapping:n { fourier }
- \bool_set_true:N \l__chemmacros_option_greek_set_bool ,
- greek / textalpha .code:n =
- \chemgreek_activate_mapping:n { textalpha }
- \bool_set_true:N \l__chemmacros_option_greek_set_bool ,
- greek / math .code:n =
- \chemgreek_activate_mapping:n { default }
- \bool_set_true:N \l__chemmacros_option_greek_set_bool ,
- greek / auto .code:n =
- \bool_set_false:N \l__chemmacros_option_greek_set_bool ,
- greek .default:n = auto ,
- upgreek .code:n = \chemmacros_option_deprecated:n { upgreek } ,
- version .code:n = \chemmacros_option_deprecated:n { version } ,
- cmversion .code:n = \chemmacros_option_deprecated:n { cmversion } ,
- cmversion .choice: ,
- xspace .bool_set:N = \l__chemmacros_xspace_bool ,
- xspace .default:n = true
- }
-
-
-
-\ProcessKeysOptions { chemmacros / option }
-
-% --------------------------------------------------------------------------
-% set up a few things:
-% - is `ghsystem' requested?
-% - do we need `xspace'?
-% - what about the greek letters?
-
-\seq_new:N \l__chemmacros_greek_packages_seq
-\prop_new:N \l__chemmacros_greek_mapping_prop
-
-\cs_new_protected:Npn \chemmacros_add_greek_package_mapping:nn #1#2
- {
- \seq_put_right:Nn \l__chemmacros_greek_packages_seq {#1}
- \prop_put:Nnn \l__chemmacros_greek_mapping_prop {#1} {#2}
- }
-
-\cs_generate_variant:Nn \chemgreek_activate_mapping:n { V }
-
-\cs_new_protected:Npn \__chemmacros_select_greek_mapping:n #1
- {
- \bool_if:NF \l__chemmacros_option_greek_set_bool
- {
- \@ifpackageloaded { #1 }
- {
- \prop_get:NnN
- \l__chemmacros_greek_mapping_prop
- { #1 }
- \l__chemmacros_tmpa_tl
- \chemgreek_activate_mapping:V \l__chemmacros_tmpa_tl
- \bool_set_true:N \l__chemmacros_option_greek_set_bool
- \seq_map_break:
- }
- { }
- }
- }
-
-\chemmacros_add_greek_package_mapping:nn {upgreek} {upgreek}
-\chemmacros_add_greek_package_mapping:nn {textgreek} {textgreek}
-\chemmacros_add_greek_package_mapping:nn {mathdesign} {mathdesign}
-\chemmacros_add_greek_package_mapping:nn {kpfonts} {kpfonts}
-\chemmacros_add_greek_package_mapping:nn {newtxmath} {newtx}
-\chemmacros_add_greek_package_mapping:nn {fourier} {fourier}
-\chemmacros_add_greek_package_mapping:nn {textalpha} {textalpha}
-
-\AtEndPreamble
- {
- \bool_if:NT \l__chemmacros_ghsystem_bool
- { \RequirePackage { ghsystem } }
- \bool_if:NT \l__chemmacros_xspace_bool
- { \RequirePackage { xspace } }
- \seq_map_function:NN
- \l__chemmacros_greek_packages_seq
- \__chemmacros_select_greek_mapping:n
- }
-
-\cs_new_protected:Npn \chemmacros_xspace:
- { \bool_if:NT \l__chemmacros_xspace_bool { \xspace } }
-
-% --------------------------------------------------------------------------
-% TikZ drawings - helper macros
-\cs_new_protected:Npn \chemmacros_tikz_picture:nn #1#2
- { \tikzpicture[#1] #2 \endtikzpicture }
-\cs_generate_variant:Nn \chemmacros_tikz_picture:nn { fn,xn }
-
-\cs_new_protected:Npn \chemmacros_tikz_draw:n #1
- { \draw[#1] }
-\cs_generate_variant:Nn \chemmacros_tikz_draw:n { f,x }
-
-\cs_new_protected:Npn \chemmacros_tikz_node:n #1
- { \node[#1] }
-\cs_generate_variant:Nn \chemmacros_tikz_node:n { f,x }
-
-\cs_new_protected:Npn \chemmacros_tikz_shade:n #1
- { \shade[#1] }
-\cs_generate_variant:Nn \chemmacros_tikz_shade:n { f,x }
-
-\cs_new_protected:Npn \chemmacros_tikz_shadedraw:n #1
- { \shadedraw[#1] }
-\cs_generate_variant:Nn \chemmacros_tikz_shadedraw:n { f,x }
-
-\cs_new_protected:Npn \chemmacros_tikz_node_in_draw:n #1
- { node[#1] }
-\cs_generate_variant:Nn \chemmacros_tikz_node_in_draw:n { f,x }
-
-% --------------------------------------------------------------------------
-% a few general functions:
-\cs_new_eq:NN \mode_leave_vertical: \chemformula_leave_vmode:
-\cs_new_eq:NN \chemmacros_ignore_spaces: \tex_ignorespaces:D
-\cs_new_eq:NN \chemmacros_nobreak: \chemformula_nobreak:
-\cs_new_eq:NN \chemmacros_allow_break: \chemformula_allow_break:
-\cs_new_eq:NN \chemmacros_skip_nobreak:N \chemformula_skip_nobreak:N
-\cs_new:Npn \chemmacros_remove_backslash:N #1
- { \exp_after:wN \use_none:n \token_to_str:N #1 }
-
-\prg_new_protected_conditional:Npnn \chemmacros_if_is_cs:n #1 { T,F,TF }
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl { \token_if_cs:NTF #1 { } { x } }
- \tl_if_blank:VTF \l__chemmacros_tmpa_tl
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-% detection and handling of bold face:
-\prg_new_protected_conditional:Npnn \chemmacros_if_bold: { T,F,TF }
- {
- \seq_if_in:NVTF \l__chemmacros_if_bf_seq \f@series
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-\seq_new:N \l__chemmacros_if_bf_seq
-
-\seq_set_split:Nnn \l__chemmacros_if_bf_seq { , }
- {
- b , bc , bm , bx , bux ,
- eb , ebc , ebx , mb ,
- sb , sbc , sbx ,
- ub , ubc , ubx
- }
-
-\cs_new_protected:Npn \chemmacros_bm:n #1
- {
- \bool_if:NTF \l__chemmacros_detect_bold_bool
- { \bm { #1 } }
- { #1 }
- }
-
-\cs_new_protected:Npn \chemmacros_bf:n #1
- {
- \bool_if:NTF \l__chemmacros_detect_bold_bool
- { { \normalfont \bfseries #1 } }
- { { \normalfont #1 } }
- }
-
-\cs_new_protected:Npn \chemmacros_detect_bold:n #1
- {
- \chemmacros_if_bold:TF
- {
- \mode_if_math:TF
- { \chemmacros_bm:n { #1 } }
- { \chemmacros_bf:n { #1 } }
- }
- { #1 }
- }
-
-% ---------------------------------------------------------------------------
-% transition state symbol
-\cs_new_protected:Npn \__chemmacros_transition_state:
- {
- \text
- {
- \skip_horizontal:n { .1ex }
- \hbox_overlap_right:n
- { \rule { .6ex } { 0pt } \rule { .05ex } { 1.3ex } }
- \hbox_overlap_right:n { \rule [ .4ex ] { 1.3ex } { .05ex } }
- \rule [ .85ex ] { 1.3ex } { .05ex }
- \skip_horizontal:n { .1ex }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_transition_state:
- {
- \ensuremath
- {
- \mathchoice
- { \displaystyle }
- { \textstyle }
- { \scriptstyle }
- { \scriptscriptstyle }
- \__chemmacros_transition_state:
- }
- }
-
-% \DeclareDocumentCommand?
-\cs_new_eq:NN \transitionstatesymbol \chemmacros_transition_state:
-
-% --------------------------------------------------------------------------
-% let's make use of `chemformula' inside some of `chemmacros' commands:
-\cs_new_protected:Nn \chemmacros_atom:n
- {
- \mode_if_math:TF
- { \text { \chemmacros_inner_font: #1 } }
- { \group_begin: \chemmacros_inner_font: #1 \group_end: }
- }
-\cs_generate_variant:Nn \chemmacros_atom:n { V }
-
-\cs_new_protected:Npn \chemmacros_text:n #1
- { \mode_if_math:TF { \text { #1 } } { #1 } }
-
-\tl_new:N \l__chemmacros_chemformula_tl
-
-\cs_new_protected:Npn \chemmacros_chemformula:n #1
- {
- \group_begin:
- \cs_set_eq:NN \chemformula_font_inner: \chemmacros_inner_font:
- \chemformula_chcpd:nn {} { #1 }
- \group_end:
- }
-\cs_generate_variant:Nn \chemmacros_chemformula:n { x,V }
-
-% --------------------------------------------------------------------------
-% particles, charges
-\NewDocumentCommand \NewChemParticle { mm }
- {
- \cs_if_free:NTF #1
- { \chemmacros_define_particle:Nn #1 { #2 } }
- { \msg_error:nnn { chemmacros } { new-particle } { #1 } }
- }
-
-\NewDocumentCommand \RenewChemParticle { mm }
- {
- \cs_if_free:NTF #1
- { \msg_error:nnn { chemmacros } { renew-particle } { #1 } }
- { \chemmacros_define_particle:Nn #1 { #2 } }
- }
-
-\NewDocumentCommand \DeclareChemParticle { mm }
- { \chemmacros_define_particle:Nn #1 { #2 } }
-
-\cs_new_protected:Nn \chemmacros_define_particle:Nn
- {
- \cs_set_protected:Npn #1
- {
- \chemformula_chcpd:nn {} { #2 }
- \chemmacros_xspace:
- }
- }
-
-\NewChemParticle \el { e- }
-\NewChemParticle \prt { p+ }
-\NewChemParticle \ntr { n^0 }
-
-% --------------------------------------------------------------------------
-% charges
-% circled charge signs: they are defined in the `chemformula' module:
-% use directly:
-
-\cs_new_protected:Npn \fplus { { \chemformula_fplus: } }
-\cs_new_protected:Npn \fminus { { \chemformula_fminus: } }
-
-% change output depending on circled-option
-\cs_new_eq:NN \chemmacros_plus: \chemformula_plus:
-\cs_new_eq:NN \chemmacros_minus: \chemformula_minus:
-
-\cs_new_protected:Npn \chemmacros_formal_plus:
- {
- \group_begin:
- \bool_set_true:N \l_chemformula_formal_charges_bool
- \chemformula_plus:
- \group_end:
- }
-
-\cs_new_protected:Npn \chemmacros_formal_minus:
- {
- \group_begin:
- \bool_set_true:N \l_chemformula_formal_charges_bool
- \chemformula_minus:
- \group_end:
- }
-
-\cs_new_protected:Npn \chemmacros_charge:n #1
- {
- \chemformula_superscript:n
- { \chemmacros_detect_bold:n { #1 } }
- }
-
-\keys_define:nn { chemmacros / charges }
- { append .code:n = \chemmacros_option_deprecated:n { append } }
-
-\NewDocumentCommand \mch { o }
- {
- \IfNoValueTF { #1 }
- { \chemmacros_charge:n { \chemmacros_minus: } }
- { \chemmacros_charge:n { #1 \chemmacros_minus: } }
- }
-
-\NewDocumentCommand \pch { o }
- {
- \IfNoValueTF { #1 }
- { \chemmacros_charge:n { \chemmacros_plus: } }
- { \chemmacros_charge:n { #1 \chemmacros_plus: } }
- }
-
-\NewDocumentCommand \fmch { o }
- {
- \IfNoValueTF { #1 }
- { \chemmacros_charge:n { \chemmacros_formal_minus: } }
- { \chemmacros_charge:n { #1 \chemmacros_formal_minus: } }
- }
-
-\NewDocumentCommand \fpch { o }
- {
- \IfNoValueTF { #1 }
- { \chemmacros_charge:n { \chemmacros_formal_plus: } }
- { \chemmacros_charge:n { #1 \chemmacros_formal_plus: } }
- }
-
-\tl_new:N \l__chemmacros_partial_charge_format_tl
-\tl_set:Nn \l__chemmacros_partial_charge_format_tl { \tiny }
-
-\cs_new_protected:Npn \delm
- {
- \mbox {
- \l__chemmacros_partial_charge_format_tl
- \c_math_toggle_token \delta \chemmacros_minus: \c_math_toggle_token
- }
- \chemmacros_xspace:
- }
-\cs_new_protected:Npn \delp
- {
- \mbox {
- \l__chemmacros_partial_charge_format_tl
- \c_math_toggle_token \delta \chemmacros_plus: \c_math_toggle_token
- }
- \chemmacros_xspace:
- }
-\cs_new_protected:Npn \fdelm
- {
- \mbox {
- \l__chemmacros_partial_charge_format_tl
- \c_math_toggle_token \delta \chemmacros_formal_minus: \c_math_toggle_token
- }
- \chemmacros_xspace:
- }
-\cs_new_protected:Npn \fdelp
- {
- \mbox {
- \l__chemmacros_partial_charge_format_tl
- \c_math_toggle_token \delta \chemmacros_formal_plus: \c_math_toggle_token
- }
- \chemmacros_xspace:
- }
-
-\cs_new_protected:Npn \scrm
- { \ensuremath { \scriptstyle \chemmacros_minus: } }
-\cs_new_protected:Npn \scrp
- { \ensuremath { \scriptstyle \chemmacros_plus: } }
-\cs_new_protected:Npn \fscrm
- { \ensuremath { \scriptstyle \chemmacros_formal_minus: } }
-\cs_new_protected:Npn \fscrp
- { \ensuremath { \scriptstyle \chemmacros_formal_plus: } }
-\cs_new_protected:Npn \fsscrm
- { \ensuremath { \scriptscriptstyle \chemmacros_formal_minus: } }
-\cs_new_protected:Npn \fsscrp
- { \ensuremath { \scriptscriptstyle \chemmacros_formal_plus: } }
-
-\keys_define:nn { chemmacros / charges }
- {
- partial-format .tl_set:N = \l__chemmacros_partial_charge_format_tl
- }
-
-% --------------------------------------------------------------------------
-% ions, molecules
-% proton, hydroxide, hydronium/oxonium, water, nucleophile, electrophile
-\NewChemParticle \Hpl { H+ }
-\NewChemParticle \Hyd { OH- }
-\NewChemParticle \HtO { H3O+ }
-\NewChemParticle \El { E+ }
-\NewChemParticle \water { H2O }
-
-\NewDocumentCommand \chemmacros_Nu:w { o }
- {
- \IfNoValueF { #1 } { \keys_set:nn { chemmacros / particle } { #1 } }
- \bool_if:NTF \l__chemmacros_particle_elpair_bool
- { \chemmacros_elpair:n { Nu } \mch }
- { \chemmacros_chemformula:n { Nu- } }
- \chemmacros_xspace:
- }
-
-\AtBeginDocument
- {
- \bool_if:NTF \l__chemmacros_Nu_mathspec_bool
- { \cs_set_eq:NN \Nuc \chemmacros_Nu:w }
- { \cs_set_eq:NN \Nu \chemmacros_Nu:w }
- }
-
-\cs_new_protected:Npn \chemmacros_ba:
- {
- \bool_if:NTF \l__chemmacros_particle_elpair_bool
- { \chemmacros_elpair:n { ba } \mch }
- { \chemmacros_chemformula:n { ba- } }
- \chemmacros_xspace:
- }
-
-\NewDocumentCommand \ba { o }
- {
- \group_begin:
- \IfNoValueF { #1 } { \keys_set:nn { chemmacros / particle } { #1 } }
- \chemmacros_ba:
- \group_end:
- }
-
-\cs_new_protected:Npn \chemmacros_elpair:n #1
- {
- \bool_if:NTF \l__chemmacros_chemfig_bool
- {
- \bool_if:NTF \l__chemmacros_elpair_dots_bool
- { \chlewis { 0: } { #1 } }
- { \chlewis { 0| } { #1 } }
-% { { \chemmacros_inner_font: #1 \chlewis { 0=| } { \vphantom { #1 } } } }
- }
- {
- \msg_error:nnn { chemmacros } { chemfig } { #1 }
- \chemmacros_atom:n { #1 }
- }
- }
-
-\bool_new:N \l__chemmacros_particle_elpair_bool
-\bool_new:N \l__chemmacros_elpair_dots_bool
-
-\keys_define:nn { chemmacros / particle }
- {
- elpair .choice: ,
- elpair / false .code:n =
- { \bool_set_false:N \l__chemmacros_particle_elpair_bool } ,
- elpair / dots .code:n =
- {
- \bool_set_true:N \l__chemmacros_particle_elpair_bool
- \bool_set_true:N \l__chemmacros_elpair_dots_bool
- } ,
- elpair / dash .code:n =
- {
- \bool_set_true:N \l__chemmacros_particle_elpair_bool
- \bool_set_false:N \l__chemmacros_elpair_dots_bool
- } ,
- elpair .default:n = dots
- }
-
-% --------------------------------------------------------------------------
-% IUPAC
-\prop_new:N \l__chemmacros_iupac_prop
-
-\cs_new_protected:Npn \chemmacros_new_iupac:Nn #1#2
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl
- { \chemmacros_remove_backslash:N #1 }
- \prop_if_in:NVTF \l__chemmacros_iupac_prop \l__chemmacros_tmpa_tl
- { \msg_error:nnn { chemmacros } { new-iupac } { #1 } }
- {
- \prop_put:NVn \l__chemmacros_iupac_prop
- \l__chemmacros_tmpa_tl
- { #2 }
- }
- \chemmacros_make_iupac:
- }
-
-\cs_new_protected:Npn \chemmacros_define_iupac:Nn #1#2
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl
- { \chemmacros_remove_backslash:N #1 }
- \prop_put:NVn \l__chemmacros_iupac_prop
- \l__chemmacros_tmpa_tl
- { #2 }
- \chemmacros_make_iupac:
- }
-
-\cs_new_protected:Npn \chemmacros_renew_iupac:Nn #1#2
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl
- { \chemmacros_remove_backslash:N #1 }
- \prop_if_in:NVTF \l__chemmacros_iupac_prop \l__chemmacros_tmpa_tl
- {
- \prop_put:NVn \l__chemmacros_iupac_prop
- \l__chemmacros_tmpa_tl
- { #2 }
- }
- { \msg_error:nnn { chemmacros } { renew-iupac } { #1 } }
- \chemmacros_make_iupac:
- }
-
-\cs_new_protected:Npn \chemmacros_let_iupac:NN #1#2
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl
- { \chemmacros_remove_backslash:N #1 }
- \tl_set:Nx \l__chemmacros_tmpb_tl
- { \chemmacros_remove_backslash:N #2 }
- \prop_get:NVNTF \l__chemmacros_iupac_prop
- \l__chemmacros_tmpb_tl
- \l__chemmacros_tmpc_tl
- {
- \prop_put:NVV \l__chemmacros_iupac_prop
- \l__chemmacros_tmpa_tl
- \l__chemmacros_tmpc_tl
- }
- { \msg_error:nnnn { chemmacros } { let-iupac } { #1 } { #2 } }
- \chemmacros_make_iupac:
- }
-
-\cs_new_protected:Npn \chemmacros_define_deprecated_iupac:NN #1#2
- {
- \chemmacros_define_iupac:Nn #1
- {
- \msg_warning:nnnn { chemmacros } { command-deprecated }
- { #1 } { #2 }
- #2
- }
- }
-
-
-\cs_new_protected:Npn \chemmacros_make_iupac:
- {
- \bool_if:NT \l__chemmacros_in_document_bool
- {
- \bool_if:NTF \l__chemmacros_inside_iupac_bool
- {
- \prop_map_inline:Nn \l__chemmacros_iupac_prop
- { \cs_set_protected:cpn { ##1 } { ##2 } }
- }
- {
- \bool_if:NF \l__chemmacros_iupac_restricted_bool
- {
- \bool_if:NTF \l__chemmacros_iupac_strict_bool
- {
- \prop_map_inline:Nn \l__chemmacros_iupac_prop
- { \cs_set_protected:cpn { ##1 } { ##2 } }
- }
- {
- \prop_map_inline:Nn \l__chemmacros_iupac_prop
- {
- \cs_if_exist:cF { ##1 }
- { \cs_set_protected:cpn { ##1 } { ##2 } }
- }
- }
- }
- }
- }
- }
-
-\AtBeginDocument { \chemmacros_make_iupac: }
-
-\NewDocumentCommand \DeclareChemIUPAC { mm }
- { \chemmacros_define_iupac:Nn #1 { #2 } }
-
-\NewDocumentCommand \NewChemIUPAC { mm }
- { \chemmacros_new_iupac:Nn #1 { #2 } }
-
-\NewDocumentCommand \RenewChemIUPAC { mm }
- { \chemmacros_renew_iupac:Nn #1 { #2 } }
-
-\NewDocumentCommand \LetChemIUPAC { mm }
- { \chemmacros_let_iupac:NN #1 #2 }
-
-\NewDocumentCommand \DeprecateChemIUPAC { mm }
- { \chemmacros_define_deprecated_iupac:NN #1 #2 }
-
-% stereo descriptors and other nomenclature commands
-% Cahn-Ingold-Prelog
-\dim_new:N \l__chemmacros_cip_kern_dim
-\dim_set:Nn \l__chemmacros_cip_kern_dim { .075em }
-
-\keys_define:nn { chemmacros / iupac }
- { cip-kern .dim_set:N = \l__chemmacros_cip_kern_dim }
-
-\NewDocumentCommand \cip { m }
- { \chemmacros_cip:n { #1 } }
-
-\cs_new_protected:Npn \chemmacros_cip:n #1
- { ( \textit{#1} \tex_kern:D \l__chemmacros_cip_kern_dim ) }
-
-\DeprecateChemIUPAC \Rcip \rectus
-\DeprecateChemIUPAC \Scip \sinister
-
-\NewChemIUPAC \rectus { \cip { R } }
-\NewChemIUPAC \sinister { \cip { S } }
-
-\LetChemIUPAC \R \rectus
-\LetChemIUPAC \S \sinister
-
-% TikZ needs : to be other
-\ExplSyntaxOff
-\protected\def\chemmacros@sconf#1%
- {%
- \begingroup
- \tikz[baseline,text height=1.5ex,text depth=.25ex]
- {
- \node[anchor=base] (chemmacros@@Sconf) {#1} ;
- \draw[->,thick,rotate=90]
- ($(chemmacros@@Sconf.center)+(20:.8em)$) arc (20:340:.8em);
- }%
- \endgroup
- }
-
-\protected\def\chemmacros@rconf#1%
- {%
- \begingroup
- \tikz[baseline,text height=1.5ex,text depth=.25ex]
- {
- \node[anchor=base] (chemmacros@@Rconf) {#1} ;
- \draw[<-,thick,rotate=90]
- ($(chemmacros@@Rconf.center)+(20:.8em)$) arc (20:340:.8em) ;
- }%
- \endgroup
- }
-\ExplSyntaxOn
-
-\NewDocumentCommand \Sconf { O{S} } { \chemmacros@sconf { #1 } }
-\NewDocumentCommand \Rconf { O{R} } { \chemmacros@rconf { #1 } }
-
-% E(ntgegen)/Z(usammen)
-\NewChemIUPAC \entgegen { \cip { E } }
-\NewChemIUPAC \zusammen { \cip { Z } }
-
-\LetChemIUPAC \E \entgegen
-\LetChemIUPAC \Z \zusammen
-
-% cis/trans
-\NewChemIUPAC \cis { \textit { cis } }
-\NewChemIUPAC \trans { \textit { trans } }
-
-% fac/mer
-\NewChemIUPAC \fac { \textit { fac } }
-\NewChemIUPAC \mer { \textit { mer } }
-
-% tert
-\NewChemIUPAC \tert { \textit { tert } }
-
-% Fischer
-\NewChemIUPAC \dexter { \textsc { d } }
-\NewChemIUPAC \laevus { \textsc { l } }
-
-\LetChemIUPAC \D \dexter
-\LetChemIUPAC \L \laevus
-
-% ortho/meta/para
-\NewChemIUPAC \ortho { \textit { o } }
-\NewChemIUPAC \meta { \textit { m } }
-\NewChemIUPAC \para { \textit { p } }
-
-% syn/anti
-\NewChemIUPAC \syn { \textit { syn } }
-\NewChemIUPAC \anti { \textit { anti } }
-
-% coordination chemistry
-\bool_new:N \l__chemmacros_bridge_super_bool
-
-\keys_define:nn { chemmacros / iupac }
- {
- bridge-number .choice: ,
- bridge-number / sub .code:n =
- \bool_set_false:N \l__chemmacros_bridge_super_bool ,
- bridge-number / super .code:n =
- \bool_set_true:N \l__chemmacros_bridge_super_bool ,
- coord-use-hyphen .bool_set:N = \l__chemmacros_coord_use_hyphen_bool ,
- coord-use-hyphen .default:n = true
- }
-
-\cs_new_protected:Npn \chemformula_hapto:n #1
- {
- \chemeta \chemformula_superscript:n { #1 }
- \bool_if:NT \l__chemmacros_coord_use_hyphen_bool
- { \chemmacros_break_point_hyphen: }
- }
-
-\cs_new_protected:Npn \chemformula_dento:n #1
- {
- \chemkappa \chemformula_superscript:n { #1 }
- \bool_if:NT \l__chemmacros_coord_use_hyphen_bool
- { \chemmacros_break_point_hyphen: }
- }
-
-\cs_new_protected:Npn \chemformula_bridge:n #1
- {
- \chemmu
- \tl_if_blank:nF { #1 }
- {
- \bool_if:NTF \l__chemmacros_bridge_super_bool
- { \chemformula_superscript:n { #1 } }
- { \chemformula_subscript:n { #1 } }
- }
- \bool_if:NT \l__chemmacros_coord_use_hyphen_bool
- { \chemmacros_break_point_hyphen: }
- }
-
-\NewChemIUPAC \hapto { \chemformula_hapto:n }
-\NewChemIUPAC \dento { \chemformula_dento:n }
-\NewChemIUPAC \bridge { \chemformula_bridge:n }
-
-% attachments to heteroatoms / added hydrogen
-\NewChemIUPAC \hydrogen { \textit { H } }
-\NewChemIUPAC \oxygen { \textit { O } }
-\NewChemIUPAC \nitrogen { \textit { N } }
-\NewChemIUPAC \sulfur { \textit { S } }
-\NewChemIUPAC \phosphorus { \textit { P } }
-
-\LetChemIUPAC \H \hydrogen
-\LetChemIUPAC \O \oxygen
-\LetChemIUPAC \N \nitrogen
-\LetChemIUPAC \Sf \sulfur
-\LetChemIUPAC \P \phosphorus
-
-% language specific settings
-\AtBeginDocument
- {
- \bool_if:NT \l__chemmacros_italian_bool
- {
- \NewChemIUPAC \sin { \textit { sin } }
- \NewChemIUPAC \ter { \textit { ter } }
- }
- }
-
-% greek letters
-\NewChemIUPAC \a { \chemalpha }
-\NewChemIUPAC \b { \chembeta }
-\NewChemIUPAC \g { \chemgamma }
-\NewChemIUPAC \d { \chemdelta }
-\NewChemIUPAC \k { \chemkappa }
-\NewChemIUPAC \m { \chemmu }
-\NewChemIUPAC \n { \chemeta }
-\NewChemIUPAC \w { \chemomega }
-
-% \iupac (basically the same as bpchem's \IUPAC)
-% - allows multiple breaking points as compound names can get really long and
-% especially in multicolumn documents can span more than two lines
-% - add a (very) little space before the hyphen and a little negative space
-% after it
-% - add a little space at breaking points if not broken
-% - enables all naming commands regardless if they're definied otherwise or not
-\cs_new_protected:Nn \chemmacros_allow_hyphens:
- {
- \chemmacros_nobreak:
- \skip_horizontal:N \c_zero_dim
- }
-
-\dim_new:N \l__chemmacros_iupac_hyphen_pre_dim
-\dim_set:Nn \l__chemmacros_iupac_hyphen_pre_dim { .01em }
-\dim_new:N \l__chemmacros_iupac_hyphen_post_dim
-\dim_set:Nn \l__chemmacros_iupac_hyphen_post_dim { -.03em }
-\dim_new:N \l__chemmacros_iupac_break_dim
-\dim_set:Nn \l__chemmacros_iupac_break_dim { .03em }
-
-\keys_define:nn { chemmacros / iupac }
- {
- hyphen-pre-space .dim_set:N = \l__chemmacros_iupac_hyphen_pre_dim ,
- hyphen-post-space .dim_set:N = \l__chemmacros_iupac_hyphen_post_dim ,
- break-space .dim_set:N = \l__chemmacros_iupac_break_dim
- }
-
-\cs_new_protected:Nn \chemmacros_break_point_hyphen:
- {
- \chemmacros_nobreak:
- \tex_discretionary:D { - } { }
- {
- \tex_kern:D \l__chemmacros_iupac_hyphen_pre_dim
- -
- \tex_kern:D \l__chemmacros_iupac_hyphen_post_dim
- }
- \chemmacros_allow_hyphens:
- }
-
-\cs_new_protected:Npn \chemmacros_break_point:
- {
- \chemmacros_nobreak:
- \tex_discretionary:D { - } { }
- { \tex_kern:D \l__chemmacros_iupac_break_dim }
- \chemmacros_allow_hyphens:
- }
-
-\cs_new_protected:Npn \chemmacros_superscript:n #1
- { \mode_if_math:TF { \sb {#1} } { \textsuperscript {#1} } }
-
-\bool_new:N \l__chemmacros_inside_iupac_bool
-
-\char_set_active_eq:NN | \chemmacros_break_point:
-\char_set_active_eq:NN ^ \chemmacros_superscript:n
-
-\group_begin:
-\char_set_catcode_active:N \|
-\char_set_catcode_active:N \^
-
-\cs_new_protected:Npn \chemmacros_iupac:n #1
- {
- \group_begin:
- \bool_set_true:N \l__chemmacros_inside_iupac_bool
- \chemmacros_make_iupac:
- \chemmacros_ignore_spaces:
- \cs_set_eq:NN \- \chemmacros_break_point_hyphen:
- \chemmacros_define_deprecated:NN \| |
- \chemmacros_define_deprecated:NN \^ ^
- \tl_set_rescan:Nnn \l__chemmacros_tmpa_tl
- {
- \char_set_catcode_active:N \|
- \char_set_catcode_active:N \^
- }
- {#1}
- \l__chemmacros_tmpa_tl
- \group_end:
- }
-
-\group_end:
-
-% Thanks to Joseph Wright and Enrico Gregorio for the help on the curious
-% redefinition of \- and the end of the compilation
-% see http://tex.stackexchange.com/q/42405/5049 for reference
-\cs_set_protected:Npx \| { \exp_not:o { \| } }
-\cs_set_protected:Npx \- { \exp_not:o { \- } }
-\cs_set_eq:NN \@dischyph \-
-
-\NewDocumentCommand \iupac { }
- { \chemmacros_iupac:n }
-
-% --------------------------------------------------------------------------
-% latin phrases
-\tl_new:N \l__chemmacros_latin_format_tl
-\tl_set:Nn \l__chemmacros_latin_format_tl { \itshape }
-
-\keys_define:nn { chemmacros / latin }
- { format . tl_set:N = \l__chemmacros_latin_format_tl }
-
-\cs_new_protected:Npn \chemmacros_latin:n #1
- { { \l__chemmacros_latin_format_tl #1 } }
-
-\prop_new:N \l__chemmacros_latin_prop
-
-\cs_new_protected:Npn \chemmacros_new_latin:Nn #1#2
- {
- \cs_if_free:NTF #1
- {
- \cs_new_protected:Npn #1
- { \chemmacros_latin:n { #2 } \chemmacros_xspace: }
- \prop_put:Nnn \l__chemmacros_latin_prop { #1 } { #2 }
- }
- { \msg_error:nnn { chemmacros } { new-latin } { #1 } }
- }
-
-\cs_new_protected:Npn \chemmacros_define_latin:Nn #1#2
- {
- \cs_if_free:NTF #1
- {
- \cs_new_protected:Npn #1
- { \chemmacros_latin:n { #2 } \chemmacros_xspace: }
- \prop_put:Nnn \l__chemmacros_latin_prop { #1 } { #2 }
- }
- {
- \cs_set_protected:Npn #1
- { \chemmacros_latin:n { #2 } \chemmacros_xspace: }
- \prop_put:Nnn \l__chemmacros_latin_prop { #1 } { #2 }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_renew_latin:Nn #1#2
- {
- \prop_if_in:NnTF \l__chemmacros_latin_prop { #1 }
- { \cs_set:Npn #1 { \chemmacros_latin:n { #2 } \chemmacros_xspace: } }
- { \msg_error:nnn { chemmacros } { renew-latin } { #1 } }
- }
-
-\NewDocumentCommand \NewChemLatin { mm }
- { \chemmacros_new_latin:Nn #1 { #2 } }
-
-\NewDocumentCommand \RenewChemLatin { mm }
- { \chemmacros_renew_latin:Nn #1 { #2 } }
-
-\NewDocumentCommand \DeclareChemLatin { mm }
- { \chemmacros_define_latin:Nn #1 { #2 } }
-
-\AtBeginDocument
- {
- \bool_if:NTF \l__chemmacros_chemstyle_bool
- {
- \AfterPackage* { chemstyle }
- {
- \cs_undefine:N \invacuo
- \cs_set_eq:NN \chemmacros_latin:n \cst@latin
- }
- }
- {
- \cs_new_eq:NN \latin \chemmacros_latin:n
- }
- \NewChemLatin \insitu { in~situ }
- \NewChemLatin \abinitio { ab~initio }
- \NewChemLatin \invacuo { in~vacuo }
- }
-
-% --------------------------------------------------------------------------- %
-% acid / base
-\tl_new:N \l__chemmacros_k_acid_tl
-\tl_new:N \l__chemmacros_k_base_tl
-\tl_new:N \l__chemmacros_k_water_tl
-
-% \bool_new:N \l__chemmacros_subscript_lowercase_bool
-
-\tl_set:Nn \l__chemmacros_k_acid_tl
- { \chemmacros_translate:n {K-acid} }
-
-\tl_set:Nn \l__chemmacros_k_base_tl
- { \chemmacros_translate:n {K-base} }
-
-\tl_set:Nn \l__chemmacros_k_water_tl
- { \chemmacros_translate:n {K-water} }
-
-\keys_define:nn { chemmacros / acid-base }
- {
- p-style .choice: ,
- p-style / slanted .code:n = \cs_set_eq:NN \chemmacros_p_style:n \textsl ,
- p-style / italics .code:n = \cs_set_eq:NN \chemmacros_p_style:n \textit ,
- p-style / upright .code:n = \cs_set_eq:NN \chemmacros_p_style:n \textup ,
- K-acid .tl_set:N = \l__chemmacros_k_acid_tl ,
- K-base .tl_set:N = \l__chemmacros_k_base_tl ,
- K-water .tl_set:N = \l__chemmacros_k_water_tl ,
- subscript .code:n = \chemmacros_option_deprecated:n {#1}
- % subscript / lowercase .code:n =
- % \bool_set_true:N \l__chemmacros_subscript_lowercase_bool ,
- % subscript / uppercase .code:n =
- % \bool_set_false:N \l__chemmacros_subscript_lowercase_bool
- }
-
-\cs_new_eq:NN \chemmacros_p_style:n \textup
-
-\cs_new_protected:Npn \Ka
- {
- \ensuremath
- {
- \chemmacros_detect_bold:n
- {
- K
- \c_math_subscript_token
- { \l__chemmacros_k_acid_tl }
- }
- }
- \chemmacros_xspace:
- }
-
-\cs_new_protected:Npn \Kb
- {
- \ensuremath
- {
- \chemmacros_detect_bold:n
- {
- K
- \c_math_subscript_token
- { \l__chemmacros_k_base_tl }
- }
- }
- \chemmacros_xspace:
- }
-
-\cs_new_protected:Npn \Kw
- {
- \ensuremath
- {
- \chemmacros_detect_bold:n
- {
- K
- \c_math_subscript_token
- { \l__chemmacros_k_water_tl }
- }
- }
- \chemmacros_xspace:
- }
-
-\cs_new_protected:Npn \chemmacros_p:n #1
- {
- \group_begin:
- \mbox
- {
- \chemmacros_p_style:n { p }
- \ensuremath { #1 }
- }
- \group_end:
- }
-
-\NewDocumentCommand \p { m }
- { \chemmacros_p:n { #1 } }
-
-\cs_new_protected:Npn \pH
- {
- \chemmacros_p:n { \chemmacros_chemformula:n { H } }
- \chemmacros_xspace:
- }
-
-\cs_new_protected:Npn \pOH
- {
- \chemmacros_p:n { \chemmacros_chemformula:n { OH } }
- \chemmacros_xspace:
- }
-
-\NewDocumentCommand \pKa { o }
- {
- \chemmacros_p:n
- {
- \Ka \IfNoValueF { #1 }
- { {} \c_math_subscript_token { \chemmacros_detect_bold:n { #1 } } }
- }
- \chemmacros_xspace:
- }
-
-\NewDocumentCommand \pKb { o }
- {
- \chemmacros_p:n
- {
- \Kb \IfNoValueF { #1 }
- { {} \c_math_subscript_token { \chemmacros_detect_bold:n { #1 } } }
- }
- \chemmacros_xspace:
- }
-
-% --------------------------------------------------------------------------
-% units
-\DeclareSIUnit { \atm } { atm }
-\DeclareSIUnit { \atmosphere } { atm }
-\DeclareSIUnit { \calory } { cal }
-\DeclareSIUnit { \cal } { cal }
-
-\AtBeginDocument
- {
- \bool_if:NF \l__chemmacros_chemstyle_bool
- {
- \DeclareSIUnit { \cmc } { \cubic\centi\metre }
- \DeclareSIUnit { \molar } { \mole\per\cubic\deci\metre }
- \DeclareSIUnit { \Molar } { \textsc{m} }
- }
- }
-
-\DeclareSIUnit { \moLar } { \mole\per\liter }
-\DeclareSIUnit { \MolMass } { \gram\per\mole }
-\DeclareSIUnit { \normal } { \textsc{n} }
-\DeclareSIUnit { \torr } { torr }
-
-% --------------------------------------------------------------------------
-% reaction mechanisms
-% \mech[<type>]
-% <type> - substitutions: {}, 1, 2, se, 1e, 2e, ar
-% - eliminations: e, e1, e2, cb
-\tl_new:N \l__chemmacros_mech_type_tl
-\tl_new:N \l__chemmacros_mech_mol_tl
-\tl_new:N \l__chemmacros_mech_ar_tl
-
-\cs_new_protected:Npn \__chemmacros_set_mech:nnn #1#2#3
- {
- \tl_set:Nn \l__chemmacros_mech_type_tl { #1 }
- \tl_set:Nn \l__chemmacros_mech_mol_tl { #2 }
- \tl_set:Nn \l__chemmacros_mech_ar_tl { #3 }
- }
-
-\keys_define:nn { chemmacros / mech }
- {
- type .choice: ,
- type / .code:n =
- {
- \__chemmacros_set_mech:nnn { S }
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {N} }
- \c_math_toggle_token
- }
- { }
- } ,
- type / 1 .code:n =
- {
- \__chemmacros_set_mech:nnn { S }
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {N} }
- \c_math_toggle_token
- 1
- }
- { }
- } ,
- type / 2 .code:n =
- {
- \__chemmacros_set_mech:nnn { S }
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {N} }
- \c_math_toggle_token
- 2
- }
- { }
- } ,
- type / se .code:n =
- {
- \__chemmacros_set_mech:nnn { S }
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {E} }
- \c_math_toggle_token
- }
- { }
- } ,
- type / 1e .code:n =
- {
- \__chemmacros_set_mech:nnn { S }
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {E} }
- \c_math_toggle_token
- 1
- }
- { }
- } ,
- type / 2e .code:n =
- {
- \__chemmacros_set_mech:nnn { S }
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {E} }
- \c_math_toggle_token
- 2
- }
- { }
- } ,
- type / ar .code:n =
- {
- \__chemmacros_set_mech:nnn { S }
- {
- \c_math_toggle_token
- \c_math_subscript_token { \text {E} }
- \c_math_toggle_token
- }
- { Ar - }
- } ,
- type / e .code:n =
- { \__chemmacros_set_mech:nnn { E } { } { } } ,
- type / e1 .code:n =
- { \__chemmacros_set_mech:nnn { E } { 1 } { } } ,
- type / e2 .code:n =
- { \__chemmacros_set_mech:nnn { E } { 2 } { } } ,
- type / cb .code:n =
- {
- \__chemmacros_set_mech:nnn { E }
- {
- 1
- \c_math_toggle_token
- \c_math_subscript_token { \text {cb} }
- \c_math_toggle_token
- }
- { }
- } ,
- type .default:n =
- }
-
-\cs_new_protected:Npn \chemmacros_mech:n #1
- {
- \tl_if_blank:nTF { #1 }
- { \keys_set:nn { chemmacros / mech } { type } }
- { \keys_set:nn { chemmacros / mech } { type = #1 } }
- \mbox
- {
- \tl_use:N \l__chemmacros_mech_ar_tl
- \tl_use:N \l__chemmacros_mech_type_tl
- \tl_use:N \l__chemmacros_mech_mol_tl
- }
- \chemmacros_xspace:
- }
-
-\NewDocumentCommand \mech { o }
- {
- \IfNoValueTF { #1 }
- { \chemmacros_mech:n { } }
- { \chemmacros_mech:n { #1 } }
- }
-
-% --------------------------------------------------------------------------
-% oxidation numbers
-% \ox{<number>,<atom>}
-\bool_new:N \l__chemmacros_ox_sign_bool
-\bool_new:N \l__chemmacros_ox_integer_bool
-\bool_new:N \l__chemmacros_ox_explicit_sign_bool
-\bool_set_false:N \l__chemmacros_ox_explicit_sign_bool
-\bool_new:N \l__chemmacros_ox_format_roman_bool
-\bool_set_true:N \l__chemmacros_ox_format_roman_bool
-\bool_new:N \l__chemmacros_ox_decimal_marker_comma_bool
-\bool_set_false:N \l__chemmacros_ox_decimal_marker_comma_bool
-\bool_new:N \l__chemmacros_ox_parse_bool
-\bool_set_true:N \l__chemmacros_ox_parse_bool
-\bool_new:N \l__chemmacros_ox_side_bool
-\bool_new:N \l__chemmacros_ox_super_bool
-\bool_new:N \l__chemmacros_ox_top_bool
-\bool_set_true:N \l__chemmacros_ox_top_bool
-\bool_new:N \l__chemmacros_ox_align_center_bool
-
-\int_new:N \l__chemmacros_ox_number_int
-\fp_new:N \l__chemmacros_ox_number_fp
-
-\cs_new_protected:Npn \__chemmacros_ox_process_number:n #1
- {
- \bool_if:NTF \l__chemmacros_ox_parse_bool
- {
- \tl_if_in:nnTF { #1 } { / }
- { \__chemmacros_ox_fraction:w #1 \q_stop }
- {
- \__chemmacros_ox_sign:n { #1 }
- \__chemmacros_ox_value:n { #1 }
- }
- }
- { #1 }
- }
-
-\DeclareInstance { xfrac } { chemmacros-ox-frac } { text }
- {
- scale-factor = 1.2 ,
- denominator-bot-sep = -.5ex ,
- numerator-top-sep = -.3ex ,
- slash-left-kern = -.2em ,
- slash-right-kern = -.2em ,
- slash-symbol-font = lmr
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_fraction:w #1/#2 \q_stop
- {
- \bool_set_false:N \l__chemmacros_ox_format_roman_bool
- \__chemmacros_ox_sign:n { #1 }
- \bool_if:NTF \l__chemmacros_ox_side_bool
- { \sfrac { \__chemmacros_ox_value:n { #1 } } { #2 } }
- {
- \sfrac [ chemmacros-ox-frac ]
- { \__chemmacros_ox_value:n { #1 } }
- { #2 }
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_sign:n #1
- {
- \fp_compare:nNnT { #1 } > { 0 }
- {
- \bool_if:NT \l__chemmacros_ox_explicit_sign_bool
- { \c_math_toggle_token + \c_math_toggle_token }
- }
- \fp_compare:nNnT { #1 } = { 0 }
- {
- \bool_if:NT \l__chemmacros_ox_explicit_sign_bool
- { \c_math_toggle_token \pm \c_math_toggle_token }
- }
- \fp_compare:nNnT { #1 } < { 0 }
- { \c_math_toggle_token - \c_math_toggle_token }
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_value:n #1
- {
- \fp_set:Nn \l__chemmacros_ox_number_fp { abs(#1) }
- \__chemmacros_ox_is_integer:V \l__chemmacros_ox_number_fp
- \bool_if:NTF \l__chemmacros_ox_format_roman_bool
- { \__chemmacros_fp_to_Roman:V \l__chemmacros_ox_number_fp }
- {
- \bool_if:NTF \l__chemmacros_ox_integer_bool
- {
- \c_math_toggle_token
- \__chemmacros_fp_to_arabic:V \l__chemmacros_ox_number_fp
- \c_math_toggle_token
- }
- {
- \c_math_toggle_token
- \__chemmacros_fp_show:V \l__chemmacros_ox_number_fp
- \c_math_toggle_token
- }
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_is_integer:n #1
- {
- \fp_set:Nn \l__chemmacros_tmpa_fp { round(#1 + 1 , 0 ) - 1 }
- \fp_compare:nNnTF { \l__chemmacros_tmpa_fp } = { #1 }
- { \bool_set_true:N \l__chemmacros_ox_integer_bool }
- {
- \bool_set_false:N \l__chemmacros_ox_integer_bool
- \bool_set_false:N \l__chemmacros_ox_format_roman_bool
- }
- }
-\cs_generate_variant:Nn \__chemmacros_ox_is_integer:n { V }
-
-\cs_new_protected:Npn \__chemmacros_fp_to_Roman:n #1
- {
- \group_begin:
- \fp_set:Nn \l__chemmacros_tmpa_fp { round(#1 , 0 ) }
- \int_set:Nn \l__chemmacros_tmpa_int
- { \fp_to_tl:N \l__chemmacros_tmpa_fp }
- \int_compare:nTF { \l__chemmacros_tmpa_int = 0 }
- { 0 }
- { \int_to_Roman:n { \l__chemmacros_tmpa_int } }
- \group_end:
- }
-\cs_generate_variant:Nn \__chemmacros_fp_to_Roman:n { V }
-
-\cs_new_protected:Npn \__chemmacros_fp_to_arabic:n #1
- {
- \group_begin:
- \fp_set:Nn \l__chemmacros_tmpa_tl { #1 }
- \fp_to_tl:N \l__chemmacros_tmpa_tl
- \group_end:
- }
-\cs_generate_variant:Nn \__chemmacros_fp_to_arabic:n { V }
-
-\cs_new_protected:Npn \__chemmacros_fp_show:n #1
- {
- \group_begin:
- \fp_set:Nn \l__chemmacros_tmpa_tl { #1 }
- \bool_if:NTF \l__chemmacros_ox_decimal_marker_comma_bool
- {
- \tl_set:Nx \l__chemmacros_tmpb_tl
- { \fp_to_tl:N \l__chemmacros_tmpa_tl }
- \tl_replace_once:Nnn \l__chemmacros_tmpb_tl { . } { {,} }
- \tl_use:N \l__chemmacros_tmpb_tl
- }
- { \fp_to_tl:N \l__chemmacros_tmpa_tl }
- \group_end:
- }
-\cs_generate_variant:Nn \__chemmacros_fp_show:n { V }
-
-\cs_new_protected:Npn \__chemmacros_ox_write:nn #1#2
- {
- \tl_if_blank:nT { #1 }
- { \msg_error:nnx { chemmacros } { ox } { oxidation~number~missing } }
- \tl_if_blank:nT { #2 }
- { \msg_error:nnx { chemmacros } { ox } { atom~missing } }
- \ensuremath
- {
- \bool_if:NT \l__chemmacros_ox_super_bool
- {
- \chemmacros_text:n
- {
- #2
- \c_math_toggle_token
- \c_math_superscript_token
- { \text { \tiny \__chemmacros_ox_process_number:n { #1 } } }
- \c_math_toggle_token
- }
- }
- \bool_if:NT \l__chemmacros_ox_side_bool
- {
- \chemmacros_text:n
- { #2 ( \text { \__chemmacros_ox_process_number:n { #1 } } ) }
- }
- \bool_if:NT \l__chemmacros_ox_top_bool
- {
- \overset
- {
- \bool_if:NTF \l__chemmacros_ox_align_center_bool
- { \clap } { \rlap }
- {
- \chemmacros_text:n
- { \tiny \__chemmacros_ox_process_number:n { #1 } }
- }
- }
- { \chemmacros_text:n { #2 } }
- }
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_pos_top:
- {
- \bool_set_true:N \l__chemmacros_ox_top_bool
- \bool_set_false:N \l__chemmacros_ox_super_bool
- \bool_set_false:N \l__chemmacros_ox_side_bool
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_pos_super:
- {
- \bool_set_false:N \l__chemmacros_ox_top_bool
- \bool_set_true:N \l__chemmacros_ox_super_bool
- \bool_set_false:N \l__chemmacros_ox_side_bool
- }
-
-\cs_new_protected:Npn \__chemmacros_ox_pos_side:
- {
- \bool_set_false:N \l__chemmacros_ox_top_bool
- \bool_set_false:N \l__chemmacros_ox_super_bool
- \bool_set_true:N \l__chemmacros_ox_side_bool
- }
-
-\keys_define:nn { chemmacros / ox }
- {
- pos .choice: ,
- pos / top .code:n = \__chemmacros_ox_pos_top: ,
- pos / super .code:n = \__chemmacros_ox_pos_super: ,
- pos / side .code:n = \__chemmacros_ox_pos_side: ,
- roman .bool_set:N = \l__chemmacros_ox_format_roman_bool ,
- roman .default:n = true ,
- parse .bool_set:N = \l__chemmacros_ox_parse_bool ,
- parse .default:n = true ,
- explicit-sign .bool_set:N = \l__chemmacros_ox_explicit_sign_bool ,
- explicit-sign .default:n = true ,
- decimal-marker .choice: ,
- decimal-marker / comma .code:n =
- { \bool_set_true:N \l__chemmacros_ox_decimal_marker_comma_bool } ,
- decimal-marker / point .code:n =
- { \bool_set_false:N \l__chemmacros_ox_decimal_marker_comma_bool } ,
- align .choice: ,
- align / center .code:n = \bool_set_true:N \l__chemmacros_ox_align_center_bool ,
- align / right .code:n = \bool_set_false:N \l__chemmacros_ox_align_center_bool
- }
-
-% \ox[<keyval>]{<num>,<atom>}
-% \ox*[<keyval>]{<num>,<atom>} => always number on the side
-\cs_new_protected:Npn \chemmacros_ox:nnnn #1#2#3#4
- {
- \group_begin:
- \tl_if_blank:nF { #1 } { \__chemmacros_ox_pos_super: }
- \keys_set:nn { chemmacros / ox } { #2 }
- \__chemmacros_ox_write:nn { #3 } { #4 }
- \group_end:
- }
-
-\NewDocumentCommand \ox { s o > { \SplitArgument { 1 } { , } } m }
- {
- \IfBooleanTF { #1 }
- {
- \IfNoValueTF { #2 }
- { \chemmacros_ox:nnnn { #1 } { } #3 }
- { \chemmacros_ox:nnnn { #1 } { #2 } #3 }
- }
- {
- \IfNoValueTF { #2 }
- { \chemmacros_ox:nnnn { } { } #3 }
- { \chemmacros_ox:nnnn { } { #2 } #3 }
- }
- }
-
-% --------------------------------------------------------------------------- %
-% - oxidation arrows
-\tl_new:N \l__chemmacros_redox_begin_tl
-\tl_new:N \l__chemmacros_redox_end_tl
-\tl_new:N \l__chemmacros_redox_tikz_tl
-\tl_new:N \l__chemmacros_redox_shift_tl
-\tl_new:N \l__chemmacros_redox_anchor_tl
-\tl_new:N \l__chemmacros_redox_side_tl
-
-\fp_new:N \l__chemmacros_redox_shift_fp
-
-\dim_new:N \l__chemmacros_redox_sep_dim
-\dim_new:N \l__chemmacros_redox_sep_default_dim
-\dim_set:Nn \l__chemmacros_redox_sep_default_dim { .2em }
-\dim_new:N \l__chemmacros_redox_dist_dim
-\dim_set:Nn \l__chemmacros_redox_dist_dim {.6em}
-
-% place and name nodes:
-% \OX{<name>,<atom>}
-\NewDocumentCommand \OX { > { \SplitArgument { 1 } { , } } m }
- { \chemmacros_redox_partner:nn #1 }
-
-\cs_new_protected:Npn \chemmacros_redox_partner:nn #1#2
- {
- \chemformula_latex_if:nTF { measuring@ }
- {
- \group_begin:
- \tikz[baseline=(#1.base)]
- { \node [inner~sep=0pt] (#1) { #2 } ; }
- \group_end:
- }
- {
- \tl_if_blank:nT { #1 }
- { \msg_error:nnx { chemmacros } { OX } { node~name~missing } }
- \tl_if_blank:nT { #2 }
- { \msg_error:nnx { chemmacros } { OX } { atom~missing } }
- \tikz[baseline=(#1.base),remember~picture]
- { \node [inner~sep=0pt] (#1) { #2 } ; }
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_redox_coordinates:nn #1#2
- {
- \tl_set:Nn \l__chemmacros_redox_begin_tl { #1 }
- \tl_set:Nn \l__chemmacros_redox_end_tl { #2 }
- }
-
-\cs_new_protected:Npn \chemmacros_redox:nnnnn #1#2#3#4#5
- {
- \tl_clear:N \l__chemmacros_redox_begin_tl
- \tl_clear:N \l__chemmacros_redox_end_tl
- \tl_clear:N \l__chemmacros_redox_tikz_tl
- \__chemmacros_redox_coordinates:nn { #1 } { #2 }
- \tl_if_blank:nF { #3 }
- { \tl_set:Nn \l__chemmacros_redox_tikz_tl { #3 } }
- \tl_if_blank:nTF { #4 }
- {
- \fp_set:Nn \l__chemmacros_redox_shift_fp { 1 }
- \tl_set:Nn \l__chemmacros_redox_anchor_tl { above }
- \tl_set:Nn \l__chemmacros_redox_side_tl { north }
- \dim_set_eq:NN
- \l__chemmacros_redox_sep_dim
- \l__chemmacros_redox_sep_default_dim
- }
- {
- \fp_compare:nNnTF { #4 } < { 0 }
- {
- \tl_set:Nn \l__chemmacros_redox_anchor_tl { below }
- \tl_set:Nn \l__chemmacros_redox_side_tl { south }
- \exp_args:NNo \dim_set:Nn \l__chemmacros_redox_sep_dim
- { - \l__chemmacros_redox_sep_default_dim }
- }
- {
- \tl_set:Nn \l__chemmacros_redox_anchor_tl { above }
- \tl_set:Nn \l__chemmacros_redox_side_tl { north }
- \dim_set_eq:NN
- \l__chemmacros_redox_sep_dim
- \l__chemmacros_redox_sep_default_dim
- }
- \fp_set:Nn \l__chemmacros_redox_shift_fp { #4 }
- }
- \tl_set:Nn \l__chemmacros_redox_shift_tl
- { \fp_to_tl:N \l__chemmacros_redox_shift_fp }
- \tikz[remember~picture,overlay]
- {
- \chemmacros_tikz_draw:f { \tl_use:N \l__chemmacros_redox_tikz_tl }
- ($
- (\l__chemmacros_redox_begin_tl .
- \l__chemmacros_redox_side_tl)+(0,\l__chemmacros_redox_sep_dim)
- $)
- --
- ++(0,\l__chemmacros_redox_shift_tl * \l__chemmacros_redox_dist_dim) -|
- node [pos=.25,\l__chemmacros_redox_anchor_tl] { { #5 } }
- ($
- (\l__chemmacros_redox_end_tl .
- \l__chemmacros_redox_side_tl)+(0,\l__chemmacros_redox_sep_dim)
- $) ;
- }
- }
-
-\NewDocumentCommand \redox { > { \SplitArgument { 1 } { , } } r() o o G{} }
- {
- \IfNoValueT { #1 }
- {
- \msg_error:nnx { chemmacros } { redox }
- { You~need~to~specify~coordinates }
- }
- \IfNoValueTF { #2 }
- { \chemmacros_redox:nnnnn #1 { } { } { #4 } }
- {
- \IfNoValueTF { #3 }
- { \chemmacros_redox:nnnnn #1 { #2 } { } { #4 } }
- { \chemmacros_redox:nnnnn #1 { #2 } { #3 } { #4 } }
- }
- }
-
-% redox-keys
-\keys_define:nn { chemmacros / redox }
- {
- dist .dim_set:N = \l__chemmacros_redox_dist_dim ,
- dist .default:n = { .6em } ,
- sep .dim_set:N = \l__chemmacros_redox_sep_default_dim ,
- sep .default:n = { .2em }
- }
-
-% --------------------------------------------------------------------------- %
-% spectroscopy
-\tl_new:N \g__chemmacros_nmr_isotope_tl
-\tl_new:N \l__chemmacros_nmr_isotope_default_tl
-\tl_set:Nn \l__chemmacros_nmr_isotope_default_tl { 1 }
-\tl_new:N \l__chemmacros_nmr_coupling_nuclei_tl
-\tl_new:N \l__chemmacros_nmr_coupling_nuclei_pre_tl
-\tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_pre_tl { ( }
-\tl_new:N \l__chemmacros_nmr_coupling_nuclei_post_tl
-\tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_post_tl { ) }
-\tl_new:N \l__chemmacros_nmr_coupling_bonds_tl
-\tl_new:N \l__chemmacros_nmr_coupling_bonds_pre_tl
-\tl_set:Nn \l__chemmacros_nmr_coupling_bonds_pre_tl { }
-\tl_set:Nn \l__chemmacros_nmr_coupling_bonds_post_tl { \! }
-\tl_new:N \l__chemmacros_nmr_coupling_symbol_tl
-\tl_set:Nn \l__chemmacros_nmr_coupling_symbol_tl { J }
-\tl_new:N \g__chemmacros_nmr_element_coupled_tl
-\tl_new:N \g__chemmacros_nmr_element_tl
-\tl_new:N \l__chemmacros_nmr_element_default_tl
-\tl_set:Nn \l__chemmacros_nmr_element_default_tl { H }
-\tl_new:N \l__chemmacros_nmr_format_tl
-\tl_new:N \l__chemmacros_nmr_delta_tl
-\tl_new:N \l__chemmacros_nmr_coupling_unit_tl
-\tl_set:Nn \l__chemmacros_nmr_coupling_unit_tl { \hertz }
-\tl_new:N \l__chemmacros_nmr_unit_tl
-\tl_set:Nn \l__chemmacros_nmr_unit_tl { \mega\hertz }
-\tl_new:N \l__chemmacros_nmr_list_setup_tl
-\tl_set:Nn \l__chemmacros_nmr_list_setup_tl
- {
- \topsep\z@skip \partopsep\z@skip
- \itemsep\z@ \parsep\z@ \itemindent\z@
- \leftmargin\z@
- }
-\tl_new:N \l__chemmacros_nmr_position_tl
-\tl_new:N \l__chemmacros_nmr_element_method_connector_tl
-\tl_set:Nn \l__chemmacros_nmr_element_method_connector_tl {-}
-\tl_new:N \l__chemmacros_nmr_method_tl
-\tl_set:Nn \l__chemmacros_nmr_method_tl {NMR}
-
-\bool_new:N \l__chemmacros_nmr_coupling_nuclei_sub_bool
-\bool_new:N \l__chemmacros_nmr_frequency_bool
-\bool_new:N \l__chemmacros_nmr_solvent_bool
-\bool_new:N \l__chemmacros_nmr_delimiters_bool
-\bool_new:N \l__chemmacros_nmr_comma_bool
-\bool_new:N \l__chemmacros_nmr_inner_bool
-\bool_new:N \l__chemmacros_nmr_position_side_bool
-\bool_new:N \l__chemmacros_nmr_parse_bool
-\bool_set_true:N \l__chemmacros_nmr_parse_bool
-\bool_new:N \l__chemmacros_nmr_list_bool
-\bool_new:N \l__chemmacros_nmr_use_equal_bool
-\bool_new:N \l__chemmacros_nmr_custom_command_active_bool
-\bool_new:N \l__chemmacros_nmr_custom_command_used_bool
-
-\cs_new_protected:Npn \__chemmacros_nmr_nucleus:nn #1#2
- {
- \tl_gset:Nn \g__chemmacros_nmr_isotope_tl { #1 }
- \tl_if_in:nnTF { #2 } { [ }
- { \__chemmacros_nmr_element:w #2 \q_stop }
- {
- \tl_gset:No \g__chemmacros_nmr_element_tl { #2 }
- \tl_gclear:N \g__chemmacros_nmr_element_coupled_tl
- }
- }
-\cs_generate_variant:Nn \__chemmacros_nmr_nucleus:nn { VV }
-
-\cs_new_protected:Npn \__chemmacros_nmr_nucleus:w #1,#2 \q_stop
- {
- \tl_gset:Nn \g__chemmacros_nmr_isotope_tl { #1 }
- \tl_if_in:nnTF { #2 } { [ }
- { \__chemmacros_nmr_element:w #2 \q_stop }
- {
- \tl_gset:No \g__chemmacros_nmr_element_tl { #2 }
- \tl_gclear:N \g__chemmacros_nmr_element_coupled_tl
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_element:w #1[#2] \q_stop
- {
- \tl_gset:Nn \g__chemmacros_nmr_element_tl { #1 }
- \tl_gset:Nn \g__chemmacros_nmr_element_coupled_tl { #2 }
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_default_nucleus:w #1,#2 \q_stop
- {
- \tl_set:Nn \l__chemmacros_nmr_isotope_default_tl { #1 }
- \tl_set:Nn \l__chemmacros_nmr_element_default_tl { #2 }
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_base:nn #1#2
- {
- \tl_if_blank:VF \g__chemmacros_nmr_element_coupled_tl
- {
- \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl { \{ }
- \tl_put_right:Nn \g__chemmacros_nmr_element_coupled_tl { \} }
- }
- \tl_put_left:Nn \g__chemmacros_nmr_element_coupled_tl { #2 }
- \iupac { ^ { #1 } }
- \bool_if:NTF \l__chemmacros_nmr_parse_bool
- { \chemformula_ch:nV {} \g__chemmacros_nmr_element_coupled_tl }
- { \chemmacros_atom:V \g__chemmacros_nmr_element_coupled_tl }
- \tl_use:N \l__chemmacros_nmr_element_method_connector_tl
- \tl_use:N \l__chemmacros_nmr_method_tl
- }
-\cs_generate_variant:Nn \__chemmacros_nmr_base:nn { VV }
-
-\cs_new_protected:Npn \__chemmacros_nmr_frequency:n #1
- {
- \tl_if_in:nnTF { #1 } { , }
- { \__chemmacros_nmr_frequency_aux_i:w #1 \q_stop }
- { \__chemmacros_nmr_frequency_aux_ii:n { #1 } }
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_frequency_aux_i:w #1,#2 \q_stop
- { \SI { #1 } { #2 } }
-
-\cs_new_protected:Npn \__chemmacros_nmr_frequency_aux_ii:n #1
- { \SI { #1 } { \tl_use:N \l__chemmacros_nmr_unit_tl } }
-
-\cs_new_eq:NN \__chemmacros_nmr_number:n \use:n
-\cs_new_eq:NN \__chemmacros_nmr_position:n \use:n
-
-\keys_define:nn { chemmacros / nmr }
- {
- unit .tl_set:N = \l__chemmacros_nmr_unit_tl ,
- unit .default:n = \mega\hertz ,
- nucleus .code:n =
- { \__chemmacros_nmr_default_nucleus:w #1 \q_stop } ,
- nucleus .default:n = { 1,H } ,
- format .tl_set:N = \l__chemmacros_nmr_format_tl ,
- method .tl_set:N = \l__chemmacros_nmr_method_tl ,
- connector .tl_set:N = \l__chemmacros_nmr_element_method_connector_tl ,
- pos-number .choice: ,
- pos-number / sub .code:n =
- \tl_set:Nn \l__chemmacros_nmr_position_tl { _ }
- \bool_set_false:N \l__chemmacros_nmr_position_side_bool ,
- pos-number / super .code:n =
- \tl_set:Nn \l__chemmacros_nmr_position_tl { ^ }
- \bool_set_false:N \l__chemmacros_nmr_position_side_bool ,
- pos-number / side .code:n =
- \tl_set:Nn \l__chemmacros_nmr_position_tl { - }
- \bool_set_true:N \l__chemmacros_nmr_position_side_bool ,
- coupling-unit .tl_set:N = \l__chemmacros_nmr_coupling_unit_tl ,
- coupling-pos .choice: ,
- coupling-pos / sub .code:n =
- \bool_set_true:N \l__chemmacros_nmr_coupling_nuclei_sub_bool ,
- coupling-pos / side .code:n =
- \bool_set_false:N \l__chemmacros_nmr_coupling_nuclei_sub_bool ,
- coupling-nuclei-pre .tl_set:N =
- \l__chemmacros_nmr_coupling_nuclei_pre_tl ,
- coupling-nuclei-post .tl_set:N =
- \l__chemmacros_nmr_coupling_nuclei_post_tl ,
- coupling-bonds-pre .tl_set:N =
- \l__chemmacros_nmr_coupling_bonds_pre_tl ,
- coupling-bonds-post .tl_set:N =
- \l__chemmacros_nmr_coupling_bonds_post_tl ,
- coupling-symbol .tl_set:N =
- \l__chemmacros_nmr_coupling_symbol_tl ,
- atom-number-cs .code:n =
- \cs_set_eq:NN \__chemmacros_nmr_number:n #1 ,
- coupling-pos-cs .code:n =
- \cs_set_eq:NN \__chemmacros_nmr_position:n #1 ,
- parse .bool_set:N = \l__chemmacros_nmr_parse_bool ,
- delta .code:n =
- \tl_set:Nn \l__chemmacros_nmr_delta_tl { \, #1 } ,
- list .bool_set:N = \l__chemmacros_nmr_list_bool ,
- list .default:n = true ,
- list-setup .tl_set:N = \l__chemmacros_nmr_list_setup_tl ,
- use-equal .bool_set:N = \l__chemmacros_nmr_use_equal_bool ,
- use-equal .default:n = true
- }
-
-\prop_new:N \l__chemmacros_nmr_prop
-
-\cs_new_protected:Npn \chemmacros_new_nmr:Nn #1#2
- {
- \bool_if:nTF
- {
- \prop_if_in_p:Nn \l__chemmacros_nmr_prop { #1 }
- ||
- \cs_if_exist_p:N #1
- }
- { \msg_error:nnn { chemmacros } { new-nmr } { #1 } }
- {
- \prop_put:Nnn \l__chemmacros_nmr_prop { #1 } { #2 }
- \NewDocumentCommand #1 { s }
- { \IfBooleanTF {##1} { \NMR*{#2} } { \NMR{#2} } }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_define_nmr:Nn #1#2
- {
- \prop_put:Nnn \l__chemmacros_nmr_prop { #1 } { #2 }
- \cs_if_exist:NTF #1
- {
- \RenewDocumentCommand #1 { s }
- { \IfBooleanTF {##1} { \NMR*{#2} } { \NMR{#2} } }
- }
- {
- \NewDocumentCommand #1 { s }
- { \IfBooleanTF {##1} { \NMR*{#2} } { \NMR{#2} } }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_renew_nmr:Nn #1#2
- {
- \bool_if:nTF
- {
- \prop_if_in_p:Nn \l__chemmacros_nmr_prop { #1 }
- &&
- \cs_if_exist_p:N #1
- }
- {
- \prop_put:Nnn \l__chemmacros_nmr_prop { #1 } { #2 }
- \RenewDocumentCommand #1 { s }
- { \IfBooleanTF {##1} { \NMR*{#2} } { \NMR{#2} } }
- }
- { \msg_error:nnn { chemmacros } { renew-nmr } { #1 } }
- }
-
-\NewDocumentCommand \NewChemNMR { mm }
- { \chemmacros_new_nmr:Nn #1 { #2 } }
-
-\NewDocumentCommand \RenewChemNMR { mm }
- { \chemmacros_renew_nmr:Nn #1 { #2 } }
-
-\NewDocumentCommand \DeclareChemNMR { mm }
- { \chemmacros_define_nmr:Nn #1 { #2 } }
-
-\NewDocumentCommand \NMR { s G{} D(){} O{} }
- {
- \IfBooleanTF { #1 }
- { \chemmacros_nmr:nnnn { * } { #2 } { #3 } { #4 } }
- { \chemmacros_nmr:nnnn { } { #2 } { #3 } { #4 } }
- }
-
-\AtBeginDocument
- {
- % \NMR{<num>,<elem>}(<num>,<unit>)[<solvent>] ALL arguments are optional
- % \NMR* same but without ": $\delta$" at end
- \cs_new_protected:Npn \chemmacros_nmr:nnnn #1#2#3#4
- {
- \bool_if:NT \l__chemmacros_nmr_list_bool { \item \scan_stop: }
- \group_begin:
- \mode_leave_vertical:
- \bool_set_false:N \l__chemmacros_nmr_frequency_bool
- \bool_set_false:N \l__chemmacros_nmr_solvent_bool
- \tl_if_empty:nF { #3 }
- { \bool_set_true:N \l__chemmacros_nmr_frequency_bool }
- \tl_if_empty:nF { #4 }
- { \bool_set_true:N \l__chemmacros_nmr_solvent_bool }
- \bool_if:nT
- {
- \l__chemmacros_nmr_frequency_bool
- ||
- \l__chemmacros_nmr_solvent_bool
- }
- { \bool_set_true:N \l__chemmacros_nmr_delimiters_bool }
- \bool_if:nT
- {
- \l__chemmacros_nmr_frequency_bool
- &&
- \l__chemmacros_nmr_solvent_bool
- }
- { \bool_set_true:N \l__chemmacros_nmr_comma_bool }
- \tl_if_empty:nTF { #2 }
- {
- \__chemmacros_nmr_nucleus:VV
- \l__chemmacros_nmr_isotope_default_tl
- \l__chemmacros_nmr_element_default_tl
- }
- { \__chemmacros_nmr_nucleus:w #2 \q_stop }
- \mode_if_math:TF
- {
- \text
- {
- \group_begin:
- \tl_use:N \l__chemmacros_nmr_format_tl
- \__chemmacros_nmr_base:VV
- \g__chemmacros_nmr_isotope_tl
- \g__chemmacros_nmr_element_tl
- \bool_if:NT \l__chemmacros_nmr_delimiters_bool
- { ~ ( }
- \bool_if:NT \l__chemmacros_nmr_frequency_bool
- { \__chemmacros_nmr_frequency:n { #3 } }
- \bool_if:NT \l__chemmacros_nmr_comma_bool
- { , ~ }
- \bool_if:NT \l__chemmacros_nmr_solvent_bool
- { \chemmacros_atom:n { #4 } }
- \bool_if:NT \l__chemmacros_nmr_delimiters_bool
- { ) }
- \tl_if_blank:nT { #1 } { : ~ }
- \group_end:
- }
- \tl_if_blank:nT { #1 }
- {
- \delta
- \text { \l__chemmacros_nmr_delta_tl }
- \bool_if:NT \l__chemmacros_nmr_use_equal_bool { = }
- }
- }
- {
- \group_begin:
- \tl_use:N \l__chemmacros_nmr_format_tl
- \__chemmacros_nmr_base:VV
- \g__chemmacros_nmr_isotope_tl
- \g__chemmacros_nmr_element_tl
- \bool_if:NT \l__chemmacros_nmr_delimiters_bool
- { ~ ( }
- \bool_if:NT \l__chemmacros_nmr_frequency_bool
- { \__chemmacros_nmr_frequency:n { #3 } }
- \bool_if:NT \l__chemmacros_nmr_comma_bool
- { , ~ }
- \bool_if:NT \l__chemmacros_nmr_solvent_bool
- {
- \bool_if:NTF \l__chemmacros_nmr_parse_bool
- { \chemformula_ch:nn { } { #4 } }
- { #4 }
- }
- \bool_if:NT \l__chemmacros_nmr_delimiters_bool
- { ) }
- \tl_if_blank:nT { #1 } { : }
- \group_end:
- \tl_if_blank:nT { #1 }
- {
- \tl_use:N \c_space_tl
- \c_math_toggle_token
- \delta
- \c_math_toggle_token
- \l__chemmacros_nmr_delta_tl
- \bool_if:NT \l__chemmacros_nmr_use_equal_bool { ~ = }
- }
- \bool_if:NF \l__chemmacros_nmr_comma_bool
- { \tl_if_blank:nT { #1 } { \chemmacros_xspace: } }
- }
- \group_end:
- }
- }
-
-\NewDocumentCommand \chemmacros_data:w { smo }
- {
- \bool_if:NT \l__chemmacros_nmr_list_bool { \item }
- {
- \tl_use:N \l__chemmacros_nmr_format_tl #2
- \IfNoValueF { #3 } { ~ ( #3 ) }
- \IfBooleanT { #1 } { \bool_if:NT \l__chemmacros_nmr_use_equal_bool { : } }
- }
- \IfBooleanF { #1 } { \bool_if:NT \l__chemmacros_nmr_use_equal_bool { ~ = } }
- }
-
-\cs_new_protected:Npn \chemmacros_val:n #1
- {
- \tl_if_in:nnTF { #1 } { -- }
- { \chemmacros_val_aux:w #1 \q_nil }
- { \num { #1 } }
- }
-
-\cs_new_protected:Npn \chemmacros_val_aux:w #1--#2 \q_nil
- { \numrange { #1 } { #2 } }
-
-\NewDocumentEnvironment { experimental } { o }
- {
- \group_begin:
- \IfNoValueF { #1 } { \keys_set:nn { chemmacros / nmr } { #1 } }
- \bool_set_true:N \l__chemmacros_nmr_inner_bool
- \cs_set_eq:NN \# \chemmacros_nmr_number:n
- \cs_set_eq:NN \pos \chemmacros_nmr_position:n
- \cs_set_eq:NN \J \chemmacros_nmr_coupling:w
- \cs_set_eq:NN \data \chemmacros_data:w
- \cs_set_eq:NN \val \chemmacros_val:n
- \bool_if:NT \l__chemmacros_nmr_list_bool
- { \list {} { \l__chemmacros_nmr_list_setup_tl } }
- }
- {
- \bool_if:NT \l__chemmacros_nmr_list_bool
- { \endlist }
- \group_end:
- \chemmacros_ignore_spaces:
- }
-
-\cs_new_protected:Npn \chemmacros_nmr_number:n #1
- {
- \__chemmacros_nmr_number:n { #1 } \,
- \chemmacros_atom:V \g__chemmacros_nmr_element_tl
- }
-
-\cs_new_protected:Npn \chemmacros_nmr_position:n #1
- {
- \chemmacros_chemformula:x
- {
- \exp_not:V \g__chemmacros_nmr_element_tl
- \bool_if:NF \l__chemmacros_nmr_position_side_bool
- {
- \exp_not:V \l__chemmacros_nmr_position_tl
- \exp_not:n { {#1} }
- }
- }
- \bool_if:NT \l__chemmacros_nmr_position_side_bool
- {
- \tl_use:N \l__chemmacros_nmr_position_tl
- \__chemmacros_nmr_position:n { #1 }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_nmr_coupling:w
- {
- \tl_clear:N \l__chemmacros_nmr_coupling_nuclei_tl
- \tl_clear:N \l__chemmacros_nmr_coupling_bonds_tl
- \peek_meaning:NTF (
- { \__chemmacros_nmr_coupling:w }
- { \__chemmacros_nmr_coupling_aux_i:w }
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_coupling:w (#1;#2)
- {
- \tl_set:Nn \l__chemmacros_nmr_coupling_bonds_tl
- {
- \l__chemmacros_nmr_coupling_bonds_pre_tl
- #1
- \l__chemmacros_nmr_coupling_bonds_post_tl
- }
- \bool_if:NTF \l__chemmacros_nmr_coupling_nuclei_sub_bool
- {
- \tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_tl
- {
- \c_math_subscript_token
- { \chemmacros_chemformula:n {#2} }
- }
- }
- {
- \tl_set:Nn \l__chemmacros_nmr_coupling_nuclei_tl
- {
- \l__chemmacros_nmr_coupling_nuclei_pre_tl
- \chemmacros_chemformula:n {#2}
- \l__chemmacros_nmr_coupling_nuclei_post_tl
- }
- }
- \__chemmacros_nmr_coupling_aux_i:w
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_coupling_aux_i:w
- {
- \peek_meaning:NTF [
- { \__chemmacros_nmr_coupling_aux_ii:w }
- { \__chemmacros_nmr_coupling_aux_iii:n }
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_coupling_aux_ii:w [#1]#2
- {
- \group_begin:
- \sisetup
- {
- list-final-separator={,~},
- list-pair-separator={,~},
- list-units=single
- }
- \c_math_toggle_token
- ^{ \l__chemmacros_nmr_coupling_bonds_tl }
- \l__chemmacros_nmr_coupling_symbol_tl
- \l__chemmacros_nmr_coupling_nuclei_tl = \SIlist{#2}{#1}
- \c_math_toggle_token
- \group_end:
- }
-
-\cs_new_protected:Npn \__chemmacros_nmr_coupling_aux_iii:n #1
- {
- \group_begin:
- \sisetup
- {
- list-final-separator={,~},
- list-pair-separator={,~},
- list-units=single
- }
- \c_math_toggle_token
- ^{ \l__chemmacros_nmr_coupling_bonds_tl }
- \l__chemmacros_nmr_coupling_symbol_tl
- \l__chemmacros_nmr_coupling_nuclei_tl
- = \exp_args:Nno \SIlist { #1 } { \l__chemmacros_nmr_coupling_unit_tl }
- \c_math_toggle_token
- \group_end:
- }
-
-% --------------------------------------------------------------------------
-% deprecated mhName:
-\keys_define:nn { chemmacros }
- { mhName .code:n = \chemmacros_option_deprecated:n { mhName } }
-
-% --------------------------------------------------------------------------- %
-% - phases
-\bool_new:N \l__chemmacros_phases_sub_bool
-\dim_new:N \l__chemmacros_phases_space_dim
-\dim_set:Nn \l__chemmacros_phases_space_dim { .1333 em }
-\prop_new:N \l__chemmacros_phases_prop
-\prop_new:N \l__chemmacros_phases_german_prop
-
-\keys_define:nn { chemmacros / phases }
- {
- pos .choice: ,
- pos / sub .code:n = \bool_set_true:N \l__chemmacros_phases_sub_bool ,
- pos / side .code:n = \bool_set_false:N \l__chemmacros_phases_sub_bool ,
- space .dim_set:N = \l__chemmacros_phases_space_dim
- }
-
-\cs_new_protected:Npn \chemmacros_new_phase:Nn #1#2
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl
- { \chemmacros_remove_backslash:N #1 }
- \cs_if_free:NF #1
- { \msg_error:nnn {chemmacros} {new-phase} {#1} }
- \exp_args:Nx \@trnslt@declare@translation
- { phase-\l__chemmacros_tmpa_tl } {fallback} {#2}
- \__chemmacros_define_phase:Nx #1
- {
- \exp_not:N \chemmacros_translate:n
- { phase-\l__chemmacros_tmpa_tl }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_define_phase:Nn #1#2
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl
- { \chemmacros_remove_backslash:N #1 }
- \exp_args:Nx \@trnslt@declare@translation
- { phase-\l__chemmacros_tmpa_tl } {fallback} {#2}
- \__chemmacros_define_phase:Nx #1
- {
- \exp_not:N \chemmacros_translate:n
- { phase-\l__chemmacros_tmpa_tl }
- }
- }
-
-\cs_new_protected:Npn \chemmacros_renew_phase:Nn #1#2
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl
- { \chemmacros_remove_backslash:N #1 }
- \cs_if_exist:NF #1
- { \msg_error:nnn {chemmacros} {renew-phase} {#1} }
- \exp_args:Nx \@trnslt@declare@translation
- { phase-\l__chemmacros_tmpa_tl } {fallback} {#2}
- \__chemmacros_define_phase:Nx #1
- {
- \exp_not:N \chemmacros_translate:n
- { phase-\l__chemmacros_tmpa_tl }
- }
- }
-
-\NewDocumentCommand \NewChemPhase { mom }
- { \chemmacros_new_phase:Nn #1 {#3} }
-
-\NewDocumentCommand \DeclareChemPhase { mom }
- { \chemmacros_define_phase:Nn #1 {#3} }
-
-\NewDocumentCommand \RenewChemPhase { mom }
- { \chemmacros_renew_phase:Nn #1 {#3} }
-
-\cs_new_protected:Npn \__chemmacros_define_phase:Nn #1#2
- {
- \cs_if_exist:NF #1 { \cs_new:Npn #1 {} }
- \DeclareDocumentCommand #1 { o }
- {
- \bool_if:NTF \l__chemmacros_phases_sub_bool
- {
- \bool_if:NTF \l_chemformula_inside_ch_bool
- { \chemformula_subscript:n { ( #2 \IfNoValueF {##1} {,~##1} ) } }
- {
- \ensuremath
- {
- \c_math_subscript_token
- { \text { ( #2 \IfNoValueF {##1} {,~##1} ) } }
- }
- }
- }
- {
- \ensuremath
- {
- \skip_horizontal:N \l__chemmacros_phases_space_dim
- \text { ( #2 \IfNoValueF {##1} {,~##1} ) }
- }
- }
- }
- }
-\cs_generate_variant:Nn \__chemmacros_define_phase:Nn { Nx }
-
-\NewChemPhase \sld {s}
-\NewChemPhase \lqd {l}
-\NewChemPhase \gas {g}
-\NewChemPhase \aq {aq}
-
-\cs_new_protected:Npn \chemmacros_phase:n #1
- {
- \bool_if:NTF \l__chemmacros_phases_sub_bool
- { \ensuremath { \c_math_subscript_token { \text { (#1) } } } }
- {
- \ensuremath
- {
- \skip_horizontal:N \l__chemmacros_phases_space_dim
- \text { (#1) }
- }
- }
- }
-
-\NewDocumentCommand \phase { m }
- { \chemmacros_phase:n {#1} }
-
-% --------------------------------------------------------------------------
-% reaction environments
-\cs_new_protected:Npn \__chemmacros_record_for_lor:nnnnn #1#2#3#4#5
- {
- \tl_if_eq:nnT { #1 } { reaction }
- {
- \group_begin:
- % we need to prevent \Hy@make@anchor from being written to the lor
- % file:
- \bool_if:NT \l__chemmacros_hyperref_bool
- { \cs_set:Npn \Hy@make@anchor {} }
- \addcontentsline { lor } { reaction }
- {
- \tl_use:N \l__chemmacros_reaction_lorname_tl
- \tl_use:N \c_space_tl
- #2 #3 #4 #5
- \tl_use:N \g__chemmacros_reaction_description_tl
- }
- \tl_gclear:N \g__chemmacros_reaction_description_tl
- \group_end:
- }
- }
-
-% redefine mathtools' command \MT_define_tagform:nwnn to ensure we add an
-% entry to the list of reactions even if the user redefines the reaction tag
-% this should probably be done via patching...
-\AfterPackage* { mathtools }
- {
- \cs_set_protected:Npn \MT_define_tagform:nwnn #1[#2]#3#4
- {
- \@namedef{MT_tagform_#1:n}##1
- {
- % this is the original part:
- \maketag@@@{#3\ignorespaces#2{##1}\unskip\@@italiccorr#4}
- % this is added => this disturbs hyperref:
- \__chemmacros_record_for_lor:nnnnn
- { #1 } { #3 } { #2 } { ##1 } { #4 }
- }
- }
- }
-
-\tl_new:N \g__chemmacros_reaction_description_tl
-
-\cs_new_protected:Npn \chemmacros_add_reaction_description:n #1
- {
- \tl_if_blank:nF { #1 }
- { \tl_gset:Nn \g__chemmacros_reaction_description_tl { : ~ #1 } }
- }
-
-\NewDocumentCommand \AddRxnDesc { m }
- { \chemmacros_add_reaction_description:n { #1 } }
-
-% define \listofreactions
-\tl_new:N \l__chemmacros_reaction_lorname_tl
-\tl_new:N \reactionlistname
-\tl_new:N \l__chemmacros_reaction_heading_tl
-
-\cs_new:Npn \__chemmacros_reaction_heading:n #1
- { \l__chemmacros_reaction_heading_tl { #1 } }
-\cs_generate_variant:Nn \__chemmacros_reaction_heading:n { V }
-
-\cs_new_protected:Npn \listofreactions
- {
- \__chemmacros_reaction_heading:V \reactionlistname
- \@starttoc { lor }
- }
-
-\cs_new_protected:Npn \l@reaction #1#2
- { \@dottedtocline { 1 } { 1.5em } { 2.3em } { #1 } { #2 } }
-
-% create tagform
-\newtagform { reaction } { \{ } { \} }
-\newcounter { chemmacros_save_reaction }
-\newcounter { reaction }
-
-% switch to reaction tags
-\cs_new_protected:Npn \__chemmacros_begin_reaction:
- {
- % create individual names for `hyperref':
- \bool_if:NT \l__chemmacros_hyperref_bool
- {
- \cs_set:Npn \theHequation
- { R . \theHsection . \arabic { reaction } }
- }
- % enable labelformat `reaction':
- \bool_if:NT \l__chemmacros_varioref_bool
- { \cs_set_eq:NN \p@equation \p@reaction }
- \setcounter { chemmacros_save_reaction } { \value { equation } }
- \setcounter { equation } { \value { reaction } }
- \usetagform { reaction }
- }
-
-% switch back to equation tags
-\cs_new_protected:Npn \__chemmacros_end_reaction:
- {
- \setcounter { reaction } { \value { equation } }
- \setcounter { equation } { \value { chemmacros_save_reaction } }
- }
-
-% --------------------------------------------------------------------------- %
-\bool_new:N \l__chemmacros_reactions_star_bool
-\bool_new:N \l__chemmacros_reactions_args_bool
-
-\keys_define:nn { chemmacros / reaction }
- {
- star .bool_set:N = \l__chemmacros_reactions_star_bool ,
- star .default:n = true ,
- arg .bool_set:N = \l__chemmacros_reactions_args_bool ,
- arg .default:n = true ,
- list-name .tl_set:N = \reactionlistname ,
- list-entry .code:n =
- \tl_set:Nn \l__chemmacros_reaction_lorname_tl { #1 } ,
- list-heading .tl_set:N = \l__chemmacros_reaction_heading_tl
- }
-
-% \DeclareChemReaction[<keyval>]{<name>}{<type>}
-\cs_new_protected:Npn \__chemmacros_define_reaction:Nnnn #1#2#3#4
- {
- \bool_set_false:N \l__chemmacros_reactions_star_bool
- \bool_set_false:N \l__chemmacros_reactions_args_bool
- \keys_set:nn { chemmacros / reaction } { #2 }
- \bool_if:NTF \l__chemmacros_reactions_args_bool
- {
- #1 { #3 } [ 2 ] []
- {
- \__chemmacros_begin_reaction:
- \AddRxnDesc { ##1 }
- \begin { #4 } { ##2 }
- \chemmacros_equation_chemformula:V \BODY
- \end{ #4 }
- \__chemmacros_end_reaction:
- }
- \bool_if:NT \l__chemmacros_reactions_star_bool
- {
- #1 { #3* } [ 1 ]
- {
- \begin { #4* } { ##1 }
- \chemmacros_equation_chemformula:V \BODY
- \end { #4* }
- }
- }
- }
- {
- #1 { #3 } [ 1 ] []
- {
- \__chemmacros_begin_reaction:
- \AddRxnDesc { ##1 }
- \begin { #4 }
- \chemmacros_equation_chemformula:V \BODY
- \end { #4 }
- \__chemmacros_end_reaction:
- }
- \bool_if:NT \l__chemmacros_reactions_star_bool
- {
- #1 { #3* }
- {
- \begin { #4* }
- \chemmacros_equation_chemformula:V \BODY
- \end { #4* }
- }
- }
- }
- \ignorespaces
- }
-
-\cs_new_protected:Npn \chemmacros_define_reaction:nnn #1#2#3
- {
- \cs_if_exist:cTF { #2 }
- { \__chemmacros_define_reaction:Nnnn \RenewEnviron { #1 } { #2 } { #3 } }
- { \__chemmacros_define_reaction:Nnnn \NewEnviron { #1 } { #2 } { #3 } }
- }
-
-\cs_new_protected:Npn \chemmacros_new_reaction:nnn #1#2#3
- {
- \cs_if_exist:cTF { #2 }
- { \msg_error:nnx { chemmacros } { already-defined } { #2 } }
- { \__chemmacros_define_reaction:Nnnn \NewEnviron { #1 } { #2 } { #3 } }
- }
-
-\cs_new_protected:Npn \chemmacros_renew_reaction:nnn #1#2#3
- {
- \cs_if_exist:cTF { #2 }
- { \__chemmacros_define_reaction:Nnnn \RenewEnviron { #1 } { #2 } { #3 } }
- { \msg_error:nnx { chemmacros } { not-defined } { #2 } }
- }
-
-\NewDocumentCommand \NewChemReaction { O{} m m }
- { \chemmacros_new_reaction:nnn { #1 } { #2 } { #3 } }
-\NewDocumentCommand \RenewChemReaction { O{} m m }
- { \chemmacros_renew_reaction:nnn { #1 } { #2 } { #3 } }
-\NewDocumentCommand \DeclareChemReaction { O{} m m }
- { \chemmacros_declare_reaction:nnn { #1 } { #2 } { #3 } }
-\DeclareChemDeprecated \newreaction \NewChemReaction
-
-\cs_new_protected:Npn \chemmacros_equation_chemformula:n #1
- { \chemformula_ch:nn { } { #1 } }
-\cs_generate_variant:Nn \chemmacros_equation_chemformula:n { V }
-
-% predefined:
-\NewChemReaction [ star ] { reaction } { equation }
-\NewChemReaction [ star ] { reactions } { align }
-
-% --------------------------------------------------------------------------
-% thermodynamics et.al.
-% \standardstate as defined by the chemstyle package. Thanks to Joseph Wright
-% the `chemstyle' provides it with \providecommand so it doesn't matter which
-% package defines it first
-\ProvideDocumentCommand \standardstate {}
- { { \ensuremath { \chemmacros_standardstate: } } }
-
-\cs_new_protected:Npn \chemmacros_standardstate:
- { \mathpalette \chemmacros_standardstate_aux: \circ }
-
-\cs_new_protected:Npn \chemmacros_standardstate_aux: #1#2
- {
- \ooalign
- {
- \tex_hfil:D
- \c_math_toggle_token #1- \c_math_toggle_token
- \tex_hfil:D
- \tex_cr:D
- \tex_hfil:D
- \c_math_toggle_token #1#2 \c_math_toggle_token
- \tex_hfil:D
- \tex_cr:D
- }
- }
-
-\cs_new_protected:Npn \changestate
- { \mathop{} \! \chemDelta }
-
-% --------------------------------------------------------------------------
-% \State
-\tl_new:N \l__chemmacros_State_delta_tl
-\tl_set:Nn \l__chemmacros_State_delta_tl { \changestate }
-\tl_new:N \l__chemmacros_State_exponent_tl
-\tl_set:Nn \l__chemmacros_State_exponent_tl { \standardstate }
-
-\bool_new:N \l__chemmacros_State_delta_bool
-\bool_set_true:N \l__chemmacros_State_delta_bool
-\bool_new:N \l__chemmacros_State_subscript_left_bool
-\bool_set_true:N \l__chemmacros_State_subscript_left_bool
-\bool_new:N \l__chemmacros_State_exponent_bool
-\bool_set_true:N \l__chemmacros_State_exponent_bool
-
-\keys_define:nn { chemmacros / state }
- {
- delta .code:n =
- {
- \exp_args:Nf \tl_if_eq:nnTF { #1 } { false }
- { \bool_set_false:N \l__chemmacros_State_delta_bool }
- {
- \bool_set_true:N \l__chemmacros_State_delta_bool
- \tl_set:Nn \l__chemmacros_State_delta_tl { #1 }
- }
- } ,
- subscript-left .bool_set:N = \l__chemmacros_State_subscript_left_bool ,
- subscript-left .default:n = true ,
- exponent .code:n =
- {
- \exp_args:Nf \tl_if_eq:nnTF { #1 } { false }
- { \bool_set_false:N \l__chemmacros_State_exponent_bool }
- {
- \bool_set_true:N \l__chemmacros_State_exponent_bool
- \tl_set:Nn \l__chemmacros_State_exponent_tl { #1 }
- }
- } ,
- exponent .default:n = \standardstate
- }
-
-% old syntax (v1.1):
-% \State[<exp>,<Delta>,<subscript pos>]{<Symbol>}{<subscript>}
-% old syntax (v2.0):
-% \State[<keyval>]{<Symbol>}{<subscript>}
-% {<subscript>} is an optional argument!
-\cs_new_protected:Npn \chemmacros_state:nnn #1#2#3
- {
- \group_begin:
- \keys_set:nn { chemmacros / state } { #1 }
- \ensuremath
- {
- \bool_if:NT \l__chemmacros_State_delta_bool
- { \tl_use:N \l__chemmacros_State_delta_tl }
- \bool_if:NT \l__chemmacros_State_subscript_left_bool
- { \c_math_subscript_token { \text { #3 } } }
- #2
- \bool_if:NF \l__chemmacros_State_subscript_left_bool
- { \c_math_subscript_token { \text { #3 } } }
- \bool_if:NT \l__chemmacros_State_exponent_bool
- { ^ { \tl_use:N \l__chemmacros_State_exponent_tl } }
- }
- \group_end:
- }
-\cs_generate_variant:Nn \chemmacros_state:nnn { xnV }
-
-\NewDocumentCommand \State { s O{} m G{} }
- {
- \group_begin:
- \IfBooleanT { #1 }
- {
- \keys_set:nn { chemmacros / state }
- { subscript-left = false , exponent = }
- }
- \chemmacros_state:nnn { #2 } { #3 } { #4 }
- \group_end:
- }
-
-% --------------------------------------------------------------------------
-\tl_new:N \l__chemmacros_thermod_subscript_left_tl
-\tl_new:N \l__chemmacros_thermod_subscript_left_default_tl
-\tl_new:N \l__chemmacros_thermod_subscript_tl
-\tl_new:N \l__chemmacros_thermod_subscript_default_tl
-\tl_new:N \l__chemmacros_thermod_unit_tl
-\tl_new:N \l__chemmacros_thermod_exponent_tl
-\tl_new:N \l__chemmacros_thermod_exponent_default_tl
-\tl_set:Nn \l__chemmacros_thermod_exponent_default_tl { \standardstate }
-\tl_new:N \l__chemmacros_thermod_delta_tl
-\tl_new:N \l__chemmacros_thermod_delta_default_tl
-\tl_set:Nn \l__chemmacros_thermod_delta_default_tl { \changestate }
-
-\bool_new:N \l__chemmacros_renewstate_bool
-\bool_new:N \l__chemmacros_state_overwrite_error_bool
-
-\keys_define:nn { chemmacros }
- {
- State / subscript .choice: ,
- State / subscript / left .code:n =
- { \tl_set:Nn \l__chemmacros_thermod_subscript_left_tl { true } } ,
- State / subscript / right .code:n =
- { \tl_set:Nn \l__chemmacros_thermod_subscript_left_tl { false } } ,
- State / exponent .tl_set:N =
- \l__chemmacros_thermod_exponent_tl ,
- State / delta .tl_set:N =
- \l__chemmacros_thermod_delta_tl ,
- State / unit .tl_set:N =
- \l__chemmacros_thermod_unit_tl ,
- setnewstate / subscript-left .tl_set:N =
- \l__chemmacros_thermod_subscript_left_default_tl ,
- setnewstate / subscript .tl_set:N =
- \l__chemmacros_thermod_subscript_default_tl ,
- setnewstate / exponent .tl_set:N =
- \l__chemmacros_thermod_exponent_default_tl ,
- setnewstate / delta .tl_set:N =
- \l__chemmacros_thermod_delta_default_tl
- }
-
-% \NewChemState{<name>}[<keyval>]{<symbol>}{<unit>}
-\NewDocumentCommand \NewChemState { omO{}mm }
- {
- \bool_set_false:N \l__chemmacros_renewstate_bool
- \bool_set_true:N \l__chemmacros_state_overwrite_error_bool
- \__chemmacros_setnewstate_reset:
- \IfNoValueTF { #1 }
- { \chemmacros_define_state:nnnn { #3 } { #2 } { #4 } { #5 } }
- {
- \msg_warning:nn { chemmacros } { state-syntax }
- \chemmacros_define_state:nnnn { #1#3 } { #2 } { #4 } { #5 }
- }
- }
-% \DeclareChemState{<name>}[<keyval>]{<symbol>}{<unit>}
-\NewDocumentCommand \DeclareChemState { omO{}mm }
- {
- \bool_set_false:N \l__chemmacros_renewstate_bool
- \bool_set_false:N \l__chemmacros_state_overwrite_error_bool
- \__chemmacros_setnewstate_reset:
- \IfNoValueTF { #1 }
- { \chemmacros_define_state:nnnn { #3 } { #2 } { #4 } { #5 } }
- {
- \msg_warning:nn { chemmacros } { state-syntax }
- \chemmacros_define_state:nnnn { #1#3 } { #2 } { #4 } { #5 }
- }
- }
-% \RenewChemState{<name>}[<keyval>]{<symbol>}{<unit>}
-\NewDocumentCommand \RenewChemState { omO{}mm }
- {
- \bool_set_true:N \l__chemmacros_renewstate_bool
- \bool_set_true:N \l__chemmacros_state_overwrite_error_bool
- \__chemmacros_setnewstate_reset:
- \IfNoValueTF { #1 }
- { \chemmacros_define_state:nnnn { #3 } { #2 } { #4 } { #5 } }
- {
- \msg_warning:nn { chemmacros } { state-syntax }
- \chemmacros_define_state:nnnn { #1#3 } { #2 } { #4 } { #5 }
- }
- }
-% TODO
-\cs_set_protected:Npn \setnewstate
- {
- \msg_warning:nnnn { chemmacros } { command-deprecated }
- { \setnewstate } { \NewChemState }
- \NewChemState
- }
-\cs_set_protected:Npn \renewstate
- {
- \msg_warning:nnnn { chemmacros } { command-deprecated }
- { \renewstate } { \RenewChemState }
- \RenewChemState
- }
-
-\cs_new_protected:Npn \__chemmacros_setnewstate_reset:
- {
- \tl_set:Nn \l__chemmacros_thermod_subscript_left_default_tl { true }
- \tl_clear:N \l__chemmacros_thermod_subscript_default_tl
- \tl_set:Nn \l__chemmacros_thermod_exponent_default_tl { \standardstate }
- \tl_set:Nn \l__chemmacros_thermod_delta_default_tl { \changestate }
- }
-
-\cs_new_protected:Npn \chemmacros_define_state:nnnn #1#2#3#4
- {
- \keys_set:nn { chemmacros / setnewstate } { #1 }
- \chemmacros_if_is_cs:nTF { #2 }
- { \__chemmacros_set_state:xnn { \cs_to_str:N #2 } { #3 } { #4 } }
- {
- \msg_warning:nn { chemmacros } { state-syntax }
- \__chemmacros_set_state:nnn { #2 } { #3 } { #4 }
- }
- }
-
-\cs_new_protected:Npn \__chemmacros_set_state:nnn #1#2#3
- {
- \bool_if:NT \l__chemmacros_state_overwrite_error_bool
- {
- \bool_if:NTF \l__chemmacros_renewstate_bool
- {
- \cs_if_exist:cF { #1 }
- { \msg_error:nnx { chemmacros } { nenew-state } { #1 } }
- }
- {
- \cs_if_exist:cT { #1 }
- { \msg_error:nnx { chemmacros } { new-state } { #1 } }
- }
- }
- \cs_undefine:c { chemmacros_ #1 _reset: }
- \cs_undefine:c { c__chemmacros_ #1 _subscript_tl }
- \cs_undefine:c { c__chemmacros_ #1 _exponent_tl }
- \cs_undefine:c { c__chemmacros_ #1 _delta_tl }
- \cs_undefine:c { c__chemmacros_ #1 _left_tl }
- \cs_undefine:c { c__chemmacros_ #1 _unit_tl }
- \cs_undefine:c { #1 }
- \cs_undefine:c { #1 _aux_i:n }
- \cs_undefine:c { #1 _aux_ii:n }
- \cs_undefine:c { #1 _aux_iii:n }
- \group_begin:
- \tl_const:cV
- { c__chemmacros_ #1 _subscript_tl }
- \l__chemmacros_thermod_subscript_default_tl
- \tl_const:cV
- { c__chemmacros_ #1 _exponent_tl }
- \l__chemmacros_thermod_exponent_default_tl
- \tl_const:cV
- { c__chemmacros_ #1 _delta_tl }
- \l__chemmacros_thermod_delta_default_tl
- \tl_const:cV
- { c__chemmacros_ #1 _left_tl }
- \l__chemmacros_thermod_subscript_left_default_tl
- \tl_const:cn
- { c__chemmacros_ #1 _unit_tl }
- { #3 }
- \cs_new_protected:cpn {chemmacros_ #1 _reset: }
- {
- \tl_set_eq:Nc
- \l__chemmacros_thermod_subscript_tl
- { c__chemmacros_ #1 _subscript_tl }
- \tl_set_eq:Nc
- \l__chemmacros_thermod_exponent_tl
- { c__chemmacros_ #1 _exponent_tl }
- \tl_set_eq:Nc
- \l__chemmacros_thermod_delta_tl
- { c__chemmacros_ #1 _delta_tl }
- \tl_set_eq:Nc
- \l__chemmacros_thermod_subscript_left_tl
- { c__chemmacros_ #1 _left_tl }
- \tl_set_eq:Nc
- \l__chemmacros_thermod_unit_tl
- { c__chemmacros_ #1 _unit_tl }
- }
- \cs_new_protected:cpn { #1 }
- {
- \use:c {chemmacros_ #1 _reset: }
- \peek_meaning:NTF [
- { \tl_use:c { #1 _aux_i:n } }
- {
- \peek_meaning:NTF (
- { \tl_use:c { #1 _aux_ii:n } }
- { \tl_use:c { #1 _aux_iii:n } }
- }
- }
- \cs_new_protected:cpn { #1 _aux_i:n } [##1]
- {
- \keys_set:nn { chemmacros / State } { ##1 }
- \peek_meaning:NTF (
- { \tl_use:c { #1 _aux_ii:n } }
- { \tl_use:c { #1 _aux_iii:n } }
- }
- \cs_new_protected:cpn { #1 _aux_ii:n } (##1)
- {
- \tl_set:Nn \l__chemmacros_thermod_subscript_tl { ##1 }
- \tl_use:c { #1 _aux_iii:n }
- }
- \cs_new_protected:cpn { #1 _aux_iii:n } ##1
- {
- \ensuremath
- {
- \tl_if_eq:VnTF
- \l__chemmacros_thermod_subscript_left_tl { true }
- {
- \chemmacros_state:xnV
- {
- subscript-left = true ,
- exponent =
- { \exp_not:V \l__chemmacros_thermod_exponent_tl } ,
- delta =
- { \exp_not:V \l__chemmacros_thermod_delta_tl }
- }
- { #2 }
- }
- {
- \chemmacros_state:xnV
- {
- subscript-left = false ,
- exponent =
- { \exp_not:V \l__chemmacros_thermod_exponent_tl } ,
- delta =
- { \exp_not:V \l__chemmacros_thermod_delta_tl }
- }
- { #2 }
- }
- \l__chemmacros_thermod_subscript_tl
- =
- \exp_args:NnV \SI { ##1 } \l__chemmacros_thermod_unit_tl
- }
- }
- \group_end:
- \ignorespaces
- }
-\cs_generate_variant:Nn \__chemmacros_set_state:nnn { x }
-
-% predefined:
-\NewChemState \Enthalpy {H} {\kilo\joule\per\mole}
-\NewChemState \Entropy [ delta=false, subscript-left=false ]
- {S} {\joule\per\kelvin\per\mole}
-\NewChemState \Gibbs {G} {\kilo\joule\per\mole}
-
-% --------------------------------------------------------------------------
-% Newman projections
-\fp_new:N \l__chemmacros_newman_rel_angle_fp
-\fp_zero:N \l__chemmacros_newman_rel_angle_fp
-\fp_new:N \l__chemmacros_newman_tmp_angle_fp
-\fp_new:N \l__chemmacros_newman_abs_angle_fp
-\fp_zero:N \l__chemmacros_newman_abs_angle_fp
-\fp_new:N \l__chemmacros_newman_scale_fp
-\fp_set:Nn \l__chemmacros_newman_scale_fp { 1 }
-\fp_new:N \l__chemmacros_newman_x_fp
-\fp_new:N \l__chemmacros_newman_y_fp
-
-\tl_new:N \l__chemmacros_newman_tikz_ring_tl
-\tl_new:N \l__chemmacros_newman_tikz_front_tl
-\tl_new:N \l__chemmacros_newman_tikz_back_tl
-
-\bool_new:N \l__chemmacros_newman_tikz_back_bool
-
-\keys_define:nn { chemmacros / newman }
- {
- ring .tl_set:N = \l__chemmacros_newman_tikz_ring_tl ,
- atoms .tl_set:N = \l__chemmacros_newman_tikz_front_tl ,
- back-atoms .code:n =
- {
- \bool_set_true:N \l__chemmacros_newman_tikz_back_bool
- \tl_set:Nn \l__chemmacros_newman_tikz_back_tl { #1 }
- } ,
- scale .fp_set:N = \l__chemmacros_newman_scale_fp ,
- scale .default:n = 1 ,
- angle .fp_set:N = \l__chemmacros_newman_abs_angle_fp ,
- angle .default:n = 0
- }
-
-% \newman[<keyval>](<angle>){<1>,<2>,<3>,<4>,<5>,<6>}
-\NewDocumentCommand \newman { o d() > { \SplitArgument { 5 } { , } } m }
- {
- \group_begin:
- \IfNoValueF { #1 } { \keys_set:nn { chemmacros / newman } { #1 } }
- \IfNoValueTF { #2 }
- { \chemmacros_newman_atoms:nnnnnnn { } #3 }
- { \chemmacros_newman_atoms:nnnnnnn { #2 } #3 }
- \group_end:
- }
-
-% place atoms:
-% #1: angle
-% #2 - #7: atoms
-\cs_new_protected:Npn \chemmacros_newman_atoms:nnnnnnn #1#2#3#4#5#6#7
- {
- \tl_if_blank:nTF { #1 }
- {
- \fp_set_eq:NN
- \l__chemmacros_newman_rel_angle_fp
- \l__chemmacros_newman_abs_angle_fp
- }
- { \fp_set:Nn \l__chemmacros_newman_rel_angle_fp { #1 } }
- \chemmacros_tikz_picture:xn
- {
- scale = \fp_to_tl:N \l__chemmacros_newman_scale_fp ,
- chemmacros_newman_atom_front / .style =
- {
- inner~sep=0pt,
- outer~sep=0pt,
- \tl_use:N \l__chemmacros_newman_tikz_front_tl
- },
- chemmacros_newman_atom_back / .style =
- {
- inner~sep=0pt,
- outer~sep=0pt,
- \bool_if:NTF \l__chemmacros_newman_tikz_back_bool
- { \tl_use:N \l__chemmacros_newman_tikz_back_tl }
- { \tl_use:N \l__chemmacros_newman_tikz_front_tl }
- }
- }
- {
- \chemmacros_tikz_draw:f
- { \tl_use:N \l__chemmacros_newman_tikz_ring_tl }
- (0pt,0pt) circle (\fp_to_dim:N \l__chemmacros_newman_scale_fp * 15) ;
- \chemmacros_newman_back_node:nn
- { 30 }
- { \IfNoValueF { #6 } { #6 } }
- \chemmacros_newman_back_node:nf
- { 150 }
- { \IfNoValueF { #7 } { #7 } }
- \chemmacros_newman_back_node:nf
- { 270 }
- { \IfNoValueF { #5 } { #5 } }
- \chemmacros_newman_front_node:nf
- { 90 }
- { \IfNoValueF { #2 } { #2 } }
- \chemmacros_newman_front_node:nf
- { 210 }
- { \IfNoValueF { #3 } { #3 } }
- \chemmacros_newman_front_node:nf
- { 330 }
- { \IfNoValueF { #4 } { #4 } }
- }
- }
-
-% provide cartesian coordiantes from polar coordinates
-% #1: fp variable for x
-% #2: fp variable for y
-% #3: angle
-% #4: radius
-\cs_new_protected:Npn \chemmacros_polar_to_cartesian:NNnn #1#2#3#4
- {
- \fp_set:Nn #1 { #4 * cos( #3 / 180 * pi ) }% x
- \fp_set:Nn #2 { #4 * sin( #3 / 180 * pi ) }% y
- }
-
-% place back nodes
-\cs_new_protected:Npn \chemmacros_newman_back_node:nn #1#2
- {
- \group_begin:
- \fp_add:Nn \l__chemmacros_newman_rel_angle_fp { #1 }
- \chemmacros_polar_to_cartesian:NNnn
- \l__chemmacros_newman_x_fp
- \l__chemmacros_newman_y_fp
- { \l__chemmacros_newman_rel_angle_fp }
- { \l__chemmacros_newman_scale_fp }
- \chemmacros_tikz_draw:f
- { \tl_use:N \l__chemmacros_newman_tikz_ring_tl }
- (
- 15 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
- 15 * \fp_to_dim:N \l__chemmacros_newman_y_fp
- )
- --
- (
- 30 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
- 30 * \fp_to_dim:N \l__chemmacros_newman_y_fp
- ) ;
- \chemmacros_polar_to_cartesian:NNnn
- \l__chemmacros_newman_x_fp
- \l__chemmacros_newman_y_fp
- { \l__chemmacros_newman_rel_angle_fp }
- { \l__chemmacros_newman_scale_fp }
- \chemmacros_tikz_node:f
- {
- chemmacros_newman_atom_back,
- anchor = -180 + \fp_to_int:N \l__chemmacros_newman_rel_angle_fp
- }
- at
- (
- 31 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
- 31 * \fp_to_dim:N \l__chemmacros_newman_y_fp
- )
- { #2 } ;
- \group_end:
- }
-\cs_generate_variant:Nn \chemmacros_newman_back_node:nn { nf }
-
-% place front nodes:
-\cs_new_protected:Npn \chemmacros_newman_front_node:nn #1#2
- {
- \chemmacros_polar_to_cartesian:NNnn
- \l__chemmacros_newman_x_fp
- \l__chemmacros_newman_y_fp
- { #1 }
- { \l__chemmacros_newman_scale_fp }
- \chemmacros_tikz_draw:f
- { \tl_use:N \l__chemmacros_newman_tikz_ring_tl }
- (0pt,0pt) -- ++
- (
- 30 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
- 30 * \fp_to_dim:N \l__chemmacros_newman_y_fp
- ) ;
- \chemmacros_polar_to_cartesian:NNnn
- \l__chemmacros_newman_x_fp
- \l__chemmacros_newman_y_fp
- { #1 }
- { \l__chemmacros_newman_scale_fp }
- \chemmacros_tikz_node:f
- { chemmacros_newman_atom_front, anchor = -180 + #1 }
- at
- (
- 31 * \fp_to_dim:N \l__chemmacros_newman_x_fp ,
- 31 * \fp_to_dim:N \l__chemmacros_newman_y_fp
- )
- { #2 } ;
- }
-\cs_generate_variant:Nn \chemmacros_newman_front_node:nn { nf }
-
-% --------------------------------------------------------------------------
-% \orbital[<keyval>]{<type>}
-% variables:
-\bool_new:N \l__chemmacros_orbital_type_s_bool
-\bool_new:N \l__chemmacros_orbital_type_p_bool
-\bool_new:N \l__chemmacros_orbital_type_sp_bool
-\bool_new:N \l__chemmacros_orbital_type_sptwo_bool
-\bool_new:N \l__chemmacros_orbital_type_spthree_bool
-\bool_new:N \l__chemmacros_orbital_s_phase_bool
-\bool_set_true:N \l__chemmacros_orbital_s_phase_bool
-\bool_new:N \l__chemmacros_orbital_p_phase_bool
-\bool_set_true:N \l__chemmacros_orbital_p_phase_bool
-\bool_new:N \l__chemmacros_orbital_sp_phase_bool
-\bool_set_true:N \l__chemmacros_orbital_sp_phase_bool
-\bool_new:N \l__chemmacros_orbital_sptwo_phase_bool
-\bool_set_true:N \l__chemmacros_orbital_sptwo_phase_bool
-\bool_new:N \l__chemmacros_orbital_spthree_phase_bool
-\bool_set_true:N \l__chemmacros_orbital_spthree_phase_bool
-\bool_new:N \l__chemmacros_orbital_p_half_bool
-\bool_new:N \l__chemmacros_orbital_overlay_bool
-\bool_new:N \l__chemmacros_orbital_opacity_bool
-
-\tl_new:N \l__chemmacros_orbital_s_color_tl
-\tl_set:Nn \l__chemmacros_orbital_s_color_tl { black }
-\tl_new:N \l__chemmacros_orbital_s_phase_color_tl
-\tl_new:N \l__chemmacros_orbital_p_color_tl
-\tl_set:Nn \l__chemmacros_orbital_p_color_tl { black }
-\tl_new:N \l__chemmacros_orbital_p_pphase_color_tl
-\tl_new:N \l__chemmacros_orbital_p_mphase_color_tl
-\tl_new:N \l__chemmacros_orbital_sp_color_tl
-\tl_set:Nn \l__chemmacros_orbital_sp_color_tl { black }
-\tl_new:N \l__chemmacros_orbital_sp_pphase_color_tl
-\tl_new:N \l__chemmacros_orbital_sp_mphase_color_tl
-\tl_new:N \l__chemmacros_orbital_sptwo_color_tl
-\tl_set:Nn \l__chemmacros_orbital_sptwo_color_tl { black }
-\tl_new:N \l__chemmacros_orbital_sptwo_pphase_color_tl
-\tl_new:N \l__chemmacros_orbital_sptwo_mphase_color_tl
-\tl_new:N \l__chemmacros_orbital_spthree_color_tl
-\tl_set:Nn \l__chemmacros_orbital_spthree_color_tl { black }
-\tl_new:N \l__chemmacros_orbital_spthree_pphase_color_tl
-\tl_new:N \l__chemmacros_orbital_spthree_mphase_color_tl
-\tl_new:N \l__chemmacros_orbital_s_scale_tl
-\tl_set:Nn \l__chemmacros_orbital_s_scale_tl { 1 }
-\tl_new:N \l__chemmacros_orbital_p_scale_tl
-\tl_set:Nn \l__chemmacros_orbital_p_scale_tl { 1 }
-\tl_new:N \l__chemmacros_orbital_sp_scale_tl
-\tl_set:Nn \l__chemmacros_orbital_sp_scale_tl { 1 }
-\tl_new:N \l__chemmacros_orbital_sptwo_scale_tl
-\tl_set:Nn \l__chemmacros_orbital_sptwo_scale_tl { 1 }
-\tl_new:N \l__chemmacros_orbital_spthree_scale_tl
-\tl_set:Nn \l__chemmacros_orbital_spthree_scale_tl { 1 }
-
-\fp_new:N \l__chemmacros_orbital_angle_fp
-\fp_set:Nn \l__chemmacros_orbital_angle_fp { 90 }
-\fp_new:N \l__chemmacros_orbital_opacity_fp
-\fp_set:Nn \l__chemmacros_orbital_opacity_fp { 0.5 }
-
-\cs_new:Npn \__chemmacros_orbital_options:
- {
- \__chemmacros_orbital_overlay: , \__chemmacros_orbital_opacity: ,
- inner~sep=0 , outer~sep=0 , line~width=.2pt ,
- rotate = { \fp_use:N \l__chemmacros_orbital_angle_fp - 90 } ,
- baseline ,
- minimum~size = 0
- }
-
-\cs_new:Npn \__chemmacros_orbital_overlay:
- { \bool_if:NT \l__chemmacros_orbital_overlay_bool { overlay } }
-
-\cs_new:Npn \__chemmacros_orbital_opacity:
- {
- \bool_if:NT \l__chemmacros_orbital_opacity_bool
- { opacity = { \fp_use:N \l__chemmacros_orbital_opacity_fp } }
- }
-
-% --------------------------------------------------------------------------
-% s-orbitals
-\cs_new_protected:Npn \__chemmacros_orbital_type_s:
- {
- \bool_set_true:N \l__chemmacros_orbital_type_s_bool
- \bool_set_false:N \l__chemmacros_orbital_type_p_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
- \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
- }
-
-\keys_define:nn { chemmacros / orbital / s }
- {
- phase .choice: ,
- phase / + .code:n =
- { \bool_set_true:N \l__chemmacros_orbital_s_phase_bool } ,
- phase / - .code:n =
- { \bool_set_false:N \l__chemmacros_orbital_s_phase_bool } ,
- scale .tl_set:N = \l__chemmacros_orbital_s_scale_tl ,
- color .tl_set:N = \l__chemmacros_orbital_s_color_tl
- }
-
-\cs_new_protected:Npn \__chemmacros_orbital_s_draw:n #1
- {
- \keys_set:nn { chemmacros / orbital / s } { #1 }
- \bool_if:NTF \l__chemmacros_orbital_s_phase_bool
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_s_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_s_phase_color_tl
- { \tl_use:N \l__chemmacros_orbital_s_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_s_phase_color_tl
- { \tl_use:N \l__chemmacros_orbital_s_color_tl ! 90 }
- }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_s_phase_color_tl
- { black ! 5 }
- }
- \chemmacros_tikz_picture:xn{ \__chemmacros_orbital_options: }
- {
- \chemmacros_tikz_shade:f
- { ball~color = \l__chemmacros_orbital_s_phase_color_tl }
- (0pt,0pt) circle (\l__chemmacros_orbital_s_scale_tl * .6em) ;
- }
- }
-
-% --------------------------------------------------------------------------
-% p-orbitals
-\cs_new_protected:Npn \__chemmacros_orbital_type_p:
- {
- \bool_set_false:N \l__chemmacros_orbital_type_s_bool
- \bool_set_true:N \l__chemmacros_orbital_type_p_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
- \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
- }
-
-\keys_define:nn { chemmacros / orbital / p }
- {
- phase .choice: ,
- phase / + .code:n =
- { \bool_set_true:N \l__chemmacros_orbital_p_phase_bool } ,
- phase / - .code:n =
- { \bool_set_false:N \l__chemmacros_orbital_p_phase_bool } ,
- scale .tl_set:N = \l__chemmacros_orbital_p_scale_tl ,
- angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
- color .tl_set:N = \l__chemmacros_orbital_p_color_tl ,
- half .bool_set:N = \l__chemmacros_orbital_p_half_bool ,
- half .default:n = true
- }
-
-\cs_new_protected:Npn \__chemmacros_orbital_p_draw:n #1
- {
- \keys_set:nn { chemmacros / orbital / p } { #1 }
- \bool_if:NTF \l__chemmacros_orbital_p_phase_bool
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_p_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_p_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_p_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_p_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_p_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_p_mphase_color_tl
- { black ! 5 }
-
- }
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_p_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_p_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_p_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_p_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_p_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_p_pphase_color_tl
- { black ! 5 }
- }
- \chemmacros_tikz_picture:xn { \__chemmacros_orbital_options: }
- {
- \chemmacros_tikz_shadedraw:f
- {
- draw = \l__chemmacros_orbital_p_pphase_color_tl ,
- ball~color = \l__chemmacros_orbital_p_pphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_p_scale_tl * 2em ,
- \l__chemmacros_orbital_p_scale_tl * 2em
- )
- and ++
- (
- \l__chemmacros_orbital_p_scale_tl * 2em ,
- \l__chemmacros_orbital_p_scale_tl * 2em
- )
- .. (0pt,0pt);
- \bool_if:NF \l__chemmacros_orbital_p_half_bool
- {
- \chemmacros_tikz_shadedraw:f
- {
- draw = \l__chemmacros_orbital_p_mphase_color_tl ,
- ball~color = \l__chemmacros_orbital_p_mphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_p_scale_tl * 2em ,
- - \l__chemmacros_orbital_p_scale_tl * 2em
- )
- and ++
- (
- \l__chemmacros_orbital_p_scale_tl * 2em ,
- - \l__chemmacros_orbital_p_scale_tl * 2em
- )
- .. (0pt,0pt);
- }
- }
- }
-
-% --------------------------------------------------------------------------
-% sp-orbitals
-\cs_new_protected:Npn \__chemmacros_orbital_type_sp:
- {
- \bool_set_false:N \l__chemmacros_orbital_type_s_bool
- \bool_set_false:N \l__chemmacros_orbital_type_p_bool
- \bool_set_true:N \l__chemmacros_orbital_type_sp_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
- \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
- }
-
-\keys_define:nn { chemmacros / orbital / sp }
- {
- phase .choice: ,
- phase / + .code:n =
- { \bool_set_true:N \l__chemmacros_orbital_sp_phase_bool } ,
- phase / - .code:n =
- { \bool_set_false:N \l__chemmacros_orbital_sp_phase_bool } ,
- scale .tl_set:N = \l__chemmacros_orbital_sp_scale_tl ,
- angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
- color .tl_set:N = \l__chemmacros_orbital_sp_color_tl
- }
-
-\cs_new_protected:Npn \__chemmacros_orbital_sp_draw:n #1
- {
- \keys_set:nn { chemmacros / orbital / sp } { #1 }
- \bool_if:NTF \l__chemmacros_orbital_sp_phase_bool
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_sp_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_sp_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sp_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_sp_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sp_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_sp_mphase_color_tl
- { black ! 5 }
-
- }
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_sp_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_sp_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sp_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_sp_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sp_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_sp_pphase_color_tl
- { black ! 5 }
- }
- \chemmacros_tikz_picture:xn { \__chemmacros_orbital_options: }
- {
- \chemmacros_tikz_shadedraw:f
- {
- draw = \l__chemmacros_orbital_sp_pphase_color_tl ,
- ball~color = \l__chemmacros_orbital_sp_pphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_sp_scale_tl * 2em ,
- \l__chemmacros_orbital_sp_scale_tl * 2em
- )
- and ++
- (
- \l__chemmacros_orbital_sp_scale_tl * 2em ,
- \l__chemmacros_orbital_sp_scale_tl * 2em
- )
- .. (0pt,0pt);
- \chemmacros_tikz_shadedraw:f
- {
- draw = \l__chemmacros_orbital_sp_mphase_color_tl ,
- ball~color = \l__chemmacros_orbital_sp_mphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_sp_scale_tl * .6em ,
- - \l__chemmacros_orbital_sp_scale_tl * .6em
- )
- and ++
- (
- \l__chemmacros_orbital_sp_scale_tl * .6em ,
- - \l__chemmacros_orbital_sp_scale_tl * .6em
- )
- .. (0pt,0pt);
- }
- }
-
-% --------------------------------------------------------------------------
-% sp2-orbitals
-\cs_new_protected:Npn \__chemmacros_orbital_type_sptwo:
- {
- \bool_set_false:N \l__chemmacros_orbital_type_s_bool
- \bool_set_false:N \l__chemmacros_orbital_type_p_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
- \bool_set_true:N \l__chemmacros_orbital_type_sptwo_bool
- \bool_set_false:N \l__chemmacros_orbital_type_spthree_bool
- }
-
-\keys_define:nn { chemmacros / orbital / sp2 }
- {
- phase .choice: ,
- phase / + .code:n =
- { \bool_set_true:N \l__chemmacros_orbital_sptwo_phase_bool } ,
- phase / - .code:n =
- { \bool_set_false:N \l__chemmacros_orbital_sptwo_phase_bool } ,
- scale .tl_set:N = \l__chemmacros_orbital_sptwo_scale_tl ,
- angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
- color .tl_set:N = \l__chemmacros_orbital_sptwo_color_tl
- }
-
-\cs_new_protected:Npn \__chemmacros_orbital_sptwo_draw:n #1
- {
- \keys_set:nn { chemmacros / orbital / sp2 } { #1 }
- \bool_if:NTF \l__chemmacros_orbital_sptwo_phase_bool
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_sptwo_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_sptwo_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_sptwo_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_sptwo_mphase_color_tl
- { black ! 5 }
-
- }
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_sptwo_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_sptwo_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_sptwo_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_sptwo_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_sptwo_pphase_color_tl
- { black ! 5 }
- }
- \chemmacros_tikz_picture:xn { \__chemmacros_orbital_options: }
- {
- \chemmacros_tikz_shadedraw:f
- {
- draw = \l__chemmacros_orbital_sptwo_pphase_color_tl ,
- ball~color = \l__chemmacros_orbital_sptwo_pphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_sptwo_scale_tl * 2em ,
- \l__chemmacros_orbital_sptwo_scale_tl * 2em
- )
- and ++
- (
- \l__chemmacros_orbital_sptwo_scale_tl * 2em ,
- \l__chemmacros_orbital_sptwo_scale_tl * 2em
- )
- .. (0pt,0pt);
- \chemmacros_tikz_shadedraw:f
- {
- draw = \l__chemmacros_orbital_sptwo_mphase_color_tl ,
- ball~color = \l__chemmacros_orbital_sptwo_mphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_sptwo_scale_tl * .8em ,
- - \l__chemmacros_orbital_sptwo_scale_tl * .8em
- )
- and ++
- (
- \l__chemmacros_orbital_sptwo_scale_tl * .8em ,
- - \l__chemmacros_orbital_sptwo_scale_tl * .8em
- )
- .. (0pt,0pt);
- }
- }
-
-% --------------------------------------------------------------------------
-% sp3-orbitals
-\cs_new_protected:Npn \__chemmacros_orbital_type_spthree:
- {
- \bool_set_false:N \l__chemmacros_orbital_type_s_bool
- \bool_set_false:N \l__chemmacros_orbital_type_p_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sp_bool
- \bool_set_false:N \l__chemmacros_orbital_type_sptwo_bool
- \bool_set_true:N \l__chemmacros_orbital_type_spthree_bool
- }
-
-\keys_define:nn { chemmacros / orbital / sp3 }
- {
- phase .choice: ,
- phase / + .code:n =
- { \bool_set_true:N \l__chemmacros_orbital_spthree_phase_bool } ,
- phase / - .code:n =
- { \bool_set_false:N \l__chemmacros_orbital_spthree_phase_bool } ,
- scale .tl_set:N = \l__chemmacros_orbital_spthree_scale_tl ,
- angle .fp_set:N = \l__chemmacros_orbital_angle_fp ,
- color .tl_set:N = \l__chemmacros_orbital_spthree_color_tl
- }
-
-\cs_new_protected:Npn \__chemmacros_orbital_spthree_draw:n #1
- {
- \keys_set:nn { chemmacros / orbital / sp3 } { #1 }
- \bool_if:NTF \l__chemmacros_orbital_spthree_phase_bool
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_spthree_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_spthree_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_spthree_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_spthree_pphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_spthree_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_spthree_mphase_color_tl
- { black ! 5 }
-
- }
- {
- \tl_if_in:NnTF \l__chemmacros_orbital_spthree_color_tl { ! }
- {
- \tl_set:Nn \l__chemmacros_orbital_spthree_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_spthree_color_tl }
- }
- {
- \tl_set:Nn \l__chemmacros_orbital_spthree_mphase_color_tl
- { \tl_use:N \l__chemmacros_orbital_spthree_color_tl ! 90 }
- }
- \tl_set:Nn \l__chemmacros_orbital_spthree_pphase_color_tl
- { black ! 5 }
- }
- \chemmacros_tikz_picture:xn { \__chemmacros_orbital_options: }
- {
- \chemmacros_tikz_shadedraw:f
- {
- draw = \l__chemmacros_orbital_spthree_pphase_color_tl ,
- ball~color = \l__chemmacros_orbital_spthree_pphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_spthree_scale_tl * 2em ,
- \l__chemmacros_orbital_spthree_scale_tl * 2em
- )
- and ++
- (
- \l__chemmacros_orbital_spthree_scale_tl * 2em ,
- \l__chemmacros_orbital_spthree_scale_tl * 2em
- )
- .. (0pt,0pt);
- \chemmacros_tikz_shadedraw:f
- {
- draw = \l__chemmacros_orbital_spthree_mphase_color_tl ,
- ball~color = \l__chemmacros_orbital_spthree_mphase_color_tl
- }
- (0pt,0pt) .. controls ++
- (
- - \l__chemmacros_orbital_spthree_scale_tl * 1em ,
- - \l__chemmacros_orbital_spthree_scale_tl * 1em
- )
- and ++
- (
- \l__chemmacros_orbital_spthree_scale_tl * 1em ,
- - \l__chemmacros_orbital_spthree_scale_tl * 1em
- )
- .. (0pt,0pt);
- }
- }
-
-% --------------------------------------------------------------------------
-% main command
-\keys_define:nn { chemmacros / orbital }
- {
- overlay .bool_set:N = \l__chemmacros_orbital_overlay_bool ,
- overlay .default:n = true ,
- opacity .code:n =
- {
- \fp_compare:nTF { #1 = 1 }
- { \bool_set_false:N \l__chemmacros_orbital_opacity_bool }
- { \bool_set_true:N \l__chemmacros_orbital_opacity_bool }
- \fp_set:Nn \l__chemmacros_orbital_opacity_fp { #1 }
- }
- }
-
-\keys_define:nn { chemmacros / orbital / type }
- {
- s .code:n = { \__chemmacros_orbital_type_s: } ,
- p .code:n = { \__chemmacros_orbital_type_p: } ,
- sp .code:n = { \__chemmacros_orbital_type_sp: } ,
- sp2 .code:n = { \__chemmacros_orbital_type_sptwo: } ,
- sp3 .code:n = { \__chemmacros_orbital_type_spthree: }
- }
-
-\cs_new_protected:Npn \chemmacros_orbital:n #1
- {
- \bool_if:NT \l__chemmacros_orbital_type_s_bool
- { \__chemmacros_orbital_s_draw:n { #1 } }
- \bool_if:NT \l__chemmacros_orbital_type_p_bool
- { \__chemmacros_orbital_p_draw:n { #1 } }
- \bool_if:NT \l__chemmacros_orbital_type_sp_bool
- { \__chemmacros_orbital_sp_draw:n { #1 } }
- \bool_if:NT \l__chemmacros_orbital_type_sptwo_bool
- { \__chemmacros_orbital_sptwo_draw:n { #1 } }
- \bool_if:NT \l__chemmacros_orbital_type_spthree_bool
- { \__chemmacros_orbital_spthree_draw:n { #1 } }
- }
-
-\NewDocumentCommand \orbital { o m }
- {
- \group_begin:
- \keys_set:nn { chemmacros / orbital / type } { #2 }
- \IfNoValueTF { #1 }
- { \chemmacros_orbital:n { } }
- { \chemmacros_orbital:n { #1 } }
- \group_end:
- }
-
-% --------------------------------------------------------------------------
-% arrow tips for electron movement
-\dim_new:N \l__chemmacros_el_length_dim
-
-% full tip for pairs
-\pgfarrowsdeclare { el } { el }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfarrowsleftextend { -\l__chemmacros_el_length_dim }
- \pgfarrowsrightextend { .5\pgflinewidth }
- }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfsetdash {} { 0pt }
- \pgfsetroundjoin
- \pgfsetroundcap
- \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } }
- \pgfpathlineto
- {
- \pgfpoint
- { -\l__chemmacros_el_length_dim }
- { .3\l__chemmacros_el_length_dim }
- }
- \pgfpathlineto
- { \pgfpoint { -.5\l__chemmacros_el_length_dim } { 0pt } }
- \pgfpathlineto
- {
- \pgfpoint
- { -\l__chemmacros_el_length_dim }
- { -.3\l__chemmacros_el_length_dim }
- }
- \pgfpathlineto { \pgfpoint { 0pt } { 0pt } }
- \pgfusepathqfillstroke
- }
-
-% half tip on the left
-\pgfarrowsdeclare { left~el } { left~el }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfarrowsleftextend { -\l__chemmacros_el_length_dim }
- \pgfarrowsrightextend { .5\pgflinewidth }
- }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfsetdash {} { 0pt }
- \pgfsetroundjoin
- \pgfsetroundcap
- \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } }
- \pgfpathlineto
- {
- \pgfpoint
- { -\l__chemmacros_el_length_dim }
- { .3\l__chemmacros_el_length_dim }
- }
- \pgfpathlineto { \pgfpoint { -.5\l__chemmacros_el_length_dim } { 0pt } }
- \pgfpathlineto { \pgfpoint { 0pt } { 0pt } }
- \pgfusepathqfillstroke
- }
-
-% half tip in the right
-\pgfarrowsdeclare { right~el } { right~el }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfarrowsleftextend { -\l__chemmacros_el_length_dim }
- \pgfarrowsrightextend { .5\pgflinewidth }
- }
- {
- \dim_set:Nn \l__chemmacros_el_length_dim
- { 2.5pt + 2.5\pgflinewidth }
- \pgfsetdash {} { 0pt }
- \pgfsetroundjoin
- \pgfsetroundcap
- \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } }
- \pgfpathlineto
- {
- \pgfpoint
- { -\l__chemmacros_el_length_dim }
- { -.3\l__chemmacros_el_length_dim }
- }
- \pgfpathlineto { \pgfpoint { -.5\l__chemmacros_el_length_dim } { 0pt } }
- \pgfpathlineto { \pgfpoint { 0pt } { 0pt } }
- \pgfusepathqfillstroke
- }
-
-% --------------------------------------------------------------------------
-% setup
-\NewDocumentCommand \chemsetup { o m }
- {
- \IfNoValueTF { #1 }
- { \keys_set:nn { chemmacros } { #2 } }
- {
- \tl_if_eq:nnTF { #1 } { chemformula }
- { \setchemformula { #2 } }
- { \keys_set:nn { chemmacros / #1 } { #2 } }
- }
- \ignorespaces
- }
-
-
-% --------------------------------------------------------------------------
-% hyperref support
-% ?? unsure about adding IUPAC commands
-\AfterPackage* { hyperref }
- {
- \pdfstringdefDisableCommands
- {
- % \cs_set:Npn \- { - } % maybe not a good idea...
- \cs_set:Npn \| { }
- \cs_set:Npn \pH { pH }
- \cs_set:Npn \pOH { pOH }
- \cs_set:Npn \iupac #1 { #1 }
- \cs_set:Npn \cip #1 { (#1) }
- \cs_set:Npn \cis { cis }
- \cs_set:Npn \trans { trans }
- \cs_set:Npn \tert { tert }
- \cs_set:Npn \ortho { o }
- \cs_set:Npn \meta { m }
- \cs_set:Npn \para { p }
- \cs_set:Npn \syn { syn }
- \cs_set:Npn \anti { anti }
- }
- }
-
-% --------------------------------------------------------------------------
-% language support -- provided through `translations'
-% equilibrium constants:
-\DeclareTranslationFallback {K-acid} {\mathrm{a}}
-\DeclareTranslation{German} {K-acid} {\mathrm{s}}
-\DeclareTranslation{Dutch} {K-acid} {\mathrm{z}}
-
-\DeclareTranslationFallback {K-base} {\mathrm{b}}
-
-\DeclareTranslationFallback {K-water} {\mathrm{w}}
-
-% phases:
-\DeclareTranslation{German}{phase-sld}{ f }
-\DeclareTranslation{German}{phase-lqd}{ f{}l }
-% list of reactions:
-\DeclareTranslationFallback {list-of-reactions} { List~ of~ reactions }
-\DeclareTranslation{English} {list-of-reactions} { List~ of~ reactions }
-\DeclareTranslation{German} {list-of-reactions} { Reaktionsverzeichnis }
-\DeclareTranslation{Italian} {list-of-reactions} { Elenco~ delle~ reazioni }
-\DeclareTranslation{French} {list-of-reactions} { Table~ des~ r\'eactions }
-\DeclareTranslation{Dutch} {list-of-reactions} { Lijst~ van~ reacties }
-%
-\DeclareTranslationFallback {reaction} { Reaction }
-\DeclareTranslation{English} {reaction} { Reaction }
-\DeclareTranslation{German} {reaction} { Reaktion }
-\DeclareTranslation{Italian} {reaction} { Reazione }
-\DeclareTranslation{French} {reaction} { R\'eaction }
-\DeclareTranslation{Dutch} {reaction} { Reactie }
-
-\tl_set:Nn \l__chemmacros_reaction_lorname_tl
- { \chemmacros_translate:n {reaction} }
-\tl_set:Nn \reactionlistname
- { \chemmacros_translate:n {list-of-reactions} }
-
-\file_input_stop:
-
-% --------------------------------------------------------------------------
-Version history
-2015/08/29 - version 5.0 - integration as v4.7 into v5.0 of chemmacros for
- backwards compatibility
- - fix typo in \l_chemformula_formal_charges_bool
- - remove \tl_to_lowercase:n
-
-% --------------------------------------------------------------------------- %
-% TODO:
-- add d-orbitals
-- make electron movement arrow tips (`el', `left el' and `right el') public
-- phase commands with arguments (see http://texwelt.de/wissen/fragen/9264)
-
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros5.sty b/Master/texmf-dist/tex/latex/chemmacros/chemmacros5.sty
deleted file mode 100644
index c685fefa70f..00000000000
--- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros5.sty
+++ /dev/null
@@ -1,330 +0,0 @@
-% --------------------------------------------------------------------------
-% the CHEMMACROS package
-%
-% comprehensive support for typesetting chemistry documents
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% --------------------------------------------------------------------------
-% https://github.org/cgnieder/chemmacros/
-% contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% 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 2008/05/04 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-% The chemmacros package consists of the following files
-% - chemmacros.sty, chemmacros4.sty, chemmacros5.sty,
-% - chemmacros_en.tex, chemmacros_en.pdf,
-% - quite a number of module files following the naming scheme
-% chemmacros.module.*.code.tex
-% - README
- % --------------------------------------------------------------------------
-\RequirePackage{expl3,xparse,l3keys2e}
-\ExplSyntaxOn
-
-% --------------------------------------------------------------------------
-% package information:
-\ProvidesExplPackage
- {chemmacros5}
- {\c_chemmacros_date_tl}
- {\c_chemmacros_version_tl}
- {\c_chemmacros_info_tl \c_space_tl (CN)}
-
-% --------------------------------------------------------------------------
-\msg_new:nnn {chemmacros} {package-option}
- {
- Unknown~ option~ `#1'!~ Since~ v5.0~ chemmacros~ has~ no~ package~
- options~ any~ more!
- }
-
-\msg_new:nnn {chemmacros} {module-not-available}
- {
- The~ module~ `#1'~ is~ only~ available~ in~ compatibility~ mode~ #2~ or~
- higher.
- }
-
-\cs_generate_variant:Nn \msg_warning:nnn { nnV }
-
-\keys_define:nn {chemmacros/package-options}
- {
- compatibility .code:n = ,
- unknown .code:n =
- \msg_warning:nnV {chemmacros} {package-option} \CurrentOption
- }
-
-\ProcessKeysPackageOptions {chemmacros/package-options}
-
-% --------------------------------------------------------------------------
-% messages:
-\msg_new:nnn {chemmacros} {module-missing}
- {
- You've~ requested~ the~ chemmacros~ module~ `#1'~ but~ it~ appears~ to~
- be~ missing~ on~ your~ system.~ Maybe~ you've~ misspelled~ the~ name?~
- Loading~ the~ module~ will~ abort~ \msg_line_context:
- }
-
-\msg_new:nnn {chemmacros} {loading-module}
- {
- (chemmacros) \c_space_tl \c_space_tl \c_space_tl \c_space_tl
- Loading~ module~ `#1'...
- }
-
-% --------------------------------------------------------------------------
-% variants of kernel functions:
-\cs_generate_variant:Nn \tl_if_eq:nnTF {xx,V}
-\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}
-\cs_generate_variant:Nn \prop_item:Nn {NV}
-\cs_generate_variant:Nn \seq_item:Nn {cV}
-\cs_generate_variant:Nn \int_to_arabic:n {V}
-\cs_generate_variant:Nn \tl_replace_once:Nnn {NnV}
-\cs_generate_variant:Nn \prop_gput:Nnn {cxx,NVf}
-\cs_generate_variant:Nn \msg_error:nnn {nnV}
-\cs_generate_variant:Nn \msg_warning:nnn {nnV}
-\cs_generate_variant:Nn \msg_warning:nnnn {nnV}
-\cs_generate_variant:Nn \vbox_set:Nn {NV}
-\cs_generate_variant:Nn \keys_define:nn {x}
-\cs_generate_variant:Nn \keys_set:nn {x,nx}
-
-% --------------------------------------------------------------------------
-% temporary variables:
-\tl_new:N \l__chemmacros_tmpa_tl
-\tl_new:N \l__chemmacros_tmpb_tl
-\tl_new:N \l__chemmacros_tmpc_tl
-\tl_new:N \l__chemmacros_tmpd_tl
-
-\bool_new:N \l__chemmacros_tmpa_bool
-\bool_new:N \l__chemmacros_tmpb_bool
-\bool_new:N \l__chemmacros_tmpc_bool
-
-\dim_new:N \l__chemmacros_tmpa_dim
-\dim_new:N \l__chemmacros_tmpb_dim
-\dim_new:N \l__chemmacros_tmpc_dim
-
-\seq_new:N \l__chemmacros_tmpa_seq
-\seq_new:N \l__chemmacros_tmpb_seq
-\seq_new:N \l__chemmacros_tmpc_seq
-
-\int_new:N \l__chemmacros_tmpa_int
-\int_new:N \l__chemmacros_tmpb_int
-\int_new:N \l__chemmacros_tmpc_int
-
-\box_new:N \l__chemmacros_tmpa_box
-\box_new:N \l__chemmacros_tmpb_box
-\box_new:N \l__chemmacros_tmpc_box
-
-\clist_new:N \l__chemmacros_tmpa_clist
-\clist_new:N \l__chemmacros_tmpb_clist
-\clist_new:N \l__chemmacros_tmpc_clist
-
-\str_new:N \l__chemmacros_tmpa_str
-\str_new:N \l__chemmacros_tmpb_str
-\str_new:N \l__chemmacros_tmpc_str
-
-% --------------------------------------------------------------------------
-% module mechanism:
-\tl_const:Nn \c__chemmacros_module_extension_tl {code.tex}
-\tl_const:Nn \c__chemmacros_module_prefix_tl {chemmacros.module}
-
-\seq_new:N \g__chemmacros_loaded_modules_seq
-\prop_new:N \g__chemmacros_loaded_modules_prop
-
-\cs_new_protected:Npn \chemmacros_load_modules:n #1
- { \clist_map_inline:nn {#1} { \chemmacros_load_module:n {##1} } }
-
-\cs_new_protected:Npn \chemmacros_load_module:n #1
- {
- \tl_set:Nx \l__chemmacros_tmpa_tl { \tl_trim_spaces:n {#1} }
- \__chemmacros_load_module:V \l__chemmacros_tmpa_tl
- }
-
-\cs_new_protected:Npn \__chemmacros_load_module:n #1
- {
- \chemmacros_if_module_loaded:nF {#1}
- {
- \chemmacros_if_module_exist:nTF {#1}
- {
- \__chemmacros_use_module_hook:nn {#1} {before}
- \msg_log:nnn {chemmacros} {loading-module} {#1}
- \@onefilewithoptions
- {\c__chemmacros_module_prefix_tl.#1}[][]
- \c__chemmacros_module_extension_tl
- \__chemmacros_use_module_hook:nn {#1} {after}
- }
- { \msg_error:nnn {chemmacros} {module-missing} {#1} }
- }
- }
-\cs_generate_variant:Nn \__chemmacros_load_module:n { V }
-
-\prg_new_conditional:Npnn \chemmacros_if_module_loaded:n #1 {p,T,F,TF}
- {
- \seq_if_in:NnTF \g__chemmacros_loaded_modules_seq {#1}
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-\prg_new_conditional:Npnn \chemmacros_if_module_exist:n #1 {p,T,F,TF}
- {
- \file_if_exist:nTF
- {\c__chemmacros_module_prefix_tl.#1.\c__chemmacros_module_extension_tl}
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-% --------------------------------------------------------------------------
-\ChemCompatibilityFrom{5.1}
-% module hooks:
-% #1: module
-% #2: code
-\cs_new_protected:Npn \chemmacros_after_module:nn #1#2
- {
- \chemmacros_if_module_loaded:nTF {#1}
- {#2}
- { \__chemmacros_add_to_module_hook:nnn {#1} {after} {#2} }
- }
-
-% #1: module
-% #2: code
-\cs_new_protected:Npn \chemmacros_before_module:nn #1#2
- {
- \chemmacros_if_module_loaded:nF {#1}
- { \__chemmacros_add_to_module_hook:nnn {#1} {before} {#2} }
- }
-\EndChemCompatibility
-
-% #1: module
-% #2: hook name
-% #3: code
-\cs_new_protected:Npn \__chemmacros_add_to_module_hook:nnn #1#2#3
- {
- \chemmacros_if_module_loaded:nF {#1}
- {
- \tl_if_exist:cF {g__chemmacros_module_#1_#2_hook_tl}
- { \tl_new:c {g__chemmacros_module_#1_#2_hook_tl} }
- \tl_gput_right:cn {g__chemmacros_module_#1_#2_hook_tl} {#3}
- }
- }
-
-% #1: module
-% #2: hook name
-\cs_new_protected:Npn \__chemmacros_use_module_hook:nn #1#2
- {
- \tl_if_exist:cT {g__chemmacros_module_#1_#2_hook_tl}
- {
- \tl_use:c {g__chemmacros_module_#1_#2_hook_tl}
- \tl_gclear:c {g__chemmacros_module_#1_#2_hook_tl}
- }
- }
-
-% --------------------------------------------------------------------------
-\cs_new_protected:Npn \__chemmacros_module:nnnn #1#2#3#4
- {
- \chemmacros_if_compatibility:nnF {>=} {#4}
- {
- \msg_warning:nnnn {chemmacros} {module-not-available} {#2} {#4}
- \file_input_stop:
- }
- \seq_gput_right:Nn \g__chemmacros_loaded_modules_seq {#2}
- \prop_gput:Nnn \g__chemmacros_loaded_modules_prop {#2} {#3}
- \ProvidesFile
- {\c__chemmacros_module_prefix_tl.#2.\c__chemmacros_module_extension_tl}
- [
- \c_chemmacros_date_tl
- \c_space_tl
- v \c_chemmacros_version_tl
- \c_space_tl
- chemmacros~ module~ `#2'~ #3
- ]
- \bool_if:nF {#1} { \ExplSyntaxOn }
- }
-
-% define a chemmacros module:
-% standard modules are written in the expl3 programming environment, the
-% starred version only uses a 2e programming environment, i.e., with @ as a
-% letter
-% #1: boolean
-% #2: name
-% #3: description
-\NewDocumentCommand \ChemModule {smmO{5.0}}
- { \__chemmacros_module:nnnn {#1} {#2} {#3} {#4} }
-
-% --------------------------------------------------------------------------
-% command for loading modules:
-\NewDocumentCommand \usechemmodule {m} { \chemmacros_load_modules:n {#1} }
-
-% --------------------------------------------------------------------------
-% load default modules:
-\chemmacros_load_modules:n
- {
- % required modules:
- base,
- errorcheck,
- lang, greek,
- chemformula,
- % preloaded modules:
- acid-base,
- symbols,
- charges,
- particles,
- phases ,
- nomenclature
- }
-
-% --------------------------------------------------------------------------
-\file_input_stop:
-
-% --------------------------------------------------------------------------
-Modules: (* = preloaded)
- - internal modules:
- - base *
- - errorcheck *
- - lang *
- - greek *
- - chemformula *
- - tikz
- - user modules:
- - acid-base *
- - all
- - charges *
- - isotopes
- - mechanisms
- - newman
- - nomenclature *
- - orbital
- - particles *
- - phases *
- - reactions
- - redox
- - scheme
- - spectroscopy
- - symbols *
- - thermodynamics
- - units
- - xfrac
-
-% --------------------------------------------------------------------------
-Version history
-2015/08/29 - initial release v5.0
-2015/09/23 - add module hooks `before' and `after'
- - allow to give minimal compatibility version to a module: this
- should be the first version when a module is published and
- shouldn't be changed any more; loading the corresponding module
- will abort when compatibility is too low
- - store loaded modules in a seq and in a prop
-2015/10/14 - bug fix in the module hook mechanism
- - bug fix in \chemmacros_if_module_loaded:n
- - new `errorcheck' module
-2020/02/03 - add temporary string variables