使用 xsim 将每个练习/问题限制在一页内

使用 xsim 将每个练习/问题限制在一页内

我可以执行以下操作:

\begin{samepage}
\begin{exercise}
Long text question or maybe a table and some stuff etc.
\end{exercise}
\end{samepage}

但我更希望实现这个自动化(因为我觉得这是可能的)。

我尝试声明一个新的练习环境。尝试按照软件包手册\tcolorbox中的示例进行xsim操作,但不起作用。

\documentclass[]{article}
    \usepackage{xsim}
    \usepackage{lipsum}
    
    \DeclareExerciseEnvironmentTemplate{customex}
      {%
        \begin{samepage}
        \subsection*
          {%
            {
            \XSIMmixedcase{\GetExerciseName}%
            \IfInsideSolutionTF
              {
                %\GetExerciseParameter{exercise-name}%
                ~\GetExerciseProperty{counter}.%
              }
              {%
                ~\GetExerciseProperty{counter}
                \GetExercisePropertyT{subtitle}
                  { {\normalfont\itshape\PropertyValue}}%
              }%
            }
          }
      }
      {\end{samepage}}
      
    \xsimsetup{exercise/template = customex}
    
    \begin{document}
        \begin{exercise}
            \lipsum[1-4]
        \end{exercise}
        
        \begin{exercise}
            \lipsum[1]  
        \end{exercise}
\end{document}

结果是练习 1 被分成 2 页,而不是期望的练习 1 在第 1 页,练习 2 在第 2 页。

答案1

我得到了很好的结果

\xsimsetup{
    exercise/begin-hook  = \begin{samepage},
    exercise/end-hook = \end{samepage},
    solution/begin-hook  = \begin{samepage},
    solution/end-hook = \end{samepage},
}

@cgnieder 使用 pre-hook/post-hook 的解决方案产生了奇怪的效果。

答案2

无需定义任何模板的最简单的方法是

\BeforeBeginEnvironment{exercise}{%
  \begin{samepage}%
}
\AfterEndEnvironment{exercise}{%
  \end{samepage}%
}

由于\samepage“仅”进行一些惩罚设置,因此这无法确保您的练习始终保持一致。(例如,这对您的示例没有帮助)。

如果你想真的确保练习保持在一页上,并且如果您还确定练习不会超过一页,您可以使用minipage

\BeforeBeginEnvironment{exercise}{%
  \noindent\begin{minipage}{\linewidth}%
}
\AfterEndEnvironment{exercise}{%
  \end{minipage}\par
}

如果增加一些垂直空间可能会更好:

\documentclass{article}
\usepackage{xsim,lipsum}

\BeforeBeginEnvironment{exercise}{%
  \vspace{3.5ex plus 1ex minus .2ex}
  \noindent\begin{minipage}{\linewidth}%
}
\AfterEndEnvironment{exercise}{%
  \end{minipage}\par
}


\begin{document}

\begin{exercise}
  \lipsum[1-4]
\end{exercise}

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

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

\end{document}

相关内容