Ich versuche mit xsim und Datatool eine Vorlage für personalisierte Klausuren zu erstellen, allerdings treten vier Probleme auf.

Öffne in Overleaf
\documentclass[12pt,parskip=true]{scrartcl}

\usepackage{filecontents}
\begin{filecontents*}{test.csv}
Name,Vorname,Matrikelnummer
Mustermann,Max,12345
Musterfrau,Margit,23456
\end{filecontents*}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[most]{tcolorbox}
\usepackage{xsim}
\usepackage{multicol}
\usepackage{tikz}
\usepackage{datatool}
\DTLsetseparator{,}
\DTLloaddb{namelist}{test.csv}

%Aufgabenumgebung
\DeclareExerciseEnvironmentTemplate{klausuraufgabe}
  {%
    \tcolorbox[standard jigsaw,
      opacityback=0,
      opacityframe=0,
      coltitle=black,
      breakable ,
      drop shadow ,
      beforeafter skip = .5\baselineskip ,
      title = 
        \textbf{\GetExerciseName~\GetExerciseProperty{counter}}%
        \GetExercisePropertyT{subtitle}{ \textit{\PropertyValue}}%
        \IfInsideSolutionF{%
          \GetExercisePropertyT{points}{ ($\PropertyValue = \text{\points{\PropertyValue}}$)}%
        }%
    ]%
  }
  {\endtcolorbox}

\DeclareExerciseType{klausuraufgabe}{
  exercise-env = aufgabe ,
  solution-env = loesung ,
  exercise-name = Aufgabe ,
  solution-name = Lösung ,
  exercise-template = klausuraufgabe ,
  solution-template = klausuraufgabe
}

\DeclareExerciseTableTemplate{punktetabelle}{%
  \renewcommand*\arraystretch{2}
  \XSIMputright\ExerciseTableCode{ \hline Aufgabe & }
  \ForEachUsedExerciseByType{\XSIMputright\ExerciseTableCode{#3&}}
  \XSIMputright\ExerciseTableCode{
     \LARGE$\sum$ \\
     \hline Maximalpunktzahl &
  }
  \ForEachUsedExerciseByType{
    \XSIMputright\ExerciseTableCode
      {\XSIMifblankTF{#5}{\printgoal{0}}{\printgoal{#5}} & }
  }
  \XSIMputright\ExerciseTableCode{
    \TotalExerciseGoal{points}{}{} \\ \hline
    erreichte Punktzahl &
  }
  \ForEachUsedExerciseByType{ \XSIMputright\ExerciseTableCode{&} }
  \XSIMputright\ExerciseTableCode{\\\hline}
  \XSIMifeqF{\numberofklausuraufgabes}{0}{
    \begin {tabular} {|l|*{\numberofklausuraufgabes}{>{\centering\arraybackslash}p{7mm}|}c|}
      \ExerciseTableCode
    \end {tabular}
  }
}

\begin{document}
\DTLforeach*{namelist}{
\Name=Name,%
\Vorname=Vorname,%
\Matrikelnummer=Matrikelnummer%
}{
\begin{center}{\Large \textbf{\Matrikelnummer}}\end{center}

\begin{center}{\Large \textbf{{\Name}, {\Vorname}}}\end{center}

\begin{center}
  \gradingtable[template=punktetabelle]
\end{center}

\begin{aufgabe}[points=2+(1+4)+1+2]
Dies ist eine Aufgabe.
\end{aufgabe}

\begin{aufgabe}[points=3+1+2]
Aufgabe 2
\end{aufgabe}

\begin{aufgabe}[points=1+1+1]
Aufgabe 3
\end{aufgabe}

%\newpage
%\setcounter{aufgabe}{0}
}
\end{document}

Problem 1: Es findet keine Trennung der Klausuren statt, d.h. die zweite Klausur beginnt schon auf dem letzten Blatt der ersten Klausur.

Problem 2: Die Aufgabennummerierung in der zweiten Klausur wird fortgesetzt, d.h. die eigentlich erste Aufgabe in der zweiten Klausur wird als "Aufgabe 4" bezeichnet.

Diese beiden Probleme lassen sich noch recht leicht lösen, indem man jede Klausur mit einer newpage beendet und den Counter für die Aufgabe auf 0 setzt.

Problem 3: Die Formatierung der Aufgaben ist falsch, der Inhalt kommt auf einmal vor dem Titel und der Punktanzeige.

Problem 4: Die Aufgaben werden trotz Neusetzung des Counters mehrfach gezählt und im Gradingtable eingetragen.

Diese beiden Probleme bekomme ich nicht gelöst, weiß jemand woran das liegt bzw. wie man das beheben kann?

gefragt 09 Nov, 11:08

Hirshy's gravatar image

Hirshy
441520
Akzeptiert: 87%


Ich würde die Aufgaben sammeln und dann jeweils die Aufgabensammlung in der Datatool-Schleife drucken lassen:

In der Präambel \DeclareExerciseCollection{klausur} o.ä. setzen, dann im Dokument

Öffne in Overleaf
\collectexercises{klausur}
\begin{aufgabe}
  ...
\end{aufgabe}
...
\collectexercisesstop{klausur}

und dann schließlich in der Schleife \printcollection{klausur}. Angewendet auf Dein Beispiel (mit leichten Veränderungen am Code) sieht das so aus:

Öffne in Overleaf
\documentclass[12pt,parskip=true]{scrartcl}

\usepackage{filecontents}
\begin{filecontents*}{test.csv}
Name,Vorname,Matrikelnummer
Mustermann,Max,12345
Musterfrau,Margit,23456
\end{filecontents*}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[most]{tcolorbox}
\usepackage{xsim}
\usepackage{multicol}
\usepackage{tikz}
\usepackage{datatool}
\DTLsetseparator{,}
\DTLloaddb{namelist}{test.csv}

%Aufgabenumgebung
\DeclareExerciseEnvironmentTemplate{klausuraufgabe}
  {%
    \tcolorbox[standard jigsaw,
      opacityback=0,
      opacityframe=0,
      coltitle=black,
      breakable ,
      drop shadow ,
      beforeafter skip = .5\baselineskip ,
      title = 
        \textbf{\GetExerciseName~\GetExerciseProperty{counter}}%
        \GetExercisePropertyT{subtitle}{ \textit{\PropertyValue}}%
        \IfInsideSolutionF{%
          \GetExercisePropertyT{points}{ ($\PropertyValue = \text{\points{\PropertyValue}}$)}%
        }%
    ]%
  }
  {\endtcolorbox}

\DeclareExerciseType{klausuraufgabe}{
  exercise-env = aufgabe ,
  solution-env = loesung ,
  exercise-name = Aufgabe ,
  solution-name = Lösung ,
  exercise-template = klausuraufgabe ,
  solution-template = klausuraufgabe
}

\DeclareExerciseTableTemplate{punktetabelle}{%
  \renewcommand*\arraystretch{2}
  \XSIMputright\ExerciseTableCode{ \hline Aufgabe & }
  \ForEachUsedExerciseByType{\XSIMputright\ExerciseTableCode{#3&}}
  \XSIMputright\ExerciseTableCode{
     \LARGE$\sum$ \\
     \hline Maximalpunktzahl &
  }
  \ForEachUsedExerciseByType{
    \XSIMputright\ExerciseTableCode
      {\XSIMifblankTF{#5}{\printgoal{0}}{\printgoal{#5}} & }
  }
  \XSIMputright\ExerciseTableCode{
    \TotalExerciseGoal{points}{}{} \\ \hline
    erreichte Punktzahl &
  }
  \ForEachUsedExerciseByType{ \XSIMputright\ExerciseTableCode{&} }
  \XSIMputright\ExerciseTableCode{\\\hline}
  \XSIMifeqF{\numberofklausuraufgabes}{0}{
    \begin {tabular} {|l|*{\numberofklausuraufgabes}{>{\centering\arraybackslash}p{7mm}|}c|}
      \ExerciseTableCode
    \end {tabular}
  }
}

\DeclareExerciseCollection{klausur}

\begin{document}

\collectexercises{klausur}
\begin{aufgabe}[points=2+(1+4)+1+2]
Dies ist eine Aufgabe.
\end{aufgabe}

\begin{aufgabe}[points=3+1+2]
Aufgabe 2
\end{aufgabe}

\begin{aufgabe}[points=1+1+1]
Aufgabe 3
\end{aufgabe}
\collectexercisesstop{klausur}

\DTLforeach*{namelist}{
  \Name=Name,%
  \Vorname=Vorname,%
  \Matrikelnummer=Matrikelnummer%
}{
  \begin{center}
    \Large\bfseries\Matrikelnummer \par
    \bigskip
    \Name, \Vorname
  \end{center}

  \begin{center}
    \gradingtable[template=punktetabelle]
  \end{center}

  \printcollection{klausur}
  \clearpage
}

\end{document}

alt text

alt text

Permanenter link

beantwortet 09 Nov, 15:02

Clemens's gravatar image

Clemens
20.1k123360

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×14
×4

Frage gestellt: 09 Nov, 11:08

Frage wurde angeschaut: 123 Mal

Zuletzt aktualisiert: 09 Nov, 15:02