%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Personal helper theme for package documentations
% Copyright samcarter
%
% This file may be distributed and/or modified
% under the LaTeX Project Public License 1.3c or later
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Usage:
% ln ~/Life/latex/beamertheme-sam/themesam.sty package-doc-settings.sty 
% \usepackage[
%   themecolor=samdblue
% ]{\jobname-settings}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Colours
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{xcolor}
\definecolor{samyellow}{RGB}{246,193,65}
\definecolor{samorange}{RGB}{241,147,45}% pgfplotsthemebeamer
\definecolor{samred}{RGB}{191,26,46}% TikZbricks
\definecolor{sammagenta}{RGB}{170,42,104}% TikZmarmots
\definecolor{samviolet}{RGB}{136,46,114}% TikZlings
\definecolor{samlila}{RGB}{101,67,159}% Rainbow beamer theme
\definecolor{samdblue}{RGB}{0,51,134}% beamer theme
\definecolor{samlblue}{RGB}{22,89,155}% TikZducks
\definecolor{samteal}{RGB}{25,143,157}% Tcolorbox beamer theme
\definecolor{samlgreen}{RGB}{68,170,153}% Jigsaw
\definecolor{samdgreen}{RGB}{78,178,125}
\definecolor{samlgray}{RGB}{160,160,185}
\definecolor{samdgray}{RGB}{60,60,85}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Package options
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{xkeyval}
\DeclareOptionX{themecolor}[samdblue]{\colorlet{themecolor}{#1}}
\DeclareOptionX{listingcolor}[samlblue]{\colorlet{listingcolor}{#1}}
\ExecuteOptionsX{themecolor,listingcolor}
\ProcessOptionsX

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Packages
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\@ifclassloaded{beamer}{}{%
  \RequirePackage[english]{babel}
  \RequirePackage[paper=a4paper,margin=2.9cm]{geometry}
  \RequirePackage{scrlayer-scrpage}
  \let\hrulefillx\hrulefill
  \RequirePackage[bitstream-charter]{mathdesign}
  \let\hrulefill\hrulefillx
  \RequirePackage[hang,flushmargin,bottom]{footmisc}
  \RequirePackage{footnotehyper}
  \makesavenoteenv{tcolorbox}
  \RequirePackage[all]{nowidow}
  \RequirePackage[colorlinks=true,breaklinks=true,allcolors=themecolor,hyperfootnotes=false]{hyperref}
}
\RequirePackage[T1]{fontenc}
\RequirePackage{xspace}
\RequirePackage{inconsolata}% mono font with bold, but italic is missing
% \RequirePackage[scale=0.85]{cascadia-code}
% \AddToHook{cmd/ttfamily/before}{\fontseries{sl}}
\usepackage{synthslant}% to fake slented comments in inconsolata

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Listings
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage[cachedir=./.minted]{minted}

\AddToHook{env/MintedVerbatim/before}{%
  % optional arguments
  \@namedef{PYG@tok@na}{\def\PYG@tc##1{\textcolor{black}{##1}}}%
  % macros
  \@namedef{PYG@tok@k}{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}%
  % curly brakets
  \@namedef{PYG@tok@nb}{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}%
  % comments (italics won't work with the inconsolata font)
  \@namedef{PYG@tok@c}{\def\PYG@tc##1{\textcolor{gray}{\textsynthslant{##1}}}}%
}

\usemintedstyle{default}
\setminted{
  breaksymbolleft={},
  tabsize=2,
  breaklines=true,
}
\newminted[samcode]{latex}{}
\newmintinline[saminline]{latex}{}

% use non-bold and all coloured for inline code in articles
\ifdefined\insertaspectratio\else
  \patchcmd{\minted@inputpyg@inline}{\minted@input}{\color{listingcolor}\renewcommand\textcolor[3][]{##3}\renewcommand\bfseries{}\minted@input}{}{}
\fi

\RequirePackage[most]{tcolorbox}
\tcbuselibrary{minted}
\tcbset{%
  colframe=themecolor,
  fonttitle=\bfseries,
  sidebyside,
  center lower,
  righthand width=5.7cm,
  bottom=2pt, 
  top=2pt,
  left=3pt,
  right=3pt,
  sidebyside gap=10pt,
  lower separated=false,
  listing engine=minted,
  minted language=latex,
  colback=themecolor!10,
  sharp corners,
  boxrule=0pt,
  before title={\strut}
}

% avoid page breaks right in front of the tcolorbox
\@ifclassloaded{beamer}{}{
  \tcbuselibrary{hooks}
  \tcbset{before pre={\nopagebreak[4]}}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% document settings
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\@ifclassloaded{scrartcl}{%
  \KOMAoptions{parskip=half}
  \addtokomafont{sectioning}{\color{themecolor}}
  \addtokomafont{date}{\normalsize}
  \addtokomafont{author}{\normalsize}
  \setlength{\footnotemargin}{0.7em}
}{}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Custom macros
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\providecommand*{\CTAN}{\textsc{CTAN}\xspace}
\providecommand*{\TikZ}{Ti\emph{k}Z\xspace}
\providecommand*{\miktex}{MiK\TeX\xspace}
\providecommand*{\texlive}{\TeX{}Live\xspace}
\providecommand*{\tikzbrick}{Ti\emph{k}Zbrick\xspace}
\providecommand*{\tikzducks}{Ti\emph{k}Zducks\xspace}
\providecommand*{\tikzlings}{Ti\emph{k}Zlings\xspace}
\providecommand*{\tikzmarmots}{Ti\emph{k}Zmarmots\xspace}
\providecommand*{\ConTeXt}{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt}