diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /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.sty | 296 |
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 |