如何在包含 \newpage 的枚举环境中在每个 \item 之后获得 \vfill?

如何在包含 \newpage 的枚举环境中在每个 \item 之后获得 \vfill?

我正在尝试为我的班级创建一个笔记包,它基本上是一个长长的问题列表,每页 2 或 3 个问题,每个问题后面都有空间让学生找出答案。我正在使用这个enumitem包,我已经制定了一个几乎完美的解决方案,使用自定义列表环境并定义itemsepafter执行垂直间距工作:

\documentclass{article}
\usepackage[shortlabels]{enumitem}
\newlist{questions}{enumerate}{1} 
\setlist[questions]{label=\itshape{{Question }\arabic*.},
                    ref={Question }\arabic*,
                    leftmargin=*,
                    itemindent=*,
                    itemsep=\fill, 
                    after={\vfill},
                    resume}

\begin{document}
    \begin{questions}
        \item First Question
        \item Another Question
        \item Another Question
        \item Another Question
    \end{questions}
\end{document}

这很好用,直到我决定将这些问题分散到两页上,通过手动插入\newpage

\begin{document}
    \begin{questions}
        \item First Question
        \item Another Question
           \newpage
        \item Another Question
        \item Another Question
    \end{questions}
\end{document}

在这个版本中,问题 2 最终出现在第 1 页的底部,后面没有空格。我可以通过questions在新页面之前结束列表,然后重新启动列表来解决这个问题,如下所示:

\begin{document}
    \begin{questions}
        \item First Question
        \item Another Question
    \end{questions}
           \newpage
    \begin{questions}
        \item Another Question
        \item Another Question
    \end{questions}
\end{document}

...但每次我想要插入新页面时结束并重新启动列表很麻烦。

有没有更“优雅”(即更简单)的方式来使用 enumitem 包实现我想要的行为?我对 enumitem 非常满意,除非有充分的理由,否则我宁愿不切换到其他包。

答案1

有一个自动\vfil\newpage。它被压垮了\fill

\documentclass{article}
\usepackage[shortlabels]{enumitem}
\newlist{questions}{enumerate}{1} 
\setlist[questions]{label=\itshape{{Question }\arabic*.},
                    ref={Question }\arabic*,
                    leftmargin=*,
                    itemindent=*,
                    itemsep=0pt plus 1fil, 
                    resume}

\begin{document}
    \begin{questions}
        \item First Question
        \item Another Question
    \newpage
        \item Another Question
        \item Another Question
    \end{questions}
\end{document}

答案2

问题在于,\itemsep粘合是由命令插入的\item,因此它位于第二页的顶部并被规则丢弃。

我看不出有“回溯”的方法,因为 TeX 完成一页后会将其从内存中删除。因此你需要手动\vfill在 前面添加\newpage

添加一些语义,你可以这样做

\newcommand{\questionbreak}{\vfill\pagebreak}

例子:

\documentclass{article}
\usepackage{enumitem}

\newlist{questions}{enumerate}{1}
\setlist[questions]{
  label=\textit{Question} \arabic*.,
  ref=Question \arabic*,
  leftmargin=*,
  itemindent=*,
  itemsep=\fill,
  after=\vfill,
  resume,
}

\newcommand{\questionbreak}{\vfill\pagebreak}

\begin{document}

\begin{questions}
\item First Question

\item Another Question

\questionbreak

\item Another Question

\item Another Question

\end{questions}

\end{document}

在此处输入图片描述

检查小的变化:\itshape不接受参数。如果您还希望数字以斜体显示,请执行

label=\textit{Question \arabic*.}

相关内容