%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 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}
\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}}
\RequirePackage{iexec}

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

% smuggling custom pygmentize style in cache folder
% (a real pygmentise style would need installtion in some python folder)
\begin{filecontents*}[noheader]{./sam.pygstyle}
\makeatletter
\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax%
    \let\PYG@ul=\relax \let\PYG@tc=\relax%
    \let\PYG@bc=\relax \let\PYG@ff=\relax}
\def\PYG@tok#1{\csname PYG@tok@#1\endcsname}
\def\PYG@toks#1+{\ifx\relax#1\empty\else%
    \PYG@tok{#1}\expandafter\PYG@toks\fi}
\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{%
    \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}}
\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}}

% optional arguments
\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor{black}{##1}}}

% macros
\expandafter\def\csname PYG@tok@k\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
% curly brakets
\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}

% comments (italics won't work with the inconsolata font)
\expandafter\def\csname PYG@tok@c\endcsname{\def\PYG@tc##1{\textcolor{gray}{##1}}}

\def\PYGZbs{\char`\\}
\def\PYGZus{\char`\_}
\def\PYGZob{\char`\{}
\def\PYGZcb{\char`\}}
\def\PYGZca{\char`\^}
\def\PYGZam{\char`\&}
\def\PYGZlt{\char`\<}
\def\PYGZgt{\char`\>}
\def\PYGZsh{\char`\#}
\def\PYGZpc{\char`\%}
\def\PYGZdl{\char`\$}
\def\PYGZhy{\char`\-}
\def\PYGZsq{\char`\'}
\def\PYGZdq{\char`\"}
\def\PYGZti{\char`\~}
% for compatibility with earlier versions
\def\PYGZat{@}
\def\PYGZlb{[}
\def\PYGZrb{]}
\makeatother
\end{filecontents*}

\iexec{mkdir -p $TMPDIR/minted && mv sam.pygstyle $TMPDIR/minted/.}

\usemintedstyle{sam}
\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}