\section{Aufgaben}
\label{modul:aufgaben}
Das Modul \module{Aufgaben} ist das umfangreichste Modul des Schule-Pakets. Es umfasst alles, was zum Setzen von verschiedenen Arbeitsblättern, Klausuren, Klassenarbeiten, Lernzielkontrollen\usw. notwendig ist.

Im Kern baut das Modul auf dem Paket \pkg{xsim} auf, sodass alle Funktionen dieses Pakets nutzbar sind.

Die vom Schulepaket gemachten Ergänzungen sind voll kompatibel zu \pkg{xsim}, so werden die Hinweise etwa in den Eigenschaften der Aufgaben gespeichert.

\subsection{Aufgaben}

\subsubsection{Befehle}
\begin{commands}
    \command{setzeSymbol}[\marg{Symbol}] kann nur innerhalb der Aufgabenumgebung genutzt werden und stellt der jeweiligen Aufgabe ein Symbol voran. Dies kann etwa genutzt werden, um die Arbeitsform oder bestimmte Aufgabentypen zu kennzeichnen.

    Eine Kombination mit dem Modul \module{Symbole} bietet sich an. So könnte etwa zur Kennzeichnung von Höraufgaben \verbcode|\setzeSymbol{\symOhr}| genutzt werden.

    Alternativ lässt sich das Symbol auch als Eigenschaft der Aufgabe direkt setzen. Dieses erfolgt z.\,B. durch \verbcode|\begin{aufgabe}[symbol=\symOhr]|.

    \command{punkteAufgabe} liefert die Punkte der aktuellen Aufgabe inkl. der Bezeichnung.

    \command{punkteTotal} liefert die Gesamtpunktezahl aller Aufgaben inkl. der Bezeichnung.

    \command{punktuebersicht\sarg}[\oarg{Darstellungsart}]\Default{kurz} setzt eine Übersichtstabelle über die in allen Aufgaben erreichbaren Punkte und Zusatzpunkte, sowie einer Leerzeile für die erreichten Punkte. Als optionalen Parameter kann zwischen verschiedenen Darstellungen gewählt werden. Alternativ zur Standardoptionen ist \verbcode{default}. Ist die Übersicht als letztes auf den Aufgabenseiten, so kann der optionale Stern gesetzt werden. Dann wird diese Seite als letzte mit Inhalt angenommen.
\end{commands}

\subsubsection{Umgebungen}
\begin{environments}
    \environment{aufgabe\sarg}[\oarg{Optionen}]\envidx{aufgabe}%
        setzt eine Aufgabe. Alle Aufgaben werden automatisch durchnummeriert. Wird der optionale Stern angegeben, wird die Aufgabe als Zusatzaufgabe gesetzt.

        Bei den optionales Argument können alle von \pkg{xsim} bereitgestellen Optionen angegeben werden. Dazu gehören unter anderem folgende:
        \begin{options}
            \keyval-{points}{Punkte} legt die Punkte der Aufgabe fest.
            \keyval-{bonus-points}{Zusatzaufgabe} legt die Punkte der Aufgabe fest.
            \keyval{subtitle}{Titel} setzt den Title der Aufgabe.
        \end{options}
\end{environments}

\subsubsection{Aufgabentemplates}
    Die Darstellung der Aufgaben erfolgt auf der Grundlage verschiedener Templates. Das Paket \pkg{schule} liefert dabei folgende Templates mit, die in darunter dargestellt sind.
    \begin{itemize}
        \item \verbcode|schule-binnen|
        \item \verbcode|schule-default|
        \item \verbcode|schule-keinenummer|
        \item \verbcode|schule-keinepunkte|
        \item \verbcode|schule-keintitel|
        \item \verbcode|schule-randpunkte|
        \item \verbcode|schule-tcolorbox|
    \end{itemize}

    \includepdfpage[page=1, scale=0.6, trim={3cm, 16cm, 1cm, 2.5cm}, clip] {beispiel-aufgabentemplates}

    \begin{commands}
        \command{setzeAufgabentemplate}[\marg{Templatename}] setzt das Template mit dem die folgenden Aufgaben dargestellt werden.
    \end{commands}

\subsection{Teilaufgaben}

\subsubsection{Befehle}
\begin{commands}
    \command{teilaufgabe}[\oarg{Punkte}] leitet innerhalb einer \env{teilaufgaben}-Umgebung eine Teilaufgabe ein. Teilaufgaben werden mit den Kleinbuchstaben von \textit{a} bis \textit{z} gekennzeichnet.

    Über den optionalen Parameter kann eine Punktzahl angegeben werden.

    \command{teilaufgabeOhneLoesung} Dient als Platzhalter bei Teilaufgaben, bei den keine Lösung angegeben wird. Die entsprechende Nummer wird bei den Lösungen nicht aufgeführt und die folgende Teilaufgaben bekommt den nächsten Buchstaben, so dass es übereinstimmt mit der Aufgabenstellung.
\end{commands}

\subsubsection{Umgebung}
\begin{environments}
    \environment{teilaufgaben} bietet die Möglichkeit, eine Aufgabe in verschiedene Teilaufgaben zu unterteilen.
    \begin{sourcecode}[gobble=8]
        \begin{aufgabe}
            Inhalt...
            \begin{teilaufgaben}
                \teilaufgabe Erstens.
                \teilaufgabe[5] Zweitens.
            \end{teilaufgaben}
        \end{aufgabe}
    \end{sourcecode}
    \hinweis{Teilaufgaben können auch in einer \env{loesung}- und \env{bearbeitungshinweis}-Umgebung verwendet werden!}
\end{environments}

\subsection{Lösungen}

\subsubsection{Paketoptionen}\label{subsubsec:paketoptionen}
\begin{options}
    \keychoice{loesungen}{folgend, keine, seite}\Default{keine}
        legt fest, ob die Lösungen direkt hinter die Aufgaben, als eigenständige Lösungsseite oder gar nicht gesetzt werden.

        \achtung{Die Option \keyis{loesungen}{seite} ist nur für eigenständige Dokumente, \zB\space mit der Dokumentenklasse \cls{scrartcl} gedacht. Sie greift tief in den Übersetzungsprozess ein und ist geeignet Fehler im Zusammenspiel mit anderen Paketen zu provozieren.}
\end{options}

\begin{commands}
    \command{printsolutions} Wenn keine der Standardoptionen genutzt wird, kann der Befehl zur Ausgabe der Lösungen aus dem \pkg{exsheets}-Paket genutzt werden.
\end{commands}

\subsubsection{Umgebungen}
\begin{environments}
    \environment{loesung\sarg}[] wird innerhalb oder direkt hinter einer \env{aufgabe} verwendet, um eine Lösung dazu anzugeben. Die Inhalte dieser Umgebung werden standardmäßig nicht gesetzt, sondern durch die entsprechende Konfiguration von \option{loesungen} an der entsprechenden Stelle gesetzt. Wichtig ist, dass bei Zusatzaufgaben auch bei der Lösung der Stern gesetzt werden muss.

    \begin{sourcecode}[gobble=8]
        \begin{aufgabe}
            Inhalt...
            \begin{teilaufgaben}
                \teilaufgabe Erstens.
                \teilaufgabe[5] Zweitens.
            \end{teilaufgaben}
            \begin{loesung}
                \begin{teilaufgaben}
                    \teilaufgabe Erste Lösung.
                    \teilaufgabe Zweite Lösung.
                \end{teilaufgaben}
            \end{loesung}
        \end{aufgabe}
    \end{sourcecode}
\end{environments}

\subsection{Lückentexte}

\subsubsection{Befehle}
\begin{commands}
    \command{luecke}[\oarg{Optionen für blank}\marg{Länge}]
        Setzt eine Lücke mit der angegebenen Länge. Der Befehl nutzt dazu den \cs{blank}-Befehl aus \pkg{xsim}. Mit dem optionalen Parameter können zusätzliche Optionen an diesen weitergereicht werden, \zB\space kann mit \texttt{style = \choices{line,wave,dline,dotted,dashed}} der Stil der Unterstreichung festgelegt werden.
    \command{textluecke}[\oarg{Optionen für blank}\marg{Text}]
        Setzt eine Lücke für den angegebenen Text, die Länge wird durch den angegebenen Text vorgegeben. Standardmäßig wird als Korrekturfaktor für das handschriftliche Ausfüllen $2$ genutzt.

        Der Befehl nutzt dazu den \cs{blank}-Befehl aus \pkg{xsim}. Mit dem optionalen Parameter können zusätzliche Optionen an diesen weitergereicht werden, \zB\space kann mit \verbcode|style=\dashuline{#1}| eine unterstrichelte Linie gesetzt werden. Mit \texttt{scale = 3} ließe sich der Korrekturfaktor auf $3$ anpassen. Wird als Option \texttt{nichts} angegeben, so wird die Lücke ohne Inhalt und Weite eingesetzt.

        Innerhalb von Lösungsumgebungen wird der Text in die Lücke eingesetzt.

        %%%%% Mit xsim nicht möglich
%     \command{aufgabeLueckentext}[\oarg{Punkte}\marg{Lückentext} \marg{Extras}\oarg{Symbol}\oarg{Optionen für die Aufgabenumgebung}]
%         Um Lückentexte mit Lösungen anzugeben, müsste der gesamte Text mit den Lücken zweimal im Dokument stehen: einmal in der Aufgaben- und einmal in der Lösungsumgebung. Um dies einfacher zu gestalten, wurde als Abkürzung dieser Befehl eingeführt, der intern eine entsprechende Aufgaben- und Lösungsumgebung erzeugt.
%
%         Der Parameter \enquote{Extras} dient dem Anhängen von Inhalten an den Aufgabentext und kann somit etwa für Erwartungen und Hinweise genutzt werden.

% \begin{sourcecode}
% \aufgabeLueckentext[4]{
%     Das ist ein total verrückter \textluecke{Lückentext}. Für alle
%     \textluecke{Menschen}, die \textluecke{Lücken} lieben.
% }{
%     \begin{erwartungen}
%         \erwartung{füllt die Lücken richtig aus.}{4}
%     \end{erwartungen}
% }[\symBleistift][name=Lückentext]
% \end{sourcecode}
\end{commands}

\subsection{Multiple-Choice}
Zwar ist es über das \module{Format}-Modul möglich, einzelne Kästchen zum Ankreuzen zu setzen. In der Regel sollten allerdings echte Multiple-Choice-Aufgaben vorgezogen werden, da diese besser formatiert werden können und sich auch direkt Lösungen angeben lassen.

\achtung{Die direkte Nutzung der Lösung funktioniert nur dann, wenn innerhalb einer Aufgabe nur eine einzige Multiple-Choice-Umgebung genutzt wird.}

\subsubsection{Befehle}
\begin{commands}
    \command{choice}[\oarg{richtig}] Innerhalb einer \env{mcumgebung} können mit \cs{choice} die einzelnen Wahlmöglichkeiten angegeben werden.

        Falls im optionalen Parameter \cs{mcrichtig} steht, wird die Wahlmöglichkeit als richtig markiert und in Lösungsumgebungen entsprechend gesetzt.

    \command{mcrichtig} markiert innerhalb einer \env{mcumgebung} eine Wahlmöglichkeit als richtig.

    \command{mcloesung}\sinceversion{0.8.2} kann in einer Lösung angegeben werden, damit in dieser die Multiple-Choice-Aufgabe mit den korrekten Lösungen aufgeführt wird.
\end{commands}

\subsection{Umgebungen}
    \begin{environments}
        \environment{mcumgebung}[\darg{Spaltenzahl}] ermöglicht es Multiple-Choice-Aufgaben zu setzen. Wird die Spaltenzahl nicht explizit angegeben, so ist 3 als Default-Wert gesetzt.
    \end{environments}

    \begin{sourcecode}[gobble=8]
        \begin{aufgabe}
            \begin{mcumgebung}(4)
                \choice[\mcrichtig] Erstens
                \choice Zweitens
                \choice[\mcrichtig] Drittens
            \end{mcumgebung}
        \end{aufgabe}
        \begin{loesung}
            \mcloesung
        \end{loesung}
    \end{sourcecode}

\subsection{Bearbeitungshinweise}
Die Bearbeitungshinweise sind dazu gedacht, dass man den Lernenden Tipps zu den Aufgaben mitgibt. Dieses ist z.\,B. bei der Bearbeitung von Leitprogrammen (siehe \ref{typ:Leitprogramm}) der Fall. Dabei ist es angedacht, diese nicht direkt bei den Aufgaben stehen zu haben, sondern an einer anderen Stelle, damit sie nur bei Bedarf genutzt werden.

\subsubsection{Umgebungen}
\begin{environments}
    \environment{bearbeitungshinweis} erlaubt es, zu einzelnen Aufgaben Hinweise anzugeben. Der Hinweis kann dabei fast beliebigen \LaTeX-Code enthalten. Verbatim-Elemente, wie z.\,B. die Verwendung von Quellcode machen an Probleme. Es kann aber \cs{lstinputlisting} genutzt werden.
\end{environments}

\subsubsection{Befehle}
\begin{commands}
    \command{bearbeitungshinweisZuAufgabe}[\oarg{Aufgabentyp}\marg{AufgabenId}]\Default{aufgabe} Setzt die Bearbeitungshinweise für die angegebene Aufgabe. Die ID ist dabei fortlaufend über alle Aufgabentypen. Der optionale Parameter erlaubt es auch für andere Aufgabentypen wie der Zusatzaufgabe mit \verbcode|aufgabe*| den Hinweis direkt auszugeben. Wird als AufgabenId nichts angegeben, so wird die aktuelle Aufgabe genommen.
    \command{bearbeitungshinweisliste} Setzt die Bearbeitungshinweise zu allen Aufgaben als Liste.
\end{commands}