\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{aufgaben}

% Dieses LaTeX-Paket enthält Makros zum Erstellen von Übungsblättern und
% Klausuren für den Fachbereich Mathematik und Informatik der
% Philipps-Universität Marburg, erstellt von Thomas Eckert (Telefon (28)26556
% oder eckert@mathematik.uni-marburg.de). Vergleiche jedoch auch
%   http://www.ctan.org/tex-archive/macros/latex/contrib/exam/
% für ein class file mit ähnlichen und mehr Strukturen.
%
% Version vom 27.6.2005
%
% Neben Abkürzungen wie \N, \R, \Kern etc. und den Hilfskonstrukten
%
%   \interval]a,b[                   für Intervalle
%   \set[Big]{x\in\R^n}{x\ne0}       für Mengen
%   \norm{x}_2                       für Normen
%   \scal xy, \scal{x+x'}{y}         für Skalarprodukte
%   \vector{x\\y\\z}                 für Vektoren und Matrizen
%
% finden sich folgende Gliederungskonstrukte:
%
% \Blatt[*] % mit * wird Schreibblock erstellt, eine Aufgabe pro Blatt, sonst absatzweise
%   {Veranstaltung (Übungen zur Analysis I)}
%   {Semester (Wintersemester 2001/02)}
%   {Dozent}
%   {Blattname (Blatt 1, Klausur)}
%   {Datum [auch leer lassen]}
%   {Zeit [auch leer lassen]}
%   {letzte Aufgabennummer [auch leer lassen]}
%
% \Aufgabe[3 Punkte] % Neue Aufgabe
%
% \Standardpunkte{4 Punkte} % \Aufgabe ohne [..] erzeugt diese Vorgabe
%
% \Name % Für Klausuren ein Feld für Name und Vorname
%
% \Punktetabelle % Für Klausuren, automatisch, zweimal kompilieren!


% Eingebundene Pakete
\RequirePackage{amsmath} % AMS-Befehle
\RequirePackage{amssymb} % AMS-Symbole und -Schriften
\RequirePackage{amsthm} % Theorem- und Beweis-Umgebungen
\RequirePackage{mathrsfs} % Skript-Buchstaben (\mathscr)
\RequirePackage[latin1]{inputenc} % Umlaute direkt eingeben
\RequirePackage[a4paper,nofoot]{geometry} % DinA4-Format (auch für pdflatex)
\RequirePackage[german,ngerman]{babel} % alte und neue Rechtschreibung
%
\RequirePackage{array} % Tabellen-Unterstützung (für \Punktetabelle)
\RequirePackage{prelim2e} % für 'Bitte wenden!' am Seitenende


% Maße für Textkörper auf A4
\textwidth16cm \textheight26cm
\oddsidemargin0mm \evensidemargin-4.5mm \topmargin-20mm

% Absatzeinstellungen
\renewcommand{\baselinestretch}{1.1}
\parskip1.5ex \sloppy
\parindent0mm


% Abkürzungen und kleine Hilfskonstrukte
\newcommand\N{{\mathbb N}} % innere Klammer, um $X^\N$ zu
\newcommand\Z{{\mathbb Z}} % ermöglichen statt $X^{\N}$
\newcommand\R{{\mathbb R}}
\newcommand\C{{\mathbb C}}
\newcommand\Q{{\mathbb Q}}
\newcommand\K{{\mathbb K}}
\def\P{{\mathbb P}}
\def\S{{\mathbb S}}
\def\L{{\mathscr L}}
\let\Re\relax\DeclareMathOperator\Re{Re}
\let\Im\relax\DeclareMathOperator\Im{Im}
\DeclareMathOperator\Hom{Hom}
\DeclareMathOperator\Kern{Kern}
\DeclareMathOperator\Bild{Bild}
\DeclareMathOperator\Span{Span}
\DeclareMathOperator\supp{supp}
\DeclareMathOperator\codim{codim}
\DeclareMathOperator\id{id}
\DeclareMathOperator\Id{Id}
\DeclareMathOperator\End{End}
\DeclareMathOperator\GL{GL}
\DeclareMathOperator\linear{linear}

\newcommand\argument{\,\centerdot\,}

\def\interval#1#2,#3#4{\left#1#2,#3\right#4}
  % Verwendung: $x\in\interval]-1,1[$; aber: $x\in\interval]{0,5},1[$
  % Achtung: keine Kommazahlen ungeklammert eingeben

\newcommand\set[3][big]{\def\x{#3}\def\y{}%
  \csname #1l\endcsname\{#2%
  \ifx\x\y\else\csname #1m\endcsname|#3\fi%
  \csname #1r\endcsname\}%
}
\newcommand\norm[1][\argument]{\left\|#1\right\|}

\newcommand\scal[2]{\langle#1\mkern2.3mu\mathord|\mkern2.7mu#2\rangle%
}
\renewcommand\vector[1]{{\renewcommand\arraystretch{0.72}
  \begin{pmatrix}#1\end{pmatrix}}
}


% Konstrukte zur Gliederung von Übungsblättern und Klausuren

\newcommand\BitteWenden{\small b/w}

\newcommand\Blatt[8][]{%
  % #1 Modus (optional * für 'Schreibblock')
  % #2 Veranstaltung (Übungen zur Analysis I)
  % #3 Semester (Wintersemester 2001/02)
  % #4 Dozent
  % #5 Blattname (Blatt 1, Klausur)
  % #6 Datum (der Abgabe) [auch leer lassen]
  % #7 Zeit (dito) [auch leer lassen]
  % #8 letzte Aufgabennummer [auch leer lassen]
  \renewcommand\PrelimText{}
  \cleardoublepage
  \renewcommand\PrelimText{\hbox to\textwidth{\hfill \BitteWenden}}
  Fachbereich Mathematik und Informatik \hfill #3\\
  Universität Marburg\\
  #4
  \begin{center}
    \textbf{#2}
    \ifx#5\relax\else\\-- #5 --\fi
    \ifx#6\relax\else\\#6\ifx#7\relax\else, #7\fi\fi
  \end{center}
  \if{#8}\relax\else\setcounter{Aufgabe}{#8}\fi
  \xdef\Modus{#1}%\setcounter{page}1
}
\newcommand\EndBlatt{\renewcommand\PrelimText{}}
  % Nur benötigt, falls in einem Dokument nach einem Blatt weiterer
  % Text folgen soll.

\newcounter{Aufgabe}
\newcommand\Aufgabe[1][\st@ndardpunkte]{\stepcounter{Aufgabe}
  \ifPunktetabelle\write15{\points#1Punkt!end!}\fi
  \if\Modus*\newpage\else\medskip\fi
  \textbf{Aufgabe \theAufgabe}\ifx#1\relax\else~(#1)\fi.
}
\newcommand\Standardpunkte[1]{\xdef\st@ndardpunkte{#1}}

\newcommand\Name{
  \medskip
  \begin{center}
    \begin{minipage}{12cm}\bf
      Name \hrulefill\\[1.2em]
      Vorname \hrulefill
    \end{minipage}
  \end{center}
  \medskip
}
\newcommand\Punktetabelle{%
  % Zuerst Anzahl und Summe ermitteln, Punkte auflisten.
  \newcount\tasks\tasks=0%
  \newcount\full\full=0%
  \newcount\half\half=0%
  \def\line{}%
  \openin15=\jobname.top%
  \loop%
    \ifeof15\else\read15 to\p\fi%
  \ifeof15\else%
    \advance\tasks by1%
    \expandafter\split@\p,0to\f and\h%
    \advance\full by\f\advance\half by\h%
    \edef\line{\line&\p}%
  \repeat%
  \closein15%
  \count5=\half\divide\count5 by10\advance\full by \count5%
  \multiply\count5 by 10\advance\half by-\count5%
  % Nun die Tabelle erstellen.
  \medskip
  \begin{center}
    \renewcommand\arraystretch{1.35}
    \begin{tabular}{|l|*{\tasks}{@{}>\centering p{1.9em}@{}|}c|}
      \hline
      Aufgabe \p@ttern{\tasks}{& \number\n} & $\;\Sigma\;$ \\
      \hline
      Punkte \line & \the\full\ifnum\half>0,\the\half\fi \\
      \hline
      \hline
      Erreicht \p@ttern{\tasks}{&} & \\
      \hline
    \end{tabular}
  \end{center}
  \medskip
  % Damit das geht, muss überhaupt in einem ersten Lauf eine .top-Datei
  % angelegt werden mit den Punktinformationen.
  \openout15=\jobname.top%
  \Punktetabelletrue%
}


% Interne Makros

% Einstellung für listenförmige Klausur oder Schreibblock
\newcommand\Modus{}
% Voreinstellung für Standardpunkte, sonst per \Standardpunkte setzen
\xdef\st@ndardpunkte{4 Punkte}
% Hilfsmakro für \Aufgabe
\def\points#1Punkt#2!end!{#1}
% Hilfsmakros für \Punktetabelle
\newif\ifPunktetabelle
\def\split@#1,#2#3to#4and#5{\xdef#4{#1}\xdef#5{#2}}
\def\p@ttern#1#2{\newcount\n \n=0 \def\s{}
  \loop\ifnum\n<#1\advance\n by1%
    \edef\s{\s#2}%
  \repeat%
  \s%
}

\AtBeginDocument{\pagestyle{empty}\renewcommand\PrelimText{}} % für \BitteWenden
\AtEndDocument{\EndBlatt} % damit kein \BitteWenden mehr gesetzt wird

\endinput
