考试持续解决方案框架

考试持续解决方案框架

新编辑:magula 提出的答案曾经适用于 版本,但现在2.5不再exam.cls适用于当前版本2.603。 以下内容作为 版本的注释包含在内2.601:“我们更改了代码中的命令和环境名称,这些代码来自 exam.cls 中包含的 framed.sty(略作修改),以便用户可以说 \usepackage{framed} 而不会产生冲突。这还允许用户使用加载 framed.sty 的软件包,例如 minted.sty。”我不确定现在所做的更改是否会使当前给出的答案/破解变得无用,但它只是不再起作用了。

问题:TheSolution更新环境,使得为解决方案提供的框架框不会分解为不同页面上的单独框,如图所示这个问题

代码

\documentclass[answers]{exam}
\usepackage{lipsum}
\usepackage{mdframed}

\def\MakeFramed#1{\begin{mdframed}}
\def\endMakeFramed{\end{mdframed}}

\begin{document}

\begin{questions}

\question A short question.
\begin{solution}
A short solution.
\end{solution}

\question A question with a long solution.

\begin{solution}
The long solution continues onto another page: \lipsum[1-8]
\end{solution}

\end{questions}
\end{document}

产生如下分页符

在此处输入图片描述

而不是以下期望的外观:

在此处输入图片描述

手册,第 74 页,其中提到,可以\renewenvironment通过更改 的定义来完全自定义解决方案环境TheSolution。我的问题是如何才能使框架以上面指示的所需方式延伸到下一页,以及此问题开头链接的问题。

答案1

使用新版本,您需要更改以重新实现原始解决方案的命令是exam@MakeFramedendexam@MakeFramed

所以你应该改变

\def\MakeFramed#1{\begin{mdframed}}
\def\endMakeFramed{\end{mdframed}}

\makeatletter
\def\exam@MakeFramed#1{\begin{mdframed}}
\def\endexam@MakeFramed{\end{mdframed}}
\makeatother

这是 TeX 中命名空间的一个经典示例,其中私有宏的名称以其所属包的名称作为前缀。

答案2

只需重新定义TheSolution环境似乎就mdframed可以了。您可以添加标题“解决方案:”,并提供额外的垂直间距以匹配原始样式:

示例输出

带有分页符

样品休息

\documentclass[answers]{exam}
\usepackage{lipsum}
\usepackage{mdframed}

\renewenvironment{TheSolution}{\begin{mdframed}[skipabove=\baselineskip,innertopmargin=\baselineskip,innerbottommargin=\baselineskip]
  \textbf{Solution:}\enspace\ignorespaces}{\end{mdframed}}

\begin{document}

\begin{questions}

\question A short question.
\begin{solution}
A short solution.
\end{solution}

\question A question with a long solution.

\begin{solution}
The long solution continues onto another page: \lipsum[1-8]
\end{solution}

\end{questions}
\end{document}

答案3

\usepackage{mdframed}

\def\MakeFramed#1{\begin{mdframed}}
\def\endMakeFramed{\end{mdframed}}

这只是用 mdframed 命令替换 TheSolution 在内容开始和结束时使用的命令。

相关内容