diff options
author | Karl Berry <karl@freefriends.org> | 2022-01-17 20:55:11 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-01-17 20:55:11 +0000 |
commit | 1fc36ea6203e28039e852897fda29426365f8116 (patch) | |
tree | dd90594985d0271c1458a48c48c78e7f5f162a6d /Master/texmf-dist/tex/latex | |
parent | cfbda5f99f31e4fa8bb06f60ee3511be9154b2fc (diff) |
chemmacros (17jan22)
git-svn-id: svn://tug.org/texlive/trunk@61631 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
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 |