Page breaks within moderncv

I believe you answered your question yourself Regent :)

In regular circumstances, you do not want the explanation / itemization that goes with a cv entry to be broken up across page. It makes reading your resume and understanding your career achievements harder, which should be avoided at all costs. So in most cases, you simply put your itemize environment inside the last argument of \cventry

For special cases where you explicitly do want to split the explanation / itemize over 2 pages, you put it after the \cventry command.
Finally, note that in these special cases and when using the classic or casual styles, you will have to do the left padding yourself. An (ugly) way around this is to manually break your input over 2 \cventry or \cvitem.


I just discovered this problem today and ended up implementing a custom version of the \cventry command (dubbed \cventrylong) along with a customized itemize list environment cvitemize (via enumitem package):

% customize the enumerate environments (i.e. enumerate, itemize, ...)
\usepackage{enumitem}
\setlist{nolistsep}

% A custom version of the \cventry command that supports large itemized lists
% inside argument #7 (the custom cvitemize lists should be used!)
\newcommand*{\cventrylong}[7][.25em]{%
  \begin{tabular}{@{}p{\hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}p{\maincolumnwidth}@{}}%
    \raggedleft\hintstyle{#2} &{%
        {\bfseries#3}%
        \ifthenelse{\equal{#4}{}}{}{, {\slshape#4}}%
        \ifthenelse{\equal{#5}{}}{}{, #5}%
        \ifthenelse{\equal{#6}{}}{}{, #6}%
    }%
  \end{tabular}%
  {\small#7}%
  \par\addvspace{#1}}
% A custom version of the itemize environment that sets the appropriate left
% margin for use inside \cventylong
\newlist{cvitemize}{itemize}{1}
\setlist[cvitemize]{label=\labelitemi,%
leftmargin=\hintscolumnwidth+\separatorcolumnwidth+\labelwidth+\labelsep}

Using a trimmed version of template.tex provided by the moderncv package, I can demonstrate the results:

  • Before: enter image description here

  • After: enter image description here


Many document classes (notably, the standard classes article, book, and report, the KOMA-Script classes, memoir, and the AMS classes) include the code lines

\@lowpenalty=51

and

\@itempenalty=-\@lowpenalty

i.e., they set \@itempenalty to -51 and hereby encourage page breaks between list items. The moderncv class, however, only includes the second code line, i.e., the class sets \@itempenalty implicitly to 0. I don't know if this was done on purpose or should be considered a bug. However, try to add the following to your document preamble (EDIT: stupid mistake corrected):

\makeatletter
\@itempenalty=-51
\makeatother