我正在使用练习包来编写练习及其相应的答案。我有数百个练习,每个练习都在自己的文件中。练习将包含在两个单独的文档中。在第一个文档中,每个练习应该不带答案出现,而在第二个文档中,它们应该与答案一起出现。为此,我noanswer
在第一个文档中使用了包选项。问题是,在第一个文档中,答案中定义的任何引用都被报告为未定义,即使对它们的唯一引用也在答案中。
例如:
\documentclass{article}
\usepackage{mwe}
\usepackage{float}
\usepackage[noanswer]{exercise}
\begin{document}
\begin{Exercise}
\label{exe:some_exercise}
\blindtext
\end{Exercise}
\begin{Answer}[ref={exe:some_exercise}]
\begin{figure}[H]
\centering
\includegraphics[width=.48\linewidth]{example-image-a}
\caption{MWE figure}
\label{fig:some_figure}
\end{figure}
\blindtext as shown in Figure~\ref{fig:some_figure}.
\end{Answer}
\end{document}
报告:
LaTeX Warning: Reference `fig:some_figure' on page 1 undefined on input line 20
我尝试过其他包选项,例如answerdelayed
,然后从不调用\shipoutAnswer
,但存在同样的问题。如何抑制由未包含的练习答案引起的未定义引用警告,但在正在排版的文档部分中仍然会看到未定义引用的警告?
编辑:
我发现了类似的问题并有一个答案,但我不知道如何将其答案应用到练习包中。
答案1
如果您设置了 [noanswer],请尝试在加载 exercise.sty 后添加以下两行:
\expandafter\let\expandafter\InitAnswer\csname @InitAnswer\endcsname
\expandafter\def\csname @InitAnswer\endcsname{\def\ref##1{?}\InitAnswer}
出现问题的原因是,\vbox
如果设置了 [noanswer] 选项,则通常会处理 Answer 文本,并且不使用结果。这意味着\ref
需要知道标签,但标签不会写入辅助文件,因为这\write aux{... label}
是打印材料中未使用的一部分\vbox
。异步\write
原语在这里发挥了作用。