xsim - Letzen Eintrag einer Zeile im gradingtable ansprechen und Wert aus csv-Datei eintragen
Hallo,
aufbauend auf [Gesamtpunkte jeder einzelnen Frage mit xsim in Tabelle eintragen][1] ist die folgende Datei Grundlage für eine Klausurvorlage zur Erstellung personalisierter Klausuren.
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[most]{tcolorbox}
\usepackage{xsim}
%%%%%%%%%%%%%%%%%%%%%%Teilnehmerliste%%%%%%%%%%%%%%%%%%%%%%
\begin{filecontents}{Teilnehmer.csv}
nachname,vorname,mtknr,bonus
Musterman,Max,12345,1
Musterfrau,Erika,23456,4
\end{filecontents}
%%%%%%%%%%%%%%%%Einlesen der Teilnehmerliste%%%%%%%%%%%%%%%
\usepackage{datatool}
\DTLsetseparator{,}
\DTLloaddb{teilnehmer}{Teilnehmer.csv}
%%%%%%%%%%%%%%%%%%%%%Aufgabenumgebung%%%%%%%%%%%%%%%%%%%%%%
\DeclareExerciseType{klausuraufgabe}{%
exercise-env = aufgabe ,%
solution-env = loesung ,%
exercise-name = Aufgabe ,%
solution-name = Lösung ,%
exercise-template = klausuraufgabe,%
solution-template = klausuraufgabe%
}%
\DeclareExerciseCollection{klausur}%
%%%%%%%%%%%%%%%%%%%%%%%Punktetabelle%%%%%%%%%%%%%%%%%%%%%%%
\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{6mm}|}c|}%
\ExerciseTableCode %
\end {tabular}%
}%
}%
\begin{document}
\collectexercises{klausur}
\begin{aufgabe}[points=12+(10+4)+1+2]
Aufgabe 1
\end{aufgabe}
\begin{aufgabe}[points=3.5+10.5+2]
Aufgabe 2
\end{aufgabe}
\collectexercisesstop{klausur}
\DTLforeach*{teilnehmer}{
\Name=nachname,%
\Vorname=vorname,%
\Matrikelnummer=mtknr,%
\Bonus=bonus%
}{%
\printexercise{klausuraufgabe}{1}
\printexercise{klausuraufgabe}{2}
\Name, \Vorname \begin{center}\gradingtable[template=punktetabelle]\end{center}%
Bonuspunkte: \Bonus
}
\end{document}
Es tritt nun der Fall auf, dass bereits vor der Klausur Bonuspunkte gesammelt werden können, die zu den erreichten Punkten hinzugezählt werden. Diese liegen zusammen mit Namen und Matrikelnummer in einer csv.-Datei vor, welche auch zur Erstellung personalisierter Klausuren verwendet wird. Es ist prinzipiell wie im Beispiel möglich, die Bonuspunkte mittels \Bonus auszulesen und einfach als Textzeile vor oder hinter die Tabelle zu setzen, ich würde die aber gerne als "\Bonus +" in das Feld eintragen, wo später die Summe der in der Klausur erreichten Punkte eingetragen wird. Ist es möglich den entsprechenden Eintrag anzusprechen und dort die Bonuspunkte einzutragen?
**Alternative:** es wäre auch möglich, die csv-Datei um einen Eintrag "bonusaufgabe" o.ä. zu ergänzen, wo zusätzlich die maximal erreichbaren Bonuspunkte aufgeführt werden. In dem Fall: wäre es machbar, diese Bonusaufgabe zusätzlich im Gradingtable aufzuführen (nach der letzten Aufgabe) und in der Zeile mit den erreichten Punkten entsprechend \Bonus einzutragen? Die Aufgabennummer sollte in dem Fall "B" sein, damit es keine Verwechslung mit den nummerierten Klausuraufgaben geben kann.
Mit Clemens Antwort etwas abgeändert:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[most]{tcolorbox}
\usepackage{xsim}
%%%%%%%%%%%%%%%%%%%%%%Teilnehmerliste%%%%%%%%%%%%%%%%%%%%%%
%\begin{filecontents}{Teilnehmer.csv}
%nachname,vorname,mtknr,bonus
%Musterman,Max,12345,1
%Musterfrau,Erika,23456,4
%\end{filecontents}
%%%%%%%%%%%%%%%%Einlesen der Teilnehmerliste%%%%%%%%%%%%%%%
\usepackage{datatool}
\DTLsetseparator{,}
\DTLloaddb{teilnehmer}{Teilnehmer.csv}
%%%%%%%%%%%%%%%%%%%%%Aufgabenumgebung%%%%%%%%%%%%%%%%%%%%%%
\DeclareExerciseType{klausuraufgabe}{%
exercise-env = aufgabe ,%
solution-env = loesung ,%
exercise-name = Aufgabe ,%
solution-name = Lösung ,%
exercise-template = klausuraufgabe,%
solution-template = klausuraufgabe%
}%
\DeclareExerciseCollection{klausur}%
%%%%%%%%%%%%%%%%%%%%%%%Punktetabelle%%%%%%%%%%%%%%%%%%%%%%%
\DeclareExerciseTableTemplate{punktetabelle}{%
\renewcommand*\arraystretch{2}%
\XSIMputright\ExerciseTableCode{ \hline Aufgabe & }%
\ForEachUsedExerciseByType{\XSIMputright\ExerciseTableCode{#3&}}%
\XSIMputright\ExerciseTableCode{%
{\LARGE$\sum$} + Bonus \\% <<<< Neu
\hline Maximalpunktzahl &%
}%
\ForEachUsedExerciseByType{%
\XSIMputright\ExerciseTableCode%
{\XSIMifblankTF{#5}{\printgoal{0}}{\printgoal{#5}} & }%
}%
\XSIMputright\ExerciseTableCode{%
\TotalExerciseGoal{points}{}{}\\ \hline%
erreichte Punktzahl & %
}%
\ForEachUsedExerciseByType{ \XSIMputright\ExerciseTableCode{&} }%
\XSIMputright\ExerciseTableCode{\phantom{+Bonus}+\Bonus \\ \hline}% <<<< Neu
\XSIMifeqF{\numberofklausuraufgabes}{0}{%
\begin {tabular} {|l|*{\numberofklausuraufgabes}{>{\centering\arraybackslash}p{6mm}|}c|}%
\ExerciseTableCode%
\end {tabular}%
}%
}%
\begin{document}
\collectexercises{klausur}
\begin{aufgabe}[points=12+(10+4)+1+2]
Aufgabe 1
\end{aufgabe}
\begin{aufgabe}[points=3.5+10.5+2]
Aufgabe 2
\end{aufgabe}
\collectexercisesstop{klausur}
\DTLforeach*{teilnehmer}{
\Name=nachname,%
\Vorname=vorname,%
\Matrikelnummer=mtknr,%
\Bonus=bonus%
}{%
\printexercise{klausuraufgabe}{1}
\printexercise{klausuraufgabe}{2}
\Name, \Vorname \begin{center}\gradingtable[template=punktetabelle]\end{center}%
Bonuspunkte: \Bonus
}
\end{document}
[1]: https://texwelt.de/wissen/fragen/20810/gesamtpunkte-jeder-einzelnen-frage-mit-xsim-in-tabelle-eintragen