
Estou tentando descobrir como criar um sistema de marcação para as dúvidas que tenho e exibir os resultados em uma tabela de resumo (veja imagem em anexo).
Eu tenho um arquivo .tex de amostra com a seguinte aparência.
\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}
Eu gostaria de usar o sistema de tags para produzir uma tabela de resumo como segue. Meus resultados desejados são:
Responder1
Esta solução exige que você forneça uma lista de tagsna ordem de exibição. As questões sem tags ou que não constem da lista serão ignoradas (exceto o total de pontos, que já está computado).
Esta versão só funcionará após as perguntas. Se quiser um resumo antes, você também precisa colocar as tags no arquivo aux.
\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}
Responder2
Você provavelmente terá sucesso ao mudar para package xsim
, que é a continuação exsheets
do mesmo autor:https://ctan.org/pkg/xsim. Parece ser o mais adequado dehttps://ctan.org/topic/exam.
Embora odocumentaçãoé opressor, sugiro analisá-lo do início ao fim, ignorando todos os detalhes e obtendo as ideias gerais. Destina-se a fornecerpares exercício-solução(se necessário), incluindo marcação. Também é uma boa ideia baixar o código do github e dar uma olhada no anúncio /doc/examples.
Algumas observações antes de comentar o código abaixo:
- se você quiser renomear "Exercício" para "Pergunta", consulte o cap. 6 “Novos Tipos de Exercício”; você provavelmente pode pular muitos códigos apresentados lá
- não tenha medo dos “Templates”, que são apenas uma forma diferente de criar seu próprio layout e conteúdo; como mostrado no manual eles usam muitos comandos básicos do Latex
- ele fornece alguns comandos de looping, que permitem acessar cada objeto de exercício que você criou e extrair informações conforme necessário (veja meu primeiro exemplo abaixo)
No código abaixo reformulei suas perguntas em xsim-speak, onde a primeira mostra alguns recursos que você pode ou não querer usar. Termino mostrando um par exercício-solução do xsim.
A primeira \gradingtable
instrução é impressa horizontalmente, enquanto a mais fácil é impressa verticalmente. Isso é algo que você pode querer modificar, ou seja, reescrever como um modelo xsim para atender às suas necessidades.
As linhas finais mostram a vocêminhas tentativas até agora fracassadaspara se aproximar da saída desejada. Principalmente as informações do manual eram insuficientes para mim, os exemplos não cobriam realmente e uma pesquisa na Internet não ajudou muito até agora. Mas talvez algum membro mais experiente no uso do xsim possa ajudar.
Então, para mim, parece que o xsim fornece tudo que você precisa para criar seu resultado passo a passo ... só que eu não estava acostumado o suficiente com este pacote ;-)
\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:
PS: Aqui acrescentarei novos insights que podem surgir, por exemplo, de comentários adicionais.
Uma sugestão: leia em paralelo o manual em pdf e o código-fonte do xsim; código para encontrar partes relevantes, manual para procurar todos os comandos xsim. No meu sistema, 4 arquivos de origem podem ser encontrados emC:..\AppData\Local\Programas\MiKTeX\tex\latex\xsim. Use um editor como o Notepad ++, abra estes 4 e encontre os termos de pesquisa de seu interesse em todos os arquivos abertos (torna isso rápido e fácil). // Certifique-se de não modificar esses arquivos (!)
B.\tabela de classificação: É definido como um \NewDocumentCommand
in xsim.sty
. Este lugar é só para dar uma olhada. Para modificar ver cap. 12 "Tabelas de Classificação". A intenção é escrever seu próprio modelo e especificá-lo neste comando, como \gradingtable[type=myTable]
. Como criar e inserir seu próprio modelo myTable
(a tabela de resumo desejada) consulte o cap. 13 "Estilizando os Modelos de Exercício".
C. Modelo "mecânica": Referindo-se ao Notepad++ ou pesquisa semelhante por DeclareExerciseEnvironmentTemplate
. Você pode encontrar todos os modelos mencionados no manual xsim.sty
em xsim.style.layouts.code.tex
e xsim-manual.cls
. Novamente, é apenas para ver como todos esses comandos xsim são ou podem ser aplicados. Referir-seA.acima. Isso deve lhe dar ideias sobre como projetar o que você pretende myTable
, consulteB..
D. xsim como uma caixa de ferramentas: Assim como o Latex, o xsim pretende ser uma caixa de ferramentas. Ou seja, ele fornece a esses objetos Exercício e Solução todas as suas informações internas. Você acessa o conteúdo deles via xsim-commands ... E elabora sua tabela com essas informações, como faria no seu exemplo. E é bastante poderoso.
E. Variando os exemplos: É uma boa ideia copiar e variar exemplos, encontrados em/doc/exemplosdo github (veja acima), como alterar a ordem dos pares exercício-solução, excluir partes, adicionar marcadores de texto bobos, introduzir tags ou comandos xsim. Dessa forma, você tem uma ideia melhor de como as coisas funcionam e quais requisitos devem ser atendidos.