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 |
Ich würde die Aufgaben sammeln und dann jeweils die Aufgabensammlung in der Datatool-Schleife drucken lassen: In der Präambel Öffne in Overleaf
\collectexercises{klausur} \begin{aufgabe} ... \end{aufgabe} ... \collectexercisesstop{klausur} und dann schließlich in der Schleife Ö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} beantwortet 09 Nov '17, 21:02 cgnieder |