exsheets:将解决方案链接回问题

exsheets:将解决方案链接回问题

使用exsheets,我想将问题链接到他们的解决方案,并将解决方案链接到他们的问题。这个问题也在问题中讨论过如何使用 Exsheets 包自动链接问题和解决方案?,尽管接受的答案只解决了一半的问题(即解决方案-->问题链接)。

我尝试使用solution/pre-body-hook=\label{sol:\CurrentQuestionID}来标记解决方案,然后使用 插入指向它们的链接question/pre-body-hook。(这种方法被建议作为一种可能的方法,在我上面链接的问题中)。

我的问题是,所有解决方案标签似乎都没有指向正确的位置。也就是说,它们都指向解决方案部分,而不是单个解决方案。请参阅下面的完整代码。(注意:exsheets需要 0.19 版本。)

\documentclass{article}
\usepackage[auto-label]{exsheets} %Requires version 0.19
\usepackage{hyperref}
\hypersetup{colorlinks=true, linkcolor=blue}
\usepackage{lipsum}

\SetupExSheets{
    question/pre-body-hook = {%
        \hyperref[sol:\CurrentQuestionID]{Link to Solution}%
        \dots ref value is \ref{sol:\CurrentQuestionID}\\%
        },
    solution/pre-body-hook = {%
        \label{sol:\CurrentQuestionID}%
        \hyperref[qu:\CurrentQuestionID]{Link to Question}\\
    },
    solution/post-body-hook = \newpage,
}

\begin{document}

\section{Problems}
\begin{question}
    \lipsum[1]
\end{question}
\begin{solution}
    \lipsum[2]
\end{solution}

\begin{question}
    \lipsum[3]
\end{question}
\begin{solution}
    \lipsum[4]
\end{solution}

\newpage

\section{Answers}
\printsolutions

\end{document}

有趣的是,如果我使用

solution/pre-body-hook = {%
    \begin{align}\label{sol:\CurrentQuestionID}
        1+1=2 
    \end{align}
}

然后问题-->解决方案链接就可以正常工作了。(当然,我不希望每个解决方案的开头都有一个愚蠢的等式。)

答案1

解决方案没有自己的计数器,因此设置\label是没有用的。\label 总是设置对最后一个已步进的计数器的引用\refstepcounter。这就是为什么您的方程式示例似乎有效。但事实并非如此:标签指的是方程式而不是解决方案。

您可以做的是添加\hypertarget并使用 链接到该内容\hyperlink

相应的问题编号可用作问题属性,其名称为counter。类似这样的代码Link to Solution \GetQuestionProperty{counter}{\CurrentQuestionID}应该会给出你想要的链接文本:

\SetupExSheets{
  question/pre-body-hook = {%
    \hyperlink{sol:\CurrentQuestionID}{Link to Solution
      \GetQuestionProperty{counter}{\CurrentQuestionID}}\par
  },
  solution/pre-hook = {
    \hypertarget{sol:\CurrentQuestionID}{}%
  } ,
  solution/pre-body-hook = {%
    \hyperref[qu:\CurrentQuestionID]{Link to Question
      \GetQuestionProperty{counter}{\CurrentQuestionID}}\par
  }
}

完整文档:

\documentclass{article}
\usepackage[auto-label]{exsheets} %Requires version 0.19
\usepackage{hyperref}
\usepackage{lipsum}

\SetupExSheets{
  question/pre-body-hook = {%
    \hyperlink{sol:\CurrentQuestionID}{Link to Solution
      \GetQuestionProperty{counter}{\CurrentQuestionID}}\par
  },
  solution/pre-hook = {
    \hypertarget{sol:\CurrentQuestionID}{}%
  } ,
  solution/pre-body-hook = {%
    \hyperref[qu:\CurrentQuestionID]{Link to Question
      \GetQuestionProperty{counter}{\CurrentQuestionID}}\par
  }
}

\begin{document}

\section{Problems}
\begin{question}
  \lipsum[1]
\end{question}
\begin{solution}
  \lipsum[2]
\end{solution}

\begin{question}
  \lipsum[3]
\end{question}
\begin{solution}
  \lipsum[4]
\end{solution}

\newpage

\section{Answers}
\printsolutions

\end{document}

相关内容