%% handin v0.1.1 - 2018/07/22
%% The LaTeX package handin - version v0.1.1 (2018/07/22) build 52
%% handin.sty
%% -------------------------------------------------------------------------------------------
%% Copyright (c) 2018 by Andreas Storvik Strauman
%% -------------------------------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2008/05/04 or later.
%% This work has the LPPL maintenance status `author-maintained'.
%% This work consists of all files listed in README.txt
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{handin}[2018/07/22 v0.1.1 Creates a setup that is ideal for handing in hard-science school papers that are divided in exercises.]
\newlength{\extramargins}
\setlength{\extramargins}{4em}
\PackageWarningNoLine{handin-v0.1.1}{This package is in the alpha stage, and if something unexpected happens please, oh pretty please, report it to https://github.com/Strauman/Handin-LaTeX-template. Thank you!}
\RequirePackage{pgfopts}
\newif\ifhandin@islight
\pgfkeys{/handin/.is family, /handin/.cd,
light/.is if={handin@islight}
}
\ProcessPgfOptions{/handin}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{lastpage}
\usepackage{scrextend}
\newcommand{\epage@everypage@hook}{}
\newcommand{\epage@thispage@hook}{}
\newcommand*{\AddEverypageHook}[1]{%
  \g@addto@macro\epage@everypage@hook{#1}}
\newcommand*{\AddThispageHook}[1]{%
  \g@addto@macro\epage@thispage@hook{#1}}
\newcommand*{\epage@ep@init}{%
  \let\epage@op@saved\@outputpage
  \def\@outputpage{%
    \epage@op@preamble
    \epage@op@saved
    \epage@op@postamble}}
\newcommand*{\epage@op@preamble}{%
  \let\epage@begindvi\@begindvi
  \def\@begindvi{%
    \epage@everypage@hook
    \epage@thispage@hook
    \gdef\epage@thispage@hook{}
    \epage@begindvi}}
\newcommand*{\epage@op@postamble}{%
  \let\@begindvi\epage@begindvi}
\AtBeginDocument{\epage@ep@init}
\newlength{\partproblemheadermargin}
\newlength{\problemheadermargin}
\newlength{\probleminset}
\setlength{\problemheadermargin}{0em}
\setlength{\probleminset}{3em}
\setlength{\partproblemheadermargin}{2em}
\def\fullproblemmargin{\dimexpr -\extramargins/2+\problemheadermargin\relax}
\def\fullpartproblemmargin{\dimexpr\partproblemheadermargin\relax}
\newcommand{\@atMargin}[2]{\strut\vadjust{\@domark{#1}{#2}}}
\newcommand{\@domark}[2]{%
  \hbox to #2{    \vbox to 0pt{      \kern-\dp\strutbox
      \smash{\llap{#1}}
      \vss
}%
}
}
\gdef\isFirstProblem{1}
\def\AtFirstProblem{\begin{addmargin}{\probleminset}
\preto\@enddocumenthook{\end{addmargin}}
}
\gdef\currentProblem{0}
\gdef\currentPartProblem{0}
\def\exerciseNr{\currentProblem}
\global\let\@ProblemOnThisPage\@isTrue%
\AddEverypageHook{%
\global\let\@ProblemOnThisPage\@isFalse%
}
\gdef\currentProblemIfNewPage{\if\@ProblemOnThisPage\@isFalse%
\global\let\@ProblemOnThisPage\@isTrue%
\currentProblem\fi}%
\gdef\problem{\par\@ifstar{\@problem}{\@problemTOC}}
\gdef\@problemTOC#1{%
  \gdef\currentProblem{#1}%
  \addcontentsline{toc}{section}{\handin@opt@problemheaderTOC}%
  \@problem{#1}%
}
\def\@problem#1{%
\global\let\@ProblemOnThisPage\@isTrue
\def\isTrue{1}%
\if\isFirstProblem\isTrue%
\AtFirstProblem%
\gdef\isFirstProblem{0}%
\fi%
  \gdef\currentProblem{#1}%
  \vbox to 0pt{%
    \hspace*{\fullproblemmargin}{\normalfont\Large\bfseries\handin@opt@problemheader}%
}\vspace*{1.5\baselineskip}%
}
\gdef\pproblem{\par\@ifstar{\@pproblem}{\@pproblemTOC}}
\gdef\@pproblemTOC#1{%
  \gdef\currentPartProblem{#1}
  \addcontentsline{toc}{subsection}{\handin@opt@partproblemheaderTOC}%
  \@pproblem{\currentPartProblem}%
}
\def\@pproblem#1{%
\@atMargin{{\normalfont\Large\bfseries\handin@opt@partproblemheader}}{\fullpartproblemmargin}\ignorespaces%
}
 \ifhandin@islight\else
\usepackage{fancyhdr}
\usepackage{geometry}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{bm}
\usepackage{esint}
\fi
\usepackage{iflang}
\usepackage{etoolbox}
\usepackage{pgfkeys}
\ifhandin@islight\else
\usepackage[
  babel=true, %
  expansion=alltext,
  protrusion=alltext-nott, %
  final %
]{microtype}
\usepackage[%
    rm={oldstyle=false,proportional=true},%
    sf={oldstyle=false,proportional=true},%
    tt={oldstyle=false,proportional=true,variable=true},%
    qt=false%
]{cfr-lm}
\fi
\edef\@isTrue{1}
\edef\@isFalse{0}
\pgfkeys{/handinsetup/.is family, /handinsetup,
default/.style = {problem header={\@tr{Problem}~\currentProblem},
part problem header={\currentProblemIfNewPage\currentPartProblem)},
problem TOC={\handin@opt@problemheader},
part problem TOC={\currentPartProblem},
logo width={0.4},
title style=wholepage,
},
problem header/.store in = \handin@opt@problemheader,
part problem header/.store in = \handin@opt@partproblemheader,
problem TOC/.store in = \handin@opt@problemheaderTOC,
part problem TOC/.store in = \handin@opt@partproblemheaderTOC,
logo width/.estore in = \handin@opt@logowidth,
title style/.style = {titles/#1/.get = \handin@opt@titlestyle},
titles/.cd,
  wholepage/.initial = \handin@title@wholepage,
  small/.initial = \handin@title@small,
switches/.cd,
  On/.initial = \@isTrue,
  on/.initial = \@isTrue,
  T/.initial =  \@isTrue
  Off/.initial = \@isFalse,
  off/.initial = \@isFalse,
  F/.initial = \@isFalse,
}
\newcommand\handinsetup[1]{  \pgfkeys{/handinsetup, #1}%
}
\handinsetup{default}
\def\@tr#1{  \ifcsname tr@#1\endcsname%
    \csname tr@#1\endcsname%
  \else%
    #1%
  \fi%
}
\newcommand{\set@tr}[2]{  \expandafter\def\csname tr@#1\endcsname{#2}
}
\set@tr{Problem}{Problem}
\set@tr{problem}{problem}
\set@tr{containspages}{Contains \pageref{LastPage} pages, front page included}
\set@tr{pagetext}{Page \thepage~of \pageref{LastPage}}
 \IfLanguageName{norsk}{%
\set@tr{Problem}{Oppgave}
\set@tr{problem}{oppgave}
\set@tr{pagetext}{Side \thepage~av \pageref{LastPage}}
\set@tr{containspages}{Inneholder \pageref{LastPage} sider, inkludert forside.}
}{}
\IfLanguageName{german}{%
\set@tr{Problem}{Aufgabe}
\set@tr{problem}{Aufgabe}
\set@tr{containspages}{Enthält \pageref{LastPage} Seiten, inklusive Titelseite}
\set@tr{pagetext}{Seite \thepage~von \pageref{LastPage}}
}{}
 \newif\ifshowoff
\showofffalse
\let\ea = \expandafter
\newcommand{\settable}[2][\@nil]{  \ea\def\csname #2\ea\endcsname##1{    \ea\def\csname @#2\endcsname{##1}
    \ea\def\csname @#2@noerror\endcsname{##1}
    \ea\def\csname isset@#2\endcsname{1}
}
  \ea\def\csname ifset@#2\endcsname##1##2{    \ifcsname isset@#2\endcsname%
    ##1
    \else
    ##2
    \fi
}
  \ea\def\csname default@#2\endcsname{#1}%
  \ea\def\csname @#2@noerror\endcsname{#1}%
  \ea\ifx\csname default@#2\endcsname\@nnil
    \ea\def\csname default@#2\endcsname{      \textbackslash #2%
      {\ea\@latex@warning{\ #2 not given}}
}
  \fi
  \ea\def\csname @#2\endcsname{    \csname default@#2\endcsname
}
}
\ifshowoff
\@latex@warning{Settable: showing off, no settable is actually set!}
\renewcommand{\settable}[2][\@nil]{  \ea\def\csname #2\endcsname##1{\relax}%
  \ea\def\csname @#2\endcsname{}%
  \ea\def\csname @#2@noerror\endcsname{}%
  \ea\def\csname ifset@#2\endcsname##1##2{##2}
  \ea\def\csname default@#2\endcsname{#1}%
  \ea\def\csname @#2@noerror\endcsname{#1}%
  \ea\def\csname @#2\endcsname{\textbackslash #2}
}
\fi
\settable{title}
\let\@tmp@title\title
\gdef\title#1{    \@tmp@title{#1}
    \gdef\thetitle{#1}
}
\settable{author}
\let\@tmp@author\author
\gdef\author#1{    \@tmp@author{#1}
    \gdef\theauthor{#1}
}
\settable{logo}
\settable{coursename}
\settable{coursetitle}
\settable{institute}
\settable[\@tr{containspages}]{containspages}
\settable[\@tr{pagetext}]{pagetext}
 \ifhandin@islight\else
\let\old@maketitle = \maketitle
\gdef\@maketitle{\handin@opt@titlestyle}
\gdef\handin@title@wholepage{%
	\thispagestyle{empty}
	\begin{center}
		\ifshowoff
			\Huge{\textbackslash logo}\\
			\Large{\@title} \\[1.5cm]
		\else
		\ifset@logo{			\includegraphics[width=\handin@opt@logowidth\textwidth]{\@logo}\\[0.5cm]
			\Large{\@title} \\[1.5cm]
}{			\ea\@latex@warning{Use \noexpand\logo{path/to/image} to set a logo on the front page}
			\Huge{\@title} \\[1.0cm]
}
		\fi
	\end{center}
	\begin{center}
		\textbf{\@coursename~--~\@coursetitle}\\[1cm]
		\textbf{\@author} \\[1cm]
		\textbf{\today} \\[3cm]
	\end{center}
	\begin{center}
		\vfill
		\@containspages\\[0.5cm]
		\textsc{\@institute}
	\end{center}
	\clearpage
}
\gdef\handin@title@small{%
	\begin{center}
		\ifshowoff
			\Huge{\textbackslash logo}\\[0.5cm]
		\else
		\ifset@logo{			\includegraphics[width=\handin@opt@logowidth\textwidth]{\@logo} \\[0.5cm]
}{			\ea\@latex@warning{Use \noexpand\logo{path/to/image} to set a logo on the front page}
}
		\fi
		{\huge{\textbf{\@coursename~--~\@coursetitle \\[0.3cm] \@title}}}\\[0.3cm]
		{\large \@author}
	\end{center}
}
\geometry{paper=a4paper, bottom=3cm, top=3cm, footnotesep=3cm}
\pagestyle{fancy}
\g@addto@macro\maketitle{\thispagestyle{fancy}}
\setlength\parindent{0pt}
\addtolength\headwidth{\extramargins}
\fancyheadoffset{\dimexpr\extramargins/2\relax}
    \renewcommand{\headrulewidth}{.3pt} %
    \lhead{\@coursename~--~\thetitle}
    \cfoot{}
    \rhead{\today}
    \renewcommand{\footrulewidth}{.3pt} %
    \lfoot{\theauthor}
    \cfoot{}
    \rfoot{\@pagetext}
 \fi
