
He estado tratando de descubrir cómo crear un sistema de etiquetado para las preguntas que tengo y mostrar los resultados en una tabla de resumen (ver imagen adjunta).
Tengo un archivo .tex de muestra que tiene el siguiente aspecto.
\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}
Me gustaría utilizar el sistema de etiquetas para producir una tabla de resumen de la siguiente manera. Mis resultados deseados son:
Respuesta1
Esta solución requiere que proporciones una lista de etiquetas.en el orden de visualización. Las preguntas sin etiquetas o que no estén en la lista serán ignoradas (excepto los puntos totales, que ya están computados).
Esta versión sólo funcionará después de las preguntas. Si desea un resumen antes, también debe colocar las etiquetas en el archivo auxiliar.
\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}
Respuesta2
Lo más probable es que tengas éxito al cambiar al paquete xsim
, que es la continuación exsheets
del mismo autor:https://ctan.org/pkg/xsim. Parece ser el más adecuado dehttps://ctan.org/topic/exam.
Aunque eldocumentaciónes abrumador, sugiero repasarlo de principio a fin, omitiendo todos los detalles y captando las ideas generales. Está destinado a proporcionarpares ejercicio-solución(si es necesario), incluido el etiquetado. También es una buena idea descargar el código de github y echar un vistazo al anuncio /doc/examples.
Algunas observaciones antes de comentar el código a continuación:
- Si desea cambiar el nombre de "Ejercicio" a "Pregunta", consulte el cap. 6 "Nuevos tipos de ejercicios"; probablemente puedas omitir muchos de los códigos presentados allí
- no tengas miedo de las "Plantillas", que son simplemente una forma diferente de crear tu propio diseño y contenido; Como se muestra en el manual, utilizan muchos comandos básicos de Latex.
- proporciona algunos comandos de bucle, que le permiten acceder a cada objeto de ejercicio que creó y extraer información según sea necesario (consulte mi primer ejemplo a continuación)
En el código siguiente, reformulé sus preguntas en xsim-speak, donde la primera muestra algunas funciones que quizás desee o no utilizar. Termino mostrando un par ejercicio-solución de xsim.
La primera \gradingtable
declaración se imprime horizontalmente, mientras que la más sencilla se imprime verticalmente. Esto es algo que quizás quieras modificar, es decir, reescribirlo como una plantilla xsim para adaptarla a tus necesidades.
Las líneas finales te muestranmis intentos hasta ahora fallidospara acercarse al resultado deseado. Básicamente, la información del manual me resultó insuficiente, los ejemplos no lo cubrían realmente y una búsqueda en Internet no me ayudó mucho hasta el momento. Pero quizás algún miembro con más experiencia en el uso de xsim pueda ayudar.
Entonces, para mí, parece que xsim proporciona todo lo que necesitas para crear tu resultado paso a paso... solo que no estaba lo suficientemente acostumbrado a este paquete ;-)
\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}
Resultado:
PD: Aquí agregaré nuevas ideas que puedan surgir, por ejemplo, de comentarios adicionales.
Una sugerencia: lea en paralelo el manual en pdf y el código fuente xsim; código para encontrar piezas relevantes, manual para buscar todos esos comandos xsim. En mi sistema, se pueden encontrar 4 archivos fuente enC:..\AppData\Local\Programas\MiKTeX\tex\latex\xsim. Utilice un editor como Notepad++, abra estos 4 y encuentre términos de búsqueda de su interés en todos los archivos abiertos (lo hace rápido y fácil). // Asegúrate de no modificar estos archivos (!)
B. \ tabla de calificaciones: Se define como un \NewDocumentCommand
in xsim.sty
. Este lugar es sólo para echar un vistazo. Para modificar ver cap. 12 "Tablas de Calificación". Su objetivo es escribir su propia plantilla y especificarla en este comando, como \gradingtable[type=myTable]
. Cómo crear e insertar su propia plantilla myTable
(la tabla resumen que desee) consulte el cap. 13 "Diseñar las plantillas de ejercicios".
C. Plantilla "mecánica": Refiriéndose a Notepad++ o búsqueda similar de DeclareExerciseEnvironmentTemplate
. Puede encontrar todas las plantillas mencionadas en el manual en xsim.sty
, xsim.style.layouts.code.tex
y xsim-manual.cls
. Nuevamente, es solo para ver cómo se aplican o se pueden aplicar todos esos comandos xsim. Referirse aA.arriba. Esto debería darle ideas sobre cómo diseñar lo que pretende myTable
, consulteB..
D. xsim como caja de herramientas: Al igual que Latex, xsim pretende ser una caja de herramientas. Es decir, proporciona estos objetos Ejercicio y Solución, con toda su información interna. Accede a su contenido a través de comandos xsim... Y redacta su tabla con esta información, como lo haría en su ejemplo. Y es bastante poderoso.
E. Variar los ejemplos: Es una buena idea copiar y variar los ejemplos que se encuentran en/doc/ejemplosdesde github (ver arriba), como cambiar el orden de los pares ejercicio-solución, eliminar partes, agregar marcadores de texto tontos, introducir etiquetas o comandos xsim. De esta manera tendrá una mejor idea de cómo funcionan las cosas y qué requisitos deben cumplirse.