moderncv 中的分页符

moderncv 中的分页符

我正在排版一份包含长itemize列表的文档,大多数情况下,LaTeX 会在环境前留出大量空白,以便将其完全放在一页上。

我怎样才能让 LaTeX 在列表内放置分页符?

更新:我发现当不在\cventry命令中使用时它也能正常工作。

有没有办法修复\cventry定义以避免不破坏行为?

moderncvstylebanking.sty

\renewcommand*{\cventry}[7][.25em]{
  \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r}%
      {\bfseries #4} & {\bfseries #5} \\%
      {\itshape #3\ifthenelse{\equal{#6}{}}{}{, #6}} & {\itshape #2}\\%
  \end{tabular*}%
  \ifx&#7&%
    \else{\\\vbox{\small#7}}\fi%
  \par\addvspace{#1}}

例子:我原来是\cventry这样使用的:

\cventry{March 2009--April 2011}{Software Developer}{Company}{City}{}{
    \begin{itemize}
        \item Item 1;
        % Lots of items here
        \item Item n.
    \end{itemize}
}

可能我只是误用了,\cventry因为使用以下内容就可以了:

\cventry{March 2009--April 2011}{Software Developer}{Company}{City}{}{}
\begin{itemize}
    \item Item 1;
    % Lots of items here
    \item Item n.
\end{itemize}

答案1

我相信你自己已经回答了你的问题,摄政王:)

在一般情况下,您不希望简历条目附带的解释/条目分散在各个页面上。这会使阅读简历和了解您的职业成就变得更加困难,应不惜一切代价避免这种情况。因此,在大多数情况下,您只需将您的itemize环境放在\cventry

对于您明确希望将说明 / 拆分itemize为 2 页的特殊情况,请将其放在\cventry命令后面。
最后,请注意,在这些特殊情况下以及使用classiccasual样式时,您必须自己进行左填充。解决这个问题的一个(丑陋的)方法是手动将您的输入拆分为 2\cventry\cvitem

答案2

我今天才发现这个问题,并最终实现了该\cventry命令的自定义版本(称为\cventrylong)以及自定义的 itemize list 环境cvitemize(通过enumitem包):

% 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}

template.tex使用包提供的修剪版本moderncv,我可以演示结果:

  • 前: 在此处输入图片描述

  • 后: 在此处输入图片描述

答案3

许多文档类(特别是标准类articlebookreport、KOMA-Script 类、memoir和 AMS 类)都包含代码行

\@lowpenalty=51

\@itempenalty=-\@lowpenalty

即,它们设置\@itempenalty为 -51,从而鼓励在列表项之间进行分页。moderncv但是,该类仅包含第二行代码,即该类隐式设置\@itempenalty为 0。我不知道这是故意为之还是应该被视为错误。但是,请尝试将以下内容添加到您的文档序言中(编辑:纠正了愚蠢的错误):

\makeatletter
\@itempenalty=-51
\makeatother

答案4

为了补充@Xavier 的回答,我在这里发布了一个自定义环境的代码,它模仿了for和主题mcvitemize的行为。\cventryclassiccasual

\newenvironment{mcvitemize}
{%
    \addtolength{\leftmargini}{\dimexpr\hintscolumnwidth+\separatorcolumnwidth}
    \small
    \begin{itemize}
}{%
    \end{itemize}
}

其中\addtolength{\leftmargini}{\dimexpr\hintscolumnwidth+\separatorcolumnwidth}控制项目的左填充。\hintscolumnwidth\separatorcolumnwidth是类定义的长度modenrcv

要使用它,只需将代码添加到序言中,然后执行

\cventry{March 2009--April 2011}{Software Developer}{Company}{City}{}{}
\begin{mcvitemize}
    \item Item 1;
    % Lots of items here
    \item Item n.
\end{mcvitemize}

相关内容