[Tex/LaTex] Vertical spacing for writing answers

listspage-breakingspacing

I couldn't find any answers to this issue, so I hope you LaTeX gurus can help me out.

I am formatting a study guide with the KOMA scrbook class. Throughout there are (enumerated) lists of discussion questions, and there needs to be vertical space to write down responses. (I imagine this is similar to writing tests, so somebody must have done this before and can tell me how…)

What I'm doing is pretty hacky, I just have manually-inserted \vskips between \items, like this:

\begin{enumerate}
\item Here is the first question.
\vskip 3cm % space to write an answer
\item Here is a second question.
\vskip 3cm 
\item Hey look another question.
\vskip 3cm
\end{enumerate}

The problem is that when a pagebreak lands in the middle of such a list, the last question on the page ends up flush to the bottom, so it gets no writing space (except the bottom margin). Also, the spacing above the start of the list is spread out to try and compensate for the stretch.

What I want is

  1. to force vertical space after every question, even at the bottom of a page
  2. to keep vertical space above the beginning of a question section normal — extra space can be either added to the bottom question on the page, or stretch applied equally just to the \items in the enumerated list
  3. to do this without having to put manual commands at the pagebreaks, because
    • this would be a pain to correct if the pagination changes while I edit, and
    • this obviously goes against the spirit of LaTeX.

Thx in advance for help, I'm sure it will turn out to be easier than I realize!

Edit: as suggested, I will start reading the enumitem documentation, but meanwhile here is a complete LaTeX file that illustrates how Question 3 doesn't get its full space.

\documentclass{article}

\usepackage[showframe]{geometry}

\usepackage{enumitem}
\setlist[enumerate]{itemsep=8\baselineskip, after=\vspace{8\baselineskip}}

\begin{document}

Lorem ipsum dolor sit amet...

\vskip 8cm

...pronunciation e plu sommun paroles.

\section*{Discussion}
\begin{enumerate}
\item This is the first question
\item This is the second question; both of these should share the 
    extra stretch from Question 3
\item Here's the third question, 
    which should trigger a pagebreak so it can get its full allotment of vspace.
\item Question
\item Question
\item Question
\end{enumerate}

Lorem ipsum dolor sit amet...

\end{document}

Edit again: stackexchange is not letting me answer my own question for 8 hours, so here it is here instead…

So the enumitem package didn't help me; maybe it's possible to get it to do what I want, but what did work was to enclose each \item in a \parbox[t]{\linewidth}{item text goes here} (which LaTeX will not break), like this:

\documentclass{article}

\usepackage[showframe]{geometry}

\begin{document}

Lorem ipsum dolor sit amet...

\vskip 8cm

...pronunciation e plu sommun paroles.

\section*{Discussion}
\begin{enumerate}
\item \parbox[t]{\linewidth}{This is the first question\vskip 8\baselineskip}
\item \parbox[t]{\linewidth}{This is the second question; both of these should 
   share the extra stretch from Question 3\vskip 8\baselineskip}
\item \parbox[t]{\linewidth}{Yay, I'm on the next page!.\vskip 8\baselineskip}
\item \parbox[t]{\linewidth}{Were any of questions 1-3 actually 
  questions?\vskip 8\baselineskip}
\end{enumerate}

Lorem ipsum dolor sit amet...

\end{document}

Best Answer

Always post complete (minimal) documents as it takes a lot of guesswork out of composing suitable answers, but assuming a relatively straightforward document, perhaps this is what you mean:

\documentclass{article}  
\usepackage[T1]{fontenc}  
\usepackage[showframe]{geometry}   
\usepackage{enumitem}   
\setlist[enumerate]{itemsep=8\baselineskip, after=\vspace{8\baselineskip}}
% cheap trick to 'require' \item to have '8\baselineskip':
\usepackage{etoolbox}  % \apptocmd
\usepackage{needspace} % \needspace
\apptocmd{\item}{\needspace{8\baselineskip}}{}{}

\begin{document}    

\null\vfill      
some text.      

\begin{enumerate}    
\item Q.   

\item Q.   

\item Q.   

\end{enumerate}        
% \newpage % <-- uncomment to compare 
%        
%             
more text.           

\end{document}

Remarks

Read the documentation for enumitem to see the other otions/possibilities it allows. \usepackage[showframe]{geometry} is just to help you visualize what is happening. I think using some multiple of \baselineskip is more advisable to the more rigid '3cm' you are asking for, but that is easily changed if you really need it to be 3 cm.