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 '17, 17:08

Hirshy's gravatar image

Hirshy
73133645
Akzeptiert-Rate: 0%


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 '17, 21:02

cgnieder's gravatar image

cgnieder
22.1k243463
Akzeptiert-Rate: 60%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×19
×17

gestellte Frage: 09 Nov '17, 17:08

Frage wurde gesehen: 5,209 Mal

zuletzt geändert: 09 Nov '17, 21:02