自定义考试类别评分表:如何访问自定义命令的 numinrange

自定义考试类别评分表:如何访问自定义命令的 numinrange

我如何获取输出\numqinrange并在自己的自定义命令中使用它?

我为考试类创建了一个自定义评分表。这样我就可以向用于评分考试的表格中添加自定义元素。我的考试 latex 文件中的所有内容都是自动的(问题总数、每部分的分数等),从而减少将来考试时用户的错误。但是,目前,为了使用我的自定义\GradingTable命令,您必须输入问题范围的开始和结束。我怎样才能使它自动化?由于\numqinrange输出我需要的精确数字,因此将其放入命令中会很好\GradingTable

我尝试过很多解决方案,包括\expandafter,但我对 LaTeX 不够熟悉,无法使其发挥作用。

这是一个最小工作示例:


\documentclass[12pt, addpoints]{exam}

% Grading Table Packages
\usepackage{makecell}
\usepackage{adjustbox}
\usepackage{forloop}
\usepackage{xfp}

\begin{document}

\begin{questions}

\section*{Section A}
\label{section-a}
\begingradingrange{seca}
\question[4] Question Text
\question[7] Question Text
\endgradingrange{seca}

\section*{Section B}
\label{section-b}
\begingradingrange{secb}
\question[2] Question Text
\question[8] Question Text
\endgradingrange{secb}

\end{questions}

\newcounter{QNum}
\newcommand{\InnerContent}[2]{
    \forloop{QNum}{#1}{\value{QNum} < \fpeval{#2+1}}
    {   \\\hline
        $\theQNum$ &
        \pointsofquestion{\value{QNum}} &
        \makecell{\vspace{-1mm} \\ ------ \\ \vspace{-1mm}} &
        \makecell{\vspace{-1mm} \\ ------ \\ \vspace{-1mm}}}
}

\newcommand{\GradingTable}[3]{
\adjustbox{valign=t}{
\begin{tabular}{|c|c|c|c|} \hline
    \multicolumn{4}{|c|}{#1} \\\hline
    Q & P & M1 & M2%
    \InnerContent{#2}{#3}
    \\\hline
\end{tabular}
}
}

% These numbers: "1,2,3,4" are hard coded. How can I use the "numinrange" to automate this?
\GradingTable{Section A}{1}{2}
\GradingTable{Section B}{3}{4}

% This does not work
% \GradingTable{Section A}{1}{\numqinrange{seca}}


\end{document}

在此处输入图片描述

任何帮助都值得感激。谢谢。

劳埃德

答案1

我重写了一些\InnerContent,所以现在您可以使用\GradingTable{<title of the table>}{<range>}

例如,\GradingTable{Section A}{seca}会生成第一个表格,其中范围内的问题编号会自动填入。

第一次将编译三次来构建表。

A

(为了测试目的添加了一个问题和起始问题编号)

\documentclass[12pt, addpoints]{exam}

% Grading Table Packages
\usepackage{makecell}
\usepackage{adjustbox}
\usepackage{forloop}

\newcounter{QNum}
%% ************************************  added
\makeatletter
\newcommand{\InnerContent}[1]{% #1 => range name
\@ifundefined{range@#1@firstq}{\\\hline &&&}{%      
    \forloop{QNum}{\csname range@#1@firstq\endcsname}{\numexpr\value{QNum}-1  <\csname range@#1@lastq\endcsname}
    { \\\hline
        \theQNum &
        \pointsofquestion{\value{QNum}} &
        \makecell{\vspace{-1mm} \\ ------ \\ \vspace{-1mm}} &
        \makecell{\vspace{-1mm} \\ ------ \\ \vspace{-1mm}}
    }}
        }   
\makeatother
%%***********************************************

\newcommand{\GradingTable}[2]{% #1 => table title, #2 => range name
\adjustbox{valign=t}{%
    \begin{tabular}{|c|c|c|c|} \hline
        \multicolumn{4}{|c|}{#1} \\\hline
        Q & P & M1 & M2%
        \InnerContent{#2}
        \\\hline
    \end{tabular}
                }
                        }

\begin{document}
    
\begin{questions}
    
    \addtocounter{question}{5} % added for testing
    \section*{Section A}
    \label{section-a}
    \begingradingrange{seca}
    \question[4] Question Text 1
    \question[7] Question Text 2
    \endgradingrange{seca}

    
    \section*{Section B}
    \label{section-b}
    \begingradingrange{secb}
    \question[2] Question Text 3
    \question[8] Question Text 4
    \question[10] Question Text 5  % added for testing
    \endgradingrange{secb}      

\end{questions}

\GradingTable{Section A}{seca}

\bigskip

\GradingTable{Section B}{secb}  
    
\end{document}

相关内容