From ac30b2bebca651fc914289e669b791073d005a2c Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 8 Jun 2022 20:45:43 +0000 Subject: csassignments (8jun22) git-svn-id: svn://tug.org/texlive/trunk@63517 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/latex/csassignments/csassignments.cls | 317 +++++++++++++++++++++ 1 file changed, 317 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/csassignments/csassignments.cls (limited to 'Master/texmf-dist/tex') 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'. -- cgit v1.2.3