我一直在绞尽脑汁解决这个问题,不知道我做错了什么。此代码高度基于此解决方案但有些东西没有点击。目标是能够稍后在我的代码中引用解决方案环境的内容。
以下是我正在处理的工作:
\documentclass[addpoints,12pt]{exam}
\usepackage{environ}
\makeatletter
\NewEnviron{sol}{
\begin{solution}
\def\@currentlabel{\BODY}\label{solt:\thequestion}
\BODY
\end{solution}
}
\makeatother
\begin{document}
\begin{questions}
\question This is a question
\begin{sol}
My solution
\end{sol}
\begin{choices}
\choice 8
\choice 1
\choice 3
\choice 4
\end{choices}
\end{questions}
The first solution is:\\
\ref{solt:1}
\end{document}
当我运行此程序时,我收到无效引用。有什么提示可以指出我可能做错了什么吗?
答案1
该解决方案未排版,因此您的标签永远不会在文件中生成.aux
,我认为您打算
\documentclass[addpoints,12pt]{exam}
\usepackage{environ}
\makeatletter
\NewEnviron{sol}{%
\def\@currentlabel{\BODY}\label{solt:\thequestion}%
\begin{solution}%
\BODY
\end{solution}%
}
\makeatother
\begin{document}
\begin{questions}
\question This is a question
\begin{sol}
My solution
\end{sol}
\begin{choices}
\choice 8
\choice 1
\choice 3
\choice 4
\end{choices}
\end{questions}
The first solution is:\\
\ref{solt:1}
\end{document}
但是使用带有自动生成密钥的 a\label
似乎很危险,对文件的任何编辑都意味着问题会得到一个新编号,因此将在没有任何警告的情况下引用另一个问题。 更符合/\ref
的精神的是为您的环境提供一个参数,以便您提供一个要在 中使用的名称,然后您也可以在 中使用它。\label
\ref
sol
\label
\ref