summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-06-08 20:45:43 +0000
committerKarl Berry <karl@freefriends.org>2022-06-08 20:45:43 +0000
commitac30b2bebca651fc914289e669b791073d005a2c (patch)
treebb374ad6cee60bccab5a1784359d67e10be47459 /Master/texmf-dist
parentc08dcc67a64828f8274c8ef5eb89e378ea8496f6 (diff)
csassignments (8jun22)
git-svn-id: svn://tug.org/texlive/trunk@63517 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/latex/csassignments/README.md42
-rw-r--r--Master/texmf-dist/doc/latex/csassignments/csassignments.pdfbin0 -> 134810 bytes
-rw-r--r--Master/texmf-dist/source/latex/csassignments/csassignments.dtx686
-rw-r--r--Master/texmf-dist/source/latex/csassignments/csassignments.ins49
-rw-r--r--Master/texmf-dist/tex/latex/csassignments/csassignments.cls317
5 files changed, 1094 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/csassignments/README.md b/Master/texmf-dist/doc/latex/csassignments/README.md
new file mode 100644
index 00000000000..413c0ea74be
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/csassignments/README.md
@@ -0,0 +1,42 @@
+# csassignments
+
+This class file is designed for assignments of university courses, specifically
+in the field of computer science, but can easily be adapted to other fields. It
+provides macros for counting exercise points, adding a grading table, a helpful
+document title block including several non-standard information, and page
+headers with compressed author details.
+
+It supports German and English language by default, by requirement of the
+author's university.
+
+Additional to the layout utilities, the class provides several commonly used
+macros for computer science topics, namely several mathematical operators,
+mathmode utilities and special environments for proofs and theorem. Those are a
+condensed version of macros defined in <https://github.com/zoomoid/AlphabetClasses>.
+
+## User Guide
+
+Use the class like any default document class:
+
+```latex
+ \documentclass[<option>]{csassignments}
+
+ \course{}
+ \group{}
+ \due{}
+
+ \member{}{}{}
+ % ...
+
+ \begin{document}
+ \maketitle
+ \gradingtable
+
+ \exercise[<Exercise Points>]{<Exercise Title>}
+ \subexercise{}
+ \end{document}
+\end{verbatim}
+```
+
+Because it inherits from `article`, you can pass down any options that
+`article` understands.
diff --git a/Master/texmf-dist/doc/latex/csassignments/csassignments.pdf b/Master/texmf-dist/doc/latex/csassignments/csassignments.pdf
new file mode 100644
index 00000000000..43b113f3b8c
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/csassignments/csassignments.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/csassignments/csassignments.dtx b/Master/texmf-dist/source/latex/csassignments/csassignments.dtx
new file mode 100644
index 00000000000..1be6fcaf47c
--- /dev/null
+++ b/Master/texmf-dist/source/latex/csassignments/csassignments.dtx
@@ -0,0 +1,686 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2022 by Alexander Bartolomey
+% -------------------------------------------
+% MIT License
+%
+% Copyright (c) 2022
+%
+% 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.
+% \fi
+% \iffalse
+%<*driver>
+\ProvidesFile{csassignments.dtx}
+%</driver>
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{csassignments}[2022/06/01 v1.0.0 Assignments Class for CS]
+% \end{macrocode}
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{mathtools}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{url}
+\usepackage{helvet}
+\renewcommand{\familydefault}{\sfdefault}
+\begin{document}
+ \DocInput{csassignments.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+% \fi
+%
+% \CheckSum{574}
+%
+% \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.0}{2022/06/01}{Publish class with documentation}
+% \changes{v1.0.1}{2022/06/07}{Rename class to not collide with existing assignments class}
+%
+% \GetFileInfo{csassignments.cls}
+%
+% \title{The \texttt{csassignments} class}
+% \date{}
+% \author{Alexander Bartolomey}
+% \maketitle
+% \tableofcontents
+%
+% \StopEventually{} ^^A
+%
+% \section{Introduction}
+%
+% This class file is designed for assignments of university courses, specifically
+% in the field of computer science, but can easily be adapted to other fields. It
+% provides macros for counting exercise points, adding a grading table, a helpful
+% document title block including several non-standard information, and page
+% headers with compressed author details.
+%
+% It supports German and English language by default, by requirement of the
+% author's university.
+%
+% Additional to the layout utilities, the class provides several commonly used
+% macros for computer science topics, namely several mathematical operators,
+% mathmode utilities and special environments for proofs and theorem. Those are a
+% condensed version of macros defined in
+% \url{https://github.com/zoomoid/AlphabetClasses}.
+%
+% \section{Getting Started}
+%
+% Use the class like any default document class
+%
+% \begin{verbatim}
+% \documentclass[<option>]{csassignments}
+%
+% \course{}
+% \group{}
+% \due{}
+%
+% \member{}{}{}
+% % ...
+%
+% \begin{document}
+% \maketitle
+% \gradingtable
+%
+% \exercise[<Exercise Points>]{<Exercise Title>}
+% \subexercise{}
+% \end{document}
+% \end{verbatim}
+%
+% Because it inherits from \texttt{article}, you can pass down any options that
+% \texttt{article} understands.
+%
+% \section{Initial Code}
+% First, we define the document class and set some initial lengths.
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions\relax
+\LoadClass[a4paper,11pt]{article}
+\makeatletter
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{0.6em}
+% \end{macrocode}
+%
+% \section{Required Packages}
+%
+% Notably, the class introduces several dependencies. Here's a list of the
+% packages required by \texttt{csassignments}:
+%
+% \begin{description}
+% \item[geometry] \texttt{CTAN:macros/latex/contrib/geometry}
+% \item[inputenc] \texttt{CTAN:macros/latex/base}
+% \item[babel] \texttt{CTAN:macros/latex/required/babel/base}
+% \item[titlesec] \texttt{CTAN:macros/latex/contrib/titlesec}
+% \item[enumitem] \texttt{CTAN:macros/latex/contrib/enumitem}
+% \item[tocloft] \texttt{CTAN:macros/latex/contrib/tocloft}
+% \item[float] \texttt{CTAN:macros/latex/contrib/float}
+% \item[ifthen] \texttt{CTAN:macros/latex/base}
+% \item[translations] \texttt{CTAN:macros/latex/contrib/translations}
+% \item[csquotes] \texttt{CTAN:macros/latex/contrib/csquotes}
+% \item[fancyhdr] \texttt{CTAN:macros/latex/contrib/fancyhdr}
+% \item[microtype] \texttt{CTAN:macros/latex/contrib/microtype}
+% \item[stmaryrd] \texttt{CTAN:fonts/stmaryrd}
+% \item[graphicx] \texttt{CTAN:macros/latex/required/graphics}
+% \item[pdfpages] \texttt{CTAN:macros/latex/contrib/pdfpages}
+% \item[hyperref] \texttt{CTAN:macros/latex/contrib/hyperref}
+% \item[tikz] \texttt{CTAN:graphics/pgf/base}
+% \item[microtype] \texttt{CTAN:macros/latex/contrib/microtype}
+% \item[amsmath] \texttt{CTAN:macros/latex/required/amsmath}
+% \item[amsthm] \texttt{CTAN:macros/latex/required/amscls}
+% \item[amssymb] \texttt{CTAN:macros/latex/required/amscls}
+% \item[mathtools] \texttt{CTAN:macros/latex/contrib/mathtools}
+% \item[totcount] \texttt{CTAN:macros/latex/contrib/totcount}
+% \item[changepage] \texttt{CTAN:macros/latex/contrib/changepage}
+% \item[etoolbox] \texttt{CTAN:macros/latex/contrib/etoolbox}
+% \item[environ] \texttt{CTAN:macros/latex/contrib/environ}
+% \item[multicol] \texttt{CTAN:macros/latex/required/tools}
+% \item[tgpagella] \texttt{CTAN:fonts/tex-gyre}
+% \item[suffix] \texttt{CTAN:macros/latex/contrib/bigfoot}
+% \end{description}
+%
+% \begin{macrocode}
+\RequirePackage[left=2.5cm,right=2.5cm,top=2cm,bottom=2cm,
+ includeheadfoot]{geometry}
+\RequirePackage[utf8]{inputenc}
+\RequirePackage[english]{babel}
+\RequirePackage{titlesec}
+\RequirePackage{enumitem}
+\RequirePackage{graphicx}
+\RequirePackage{tocloft}
+\RequirePackage{float}
+\RequirePackage{ifthen}
+\RequirePackage{translations}
+\RequirePackage{csquotes}
+\RequirePackage{fancyhdr}
+\RequirePackage{microtype}
+\RequirePackage{stmaryrd}
+\RequirePackage{pdfpages}
+\RequirePackage[hidelinks, unicode]{hyperref}
+\RequirePackage{tikz}
+\RequirePackage{microtype}
+\RequirePackage[fleqn]{amsmath}
+\RequirePackage{amsthm}
+\RequirePackage{amssymb}
+\RequirePackage{mathtools}
+\RequirePackage{totcount}
+\RequirePackage{changepage}
+\RequirePackage{etoolbox}
+\RequirePackage{environ}
+\RequirePackage{multicol}
+\RequirePackage{tgpagella}
+\RequirePackage{suffix}
+\usetikzlibrary{arrows,calc}
+% \end{macrocode}
+%
+% \section{Translations}
+% \texttt{csassignments} comes with several predefined prefixes that are localized in both
+% English and German:
+% \begin{macrocode}
+\DeclareLanguage{english}
+\DeclareLanguage{german}
+\select@language{english}
+\ProvideTranslation{german}{prefixAuthor}{Eingereicht von}
+\ProvideTranslation{english}{prefixAuthor}{Handed in by}
+\ProvideTranslationFallback{prefixAuthor}{Handed in by}
+\ProvideTranslation{german}{prefixDate}{am}
+\ProvideTranslation{english}{prefixDate}{on}
+\ProvideTranslationFallback{prefixDate}{on}
+\ProvideTranslation{ngerman}{exercise}{Aufgabe}
+\ProvideTranslation{english}{exercise}{Exercise}
+\ProvideTranslationFallback{exercise}{Exercise}
+\ProvideTranslation{ngerman}{exerciseAbbrev}{Aufg.}
+\ProvideTranslation{english}{exerciseAbbrev}{Ex.}
+\ProvideTranslationFallback{exerciseAbbrev}{Ex.}
+\ProvideTranslation{ngerman}{subexercise}{Teilaufgabe}
+\ProvideTranslation{english}{subexercise}{Subexercise}
+\ProvideTranslationFallback{subexercise}{Subexercise}
+\ProvideTranslation{ngerman}{points}{Punkte}
+\ProvideTranslation{english}{points}{Points}
+\ProvideTranslationFallback{points}{Points}
+\ProvideTranslation{ngerman}{sheet}{Abgabe}
+\ProvideTranslation{english}{sheet}{Exercise Sheet}
+\ProvideTranslationFallback{sheet}{Exercise Sheet}
+\ProvideTranslation{ngerman}{studentId}{Matr.Nr.}
+\ProvideTranslation{english}{studentId}{Student ID}
+\ProvideTranslationFallback{studentId}{Student ID}
+% \end{macrocode}
+%
+% \section{Grouping Exercises}
+% To support the grading table, we need to initialize several counters for both counting up
+% the awarded points of exercises but also for labels of exercises and subexercises.
+% \begin{macrocode}
+\newtotcounter{exercisenumber}
+\newtotcounter{subexercisenumber}
+\newtotcounter{totalpoints}
+\edef\exerciseLabelGradingTable{}
+\edef\gradingTableExercisePoints{}
+\edef\PTableA{}
+\edef\PTableB{}
+\edef\PTHead{}
+\newcommand{\@addPT}[2]{
+ \edef\gradingTableExerciseLabel{\GetTranslation{exerciseAbbrev} #1 &}
+ \edef\gradingTableExercisePoints{\qquad / $#2$ &}
+ \xappto\PTableA{\gradingTableExerciseLabel}
+ \xappto\PTableB{\gradingTableExercisePoints}
+ \xappto\PTHead{c | }
+}
+% \end{macrocode}
+% \begin{macro}{\gradingtable}
+% You can toggle the displaying of the grading table by adding \cmd{\gradingtable} at some point
+% in your document before the first exercise. It requires the compiler to run twice, in order
+% expand the control sequence created on the first run, where exercise labels and points were
+% appended in order to be combined in a subsequent run.
+% \begin{macrocode}
+\newcommand{\gradingtable}{%
+ \ifdef{\PTHeadSaved}{%
+ {\Large\bfseries Grading Table}\\%
+ \begin{table}[h!]
+ \renewcommand\arraystretch{2}%
+ \begin{tabular}{\expandonce{\PTHeadSaved} c}
+ \PTableASaved {\Large$\Sigma$}\\ \hline
+ \PTableBSaved \qquad / $\totalpointsSaved$
+ \end{tabular}
+ \renewcommand{\arraystretch}{1}%
+ \end{table}
+ }{\texttt{Compile again}\ClassWarning{Compile again to properly
+ display grading table}}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\exercise}
+% \begin{macro}{\exercise*}
+% On top-level, assignments consist of one or more exercise. The
+% \cmd{\exercise}\oarg{exercise points}\marg{exercise title} macro provides a
+% numbered section title for your assignment. The mandatory argument should
+% contain the exercise's title which is then included in the section title, or
+% be left blank, in which case nothing is appended to the exercise title. The
+% optional argument contains the points rewarded for the exercise in total.
+%
+% Exercise points are added up in the first run of pdflatex (or your TeX
+% backend of choice) and written to the auxilliary file. On the second run,
+% the grading table is added to the top of the document, by inclusion of the
+% points stored in the first run. \textbf{This is the reason csassignments
+% requires two or more runs when used with the grading table}.
+%
+% If you do not specify points, that is, leave the optional argument field
+% empty, the awarded points for the exercise will be set to zero, but the
+% exercise will not be included in the grading table.
+%
+% If you do not specify a title, no empty parentheses are printed.
+%
+% Using the starred version of the exercise command will allow you to
+% explicitly exclude exercise from the grading table (similar to
+% \cmd{section*}\marg{section title} not being included in the table of
+% contents). Note that you can set points on explicitly excluded exercises.
+% The exercise will not count towards the total number of points, but the
+% points for the exercise will still be included in the right column of the
+% exercise's title line. This might be particularly helpful for modelling
+% bonus exercises.
+% \begin{macrocode}
+\newcommand{\@pointsPerExercise}[1]{
+ \ifstrempty{#1}{}{{\quad\large\bfseries/#1 \GetTranslation{points}}}
+}
+\newcommand{\@exerciseLabel}[1]{
+ \quad\ifstrempty{#1}{}{\bfseries(#1)}
+}
+\newcommand\exercise[2][]{
+ \penalty150
+ \ifblank{#1}{\def\points{0}}{\def\points{#1}}
+ \stepcounter{exercisenumber}
+ \setcounter{subexercisenumber}{0}
+ \par
+ \vspace{1.5\baselineskip}
+ {
+ {\Large\bfseries\GetTranslation{exercise}\ \arabic{exercisenumber}}
+ \@exerciseLabel{#2}
+ \@exerciseRules
+ \notblank{#1}{\@pointsPerExercise{#1}}{}
+ }
+ \par
+ \notblank{#1}{
+ \addtocounter{totalpoints}{\points}
+ \@addPT{\arabic{exercisenumber}}{\points}
+ }{}
+}
+\WithSuffix\newcommand\exercise*[2][]{
+ \penalty150
+ \ifblank{#1}{\def\points{0}}{\def\points{#1}}
+ \stepcounter{exercisenumber}
+ \setcounter{subexercisenumber}{0}
+ \par
+ \vspace{1.5\baselineskip}
+ {
+ {\Large\bfseries\GetTranslation{exercise}\ \arabic{exercisenumber}}
+ \@exerciseLabel{#2}
+ \@exerciseRules
+ \notblank{#1}{\@pointsPerExercise{#1}}{}
+ }
+ \par
+ \addtocounter{totalpoints}{\points}
+}
+\AtEndDocument{
+ \makeatletter
+ \immediate\write\@mainaux{\string\gdef\string\PTableASaved{\PTableA}}
+ \immediate\write\@mainaux{\string\gdef\string\PTableBSaved{\PTableB}}
+ \immediate\write\@mainaux{\string\gdef\string\PTHeadSaved{\PTHead}}
+ \immediate\write\@mainaux{\string\gdef\string\totalpointsSaved%
+ {\arabic{totalpoints}}}
+ \makeatother
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\subexercise}
+% Subexercises are the subsection to section equivalent for exercises. In fact,
+% their counters behave the same way as subsection counters do.
+% \cmd{\subexercise}\oarg{Subexercise title} will make a new subexercise under the
+% current exercise. Note that point counting for subexercises is not supported.
+% Rather, points are only awarded on the exercise level. Therefore, subexercises
+% are rather semantical for the exercise's reading flow.
+% \begin{macrocode}
+\newcommand{\subexercise}[1][]{
+ \penalty150
+ \stepcounter{subexercisenumber}
+ \par
+ \vspace{0.5\baselineskip}
+ {
+ {\bfseries\GetTranslation{subexercise}\ (\alph{subexercisenumber})}
+ \quad\ifstrempty{#1}{}{(#1)}
+ \@subexerciseRules
+ }
+ \par
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\def\Vhrulefill{\leavevmode\leaders\hrule height 0.7ex depth
+\dimexpr0.4pt-0.7ex\hfill\kern0pt}
+% \end{macrocode}
+% \begin{macro}{\exerciseRules}
+% \begin{macro}{\subexerciseRules}
+% To add line-spanning horizontal rules between exercises and subexercises,
+% respectively, for better visual separation, add \cmd{\exerciseRules} add some
+% point in the document before the first exercise.
+% \begin{macrocode}
+\newcommand{\exerciseRules}{
+ \renewcommand{\@exerciseRules}{\hspace{1em}\Vhrulefill} }
+ \newcommand{\subexerciseRules}{
+ \renewcommand{\@subexerciseRules}{\hspace{0em}\Vhrulefill} }
+\newcommand{\@exerciseRules}{}
+\newcommand{\@subexerciseRules}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\noPoints}
+% To remove points and grading entirely from the
+% document, add \cmd{\noPoints} at some point in the document before the first
+% exercise. This overwrites the grading table macro and defines the exercise
+% command to not count points.
+% \begin{macrocode}
+\newcommand{\nopoints}{
+ \renewcommand{\@pointsPerExercise}{}
+ \renewcommand{\gradingtable}{}
+ \renewcommand{\exercise}{\@exerciseNoPoints}
+}
+\newcommand{\@exerciseNoPoints}[1]{
+ \def\points{0}
+ \stepcounter{exercisenumber}
+ \setcounter{subexercisenumber}{0}
+ \par
+ \vspace{1.5\baselineskip}
+ { {\Large\bfseries\GetTranslation{exercise}\ \arabic{exercisenumber}}
+ \@exerciseLabel{#1} \@exerciseRules }
+ \par
+}
+% \end{macrocode}
+% \end{macro}
+% \section{Document Title}
+% The \texttt{csassignments} class offers several customizations to the default title of article.
+% Namely, we can omit the default fields \cmd{\title}, \cmd{\author}, and \cmd{\date}, and
+% replace them with something more fitting to an assignment:
+% \begin{macrocode}
+\newcommand{\@course}{Assignment}
+\newcommand{\@sheet}{}
+\newcommand{\@group}{}
+\newcommand{\@prefixId}{\GetTranslation{studentId} }
+\newcommand{\@members}{}
+\newcommand{\@member}[2][]%
+ {\notblank{#1}{#2, \notblank{#1}{\@prefixId{#1}}{} \\}{#2}}
+\newcommand{\@due}{}
+\newcommand{\@prefixAuthor}{\GetTranslation{prefixAuthor}}
+\newcommand{\@prefixDate}{\GetTranslation{prefixDate}}
+% \end{macrocode}
+% \begin{macro}{\course}
+% \begin{macro}{\sheet}
+% \begin{macro}{\group}
+% \begin{macro}{\due}
+% \begin{macro}{\member}
+% Course name with \cmd{\course}\marg{Course}, sheet number with \cmd{\sheet}\marg{sheet number},
+% group name with \cmd{\group}\marg{group name}, due date with \cmd{\due}\marg{due date},
+% and all members of the group with repeated \cmd{\member}\oarg{student id}\marg{name}.
+% \begin{macrocode}
+\newcommand{\course}[1]{\expandafter\notblank\expandafter{#1}%
+ {\def\@course{#1}}{}}
+\newcommand{\sheet}[1]{\def\@sheet{\GetTranslation{sheet} #1}}
+\newcommand{\group}[1]{\renewcommand{\@group}{#1}}
+\newcommand{\due}[1]{\renewcommand{\@due}{#1}}
+\newcommand{\member}[2][]{
+ \expandafter\renewcommand\expandafter\@members\expandafter
+ {\@members\@member[#1]{#2}}
+ \expandafter\renewcommand\expandafter\pdfmembers\expandafter
+ {\pdfmembers\pdfmember[#1]{#2}}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\PrefixId}
+% \begin{macro}{\PrefixAuthor}
+% \begin{macro}{\PrefixDate}
+% Additionally, you can redefine the prefixes prepended to the individual parts of the title, for example,
+% the default (english) prefix for the members line in the title block is ``Handed in by'', which you can
+% replace by using \cmd{\PrefixDate}\marg{custom due date prefix}.
+% \begin{macrocode}
+\newcommand{\PrefixId}[1]{\renewcommand{\@prefixId}{#1}}
+\newcommand{\PrefixAuthor}[1]{\renewcommand{\@prefixAuthor}{#1}}
+\newcommand{\PrefixDate}[1]{\renewcommand{\@prefixDate}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\renewcommand{\and}{\\}
+\renewcommand{\maketitle}{
+ \thispagestyle{empty}
+ {\bfseries\Huge\@course}
+ \par
+ \expandafter\notblank\expandafter\@sheet{{\LARGE\@sheet\\}}{}
+ \par
+ \expandafter\notblank\expandafter\@members{
+ {\footnotesize\bfseries\@prefixAuthor}\\
+ \hspace*{4pt}{\large{\vspace*{4pt}\begin{tabular}[t]{@{}l}
+ \@members
+ \end{tabular}}}\\
+ }{}
+ \expandafter\notblank\expandafter\@due{
+ {\footnotesize\bfseries\@prefixDate}\\
+ \vspace*{4pt}{\hspace*{4pt}{\large\@due}}\\
+ }{}
+ \vskip \baselineskip
+ \pagestyle{fancy}
+}
+\renewcommand{\headrulewidth}{1pt}
+\setlength\headheight{4\baselineskip}
+\rhead{
+ \begin{tabular}{r}
+ \textbf{\@course} \\
+ \@sheet \\
+ {\small\@due}
+ \end{tabular}
+}
+\lhead{
+ \small{%
+ \begin{tabular}{l}
+ \@members
+ \end{tabular}%
+ }
+ }
+% \end{macrocode}
+%
+% Lastly, the class handles PDF metadata creation using \texttt{hyperref} from the provided
+% macros, i.e., \cmd{\course}, \cmd{\group} etc.
+% \begin{macrocode}
+\newcommand{\@pdfauthorprefix}{\expandafter\notblank\expandafter%
+ {\@group}{Group \@group: }{}\relax}
+\newcommand{\pdfmembers}{}
+\newcommand{\pdfmember}[2][]{\expandafter\notblank\expandafter%
+ {#1}{#2, {#1};}{#2}}
+\AtBeginDocument{\hypersetup{
+ pdftitle = {\texorpdfstring{Assignment \@sheet}{}},
+ pdfauthor = {\texorpdfstring{\@pdfauthorprefix\pdfmembers}{}},
+ pdfsubject = {\texorpdfstring{\@course}{}}
+}}
+% \end{macrocode}
+%
+% \section{Math Helpers}
+%
+% \texttt{csassignments} includes several frequently used macros for mathmode, that were,
+% and still are, helpful with assignment work during several computer science courses.
+% Most of them were originally created in one of the \textsc{AlphabetClasses} packages,
+% which featured a lot more definitions.
+%
+% This class only contains a condensed version of them:
+%
+% \begin{macro}{\N}
+% \begin{macro}{\Z}
+% \begin{macro}{\R}
+% \begin{macro}{\Q}
+% \begin{macro}{\C}
+% \begin{macro}{\F}
+% \begin{macro}{\primefield}
+% These macros define common number spaces and fields as double font in mathmode. Notably,
+% \cmd{\primefield} makes a double-printed P, as notation for an arbitrary prime field.
+% \begin{macrocode}
+\newcommand{\N}{\ensuremath{\mathbf{N}}}
+\newcommand{\Z}{\ensuremath{\mathbf{Z}}}
+\newcommand{\R}{\ensuremath{\mathbf{R}}}
+\newcommand{\Q}{\ensuremath{\mathbf{Q}}}
+\newcommand{\C}{\ensuremath{\mathbf{C}}}
+\newcommand{\F}{\ensuremath{\mathbb{F}}}
+\newcommand{\primefield}{\ensuremath{\mathbb{P}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\modring}
+% Denoting a ring of integers modulo \(n\) is easily done in short notation with \cmd{\modring},
+% see \(\mathbb{Z}/\!n\:\), which even works in regular text due to custom trailing spacing.
+% \begin{macrocode}
+\newcommand{\modring}[2]{#1/\!#2\:}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\derivative}
+% The \cmd{\derivative}\marg{variable} prints a typical \(\frac{d}{dx}\) as a shorthand macro.
+% Notably it is not even shorter than the explicit fracture, it is just a convenience macro created
+% at a time when writing \LaTeX for assignments was supported by semantic macros (a thing \LaTeX
+% clearly lacks).
+% \begin{macrocode}
+\newcommand{\derivative}[1]{\ensuremath{\frac{d}{d#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\matadd}
+% \begin{macro}{\matmul}
+% \begin{macro}{\matswap}
+% These macros are helpful when visualizing matrix operations, namely addition of rows,
+% scalar multiplication of a row, and swapping of rows. Arguments of the macros are identical
+% to the group operation's parameter.
+% \begin{macrocode}
+\newcommand{\matadd}[3]{\ensuremath{\xmapsto{\mathrm{add}_{#1,#2,#3}}}}
+\newcommand{\matmul}[2]{\ensuremath{\xmapsto{\mathrm{mul}_{#1,#2}}}}
+\newcommand{\matswap}[2]{\ensuremath{\xmapsto{\mathrm{sw}_{#1,#2}}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\forall}
+% \begin{macro}{\exists}
+% To make logic quantors look a bit better, we redefine the ``for all'' and ``exists'' quantors with
+% a bit more horizontal space left and right
+% \begin{macrocode}
+\renewcommand{\forall}{\ensuremath{\hskip 2pt \oforall \hskip 2pt}}
+\renewcommand{\exists}{\ensuremath{\hskip 2pt \oexists \hskip 2pt}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\floor}
+% \begin{macro}{\ceil}
+% \begin{macro}{\abs}
+% These are some commonly used mathematical functions, that is, rounding up or down,
+% and the absolute function of a value.
+% \begin{macrocode}
+\newcommand{\ceil}[1]{\ensuremath{\left\lceil #1 \right \rceil}}
+\newcommand{\floor}[1]{\ensuremath{\left\lfloor #1 \right \rfloor}}
+\newcommand{\abs}[1]{\ensuremath{\left\vert#1\right\vert}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rfrac}
+% For inline math, regular fractions tend to either stretch the line height,
+% resulting in optical heterogeneity of multiple lines, or setting the letters
+% in the fraction so small that they become unreadable. For small, inline fractions,
+% \cmd{\rfrac}\marg{numerator}\marg{denominator} offers a less optically noisy option,
+% by setting the numerator and denominator in a diagonal arrangement, rahter than purely
+% vertical. Here are some examples: \({}^{1}\!/_{n}\), \({}^{2n}\!/_{k}\), \({}^{100}\!/_{4}\).
+% \begin{macrocode}
+\newcommand{\rfrac}[2]{{}^{#1}\!/_{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mod}
+% The macro defines the usual modulus function with a bit of extra space to the left and right.
+% \begin{macrocode}
+\renewcommand{\mod}{\ \mathrm{mod}\ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rel}
+% To make a new, arbitrary relation, that is, a symbol for with \texttt{amsmath} ensures horizontal
+% space left and right using \cmd{\mathrel}
+% \begin{macrocode}
+\newcommand{\rel}[1]{\ensuremath{\mathrel{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\QED}
+% Ending a proof the way tought at RWTH Aachen University, with a square flushed to the right of
+% the line, can be done by simply adding \cmd{\QED}.
+% Note however that it is semantically more elegant to use \texttt{amsthm} with either predefined
+% \texttt{proof} environment, or any custom environment, as these usually also handle adding a label
+% to the block, e.g., ``\textbf{Proof}.'' or ``\textbf{Lemma}''.
+% \begin{macrocode}
+\newcommand{\QED}{\hfill\(\square\)}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\newtheoremstyle{it}{3pt}{3pt}{}{}{\itshape}{:}{.5em}{}
+\theoremstyle{it}
+% \end{macrocode}
+% \begin{macrocode}
+\makeatother
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput
diff --git a/Master/texmf-dist/source/latex/csassignments/csassignments.ins b/Master/texmf-dist/source/latex/csassignments/csassignments.ins
new file mode 100644
index 00000000000..32146a108d2
--- /dev/null
+++ b/Master/texmf-dist/source/latex/csassignments/csassignments.ins
@@ -0,0 +1,49 @@
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+
+-------------------------------------------------------------------
+ LICENCE
+-------------------------------------------------------------------
+
+This is a generated file.
+
+MIT License
+
+Copyright (C) 2022 by Alexander Bartolomey
+
+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
+
+This work consists of the source files:
+ - csassignments.dtx (documented LaTeX file)
+ - csassignments.ins (installer)
+
+\endpreamble
+\generate{\file{csassignments.cls}{\from{csassignments.dtx}{cls}}}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space csassignments.cls}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile
diff --git a/Master/texmf-dist/tex/latex/csassignments/csassignments.cls b/Master/texmf-dist/tex/latex/csassignments/csassignments.cls
new file mode 100644
index 00000000000..53b13a3139e
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/csassignments/csassignments.cls
@@ -0,0 +1,317 @@
+%%
+%% This is file `csassignments.cls',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% csassignments.dtx (with options: `cls')
+%%
+%% -------------------------------------------------------------------
+%% LICENCE
+%% -------------------------------------------------------------------
+%%
+%% This is a generated file.
+%%
+%% MIT License
+%%
+%% Copyright (C) 2022 by Alexander Bartolomey
+%%
+%% 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
+%%
+%% This work consists of the source files:
+%% - csassignments.dtx (documented LaTeX file)
+%% - csassignments.ins (installer)
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{csassignments}[2022/06/01 v1.0.0 Assignments Class for CS]
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions\relax
+\LoadClass[a4paper,11pt]{article}
+\makeatletter
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{0.6em}
+\RequirePackage[left=2.5cm,right=2.5cm,top=2cm,bottom=2cm,
+ includeheadfoot]{geometry}
+\RequirePackage[utf8]{inputenc}
+\RequirePackage[english]{babel}
+\RequirePackage{titlesec}
+\RequirePackage{enumitem}
+\RequirePackage{graphicx}
+\RequirePackage{tocloft}
+\RequirePackage{float}
+\RequirePackage{ifthen}
+\RequirePackage{translations}
+\RequirePackage{csquotes}
+\RequirePackage{fancyhdr}
+\RequirePackage{microtype}
+\RequirePackage{stmaryrd}
+\RequirePackage{pdfpages}
+\RequirePackage[hidelinks, unicode]{hyperref}
+\RequirePackage{tikz}
+\RequirePackage{microtype}
+\RequirePackage[fleqn]{amsmath}
+\RequirePackage{amsthm}
+\RequirePackage{amssymb}
+\RequirePackage{mathtools}
+\RequirePackage{totcount}
+\RequirePackage{changepage}
+\RequirePackage{etoolbox}
+\RequirePackage{environ}
+\RequirePackage{multicol}
+\RequirePackage{tgpagella}
+\RequirePackage{suffix}
+\usetikzlibrary{arrows,calc}
+\DeclareLanguage{english}
+\DeclareLanguage{german}
+\select@language{english}
+\ProvideTranslation{german}{prefixAuthor}{Eingereicht von}
+\ProvideTranslation{english}{prefixAuthor}{Handed in by}
+\ProvideTranslationFallback{prefixAuthor}{Handed in by}
+\ProvideTranslation{german}{prefixDate}{am}
+\ProvideTranslation{english}{prefixDate}{on}
+\ProvideTranslationFallback{prefixDate}{on}
+\ProvideTranslation{ngerman}{exercise}{Aufgabe}
+\ProvideTranslation{english}{exercise}{Exercise}
+\ProvideTranslationFallback{exercise}{Exercise}
+\ProvideTranslation{ngerman}{exerciseAbbrev}{Aufg.}
+\ProvideTranslation{english}{exerciseAbbrev}{Ex.}
+\ProvideTranslationFallback{exerciseAbbrev}{Ex.}
+\ProvideTranslation{ngerman}{subexercise}{Teilaufgabe}
+\ProvideTranslation{english}{subexercise}{Subexercise}
+\ProvideTranslationFallback{subexercise}{Subexercise}
+\ProvideTranslation{ngerman}{points}{Punkte}
+\ProvideTranslation{english}{points}{Points}
+\ProvideTranslationFallback{points}{Points}
+\ProvideTranslation{ngerman}{sheet}{Abgabe}
+\ProvideTranslation{english}{sheet}{Exercise Sheet}
+\ProvideTranslationFallback{sheet}{Exercise Sheet}
+\ProvideTranslation{ngerman}{studentId}{Matr.Nr.}
+\ProvideTranslation{english}{studentId}{Student ID}
+\ProvideTranslationFallback{studentId}{Student ID}
+\newtotcounter{exercisenumber}
+\newtotcounter{subexercisenumber}
+\newtotcounter{totalpoints}
+\edef\exerciseLabelGradingTable{}
+\edef\gradingTableExercisePoints{}
+\edef\PTableA{}
+\edef\PTableB{}
+\edef\PTHead{}
+\newcommand{\@addPT}[2]{
+ \edef\gradingTableExerciseLabel{\GetTranslation{exerciseAbbrev} #1 &}
+ \edef\gradingTableExercisePoints{\qquad / $#2$ &}
+ \xappto\PTableA{\gradingTableExerciseLabel}
+ \xappto\PTableB{\gradingTableExercisePoints}
+ \xappto\PTHead{c | }
+}
+\newcommand{\gradingtable}{%
+ \ifdef{\PTHeadSaved}{%
+ {\Large\bfseries Grading Table}\\%
+ \begin{table}[h!]
+ \renewcommand\arraystretch{2}%
+ \begin{tabular}{\expandonce{\PTHeadSaved} c}
+ \PTableASaved {\Large$\Sigma$}\\ \hline
+ \PTableBSaved \qquad / $\totalpointsSaved$
+ \end{tabular}
+ \renewcommand{\arraystretch}{1}%
+ \end{table}
+ }{\texttt{Compile again}\ClassWarning{Compile again to properly
+ display grading table}}
+}
+\newcommand{\@pointsPerExercise}[1]{
+ \ifstrempty{#1}{}{{\quad\large\bfseries/#1 \GetTranslation{points}}}
+}
+\newcommand{\@exerciseLabel}[1]{
+ \quad\ifstrempty{#1}{}{\bfseries(#1)}
+}
+\newcommand\exercise[2][]{
+ \penalty150
+ \ifblank{#1}{\def\points{0}}{\def\points{#1}}
+ \stepcounter{exercisenumber}
+ \setcounter{subexercisenumber}{0}
+ \par
+ \vspace{1.5\baselineskip}
+ {
+ {\Large\bfseries\GetTranslation{exercise}\ \arabic{exercisenumber}}
+ \@exerciseLabel{#2}
+ \@exerciseRules
+ \notblank{#1}{\@pointsPerExercise{#1}}{}
+ }
+ \par
+ \notblank{#1}{
+ \addtocounter{totalpoints}{\points}
+ \@addPT{\arabic{exercisenumber}}{\points}
+ }{}
+}
+\WithSuffix\newcommand\exercise*[2][]{
+ \penalty150
+ \ifblank{#1}{\def\points{0}}{\def\points{#1}}
+ \stepcounter{exercisenumber}
+ \setcounter{subexercisenumber}{0}
+ \par
+ \vspace{1.5\baselineskip}
+ {
+ {\Large\bfseries\GetTranslation{exercise}\ \arabic{exercisenumber}}
+ \@exerciseLabel{#2}
+ \@exerciseRules
+ \notblank{#1}{\@pointsPerExercise{#1}}{}
+ }
+ \par
+ \addtocounter{totalpoints}{\points}
+}
+\AtEndDocument{
+ \makeatletter
+ \immediate\write\@mainaux{\string\gdef\string\PTableASaved{\PTableA}}
+ \immediate\write\@mainaux{\string\gdef\string\PTableBSaved{\PTableB}}
+ \immediate\write\@mainaux{\string\gdef\string\PTHeadSaved{\PTHead}}
+ \immediate\write\@mainaux{\string\gdef\string\totalpointsSaved%
+ {\arabic{totalpoints}}}
+ \makeatother
+}
+\newcommand{\subexercise}[1][]{
+ \penalty150
+ \stepcounter{subexercisenumber}
+ \par
+ \vspace{0.5\baselineskip}
+ {
+ {\bfseries\GetTranslation{subexercise}\ (\alph{subexercisenumber})}
+ \quad\ifstrempty{#1}{}{(#1)}
+ \@subexerciseRules
+ }
+ \par
+}
+\def\Vhrulefill{\leavevmode\leaders\hrule height 0.7ex depth
+\dimexpr0.4pt-0.7ex\hfill\kern0pt}
+\newcommand{\exerciseRules}{
+ \renewcommand{\@exerciseRules}{\hspace{1em}\Vhrulefill} }
+ \newcommand{\subexerciseRules}{
+ \renewcommand{\@subexerciseRules}{\hspace{0em}\Vhrulefill} }
+\newcommand{\@exerciseRules}{}
+\newcommand{\@subexerciseRules}{}
+\newcommand{\nopoints}{
+ \renewcommand{\@pointsPerExercise}{}
+ \renewcommand{\gradingtable}{}
+ \renewcommand{\exercise}{\@exerciseNoPoints}
+}
+\newcommand{\@exerciseNoPoints}[1]{
+ \def\points{0}
+ \stepcounter{exercisenumber}
+ \setcounter{subexercisenumber}{0}
+ \par
+ \vspace{1.5\baselineskip}
+ { {\Large\bfseries\GetTranslation{exercise}\ \arabic{exercisenumber}}
+ \@exerciseLabel{#1} \@exerciseRules }
+ \par
+}
+\newcommand{\@course}{Assignment}
+\newcommand{\@sheet}{}
+\newcommand{\@group}{}
+\newcommand{\@prefixId}{\GetTranslation{studentId} }
+\newcommand{\@members}{}
+\newcommand{\@member}[2][]%
+ {\notblank{#1}{#2, \notblank{#1}{\@prefixId{#1}}{} \\}{#2}}
+\newcommand{\@due}{}
+\newcommand{\@prefixAuthor}{\GetTranslation{prefixAuthor}}
+\newcommand{\@prefixDate}{\GetTranslation{prefixDate}}
+\newcommand{\course}[1]{\expandafter\notblank\expandafter{#1}%
+ {\def\@course{#1}}{}}
+\newcommand{\sheet}[1]{\def\@sheet{\GetTranslation{sheet} #1}}
+\newcommand{\group}[1]{\renewcommand{\@group}{#1}}
+\newcommand{\due}[1]{\renewcommand{\@due}{#1}}
+\newcommand{\member}[2][]{
+ \expandafter\renewcommand\expandafter\@members\expandafter
+ {\@members\@member[#1]{#2}}
+ \expandafter\renewcommand\expandafter\pdfmembers\expandafter
+ {\pdfmembers\pdfmember[#1]{#2}}
+}
+\newcommand{\PrefixId}[1]{\renewcommand{\@prefixId}{#1}}
+\newcommand{\PrefixAuthor}[1]{\renewcommand{\@prefixAuthor}{#1}}
+\newcommand{\PrefixDate}[1]{\renewcommand{\@prefixDate}{#1}}
+\renewcommand{\and}{\\}
+\renewcommand{\maketitle}{
+ \thispagestyle{empty}
+ {\bfseries\Huge\@course}
+ \par
+ \expandafter\notblank\expandafter\@sheet{{\LARGE\@sheet\\}}{}
+ \par
+ \expandafter\notblank\expandafter\@members{
+ {\footnotesize\bfseries\@prefixAuthor}\\
+ \hspace*{4pt}{\large{\vspace*{4pt}\begin{tabular}[t]{@{}l}
+ \@members
+ \end{tabular}}}\\
+ }{}
+ \expandafter\notblank\expandafter\@due{
+ {\footnotesize\bfseries\@prefixDate}\\
+ \vspace*{4pt}{\hspace*{4pt}{\large\@due}}\\
+ }{}
+ \vskip \baselineskip
+ \pagestyle{fancy}
+}
+\renewcommand{\headrulewidth}{1pt}
+\setlength\headheight{4\baselineskip}
+\rhead{
+ \begin{tabular}{r}
+ \textbf{\@course} \\
+ \@sheet \\
+ {\small\@due}
+ \end{tabular}
+}
+\lhead{
+ \small{%
+ \begin{tabular}{l}
+ \@members
+ \end{tabular}%
+ }
+ }
+\newcommand{\@pdfauthorprefix}{\expandafter\notblank\expandafter%
+ {\@group}{Group \@group: }{}\relax}
+\newcommand{\pdfmembers}{}
+\newcommand{\pdfmember}[2][]{\expandafter\notblank\expandafter%
+ {#1}{#2, {#1};}{#2}}
+\AtBeginDocument{\hypersetup{
+ pdftitle = {\texorpdfstring{Assignment \@sheet}{}},
+ pdfauthor = {\texorpdfstring{\@pdfauthorprefix\pdfmembers}{}},
+ pdfsubject = {\texorpdfstring{\@course}{}}
+}}
+\newcommand{\N}{\ensuremath{\mathbf{N}}}
+\newcommand{\Z}{\ensuremath{\mathbf{Z}}}
+\newcommand{\R}{\ensuremath{\mathbf{R}}}
+\newcommand{\Q}{\ensuremath{\mathbf{Q}}}
+\newcommand{\C}{\ensuremath{\mathbf{C}}}
+\newcommand{\F}{\ensuremath{\mathbb{F}}}
+\newcommand{\primefield}{\ensuremath{\mathbb{P}}}
+\newcommand{\modring}[2]{#1/\!#2\:}
+\newcommand{\derivative}[1]{\ensuremath{\frac{d}{d#1}}}
+\newcommand{\matadd}[3]{\ensuremath{\xmapsto{\mathrm{add}_{#1,#2,#3}}}}
+\newcommand{\matmul}[2]{\ensuremath{\xmapsto{\mathrm{mul}_{#1,#2}}}}
+\newcommand{\matswap}[2]{\ensuremath{\xmapsto{\mathrm{sw}_{#1,#2}}}}
+\renewcommand{\forall}{\ensuremath{\hskip 2pt \oforall \hskip 2pt}}
+\renewcommand{\exists}{\ensuremath{\hskip 2pt \oexists \hskip 2pt}}
+\newcommand{\ceil}[1]{\ensuremath{\left\lceil #1 \right \rceil}}
+\newcommand{\floor}[1]{\ensuremath{\left\lfloor #1 \right \rfloor}}
+\newcommand{\abs}[1]{\ensuremath{\left\vert#1\right\vert}}
+\newcommand{\rfrac}[2]{{}^{#1}\!/_{#2}}
+\renewcommand{\mod}{\ \mathrm{mod}\ }
+\newcommand{\rel}[1]{\ensuremath{\mathrel{#1}}}
+\newcommand{\QED}{\hfill\(\square\)}
+\newtheoremstyle{it}{3pt}{3pt}{}{}{\itshape}{:}{.5em}{}
+\theoremstyle{it}
+\makeatother
+\endinput
+%%
+%% End of file `csassignments.cls'.