
Ich habe versucht herauszufinden, wie ich ein Tagging-System für meine Fragen erstellen und die Ergebnisse in einer Übersichtstabelle anzeigen kann (siehe beigefügtes Bild).
Ich habe eine Beispiel-TEX-Datei, die wie folgt aussieht.
\documentclass{exam}
\begin{document}
\begin{questions}
\question[1] \tag{Algebra}
This is Question 1. This is tagged against Algebra.
\question[2] \tag{Equations}
This is Question 2.This is tagged against Equations.
\question[2] \tag{Data}
This is Question 3.This is tagged against Data.
\question[1] \tag{Algebra}
This is Question 4. This is tagged against Algebra.
\question[2] \tag{Algebra}
This is Question 5.This is tagged against Algebra.
\question[2] \tag{Data}
This is Question 6.This is tagged against Data.
\end{questions}
\end{document}
Ich möchte das Tag-System verwenden, um eine Übersichtstabelle wie folgt zu erstellen. Meine gewünschten Ergebnisse sind:
Antwort1
Für diese Lösung müssen Sie eine Liste mit Tags angebenin der Reihenfolge, in der sie angezeigt werden. Fragen ohne Tags oder die nicht auf der Liste stehen, werden ignoriert (mit Ausnahme der Gesamtpunktzahl, die bereits berechnet wurde).
Diese Version funktioniert nur nach den Fragen. Wenn Sie vorher eine Zusammenfassung wünschen, müssen Sie die Tags auch in die AUX-Datei einfügen.
\documentclass[addpoints]{exam}
\usepackage{tikz}% foreach and pgfmath
\newcommand{\tag}[1]{\expandafter\gdef\csname tagofq@\roman{question}\endcsname{#1}}
\makeatletter
\newcommand{\taglist}[1]{% #1 = comma delimmited list of tags (in order) for summary
\@ifundefined{exam@numquestions}{}{%
\bgroup% use local definitions
\lineskip=0pt
\noindent
\fbox{\parbox[t][1cm][t]{4cm}{\strut Tag}}\hspace{-\fboxrule}%
\fbox{\parbox[t][1cm][t]{4cm}{\strut Question}}\hspace{-\fboxrule}%
\fbox{\parbox[t][1cm][t]{4cm}{\strut Points}}\newline
\foreach \x in {#1} {\count1=0
\let\qlist=\empty
\edef\pointsum{0}%
\loop\ifnum\count1<\exam@numquestions\relax
\advance\count1 by 1
\@ifundefined{tagofq@\@roman\count1}{}{%
\edef\thistag{\csname tagofq@\@roman\count1\endcsname}%
\ifx\x\thistag\relax
\ifx\empty\qlist\relax
\edef\qlist{\the\count1}%
\else
\edef\qlist{\qlist, \the\count1}%
\fi
\edef\thispoints{\csname pointsofq@\@roman\count1\endcsname}%
\pgfmathparse{int(\pointsum+\thispoints)}%
\let\pointsum=\pgfmathresult
\fi}%
\repeat
\vskip-\fboxrule\noindent
\fbox{\parbox[t][1cm][t]{4cm}{\strut\x}}\hspace{-\fboxrule}%
\fbox{\parbox[t][1cm][t]{4cm}{\strut\qlist}}\hspace{-\fboxrule}%
\fbox{\parbox[t][1cm][t]{4cm}{\strut\pointsum}}\newline}%
\vskip-\fboxrule\noindent
\fbox{\parbox[t][1cm][t]{4cm}{\strut Total}}\hspace{-\fboxrule}%
\fbox{\parbox[t][1cm][t]{4cm}{\strut}}\hspace{-\fboxrule}%
\fbox{\parbox[t][1cm][t]{4cm}{\strut\exam@numpoints}}
\egroup}}
\makeatother
\begin{document}
\begin{questions}
\question[1] \tag{Algebra}
This is Question 1. This is tagged against Algebra.
\question[2] \tag{Equations}
This is Question 2.This is tagged against Equations.
\question[2] \tag{Data}
This is Question 3.This is tagged against Data.
\question[1] \tag{Algebra}
This is Question 4. This is tagged against Algebra.
\question[2] \tag{Algebra}
This is Question 5.This is tagged against Algebra.
\question[2] \tag{Data}
This is Question 6.This is tagged against Data.
\end{questions}
\taglist{Algebra,Data,Equations}
\end{document}
Antwort2
Die besten Ergebnisse werden Sie wahrscheinlich erzielen, wenn Sie zum Paket wechseln xsim
, das die Fortsetzung von exsheets
vom selben Autor ist:https://ctan.org/pkg/xsim. Es scheint das am besten geeignete zu sein vonhttps://ctan.org/topic/exam.
Obwohl dieDokumentationist überwältigend, ich schlage vor, es von vorne bis hinten durchzugehen, alle Details zu überspringen und die Gesamtideen zu verstehen. Es soll bietenÜbungs-Lösungspaare(falls erforderlich), einschließlich Tagging. Es ist auch eine gute Idee, den GitHub-Code herunterzuladen und einen Blick unter /doc/examples zu werfen.
Ein paar Anmerkungen, bevor ich den folgenden Code kommentiere:
- Wenn Sie "Übung" in "Frage" umbenennen möchten, lesen Sie Kapitel 6 "Neue Übungstypen". Sie können wahrscheinlich viele der dort angezeigten Codes überspringen.
- haben Sie keine Angst vor „Vorlagen“, die nur eine andere Möglichkeit darstellen, Ihr eigenes Layout und Ihren eigenen Inhalt zu erstellen; wie im Handbuch gezeigt, verwenden sie viele grundlegende Latex-Befehle
- Es bietet einige Looping-Befehle, mit denen Sie auf jedes von Ihnen erstellte Übungsobjekt zugreifen und bei Bedarf Informationen extrahieren können (siehe mein erstes Beispiel unten).
Im folgenden Code habe ich Ihre Fragen in xsim-Sprache umformuliert, wobei die erste Frage einige Funktionen zeigt, die Sie möglicherweise verwenden möchten oder nicht. Am Ende zeige ich ein Übungs-Lösungspaar von xsim.
Die erste \gradingtable
Anweisung wird horizontal gedruckt, während die einfachere vertikal gedruckt wird. Dies möchten Sie möglicherweise ändern, d. h. als xsim-Vorlage neu schreiben, um es Ihren Anforderungen anzupassen.
Die letzten Zeilen zeigen Ihnenmeine bisher fehlgeschlagenen Versucheum Ihr gewünschtes Ergebnis zu erreichen. Vor allem die Informationen im Handbuch waren für mich unzureichend, die Beispiele deckten es nicht wirklich ab und eine Internetsuche hat bisher nicht viel geholfen. Aber vielleicht kann ein Mitglied mit mehr Erfahrung in der Verwendung von xsim helfen.
Also, für mich klingt es so, als ob xsim alles bereitstellt, was man braucht, um Schritt für Schritt zum Ergebnis zu gelangen ... nur war ich an dieses Paket nicht gewöhnt genug ;-)
\documentclass[12pt]{article}
\usepackage{xsim}
\xsimsetup{
solution/print = true
}
\begin{document}
% your examples
\begin{exercise}[ subtitle={About algebra}, % showing some features
points=1,
bonus-points=1,
tags={Algebra}]
This is Question 1. This is tagged against Algebra.
Tag set is: \GetExerciseProperty{tags}
\end{exercise}
%
\begin{exercise}[points=2]%,tags={Equations}]
This is Question 2. This is tagged against Equations.
\end{exercise}
%
\begin{exercise}[points=2, tags={Data}]
This is Question 3. This is tagged against Data.
\end{exercise}
%
\begin{exercise}[points=1, tags={Algebra}]
This is Question 4. This is tagged against Algebra.
\end{exercise}
%
\begin{exercise}[points=2, tags={Algebra}]
This is Question 5. This is tagged against Algebra.
\end{exercise}
%
\begin{exercise}[points=2, tags={Data}]
This is Question 6. This is tagged against Data.
\end{exercise}
% ~~~ an exercise with solution
\begin{exercise}
A first example for an exercise.
\end{exercise}
%
\begin{solution}
A first example for a solution.
\end{solution}
% this is standard (hor)
\gradingtable[template=default*]
% this is simpler (vert)
\gradingtable
> > > >
% here I failed so far
% \begin{tabular}
\ForEachExerciseTag{Data}{\ListExerciseTags{Data}{,}}
%\ListExerciseTags{Data}{&}
% \end{tabular}
> > > >
\end{document}
Ergebnis:
PSHinweis: Hier füge ich neue Erkenntnisse ein, die sich zB aus weiteren Kommentaren ergeben.
Ein Vorschlag: parallel das PDF-Handbuch und den Xsim-Quellcode lesen; Code, um relevante Teile zu finden, Handbuch, um alle Xsim-Befehle nachzuschlagen. Auf meinem System befinden sich 4 Quelldateien inC:..\AppData\Local\Programs\MiKTeX\tex\latex\xsim. Verwenden Sie einen Editor wie Notepad++, öffnen Sie diese 4 und suchen Sie in allen geöffneten Dateien nach Suchbegriffen, die Sie interessieren (geht schnell und einfach). // Achten Sie darauf, diese Dateien nicht zu verändern (!)
B. \gradingtable: Es wird als \NewDocumentCommand
in definiert xsim.sty
. Dieser Ort ist nur zum Anschauen. Informationen zum Ändern finden Sie in Kapitel 12 „Bewertungstabellen“. Sie können Ihre eigene Vorlage schreiben und diese diesem Befehl wie zuweisen \gradingtable[type=myTable]
. Informationen zum Erstellen und Einfügen Ihrer eigenen Vorlage myTable
(Ihrer gewünschten Übersichtstabelle) finden Sie in Kapitel 13 „Gestalten der Übungsvorlagen“.
C. Vorlage „Mechanik“: Suchen Sie in Notepad++ oder einem ähnlichen Programm nach DeclareExerciseEnvironmentTemplate
. Sie finden alle im Handbuch erwähnten Vorlagen in xsim.sty
, xsim.style.layouts.code.tex
und xsim-manual.cls
. Auch hier geht es nur darum, zu sehen, wie all diese xsim-Befehle angewendet werden oder angewendet werden können. SieheA.oben. Dies sollte Ihnen Ideen geben, wie Sie Ihre beabsichtigten gestalten können myTable
, sieheB..
D. xsim als Werkzeugkasten: Genau wie Latex ist xsim als Toolbox gedacht. D. h. es stellt diese Übungs- und Lösungsobjekte mit all ihren internen Informationen bereit. Sie greifen über xsim-Befehle auf deren Inhalt zu ... UND erstellen Ihre Tabelle mit diesen Informationen, wie Sie es in Ihrem Beispiel tun würden. Und es ist ziemlich leistungsfähig.
E. Variation der Beispiele: Es ist eine gute Idee, Beispiele zu kopieren und zu variieren, die in/doc/Beispielevon github (siehe oben), wie das Ändern der Reihenfolge von Übungs-Lösungspaaren, das Löschen von Teilen, das Hinzufügen von albernen Textmarkern, das Einfügen von Tags oder xsim-Befehlen. Auf diese Weise bekommt man eine bessere Vorstellung davon, wie die Dinge funktionieren und welche Anforderungen erfüllt werden müssen.