![Wie kann ich in einer Enumerate-Umgebung, die eine \newpage enthält, nach jedem \item ein \vfill erhalten?](https://rvso.com/image/472713/Wie%20kann%20ich%20in%20einer%20Enumerate-Umgebung%2C%20die%20eine%20%5Cnewpage%20enth%C3%A4lt%2C%20nach%20jedem%20%5Citem%20ein%20%5Cvfill%20erhalten%3F.png)
Ich versuche, ein Notizpaket für meinen Unterricht zu erstellen, das im Wesentlichen aus einer langen Liste von Fragen besteht, 2 oder 3 pro Seite, mit Platz nach jeder Frage, wo die Schüler Lösungen erarbeiten können. Ich verwende das enumitem
Paket und habe einefastperfekte Lösung, indem Sie eine benutzerdefinierte Listenumgebung verwenden und die vertikale Abstandsarbeit definieren itemsep
und ausführen: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}
Das funktioniert gut, bis ich beschließe, die Fragen auf zwei Seiten zu verteilen und manuell Folgendes einfüge \newpage
:
\begin{document}
\begin{questions}
\item First Question
\item Another Question
\newpage
\item Another Question
\item Another Question
\end{questions}
\end{document}
In dieser Version landet Frage 2 am Ende von Seite 1, ohne Leerzeichen danach. Ich kann das irgendwie beheben, indem ich die questions
Liste vor der neuen Seite beende und sie danach neu starte, wie folgt:
\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}
...aber das Beenden und Neustarten der Liste jedes Mal, wenn ich eine neue Seite einfügen möchte, ist mühsam.
Gibt es eine „elegantere“ (sprich: einfachere) Möglichkeit, mit dem enumitem-Paket das gewünschte Verhalten zu erzielen? Ich bin von enumitem ziemlich überzeugt und würde lieber nicht zu einem anderen Paket wechseln, es sei denn, es gibt einen wirklich guten Grund dafür.
Antwort1
Es gibt eine Automatik \vfil
mit \newpage
. Es wurde von zerquetscht \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}
Antwort2
Das Problem besteht darin, dass der \itemsep
Kleber durch den Befehl eingefügt wird \item
, sich also oben auf der zweiten Seite befindet und durch die Regel verworfen wird.
Ich sehe keine Möglichkeit zum „Zurückverfolgen“, denn wenn TeX eine Seite fertiggestellt hat, löscht es sie aus dem Speicher. Sie müssen also \vfill
vor manuell hinzufügen \newpage
.
Durch das Hinzufügen einiger Semantiken können Sie Folgendes tun
\newcommand{\questionbreak}{\vfill\pagebreak}
Beispiel:
\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}
Überprüfen Sie die kleinen Änderungen: \itshape
nimmt kein Argument an. Wenn Sie möchten, dass auch die Nummer kursiv ist, tun Sie dies
label=\textit{Question \arabic*.}