exsheet2: Add initial version
[exsheet.git] / exsheet2.cls
diff --git a/exsheet2.cls b/exsheet2.cls
new file mode 100644 (file)
index 0000000..c9a5826
--- /dev/null
@@ -0,0 +1,225 @@
+% Stefan Huber, 2022
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{exsheet2}
+
+\DeclareOption{10pt}{\PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{12pt}{\PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{twoside}{\PassOptionsToClass{\CurrentOption}{article}}
+
+\DeclareOption{german}{\def \exsheetgerman{}}
+\DeclareOption{ngerman}{\def \exsheetgerman{}}
+\DeclareOption{austrian}{\def \exsheetgerman{}}
+\DeclareOption{naustrian}{\def \exsheetgerman{}}
+\DeclareOption{showanswers}{\def \exsheetshowanswers{}}
+\DeclareOption{exam}{\def \exsheetexam{}}
+
+
+\PassOptionsToClass{a4paper}{article}
+\ProcessOptions\relax
+
+
+\LoadClass{article}
+
+\@ifundefined{exsheetgerman}{
+  \usepackage[american]{babel}
+  \usepackage[american]{isodate}
+  \newcommand{\theexercise}{Exercise}
+  \newcommand{\thepoint}{Point}
+  \newcommand{\thepoints}{Points}
+  \newcommand{\thename}{Name}
+  \newcommand{\thestudnumber}{Number}
+  \newcommand{\theanswer}{Answer}
+  \newcommand{\theduration}{Duration}
+  \newcommand{\thegrade}{Grade}
+  \newcommand{\theof}{of}
+}{%
+  \usepackage[ngerman]{babel}
+  \usepackage[german]{isodate}
+  \newcommand{\theexercise}{Aufgabe}
+  \newcommand{\thepoint}{Punkt}
+  \newcommand{\thepoints}{Punkte}
+  \newcommand{\thename}{Name}
+  \newcommand{\thestudnumber}{Personenkennzeichen}
+  \newcommand{\theanswer}{Antwort}
+  \newcommand{\theduration}{Prüfungsdauer}
+  \newcommand{\thegrade}{Note}
+  \newcommand{\theof}{von}
+}
+
+\RequirePackage{xifthen,geometry,fancyhdr,enumitem,comment,amssymb}
+
+\newcounter{exsheet2@pointsum}
+\def\droptotalpoints{unknown}
+\AtBeginDocument{\AtEndDocument{%
+    \immediate\write\@mainaux{%
+      \string\gdef\string\droptotalpoints{\number\value{exsheet2@pointsum}}%
+    }
+}}
+
+\newcounter{exsheet2@excounter}
+\setcounter{exsheet2@excounter}{1}
+\newenvironment{exercise}[1][]{%
+  \vspace*{2em}%
+  \textbf{\theexercise~\arabic{exsheet2@excounter}}
+  \ifthenelse{\isempty{#1}}{}{%
+    \addtocounter{exsheet2@pointsum}{#1}
+    \ifnum#1=1%
+      \hfill[#1 \thepoint]%
+    \else%
+      \hfill[#1 \thepoints]%
+    \fi%
+  }%
+  \newline}
+{\addtocounter{exsheet2@excounter}{1}}
+
+\@ifundefined{exsheetshowanswers}{
+  \excludecomment{answer}
+}{
+  \newenvironment{answer}{\vspace*{0.5em}\textit{\theanswer:} \hspace*{0.5em} }{}
+}
+
+\newenvironment{choices}{%
+  \begin{itemize}[label=$\square$, labelsep=2ex]
+  }{\end{itemize}}
+
+
+\def\@course{}
+\newcommand{\course}[1]{\def\@course{#1}}
+
+\def\@curriculum{}
+\newcommand{\curriculum}[1]{\def\@curriculum{#1}}
+
+\def\@semester{}
+\newcommand{\semester}[1]{\def\@semester{#1}}
+
+\def\@auth{}
+\renewcommand{\author}[1]{\def\@auth{#1}\def\@author{#1}}
+
+\def\@institute{\ }
+\newcommand{\institute}[1]{\def\@institute{#1}}
+
+\def\@school{\ }
+\newcommand{\school}[1]{\def\@school{#1}}
+
+\def\@duration{\ }
+\newcommand{\duration}[1]{\def\@duration{#1}}
+
+\def\@instructions{\ }
+\newcommand{\instructions}[1]{\def\@instructions{#1}}
+
+
+\geometry{a4paper,textwidth=16cm,textheight=23cm}
+
+
+\RequirePackage{lcg}
+\reinitrand[first=10000,last=99999,counter=examnonce,quiet]
+\rand
+
+\fancypagestyle{exsheet}
+{
+  \fancyhf{}%
+  \fancyhead[L]{%
+    \@course\\
+    \@semester
+  }
+  \fancyhead[C]{%
+    {\isodate \today}
+  }
+  \fancyhead[R]{%
+    \@auth\\
+    \@curriculum
+  }
+  \@ifundefined{exsheetexam}{}{%
+    \fancyfoot[R]{%
+      \tiny nounce: \arabic{examnonce}
+    }
+  }
+}
+
+\setlength{\headheight}{2.5em}
+\renewcommand{\headrulewidth}{1pt}
+
+\setlength{\parindent}{0em}
+
+
+\newcommand{\makestudentinfo}{%
+  {
+  \thename: \underline{\hspace{5cm}}
+  \hfill
+  \thestudnumber: \underline{\hspace{4cm}}
+  }
+}
+
+\newcommand{\makegradeinfo}{%
+  {
+  \thegrade: \underline{\hspace{5cm}}
+  \hfill
+  \thepoints: \underline{\hspace{2cm}} \theof\ \droptotalpoints
+  }
+}
+
+
+\let\oldmaketitle\maketitle
+
+
+\@ifundefined{exsheetexam}{
+  \PassOptionsToClass{notitlepage}{article}
+  \renewcommand{\@maketitle}{%
+      \begin{center}
+        \vspace*{1em}
+        {\LARGE \bf \@title}
+        \vspace*{2em}
+      \end{center}
+  }
+}{%
+  \renewcommand{\@maketitle}{%
+    \begin{titlepage}
+      \begin{center}
+        \vspace*{2cm}
+
+        \hrule
+        \vspace*{1cm}
+        {\LARGE \bf \@title}
+
+        \vspace*{1cm}
+        {\large \bf \@course\ (\@semester)}
+
+        \vspace*{1cm}
+        \hrule
+
+        \vspace*{2cm}
+
+        \@auth \\
+
+        \vspace*{1em}
+
+        \today\\
+
+        \vspace*{1em}
+        \@curriculum \\
+        \@institute \\
+        \@school \\
+
+        \vspace*{1cm}
+        \theduration: \@duration
+      \end{center}
+
+      \vspace{4em}
+      \@instructions
+
+      \vfill
+      \makestudentinfo
+
+      \vspace{3em}
+      \makegradeinfo
+    \end{titlepage}
+  }
+}
+
+\renewcommand{\maketitle}{%
+  \oldmaketitle
+  \thispagestyle{exsheet}
+  \pagestyle{exsheet}
+}
+