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