对于我和其他人正在编写的一本学习书,我们想包含一些练习。最终我们希望所有练习都有解决方案,但目前由于时间有限,我们只能包含部分练习的解决方案。但是,我们仍然希望包含练习,以便学生尝试找到答案。对于那些没有解决方案的环境,我们希望在练习环境中显示文本或其他内容,以明确表示解决方案尚未可用。
练习通过练习环境实现,解决方案则位于使用答案包创建的解决方案环境中。这些解决方案环境被放置在它们所属的特定练习中。
现在我的问题是:我们如何才能检测练习环境中是否存在解决方案环境?如果存在,如何检测它是否为空?
我认为它应该是这样的(虽然这不是正确的 LaTeX 语法):
\documentclass{scrbook}
\usepackage{etoolbox}
\usepackage{answers}
\Newassociation{sol}{Solution}{solu}
\newenvironment{exercise}{\textit{Exercise}
\begin{small}
}{
\if %exercise environment does contain sol environment
\if sol environment is empty
no solution available %display this text in document
\fi
\else %exercise environment does not contain sol environment
no solution available %display this text in document
\fi
\end{small}
}
\begin{document}
\Opensolutionfile{solu}[SolutionChapter]
\begin{exercise}
Question?
\begin{sol}
Here is a solution
\end{sol}
\end{exercise}
\begin{exercise}
Question?
\begin{sol}
\end{sol}
\textit{No solution available} %should be automatically detected
\end{exercise}
\begin{exercise}
Question?
\textit{No solution available} %should be automatically detected
\end{exercise}
\Closesolutionfile{solu}
\end{document}
如果解决方案可用,则它们应该由答案包默认处理,以便将它们放在单独的文件中。我对 TeX 中的条件不太熟悉,所以我希望这是可能的。
答案1
测试缺失的sol
环境相当容易,见下文。测试空环境更困难,因为空的与“不包含任何内容”不同。环境中可以有注释、测试和其他材料,但不会打印任何内容。还有空行的问题:此处的测试https://tex.stackexchange.com/a/333783/2388如果环境中有空行,则不起作用。因此,人们可能会在某个框中试排版,然后检查该框的大小。
\documentclass{scrbook}
\usepackage{etoolbox}
\usepackage{answers}
\Newassociation{sol}{Solution}{solu}
\newbool{withsol}
\newcommand{\presol}{\global\booltrue{withsol}}
\newenvironment{exercise}{\textit{Exercise}
\begin{small}\global\boolfalse{withsol}%
}{
\ifbool{withsol} %exercise environment does contain sol environment
{\fbox{\textit{with solution}}}{\fbox{\textit{no solution}}}
\end{small}
}
\begin{document}
\Opensolutionfile{solu}[SolutionChapter]
\begin{exercise}
Question?
\begin{sol}
Here is a solution
\end{sol}
\end{exercise}
\begin{exercise}
Question?
\begin{sol}
\end{sol}
\textit{empty sol: No solution available} %should be automatically detected
\end{exercise}
\begin{exercise}
Question?
\textit{No solution available} %should be automatically detected
\end{exercise}
\begin{exercise}
Question?
\begin{sol}
Here is a solution
\end{sol}
\end{exercise}
\Closesolutionfile{solu}
\end{document}