diff options
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/latex/csassignments/csassignments.dtx | 686 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/csassignments/csassignments.ins | 49 |
2 files changed, 735 insertions, 0 deletions
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 |