为考试类别中的问题创建自定义标签

为考试类别中的问题创建自定义标签

我一直在尝试弄清楚如何为我的问题创建一个标记系统,并在摘要表中显示结果(见附图)。

我有一个如下所示的示例 .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

此解决方案需要您提供标签列表按显示顺序。没有标签或不在列表中的问题将被忽略(已计算的总分除外)。

此版本仅在问题之后有效。如果您想要在问题之前获得摘要,您还需要将标签放入辅助文件中。

\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的延续:exsheetshttps://ctan.org/pkg/xsim。这似乎是最适合的一个https://ctan.org/topic/exam

虽然文档这本书太过复杂,我建议从头到尾通读一遍,跳过所有细节,只了解整体思路。它旨在提供练习-解决方案对(如果需要),包括标记。下载 github 代码并查看 /doc/examples 也是一个好主意。

在我评论下面的代码之前,先说几点:

  • 如果你想将“练习”重命名为“问题”,请参阅第 6 章“新练习类型”;你可能可以跳过那里介绍的许多代码
  • 不要害怕“模板”,这只是创建自己的布局和内容的另一种方式;如手册所示,它们使用了很多基本的 Latex 命令
  • 它提供了一些循环命令,让您可以访问您创建的每个练习对象,并根据需要提取信息(参见下面的第一个示例)

在下面的代码中,我将您的问题改写为 xsim-speak,其中第一个问题显示了您可能想要或可能不想使用的一些功能。我最后展示了 xsim 中的练习-解决方案对。

第一条\gradingtable语句水平打印,而更简单的一条语句垂直打印。您可能需要修改这一点,即重写为 xsim 模板以满足您的需求。

最后几行告诉你我迄今为止失败的尝试以接近您想要的输出。主要是手册中的信息对我来说不够,示例并没有真正涵盖它,到目前为止,互联网搜索也没有太大帮助。但也许一些更有使用 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 个文件并在所有打开的文件中找到您感兴趣的搜索词(使其快速而简单)。// 确保不要修改这些文件(!)

B.\gradingtable\NewDocumentCommand:它在 中被定义为xsim.sty。此处仅供参考。要修改,请参阅第 12 章“评分表”。它旨在编写您自己的模板并将其指定给此命令,如\gradingtable[type=myTable]。如何创建和插入您自己的模板myTable(您想要的摘要表)请参阅第 13 章“设置练习模板的样式”。

C. 模板“机制”:参考 Notepad++ 或类似搜索。您可以在、和DeclareExerciseEnvironmentTemplate中找到手册中提到的所有模板。同样,这只是为了看看所有这些 xsim 命令是如何应用的。请参阅xsim.styxsim.style.layouts.code.texxsim-manual.clsA。以上。这应该给你一些想法,如何设计你的预期myTable,见B.

D. xsim 作为工具箱:就像 Latex 一样,xsim 旨在成为一个工具箱。即它提供这些练习和解决方案对象以及它们的所有内部信息。您可以通过 xsim 命令访问它们的内容...并使用此信息起草表格,就像您在示例中所做的那样。而且它非常强大。

E. 改变例子:复制和修改示例是一个好主意,可以在/doc/示例来自 github(见上文),例如更改练习-解决方案对的顺序、删除部分、添加愚蠢的文本标记、引入标签或 xsim 命令。这样,您就可以更好地了解事物的工作原理以及需要满足哪些要求。

相关内容