Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I'm using the exam class to prepare a test.

Unfortunately, the package allows page breaks inside the solution list of a question. Considering this toy example:

\question Example of question. Choose a solution:
\begin{checkboxes}
\choice A
\choice B
\choice C
\CorrectChoice D
\end{checkboxes}

It could be that a pagebreak happens between \choice B and \choice C. How could I prevent that?

Update

The solution proposed by Mico works unless we want to print the solutions to the test AND the last answer of a question is a \CorrectChoice.

Here's a MWE that reproduces the problem:

\documentclass[answers]{exam}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
\usepackage{etoolbox}
\AtBeginEnvironment{checkboxes}{\par\medskip%
     \begin{minipage}{\textwidth}}
\AtEndEnvironment{checkboxes}{%
     \end{minipage}}


\CorrectChoiceEmphasis{}

\begin{document}

\begin{questions}

\question Random text for question 1
\begin{checkboxes}
\choice answer 1
\choice answer 2
\choice answer 3
\choice answer 4
\choice answer 5
\CorrectChoice answer 6
\end{checkboxes}

\question Random text for question 2
\choice answer 1
\choice answer 2
\choice answer 3
\choice answer 4
\choice answer 5
\CorrectChoice answer 6
\end{checkboxes}

\question Random text for question 3
\choice answer 1
\choice answer 2
\choice answer 3
\choice answer 4
\choice answer 5
\CorrectChoice answer 6
\end{checkboxes}

\question Random text for question 4
\choice answer 1
\choice answer 2
\choice answer 3
\choice answer 4
\choice answer 5
\CorrectChoice answer 6
\end{checkboxes}

\question Random text for question 5
\choice answer 1
\choice answer 2
\choice answer 3
\choice answer 4
\choice answer 5
\CorrectChoice answer 6
\end{checkboxes}

\end{questions}

\end{document}

I've solved it by following the 2nd suggestion given here, that is, surround what you don't want to be broken by \parbox. (For the records, using \samepage didn't work.)

share|improve this question
1  
Welcome to TeX.SE. As opposed to providing code snippets, it is always best to compose a MWE that illustrates the problem including the \documentclass so that those trying to help don't have to recreate it. –  Peter Grill Oct 22 '11 at 22:38
    
Will remember for the next time. Thanks for the heads up! –  Jir Oct 23 '11 at 17:53
add comment

2 Answers

up vote 5 down vote accepted

I suggest you modify the checkboxes environment to place them in a LaTeX minipage automatically, as is done in the following MWE. Note that the amount of vertical spacing introduced by the \medskip command can be changed, e.g., to \smallskip or \bigskip, or whatever amount you prefer.

Addendum, posted 10/25/2011: The OP has noted that my originally-provided answer causes a problem if the list of choices ends with a \CorrectChoice option. The answer below is updated to incorporate this possibility; the solution consists of adding the line

\if@correctchoice \endgroup \fi

to the code in \AtEndEnvironment{...}.

The full MWE is:

\documentclass[answers]{exam}
\usepackage{etoolbox}
\AtBeginEnvironment{checkboxes}{%
   \par\medskip\begin{minipage}{\linewidth}}
\makeatletter
\AtEndEnvironment{checkboxes}{%
   \if@correctchoice \endgroup \fi%
   \end{minipage}}
\makeatother

\begin{document}
\begin{questions}

\question Random text for question 1.

Choose a solution: 
\begin{checkboxes}
\choice A
\choice B
\choice C
\CorrectChoice D
\end{checkboxes}
\end{questions}
\end{document}

Observe that this solution implements Werner's suggestion to use the commands \AtBeginEnvironment and \AtEndEnvironment commands provided by the etoolbox package.

share|improve this answer
3  
I think it is much cleaner to patch it using etoolbox - using something like \AtBeginEnvironment/\AtEndEnvironment rather than redefining the entire environment in virtually the same way. Have you tried that? –  Werner Oct 23 '11 at 1:07
    
Thanks, @Werner, for this suggestion. I've changed my answer. –  Mico Oct 23 '11 at 12:02
1  
I removed the etoolbox tag from the question again. Tags should be about the question, not about the answers. As long etoolbox is not requested or mentioned by the question the tag should not be added. –  Martin Scharrer Oct 23 '11 at 16:58
    
Works like a charm. Thanks! –  Jir Oct 23 '11 at 17:54
    
Well... there are some problems when there is a \CorrectChoice as last choice and I want to print the solution sheet. It says ! Extra }, or forgotten \endgroup. \endminipage ...pagefalse \color@endgroup \egroup \expandafter \@iiiparbox \... l.60 \end{checkboxes} But I cannot see how to modify the environment to prevent that. –  Jir Oct 23 '11 at 19:09
show 4 more comments

If you wrap checkboxes in a minipage, that will stop pagebreaks

\begin{minipage}{\linewidth}
\begin{checkboxes}
 \choice A
 \choice B
 \choice C
 \CorrectChoice D
 \end{checkboxes}
 \end{minipage}

If you would like to allow pagebreaks between some choices, but not others, you might use the needspace package, which would allow code such as

\begin{checkboxes}
  \choice A
  \needspace{2\baselineskip}
  \choice B
  \choice C
  \CorrectChoice D
 \end{checkboxes}

This particular example would allow a break after choice A, but not between choice B and choice C

share|improve this answer
    
It works, thanks! I voted for the other option as it saves me from modifying all environments. –  Jir Oct 23 '11 at 17:55
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.