summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/handin/handin.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/handin/handin.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/handin/handin.sty')
-rw-r--r--macros/latex/contrib/handin/handin.sty296
1 files changed, 296 insertions, 0 deletions
diff --git a/macros/latex/contrib/handin/handin.sty b/macros/latex/contrib/handin/handin.sty
new file mode 100644
index 0000000000..4e99355cbe
--- /dev/null
+++ b/macros/latex/contrib/handin/handin.sty
@@ -0,0 +1,296 @@
+%% 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