![Как получить \vfill после каждого \item в среде перечисления, которая включает \newpage?](https://rvso.com/image/472713/%D0%9A%D0%B0%D0%BA%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%5Cvfill%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%BA%D0%B0%D0%B6%D0%B4%D0%BE%D0%B3%D0%BE%20%5Citem%20%D0%B2%20%D1%81%D1%80%D0%B5%D0%B4%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%2C%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%B0%D1%8F%20%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D1%82%20%5Cnewpage%3F.png)
Я пытаюсь создать пакет заметок для своего класса, который в основном представляет собой длинный список вопросов, по 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*.}