summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/uhhassignment
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/uhhassignment
Initial commit
Diffstat (limited to 'macros/latex/contrib/uhhassignment')
-rw-r--r--macros/latex/contrib/uhhassignment/README.md18
-rw-r--r--macros/latex/contrib/uhhassignment/uhhassignment.dtx749
-rw-r--r--macros/latex/contrib/uhhassignment/uhhassignment.ins52
-rw-r--r--macros/latex/contrib/uhhassignment/uhhassignment.pdfbin0 -> 380666 bytes
4 files changed, 819 insertions, 0 deletions
diff --git a/macros/latex/contrib/uhhassignment/README.md b/macros/latex/contrib/uhhassignment/README.md
new file mode 100644
index 0000000000..8c31e070bb
--- /dev/null
+++ b/macros/latex/contrib/uhhassignment/README.md
@@ -0,0 +1,18 @@
+The uhhassignment document class
+================================
+
+This document class was created for typesetting solutions to homework assignments at the university of Hamburg (Universität Hamburg). For a full documentation of the provided features see the uhhassignment.pdf documentation.
+
+
+
+%% Copyright (C) 2017 by Kim Wittenburg
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 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.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
diff --git a/macros/latex/contrib/uhhassignment/uhhassignment.dtx b/macros/latex/contrib/uhhassignment/uhhassignment.dtx
new file mode 100644
index 0000000000..e6b66f40ef
--- /dev/null
+++ b/macros/latex/contrib/uhhassignment/uhhassignment.dtx
@@ -0,0 +1,749 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2017 by Kim Wittenburg
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3 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.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% \fi
+
+
+% \iffalse
+%<driver>\ProvidesFile{uhhassignment.dtx}
+%
+%<class>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+%<class>\ProvidesClass{uhhassignment}[2017/04/22 v1.0 The UHH-Assignment Class]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[english]{babel}
+
+\usepackage{idxlayout}
+\usepackage{hypdoc}
+\usepackage{enumitem}
+
+\usepackage{lmodern}
+
+\CodelineIndex
+\EnableCrossrefs
+\RecordChanges
+\begin{document}
+ \DocInput{uhhassignment.dtx}
+\end{document}
+%</driver>
+% \fi
+
+
+% \CheckSum{409}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+
+
+% \changes{v1.0}{2017/04/12}{Initial version}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ ,\relax}
+% \DoNotIndex{\@ne,\newif,\fi,\gdef,\let,\newcommand,\renewcommand,\ifdefempty,
+% \ifstrempty,\RequirePackage}
+% \DoNotIndex{\LoadClassWithOptions,\ClassWarning,\DeclareOption,
+% \ExecuteOptions,\ProcessOptions}
+% \DoNotIndex{\advance,\begingroup,\catcode,\closein,\begin}
+% \DoNotIndex{\end,\closeout,\day,\def,\edef,\else,\empty,\endgroup}
+% \DoNotIndex{\newcounter,\arabic,\setcounter,\stepcounter}
+% \DoNotIndex{\baselineskip,\headheight,\hfill,\par,\parskip,\setlength,\vspace,
+% \widthof}
+% \DoNotIndex{\bfseries,\Huge,\footnotesize,\LARGE,\Large,\large,\normalfont,
+% \raggedright,\raggedleft,\RedeclareSectionCommands,\scriptsize,
+% \setkomafont,\sffamily,\textbf,\textnormal,\textsc,\ttfamily,
+% \usekomafont}
+% \DoNotIndex{\ifoot,\ihead,\cfoot,\clearpairofpagestyles,\newpagestyle,\color,
+% \colorbox,\marginpar,\ofoot,\ohead,\pagestyle,\thispagestyle}
+% \DoNotIndex{\pagemark,\pageref}
+% \DoNotIndex{\protect,\space}
+
+% \title{The \textsf{uhhassignment} document class}
+% \author{Kim Wittenburg \\ \texttt{5wittenb@informatik.uni-hamburg.de}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% The \textsf{uhhassignment} document class is a document class designed to be
+% used for assignments in university (or school). The class predominantly
+% implements a custom layout for titles but also featues some helpful new
+% commands. The class was originally designed to be used at the university of
+% Hamburg.
+% \end{abstract}
+%
+% \addcontentsline{toc}{section}{Change History}
+% \PrintChanges
+%
+% \tableofcontents
+%
+% \section{Usage}
+%
+% \subsection{Class Options}
+%
+% Currently the \textsf{uhhassignment} class supports three (or rather six)
+% options:
+%
+% \index{unnumberedsheets}
+% By default the \textsf{uhhassignment} class expects the assignment sheets to
+% be numbered and issues a warning if the |\sheetno| is missing. However if you
+% do not want to specify a sheet number you can use the
+% \texttt{unnumberedsheets} class option to suppress the warning. The package
+% option also removes any text indicating the sheet number from the output.
+%
+% \index{numberedsheets}
+% The opposite option \texttt{numberedsheets} is used by default.
+%
+% \index{repeatauthor}
+% You can specify the \texttt{repeatauthor} class option to display a short
+% version of the |\author| on each page in the footer (including the first
+% page). The short version of the author is specified with the |\author| command
+% as an optional first parameter. By default the normal |\author| is used as
+% short author as well. By default the short author will not be displayed at
+% all.
+%
+% \index{shorttitle}\index{longtitle}
+% You can pass \texttt{shorttitle} class option to display the short university
+% name and short course name in the title. You could also explicitly pass
+% \texttt{longtitle} which is the default.
+%
+% \index{shortheader}\index{longheader}
+% Similarly you cann pass \texttt{shortheader} or \texttt{longheader} to display
+% the short or regular university and course name in the header on each
+% subsequent page.
+%
+% \subsection{The Title}
+%
+% The main feature of the \textsf{uhhassignment} class is the custom title
+% layout. The layout implements some new fields like the name of the university
+% (or school), the name of the teacher or the number of the exercise sheet. The
+% full list of supported fields is listed below. The actual title layout may be
+% different depending on which of the following fields are actually specified.
+%
+% \begingroup
+% \setlist[description]{
+% font={\normalfont}
+% }
+%
+% \begin{description}
+% \item[|\textbackslash university|\oarg{short uni}\marg{uni}]
+% \DescribeMacro{\university}
+% Lets you specify the name of the university (or school). The default
+% value is \texttt{Universität Hamburg}.
+% \item[|\textbackslash course|\oarg{short course} \marg{course}]
+% \DescribeMacro{\course}
+% Lets you specify the name of the course of the assignment. The
+% course is sometimes referred to as a \emph{module}.
+% \item[|\textbackslash teacher|\marg{teacher}] \DescribeMacro{\teacher}
+% Lets you specify the name of the teacher or teachers of the course.
+% If you want to specify multiple teachers it is recommended that you
+% separate them with the |\\| command.
+% \item[|\textbackslash group|\marg{group number}] \DescribeMacro{\group}
+% The exercises for many university courses are divided into multiple
+% exercise groups. Using this command you can specify the number of
+% your group.
+% \item[|\textbackslash sheetno|\marg{sheet number}] \DescribeMacro{\sheetno}
+% Lets you specify the current exercise sheet. If no |\title| is
+% provided the sheet number is used as title of the document.
+% \end{description}
+% \endgroup
+%
+% In addition to the above new commands you can also specify a |\title|, |\date|
+% and one or more |\author|s.
+%
+% \DescribeMacro{\id}
+% Sometimes you have to provide your student ID with your solutions to an
+% exercise sheet. The \textsf{uhhassignment} class provides the |\id|\marg{id}
+% command for this case. This command should be used when specifying the authors
+% with the |\author| command. It might look like this:
+% |\author{John Doe\id{1234567}}|
+%
+% \subsection{Tasks and Subtasks}
+%
+% The \textsf{uhhassignment} class is based on \textsf{srcarctl} from the KOMA
+% packages so its main sectioning level are sections (not chapters). Sections
+% and subsections however do not always accurately reflect the semantics of
+% solutions to an assignment. Instead the \textsf{uhhassignment} class provides
+% the following commands:
+%
+% \smallskip
+%
+% \DescribeMacro{\task}|\task|\oarg{task number}\marg{task name}\\
+% The |\task| command replaces the |\section| command. It incrementally numbers
+% the tasks (starting at 1). If you want to skip a task you can use the optional
+% \meta{task number} argument to set the task number to a specific value.
+% Subsequent tasks are then incrementally numbered.
+%
+% \smallskip
+%
+% \DescribeMacro{\subtask}|\subtask|\oarg{task number}\marg{task name}\\
+% \DescribeMacro{\subsubtask}|\subsubtask|\oarg{task number}\marg{task name}\\
+% The |\subtask| and |\subsubtask| replace |\subsection| and |\subsubsection|
+% respectively. They work analogous to |\task|.
+%
+% \smallskip
+%
+% The standard sectioning commands are not modified by the
+% \textsf{uhhassignment} class so it is still possible to use them. In fact the
+% |\task| commands do create sections and subsections internally. You should
+% however be careful in using |\section|s yourself because it may be difficult
+% to distinguish |\task|s from |\section|s.
+%
+% \subsection{Todos}
+%
+% The \textsf{uhhassignment} class offers rudimentary support for todo notes.
+% Currently todo support is very limited and may not work in some cases.
+%
+% \smallskip
+%
+% \DescribeMacro{\todo}|\todo|\oarg{todo text}\\
+% The |\todo| command does two things:
+% \begin{enumerate}
+% \item It puts a todo marker in the text where the |\todo| command is
+% specified. The todo marker is defined by the |\todomark| command.
+% \DescribeMacro{\todomark}
+% \item It puts a todo note at the page margin so that you can easily spot
+% open todos in the PDF. The text of the todo note can be customized using
+% the \meta{todo text} optional argument.
+% \end{enumerate}
+%
+% \StopEventually{
+% \addcontentsline{toc}{section}{Index}
+% \PrintIndex
+% }
+%
+% \section{Implementation}
+%
+% In addition to the options provided by \textsf{scrartcl} the
+% \textsf{uhhassignment} class supports the following options.
+% \begin{macrocode}
+\newif\ifuhhassignment@numberedsheets
+\DeclareOption{unnumberedsheets}{
+ \uhhassignment@numberedsheetsfalse
+}
+
+\DeclareOption{numberedsheets}{
+ \uhhassignment@numberedsheetstrue
+}
+
+\newif\ifuhhassignment@repeatauthor
+\uhhassignment@repeatauthorfalse
+\DeclareOption{repeatauthor}{
+ \uhhassignment@repeatauthortrue
+}
+
+\newif\ifuhhassignment@shorttitle
+\DeclareOption{shorttitle}{
+ \uhhassignment@shorttitletrue
+}
+
+\DeclareOption{longtitle}{
+ \uhhassignment@shorttitlefalse
+}
+
+\newif\ifuhhassignment@shortheader
+\DeclareOption{shortheader}{
+ \uhhassignment@shortheadertrue
+}
+
+\DeclareOption{longheader}{
+ \uhhassignment@shortheaderfalse
+}
+
+\ExecuteOptions{longtitle,longheader,numberedsheets}
+
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% The \textsf{uhhassignment} class is based on \textsf{scrartcl}.
+% \begin{macrocode}
+\LoadClassWithOptions{scrartcl}
+% \end{macrocode}
+
+% \iffalse %%%%%%%%%%%%%%%%%%%
+%%%%%%%% Dependencies %%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%\fi
+
+% \subsection{Dependencies}
+%
+% \begin{macrocode}
+\RequirePackage[utf8]{inputenc} % UTF-8 Encoding
+\RequirePackage{cmap} % Special Characters
+\RequirePackage[T1]{fontenc} % Font Encoding
+\RequirePackage[ngerman]{babel} % German Language
+\RequirePackage{etoolbox} % Programming
+\RequirePackage{calc} % Calculations
+
+\RequirePackage[a4paper,
+ left=25mm,
+ right=25mm,
+ top=20mm,
+ bottom=50mm]{geometry} % Page Margins
+
+\RequirePackage[headsepline]{scrlayer-scrpage} % Header and Footer
+\RequirePackage{lastpage} % Page Numbers
+
+\RequirePackage{amsmath} % Maths
+\RequirePackage{amssymb} % Maths
+\RequirePackage{amsthm} % Beweise
+\RequirePackage{enumitem} % Customizable Enumerations
+
+\RequirePackage{xcolor} % Colors
+\RequirePackage{framed} % Colored Boxes
+\RequirePackage[colorlinks,linkcolor=black]{hyperref} % References
+\RequirePackage{lmodern} % Better Font
+% \end{macrocode}
+
+% \iffalse %%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% Constants %%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%\fi
+
+% \subsection{Constants}
+
+% The following constants are used throughout the template. They can be
+% overridden for customizations.
+% \begin{macrocode}
+\def\uhhassignment@sheetid{Aufgabenblatt}
+\def\uhhassignment@groupid{Übungsgruppe}
+% \end{macrocode}
+
+% \iffalse %%%%%%%%%%%%%%%%%%%
+%%%%%%% Custom Commands %%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%\fi
+
+% \subsection{Definitions}
+%
+% \subsubsection{Title Elements}
+%
+% \begin{macro}{\university}
+% The |\university| command stores the name of the university for later use.
+% \begin{macrocode}
+\newcommand{\university}[2][]{
+ \ifstrempty{#1}{
+ \gdef\@shortuniversity{#2}
+ }{
+ \gdef\@shortuniversity{#1}
+ }
+ \gdef\@university{#2}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\course}
+% The |\course| command stores the name of the course for later use.
+% \begin{macrocode}
+\newcommand{\course}[2][]{
+ \ifstrempty{#1}{
+ \gdef\@shortcourse{#2}
+ }{
+ \gdef\@shortcourse{#1}
+ }
+ \gdef\@course{#2}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\teacher}
+% The |\teacher| command stores the name of the teacher for later use.
+% \begin{macrocode}
+\newcommand{\teacher}[1]{
+ \gdef\@teacher{#1}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\group}
+% The |\group| command stores the name of the group for later use.
+% \begin{macrocode}
+\newcommand{\group}[1]{
+ \gdef\@group{#1}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\sheetno}
+% The |\sheetno| command stores the assignment sheet number for later use.
+% \begin{macrocode}
+\newcommand{\sheetno}[1]{
+ \gdef\@sheetno{#1}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\id}
+% The |\id| macro prints the id of an author. The default implementation puts
+% the id on a new line in parentheses.
+% \begin{macrocode}
+\newcommand{\id}[1]{\\\ttfamily\footnotesize(#1)}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\author}
+% The |\author| command is overridden by this class to support a short author
+% that may be printed at the bottom of each page.
+% \begin{macrocode}
+\renewcommand{\author}[2][]{
+ \ifstrempty{#1}{
+ \gdef\@shortauthor{#2}
+ }{
+ \gdef\@shortauthor{#1}
+ }
+ \gdef\@author{#2}
+}
+% \end{macrocode}
+% \end{macro}
+
+% The default values for most fields are empty. The default university is the
+% university of Hamburg.
+% \begin{macrocode}
+\university[Uni Hamburg]{Universität Hamburg}
+\def\@course{
+ \ClassWarning{uhhassignment}{No \protect\course\space given}
+}
+\let\@shortcourse\@course
+\group{}
+\def\@teacher{
+ \ClassWarning{uhhassignment}{No \protect\teacher\space given}
+}
+\let\@shortteacher\@teacher
+\def\@sheetno{
+ \ClassWarning{uhhassignment}{No \protect\sheetno\space given}
+}
+\def\@shortauthor{
+ \ClassWarning{uhhassignment}{No short \protect\author\space given}
+}
+\title{}
+
+% \end{macrocode}
+
+% \subsubsection{Todos}
+
+% \begin{macro}{\todomark}
+% The |\todomark| is placed in the text when the |\todo| command is used. The
+% default implementation draws a purple box with the text "Todo" inside.
+% \begin{macrocode}
+\newcommand{\todomark}{%
+ \colorbox{purple}{%
+ \textnormal\ttfamily\bfseries\color{white}%
+ TODO%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\todo}
+% The |\todo| macro places the |\todomark| and puts a todo text in a marginpar.
+% \begin{macrocode}
+\newcommand{\todo}[1][]{%
+ \ifstrempty{#1}{%
+ \def\todotext{Todo}%
+ }{%
+ \def\todotext{Todo: #1}%
+ }%
+ \todomark%
+ {%
+ \marginpar{%
+ \raggedright\normalfont\sffamily\scriptsize\todotext%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \subsubsection{Tasks}
+
+% The task mechanism of the \textsf{uhhassignment} class implements its own
+% numbering mechanism. This is neccessary because the task numbers do not
+% necessarily correlate with section numbers.
+% \begin{macrocode}
+\setcounter{secnumdepth}{0}
+% \end{macrocode}
+
+% \begin{macro}{\task}
+% The |\task| command is basically just a wrapper around a section with a
+% semi-customizable section title.
+% \begin{macrocode}
+\newcounter{task}
+\newcommand{\task}[2][]{%
+ \ifstrempty{#1}{%
+ \stepcounter{task}%
+ }{%
+ \setcounter{task}{#1}%
+ }%
+ \ifstrempty{#2}{%
+ \section{Aufgabe \arabic{task}}%
+ }{%
+ \section{Aufgabe \arabic{task}: #2}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\subtask}
+% The equivalent of |\subsection| for the \textsf{uhhassignment} class.
+% |\subtask| essentially wraps |\subsection| with a semi-customizable title.
+% \begin{macrocode}
+\newcounter{subtask}[task]
+\newcommand{\subtask}[2][]{%
+ \ifstrempty{#1}{%
+ \stepcounter{subtask}%
+ }{%
+ \setcounter{subtask}{#1}%
+ }%
+ \ifstrempty{#2}{%
+ \subsection{Teilaufgabe \arabic{task}.\arabic{subtask}}%
+ }{%
+ \subsection{\arabic{task}.\arabic{subtask}. #2}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\subsubtask}
+% The equivalent of |\subsubsection| for the \textsf{uhhassignment} class.
+% |\subsubtask| essentially wraps |\subsection| with a semi-customizable title.
+% It probably is not neccessary to use this very often.
+% \begin{macrocode}
+\newcounter{subsubtask}[subtask]
+\newcommand{\subsubtask}[2][]{%
+ \ifstrempty{#1}{%
+ \stepcounter{subsubtask}%
+ }{%
+ \setcounter{subsubtask}{#1}%
+ }%
+ \ifstrempty{#2}{%
+ \subsection{\arabic{task}.\arabic{subtask}.\arabic{subsubtask}}
+ }{%
+ \subsubsection{\arabic{task}.\arabic{subtask}.\arabic{subsubtask}. #2}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \iffalse %%%%%%%%%%%%%%%%%%%
+%%%%%%%%% Page Setup %%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%\fi
+
+% \subsection{Page Setup}
+
+% The \textsf{uhhassignment} class defines its own header and footer using
+% \textsf{scrlayer-scrpage}. The default setup shows the course, sheet number,
+% university and date on every page.
+% \begin{macrocode}
+\setlength{\headheight}{50pt}
+\pagestyle{scrheadings}
+\clearpairofpagestyles
+
+% Header
+\ifuhhassignment@shortheader
+ \ifuhhassignment@numberedsheets
+ \ihead{\textbf{\@shortcourse}\\\uhhassignment@sheetid{} \@sheetno}
+ \else
+ \ihead{\textbf{\@shortcourse}}
+ \fi
+ \ohead{\textbf{\@shortuniversity}\\\@date}
+\else
+ \ifuhhassignment@numberedsheets
+ \ihead{\textbf{\@course}\\\uhhassignment@sheetid{} \@sheetno}
+ \else
+ \ihead{\textbf{\@course}}
+ \fi
+ \ohead{\textbf{\@university}\\\@date}
+\fi
+
+% Footer
+\setkomafont{pagefoot}{\textnormal}
+\ifuhhassignment@repeatauthor
+ \ifoot[\@shortauthor]{\@shortauthor}
+ \ofoot[Seite \pagemark{} von \pageref{LastPage}]{Seite \pagemark{} von \pageref{LastPage}}
+\else
+ \cfoot[Seite \pagemark{} von \pageref{LastPage}]{Seite \pagemark{} von \pageref{LastPage}}
+\fi
+
+\newpagestyle{firstpage}[]{%
+ \ihead{}
+ \cfoot{\pagemark{}}
+}
+% \end{macrocode}
+
+% \iffalse %%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%% Layout %%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%\fi
+
+% \subsection{Layout}
+
+% The \textsf{uhhassignment} class overrides some font settings and adjusts the
+% paragraph spacing to create a more distinct layout.
+%
+% \begin{macrocode}
+\setlength{\parskip}{5pt}
+
+\setkomafont{section}{\normalfont\bfseries\LARGE}
+\setkomafont{subsection}{\normalfont\bfseries\Large}
+\setkomafont{subsubsection}{\normalfont\bfseries\large}
+\RedeclareSectionCommands[afterskip=.25\baselineskip]{section}
+\RedeclareSectionCommands[
+ beforeskip=0.5\baselineskip,
+ afterskip=.125\baselineskip]{subsection}
+% \end{macrocode}
+
+% \begin{macro}{\maketitle}
+% The \textsf{uhhassignment} class completely redefines the |\maketitle| macro.
+% This implementation actually defines the layout of the final title depending
+% on which information was specified by the user (group number, a title, \dots).
+%
+% We differentiate two \emph{states} of the title. If the user does not specify
+% a title and does not specify a group the title will be rearranged to not
+% display too much empty space. This is implemented via the |\ifextended|
+% definition.
+% \begin{macrocode}
+\renewcommand*{\maketitle}{%
+ \thispagestyle{plain}%
+
+ \newif\ifextended
+ \extendedtrue
+
+ \ifuhhassignment@shorttitle
+ \let\university\@shortuniversity
+ \let\course\@shortcourse
+ \else
+ \let\university\@university
+ \let\course\@course
+ \fi
+% \end{macrocode}
+
+% First we define the different layout parts. The title has six \emph{slots}
+% each of which can hold a piece of text:
+% \begin{description}
+% \item[Top Left] On the top left the course name ist printed in a bold
+% font.
+% \item[Top Right] On the top right the name of the university is printed
+% in a bold font.
+% \item[Meta Left] Below the course name a piece of information is
+% printed. The contents of this slot depend on the
+% specified information and can be either the group
+% number or the teacher.
+% \item[Meta Right] Similar to meta left but below the university name.
+% This slot typically holds the teacher or the date.
+% \item[Title Left] Above the actual title there is a row of secondary
+% titles. On the left of this row the sheet number is
+% printed.
+% \item[Title Right] Similarly to title left this slot may contain the
+% date.
+% \end{description}
+% Below the header the actual document title and the author(s) are printed.
+% If no |\title| is specified the sheet number becomes the title (|\title|
+% however remains empfy).
+% \begin{macrocode}
+ \ifdefempty{\@title}{%
+ \ifdefempty{\@group}{%
+ \def\metaleft{\@teacher}%
+ \def\metaright{\@date}%
+ \def\titleright{}%
+ \extendedfalse
+ }{%
+ \def\metaleft{\uhhassignment@sheetid{} \@group}%
+ \def\metaright{\@teacher}%
+ \def\titleright{\@date}%
+ }%
+ \def\titleleft{}%
+ \ifuhhassignment@numberedsheets
+ \def\title{\uhhassignment@sheetid{} \@sheetno}%
+ \else
+ % Title remains user-specified
+ \fi
+ }{%
+ \ifdefempty{\@group}{%
+ \def\metaleft{}%
+ \def\metaright{\@teacher}%
+ }{%
+ \def\metaleft{\uhhassignment@groupid{} \@group}%
+ \def\metaright{\@teacher}%
+ }%
+ \ifuhhassignment@numberedsheets
+ \def\titleleft{\uhhassignment@sheetid{} \@sheetno}%
+ \else
+ \def\titleleft{}
+ \fi
+ \def\titleright{\@date}%
+ \def\title{\@title}%
+ }%
+% \end{macrocode}
+
+% The following code prints the title with the information specified above.
+% Depending on the value of |\ifextended| the title will be longer or
+% shorter.
+%
+% Each field (heading, secondary title, title, author) is put in a separate
+% group to avoid interference.
+% \begin{macrocode}
+
+ \begingroup% Heading Group
+ \usekomafont{pageheadfoot}%
+ \usekomafont{pagehead}%
+ \setlength{\parskip}{0pt}%
+
+ \textbf{\course} \hfill \textbf{\university}\par%
+
+ \begin{minipage}[t]{\widthof{\metaleft}}%
+ \metaleft%
+ \end{minipage}%
+ \hfill%
+ \begin{minipage}[t]{\widthof{\metaright}}%
+ \raggedleft%
+ \metaright%
+ \end{minipage}%
+ \endgroup%
+
+ \ifextended%
+ \vspace{\baselineskip}%
+ \fi%
+
+ \begingroup% Secondary Title Groupt
+ \Large\bfseries\titleleft\hfill\titleright%
+ \endgroup%
+
+ \begingroup% Title Group
+ \begin{center}%
+ \Huge\textsc{\title}%
+ \end{center}%
+ \endgroup%
+
+ \begingroup% Author Group
+ \setlength{\baselineskip}{2.75\baselineskip}%
+ \vspace{-\baselineskip}%
+ \begin{center}%
+ \begin{tabular}[t]{c}%
+ \@author%
+ \end{tabular}%
+ \end{center}%
+ \endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+% \Finale
+
+\endinput
diff --git a/macros/latex/contrib/uhhassignment/uhhassignment.ins b/macros/latex/contrib/uhhassignment/uhhassignment.ins
new file mode 100644
index 0000000000..193cfab780
--- /dev/null
+++ b/macros/latex/contrib/uhhassignment/uhhassignment.ins
@@ -0,0 +1,52 @@
+%%
+%% Copyright (C) 2017 by Kim Wittenburg
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 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.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/uhhassignment}
+
+\preamble
+
+Copyright (C) 2017 by Kim Wittenburg
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3 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.3 or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+\endpreamble
+
+\generate{\file{uhhassignment.cls}{\from{uhhassignment.dtx}{class}}}
+
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* uhhassignment.cls *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* uhhassignment.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{****************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/uhhassignment/uhhassignment.pdf b/macros/latex/contrib/uhhassignment/uhhassignment.pdf
new file mode 100644
index 0000000000..99880642ac
--- /dev/null
+++ b/macros/latex/contrib/uhhassignment/uhhassignment.pdf
Binary files differ