使用修改后的考试成绩表保留超链接问题

使用修改后的考试成绩表保留超链接问题

几个月前,egreg 给了一个精彩答案回答我关于使用exam文档类修改成绩表的问题。最近,在加载hyperref包后,我意识到修改后的表格中指向问题位置的超链接没有保留。

也许经验丰富的用户很容易知道为什么会这样,但 egreg 的代码超出了我的理解范围。我想知道是否有办法修改以下代码以保留问题的超链接:

\documentclass[10pt,addpoints]{exam}
\usepackage{xparse,tabularx,refcount,etoolbox}
\usepackage{hyperref}
\usepackage{lipsum}

\newcounter{grading}
\BeforeBeginEnvironment{questions}{%
  \stepcounter{grading}%
  \gradingtable
}
\AfterEndEnvironment{questions}{%
  \addtocounter{question}{-1}%
  \refstepcounter{question}%
  \label{grading\thegrading @label}%
}

\ExplSyntaxOn
\tl_new:N \l__farlow_grading_tl
\NewDocumentCommand{\gradingtable}{}
 {
  \tl_clear:N \l__farlow_grading_tl
  \int_step_inline:nnnn { 1 } { 1 } { \getrefnumber{grading\thegrading @label} }
   {
    \tl_put_right:Nn \l__farlow_grading_tl
     {
      ##1 \vphantom{$\bigg|$} & & & \\ \hline
     }
   }
  \par\noindent
  \begin{tabularx}{\textwidth}
   {
    | c |
    >{\hsize=0.5\hsize} X |
    >{\hsize=0.5\hsize} X |
    >{\hsize=2.0\hsize} X |
   }
  \hline
  Problem &
  \multicolumn{1}{c|}{Understood} &
  \multicolumn{1}{c|}{Confused} &
  \multicolumn{1}{c|}{Note} \\ \hline
  \tl_use:N \l__farlow_grading_tl
  \end{tabularx}
 }
\ExplSyntaxOff

\begin{document}

\begin{questions}

\fullwidth{\lipsum[1-2]}

\question First question.

\question Second question.

\end{questions}

\end{document}

这将产生以下内容:

在此处输入图片描述

在上面的代码中,我只修改了 egreg 的原始代码通过加载hyperref包以及摆脱 question环境。就我的想法而言,我只需要一个questions环境,但如果表格中的问题编号能够超链接到文档中相应编号的问题,那就太理想了。

是否有一个相对简单的方法可以修改 egreg 的代码来实现这一点,或者这基本上是一个失败的办法?

答案1

您需要做的就是告诉 TeX,在制作表格时,应该删除超链接而不是数字。因此,请更改此行:

  ##1 \vphantom{$\bigg|$} & & & \\ \hline

\ref{question@##1} \vphantom{$\bigg|$} & & & \\ \hline

这是在每个环境开始时创建空白表的行。它循环遍历已设置的一些标签并将它们转储到表中。通过对包进行一些研究(即\process@question从 的扩展中查看 的定义\question),每个问题都设置了一个名为 的标签question@*number*。我们用这些标签替换了 egreg 输入的数字,超链接就在那里。

相关内容