如何检测环境中的环境?(练习中的解决方案)

如何检测环境中的环境?(练习中的解决方案)

对于我和其他人正在编写的一本学习书,我们想包含一些练习。最终我们希望所有练习都有解决方案,但目前由于时间有限,我们只能包含部分练习的解决方案。但是,我们仍然希望包含练习,以便学生尝试找到答案。对于那些没有解决方案的环境,我们希望在练习环境中显示文本或其他内容,以明确表示解决方案尚未可用。

练习通过练习环境实现,解决方案则位于使用答案包创建的解决方案环境中。这些解决方案环境被放置在它们所属的特定练习中。

现在我的问题是:我们如何才能检测练习环境中是否存在解决方案环境?如果存在,如何检测它是否为空?

我认为它应该是这样的(虽然这不是正确的 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}

在此处输入图片描述

相关内容