
Я пытаюсь понять, как создать систему тегов для моих вопросов и отобразить результаты в сводной таблице (см. прикрепленное изображение).
У меня есть пример файла .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-команд. Таким образом, вы получите лучшее представление о том, как все работает, и какие требования должны быть выполнены.