% This preamble assumes pdflatex
% derived from:
% https://github.com/gillescastel/lecture-notes/blob/929672a96abc27eaeb6fa58b1d277b3582d28532/group-theory/preamble.tex
% encodings
\usepackage[utf8]{inputenc} % use utf8 encoding
\usepackage[T1]{fontenc} % for 8bit font support
\usepackage{lmodern} % latin modern fonts, should be better than ae, aecompl
% \usepackage{ae,aecompl} % full T1 font support
% \usepackage{textcomp} % support for yen and so on, not needed since latex2e(2020)

% references
\usepackage[%INIT_BABLE_LANGUAGE]{babel} % For English language support, with reformed orthography!
\usepackage{csquotes} % required by biblatex
% \usepackage{biber} % required by biblatex

% \usepackage{biblatex-dw}
\usepackage[backend=biber,
        style=footnote-dw,
        %
        pageref=true,
        annotation=true,
        library=true,
        %
        % style=numeric,
        autocite=superscript,
        % FIXME: Keep this here? <2024-03-20>
        doi=true,
        isbn=true,
        loccittracker=true,
        opcittracker=true
    ]{biblatex} % For bibtex references
\addbibresource{resources/reference.bib}
% \renewcommand{\autocite}[1]{\footcite{#1}\supercite{#1}}
% \bibliography{res/reference} % Set the location of the references

% dates, time
\usepackage[%INIT_DATE_TIME_LANGUAGE, showdow]{datetime2} % make handling dates easier

% index
% \usepackage{index} % Helps to create an index TODO compare with other such packages
% \makeindex

% math
\usepackage{amsmath}  % extensive math commands
\usepackage{amsfonts} % more fonts for math (fracture, boldfaced and so on)
\usepackage{mathtools} % extension to amsmath, with more sensible defaults (eq numbers only when referenced)
\usepackage{amssymb} % more symbols, mostly redundant because already loaded by something else
\usepackage{mathrsfs} % support for the RSFS fonts (through \mathscr command)
\usepackage{cancel} % allows to cancel a part in math mode, for example to shorten a term
\usepackage{bm} % bold mode in math, but better than \boldsymbol command from ams. \bm
\usepackage[locale = %INIT_SIUNITX_LANGUAGE]{siunitx} % For easy unit representation
\sisetup{per-mode = fraction}
\usepackage[version=4]{mhchem} % for \ce command



% graphics and floats
\usepackage{float} % makes dealing with floats easier
\usepackage{graphicx} % allows for easy inclusion of graphics
\usepackage[shortlabels]{enumitem} % makes enumerate, itemize and description better
\usepackage{wrapfig} % Wraps text around figures with the \wrapfigure environment
\usepackage[dvipsnames]{xcolor} % colors and color mixing \color{red!30!green!40!blue}
\usepackage{pgfplots} % plots, 2D and 3D
\pgfplotsset{compat=1.18} % use version 1.13
\usepackage{tikz} % Nice drawn graphics, for library see: https://tex.stackexchange.com/a/42664
% \usetikzlibrary{intersections, angles, quotes, calc, positioning}
% \usetikzlibrary{arrows.meta} %TODO maybe deprecated?
% \usepackage{tikz-cd} % better commutative diagrams
% \usepackage{subcaption} % like caption package, but for subfigures
% \usepackage{booktabs} % better tables


% visuals
\usepackage{fancyhdr}  % Text layout and margins, headers so on
\usepackage{microtype} % makes text better to read
\usepackage{multicol} % allows for multi-columns everywhere, with the "multicols" environment
\usepackage{emptypage} % no page numbers and headings on empty pages
% \usepackage[a4paper, left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry} % For nice margins
% \usepackage{xspace} % Adds a space when it thinks it is necessary
\usepackage{blindtext} % blindtext

% tikz style config
\tikzset{help_lines/.style={step=.5cm,gray!50,very thin}}

% notes
% \usepackage{todonotes}

% links
% \usepackage[hidelinks]{hyperref} % Links in the pdf
\usepackage[nospace]{varioref}
\usepackage[pdflang=%INIT_DATE_TIME_LANGUAGE]{hyperref}
% \hypersetup{
%         colorlinks,
%         linkcolor={black},
%         citecolor={black},
%         urlcolor={blue!80!black}
%     }


% \usepackage{stmaryrd} % for \lightning
% \newcommand\contra{\scalebox{1.1}{$\lightning$}}

% number sets
\newcommand\N{\ensuremath{\mathbb{N}}}
\newcommand\R{\ensuremath{\mathbb{R}}}
\newcommand\Z{\ensuremath{\mathbb{Z}}}
\newcommand\Q{\ensuremath{\mathbb{Q}}}
\newcommand\C{\ensuremath{\mathbb{C}}}
\renewcommand\O{\ensuremath{\emptyset}} % replaces the Ø

% readable limits
\let\svlim\lim{}
\renewcommand\lim{\svlim\limits}

% aliases
\let\implies\Rightarrow{}
\let\impliedby\Leftarrow{}
\let\iff\Leftrightarrow{}

\renewcommand\epsilon{\varepsilon} % I like the textual epsilon more
% \renewcommand\phi{\varphi}

% horizontal rule
\newcommand\hr{
        \par\noindent\rule[0.5ex]{\linewidth}{0.5pt}
    }

% copyright:
\makeatletter
\DeclareRobustCommand\authors[1]{\gdef\@authors{#1}}
\DeclareRobustCommand\years[1]{\gdef\@years{#1}}
\makeatother

% theorems
% packages:
\usepackage[framemethod=TikZ]{mdframed}
\mdfsetup{skipabove=1em,skipbelow=0em, innertopmargin=5pt, innerbottommargin=6pt}
\usepackage{amsthm}  % math commands for theorems
\usepackage{thmtools} % improved theorems
\usepackage{environ} % for hiding of the solution env

% styles:
% \renewcommand\qedsymbol{\ensuremath{\text{\textit{O.}}~\epsilon.~\delta.}}
\renewcommand\qedsymbol{\dots}
\theoremstyle{definition}
\declaretheoremstyle[
        headfont=\bfseries\sffamily\color{NavyBlue!80},
        bodyfont=\normalfont,
        headpunct={:\\},
        qed=\qedsymbol,
        mdframed={
                linewidth=2pt,
                rightline=false, topline=false, bottomline=false,
                linecolor=NavyBlue, backgroundcolor=NavyBlue!5,
            },
    ]{thmexample}
\declaretheoremstyle[
        headfont=\bfseries\sffamily\color{RawSienna!80},
        bodyfont=\normalfont,
        headpunct={:\\},
        qed=\qedsymbol,
        mdframed={
                linewidth=2pt,
                rightline=false, topline=false, bottomline=false,
                linecolor=RawSienna, backgroundcolor=RawSienna!5,
            },
    ]{thmexercise}
\declaretheoremstyle[
        headfont=\bfseries\sffamily\color{Violet!80},
        bodyfont=\normalfont,
        headpunct={:\\},
        notebraces={f\"ur }{},
        qed=\qedsymbol,
        mdframed={
                linewidth=2pt,
                rightline=false, topline=false, bottomline=false,
                linecolor=Violet, backgroundcolor=Violet!5,
            },
    ]{thmsolution}
\declaretheoremstyle[
        headfont=\bfseries\sffamily\color{ForestGreen!80},
        bodyfont=\normalfont,
        headpunct={:\\},
        qed=\qedsymbol,
        mdframed={
                linewidth=2pt,
                rightline=false, topline=false, bottomline=false,
                linecolor=ForestGreen, backgroundcolor=ForestGreen!5,
            },
    ]{thmdef}
\declaretheoremstyle[
        headfont=\bfseries\sffamily\color{RawSienna!70!black},
        bodyfont=\normalfont,
        headpunct={:\\},
        qed=\qedsymbol,
        mdframed={
                linewidth=2pt,
                leftline=false, rightline=true, topline=false, bottomline=false,
                linecolor=RawSienna, backgroundcolor=Red!5,
            }
    ]{thmtheorem}

\declaretheorem[numbered=yes, style=thmdef, name=Definition]{definition}
\declaretheorem[numbered=no, style=thmexample,name=Beispiel]{eg}
\declaretheorem[numbered=no, style=thmexercise, name=Aufgabe]{ex}
\declaretheorem[numbered=yes, style=thmtheorem, name=Satz]{theorem}
% \declaretheorem[style=thmredbox, name=Proposition]{prop}
% \declaretheorem[style=thmredbox, name=Lemma]{lemma}
% \declaretheorem[style=thmredbox, numbered=no, name=Corollary]{corollary}

% Solutions
\makeatletter
\@ifclasswith{report}{nosolutions}
    {%
        \NewEnviron{solution}[1][]{Eine L\"osung mit dem Name ("L\"osung für #1") wurde versteckt.\ \\ \par}
        \newcommand\hdsolution[1]{L\"osung versteckt}
    }{%
        \declaretheorem[numbered=no, style=thmsolution, name=L\"osung]{replacementSolution}

        \NewEnviron{solution}[1][]{
            \vspace{-1em}
            \begin{replacementSolution}[#1]
            \
            \BODY
            \end{replacementSolution}
        }
        \newcommand\hdsolution[1]{#1}
    }
\makeatother

\DTMnewdatestyle{margindate}{
        \renewcommand*\DTMdisplaydate[4]{
                \MakeLowercase{\DTMshortweekdayname{##4}}\space
                \number##3\relax\space
                \MakeLowercase{\DTMshortmonthname{##2}}\space
                \DTMtwodigits{\DTMtwodigits{##1}}
            }
        \renewcommand*\DTMDisplaydate[4]{
                \DTMshortweekdayname{##4}\space
                ##3\space
                \DTMshortmonthname{##2}\space
                \DTMtwodigits{\DTMtwodigits{##1}}
            }
    }

\newcommand*\margindate[1]{
        \DTMsetdatestyle{margindate}
        \marginpar{
                \small\textsf{\mbox{\DTMDate{#1}}}
            }\relax
    }

\def\@lesson{}%
\newcommand{\lesson}[3]{
        \if\relax\detokenize{#3}\relax
            \def\@lesson{Unterricht: #1}%
        \else
            % \def\@lesson{Unterricht #1: #3}%
            \def\@lesson{#1: #3}%
        \fi
        \subsection*{\@lesson}
        \margindate{#2}
    }

% \pagestyle{fancy}
% \fancyhf{}
% \fancyhead[LE, RO]{}
% \fancyhead[RO, LE]{\@lesson}
% \fancyhead[RE, LO]{}
% \fancyfoot[LE, RO]{\thepage}
% \fancyfoot[C]{\leftmark}


% Parameters
% \renewcommand{\sfdefault}{ptm}
% \pagenumbering{arabic}
% \setcounter{page}{2}
% \renewcommand{\thesection}{\Roman{section}}
% \renewcommand{\thesubsection}{\thesection.\Roman{subsection}}
%

%% Footers and Headers
%\pagestyle{fancy}
%\fancyhf{}
%\renewcommand{\headrulewidth}{2pt}
%\renewcommand{\footrulewidth}{1pt}
%\renewcommand{\baselinestretch}{1.5}
%\fancyhead[L]{{\textbf{\titleset}}}
%\fancyhead[R]{\textbf{\course}}
%\fancyfoot[L]{\thepage}
