% ------------------------------------------------------------
% quantum-chemistry-bonn.sty  v0.2  2026/03/12 
% Package for unifying the writing of common qc program names
% Copyright (c) 2025-2026 Christian Selzer
% ------------------------------------------------------------

%%Identification
%%The package identifies itself and the LaTeX version needed
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{quantum-chemistry-bonn}[2026/03/12 quantum-chemistry-bonn]

\RequirePackage{xcolor}
\RequirePackage{siunitx}
\RequirePackage{expl3,xparse}
\RequirePackage[nolist]{acronym}

%==========Colors========
\definecolor{bonnblue}{RGB}{7, 78, 159}
\definecolor{bonnred}{RGB}{185, 39, 39}
\definecolor{bonnyellow}{RGB}{252, 186, 0}
\definecolor{bonngrey}{RGB}{144, 144, 133}
\definecolor{bonngray}{RGB}{144, 144, 133} % Wir sind faul, wir brauchen grey und gray.
\definecolor{bonngreen}{RGB}{0, 123, 78}

\definecolor{newaccent}{RGB}{0, 0, 0}
\definecolor{black}{RGB}{0, 0, 0}
\definecolor{highlightgreen}{RGB}{0, 204, 0}
\definecolor{white}{RGB}{255, 255, 255}
\definecolor{StdBody}{RGB}{233,233,233}

\newcommand{\colb}[1]{\textcolor{bonnblue}{#1}}
\newcommand{\coly}[1]{\textcolor{bonnyellow}{#1}}
\newcommand{\colr}[1]{\textcolor{bonnred}{#1}}
\newcommand{\colg}[1]{\textcolor{bonngrey}{#1}}

%============Refs==========
\newcommand*{\siref}[1]{Supplemental Material, {#1}}
\newcommand*{\figref}[1]{Fig.~\ref{#1}}
\newcommand*{\tabref}[1]{Tab.~\ref{#1}}
\newcommand*{\eqeqref}[1]{Eq.~\ref{#1}}

%==========Programms=======
\newcommand*{\orca}{{\fontfamily{pag}\selectfont ORCA}}
\newcommand*{\censo}{{\fontfamily{pag}\selectfont CENSO}}
\newcommand*{\draco}{{{\textsc{Draco}}}}
\newcommand*{\crest}{{{\textsc{CREST}}}}
\newcommand{\xtb}{\texttt{xTB}}
\newcommand{\tblite}{\texttt{tblite}}

%============Misc==========
\newcommand*{\etal}{\textit{et al.}}
\newcommand*{\ie}{\textit{i.e.}}
\newcommand*{\eg}{\textit{e.g.}}

%============Units==========
\DeclareSIUnit[number-unit-product = {\,}]{\calorie}{cal}
\DeclareSIUnit[number-unit-product = {\,}]{\atm}{atm}
\sisetup{per-mode = power}
\newcommand{\kcalpmol}{\unit{\kilo\calorie\per\mol}}
\newcommand{\kjpmol}{\unit{\kilo\joule\per\mol}}
\newcommand{\logunits}{\unit{log\,units}}

%============Quantities==========
\newcommand*{\pka}{p\textit{K}\textsubscript{a}}
\newcommand*{\logkow}{log\,\textit{K}\textsubscript{o/w}}
\newcommand*{\logkaw}{log\,\textit{K}\textsubscript{a/w}}
\newcommand*{\logkab}{log\,\textit{K}\textsubscript{$\alpha/\beta$}}
\newcommand*{\logpl}{log\,\textit{P}\textsubscript{L}}
\newcommand*{\dgsolv}{$\Delta_\mathrm{solv}G$}

%=========QC-Methods========
%\newcommand*{\rsc}{r\textsuperscript{2}SCAN-3c}

%–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\ExplSyntaxOn
  %––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
  % Create a prop list to hold “key → formatted text”:
  \prop_new:N \l__qc_methods_prop

  % \DeclareMethod{<key>}{<formatted‐text>}
  %   Stores (lowercase(<key>) → <formatted‐text>) in the prop list
  \NewDocumentCommand \DeclareMethod { m m }
   {
     \prop_put:Nnn \l__qc_methods_prop
       { \tl_lower_case:n { #1 } }
       { #2 }
   }

  % \method{<key>}
  %   1) Lowercase the key internally
  %   2) If found in \l__qc_methods_prop, print the stored formatted text
  %   3) Otherwise, print back the raw <key> (case‐preserved)
  \NewDocumentCommand \method { m }
   {
     \prop_get:NnNTF \l__qc_methods_prop
       { \tl_lower_case:n { #1 } }
       \l__qc_tmp_tl
       { % ⟶ Found: print the “pretty” version
         \l__qc_tmp_tl
       }
       { % ⟶ Not found: fall back to raw input
         #1
       }
   }
  %––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\ExplSyntaxOff
%–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

%–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\ExplSyntaxOn
  % Create a comma‐separated “batch declare” command:
  %
  %   \DeclareMethods{alias_1,alias_2,..}{formatted text}
  %
  % Internally, this splits the comma list and does exactly what
  % \DeclareMethod does for each item.
  \NewDocumentCommand \DeclareMethods { m m }
   {
     \clist_map_inline:nn { #1 }
       {
         \prop_put:Nnn \l__qc_methods_prop
           { \tl_lower_case:n { ##1 } }
           { #2 }
       }
   }
\ExplSyntaxOff
%–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

%-------------------------------------------------------
% Declare Methods
%-------------------------------------------------------
\DeclareMethods{rsc,r2scan3c,r2scan-3c}{r\textsuperscript{2}SCAN-3c}
\DeclareMethods{wb97mv,wb97m-v}{$\omega$B97M-V}
\DeclareMethods{wr2scand4,wr2scan-d4,wr2scand4}{$\omega$r\textsuperscript{2}SCAN-D4}
\DeclareMethods{wpr2scan50d4,wpr2scan50-d4,wpr2scan50d4}{$\omega$Pr\textsuperscript{2}SCAN50-D4}


%-------------------------------------------------------
% Acronyms
%-------------------------------------------------------
\acrodef{dft}[DFT]{density functional theory}
\acrodef{dftb}[DFTB]{density functional tight-binding}
\acrodef{wft}[WFT]{wave function theory}
\acrodef{hf}[HF]{Hartree-Fock}
\acrodef{qm}[QM]{quantum mechanical}
\acrodef{qc}[QC]{quantum chemical}
\acrodef{sqm}[SQM]{semiempirical quantum mechanical}
\acrodef{ml}[ML]{machine learning}
\acrodef{ecp}[ECP]{effective core potential}
\acrodef{pp}[PP]{pseudopotential}
\acrodef{ao}[AO]{atomic orbital}
\acrodef{mo}[MO]{molecular orbital}
\acrodef{cn}[CN]{coordination number}
\acrodef{ceh}[CEH]{Charge Extended H\"uckel}
\acrodef{eht}[EHT]{extended H\"uckel theory}
\acrodef{eeq}[EEQ]{electronegativity equilibration}
\acrodef{aact}[AACT]{atom-atom charge transfer}
\acrodef{rm}[RM]{reference molecule}
\acrodef{rsh}[RSH]{range-separated hybrid}
\acrodef{rmse}[RMSE]{root mean square error}
\acrodef{me}[MSE]{mean signed error}
\acrodef{mae}[MAE]{mean absolute error}
\acrodef{amax}[AMAX]{absolute maximum error}
\acrodef{md}[MD]{mean deviation}
\acrodef{wtmad}[WTMAD-2]{weighted total mean absolute deviation in version 2}
\acrodefplural{wtmad}[WTMAD-2s]{weighted total mean absolute deviations in version 2}
\acrodef{std}[StdDev]{standard deviation}
\acrodef{lcao}[LCAO]{linear-combination-of-atomic orbitals}
\acrodef{bsse}[BSSE]{basis set superposition error}
\acrodef{bsie}[BSIE]{basis set incompleteness error}
\acrodef{cp}[CP]{counter-poise}
\acrodef{nci}[NCI]{non-covalent interaction}
\acrodef{si}[Supporting Information]{Supporting Information}
\acrodef{cpscf}[CP-SCF]{coupled-perturbed self-consistent field}
\acrodef{ct}[CT]{charge transfer}
\acrodef{rdf}[RDF]{radial distribution function}
\acrodef{scc}[SCC]{self-consistent charge}
\acrodef{pqn}[PQN]{principal quantum number}
\acrodef{scf}[SCF]{self-consistent field}
\acrodef{tb}[TB]{tight-binding}
\acrodef{an}[An]{actinide}
\acrodef{ln}[Ln]{lanthanide}
\acrodef{ff}[FF]{force field}
\acrodef{mo}[MO]{molecular orbital}
\acrodef{en}[$\chi$]{electronegativity}
\acrodef{chem-hard}[$\eta$]{chemical hardness}
\acrodef{qsar}[QSAR]{Quantitative Structure-Activity Relationship}
\acrodef{lfer}[LFER]{Linear Free Energy Relationship}
\acrodef{mlff}[MLFF]{machine learning force field}
\acrodef{mlip}[MLIP]{machine learning interatomic potential}
\acrodef{mlp}[MLP]{machine learning potential}
\acrodef{ann}[ANN]{artificial neural network}
\acrodef{hdnn}[HDNN]{high dimensional neural network}
\acrodef{mlm}[MLM]{"mindless" molecule}
\acrodef{mr}[MR]{multireference}
\acrodef{pes}[PES]{potential energy surface}
\acrodef{ri}[RI]{resolution of the identity}
\acrodef{ip}[IP]{ionization potential}
\acrodef{ea}[EA]{electron affinity}
\acrodef{cc}[CC]{coupled cluster}
\acrodef{rks}[RKS]{restricted Kohn-Sham}
\acrodef{uks}[UKS]{unrestricted Kohn-Sham}
\acrodef{os}[OS]{open-shell}
\acrodef{sie}[SIE]{self-interaction error}
\acrodef{dfa}[DFA]{density functional approximation}
\acrodef{hts}[HTS]{high-throughput screening}
\acrodef{lda}[LDA]{local density approximation}
\acrodef{gga}[GGA]{generalized gradient approximation}
\acrodef{m}[m]{meta}
\acrodef{bj}[BJ]{Becke-Johnson}
\acrodef{fod}[FOD]{fractional occupation density}
\acrodef{sr}[SR]{scalar relativistic}
\acrodef{soc}[SOC]{spin-orbit coupling}
\acrodef{so}[SO]{spin-orbit}
\acrodef{sr}[SR]{scalar relativity}
\acrodef{x2c}[X2C]{exact two-component}
\acrodef{dkh}[DKH]{Douglas--Kroll--Hess}
\acrodef{nmr}[NMR]{Nuclear Magnetic Resonance}
\acrodef{gem}[GEM]{General and minimally empirical solvation model}
\acrodef{zora}[ZORA]{Zeroth Order Regular Approximation}
\acrodef{giao}[GIAO]{gauge-including atomic orbital}
\acrodef{gto}[GTO]{Gaussian-type orbital}
\acrodef{sto}[STO]{Slater-type orbital}
\acrodef{gcp}[gCP]{geometrical counter-poise}
\acrodef{ams}[AMS]{Amsterdam Modeling Suite}
\acrodef{eda}[EDA]{energy decomposition analysis}
\acrodef{led}[LED]{local energy decomposition}
\acrodef{efg}[EFG]{electric field gradient}
\acrodef{mp2}[MP2]{second-order Møller-Plesset perturbation theory}
\acrodef{casscf}[CASSCF]{complete active space self-consistent field}
\acrodef{mrci}[MR-CI]{multi-reference configurational interaction}
\acrodef{dh}[DH]{double hybrid}
\acrodef{cbs}[CBS]{complete basis set}
\acrodef{pp}[PP]{pseudo potential}
\acrodef{cgto}[CGTO]{contracted Gaussian-type orbitals}
\acrodef{pgto}[PGTO]{primitive Gaussian-type orbitals}
\acrodef{atm}[ATM]{Axilrod--Teller--Muto}
\acrodef{nmr}[NMR]{Nuclear Magnetic Resonance}
\acrodef{ppm}[ppm]{parts per million}


\endinput