
\ProvidesClass{booknotes}
\LoadClass[twoside]{report}

\RequirePackage{tex-macros}
\RequirePackage[T1]{fontenc}
\RequirePackage{textcomp}
\RequirePackage{stmaryrd}
\SetSymbolFont{stmry}{bold}{U}{stmry}{m}{n}
\RequirePackage{url}
\RequirePackage{float}
\RequirePackage{booktabs}
\RequirePackage{emptypage}
\RequirePackage{subcaption}
\RequirePackage{multicol}
\RequirePackage{cancel}
\RequirePackage{mathrsfs}
\RequirePackage{minted}
\RequirePackage{listings}
\RequirePackage{systeme}
\RequirePackage{amsfonts, amsmath, mathtools, amssymb, amsthm}
\RequirePackage{enumitem}
\RequirePackage{bm}
\RequirePackage{listings}
\RequirePackage{geometry}
\RequirePackage{graphicx}
\RequirePackage[usenames,dvipsnames]{xcolor}
\RequirePackage{bm}
\RequirePackage{siunitx}[=v2]
\RequirePackage{physics}
\RenewCommandCopy\qty\SI%
\RequirePackage{etoolbox}
\RequirePackage{xifthen}
\RequirePackage{import}
\RequirePackage{pdfpages}
\RequirePackage{fancyhdr}
\RequirePackage{tikz}
\RequirePackage{tikz-cd}
\RequirePackage{pgfplots}
\RequirePackage{hyperref}
\RequirePackage{algpseudocode}
\RequirePackage{algorithm}

\hypersetup{
    colorlinks=true,
    linkcolor=blue,
    filecolor=blue,
    urlcolor=blue,
}


\pgfplotsset{
    compat=newest,
}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{patterns, intersections, angles, quotes, calc, positioning}
\usetikzlibrary{arrows.meta}
\RequirePackage{thmtools}
\RequirePackage[framemethod=TikZ]{mdframed}
\mdfsetup{skipabove=1em, skipbelow=0em, innertopmargin=5pt, innerbottommargin=6pt}

\theoremstyle{definition}
\makeatletter

\@ifclasswith{booknotes}{nocolor}{

    \usemintedstyle{bw}
    \declaretheoremstyle[
        headfont=\bfseries\sffamily, bodyfont=\normalfont,
        mdframed={nobreak}
    ]{thmboxed}

    \declaretheoremstyle[
        headfont=\bfseries\sffamily, bodyfont=\normalfont,
    ]{thmsimple}

    \declaretheoremstyle[
        headfont=\bfseries\sffamily, bodyfont=\normalfont,
        numbered=no,
        mdframed={
            rightline=false, topline=false, bottomline=false,
        },
        qed=\qedsymbol,
    ]{thmproof}


    \declaretheoremstyle[
        headfont=\bfseries\sffamily, bodyfont=\normalfont,
        numbered=no,
        mdframed={
            rightline=false, topline=false, bottomline=false,
        }
    ]{thmline}

    \declaretheorem[style=thmboxed, name=Definition]{definition}
    \declaretheorem[style=thmboxed, name=Lemma]{lemma}
    \declaretheorem[style=thmboxed, name=Theorem]{theorem}
    \declaretheorem[style=thmboxed, name=Proposition]{proposition}
    \declaretheorem[style=thmboxed, numbered=no, name=Corollary]{corollary}
    \declaretheorem[style=thmsimple, numbered=no, name=Example]{eg}

    \AtEndEnvironment{eg}{\null\hfill$\diamond$}

    \declaretheorem[style=thmproof, name=Proof]{thmproof}
    \renewenvironment{proof}[1][\proofname]{\begin{thmproof}}{\end{thmproof}}
    \declaretheorem[style=thmline, numbered=no, name=Proof]{expl}
    \declaretheorem[style=thmline, numbered=no, name=Solution]{answ}

    \declaretheorem[style=thmsimple, numbered=no, name=Remark]{remark}
    \declaretheorem[style=thmsimple, numbered=no, name=Note]{note}


    \newenvironment{code}[1]{\VerbatimEnvironment\begin{minted}[fontfamily=courier, frame=lines,framesep=7pt, linenos, breaklines]{#1}}{\end{minted}}

    \newcommand{\inlinecode}[2]{\mintinline{#1}|#2|}

    \newcommand{\importcode}[2]{\inputminted[fontfamily=courier, frame=lines, framesep=7pt, linenos, breaklines]{#1}{#2}}


    \newcommand{\specialquote}[2]
    {
        \begin{flushright}

            \begin{tikzpicture}
                \draw (0,0) node [right,text width=8.75cm] {
                \begin{mdframed}[
                    linecolor=black, 
                    rightline=false, 
                    topline=false, 
                    bottomline=false,
                    linewidth=2pt
                    ]

                    {``#1''}
                    \vspace{1mm}

                    \hfill-- \small{#2}
                \end{mdframed}
                };
            \end{tikzpicture}
        \end{flushright}
    }

    \newcommand{\specialnoquote}[2]
    {
        \begin{flushright}

            \begin{tikzpicture}
                \draw (0,0) node [right,text width=8.75cm] {
                \begin{mdframed}[
                    linecolor=black, 
                    rightline=false, 
                    topline=false, 
                    bottomline=false,
                    linewidth=2pt
                    ]

                    {#1}
                    \vspace{1mm}

                    \hfill-- \small{#2}
                \end{mdframed}
                };
            \end{tikzpicture}
        \end{flushright}
    }

}{

    \usemintedstyle{monokai}
    \declaretheoremstyle[
        headfont=\bfseries\sffamily\color{ForestGreen!70!black}, bodyfont=\normalfont,
        mdframed={
            linecolor=ForestGreen,
            backgroundcolor=ForestGreen!5,
        }
    ]{thmdef}

    \declaretheoremstyle[
        headfont=\bfseries\sffamily\color{RawSienna!70!black}, bodyfont=\normalfont,
        mdframed={
            linecolor=RawSienna,
            backgroundcolor=RawSienna!5,
        }
    ]{thmthm}

    \declaretheoremstyle[
        headfont=\bfseries\sffamily\color{NavyBlue!70!black}, bodyfont=\normalfont,
        mdframed={
            linewidth=2pt,
            rightline=false, topline=false, bottomline=false,
            linecolor=NavyBlue, backgroundcolor=NavyBlue!5,
        }
    ]{thmexample}

    \declaretheoremstyle[
        headfont=\bfseries\sffamily, bodyfont=\normalfont,
        mdframed={
            linewidth=2pt,
            rightline=false, topline=false, bottomline=false,
            linecolor=Black, backgroundcolor=Black!5,
        }
    ]{thmremark}

    \declaretheoremstyle[
        headfont=\bfseries\sffamily\color{RawSienna!70!black}, bodyfont=\normalfont,
        mdframed={
            linewidth=2pt,
            rightline=false, topline=false, bottomline=false,
            linecolor=RawSienna,
        },
        qed=\qedsymbol%
    ]{thmproof}


    \declaretheoremstyle[
        headfont=\bfseries\sffamily\color{NavyBlue!70!black}, bodyfont=\normalfont,
        mdframed={
            linewidth=2pt,
            rightline=false, topline=false, bottomline=false,
            linecolor=NavyBlue,
        },
        qed=\qedsymbol%
    ]{thmexpl}


    \declaretheorem[style=thmdef, name=Definition]{definition}
    \declaretheorem[style=thmthm, name=Lemma]{lemma}
    \declaretheorem[style=thmthm, name=Theorem]{theorem}
    \declaretheorem[style=thmthm, name=Proposition]{proposition}
    \declaretheorem[style=thmthm, numbered=no, name=Corollary]{corollary}
    \declaretheorem[style=thmexample, numbered=no, name=Example]{eg}


    \declaretheorem[style=thmproof, name=Proof]{thmproof}
    \renewenvironment{proof}[1][\proofname]{\begin{thmproof}}{\end{thmproof}}
    \declaretheorem[style=thmexpl, numbered=no, name=Proof]{thmexpl}
    \newenvironment{expl}[1][]{\vspace{-12pt}\begin{thmexpl}}{\end{thmexpl}}
    \declaretheorem[style=thmexpl, numbered=no, name=Solution]{thmansw}
    \newenvironment{answ}[1][]{\vspace{-12pt}\begin{thmansw}}{\end{thmansw}}


    \declaretheorem[style=thmremark, numbered=no, name=Remark]{remark}
    \declaretheorem[style=thmremark, numbered=no, name=Note]{note}
    \definecolor{MintedBg}{RGB}{38, 38, 38}


    \newenvironment{code}[1]{\color{white}\VerbatimEnvironment\begin{minted}[breaklines, bgcolor=MintedBg]{#1}}{\end{minted}}

    \newcommand{\inlinecode}[2]{\color{white}\mintinline[breaklines, bgcolor=MintedBg]{#1}|#2|}

    \newcommand{\importcode}[2]{\color{white}\inputminted[breaklines, bgcolor=MintedBg]{#1}{#2}}


    \newcommand{\specialquote}[2]
    {
        \begin{flushright}

            \begin{tikzpicture}
                \draw (0,0) node [right,text width=8.75cm] {
                \begin{mdframed}[
                    linecolor=RoyalPurple, 
                    rightline=false, 
                    topline=false, 
                    bottomline=false,
                    backgroundcolor=RoyalPurple!5,
                    linewidth=2pt
                    ]
                    ``#1''
                    \vspace{1mm}

                    \hfill-- \small{#2}
                \end{mdframed}
                };
            \end{tikzpicture}
        \end{flushright}
    }

    \newcommand{\specialnoquote}[2]
    {
        \begin{flushright}

            \begin{tikzpicture}
                \draw (0,0) node [right,text width=8.75cm] {
                \begin{mdframed}[
                    linecolor=RoyalPurple, 
                    rightline=false, 
                    topline=false, 
                    bottomline=false,
                    backgroundcolor=RoyalPurple!5,
                    linewidth=2pt
                    ]

                    {#1}
                    \vspace{1mm}

                    \hfill-- \small{#2}
                \end{mdframed}
                };
            \end{tikzpicture}
        \end{flushright}
    }
}

\newcommand{\exercise}[2][]{%
    \def\@exercise{#2}%
    \subsection*{Exercise #2. #1}
}

\newcommand{\subexercise}[2][]{%
    \subsubsection*{Exercise \@exercise.#2. #1}
}

\newcommand{\sect}[1]{
    \def\@section{#1}
    \section{#1}
}

\newcommand{\subsect}[1]{
    \def\@subsection{#1}
    \subsection{#1}
}

\def\@lecture{}
\newcommand{\lecture}[2]{
    \ifthenelse{\isempty{#2}}{
        \def\@lecture{Lecture #1}%
    }{%
        \def\@lecture{Lecture #1: #2}%
    }%
    \subsection*{\@lecture}
}

\pagestyle{fancy}
\fancyhead[RO,LE]{\@section}
\fancyhead[RE,LO]{\leftmark}

\newcommand{\fullpagebreak}{\pagebreak}

\newcommand{\toc}{\tableofcontents\raggedbottom}

\newcommand{\incfig}[1]{%
    \def\svgwidth{\columnwidth}
    \import{./figures/}{#1.pdf_tex}
}

\makeatother

