% Hebdomon document class for use in report and assessment writing
% Written by D. T. McGuiness: dtm@mci4me.at

% v0.1 - Angry Avocado [WS2024]

\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesClass{hebdomon}[2024/08/08 v0.1 Report and Documentation standard]

% This document is based on the excellent KOMA Script scrreprt class
% The following options are declared beforehand.

\RequirePackage{ifthen} % require an if-else loop to
% choose depending on the field

% Allows students to choose which package for code printing.

\newboolean{mnt} % set bool operator for minted
\newboolean{lst} % set bool operator for lstlisting
\newboolean{drw} % set bool operator for PGF/TikZ

%-OPTION: set option to choose minted code printing package
\DeclareOption{minted}{
	\setboolean{mnt}{true}
}

%-OPTION: set option to choose lstlisting code printing package
\DeclareOption{lstlisting}{
	\setboolean{lst}{true}
}

%-OPTION: set option to choose PGF/TikZ plotting packages
\DeclareOption{draw}{
	\setboolean{drw}{true}
}

\DeclareOption*{
	\PassOptionsToClass{\CurrentOption}{scrreprt}
}
\ExecuteOptions{}
\ProcessOptions \relax

% Load the base class to create the custom template
\LoadClass[
	bibliography  = totoc,
	headings      = big,
	captions      = tableheading,
	chapterprefix = true,
]{scrreprt}

% Page Geometry -----------------------------------------------------------
% Define the default page geometry
\RequirePackage[
	left   = 3.0cm,
	right  = 2.0cm,
	top    = 2.5cm,
	bottom = 2.5cm]{geometry}

% Required Packages -------------------------------------------------------
\RequirePackage{nicematrix} % For modern table design
\RequirePackage{booktabs}   % To access \midrule \toprule \bottomrule

% For use in referencing purposes
\RequirePackage[
	backend=bibtex]{biblatex}

\RequirePackage{graphicx}   % To enable image insertion
\RequirePackage{environ}    % To allow new environments with Environ


\RequirePackage{lmodern}
\RequirePackage[sfdefault]{FiraSans}

\RequirePackage{minitoc}
\RequirePackage{setspace}

\RequirePackage{hyperref}  % Allow the use of hyperlink within document

\RequirePackage{enumitem}

\RequirePackage{amsmath}

\usepackage[labelfont=bf]{caption} % Set the caption style to bold

\RequirePackage{titlesec}

% %%%%% ----- Colour Definitions ------ %%%%%
\RequirePackage{xcolor}

% Define the MCI colours.
\definecolor{mciRed}{HTML}{821131}
\definecolor{mciBlue}{HTML}{004983}
\definecolor{mciOrange}{HTML}{fe640b}
\definecolor{quoteColour}{HTML}{CBA6F7}
\definecolor{nord7}{HTML}{81a1c1}
\definecolor{norda}{HTML}{bf616a}
\definecolor{nord9}{HTML}{5e81ac}
\definecolor{nord13}{HTML}{ebcb8b}
\definecolor{nord14}{HTML}{a3be8c}

% %%%%% ----- Code Presentation ----- %%%%%
% To make this class more compatible and avoid questions about pygments,
% the author has decided to use listings for code presentation, instead of
% minted.
\RequirePackage{listings}

\lstset{
	aboveskip={1.3\baselineskip},
	basicstyle=\small\ttfamily\linespread{4},
	breaklines=false,
	backgroundcolor = \color[HTML]{eff1f5},
	columns=flexible,
	commentstyle=\color[HTML]{6c6f85}\ttfamily,
	escapechar=@,
	extendedchars=true,
	identifierstyle=\color{black},
	inputencoding=latin1,
	keywordstyle=\color[HTML]{fe640b},
	language=Python,
	ndkeywordstyle=\color[HTML]{228B22},
	numbers=left,
	numberstyle=\tiny,
	prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}},
	showstringspaces=false,
	stringstyle=\color[HTML]{40a02b}\ttfamily,
	upquote=true,
	emph={None},
	emphstyle={\color[HTML]{FE640B}},
	%	keywordstyle=[1]{\color[HTML]{8839ef}},
	%	morekeywords={(,)},
	keywordstyle=[2]\color[HTML]{D20F39},
	keywordstyle={[3]\color[HTML]{8839ef}},
	keywords=[3]{x},
}

% \lstset{style=mystyle}

% New Environment Definitions ---------------------------------------------
% To create environments tcolorbox package is required to make them
% aesthetically pleasing.
\RequirePackage{tcolorbox}
\tcbuselibrary{breakable, minted, skins,theorems, hooks, most}

% %%%%% ----- tcolorbox Templates ----- %%%%%

% Define the excerpt environment style.
\tcbset{%
	quoteTemplate/.style={%
			enhanced,
			breakable,
			arc=0pt,
			outer arc=0pt,
			toprule=0pt,
			rightrule=0pt,
			bottomrule=0pt,
			leftrule=1mm,
			colback=white,
			colframe=mciRed,
			detach title
		}%
}%

\tcbset{%
	blockTemplate/.style={%
			enhanced,
			breakable,
			arc=0pt,
			outer arc=0pt,
			toprule=0pt,
			rightrule=0pt,
			bottomrule=0pt,
			leftrule=1mm,
			colback=#1!25,
			colframe=#1,
			coltitle=black,
			detach title
		}%
}%

% %%%%% --------------------------------%%%%%

% Environment used to insert quotations.
\NewEnviron{excerpt}[1][]{%
	\begin{tcolorbox}[blockTemplate=nord7]
		\BODY
	\end{tcolorbox}
}%

\NewEnviron{example}[1][]{%
	\begin{tcolorbox}[blockTemplate=nord14]
		\BODY
	\end{tcolorbox}
}%

\NewEnviron{highlight}[1][]{%
	\begin{tcolorbox}[blockTemplate=nord13]
		\BODY
	\end{tcolorbox}
}%

\NewEnviron{theory}[1][]{%
	\begin{tcolorbox}[blockTemplate=black]
		\BODY
	\end{tcolorbox}
}%

\NewEnviron{warning}[1][]{%
	\begin{tcolorbox}[blockTemplate=norda]
		\BODY
	\end{tcolorbox}
}%

\NewEnviron{hgitemize}[1][]{%
	\begin{itemize}[leftmargin=!,labelindent=-29.2pt]
		\BODY
	\end{itemize}
}%





% KOMA-Script Configuration -----------------------------------------------

\addtokomafont{chapterprefix}{\raggedleft}
\addtokomafont{chapter}{\fontsize{30}{38}\selectfont}
\addtokomafont{section}{\huge}
\addtokomafont{subsection}{\Large}
\addtokomafont{subsubsection}{\large}

% Set the fontstyle of minitoc to that of the document
\renewcommand{\mtifont}{\large\sffamily}
\renewcommand{\mtcfont}{\small\sffamily}
\renewcommand{\mtcSfont}{\small\sffamily}
\renewcommand{\mtcSSfont}{\small\sffamily}
\renewcommand{\mtcSSSfont}{\small\sffamily}

\newcommand{\StudentName}[1]{\author{#1}}

% Set the depth of TOC
\setcounter{secnumdepth}{3} % number subsubsections
\setcounter{tocdepth}{3} % list subsubsections

% Configure the document titles
\newcommand{\Chapter}[1]{\chapter{\textcolor{mciBlue}{#1}}\minitoc}
\newcommand{\Section}[1]{\section{\textcolor{mciBlue}{#1}}}
\newcommand{\Subsection}[1]{\subsection{\textcolor{mciBlue}{#1}}}
\newcommand{\Subsubsection}[1]{\subsubsection{\textcolor{mciBlue}{#1}}}

\newcommand{\hlight}[1]{\textcolor{mciOrange}{#1}}


% Configure the baseline of the document
\renewcommand{\baselinestretch}{1.2}

\renewcommand*{\chapterformat}{%
	\mbox{\scalebox{1.5}{\chapappifchapterprefix{\nobreakspace}}%
		\scalebox{4}{\color{mciRed}\thechapter\autodot}\enskip}}

\newcommand{\heading}[1]{\subsubsection*{$\blacksquare$ #1}}
\newcommand{\marginsecnumber}[1]{%
	\makebox[0pt][r]{#1\hspace{6pt}}%
}

\titleformat{\section} {\normalfont\Large\bfseries}
{\marginsecnumber\thesection} {0pt} {}
\titleformat{\subsection} {\normalfont\large\bfseries}
{\marginsecnumber\thesubsection} {0pt} {}
\titleformat{\subsubsection}
{\normalfont\normalsize\bfseries}
{\marginsecnumber\thesubsubsection}
{0pt} {}
\titleformat{\paragraph}[runin]
{\normalfont\normalsize\bfseries}
{\marginsecnumber\theparagraph}
{0pt} {}
\titleformat{\subparagraph}[runin]
{\normalfont\normalsize\bfseries}
{\marginsecnumber\thesubparagraph}
{0pt}
{}

\titlespacing*{\subsection}{0pt}{*3.25}{*1.5}%

\setlength\parindent{0pt} % set no indent for the entire file

\ifthenelse{\boolean{mnt}}{%
	\RequirePackage{minted}

	\newcommand{\pcode}[1]{%
		{%
				\colorbox{gray!10}{%
					\mintinline[fontsize=\small]{text}{#1}%
				}%
			}%
	}%

	%\usemintedstyle{catppuccin-latte}

	\definecolor{catback}{HTML}{585b70}
	\definecolor{catground}{HTML}{eff1f5}

	% Set box and font rules for inputminted command for paper
	\newtcbinputlisting{\codeinputpaper}[4][]{%
		listing file={#3},
		minted language=#2,
		minted options={
				fontsize=\small,
				tabsize=4,
				xleftmargin=-2.25mm,
				numbersep=5mm,
				breaklines=true,
				highlightcolor=orange!50,
				%formatcom=orange!50
			},% <-- put other minted options inside the brackets
		overlay unbroken and first={%
				\begin{tcbclipinterior}
					\fill[catback] (frame.south west) rectangle
					([xshift=1mm]frame.north west);
					\fill[catback] (frame.north east) rectangle
					([xshift=-4mm, yshift=-10mm]frame.north east);
					\fill[catback]
					([xshift=-4mm, yshift=-10mm]frame.north east) --
					([xshift=0mm, yshift=-10mm]frame.north east) --
					([xshift=0mm, yshift=-12mm]frame.north east);
				\end{tcbclipinterior}
				\node[rotate=-90, minimum width=1cm, anchor=north,
					font=\bfseries] at ([xshift=0mm, yshift=-4mm]frame.north
				east) {\tiny \textcolor{white}{#2}}; },
		sharp corners,
		leftrule=1mm,
		toprule=0pt,
		rightrule=0pt,
		bottomrule=0pt,
		colback=catground,
		colframe=black,
		breakable,
		enhanced,% <-- put other tcolorbox options here
		arc=0mm,
		boxrule=0pt,
		frame hidden,
		listing only,
		minted options app={#1}}

	\RequirePackage{xpatch}

	\newenvironment{code}[1]
	{%
		\VerbatimEnvironment
		\begin{minted}{#1}%
}
{%
  \end{minted}%
	}
	%
	\xpatchcmd{\mintinline}{\begingroup}{\begingroup\let\itshape\relax}{}{}
	\xpatchcmd{\minted}{\VerbatimEnvironment}{\VerbatimEnvironment\let\itshape\relax}{}{}
	\xpatchcmd{\inputminted}{\begingroup}{\begingroup\let\itshape\relax}{}{}
}{}

\ifthenelse{\boolean{lst}}{%
	\RequirePackage{listings}%
	\RequirePackage{xparse}

	\NewDocumentCommand{\pcode}{v}{%
		#1%
	}

	\newenvironment{code}[1]
	{%
		\VerbatimEnvironment
		\begin{lstlisting}{language=#1}%
}
{%
  \end{lstlisting}%
	}
}{}


\ifthenelse{\boolean{drw}}{%
	\RequirePackage{pgfplots}   % Enable to draw plots in the documents
	\usepackage{tikz}           % Enable Tikz and its libraries
	\pgfplotsset{compat=1.18}   % Set the pgf compatibility.
	%
	\usepgfplotslibrary{polar}  % To access polarplot
	%
	\pgfplotsset{
		hebdomon/.style={
				minor grid style={dotted, gray!50},
				major grid style={dotted, gray!50},
				%
				grid = both,
				minor tick num=2,
				ytick align=outside,
				xtick align=outside,
				axis line style={draw=none},
				axis lines = left,
				%
				line width=2pt,
				%
				legend style = {
						line width=0.5pt
					},
				%
				every non boxed x axis/.append style={x axis line style=-},
				every non boxed y axis/.append style={y axis line style=-},
				%
			},
	}
}{}


\endinput