
Я пытаюсь создать пакет заметок для своего класса, который в основном представляет собой длинный список вопросов, по 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*.}