Создавайте собственные теги для вопросов в Exam Class

Создавайте собственные теги для вопросов в Exam Class

Я пытаюсь понять, как создать систему тегов для моих вопросов и отобразить результаты в сводной таблице (см. прикрепленное изображение).

У меня есть пример файла .tex, который выглядит следующим образом.

\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}

Я хотел бы использовать систему тегов для создания сводной таблицы следующим образом. Мои желаемые результаты:

Полученные результаты Любая помощь или руководство будут высоко оценены.

решение1

Это решение требует от вас предоставить список теговв порядке отображения. Вопросы без тегов или отсутствующие в списке будут игнорироваться (за исключением общего количества баллов, которое уже подсчитано).

Эта версия будет работать только после вопросов. Если вы хотите получить резюме до этого, вам также нужно поместить теги в файл 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}

демо

решение2

Скорее всего, у вас все получится, если вы перейдете на пакет xsim, который является продолжением exsheetsтого же автора:https://ctan.org/pkg/xsim. Кажется, это наиболее подходящий вариант из всехhttps://ctan.org/topic/exam.

Хотядокументацияподавляющий, я предлагаю пройти его от начала до конца, пропуская все детали и получая общие идеи. Он предназначен для того, чтобы предоставитьпары упражнение-решение(если нужно), включая теги. Также неплохо скачать код github и посмотреть ad /doc/examples.

Несколько замечаний, прежде чем я прокомментирую приведенный ниже код:

  • если вы хотите переименовать «Упражнение» в «Вопрос», обратитесь к гл. 6 «Новые типы упражнений»; вы, вероятно, можете пропустить большую часть кода, представленного там
  • не бойтесь «Шаблонов», которые представляют собой просто другой способ создания собственного макета и контента; как показано в руководстве, они используют множество базовых команд Latex
  • он предоставляет несколько циклических команд, которые позволяют вам получить доступ к каждому созданному вами объекту упражнения и извлечь информацию по мере необходимости (см. мой первый пример ниже)

В коде ниже я перефразировал ваши вопросы на языке xsim, где первый вопрос показывает некоторые функции, которые вы можете или не можете использовать. В конце я показываю пару упражнение-решение из xsim.

Первый \gradingtableоператор печатает горизонтально, а более простой — вертикально. Это то, что вы можете изменить, т. е. переписать как xsim-template, чтобы соответствовать вашим потребностям.

Последние строки показывают ваммои пока безуспешные попыткичтобы приблизиться к желаемому результату. В основном информация в руководстве была недостаточной для меня, примеры не очень ее охватывали, а поиск в интернете пока не помог. Но, возможно, какой-нибудь более опытный в использовании xsim участник сможет помочь.

Итак, мне кажется, что xsim предоставляет все необходимое для пошагового создания результата... только я еще недостаточно привык к этому пакету ;-)

\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}

Результат:

Скомпилированный вывод

ПС: Здесь я добавлю новые идеи, которые могут возникнуть, например, из дальнейших комментариев.

Предложение: параллельно читать pdf-руководство и xsim-исходный код; код для поиска соответствующих частей, руководство для поиска всех этих xsim-команд. В моей системе 4 исходных файла можно найти вC:..\AppData\Local\Programs\MiKTeX\tex\latex\xsim. Используйте редактор, например Notepad++, откройте эти 4 и найдите интересующие вас поисковые запросы во всех открытых файлах (это быстро и легко). // Убедитесь, что вы не изменили эти файлы (!)

Б. \gradingtable: Он определен как \NewDocumentCommandв xsim.sty. Это место только для просмотра. Чтобы изменить, см. гл. 12 «Таблицы оценок». Он предназначен для написания собственного шаблона и указания его этой команде, например \gradingtable[type=myTable]. Как создать и вставить собственный шаблон myTable(нужную вам сводную таблицу), см. гл. 13 «Оформление шаблонов упражнений».

C. Шаблон "механика": Ссылаясь на Notepad++ или подобный поиск DeclareExerciseEnvironmentTemplate. Вы можете найти все шаблоны, упомянутые в руководстве в xsim.sty, xsim.style.layouts.code.texи xsim-manual.cls. Опять же, это просто для того, чтобы увидеть, как все эти xsim-команды применяются или могут быть применены. Обратитесь кА.выше. Это должно дать вам идеи, как спроектировать задуманное myTable, см.Б..

D. xsim как набор инструментов: Так же как Latex xsim предназначен для использования в качестве набора инструментов. То есть он предоставляет эти объекты Exercise- и Solution- со всей их внутренней информацией. Вы получаете доступ к их содержимому через команды xsim ... И создаете свою таблицу с этой информацией, как вы бы сделали в вашем примере. И это довольно мощно.

E. Разнообразие примеров: Хорошей идеей будет копировать и варьировать примеры, найденные в/doc/примерыиз github (см. выше), например, изменение порядка пар упражнение-решение, удаление частей, добавление глупых текстовых маркеров, введение тегов или xsim-команд. Таким образом, вы получите лучшее представление о том, как все работает, и какие требования должны быть выполнены.

Связанный контент