不破坏练习解答环境的启动

不破坏练习解答环境的启动

假设我有一个环境\begin{sol} ... \end{sol}用于编写测试练习的答案。出于实际原因,我希望两个或多个答案可以放在同一个页面中,但前提是它们的全部内容都只在这个页面上。

例如,如果练习 1 和 2 的解决方案只在同一页中,则可以将它们放在一起,但如果没有,则解决方案 1 必须是单独的,然后解决方案 2 必须从新的一页开始。

主要问题是解决方案的大小不固定,它们可能小于一页,也可能不止一页。它可能有一个小解决方案,后面跟着另一个小解决方案,也可能没有。

解决方案的数量也不是固定的。事实上,实际上我需要少于 10 个解决方案。

答案1

读过“不要将答案放在评论中”的说明后,这里是我的“\filbreak”答案作为答案。

\documentclass[12pt,a5paper]{article}
\usepackage[margin=20mm]{geometry}
\usepackage{lipsum}

\newenvironment{sol}{\paragraph{Solution:}}{\filbreak\bigbreak} 

\begin{document}
\begin{sol} \lipsum[3] \end{sol}
\begin{sol} \lipsum[3] \end{sol}
\begin{sol} \lipsum[3-10] \end{sol}
\begin{sol} Very short one \end{sol}
\begin{sol} Very short one \end{sol}
\begin{sol} \lipsum[3] \end{sol}
\begin{sol} Very short one \end{sol}
\end{document}

输出

答案2

这里有一种方法,可以允许解决方案长度超过一页。我们先排版它们,然后测量它们的高度,如果它们不适合当前页面,那么我们先发布一个\clearpage

\documentclass{article}

\usepackage{etoolbox,environ}
\newsavebox{\mytmpbox}

\newcounter{solution}

\NewEnviron{sol}{\setbox\mytmpbox\vbox{\bigskip
\stepcounter{solution}\noindent{\textbf{Solution~\thesolution.}} \BODY\par}%
\ifdimgreater{\ht\mytmpbox}{\pagegoal-\pagetotal}{\clearpage}{}%
\unvbox\mytmpbox\bigbreak
}

\usepackage{lipsum}

\begin{document}

\begin{sol}
  \lipsum[1]
\end{sol}

\begin{sol}
  \lipsum[2]
\end{sol}

\begin{sol}
  \lipsum[3-10]
\end{sol}

\begin{sol}
  \lipsum[11]
  \begin{equation}
    x = y
  \end{equation}
  \lipsum[12]
\end{sol}
\end{document}

这会将解决方案 1 和 2 放在第 1 页上,将解决方案 3 放在第 2 页的顶部并扩展到第 3 页,将解决方案 4 放在第 3 页的剩余空间中。

第 1 页:

第 1 页

第 2 和 3 页:

第 2 和第 3 页

答案3

在下面的解决方案中,我为解决方案环境“设计”了一个非常简单的外观。您可以根据需要随意更改/自定义它。但是,样式对于解决方案来说并不重要,它只是将解决方案主体包装成\vbox。这已经完成了工作。

在示例中,“解决方案 1”和“解决方案 2”可以保留在一页上,但“解决方案 3”不适合放在同一页上,因此它会跳转到下一页。

代码

\documentclass{article}
\usepackage{environ}
\usepackage{lipsum}

\newcounter{sol}
  \providecommand{\solname}{Solution}
\NewEnviron{sol}{%
  \parindent=0em
  \par
  \stepcounter{sol}
    \vbox{%
    \bgroup\itshape \solname\space\thesol.\egroup
    \par
    \BODY
    }
  \par\bigskip
}

\begin{document}
\begin{sol}
  \lipsum[1]
\end{sol}
\begin{sol}
  \lipsum[2]
\end{sol}
\begin{sol}
  \lipsum[3-6]
\end{sol}
\end{document}

输出

无中断 无中断

相关内容