
%  ▄▄▄     ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄   ▄▄    ▄▄   ▄▄ ▄▄▄▄▄▄▄ ▄▄▄     ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄   ▄▄▄▄▄▄▄ 
% █   █   █      █       █       █  █▄█  █  █  █ █  █       █   █   █       █       █   ▄  █ █       █
% █   █   █  ▄   █▄     ▄█    ▄▄▄█       █  █  █▄█  █    ▄▄▄█   █   █    ▄  █    ▄▄▄█  █ █ █ █  ▄▄▄▄▄█
% █   █   █ █▄█  █ █   █ █   █▄▄▄█       █  █       █   █▄▄▄█   █   █   █▄█ █   █▄▄▄█   █▄▄█▄█ █▄▄▄▄▄ 
% █   █▄▄▄█      █ █   █ █    ▄▄▄██     █   █   ▄   █    ▄▄▄█   █▄▄▄█    ▄▄▄█    ▄▄▄█    ▄▄  █▄▄▄▄▄  █
% █       █  ▄   █ █   █ █   █▄▄▄█   ▄   █  █  █ █  █   █▄▄▄█       █   █   █   █▄▄▄█   █  █ █▄▄▄▄▄█ █
% █▄▄▄▄▄▄▄█▄█ █▄▄█ █▄▄▄█ █▄▄▄▄▄▄▄█▄▄█ █▄▄█  █▄▄█ █▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄█   █▄▄▄▄▄▄▄█▄▄▄█  █▄█▄▄▄▄▄▄▄█


%   ▄▄█▀▀▀█▄█                         
% ▄██▀     ▀█                         
% ██▀       ▀ ▄██▀██▄▀███▄███  ▄▄█▀██ 
% ██         ██▀   ▀██ ██▀ ▀▀ ▄█▀   ██
% ██▄        ██     ██ ██     ██▀▀▀▀▀▀
% ▀██▄     ▄▀██▄   ▄██ ██     ██▄    ▄
%   ▀▀█████▀  ▀█████▀▄████▄    ▀█████▀

% This file contains all necessary dependencies for the document to compile (at all) and some core macros
% Load this before the config file

% ── Imports ─────────────────────────────────────────────────────────
\typeout{[Core] Importing!}

\usepackage[table, dvipsnames]{xcolor}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage[export]{adjustbox}
\usepackage[most]{tcolorbox}
\usepackage{cancel}
\usepackage{dsfont}
\usepackage{amssymb}
\usepackage{mathrsfs}
\usepackage{ulem}
\usepackage{soul}
\usepackage{parskip}
\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{tocloft}
\usepackage{wasysym}
\usepackage{wrapfig}
\usepackage{multicol}
\usepackage{ifthen}
\usepackage[hidelinks]{hyperref}
\usepackage{enumitem}
\usepackage{gensymb}
\usepackage{pifont}


% ── Language Switching. ─────────────────────────────────────────────
% Currently only English and German are supported
% See docs for how to use
\newcounter{lang}

\newcommand{\setLang}[1]{
	\edef\lang{#1}
	\edef\en{en}
	\edef\de{de}
	\ifx\lang\en
		\typeout{[Lang Switcher] Loading English}
		\setcounter{lang}{1}
	\else
		\ifx\lang\de
			\typeout{[Lang Switcher] Loading German}
			\setcounter{lang}{2}
			\usepackage[ngerman]{babel}
		\else
			\typeout{[Lang Switcher] No such language!}
		\fi
	\fi
}

% Deprecated, as not useful
\newcommand{\loadLang}{
	\ifnum\value{lang}<2{
		\typeout{[Lang Loader] Loaded English}
		}\else {
			\typeout{[Lang Loader] Loaded German}
			\setcounter{lang}{2}
		}
	\fi
}


% ────────────────────────────────────────────────────────────────────
% Create config counters / variables. See the config file for changing them
\newcounter{numberingConfig}
\newcounter{numberSubsections}
\newcounter{descriptorShadeStrength}
\newcounter{shadeStrength}

% ── Setup ───────────────────────────────────────────────────────────
% Set up the latex document, configure author, title (as first argument), as well as headers and footers
\newcommand{\setup}[1]{
	\typeout{[Setup] Setting up...}
	\loadLang
	\usepackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry}
	\title{\Huge \textbf{#1}}
	\author{\authorTitle}
	\fancyhead{}
	\fancyhead[L]{#1}
	\fancyhead[R]{\authorHeaders}
	\fancyfoot{}
	\fancyfoot[L]{\today}
	\fancyfoot[R]{\thepage\ /\ \pageref{LastPage}}
	\fancypagestyle{plain}{%
		\fancyhead{}
		\fancyhead[L]{#1}
		\fancyhead[R]{\authorHeaders}
		\fancyfoot{}
		\fancyfoot[L]{\today}
		\fancyfoot[R]{\thepage\ /\ \pageref{LastPage}}
	}
	\typeout{[Setup] Complete}
}

% Start document command (required)
\newcommand{\startDocument}{
	\maketitle
	\startDocumentNoTitle
}

% Or this one, if you don't want a title
\newcommand{\startDocumentNoTitle}{
	\pagestyle{fancy}
	\thispagestyle{fancy}
}

% Set up the latex document, only configuring the author, title and page size
\newcommand{\setupBarebones}[1]{
	\typeout{[Setup] Using barebones setup}
	\loadLang
	\usepackage[a4paper,textwidth=17.5cm,textheight=25cm,includehead]{geometry}
	\title{\Huge \textbf{#1}}
	\author{\authorTitle}
}

% Set up the latex document for exam summaries (Extra wide body, small margins, no header)
\newcommand{\setupCheatSheet}[1]{
	\typeout{[Setup] Using CheatSheet setup}
	\loadLang
	\usepackage[a4paper,textwidth=20cm,textheight=28.5cm]{geometry}
	\title{\Huge \textbf{#1}}
	\author{\authorTitle}
}


% ────────────────────────────────────────────────────────────────────
%          ╭────────────────────────────────────────────────╮
%          │                 Translatation                  │
%          ╰────────────────────────────────────────────────╯
\newcommand{\translate}[2]{\ifnum\value{lang}<2{#1}\else{#2}\fi}
\newcommand{\tr}[2]{\translate{#1}{#2}}

% ┌                                                ┐
% │        Translation aids (commonly used)        │
% └                                                ┘
\newcommand{\trif}{\translate{if }{falls }}
\newcommand{\trIf}{\translate{If }{Falls }}
\newcommand{\trLet}{\translate{Let }{Sei }}
\newcommand{\trLets}{\translate{Let }{Seien }}
\newcommand{\trFor}{\translate{For }{Für }}
\newcommand{\trfor}{\translate{for }{für }}
\newcommand{\trand}{\translate{and }{und }}
\newcommand{\tror}{\translate{or }{oder }}
\newcommand{\trst}{\translate{s.t. }{s.d. }}
\newcommand{\trsuchthat}{\translate{such that }{so dass }}
\newcommand{\trwith}{\translate{with }{mit }}

%  ___                 ___         
% (  _ \             / ___)_       
% | ( (_)  _    ___ | (__ (_)  __  
% | |  _ / _ \/  _  \  __)| |/ _  \
% | (_( ) (_) ) ( ) | |   | | (_) |
% (____/ \___/(_) (_)_)   (_)\__  |
%                           ( )_) |
%                            \___/ 

% To be loaded *after* main/core.tex

% Configure your author name here
\newcommand{\authorTitle}{Janis Hutz\\\url{https://janishutz.com}}
\newcommand{\authorHeaders}{Janis Hutz}

% Configure your address here
\newcommand{\name}{Janis Hutz}
\newcommand{\street}{Street}
\newcommand{\city}{City}
\newcommand{\countrycode}{CH}


% Configure definition, lemma, theorem, etc numbering behaviour. 1 = Individual, 2 = Combined (apart from Definition), 3 = Combined
\setcounter{numberingConfig}{1}

% Configure if for definitions, lemmas, etc, numbering should be (0) = <section>.<number> or (1) = <section>.<subsection>.<number> or (2) = <section>.<subsection>.<subsubsection>.<number>
\setcounter{numberSubsections}{0}

% Set the default language. 
\setLang{en}

% Set the default command for theorem translation
\newcommand{\theoremde}{Satz}


% ----- %
% STYLE %
% ----- %

% The colour-saturation of the short / inline descriptors (default = 40)
\setcounter{descriptorShadeStrength}{40}

% The colour-saturation of the shade command (default = 20)
\setcounter{shadeStrength}{20}

%░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
%░░░      ░░░░░   ░░░░░░░░░░░░░   ░░░░░░░░░░░
%▒   ▒▒▒▒   ▒▒▒   ▒▒▒▒▒▒▒▒▒▒▒▒▒   ▒▒▒▒▒▒▒▒▒▒▒
%▒▒   ▒▒▒▒▒▒▒    ▒  ▒   ▒▒▒   ▒   ▒▒▒▒   ▒▒▒▒
%▓▓▓▓   ▓▓▓▓▓▓▓   ▓▓▓▓   ▓   ▓▓   ▓▓  ▓▓▓   ▓
%▓▓▓▓▓▓▓   ▓▓▓▓   ▓▓▓▓▓▓    ▓▓▓   ▓         ▓
%▓   ▓▓▓▓   ▓▓▓   ▓ ▓▓▓▓▓   ▓▓▓   ▓  ▓▓▓▓▓▓▓▓
%███      ██████   █████   ████   ███     ███
%██████████████████████   ███████████████████

% Global style configs for tcolorbox (to reduce bloat)
\newcommand{\usetcolorboxes}{
	\tcbset{
		mainboxstyle/.style={
				arc=3mm,
				colback=red!5!white,
				colframe=red!75!black,
				colbacktitle=red!75!black,
				fonttitle=\bfseries,
				enhanced,
				attach boxed title to top left={yshift=-2mm,xshift=5mm},
				breakable,
				top=0.4cm,
			}
	}
	\tikzset{
		overlaystyle/.style={
				draw=red!75!black,
				thick,
				fill=red!75!black,
				left,
				anchor=east,
				text=white,
				rounded corners=1mm,
				font=\bfseries,
				xshift=-5mm,
				yshift=1mm,
				inner xsep=3mm,
				inner ysep=1.5mm
			}
	}
}

% -------------------- %
% Small style elements %
% -------------------- %
\newcommand{\setFont}[1]{\fontfamily{#1}\selectfont}
\newcommand{\setFontType}[1]{
	\ifthenelse{\equal{#1}{mono}}{
		\renewcommand{\familydefault}{\ttdefault}
	}{
		\ifthenelse{\equal{#1}{serif}}{
			\renewcommand{\familydefault}{\rmdefault}
		}{
			\renewcommand{\familydefault}{\sfdefault}
		}
	}
}

\newcommand{\hrmvspace}{\vspace{-0.25pc}}
\newcommand{\rmvspace}{\vspace{-0.5pc}}
\newcommand{\mrmvspace}{\vspace{-0.75pc}}
\newcommand{\drmvspace}{\vspace{-1pc}}
\newcommand{\dhrmvspace}{\vspace{-1.25pc}}
\newcommand{\dnrmvspace}{\vspace{-1.5pc}}
\newcommand{\dmrmvspace}{\vspace{-1.75pc}}
\newcommand{\ddrmvspace}{\vspace{-2pc}}
\renewcommand{\footrulewidth}{0.4pt}
\newcommand{\TODO}{\color{red} \hl{TODO:} \color{black}}
\newcommand{\bi}[1]{\textbf{\textit{#1}}}
\renewcommand{\quote}[1]{``\textit{#1}''}

% Add a color shade (similar to \fhlc, but nicer boxes)
\newcommand{\background}[3]{\tcbox[on line,
		boxsep=2pt,
		left=0pt,
		right=0pt,
		top=0pt,
		bottom=0pt,
		colframe=white,
		frame empty,
		colback=#1!#2!white,
		highlight math style={enhanced}
	] {\textbf{#3}}}

% Abstraction of background, where the brightness is set to 20%
\newcommand{\shade}[2]{\background{#1}{\arabic{shadeStrength}}{#2}}

% This command is used for the short and inline descriptors
\newcommand{\bg}[2]{\background{#1}{\arabic{descriptorShadeStrength}}{#2}}

% Add a gray backdrop
\newcommand{\backdrop}[1]{\shade{black}{#1}}


% Fancy highlighting (Bold, underlined, colorbox behind it. Shorthand for \fhlc{white}{#1}
\newcommand{\fhl}[1]{\fhlc{white}{#1}}

% Add a colorbox around your text with the color specified. Text is bold and underlined
\newcommand{\fhlc}[2]{\textbf{\underline{\colorbox{#1}{#2}}}}

% Draw box around links. First arg link, second arg display
\newcommand{\hlhref}[2]{\color{MidnightBlue}\fbox{\href{#1}{#2}}\color{black}}

% Same for urls (just one arg tho)
\newcommand{\hlurl}[1]{\color{MidnightBlue}\fbox{\url{#1}}\color{black}}

% Spacing (horizontal)
\newcommand{\smallhspace}{\hspace{2mm}}
\newcommand{\mediumhspace}{\hspace{5mm}}
\newcommand{\largehspace}{\hspace{1cm}}

% ----------------- %
% Table of contents %
% ----------------- %

% Print a table of contents as a tcolorbox
\newcommand{\printtoc}[1]{
	\renewcommand{\cfttoctitlefont}{}
	\renewcommand{\cftaftertoctitle}{\vspace{-0.75cm}}
	\renewcommand{\contentsname}{}
	\begin{tcolorbox}[colback=black!5!white,colbacktitle=#1!75!black,coltitle=black,enhanced,attach boxed title to top center={yshift=-2mm},
		title={\Large \ifnum\value{lang}<2{Contents}\else {Inhaltsverzeichnis}\fi},fonttitle=\bfseries,breakable]
		\hspace{1cm}
		\tableofcontents
	\end{tcolorbox}
}

%▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
%██░▄▄▀█▀▄▄▀█░▄▀▄░█░▄▀▄░█▀▄▄▀█░▄▄▀
%██░████░██░█░█▄█░█░█▄█░█░██░█░██░
%██░▀▀▄██▄▄██▄███▄█▄███▄██▄▄██▄██▄
%▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

\newtcolorbox{recall}[2][]{mainboxstyle,colback=yellow!5!white,colframe=yellow!75!black,colbacktitle=yellow!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=yellow!75!black,,fill=yellow!75!black] at (frame.north east) {\large \translate{Recall }{Repetition }};},#1}

\newtcolorbox{remarks}[2][]{mainboxstyle,colback=green!5!white,colframe=green!75!black,colbacktitle=green!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=green!75!black,,fill=green!75!black] at (frame.north east) {\large \translate{Remarks }{Bemerkungen }};},#1}

\newtcolorbox{guides}[3][]{mainboxstyle,colback=red!5!white,colframe=red!75!black,colbacktitle=red!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=red!75!black,,fill=red!75!black] at (frame.north east) {\large #3};},#1}


\newtcolorbox{properties}[2][]{mainboxstyle,colback=purple!5!white,colframe=purple!75!black,colbacktitle=purple!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=purple!75!black,,fill=purple!75!black] at (frame.north east) {\large \translate{Properties }{Eigenschaften }};},#1}

\newtcolorbox{restrictions}[2][]{mainboxstyle,colback=purple!5!white,colframe=purple!75!black,colbacktitle=purple!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=purple!75!black,,fill=purple!75!black] at (frame.north east) {\large \translate{Restrictions }{Einschränkungen }};},#1}

\newtcolorbox{limitations}[2][]{mainboxstyle,colback=purple!5!white,colframe=purple!75!black,colbacktitle=purple!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=purple!75!black,,fill=purple!75!black] at (frame.north east) {\large \translate{Limitations }{Limitierungen }};},#1}

\newtcolorbox{intuition}[2][]{mainboxstyle,colback=Emerald!5!white,colframe=Emerald!75!black,colbacktitle=Emerald!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=Emerald!75!black,,fill=Emerald!75!black] at (frame.north east) {\large Intuition};},#1}

\newcommand{\inlineintuition}{\bg{Emerald}{Intuition:}}


% Terms and notation
\newtcolorbox{terms}[2][]{mainboxstyle,colback=orange!5!white,colframe=orange!75!black,colbacktitle=orange!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=orange!75!black,,fill=orange!75!black] at (frame.north east) {\large \translate{Terms }{Begriffe }};},#1}

\newtcolorbox{notation}[2][]{mainboxstyle,colback=Peach!5!white,colframe=Peach!75!black,colbacktitle=Peach!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=Peach!75!black,,fill=Peach!75!black] at (frame.north east) {\large Notation};},#1}


\newtcolorbox{usage}[2][]{mainboxstyle,colback=green!5!white,colframe=green!75!black,colbacktitle=green!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=green!75!black,,fill=green!75!black] at (frame.north east) {\large \translate{Usage }{Nutzung }};},#1}


% Task
\newtcolorbox{task}[2][]{mainboxstyle,colback=gray!5!white,colframe=gray!75!black,colbacktitle=gray!75!black,title={\large #2},overlay={\node[overlaystyle,draw=gray!75!black,fill=gray!75!black] at (frame.north east) {\large \translate{Task}{Aufgabe}};},#1}


% Proof
\newtcolorbox{proof}[2][]{mainboxstyle,colback=magenta!5!white,colframe=magenta!75!black,colbacktitle=magenta!75!black,title={\large #2},overlay={\node[overlaystyle,draw=magenta!75!black,fill=magenta!75!black] at (frame.north east) {\large \translate{Proof}{Beweis}};},#1}


% General
\newtcolorbox{general}[4][]{mainboxstyle,colback=#4!5!white,colframe=#4!75!black,colbacktitle=#4!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=#4!75!black,,fill=#4!75!black] at (frame.north east) {\large #3};},#1}

% Simple
\newtcolorbox{simplebox}[2][]{colback=#2!5!white,colframe=#2!75!black,#1}

%                              ▄▄        
% ▀████▄     ▄███▀         ██  ███        
%   ████    ████           ██   ██        
%   █ ██   ▄█ ██  ▄█▀██▄ ██████ ███████▄  
%   █  ██  █▀ ██ ██   ██   ██   ██    ██  
%   █  ██▄█▀  ██  ▄█████   ██   ██    ██  
%   █  ▀██▀   ██ ██   ██   ██   ██    ██  
% ▄███▄ ▀▀  ▄████▄████▀██▄ ▀███████  ████▄


% BB shortcuts (for number spaces, etc)
\newcommand{\A}{\mathbb{A}}
\newcommand{\B}{\mathbb{B}}
\newcommand{\C}{\mathbb{C}}
\newcommand{\D}{\mathbb{D}}
\newcommand{\E}{\mathbb{E}}
\newcommand{\F}{\mathbb{F}}
\newcommand{\G}{\mathbb{G}}
\renewcommand{\H}{\mathbb{H}}
\newcommand{\I}{\mathbb{I}}
\newcommand{\J}{\mathbb{J}}
\newcommand{\K}{\mathbb{K}}
\renewcommand{\L}{\mathbb{L}}
\newcommand{\M}{\mathbb{M}}
\newcommand{\N}{\mathbb{N}}
\renewcommand{\O}{\mathbb{O}}
\renewcommand{\P}{\mathbb{P}}
\newcommand{\Q}{\mathbb{Q}}
\newcommand{\R}{\mathbb{R}}
\renewcommand{\S}{\mathbb{S}}
\newcommand{\T}{\mathbb{T}}
\newcommand{\U}{\mathbb{U}}
\newcommand{\V}{\mathbb{V}}
\newcommand{\W}{\mathbb{W}}
\newcommand{\X}{\mathbb{X}}
\newcommand{\Y}{\mathbb{Y}}
\newcommand{\Z}{\mathbb{Z}}

% Caligraphic
\newcommand{\cA}{\mathcal{A}}
\newcommand{\cB}{\mathcal{B}}
\newcommand{\cC}{\mathcal{C}}
\newcommand{\cD}{\mathcal{D}}
\newcommand{\cE}{\mathcal{E}}
\newcommand{\cF}{\mathcal{F}}
\newcommand{\cG}{\mathcal{G}}
\newcommand{\cH}{\mathcal{H}}
\newcommand{\cI}{\mathcal{I}}
\newcommand{\cJ}{\mathcal{J}}
\newcommand{\cK}{\mathcal{K}}
\newcommand{\cL}{\mathcal{L}}
\newcommand{\cM}{\mathcal{M}}
\newcommand{\cN}{\mathcal{N}}
\newcommand{\cO}{\mathcal{O}}
\newcommand{\cP}{\mathcal{P}}
\newcommand{\cQ}{\mathcal{Q}}
\newcommand{\cR}{\mathcal{R}}
\newcommand{\cS}{\mathcal{S}}
\newcommand{\cT}{\mathcal{T}}
\newcommand{\cU}{\mathcal{U}}
\newcommand{\cV}{\mathcal{V}}
\newcommand{\cW}{\mathcal{W}}
\newcommand{\cX}{\mathcal{X}}
\newcommand{\cY}{\mathcal{Y}}
\newcommand{\cZ}{\mathcal{Z}}

% other useful shortcuts
\newcommand{\elementstack}[2]{\genfrac{}{}{0pt}{}{#1}{#2}}
\newcommand{\8}{\infty}
\newcommand{\cond}{\text{cond}}
\newcommand{\argmin}[1]{\underset{#1}{\text{argmin}}}
\newcommand{\dx}{\text{ d}}
\newcommand{\floor}[1]{\left\lfloor #1 \right\rfloor}
\newcommand{\ceil}[1]{\left\lceil #1 \right\rceil}
\newcommand{\hastoeq}{\overset{!}{=}}
\newcommand{\Leftrightarrowequiv}{\overset{\cdot}{\Leftrightarrow}}
\newcommand{\Longleftrightarrowequiv}{\overset{\cdot}{\Longleftrightarrow}}
\newcommand{\Rightarrowequiv}{\overset{\cdot}{\Rightarrow}}
\newcommand{\Leftarrowequiv}{\overset{\cdot}{\Leftarrow}}
\newcommand{\defAs}{\overset{\text{def}}{=}}
\newcommand{\der}[1]{\frac{\mbox{d}}{\mbox{d}#1}}
\newcommand{\dern}[2]{\frac{\mbox{d}^{#2}}{\mbox{d}^{#2}#1}}
\newcommand{\parder}[1]{\frac{\partial}{\partial #1}}
\newcommand{\pardern}[2]{\frac{\partial^{#2}}{\partial^{#2} #1}}
\newcommand{\defEquiv}{\overset{\text{def}}{\Leftrightarrow}}
\newcommand{\defImplies}{\overset{\text{def}}{\Rightarrow}}
\newcommand{\divides}{\hspace{0.25em}|\hspace{0.25em}}
\newcommand{\mbeq}{\overset{!}{=}}
\newcommand{\lcm}{\text{lcm}}
\newcommand{\limit}[2]{\underset{#1 \rightarrow #2}{\lim}}
\newcommand{\seq}[1]{(#1_n)_{n \geq 1}}
\newcommand{\ser}[2]{\sum_{k = 1}^{#2} #1_k}
\newcommand{\limni}{\limit{n}{\infty}}
\newcommand{\limnz}{\limit{n}{0}}
\newcommand{\limxz}{\limit{x_0}{0}}
\newcommand{\limhz}{\limit{h}{0}}
\newcommand{\liminfni}{\liminf_{n \rightarrow \infty}}
\newcommand{\limsupni}{\limsup_{n \rightarrow \infty}}
\DeclareMathOperator\arctanh{arctanh}
\DeclareMathOperator\arccosh{arccosh}
\DeclareMathOperator\arcsinh{arcsinh}


% ░▒█▀▀▄░▄▀▀▄░█▀▄▀█░▄▀▀▄░█░▒█░▀█▀░█▀▀░█▀▀▄░░░▒█▀▀▀█░█▀▄░░▀░░█▀▀░█▀▀▄░█▀▄░█▀▀
% ░▒█░░░░█░░█░█░▀░█░█▄▄█░█░▒█░░█░░█▀▀░█▄▄▀░░░░▀▀▀▄▄░█░░░░█▀░█▀▀░█░▒█░█░░░█▀▀
% ░▒█▄▄▀░░▀▀░░▀░░▒▀░█░░░░░▀▀▀░░▀░░▀▀▀░▀░▀▀░░░▒█▄▄▄█░▀▀▀░▀▀▀░▀▀▀░▀░░▀░▀▀▀░▀▀▀

% Extra imports
\usepackage{stmaryrd}
\usepackage{algorithm}
\usepackage{algpseudocodex}
\usepackage{setspace}
\usepackage{verbatim}
\usepackage{turnstile}
\usepackage{forloop}

\newcommand{\Indent}{\hspace{\algorithmicindent}}

\newcommand{\timecomplexity}{\fhlc{orange}{\ifnum\value{lang}<2{Time complexity}\else {Laufzeit}\fi} \hspace{0.5em}}
\newcommand{\tc}[1]{\timecomplexity $\Theta\left(#1\right)$}
\newcommand{\tct}[1]{\Theta\left(#1\right)}
\newcommand{\tco}[1]{\mathcal{O}\left(#1\right)}
\newcommand{\tcl}[1]{\Omega\left(#1\right)}
\newcommand{\wordbool}{(\Sigma_{\text{bool}})^*}
\newcommand{\words}[1]{(\Sigma_{\text{#1}})^*}
\newcommand{\word}{\Sigma^*}
\newcommand{\wordm}[1]{\Sigma_{\text{#1}}^*}
\newcommand{\alphabets}[1]{\Sigma_{\text{#1}}}
\newcommand{\alphabetbool}{\Sigma_{\text{bool}}}
\newcommand{\tR}{\text{R}}
\newcommand{\tC}{\text{C}}
\newcommand{\tN}{\text{N}}
\newcommand{\bigvdash}[2]{\sststile{#1}{#2}}
\newcommand{\class}{\text{\tr{Cl}{Kl}}}

%                         ▄▄                    
% ▀████▀                ▀███                    
%   ██                    ██                    
%   ██ ▀████████▄    ▄█▀▀███   ▄▄█▀██▀██▀   ▀██▀
%   ██   ██    ██  ▄██    ██  ▄█▀   ██ ▀██ ▄█▀  
%   ██   ██    ██  ███    ██  ██▀▀▀▀▀▀   ███    
%   ██   ██    ██  ▀██    ██  ██▄    ▄ ▄█▀ ██▄  
% ▄████▄████  ████▄ ▀████▀███▄ ▀█████▀██▄   ▄██▄


% For using index package
\newcommand{\prepareIndex}{
	\usepackage[T1]{fontenc}
	\usepackage{imakeidx}
	\makeindex
}

\newcommand{\addIndexBold}[1]{\textbf{\index{\MakeLowercase{#1}} #1}}
\newcommand{\addIndexItalic}[1]{\textit{\index{\MakeLowercase{#1}} #1}}
\newcommand{\addIndex}[1]{\index{\MakeLowercase{#1}} #1}



%  ▄▄·       ▄• ▄▌ ▐ ▄ ▄▄▄▄▄▄▄▄ .▄▄▄  
% ▐█ ▌▪ ▄█▀▄ █▪██▌•█▌▐█•██  ▀▄.▀·▀▄ █·
% ██ ▄▄▐█▌.▐▌█▌▐█▌▐█▐▐▌ ▐█.▪▐▀▀▪▄▐▀▀▄ 
% ▐███▌▐█▌.▐▌▐█▄█▌██▐█▌ ▐█▌·▐█▄▄▌▐█•█▌
% ·▀▀▀  ▀█▄▀▪ ▀▀▀ ▀▀ █▪ ▀▀▀  ▀▀▀ .▀  ▀

\usepackage{xstring}
\usepackage{etoolbox}
% tcolorbox and other stylistic elements (i.e. inline versions of them) that have counters
\newcounter{lemma}[section]
\newcounter{definition}[section]
\newcounter{corollary}[section]
\newcounter{theorem}[section]
\newcounter{axiom}[section]
\newcounter{example}[section]
\newcounter{fact}[section]
\newcounter{proposition}[section]
\newcounter{formula}[section]
\newcounter{remark}[section]
\newcounter{all}[section]

\newcounter{lemmass}[subsection]
\newcounter{definitionss}[subsection]
\newcounter{corollaryss}[subsection]
\newcounter{theoremss}[subsection]
\newcounter{axiomss}[subsection]
\newcounter{exampless}[subsection]
\newcounter{factss}[subsection]
\newcounter{propositionss}[subsection]
\newcounter{formulass}[subsection]
\newcounter{remarkss}[subsection]
\newcounter{allss}[subsection]

\newcounter{lemmasss}[subsubsection]
\newcounter{definitionsss}[subsubsection]
\newcounter{corollarysss}[subsubsection]
\newcounter{theoremsss}[subsubsection]
\newcounter{axiomsss}[subsubsection]
\newcounter{examplesss}[subsubsection]
\newcounter{factsss}[subsubsection]
\newcounter{propositionsss}[subsubsection]
\newcounter{formulasss}[subsubsection]
\newcounter{remarksss}[subsubsection]
\newcounter{allsss}[subsubsection]

% Set the current number of a label
\newcommand{\setLabelNumber}[2]{%
	\setcounter{#1}{#2}%
	\addtocounter{#1}{-1}%
	\setcounter{#1ss}{#2}%
	\addtocounter{#1ss}{-1}%
	\setcounter{#1sss}{#2}%
	\addtocounter{#1sss}{-1}%
}

\newcommand{\stepLabelNumber}[1]{%
	\stepcounter{#1}%
	\stepcounter{#1ss}%
	\stepcounter{#1sss}%
}

\newcommand{\printcounter}[1]{%
	\csname the#1\endcsname
}

\newcommand{\suffix}{ss}
\newcommand{\sectionNumbering}{\thesection}

% ┌                                                ┐
% │               Counter numbering                │
% └                                                ┘
\newcommand{\preTableAndFigHook}[1]{%
	\ifnum\value{numberingConfig}>1
		\ifnum\value{numberSubsections}=1
			\stepcounter{allss}
		\else
			\ifnum\value{numberSubsections}=2
				\stepcounter{allsss}
			\else
				\stepcounter{all}
			\fi
		\fi
	\fi
}
\AtBeginEnvironment{table}{\preTableAndFigHook{table}}
\AtBeginEnvironment{figure}{\preTableAndFigHook{figure}}

\newcommand{\applyTableAndFigureNumbering}{
	% Tables & Figures
	\ifnum\value{numberingConfig}=0
		\renewcommand{\thetable}{}
		\renewcommand{\thefigure}{}
	\else
		\ifnum\value{numberingConfig}=1
			\renewcommand{\thetable}{\sectionNumbering.\arabic{table}}
			\renewcommand{\thefigure}{\sectionNumbering.\arabic{figure}}
		\else
			\ifnum\value{numberSubsections}=1
				\renewcommand{\thetable}{\sectionNumbering.\arabic{allss}}
				\renewcommand{\thefigure}{\sectionNumbering.\arabic{allss}}
			\else
				\ifnum\value{numberSubsections}=2
					\renewcommand{\thetable}{\refstepcounter{allsss}\sectionNumbering.\arabic{allsss}}
					\renewcommand{\thefigure}{\sectionNumbering.\arabic{allsss}}
				\else
					\renewcommand{\thetable}{\sectionNumbering.\arabic{all}}
					\renewcommand{\thefigure}{\sectionNumbering.\arabic{all}}
				\fi
			\fi
		\fi
	\fi
}

\newcommand{\setSubsectionNumbering}[1]{
	\setcounter{numberSubsections}{#1}
	\applySubsectionNumbering
}

\newcommand{\applySubsectionNumbering}{
	\ifnum\value{numberSubsections}=1
		\renewcommand{\sectionNumbering}{\thesubsection}
		\renewcommand{\suffix}{ss}
		\typeout{Numbering as section.subsection.number}
	\else
		\ifnum\value{numberSubsections}=2
			\renewcommand{\sectionNumbering}{\thesubsubsection}
			\renewcommand{\suffix}{sss}
			\typeout{Numbering as section.subsection.subsubsection.number}
		\else
			\renewcommand{\sectionNumbering}{\thesection}
			\renewcommand{\suffix}{}
			\typeout{Numbering as section.number}
		\fi
	\fi
	\applyTableAndFigureNumbering

	\renewcommand{\thelemma}{\sectionNumbering.\arabic{lemma}}
	\renewcommand{\thedefinition}{\sectionNumbering.\arabic{definition}}
	\renewcommand{\thecorollary}{\sectionNumbering.\arabic{corollary}}
	\renewcommand{\thetheorem}{\sectionNumbering.\arabic{theorem}}
	\renewcommand{\theaxiom}{\sectionNumbering.\arabic{axiom}}
	\renewcommand{\theexample}{\sectionNumbering.\arabic{example}}
	\renewcommand{\thefact}{\sectionNumbering.\arabic{fact}}
	\renewcommand{\theproposition}{\sectionNumbering.\arabic{proposition}}
	\renewcommand{\theformula}{\sectionNumbering.\arabic{formula}}
	\renewcommand{\theremark}{\sectionNumbering.\arabic{remark}}
	\renewcommand{\theall}{\sectionNumbering.\arabic{all}}

	\renewcommand{\thelemmass}{\sectionNumbering.\arabic{lemmass}}
	\renewcommand{\thedefinitionss}{\sectionNumbering.\arabic{definitionss}}
	\renewcommand{\thecorollaryss}{\sectionNumbering.\arabic{corollaryss}}
	\renewcommand{\thetheoremss}{\sectionNumbering.\arabic{theoremss}}
	\renewcommand{\theaxiomss}{\sectionNumbering.\arabic{axiomss}}
	\renewcommand{\theexampless}{\sectionNumbering.\arabic{exampless}}
	\renewcommand{\thefactss}{\sectionNumbering.\arabic{factss}}
	\renewcommand{\thepropositionss}{\sectionNumbering.\arabic{propositionss}}
	\renewcommand{\theformulass}{\sectionNumbering.\arabic{formulass}}
	\renewcommand{\theremarkss}{\sectionNumbering.\arabic{remarkss}}
	\renewcommand{\theallss}{\sectionNumbering.\arabic{allss}}

	\renewcommand{\thelemmasss}{\sectionNumbering.\arabic{lemmasss}}
	\renewcommand{\thedefinitionsss}{\sectionNumbering.\arabic{definitionsss}}
	\renewcommand{\thecorollarysss}{\sectionNumbering.\arabic{corollarysss}}
	\renewcommand{\thetheoremsss}{\sectionNumbering.\arabic{theoremsss}}
	\renewcommand{\theaxiomsss}{\sectionNumbering.\arabic{axiomsss}}
	\renewcommand{\theexamplesss}{\sectionNumbering.\arabic{examplesss}}
	\renewcommand{\thefactsss}{\sectionNumbering.\arabic{factsss}}
	\renewcommand{\thepropositionsss}{\sectionNumbering.\arabic{propositionsss}}
	\renewcommand{\theformulasss}{\sectionNumbering.\arabic{formulasss}}
	\renewcommand{\theremarksss}{\sectionNumbering.\arabic{remarksss}}
	\renewcommand{\theallsss}{\sectionNumbering.\arabic{allsss}}
}
\applySubsectionNumbering

% ── Label generation ────────────────────────────────────────────────
\newcommand{\labelSectionGeneration}{%
	\ifnum\value{numberSubsections}=1
		\arabic{section}-\arabic{subsection}%
	\else
		\ifnum\value{numberSubsections}=2
			\arabic{section}-\arabic{subsection}-\arabic{subsubsection}%
		\else
			\arabic{section}%
		\fi
	\fi}

\newcommand{\labelIt}[1]{\refstepcounter{#1\suffix}\edef\tempLabel{\genLabel{#1}{\arabic{#1\suffix}}}\label{\tempLabel}}
\newcommand{\genLabel}[2]{#1:\labelSectionGeneration-#2}

% ┌                                                ┐
% │       Number the counters appropriately        │
% └                                                ┘
\newcommand{\usenumberArabic}[1]{%
	\ifnum\value{numberingConfig}=1
		\labelIt{#1}
		\printcounter{#1\suffix}%
	\else
		\ifnum\value{numberingConfig}=2
			\ifthenelse{\equal{#1}{definitions}}{%
				\labelIt{definition}
				\printcounter{definition\suffix}%
			}{%
				\labelIt{all}
				\printcounter{all\suffix}%
			}%
		\else
			\ifnum\value{numberingConfig}=3
				\labelIt{all}
				\printcounter{all\suffix}%
			\else
				\relax%
			\fi
		\fi
	\fi}


% ────────────────────────────────────────────────────────────────────
% ┌                                                ┐
% │          Enable or disable numbering           │
% └                                                ┘
% Initialize with config file
\newcounter{numberingConfigStore}
\setcounter{numberingConfigStore}{\value{numberingConfig}}

% For later change
\newcommand{\setNumberingStyle}[1]{
	\typeout{Setting NumberingStyle to #1}
	\setcounter{numberingConfig}{#1}
	\ifthenelse{\equal{#1}{0}}{}{
		\setcounter{numberingConfigStore}{#1}
	}
	\applyTableAndFigureNumbering
}

% Enable / disable numbering
\newcommand{\numberingOff}{
	\setcounter{numberingConfig}{0}
	\applyTableAndFigureNumbering
}
\newcommand{\numberingOn}{
	\setcounter{numberingConfig}{\value{numberingConfigStore}}
	\applyTableAndFigureNumbering
}

% ────────────────────────────────────────────────────────────────────
%          ╭────────────────────────────────────────────────╮
%          │  Reset definition, lemma, etc counters, add a  │
%          │                    new page                    │
%          ╰────────────────────────────────────────────────╯
\newcommand{\newsection}{
	\newpage
	\newsectionNoPB
}

% ── Reset definitions, lemma, etc counters, do not add new page ─────
\newcommand{\newsectionNoPB}{
	\setcounter{lemma}{0}
	\setcounter{definition}{0}
	\setcounter{corollary}{0}
	\setcounter{theorem}{0}
	\setcounter{axiom}{0}
	\setcounter{example}{0}
	\setcounter{fact}{0}
	\setcounter{proposition}{0}
	\setcounter{formula}{0}
	\setcounter{remark}{0}
	\setcounter{all}{0}

	\setcounter{lemmass}{0}
	\setcounter{definitionss}{0}
	\setcounter{corollaryss}{0}
	\setcounter{theoremss}{0}
	\setcounter{axiomss}{0}
	\setcounter{exampless}{0}
	\setcounter{factss}{0}
	\setcounter{propositionss}{0}
	\setcounter{formulass}{0}
	\setcounter{remarkss}{0}
	\setcounter{allss}{0}

	\setcounter{lemmasss}{0}
	\setcounter{definitionsss}{0}
	\setcounter{corollarysss}{0}
	\setcounter{theoremsss}{0}
	\setcounter{axiomsss}{0}
	\setcounter{examplesss}{0}
	\setcounter{factsss}{0}
	\setcounter{propositionsss}{0}
	\setcounter{formulasss}{0}
	\setcounter{remarksss}{0}
	\setcounter{allsss}{0}

	% Tables & Figures
	\setcounter{table}{0}
	\setcounter{figure}{0}
}
\newsectionNoPB % Initializes


% ────────────────────────────────────────────────────────────────────
%          ╭────────────────────────────────────────────────╮
%          │                  Tcolorboxes                   │
%          ╰────────────────────────────────────────────────╯
% ────────────────────────────────────────────────────────────────────

% Definitions
\newtcolorbox{definition}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2},overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large Definition\usenumberArabic{definition}};},#1}

% Theorems
\newtcolorbox{theorem}[2][]{mainboxstyle,colback=ForestGreen!5!white,colframe=ForestGreen!75!black,colbacktitle=ForestGreen!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=ForestGreen!75!black,fill=ForestGreen!75!black] at (frame.north east) {\large \translate{Theorem}{\theoremde}\usenumberArabic{theorem}};},#1}

% Lemmas
\newtcolorbox{lemma}[2][]{mainboxstyle,colback=Aquamarine!5!white,colframe=Aquamarine!75!black,colbacktitle=Aquamarine!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=Aquamarine!75!black,fill=Aquamarine!75!black] at (frame.north east) {\large Lemma\usenumberArabic{lemma}};},#1}

% Corollaries
\newtcolorbox{corollary}[2][]{mainboxstyle,colback=teal!5!white,colframe=teal!75!black,colbacktitle=teal!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=teal!75!black,fill=teal!75!black] at (frame.north east) {\large \translate{Corollary}{Korollar}\usenumberArabic{corollary}};},#1}

% Axioms
\newtcolorbox{axiom}[2][]{mainboxstyle,colback=JungleGreen!5!white,colframe=JungleGreen!75!black,colbacktitle=JungleGreen!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=JungleGreen!75!black,fill=JungleGreen!75!black] at (frame.north east) {\large Axiom\usenumberArabic{axiom}};},#1}

% Facts
\newtcolorbox{fact}[2][]{mainboxstyle,colback=SeaGreen!5!white,colframe=SeaGreen!75!black,colbacktitle=SeaGreen!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=SeaGreen!75!black,fill=SeaGreen!75!black] at (frame.north east) {\large \translate{Fact}{Fakt}\usenumberArabic{fact}};},#1}

% Propositions
\newtcolorbox{proposition}[2][]{mainboxstyle,colback=Cyan!5!white,colframe=Cyan!75!black,colbacktitle=Cyan!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=Cyan!75!black,fill=Cyan!75!black] at (frame.north east) {\large Proposition\usenumberArabic{proposition}};},#1}

% Examples
\newtcolorbox{example}[2][]{mainboxstyle,colback=gray!5!white,colframe=gray!75!black,colbacktitle=gray!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=gray!75!black,fill=gray!75!black] at (frame.north east) {\large \translate{Example}{Beispiel}\usenumberArabic{example}};},#1}

% Formula
\newtcolorbox{formula}[2][]{mainboxstyle,colback=red!5!white,colframe=red!75!black,colbacktitle=red!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=red!75!black,fill=red!75!black] at (frame.north east) {\large \translate{Formula}{Formel}\usenumberArabic{formula}};},#1}

% Remark
\newtcolorbox{remark}[2][]{mainboxstyle,colback=green!5!white,colframe=green!75!black,colbacktitle=green!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=green!75!black,fill=green!75!black] at (frame.north east) {\large \translate{Remark}{Bemerkung} \usenumberArabic{remark}};},#1}


% ────────────────────────────────────────────────────────────────────
%          ╭────────────────────────────────────────────────╮
%          │              Inline environments               │
%          ╰────────────────────────────────────────────────╯
% ────────────────────────────────────────────────────────────────────


% Inline environments (inline)
\newcommand{\inlineex}{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:}}
\newcommand{\inlinedef}{\bg{blue}{Definition\usenumberArabic{definition}:}}
\newcommand{\inlineformula}{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:}}
\newcommand{\inlinelemma}{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:}}
\newcommand{\inlinetheorem}{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:}}
\newcommand{\inlineaxiom}{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:}}
\newcommand{\inlinecorollary}{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:}}
\newcommand{\inlinefact}{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:}}
\newcommand{\inlineproposition}{\bg{Cyan}{Proposition\usenumberArabic{proposition}:}}
\newcommand{\inlineremark}{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:}}
\newcommand{\inlineproof}{\bg{magenta}{\translate{Proof}{Beweis}:}}

% Enhanced inline environments
\newcommand{\fancyex}[1]{\bg{gray}{\translate{Example}{Beispiel}\usenumberArabic{example}:} \textit{(#1)}}
\newcommand{\fancydef}[1]{\bg{blue}{Definition\usenumberArabic{definition}:} \textit{(#1)}}
\newcommand{\fancyformula}[1]{\bg{red}{\translate{Formula}{Formel}\usenumberArabic{formula}:} \textit{(#1)}}
\newcommand{\fancylemma}[1]{\bg{Aquamarine}{Lemma\usenumberArabic{lemma}:} \textit{(#1)}}
\newcommand{\fancytheorem}[1]{\bg{ForestGreen}{\translate{Theorem}{\theoremde}\usenumberArabic{theorem}:} \textit{(#1)}}
\newcommand{\fancyaxiom}[1]{\bg{JungleGreen}{Axiom\usenumberArabic{axiom}:} \textit{(#1)}}
\newcommand{\fancycorollary}[1]{\bg{teal}{\translate{Corollary}{Korollar}\usenumberArabic{corollary}:} \textit{(#1)}}
\newcommand{\fancyfact}[1]{\bg{SeaGreen}{\translate{Fact}{Fakt}\usenumberArabic{fact}:} \textit{(#1)}}
\newcommand{\fancyproposition}[1]{\bg{Cyan}{Proposition\usenumberArabic{proposition}:} \textit{(#1)}}
\newcommand{\fancyremark}[1]{\bg{green}{\translate{Remark}{Bemerkung}\usenumberArabic{remark}:} \textit{(#1)}}
\newcommand{\fancyproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}}

% short environments (abbreviated)
\newcommand{\shortex}{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:}}
\newcommand{\shortdef}{\bg{blue}{D\usenumberArabic{definition}:}}
\newcommand{\short}{\bg{red}{F\usenumberArabic{formula}:}}
\newcommand{\shortlemma}{\bg{Aquamarine}{L\usenumberArabic{lemma}:}}
\newcommand{\shorttheorem}{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:}}
\newcommand{\shortaxiom}{\bg{JungleGreen}{A\usenumberArabic{axiom}:}}
\newcommand{\shortcorollary}{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:}}
\newcommand{\shortfact}{\bg{SeaGreen}{F\usenumberArabic{fact}:}}
\newcommand{\shortproposition}{\bg{Cyan}{P\usenumberArabic{proposition}:}}
\newcommand{\shortremark}{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:}}
\newcommand{\shortproof}{\bg{magenta}{\translate{Proof}{Beweis}:}}

% Enhanced short environments (abbreviated)
\newcommand{\compactex}[1]{\bg{gray}{\translate{Ex}{Bsp}\usenumberArabic{example}:} \textit{(#1)}}
\newcommand{\compactdef}[1]{\bg{blue}{D\usenumberArabic{definition}:} \textit{(#1)}}
\newcommand{\compactformula}[1]{\bg{red}{F\usenumberArabic{formula}:} \textit{(#1)}}
\newcommand{\compactlemma}[1]{\bg{Aquamarine}{L\usenumberArabic{lemma}:} \textit{(#1)}}
\newcommand{\compacttheorem}[1]{\bg{ForestGreen}{\translate{T}{\StrMid{\theoremde}{1}{1}}\usenumberArabic{theorem}:} \textit{(#1)}}
\newcommand{\compactaxiom}[1]{\bg{JungleGreen}{A\usenumberArabic{axiom}:} \textit{(#1)}}
\newcommand{\compactcorollary}[1]{\bg{teal}{\translate{C}{K}\usenumberArabic{corollary}:} \textit{(#1)}}
\newcommand{\compactfact}[1]{\bg{SeaGreen}{F\usenumberArabic{fact}:} \textit{(#1)}}
\newcommand{\compactproposition}[1]{\bg{Cyan}{P\usenumberArabic{proposition}:} \textit{(#1)}}
\newcommand{\compactremark}[1]{\bg{green}{\tr{R}{B}\usenumberArabic{remark}:} \textit{(#1)}}
\newcommand{\compactproof}[1]{\bg{magenta}{\translate{Proof}{Beweis}: \textit{(#1)}}}

%                                                                                                     ▄▄                                    
%   ▄▄█▀▀▀█▄█                                                ██                       ▄█▀▀▀█▄█        ██                                    
% ▄██▀     ▀█                                                ██                      ▄██    ▀█                                              
% ██▀       ▀ ▄██▀██▄▀████████▄█████▄ ▀████████▄▀███  ▀███ ██████  ▄▄█▀██▀███▄███    ▀███▄    ▄██▀██▀███   ▄▄█▀██▀████████▄  ▄██▀██  ▄▄█▀██ 
% ██         ██▀   ▀██ ██    ██    ██   ██   ▀██  ██    ██   ██   ▄█▀   ██ ██▀ ▀▀      ▀█████▄█▀  ██  ██  ▄█▀   ██ ██    ██ ██▀  ██ ▄█▀   ██
% ██▄        ██     ██ ██    ██    ██   ██    ██  ██    ██   ██   ██▀▀▀▀▀▀ ██        ▄     ▀███       ██  ██▀▀▀▀▀▀ ██    ██ ██      ██▀▀▀▀▀▀
% ▀██▄     ▄▀██▄   ▄██ ██    ██    ██   ██   ▄██  ██    ██   ██   ██▄    ▄ ██        ██     ███▄    ▄ ██  ██▄    ▄ ██    ██ ██▄    ▄██▄    ▄
%   ▀▀█████▀  ▀█████▀▄████  ████  ████▄ ██████▀   ▀████▀███▄ ▀████ ▀█████▀████▄      █▀█████▀ █████▀▄████▄ ▀█████▀████  ████▄█████▀  ▀█████▀
%                                       ██                                                                                                  
%                                     ▄████▄                                                                                                

\usepackage{forest}
\tikzset{algpxIndentLine/.style={draw=lightgray}}
\algrenewcommand{\alglinenumber}[1]{#1}

\newenvironment{algo}[1]{
	\begin{algorithm}
		\begin{spacing}{1.2}
			\caption{\textsc{#1}}
			\begin{algorithmic}[1]
				}{
			\end{algorithmic}
		\end{spacing}
	\end{algorithm}
}

% • ▌ ▄ ·.  ▄▄▄· ▄▄▄▄▄ ▄ .▄  .▄▄ · ▄▄▄▄▄ ▄· ▄▌▄▄▌  ▄▄▄ .
% ·██ ▐███▪▐█ ▀█ •██  ██▪▐█  ▐█ ▀. •██  ▐█▪██▌██•  ▀▄.▀·
% ▐█ ▌▐▌▐█·▄█▀▀█  ▐█.▪██▀▀█  ▄▀▀▀█▄ ▐█.▪▐█▌▐█▪██ ▪ ▐▀▀▪▄
% ██ ██▌▐█▌▐█▪ ▐▌ ▐█▌·██▌▐▀  ▐█▄▪▐█ ▐█▌· ▐█▀·.▐█▌ ▄▐█▄▄▌
% ▀▀  █▪▀▀▀ ▀  ▀  ▀▀▀ ▀▀▀ ·   ▀▀▀▀  ▀▀▀   ▀ • .▀▀▀  ▀▀▀ 

% Replace some commonly used commands with better ones
\newcommand{\vect}[1]{\overrightarrow{#1}}
\renewcommand{\hat}[1]{\widehat{#1}}
\renewcommand{\tilde}[1]{\widetilde{#1}}
\newcommand{\proven}{$\hspace{17cm}\square$}


% ░█▒░▒▄▀▄░█▄░█░▄▀▒░█▒█▒▄▀▄░▄▀▒▒██▀░░░▄▀▀░▀█▀░▀▄▀░█▒░▒██▀
% ▒█▄▄░█▀█░█▒▀█░▀▄█░▀▄█░█▀█░▀▄█░█▄▄▒░▒▄██░▒█▒░▒█▒▒█▄▄░█▄▄

% Specific styles for language summaries and docs
\newtcolorbox{conjugation}[2][]{mainboxstyle,colback=blue!5!white,colframe=blue!75!black,colbacktitle=blue!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=blue!75!black,fill=blue!75!black] at (frame.north east) {\large \translate{Conjugation}{Konjugation}};},#1}

\newtcolorbox{forms}[2][]{mainboxstyle,colback=red!5!white,colframe=red!75!black,colbacktitle=red!75!black,title={\large #2},
	overlay={\node[overlaystyle,draw=red!75!black,fill=red!75!black] at (frame.north east) {\large \translate{Forms}{Formen}};},#1}

%  _____       _     _              
% (_   _)     ( )   (_ )            
%   | |    _ _| |_   | |   __   ___ 
%   | |  / _  )  _ \ | | / __ \  __)
%   | | ( (_| | |_) )| |(  ___/__  \
%   (_)  \__ _)_ __/(___)\____)____/


\usepackage{booktabs}

% Create new table. #1 Layout, #2 title row
\newenvironment{tables}[2]{
	\begin{center}
		\begin{tabular}{#1}
			\toprule
			#2 \\
			\midrule
			}{
			\bottomrule
		\end{tabular}
	\end{center}
}

% Create new table in table env. #1 layout, #2 title row, #3 caption
\newenvironment{fullTable}[3]{
	\edef\tableCaption{#3}
	\begin{table}[h!]
		\begin{tables}{#1}{#2}
			}{
		\end{tables}
		\caption{\tableCaption}
	\end{table}
}

%  ___     _     _____       _    _ 
% (  _ \ _( )   (_   _)     ( )  ( )
% | (_) )_) |_    | |    __  \ \/ / 
% |  _ (| |  _ \  | |  / __ \ )  (  
% | (_) ) | |_) ) | | (  ___// /\ \ 
% (____/(_)_ __/  (_)  \____)_)  (_)

% Configs if you want to use BibTeX. Not included in any default configs.

\newcommand{\setupBibtex}[1]{
	\usepackage{biblatex}
	\usepackage[nottoc, numbib]{tocbibind}
	\addbibresource{#1}
}

\newcommand{\printbib}{
	\addcontentsline{toc}{section}{\translate{Sources}{Quellen}}
	\printbibliography[title=\translate{Sources}{Quellen}]
}


%░▒█▀▀█░█░░▄▀▀▄░█▀▀░█▀▀░█▀▀▄░█▀▀▄░█░░█
%░▒█░▄▄░█░░█░░█░▀▀▄░▀▀▄░█▄▄█░█▄▄▀░█▄▄█
%░▒█▄▄▀░▀▀░░▀▀░░▀▀▀░▀▀▀░▀░░▀░▀░▀▀░▄▄▄▀

% Add glossaries functionality

\newcommand{\setupGlossary}{
	\usepackage[nonumberlist, toc]{glossaries}
	\usepackage[nottoc, numbib]{tocbibind}
	\makenoidxglossaries
}

\newcommand{\printGlossary}{
	\glsaddall
	\printnoidxglossaries
}

% ┌                                                ┐
% │                     Minted                     │
% └                                                ┘
\usepackage{minted}
\usepackage{fancyvrb}

% Args: Code.
% Alternative: Use \mint{<language>}|code|
\newcommand{\inlinecode}[1]{\shade{gray}{\texttt{#1}}}

% Args: Language, Code
\newenvironment{code}[1]{
	\VerbatimEnvironment
	\begin{minted}[
    autogobble,
    breaklines,
    breakindentnchars=2,
    frame=lines,
    framesep=2mm,
    mathescape,
    baselinestretch=1.1,
    linenos
    ]{#1}}
{\end{minted}}

% Args: Language, file relative to root file
\newcommand{\inputcode}[2]{
	\inputminted[
		autogobble,
		breaklines,
		breakindentnchars=2,
		frame=lines,
		framesep=2mm,
		mathescape,
		baselinestretch=1.1,
		linenos
	]{#1}{#2}
}

% Args: Language, Base directory (with trailing slash), file (no slash at start)
\newcommand{\inputcodewithfilename}[3]{
	\begin{figure}[h!]
		\texttt{File: \detokenize{#3}}
		\rmvspace
		\inputcode{#1}{#2#3}
	\end{figure}
}
