summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-11-13 22:24:29 +0000
committerKarl Berry <karl@freefriends.org>2020-11-13 22:24:29 +0000
commitffb4036e9af173690e6faa322bee8bceefa7bcaa (patch)
treeb4824a6fad109ee3a2ff4b288f808bb616203df1 /Master
parentb3a6bc1c4efa8d9f6e736a4d8d1afe77406ebfd9 (diff)
mluexercise (13nov20)
git-svn-id: svn://tug.org/texlive/trunk@56927 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/mluexercise/README.md12
-rw-r--r--Master/texmf-dist/doc/latex/mluexercise/mluexercise.pdfbin0 -> 455085 bytes
-rw-r--r--Master/texmf-dist/source/latex/mluexercise/mluexercise.dtx813
-rw-r--r--Master/texmf-dist/source/latex/mluexercise/mluexercise.ins32
-rw-r--r--Master/texmf-dist/tex/latex/mluexercise/mluexercise.cls346
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds3
-rw-r--r--Master/tlpkg/tlpsrc/collection-publishers.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/mluexercise.tlpsrc0
9 files changed, 1207 insertions, 2 deletions
diff --git a/Master/texmf-dist/doc/latex/mluexercise/README.md b/Master/texmf-dist/doc/latex/mluexercise/README.md
new file mode 100644
index 00000000000..8fa2e88b4db
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/mluexercise/README.md
@@ -0,0 +1,12 @@
+# The `mluexercise` class
+
+Template class for exercises/homework, maintained by the [Computer Science Student's Council](https://fachschaft.mathinf.uni-halle.de) at [Martin Luther University Halle-Wittenberg](https://uni-halle.de).
+
+## Contact
+
+We are happy to accept pull requests and feature requests on [GitHub](https://github.com/fsrmatheinfo/mluexercise).
+Alternatively, you can contact us via email: [fachschaft@mathinf.uni-halle.de](mailto:fachschaft@mathinf.uni-halle.de)
+
+## License
+
+The `mluexercise` LaTeX class is distributed under the [MIT license](https://ctan.org/license/mit).
diff --git a/Master/texmf-dist/doc/latex/mluexercise/mluexercise.pdf b/Master/texmf-dist/doc/latex/mluexercise/mluexercise.pdf
new file mode 100644
index 00000000000..bea9153a392
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/mluexercise/mluexercise.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/mluexercise/mluexercise.dtx b/Master/texmf-dist/source/latex/mluexercise/mluexercise.dtx
new file mode 100644
index 00000000000..4692e9b6a15
--- /dev/null
+++ b/Master/texmf-dist/source/latex/mluexercise/mluexercise.dtx
@@ -0,0 +1,813 @@
+%\iffalse
+%!TEX program = pdfLaTeX
+%<*internal>
+\iffalse
+%</internal>
+%<*license>
+MIT License
+
+Copyright (c) 2020 Fachschaftsrat Mathematik/Informatik der Studierendenschaft der Martin-Luther-Universität Halle-Wittenberg K.d.ö.R.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+%</license>
+%<*readme>
+# The `mluexercise` class
+
+Template class for exercises/homework, maintained by the [Computer Science Student's Council](https://fachschaft.mathinf.uni-halle.de) at [Martin Luther University Halle-Wittenberg](https://uni-halle.de).
+
+## Contact
+
+We are happy to accept pull requests and feature requests on [GitHub](https://github.com/fsrmatheinfo/mluexercise).
+Alternatively, you can contact us via email: [fachschaft@mathinf.uni-halle.de](mailto:fachschaft@mathinf.uni-halle.de)
+
+## License
+
+The `mluexercise` LaTeX class is distributed under the [MIT license](https://ctan.org/license/mit).
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}\ifx\fmtname\nameofplainTeX\else\expandafter\begingroup\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\usedir{tex/latex/\jobname}
+\generate{
+ \file{\jobname.cls}{\from{\jobname.dtx}{class}}
+}
+%\endbatchfile
+%</install>
+%<*internal>
+\usedir{source/latex/\jobname}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/\jobname}
+\generate{
+ \file{README.md}{\from{\jobname.dtx}{readme}}
+ \file{LICENSE.txt}{\from{\jobname.dtx}{license}}
+}
+\ifx\fmtname\nameofplainTeX\expandafter\endbatchfile\else\expandafter\endgroup\fi
+%</internal>
+%<*driver>
+\documentclass[a4paper,english]{ltxdoc}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{babel}
+\usepackage{libertine}
+\usepackage{eulervm}
+\usepackage[ttdefault]{sourcecodepro}
+\usepackage[colorlinks=false]{hyperref}
+\usepackage{relsize}
+\newcommand{\ttsmallfont}{\ttfamily\smaller}
+\renewcommand{\UrlFont}{\ttsmallfont}
+\renewcommand{\texttt}[1]{{\ttsmallfont #1}}
+\renewcommand{\MacroFont}{\ttfamily\footnotesize}
+\usepackage{listings}
+\usepackage{csquotes}
+\usepackage{booktabs}
+\usepackage[sf,bf]{titlesec}
+\lstset{
+ language=TeX,
+ basicstyle=\ttfamily\footnotesize,
+ breakatwhitespace=false,
+ breaklines=true,
+ prebreak={\mbox{\(\hookleftarrow\)}},
+ numbers=left,
+ numberstyle=\scriptsize,
+ numbersep=1pt,
+ keepspaces=true,
+ tabsize=4,
+ xleftmargin=1em,
+}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+^^A \OnlyDescription
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+%<*class>
+%\fi
+%
+%\renewcommand{\filedate}{2020/11/12}
+%\renewcommand{\fileversion}{v2.0}
+%
+%\title{\sffamily\bfseries The \texttt{\jobname} class\footnote{This document describes version \fileversion{}, last revised \filedate{}.}}
+%\author{\sffamily %
+% Jan Heinrich Reimer \\
+% Fachschaftsrat Mathematik/Informatik%
+% \footnote{Fachschaftsrat Mathematik/Informatik der Studierendenschaft der Martin-Luther-Universität Halle-Wittenberg K.d.ö.R., Von-Seckendorff-Platz~1, 06120~Halle~ (Saale), Germany} \\
+% \url{https://fachschaft.mathinf.uni-halle.de} \\
+% \texttt{fachschaft@mathinf.uni-halle.de}
+%}
+%\date{\sffamily Released \filedate{}}
+%
+%\maketitle
+%\tableofcontents
+%
+%\section{Introduction}
+%
+%The \texttt{mluexercise} class is a template class for solving weekly exercises at the Institute for Computer Science of Martin Luther University Halle-Wittenberg.\footnote{\url{https://uni-halle.de/}}
+%The class can be used by all students---especially first semesters---to typeset their exercises with a low-effort in beautiful \LaTeX{}.
+% We include a bunch of handy macros that are used throughout many lectures during the bachelor's degree program.
+%
+%\changes{v1.0}{2018/10/03}{Initial draft}
+%\changes{v2.0}{2020/11/12}{First public release}
+%
+%\section{Usage}
+%
+%\DescribeMacro{\documentclass}
+%Load the \texttt{mluexercise} class at the start of your preamble.
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{lstlisting}[gobble=4]
+ \documentclass{mluexercise}
+\end{lstlisting}
+%\iffalse
+%</example>
+%\fi
+%
+%\paragraph{Languages}
+%
+%As in many classes, you can define your main document language.
+%This will help \LaTeX{} in hyphenating words and structural texts (e.g.,~sections) are being translated automatically.
+%
+%\DescribeMacro{english}
+%The \texttt{english} option selects English language for texts and hyphenation.
+%
+%\DescribeMacro{ngerman}
+%The \texttt{ngerman} option selects German language (with new spelling) for texts and hyphenation.
+%
+%While you do not have to specify a language, it is a meaningful information for writers (including yourself) to explicitly state the desired language that should be used consistently throughout the whole document. If no language is specified, English language is used.
+%
+%\paragraph{Styles}
+%
+%\DescribeMacro{dataminingstyle}
+%The \texttt{dataminingstyle} option may be used for the \textquote{Data Mining} lecture and overwrites some mathematical symbols to match the lecture's definition's.
+%
+%\subsection{Exercise Metadata}
+%
+%Define the exercise's metadata and your identity. The below macros should be used only in the preamble, that is before \lstinline|\begin{document}|.
+%
+%\DescribeMacro{\lecture}
+%The \cs{lecture}\marg{name} macro sets the name of the lecture you are writing exercises for.
+%
+%\DescribeMacro{\semester}
+%The semester is automatically set to the current semester. You can overwrite the default value with the \cs{semester}\marg{semester} macro if you are compiling exercises for another semester.
+%
+%\DescribeMacro{\exercise}
+%The \cs{exercise}\marg{number} macro sets the number of the exercise you are working on.
+%
+%\DescribeMacro{\task}
+%The \cs{task}\marg{number} macro sets the number of the first task.
+%This is useful if you submit single PDF files for each task within the exercise.
+%If you omit this option, numbering starts at~1.
+%
+%\DescribeMacro{\group}
+%Sometimes tutors allow to submit exercises in groups.
+%You can use the optional \cs{group}\marg{number} macro to set the group number.
+%If no group number is given, the group number is not displayed.
+%
+%\DescribeMacro{\title}
+%The \cs{title}\marg{lecture name} macro is an alias for \cs{lecture}\marg{lecture name}.
+%
+%\DescribeMacro{\date}
+%The date is automatically set to the current date.
+%You can overwrite the default value with the \cs{date}\marg{date} macro.
+%
+%\subsection{Student Metadata}
+%
+%The following commands should be used to include identification in your exercise in order to assign your work.
+%
+%\DescribeMacro{\studentname}
+%You must define your full name with the \cs{studentname}\marg{full name} macro.
+%If you are working in a group, you can enter more names separated with commas and/or line breaks.
+%
+%\DescribeMacro{\studentnumber}
+%The \cs{studentnumber}\marg{matriculation number} macro specifies your student matriculation number (e.g.,~234\,567\,890). This is the same number as on your student ID card.
+%
+%\DescribeMacro{\studentsymbol}
+%The \cs{studentsymbol}\marg{shorthand symbol} macro specifies your shorthand symbol used for university IT services (e.g.,~abcde). This is the same username used for Stud.IP, university mail etc.
+%
+%Both \cs{studentnumber} an \cs{studentsymbol} are optional.
+%Though, most tutors require specifying either student number or symbol.
+%
+%\paragraph{Multiple Students}
+%
+%While you can use commas and line breaks in the above macros, we would suggest one of the following two options to submit work in groups with multiple students:
+%\begin{itemize}
+% \item Either use the services offered by the university to check-in your group members online~(e.g.,~in the Institute for Computer Science's \textquote{Übungsportal}).
+% In this case you don't need to specify multiple names in the preamble, but just your own name.
+% \item Or, if you cannot specify group members elsewhere, we recommend to add a footnote on the first page. That way you can list all other students but do not waste too much paper.
+%\end{itemize}
+%
+%\subsection{Included Packages}
+%
+%The \texttt{\jobname} class loads a number of useful \LaTeX{} packages listed in Table~\ref{tab:packages}.
+%Those are needed to typeset exercises during the Computer Science bachelor's degree programme at Martin Luther University Halle-Wittenberg.
+%We recommend reading the introductions of each package's documentation on CTAN\footnote{\url{https://ctan.org/}}.
+%\begin{table}
+% \caption{Packages included in the class.}
+% \label{tab:packages}
+% \begin{tabular}{lll}
+% \toprule
+% \textbf{Package} & \textbf{Purpose} & \textbf{Link} \\
+% \midrule
+% \texttt{babel} & hyphenation, localization & {\smaller\url{https://ctan.org/pkg/babel}} \\
+% \texttt{amsmath} & mathematics & {\smaller\url{https://ctan.org/pkg/amsmath}} \\
+% \texttt{amsthm} & & {\smaller\url{https://ctan.org/pkg/amsthm}} \\
+% \texttt{amssymb} & & {\smaller\url{https://ctan.org/pkg/amssymb}} \\
+% \texttt{amstext} & & {\smaller\url{https://ctan.org/pkg/amstext}} \\
+% \texttt{array} & & {\smaller\url{https://ctan.org/pkg/array}} \\
+% \texttt{cancel} & & {\smaller\url{https://ctan.org/pkg/cancel}} \\
+% \texttt{inputenc} & UTF8 encoding & {\smaller\url{https://ctan.org/pkg/inputenc}} \\
+% \texttt{fontenc} & T1 encoding & {\smaller\url{https://ctan.org/pkg/fontenc}} \\
+% \texttt{booktabs} & tables & {\smaller\url{https://ctan.org/pkg/booktabs}} \\
+% \texttt{graphicx} & images, graphics & {\smaller\url{https://ctan.org/pkg/graphicx}} \\
+% \texttt{xcolor} & color definitions & {\smaller\url{https://ctan.org/pkg/xcolor}} \\
+% \texttt{tikz} & drawing vector graphics & {\smaller\url{https://ctan.org/pkg/tikz}} \\
+% \texttt{pgfplots} & plotting & {\smaller\url{https://ctan.org/pkg/pgfplots}} \\
+% \texttt{algorithm2e} & pseudocode, algorithms & {\smaller\url{https://ctan.org/pkg/algorithm2e}} \\
+% \texttt{listings} & code listings & {\smaller\url{https://ctan.org/pkg/listings}} \\
+% \texttt{listingsutf8} & & {\smaller\url{https://ctan.org/pkg/listingsutf8}} \\
+% \texttt{subcaption} & sub-figures & {\smaller\url{https://ctan.org/pkg/subcaption}} \\
+% \texttt{csquotes} & quotation & {\smaller\url{https://ctan.org/pkg/csquotes}} \\
+% \bottomrule
+% \end{tabular}
+%\end{table}
+%
+%\section{Design Goals}
+%
+%The \texttt{\jobname} class should:
+%
+%\begin{itemize}
+% \item be usable for first semester students with rather little LaTeX experience,
+% \item be consistent with Martin Luther University brand guidelines\footnote{\url{https://www.pr.uni-halle.de/download/logo/}}, especially with respect to font families and colors, and
+% \item include packages frequently needed by students.
+%\end{itemize}
+%
+%\section{Implementation}
+%
+%\subsection{Setup}
+%
+%We specify the \LaTeX{} version, define and parse options and then load the base class \texttt{scrartcl}\footnote{\url{https://ctan.org/pkg/scrartcl}} with all remaining options.
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{mluexercise}[2020/11/12 v2.0]
+% \end{macrocode}
+%
+%\paragraph{Options}
+%
+% \begin{macrocode}
+\newif\ifdataminingstyle\dataminingstylefalse
+\DeclareOption{dataminingstyle}{%
+ \dataminingstyletrue
+}
+% \end{macrocode}
+%
+%Process options and load base class with remaining options.
+%
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
+\ProcessOptions*
+\LoadClass{scrartcl}
+% \end{macrocode}
+%
+%To enable support for UTF8 and some other useful basics, we load a bunch of packages.
+%
+% \begin{macrocode}
+\RequirePackage[utf8]{inputenc}
+\RequirePackage[T1]{fontenc}
+\RequirePackage{ifthen} % Conditional branches and loops.
+\RequirePackage{etoolbox} % Hooks for executing code.
+\RequirePackage{hyperref} % Hyperlinks.
+\RequirePackage{xcolor} % Color definitions.
+% \end{macrocode}
+%
+%As we'd like to be able to switch between English and German with proper hyphenation, load language support packages.%
+%\footnote{If you'd like to add a language, please contact us.}
+%
+% \begin{macrocode}
+\RequirePackage{babel}
+\RequirePackage{iflang}
+\newcommand{\IfGerman}[2]{\IfLanguagePatterns{german}{#1}{%
+ \IfLanguagePatterns{ngerman}{#1}{#2}}}
+% \end{macrocode}
+%
+%\subsection{Global Variables}
+%
+%The class can be configured with the lecture's and student's details. We define global variables for that and redefine some built in \LaTeX{} commands to ease the migration from standard classes.
+%
+% \begin{macrocode}
+\newcommand{\@checkoption}[3]{%
+ \AtEndPreamble{%
+ \ifthenelse{\equal{\the#1}{}}{%
+ \ClassError{mluexercise}{Missing #2}{%
+ Set #2 using the \protect#3 command.%
+ }%
+ }{}%
+ }%
+}
+\newtoks\@lecture
+\newcommand{\lecture}[1]{\global\@lecture{#1}}
+\let\title\lecture % Redefine standard \title command.
+\@checkoption{\@lecture}{lecture name}{\lecture}
+\newtoks\@semester
+\newcommand{\semester}[1]{\global\@semester{#1}}
+\global\@semester{ % Automatically set semester based on current date.
+ \ifnum\month<4 % Winter semester, including previous year.
+ WS~{\advance\year by -1 \the\year\advance\year by 1}/\the\year%
+ \else\ifnum\month<10 % Summer semester.
+ SS~\the\year%
+ \else % Winter semester, including next year.
+ WS~\the\year/{\advance\year by 1 \the\year\advance\year by -1}%
+ \fi\fi%
+}
+\newtoks\@exercise
+\newcommand{\exercise}[1]{\global\@exercise{#1}}
+\@checkoption{\@exercise}{exercise number}{\exercise}
+\newtoks\@task
+\newcommand{\task}[1]{\global\@task{#1}}
+\global\@task{1}
+\newtoks\@group
+\newcommand{\group}[1]{\global\@group{#1}}
+\global\@group{0}
+\newtoks\@studentname
+\newcommand{\studentname}[1]{\global\@studentname{#1}}
+\let\author\studentname % Redefine standard \title command.
+\@checkoption{\@studentname}{student name}{\studentname}
+\newtoks\@studentnumber
+\newcommand{\studentnumber}[1]{\global\@studentnumber{#1}}
+\newtoks\@studentsymbol
+\newcommand{\studentsymbol}[1]{\global\@studentsymbol{#1}}
+% \end{macrocode}
+%
+%\subsection{Layout, Text}
+%
+%Set up a reasonable page layout and define text styles that comply with Martin Luther University brand guidelines.
+%
+% \begin{macrocode}
+\RequirePackage{calc}
+\RequirePackage[
+ a4paper,
+ inner=2cm,
+ outer=2cm,
+ top=3cm,
+ bottom=3cm,
+ head=0.75cm,
+ headsep=0.25cm,
+ foot=0.75cm,
+]{geometry}
+\renewcommand{\baselinestretch}{1.15}
+\setlength{\parindent}{0em} % Disable paragraph indentation.
+\setlength{\parskip}{1ex} % Instead enable paragraph margins.
+% \end{macrocode}
+%
+%\paragraph{Font Families}
+%
+%We use Libertine as main font as that is the closest free font to the proprietary URW~Classico font used by the university. For mathematics we use the more modern Euler~Maths font and for source code the \emph{true} monospace font Source~Code~Pro, as otherwise copying from the PDF is broken. For clarity reasons we do not want code ligatures.
+%
+% \begin{macrocode}
+\RequirePackage{libertine}
+\RequirePackage{eulervm}
+\RequirePackage[ttdefault]{sourcecodepro}
+\RequirePackage{microtype}
+\DisableLigatures{family=tt*}
+% \end{macrocode}
+%
+%\paragraph{Text Styles}
+%
+% \begin{macrocode}
+\newcommand{\strong}[1]{\textbf{#1}}
+\newcommand{\italic}[1]{\textit{#1}}
+\newcommand{\code}[1]{\texttt{#1}}
+% Double underline.
+\newcommand{\Underline}[1]{\underline{\underline{#1}}}
+% Abbreviated plural ("Lineare Algebra" lecture).
+\newcommand{\plural}[1]{\textsuperscript{\underline{#1}}}
+\newcommand{\pl}[1]{\plural{#1}}
+\RequirePackage[autostyle=true,german=quotes]{csquotes}
+% \end{macrocode}
+%
+%\paragraph{URL / Link Font}
+%
+% \begin{macrocode}
+\RequirePackage{relsize}
+\newcommand{\ttsmallfont}{\ttfamily\smaller}
+\renewcommand{\UrlFont}{\ttsmallfont}
+\newcommand{\textttsmall}[1]{{\ttsmallfont #1}}
+\newcommand{\query}[1]{{\ttsmallfont #1}}
+\newcommand{\domain}[1]{\href{http://#1}{\mbox{\ttsmallfont #1}}}
+\newcommand{\email}[1]{\href{mailto:#1}{\mbox{\ttsmallfont #1}}}
+% \end{macrocode}
+%
+%\paragraph{Headings}
+%
+% \begin{macrocode}
+\setkomafont{sectioning}{\sffamily\mdseries}
+\setkomafont{section}{\LARGE}
+\setkomafont{subsection}{\Large}
+\setkomafont{subsubsection}{\large}
+\setkomafont{paragraph}{\large}
+\setkomafont{subparagraph}{\normalsize}
+\renewcommand{\thesection}{%
+ \bfseries\upshape \IfGerman{Aufgabe}{Task} \arabic{section}}
+\renewcommand{\thesubsection}{%
+ \bfseries\upshape \alph{subsection})}
+\renewcommand{\thesubsubsection}{%
+ \upshape (\roman{subsubsection})}
+\renewcommand{\autodot}{}
+% \end{macrocode}
+%
+%\paragraph{Title}
+%
+% \begin{macrocode}
+\newcommand{\Rom}[1]{\uppercase\expandafter{\romannumeral#1\relax}}
+\newcommand{\groupstring}{\ifnum\the\@group>0{,
+ \IfGerman{Gruppe}{Group} \Rom{\the\@group}}\fi}
+\author{}
+\setkomafont{title}{\sffamily\bfseries\huge\centering}
+\setkomafont{date}{\sffamily\large\centering}
+\newlength{\approxtitlewidth}
+\renewcommand{\maketitle}{%
+ \settowidth{\approxtitlewidth}{%
+ \usefontofkomafont{title}\the\@lecture}%
+ \ifthenelse{\lengthtest{\approxtitlewidth>\textwidth}}{%
+ \addtokomafont{title}{\LARGE}}{}%
+ \begin{center}%
+ \usefontofkomafont{title}\the\@lecture \\
+ \usefontofkomafont{date}\@date, \the\@semester\groupstring
+ \end{center}
+}
+% \end{macrocode}
+%
+%\paragraph{Head, Foot}
+%
+% \begin{macrocode}
+\RequirePackage[headsepline,footsepline]{scrlayer-scrpage}
+\RequirePackage{totpages}
+\pagestyle{scrheadings}
+\clearscrheadfoot
+\setkomafont{pageheadfoot}{\sffamily}
+\setkomafont{pagenumber}{\sffamily}
+\ofoot{\thepage~von~\ref{TotPages}}
+% \end{macrocode}
+%
+%\subsection{Mathematics}
+%
+%We rely on AMS packages for rendering mathematical equations, proofs, and symbols.
+%Additionally we load packages for arrays in math mode and cancellations
+%
+% \begin{macrocode}
+\RequirePackage{amsmath}
+\RequirePackage{amsthm}
+\RequirePackage{amssymb}
+\RequirePackage{amstext}
+\RequirePackage{array}
+\RequirePackage{cancel}
+% \end{macrocode}
+%
+%Now we define (more readable) macros for the mathematical symbols and functions most commonly used at Martin Luther University.
+%
+% \begin{macrocode}
+\newcommand{\union}{\cup}
+\newcommand{\disjunction}{\uplus}
+\newcommand{\intersection}{\cap}
+\newcommand{\intersect}{\cap}
+\newcommand{\infinity}{\infty}
+\newcommand{\corresponds}{\triangleq}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\C}{\mathbb{C}} % Complex numbers.
+\newcommand{\complexnumbers}{\C}
+\newcommand{\R}{\mathbb{R}} % Real numbers.
+\newcommand{\realnumbers}{\R}
+\newcommand{\Q}{\mathbb{Q}} % Rational numbers.
+\newcommand{\rationalnumbers}{\Q}
+\newcommand{\Z}{\mathbb{Z}} % Whole numbers.
+\newcommand{\wholenumbers}{\Z}
+\newcommand{\N}{\mathbb{N}} % Natural numbers.
+\newcommand{\naturalnumbers}{\N}
+\newcommand{\B}{\mathbb{B}} % Binary numbers.
+\newcommand{\binarynumbers}{\B}
+% \end{macrocode}
+%
+% \begin{macrocode}
+% Equivalence transformation
+\newcommand{\eqtransform}{\ensuremath{\qquad\big|\,\,}}
+% "Ditto" sign
+\newcommand{\ditto}{\textquotedbl} \newcommand{\dito}{\ditto}
+% End of proof: "quod erat demonstrandum"
+\renewcommand{\qed}{\nopagebreak\hfill\ensuremath{\square}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\mland}{\(\land\)} % \land in text.
+\newcommand{\mlor}{\(\lor\)} % \lor in text.
+% \end{macrocode}
+%
+%Many maths symbols can have alternatives for stylistic choices. We enable the variants most liked by our tutors.
+%
+% \begin{macrocode}
+\let\tmp\mod \let\mod\bmod \let\bmod\tmp
+\let\varemptyset\emptyset \let\emptyset\varnothing
+\let\tmp\epsilon \let\epsilon\varepsilon \let\varepsilon\tmp
+\let\tmp\phi \let\phi\varphi \let\varphi\tmp
+% \end{macrocode}
+%
+%For some specific lectures we provide more detailed macros for symbols and functions.
+%
+%\paragraph{Lecture \textquote{Lineare Algebra}}
+%
+% \begin{macrocode}
+\newcommand{\base}[1]{\mathcal{#1}} % Base (caligraphic)
+\DeclareMathOperator{\im}{im} % Image
+\DeclareMathOperator{\id}{id} % Identity
+\DeclareMathOperator{\sel}{sel} % Selection
+\DeclareMathOperator{\dom}{dom} % Domain
+\DeclareMathOperator{\ran}{ran} % Range
+\DeclareMathOperator{\Hom}{Hom} % Homomorphism
+\DeclareMathOperator{\End}{End} % Endomorphism
+% \end{macrocode}
+%
+%\paragraph{Lecture \textquote{Datenstrukturen und effiziente Algorithmen}}
+%
+% \begin{macrocode}
+\renewcommand{\O}{\mathcal{O}} % asymptotic O-Notation (Landau)
+\DeclareMathOperator{\indeg}{indeg} % Indegree
+\DeclareMathOperator{\outdeg}{outdeg} % Outdegree
+% \end{macrocode}
+%
+%\paragraph{Lecture \textquote{Einführung in Data Science}}
+%
+% \begin{macrocode}
+\renewcommand{\P}{\ifdataminingstyle p\else\mathbf{P}\fi}
+\newcommand{\E}{\ifdataminingstyle\mathbb{E}\else\mathbf{E}\fi}
+\DeclareMathOperator{\var}{var}
+\DeclareMathOperator{\Var}{Var}
+\DeclareMathOperator{\cov}{cov}
+\DeclareMathOperator{\Cov}{Cov}
+\DeclareMathOperator{\Bin}{Bin}
+\DeclareMathOperator{\Exp}{Exp}
+\DeclareMathOperator{\Dir}{Dir}
+\DeclareMathOperator{\Mult}{Mult}
+\newcommand{\Normal}{\mathcal{N}}
+\newcommand{\Norm}{\Normal}
+% \end{macrocode}
+%
+%\paragraph{Table Columns}
+%
+%The handy \texttt{tabular} column definitions below can be used to typeset a whole column in math mode, to avoid repetetive opening/closing brackets.
+%
+% \begin{macrocode}
+\newcolumntype{L}{>{\(}l<{\)}}
+\newcolumntype{R}{>{\(}r<{\)}}
+\newcolumntype{C}{>{\(}c<{\)}}
+% \end{macrocode}
+%
+%\paragraph{Calculus Environments}
+%
+%Calculus environments are currently work in progress, subject to change, and may not work as expected.
+%However, they can simplify writing logical consequences in the \textquote{Mathematische Grundlagen der Informatik und Konzepte der Modellierung} lecture.
+%
+% \begin{macrocode}
+\newcounter{calculusRowCount}
+\RequirePackage{pgfkeys}
+\newenvironment{calculus}[1]{
+\pgfkeys{/mlu/calculus/.cd,show index=false,
+ context=\Gamma,context command=context,#1}
+\setcounter{calculusRowCount}{0}
+\newcommand{\calculusSymbol}{\text{
+ \sffamily\itshape\pgfkeysvalueof{/mlu/calculus/symbol}}}
+\newcommand{\calculusContext}{\ensuremath{
+ \pgfkeysvalueof{/mlu/calculus/context}}}
+\expandafter\let\csname \pgfkeysvalueof{/mlu/calculus/context command}%
+ \endcsname\calculusContext
+\par\vspace{0.5em}
+\begin{minipage}{\textwidth}\begin{tabular}{
+ @{\stepcounter{calculusRowCount}
+ (\arabic{calculusRowCount})\hspace{1em}} R
+ @{\hspace{0.4em}
+ \(
+ \vdash_{%
+ \ifthenelse{%
+ \equal{\pgfkeysvalueof{/mlu/calculus/show index}}{true}
+ }{
+ \ifthenelse{%
+ \equal{\pgfkeysvalueof{/mlu/calculus/symbol}}{}%
+ }{}{%
+ \calculusSymbol%
+ }%
+ }{%
+ \hspace{-0.1em}%
+ }%
+ }%
+ \)\hspace{0.6em}}
+ L l
+ }
+}{
+\end{tabular}\end{minipage}\vspace{0.5em}
+\let\calculusContext\undefined \let\calculusSymbol\undefined
+\expandafter\let\csname \pgfkeysvalueof{/mlu/calculus/context command}%
+ \endcsname\undefined
+}
+\newenvironment{eqcalc}[1][]{\begin{calculus}[
+ symbol=E,show index=true,context={\calculusSymbol_{#1}},
+ context command=E]}{\end{calculus}} % Equation calculus
+\newenvironment{seqcalc}{\begin{calculus}[
+ symbol=S,show index=true, context={\calculusSymbol},
+ context command=seq]}{\end{calculus}} % Sequence calculus
+% \end{macrocode}
+%
+%\subsection{Algorithms, Pseudocode}
+%\label{sec:implementation-pseudocode}
+%
+% \begin{macrocode}
+\RequirePackage[vlined,linesnumbered]{algorithm2e}
+\DontPrintSemicolon % Hide semicolons.
+\SetKwProg{Function}{function}{\ is}{end function}
+\SetKwComment{Comment}{\quad\(\triangleright\)~}{} % Comment style.
+\SetCommentSty{itshape} % Comment font.
+\SetKw{Continue}{continue}
+\SetKwBlock{Repeat}{repeat}{}
+\SetNlSty{tiny}{}{} % Line number font.
+\SetNlSkip{0.5em} % Line number skip.
+\SetAlgoNlRelativeSize{0}
+\SetAlFnt{\footnotesize}
+% \end{macrocode}
+%
+%\subsection{Code Listings}
+%
+%For syntax highlighting and including source code listings, we use the \texttt{listings} package.
+%With \texttt{listingsutf8} we can include listings that contain Unicode characters.
+%
+% \begin{macrocode}
+\RequirePackage{listings}
+\RequirePackage{listingsutf8} % UTF8 support in included listings.
+% \end{macrocode}
+%
+%Define colors for syntax highlighting.
+%
+% \begin{macrocode}
+\definecolor{lsnumber}{rgb}{0,0,0} % Zeilennummerfarbe
+\definecolor{lscomment}{rgb}{0.25,0.5,0.35} % Kommentarfarbe
+\definecolor{lskeyword}{rgb}{0.5,0,0.35} % Schlüsselwörterfarbe
+\definecolor{lsstring}{rgb}{0.6,0,0} % Zeichenkettenfarbe
+% \end{macrocode}
+%
+%The default listing style below is enabled automatically and should guarantee consistency with the appearance of pseudocode (see Section~\ref{sec:implementation-pseudocode}).
+%
+% \begin{macrocode}
+\lstset{
+ language=C,
+ basicstyle=\ttfamily,
+ breakatwhitespace=false,
+ breaklines=true,
+ prebreak={\mbox{\footnotesize\(\hookleftarrow\)}},
+ numbers=left,
+ numberstyle=\color{lsnumber}\tiny,
+ numbersep=0.5em,
+ stepnumber=1,
+ commentstyle=\color{lscomment},
+ morecomment=[s][\color{lscomment}]{/**}{*/},
+ keepspaces=true,
+ keywordstyle=\bfseries\color{lskeyword},
+ stringstyle=\color{lsstring},
+ showtabs=false, showspaces=false,
+ showstringspaces=false,
+ tabsize=2,
+}
+% \end{macrocode}
+%
+%\paragraph{Haskell Language Definition}
+%
+%Refine the Haskell language definition and code style for use in the \textquote{Konzepte der Programmierung} lecture.
+%
+% \begin{macrocode}
+\lstdefinelanguage[Zimmermann]{haskell}[]{haskell}{
+ escapeinside={*'}{'*},
+ showstringspaces=false,
+ morecomment=[l]\%,
+ captionpos=b,
+ emphstyle={\bfseries},
+}
+\lstalias[]{zhaskell}[Zimmermann]{haskell}
+% Deprecated. Use `language=zhaskell` instead of `style=haskell`.
+\lstdefinestyle{haskell}{language=zhaskell}
+% \end{macrocode}
+%
+%\paragraph{Assembler Language Definition}
+%Introduce a new language definition for Prof.~Molitor's Assembler dialect used in \textquote{Einführung in Rechnerarchitektur}.
+%
+% \begin{macrocode}
+\lstdefinelanguage[Molitor]{Assembler}[x86masm]{Assembler}{
+ morekeywords={
+ ldd,sto,shl,shr,rol,ror,sub,add,shli,shri,roli,rori,
+ subi,addi,or,and,xor,xnor,jmp,beq,bneq,bgt,bo,ldpc,stpc
+ },
+ comment=[l]{\#},
+}
+\lstalias[]{massembler}[Molitor]{Assembler}
+% Deprecated. Use `language=massembler` instead of `style=massembler`.
+\lstdefinestyle{massembler}{language=massembler}
+% \end{macrocode}
+%
+%\subsection{Graphics, Drawing, Plots}
+%
+%We add packages for including images and graphics, for drawing vector graphics, and for plotting data or functions.
+%
+% \begin{macrocode}
+\RequirePackage{booktabs}
+\RequirePackage{graphicx}
+\RequirePackage{float}
+\RequirePackage{subcaption}
+\RequirePackage{tikz}
+\RequirePackage{pgfplots}
+\RequirePackage{rotating}
+\usetikzlibrary{positioning}
+\usetikzlibrary{automata}
+\usetikzlibrary{trees}
+\tikzset{
+ >=latex,
+ font=\sffamily,
+}
+\pgfplotsset{compat=1.16}
+% \end{macrocode}
+%
+%\subsection{Document Hooks}
+%
+%The following \LaTeX{} code should be inserted just before \lstinline|\begin{document}|.
+%
+% \begin{macrocode}
+\AtEndPreamble{
+% \end{macrocode}
+%
+%Update exercise and task number as specified in the preamble. (Set first section number to task number.)
+%
+% \begin{macrocode}
+ \setcounter{section}{\the\@task} \addtocounter{section}{-1}
+ \newcommand{\@exercisestring}{\IfGerman{%
+ \the\@exercise.~Übungsserie}{Exercise~\the\@exercise}}
+% \end{macrocode}
+%
+%Set up page head/foot with metadata.
+%
+% \begin{macrocode}
+ \ihead{\the\@studentname}
+ \chead{\textbf{\@exercisestring}}
+ \ohead{
+ \the\@studentnumber%
+ \ifthenelse{\equal{\the\@studentnumber}{} \OR
+ \equal{\the\@studentsymbol}{}}{}{\ /\,}%
+ \the\@studentsymbol%
+ }
+% \end{macrocode}
+%
+%Set up PDF metadata.
+%
+% \begin{macrocode}
+ \hypersetup{
+ pdfauthor={\the\@studentname},
+ pdftitle={\@exercisestring - \the\@lecture}
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+%\iffalse
+%</class>
+%\fi
+%
+%\StopEventually{
+% \PrintChanges
+%}
+%
+%\Finale
+\endinput
diff --git a/Master/texmf-dist/source/latex/mluexercise/mluexercise.ins b/Master/texmf-dist/source/latex/mluexercise/mluexercise.ins
new file mode 100644
index 00000000000..afbe0a0d131
--- /dev/null
+++ b/Master/texmf-dist/source/latex/mluexercise/mluexercise.ins
@@ -0,0 +1,32 @@
+%%
+%% This is file `mluexercise.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% mluexercise.dtx (with options: `install')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from mluexercise.ins.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file mluexercise.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\usedir{tex/latex/\jobname}
+\generate{
+ \file{\jobname.cls}{\from{\jobname.dtx}{class}}
+}
+\endinput
+%%
+%% End of file `mluexercise.ins'.
diff --git a/Master/texmf-dist/tex/latex/mluexercise/mluexercise.cls b/Master/texmf-dist/tex/latex/mluexercise/mluexercise.cls
new file mode 100644
index 00000000000..dfa92b73f7e
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/mluexercise/mluexercise.cls
@@ -0,0 +1,346 @@
+%%
+%% This is file `mluexercise.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% mluexercise.dtx (with options: `class')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from mluexercise.cls.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file mluexercise.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{mluexercise}[2020/11/12 v2.0]
+\newif\ifdataminingstyle\dataminingstylefalse
+\DeclareOption{dataminingstyle}{%
+ \dataminingstyletrue
+}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
+\ProcessOptions*
+\LoadClass{scrartcl}
+\RequirePackage[utf8]{inputenc}
+\RequirePackage[T1]{fontenc}
+\RequirePackage{ifthen} % Conditional branches and loops.
+\RequirePackage{etoolbox} % Hooks for executing code.
+\RequirePackage{hyperref} % Hyperlinks.
+\RequirePackage{xcolor} % Color definitions.
+\RequirePackage{babel}
+\RequirePackage{iflang}
+\newcommand{\IfGerman}[2]{\IfLanguagePatterns{german}{#1}{%
+ \IfLanguagePatterns{ngerman}{#1}{#2}}}
+\newcommand{\@checkoption}[3]{%
+ \AtEndPreamble{%
+ \ifthenelse{\equal{\the#1}{}}{%
+ \ClassError{mluexercise}{Missing #2}{%
+ Set #2 using the \protect#3 command.%
+ }%
+ }{}%
+ }%
+}
+\newtoks\@lecture
+\newcommand{\lecture}[1]{\global\@lecture{#1}}
+\let\title\lecture % Redefine standard \title command.
+\@checkoption{\@lecture}{lecture name}{\lecture}
+\newtoks\@semester
+\newcommand{\semester}[1]{\global\@semester{#1}}
+\global\@semester{ % Automatically set semester based on current date.
+ \ifnum\month<4 % Winter semester, including previous year.
+ WS~{\advance\year by -1 \the\year\advance\year by 1}/\the\year%
+ \else\ifnum\month<10 % Summer semester.
+ SS~\the\year%
+ \else % Winter semester, including next year.
+ WS~\the\year/{\advance\year by 1 \the\year\advance\year by -1}%
+ \fi\fi%
+}
+\newtoks\@exercise
+\newcommand{\exercise}[1]{\global\@exercise{#1}}
+\@checkoption{\@exercise}{exercise number}{\exercise}
+\newtoks\@task
+\newcommand{\task}[1]{\global\@task{#1}}
+\global\@task{1}
+\newtoks\@group
+\newcommand{\group}[1]{\global\@group{#1}}
+\global\@group{0}
+\newtoks\@studentname
+\newcommand{\studentname}[1]{\global\@studentname{#1}}
+\let\author\studentname % Redefine standard \title command.
+\@checkoption{\@studentname}{student name}{\studentname}
+\newtoks\@studentnumber
+\newcommand{\studentnumber}[1]{\global\@studentnumber{#1}}
+\newtoks\@studentsymbol
+\newcommand{\studentsymbol}[1]{\global\@studentsymbol{#1}}
+\RequirePackage{calc}
+\RequirePackage[
+ a4paper,
+ inner=2cm,
+ outer=2cm,
+ top=3cm,
+ bottom=3cm,
+ head=0.75cm,
+ headsep=0.25cm,
+ foot=0.75cm,
+]{geometry}
+\renewcommand{\baselinestretch}{1.15}
+\setlength{\parindent}{0em} % Disable paragraph indentation.
+\setlength{\parskip}{1ex} % Instead enable paragraph margins.
+\RequirePackage{libertine}
+\RequirePackage{eulervm}
+\RequirePackage[ttdefault]{sourcecodepro}
+\RequirePackage{microtype}
+\DisableLigatures{family=tt*}
+\newcommand{\strong}[1]{\textbf{#1}}
+\newcommand{\italic}[1]{\textit{#1}}
+\newcommand{\code}[1]{\texttt{#1}}
+\newcommand{\Underline}[1]{\underline{\underline{#1}}}
+\newcommand{\plural}[1]{\textsuperscript{\underline{#1}}}
+\newcommand{\pl}[1]{\plural{#1}}
+\RequirePackage[autostyle=true,german=quotes]{csquotes}
+\RequirePackage{relsize}
+\newcommand{\ttsmallfont}{\ttfamily\smaller}
+\renewcommand{\UrlFont}{\ttsmallfont}
+\newcommand{\textttsmall}[1]{{\ttsmallfont #1}}
+\newcommand{\query}[1]{{\ttsmallfont #1}}
+\newcommand{\domain}[1]{\href{http://#1}{\mbox{\ttsmallfont #1}}}
+\newcommand{\email}[1]{\href{mailto:#1}{\mbox{\ttsmallfont #1}}}
+\setkomafont{sectioning}{\sffamily\mdseries}
+\setkomafont{section}{\LARGE}
+\setkomafont{subsection}{\Large}
+\setkomafont{subsubsection}{\large}
+\setkomafont{paragraph}{\large}
+\setkomafont{subparagraph}{\normalsize}
+\renewcommand{\thesection}{%
+ \bfseries\upshape \IfGerman{Aufgabe}{Task} \arabic{section}}
+\renewcommand{\thesubsection}{%
+ \bfseries\upshape \alph{subsection})}
+\renewcommand{\thesubsubsection}{%
+ \upshape (\roman{subsubsection})}
+\renewcommand{\autodot}{}
+\newcommand{\Rom}[1]{\uppercase\expandafter{\romannumeral#1\relax}}
+\newcommand{\groupstring}{\ifnum\the\@group>0{,
+ \IfGerman{Gruppe}{Group} \Rom{\the\@group}}\fi}
+\author{}
+\setkomafont{title}{\sffamily\bfseries\huge\centering}
+\setkomafont{date}{\sffamily\large\centering}
+\newlength{\approxtitlewidth}
+\renewcommand{\maketitle}{%
+ \settowidth{\approxtitlewidth}{%
+ \usefontofkomafont{title}\the\@lecture}%
+ \ifthenelse{\lengthtest{\approxtitlewidth>\textwidth}}{%
+ \addtokomafont{title}{\LARGE}}{}%
+ \begin{center}%
+ \usefontofkomafont{title}\the\@lecture \\
+ \usefontofkomafont{date}\@date, \the\@semester\groupstring
+ \end{center}
+}
+\RequirePackage[headsepline,footsepline]{scrlayer-scrpage}
+\RequirePackage{totpages}
+\pagestyle{scrheadings}
+\clearscrheadfoot
+\setkomafont{pageheadfoot}{\sffamily}
+\setkomafont{pagenumber}{\sffamily}
+\ofoot{\thepage~von~\ref{TotPages}}
+\RequirePackage{amsmath}
+\RequirePackage{amsthm}
+\RequirePackage{amssymb}
+\RequirePackage{amstext}
+\RequirePackage{array}
+\RequirePackage{cancel}
+\newcommand{\union}{\cup}
+\newcommand{\disjunction}{\uplus}
+\newcommand{\intersection}{\cap}
+\newcommand{\intersect}{\cap}
+\newcommand{\infinity}{\infty}
+\newcommand{\corresponds}{\triangleq}
+\newcommand{\C}{\mathbb{C}} % Complex numbers.
+\newcommand{\complexnumbers}{\C}
+\newcommand{\R}{\mathbb{R}} % Real numbers.
+\newcommand{\realnumbers}{\R}
+\newcommand{\Q}{\mathbb{Q}} % Rational numbers.
+\newcommand{\rationalnumbers}{\Q}
+\newcommand{\Z}{\mathbb{Z}} % Whole numbers.
+\newcommand{\wholenumbers}{\Z}
+\newcommand{\N}{\mathbb{N}} % Natural numbers.
+\newcommand{\naturalnumbers}{\N}
+\newcommand{\B}{\mathbb{B}} % Binary numbers.
+\newcommand{\binarynumbers}{\B}
+\newcommand{\eqtransform}{\ensuremath{\qquad\big|\,\,}}
+\newcommand{\ditto}{\textquotedbl} \newcommand{\dito}{\ditto}
+\renewcommand{\qed}{\nopagebreak\hfill\ensuremath{\square}}
+\newcommand{\mland}{\(\land\)} % \land in text.
+\newcommand{\mlor}{\(\lor\)} % \lor in text.
+\let\tmp\mod \let\mod\bmod \let\bmod\tmp
+\let\varemptyset\emptyset \let\emptyset\varnothing
+\let\tmp\epsilon \let\epsilon\varepsilon \let\varepsilon\tmp
+\let\tmp\phi \let\phi\varphi \let\varphi\tmp
+\newcommand{\base}[1]{\mathcal{#1}} % Base (caligraphic)
+\DeclareMathOperator{\im}{im} % Image
+\DeclareMathOperator{\id}{id} % Identity
+\DeclareMathOperator{\sel}{sel} % Selection
+\DeclareMathOperator{\dom}{dom} % Domain
+\DeclareMathOperator{\ran}{ran} % Range
+\DeclareMathOperator{\Hom}{Hom} % Homomorphism
+\DeclareMathOperator{\End}{End} % Endomorphism
+\renewcommand{\O}{\mathcal{O}} % asymptotic O-Notation (Landau)
+\DeclareMathOperator{\indeg}{indeg} % Indegree
+\DeclareMathOperator{\outdeg}{outdeg} % Outdegree
+\renewcommand{\P}{\ifdataminingstyle p\else\mathbf{P}\fi}
+\newcommand{\E}{\ifdataminingstyle\mathbb{E}\else\mathbf{E}\fi}
+\DeclareMathOperator{\var}{var}
+\DeclareMathOperator{\Var}{Var}
+\DeclareMathOperator{\cov}{cov}
+\DeclareMathOperator{\Cov}{Cov}
+\DeclareMathOperator{\Bin}{Bin}
+\DeclareMathOperator{\Exp}{Exp}
+\DeclareMathOperator{\Dir}{Dir}
+\DeclareMathOperator{\Mult}{Mult}
+\newcommand{\Normal}{\mathcal{N}}
+\newcommand{\Norm}{\Normal}
+\newcolumntype{L}{>{\(}l<{\)}}
+\newcolumntype{R}{>{\(}r<{\)}}
+\newcolumntype{C}{>{\(}c<{\)}}
+\newcounter{calculusRowCount}
+\RequirePackage{pgfkeys}
+\newenvironment{calculus}[1]{
+\pgfkeys{/mlu/calculus/.cd,show index=false,
+ context=\Gamma,context command=context,#1}
+\setcounter{calculusRowCount}{0}
+\newcommand{\calculusSymbol}{\text{
+ \sffamily\itshape\pgfkeysvalueof{/mlu/calculus/symbol}}}
+\newcommand{\calculusContext}{\ensuremath{
+ \pgfkeysvalueof{/mlu/calculus/context}}}
+\expandafter\let\csname \pgfkeysvalueof{/mlu/calculus/context command}%
+ \endcsname\calculusContext
+\par\vspace{0.5em}
+\begin{minipage}{\textwidth}\begin{tabular}{
+ @{\stepcounter{calculusRowCount}
+ (\arabic{calculusRowCount})\hspace{1em}} R
+ @{\hspace{0.4em}
+ \(
+ \vdash_{%
+ \ifthenelse{%
+ \equal{\pgfkeysvalueof{/mlu/calculus/show index}}{true}
+ }{
+ \ifthenelse{%
+ \equal{\pgfkeysvalueof{/mlu/calculus/symbol}}{}%
+ }{}{%
+ \calculusSymbol%
+ }%
+ }{%
+ \hspace{-0.1em}%
+ }%
+ }%
+ \)\hspace{0.6em}}
+ L l
+ }
+}{
+\end{tabular}\end{minipage}\vspace{0.5em}
+\let\calculusContext\undefined \let\calculusSymbol\undefined
+\expandafter\let\csname \pgfkeysvalueof{/mlu/calculus/context command}%
+ \endcsname\undefined
+}
+\newenvironment{eqcalc}[1][]{\begin{calculus}[
+ symbol=E,show index=true,context={\calculusSymbol_{#1}},
+ context command=E]}{\end{calculus}} % Equation calculus
+\newenvironment{seqcalc}{\begin{calculus}[
+ symbol=S,show index=true, context={\calculusSymbol},
+ context command=seq]}{\end{calculus}} % Sequence calculus
+\RequirePackage[vlined,linesnumbered]{algorithm2e}
+\DontPrintSemicolon % Hide semicolons.
+\SetKwProg{Function}{function}{\ is}{end function}
+\SetKwComment{Comment}{\quad\(\triangleright\)~}{} % Comment style.
+\SetCommentSty{itshape} % Comment font.
+\SetKw{Continue}{continue}
+\SetKwBlock{Repeat}{repeat}{}
+\SetNlSty{tiny}{}{} % Line number font.
+\SetNlSkip{0.5em} % Line number skip.
+\SetAlgoNlRelativeSize{0}
+\SetAlFnt{\footnotesize}
+\RequirePackage{listings}
+\RequirePackage{listingsutf8} % UTF8 support in included listings.
+\definecolor{lsnumber}{rgb}{0,0,0} % Zeilennummerfarbe
+\definecolor{lscomment}{rgb}{0.25,0.5,0.35} % Kommentarfarbe
+\definecolor{lskeyword}{rgb}{0.5,0,0.35} % Schl^^c3^^bcsselw^^c3^^b6rterfarbe
+\definecolor{lsstring}{rgb}{0.6,0,0} % Zeichenkettenfarbe
+\lstset{
+ language=C,
+ basicstyle=\ttfamily,
+ breakatwhitespace=false,
+ breaklines=true,
+ prebreak={\mbox{\footnotesize\(\hookleftarrow\)}},
+ numbers=left,
+ numberstyle=\color{lsnumber}\tiny,
+ numbersep=0.5em,
+ stepnumber=1,
+ commentstyle=\color{lscomment},
+ morecomment=[s][\color{lscomment}]{/**}{*/},
+ keepspaces=true,
+ keywordstyle=\bfseries\color{lskeyword},
+ stringstyle=\color{lsstring},
+ showtabs=false, showspaces=false,
+ showstringspaces=false,
+ tabsize=2,
+}
+\lstdefinelanguage[Zimmermann]{haskell}[]{haskell}{
+ escapeinside={*'}{'*},
+ showstringspaces=false,
+ morecomment=[l]\%,
+ captionpos=b,
+ emphstyle={\bfseries},
+}
+\lstalias[]{zhaskell}[Zimmermann]{haskell}
+\lstdefinestyle{haskell}{language=zhaskell}
+\lstdefinelanguage[Molitor]{Assembler}[x86masm]{Assembler}{
+ morekeywords={
+ ldd,sto,shl,shr,rol,ror,sub,add,shli,shri,roli,rori,
+ subi,addi,or,and,xor,xnor,jmp,beq,bneq,bgt,bo,ldpc,stpc
+ },
+ comment=[l]{\#},
+}
+\lstalias[]{massembler}[Molitor]{Assembler}
+\lstdefinestyle{massembler}{language=massembler}
+\RequirePackage{booktabs}
+\RequirePackage{graphicx}
+\RequirePackage{float}
+\RequirePackage{subcaption}
+\RequirePackage{tikz}
+\RequirePackage{pgfplots}
+\RequirePackage{rotating}
+\usetikzlibrary{positioning}
+\usetikzlibrary{automata}
+\usetikzlibrary{trees}
+\tikzset{
+ >=latex,
+ font=\sffamily,
+}
+\pgfplotsset{compat=1.16}
+\AtEndPreamble{
+ \setcounter{section}{\the\@task} \addtocounter{section}{-1}
+ \newcommand{\@exercisestring}{\IfGerman{%
+ \the\@exercise.~^^c3^^9cbungsserie}{Exercise~\the\@exercise}}
+ \ihead{\the\@studentname}
+ \chead{\textbf{\@exercisestring}}
+ \ohead{
+ \the\@studentnumber%
+ \ifthenelse{\equal{\the\@studentnumber}{} \OR
+ \equal{\the\@studentsymbol}{}}{}{\ /\,}%
+ \the\@studentsymbol%
+ }
+ \hypersetup{
+ pdfauthor={\the\@studentname},
+ pdftitle={\@exercisestring - \the\@lecture}
+ }
+}
+\endinput
+%%
+%% End of file `mluexercise.cls'.
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index db30bc57dc7..c3063ea6245 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -502,7 +502,7 @@ my @TLP_working = qw(
miniplot minitoc minorrevision
minted mintspirit minutes mismath missaali
mkgrkindex mkjobtexmf mkpattern mkpic
- mla-paper mlacls mleftright mlist
+ mla-paper mlacls mleftright mlist mluexercise
mmap mnotes mnras mnsymbol modeles-factures-belges-assocs
moderncv modernposter moderntimeline modes modiagram
modref modroman modular modulus
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index f18946ade55..d5c85cd6a9c 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -2892,6 +2892,7 @@ my $core_latex = "$Master/texmf-dist/tex/latex";
'mcmthesis' => 'tex', # requires interaction
'mversion' => 'latex', # requires interaction
'minitoc' => 'latex', # requires interaction and 1000q instead of 10q
+ 'mluexercise' => 'tex',
'mylatexformat'=> 'pdflatex',
'nameauth' => 'pdflatex-preserve-pdf',
'notespages' => 'latex', # requires interaction
@@ -4415,7 +4416,7 @@ sub runjob {
} else {
my $Jobid = "_$$";
chomp (my $PWD = `pwd`);
- &SYSTEM ("$job </dev/null >$PWD/$Jobid.log 2>&1");
+ &SYSTEM ("$job</dev/null >$PWD/$Jobid.log 2>&1"); # '\\end'
$status = $?;
local *TMP;
open (TMP, "$Jobid.log") || die "open($Jobid.log) failed: $!";
diff --git a/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc b/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc
index 0fe4f803bd8..fad43ec4f45 100644
--- a/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc
@@ -120,6 +120,7 @@ depend matc3mem
depend mcmthesis
depend mentis
depend mlacls
+depend mluexercise
depend mnras
depend modeles-factures-belges-assocs
depend msu-thesis
diff --git a/Master/tlpkg/tlpsrc/mluexercise.tlpsrc b/Master/tlpkg/tlpsrc/mluexercise.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/mluexercise.tlpsrc