Ich habe enumerate und itemize-Listen. Manchmal möchte ich für jeden Aufruf von \item einen vordefinierten Code ausführen lassen. Das kann Farbe oder Schrift betreffen, oder einen eigenen mitlaufenden Zähler bei itemize erhöhen. Also ich möchte eigenen Code global definieren und "einhaken"

  • direkt vor jedem \item
  • direkt nach \item, also am Beginn des folgenden Stichpunkts

Zum Beispiel bei der Anwendung, dass ich bei längeren Listen stets ein \needspace einfüge, um einzeln stehende Zeilen zu vermeiden:

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{forloop}
\newcounter{items}
\usepackage{needspace}
\begin{document}
\begin{enumerate}
  \forloop{items}{1}{\value{items} < 10}
    {\needspace{2\baselineskip}\item \blindtext}
\end{enumerate}
\end{document}

Ohne \needspace sähe das Seitenende nämlich so aus:

Seitenumbruch in enumerate

Zum Testen habe ich das in einer forloop-Schleife geschrieben. In einem realen Text mit zig items müsste ich es ja zigmal schreiben. Wie kann ich das einmal für alle items vorgeben?

gefragt 24 Feb '14, 13:41

Student's gravatar image

Student
4702577103
Akzeptiert: 96%


Vorab der Hinweis von @Clemens: \item wird auch an versteckten Stellen aufgerufen, zum Beispiel der {center} und der {quote} Umgebung ... Änderungen an \item können deshalb unerwartete und unerwünschte Folgen haben.

Du könntest das Paket etoolbox verwenden und dann \preto\item{<code>} nutzen. Dann wird <code> immer unmittelbar vor \item ausgeführt. Um die Wirkung dieser Änderung zu beschränken, kann man sie mit dem Paket enumitem nur für die {enumerate} Umgebung vornehmen oder sich eine neue Umgebung definieren. Innerhalb dieser gilt aber weiter obige Warnung.

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{forloop}
\newcounter{items}
\usepackage{needspace}

\usepackage{etoolbox}
\usepackage{enumitem}
\setlist[enumerate]{before=\preto\item{\needspace{2\baselineskip}}}

\begin{document}
\begin{enumerate}
  \forloop{items}{1}{\value{items} < 10}
    {\item \blindtext}
\end{enumerate}
\end{document}
Permanenter link

beantwortet 25 Feb '14, 14:33

esdd's gravatar image

esdd
14.2k53251

bearbeitet 25 Feb '14, 19:30

1

Ich weiß nicht, ob ich das empfehlen würde: \item wird nämlich auch an versteckten Plätzen aufgerufen, z.B. der {center}- und der {quote}-Umgebung... das muss man zumindest wissen, bevor man das macht. Sollte das auf {enumerate} beschränkt bleiben, wäre es wohl besser, eine neue Umgebung dafür zu definieren. (Meine Vermutung ist ja, dass enumitem für die meisten Anpassungen, die man sich so wünschen kann, passende Optionen bereitstellt.)

(25 Feb '14, 14:52) Clemens

@esdd und @Clemens Danke! Auch für die Warnung. Dann versuche ich, das lokal zu halten. Wenn sich was als empfehlenswerter zeigen sollte, hab ich auf jeden Fall was gelernt!

(25 Feb '14, 15:12) Student

Parameter wie \clubpenalty und \widowpenalty verhindern die einzeln stehenden Zeilen global und nicht nur bei Listen.

Streiche in deinem Code »needspace« und das dazu gehörige \needspace{2\baselineskip}, setze sowohl \clubpenalty=\maxdimen als auch \widowpenalty=\maxdimen in den Vorspann.

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{forloop}
\newcounter{items}
\clubpenalty=\maxdimen
\widowpenalty=\maxdimen
\begin{document}
\begin{enumerate}
  \forloop{items}{1}{\value{items} < 10}
    {\item \blindtext}
\end{enumerate}
\end{document}
Permanenter link

beantwortet 25 Feb '14, 15:25

Thorsten's gravatar image

Thorsten
1.5k325

bearbeitet 25 Feb '14, 19:43

esdd's gravatar image

esdd
14.2k53251

Siehe auch das Paket nowidow.

(28 Feb '14, 14:10) Speravir
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×15
×15
×11
×8

Frage gestellt: 24 Feb '14, 13:41

Frage wurde angeschaut: 3,297 Mal

Zuletzt aktualisiert: 28 Feb '14, 14:10