texlive[63517] Master: csassignments (8jun22)

commits+karl at tug.org commits+karl at tug.org
Wed Jun 8 22:45:44 CEST 2022


Revision: 63517
          http://tug.org/svn/texlive?view=revision&revision=63517
Author:   karl
Date:     2022-06-08 22:45:43 +0200 (Wed, 08 Jun 2022)
Log Message:
-----------
csassignments (8jun22)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/csassignments/
    trunk/Master/texmf-dist/doc/latex/csassignments/README.md
    trunk/Master/texmf-dist/doc/latex/csassignments/csassignments.pdf
    trunk/Master/texmf-dist/source/latex/csassignments/
    trunk/Master/texmf-dist/source/latex/csassignments/csassignments.dtx
    trunk/Master/texmf-dist/source/latex/csassignments/csassignments.ins
    trunk/Master/texmf-dist/tex/latex/csassignments/
    trunk/Master/texmf-dist/tex/latex/csassignments/csassignments.cls
    trunk/Master/tlpkg/tlpsrc/csassignments.tlpsrc

Added: trunk/Master/texmf-dist/doc/latex/csassignments/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/csassignments/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/csassignments/README.md	2022-06-08 20:45:43 UTC (rev 63517)
@@ -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.


Property changes on: trunk/Master/texmf-dist/doc/latex/csassignments/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/csassignments/csassignments.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/csassignments/csassignments.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/csassignments/csassignments.pdf	2022-06-08 20:44:27 UTC (rev 63516)
+++ trunk/Master/texmf-dist/doc/latex/csassignments/csassignments.pdf	2022-06-08 20:45:43 UTC (rev 63517)

Property changes on: trunk/Master/texmf-dist/doc/latex/csassignments/csassignments.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/csassignments/csassignments.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/csassignments/csassignments.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/csassignments/csassignments.dtx	2022-06-08 20:45:43 UTC (rev 63517)
@@ -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 at 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


Property changes on: trunk/Master/texmf-dist/source/latex/csassignments/csassignments.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/csassignments/csassignments.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/csassignments/csassignments.ins	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/csassignments/csassignments.ins	2022-06-08 20:45:43 UTC (rev 63517)
@@ -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

Added: trunk/Master/texmf-dist/tex/latex/csassignments/csassignments.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/csassignments/csassignments.cls	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/csassignments/csassignments.cls	2022-06-08 20:45:43 UTC (rev 63517)
@@ -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 at 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'.


Property changes on: trunk/Master/texmf-dist/tex/latex/csassignments/csassignments.cls
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2022-06-08 20:44:27 UTC (rev 63516)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2022-06-08 20:45:43 UTC (rev 63517)
@@ -223,7 +223,7 @@
     crbox create-theorem crefthe crimson crimsonpro crop
     crossreference crossreftools crossrefware crossword crosswrd
     crumbs cryptocode cryst
-    cs csbulletin cslatex csplain csquotes csquotes-de
+    cs csassignments csbulletin cslatex csplain csquotes csquotes-de
     css-colors cstex cstypo csvmerge csvsimple
     ctan-o-mat ctan_chk ctanbib ctanify ctanupload
     ctable ctablestack ctex ctex-faq

Modified: trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc	2022-06-08 20:44:27 UTC (rev 63516)
+++ trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc	2022-06-08 20:45:43 UTC (rev 63517)
@@ -64,6 +64,7 @@
 depend conteq
 depend correctmathalign
 depend cryptocode
+depend csassignments
 depend decision-table
 depend delim
 depend delimseasy

Added: trunk/Master/tlpkg/tlpsrc/csassignments.tlpsrc
===================================================================


More information about the tex-live-commits mailing list.