% --------------------------------------------------------------------------
% the CHEMFORMULA package
%
%   typeset chemical compounds and reactions
%
% --------------------------------------------------------------------------
% Clemens Niederberger
% --------------------------------------------------------------------------
% https://github.com/cgnieder/chemformula/
% contact@mychemistry.eu
% --------------------------------------------------------------------------
% If you have any ideas, questions, suggestions or bugs to report, please
% feel free to contact me.
% --------------------------------------------------------------------------
% Copyright 2011--2022 Clemens Niederberger
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Clemens Niederberger.
% --------------------------------------------------------------------------
\ProvidesClass{chemformula-manual}[2022/01/23]

\LoadClass[load-preamble,add-index]{cnltx-doc}
\RequirePackage{imakeidx}
\RequirePackage[utf8]{inputenc}

\RequirePackage{chemformula}
\RequirePackage{chemmacros}

\setcnltx{
  package  = {chemformula},
  info     = {typeset chemical compounds and reactions} ,
  url      = http://www.mychemistry.eu/forums/forum/chemformula/ ,
  authors  = Clemens Niederberger ,
  email    = contact@mychemistry.eu ,
  abstract = {%
    \centering
    \includegraphics{chemmacros-logo.pdf}
    \par
  } ,
  add-cmds = {
    bond,
    ce, ch, charrow, chcpd, chemformula@bondlength, chemsetup, chlewis,
      chname,
    DeclareChemAdditionSymbol, DeclareChemArrow, DeclareChemBond,
      DeclareChemBondAlias, DeclareChemCompoundProperty, DeclareChemSymbol,
    mch,
    NewChemAdditionSymbol, NewChemArrow, NewChemBond, NewChemBondAlias,
      NewChemCompoundProperty, NewChemSymbol,
    ox, OX,
    pch,
    redox, RemoveChemCompoundProperty, RenewChemAdditionSymbol,
      RenewChemArrow, RenewChemBond, RenewChemCompoundProperty,
      RenewChemSymbol,
    setchemformula, ShowChemArrow, ShowChemBond
  } ,
  add-silent-cmds = {
    addplot,
    chemfig,
    DeclareInstance, draw,
    sample, setchemfig, sfrac,
    usetikzlibrary
  } ,
  index-setup = { othercode=\footnotesize, level=\section } ,
  makeindex-setup = {  columns=3, columnsep=1em }
}

\RequirePackage{chemfig,booktabs,cancel,varioref}
\RequirePackage[version=4]{mhchem}

\def\libertine@figurestyle{LF}
\RequirePackage{amsmath}
\undef\lvert \undef\lVert
\undef\rvert \undef\rVert
\RequirePackage[libertine]{newtxmath}
\def\libertine@figurestyle{OsF}

\RequirePackage{fontawesome}
\RequirePackage{datetime2}
\DTMsetup{useregional=numeric,datesep=/}
\newrobustcmd*\chemformula@add@version[2]{%
  \csdef{chemformula@ver@#2}{%
    \DTMdate{#1}%
    \csgdef{chemformula@ver@#2used}{}%
    \csdef{chemformula@ver@#2}{\DTMdate{#1}}%
  }%
}

\newrobustcmd*\chemformula@date[1]{%
  \ifcsdef{chemformula@ver@#1used}{}{ (\csuse{chemformula@ver@#1})}}
\newrobustcmd*\chemformula@ifnew[1]{\ifcsstring{c_chemformula_version_tl}{#1}}
\newrobustcmd*\chemformula@NEW{\faStarO\ New}

\renewrobustcmd*\sinceversion[1]{%
  \chemformula@ifnew{#1}%
    {\cnltx@version@note{\textcolor{red}{\chemformula@NEW}}}%
    {\cnltx@version@note{\GetTranslation{cnltx-introduced}~#1\chemformula@date{#1}}}%
}
\renewrobustcmd*\changedversion[1]{%
  \cnltx@version@note{\GetTranslation{cnltx-changed}~#1\chemformula@date{#1}}%
}

\newnote*\sincechanged[2]{%
  \GetTranslation{cnltx-introduced}~#1\chemformula@date{#1},
  changed with version~#2\chemformula@date{#2}\chemformula@ifnew{#2}{ \chemformula@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*\chemformula@readoptions[1]{%
  \catcode`\^^M=13
  \chemformula@read@options{#1}%
}

\begingroup
\catcode`\^^M=13
\gdef\chemformula@read@options#1#2^^M{%
  \ifblank{#2}{}{\chemformula@read@options@#2}%
  #1%
  \XSIMfilewritestart*{\jobname.tmp}%
}%
\endgroup

\def\chemformula@read@options@[#1]{\pgfqkeys{/cnltx}{#1}}

\RenewDocumentEnvironment{sourcecode}{}
  {%
    \chemformula@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}{}
  {%
    \chemformula@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
    \catcode`\^^M=5
    \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}}

\newpackagename\chemmacros{chemmacros}

\newidxcmd\manual{\textsf{#1}}[\ (manual)]
\newidxcmd\arrowtype{\code{#1}}[\ (arrow type)]

\newcommand*\cf@arrow{%
  \@ifstar
    {\cf@arrow@star}
    {\cf@arrow@nostar}%
}
\newrobustcmd*\cf@arrow@star[1]{%
  \@ifnextchar[
    {\cf@arrow@star@opt{#1}}
    {\cf@arrow@star@opt{#1}[]}%
}
\newrobustcmd*\cf@arrow@nostar[1]{%
  \@ifnextchar[
    {\cf@arrow@nostar@opt{#1}}
    {\cf@arrow@nostar@opt{#1}[]}%
}
\def\cf@arrow@star@opt#1[#2]{%
  \ifblank{#2}
    {\item\arrowtype*{#1}}
    {\item\arrowtype*{#1}#2}%
  \cnltx@checkdefault{\hfill\newline}%
}
\def\cf@arrow@nostar@opt#1[#2]{%
  \ifblank{#2}
    {\item\arrowtype{#1}}
    {\item\arrowtype{#1}#2}%
  \cnltx@checkdefault{\hfill\newline}%
}

\newenvironment{codedesc}
  {%
    \def\Code##1{\item\code{##1}\hfill\newline}%
    \cnltxlist
  }
  {\endcnltxlist}

\newenvironment{arrows}
  {%
    \let\arrow\cf@arrow
    \cnltxlist
  }
  {\endcnltxlist}

\renewcommand*\AmS{\hologo{AmS}}

\newcommand*\TikZ{Ti\textit{k}Z}

\newname\hensel{Martin Hensel}

\RequirePackage[biblatex]{embrac}[2012/06/29]
\ChangeEmph{[}[,.02em]{]}[.055em,-.08em]
\ChangeEmph{(}[-.01em,.04em]{)}[.04em,-.05em]

\newenvironment{changes}[1]{%
  \subsection*{Version #1 (\csuse{chemformula@ver@#1})}
  \itemize\let\change\item
}{\enditemize}

\chemsetup{
  greek = newtx ,
  formula = chemformula ,
  chemformula/format = \libertineLF
}

\usepackage{acro}
\acsetup{
  format/long  = \scshape ,
  format/short = \scshape
}
\DeclareAcronym{iupac}{
  short     = iupac ,
  long      = International Union of Pure and Applied Chemistry ,
  pdfstring = IUPAC ,
  short-acc = IUPAC
}

\sisetup{
  detect-mode=false,
  mode=text,
  text-font-command=\libertineLF
}

\chemformula@add@version{2012-01-28}{3.0}
\chemformula@add@version{2012-01-30}{3.0a}
\chemformula@add@version{2012-02-03}{3.0b}
\chemformula@add@version{2012-02-05}{3.0c}
\chemformula@add@version{2012-02-10}{3.0d}
\chemformula@add@version{2012-02-19}{3.1}
\chemformula@add@version{2012-02-26}{3.1a}
\chemformula@add@version{2012-03-03}{3.1b}
\chemformula@add@version{2012-03-14}{3.1c}
\chemformula@add@version{2012-03-20}{3.2}
\chemformula@add@version{2012-05-07}{3.3}
\chemformula@add@version{2012-05-13}{3.3a}
\chemformula@add@version{2012-05-18}{3.3b}
\chemformula@add@version{2012-05-18}{3.3c}
\chemformula@add@version{2012-07-24}{3.3d}
\chemformula@add@version{2012-08-21}{3.3e}
\chemformula@add@version{2012-09-11}{3.4}
\chemformula@add@version{2012-10-03}{3.4a}
\chemformula@add@version{2013-01-04}{3.4b}
\chemformula@add@version{2013-01-28}{3.5}
\chemformula@add@version{2013-02-19}{3.5a}
\chemformula@add@version{2013-02-26}{3.6}
\chemformula@add@version{2013-02-27}{3.6a}
\chemformula@add@version{2013-04-19}{3.6b}
\chemformula@add@version{2013-07-06}{4.0}
\chemformula@add@version{2013-07-26}{4.0a}
\chemformula@add@version{2013-08-24}{4.1}
\chemformula@add@version{2013-10-24}{4.2}
\chemformula@add@version{2013-11-04}{4.2a}
\chemformula@add@version{2014-01-24}{4.3}
\chemformula@add@version{2014-01-29}{4.4}
\chemformula@add@version{2014-04-07}{4.5}
\chemformula@add@version{2014-06-30}{4.6}
\chemformula@add@version{2014-08-04}{4.7}
\chemformula@add@version{2014-08-08}{4.8}
\chemformula@add@version{2014-10-07}{4.9}
\chemformula@add@version{2015-03-16}{4.10}
\chemformula@add@version{2015-04-03}{4.10a}
\chemformula@add@version{2015-06-30}{4.11}
\chemformula@add@version{2015-08-12}{4.12}
\chemformula@add@version{2015-08-29}{4.12a}
\chemformula@add@version{2015-09-08}{4.12b}
\chemformula@add@version{2015-01-01}{4.13}
\chemformula@add@version{2015-10-21}{4.14}
\chemformula@add@version{2016-01-07}{4.14a}
\chemformula@add@version{2016-05-03}{4.14b}
\chemformula@add@version{2016-05-11}{4.15}
\chemformula@add@version{2016-06-08}{4.15a}
\chemformula@add@version{2016-06-08}{4.15b}
\chemformula@add@version{2016-08-21}{4.15c}
\chemformula@add@version{2017-02-02}{4.15d}
\chemformula@add@version{2017-03-23}{4.15e}
\chemformula@add@version{2019-09-23}{4.15f}
\chemformula@add@version{2019-09-27}{4.15g}
\chemformula@add@version{2019-10-13}{4.15h}
\chemformula@add@version{2020-02-01}{4.15i}
\chemformula@add@version{2020-03-07}{4.15j}
\chemformula@add@version{2020-03-15}{4.15k}
\chemformula@add@version{2020-12-22}{4.16}
\chemformula@add@version{2022-01-23}{4.17}

\endinput
