Die Antwort von Epllus auf die Frage Wie kann ich eine Aufzählung in einer Tabelle ohne zusätzlichen vertikalen Abstand verwenden? wollte ich auf eine longtable übertragen. Wenn die Aufzählung am Anfang der Tabellenzelle eingefügt wird, entsteht aber trotzdem eine Leerzeile. Kann man das irgendwie ändern?

\documentclass[ngerman]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{array,longtable}

\makeatletter
\newcommand{\minipagetrue}{\@minipagetrue}
\makeatother

\usepackage{enumitem}
\newlist{titemize}{itemize}{4}% neue Listenumgebung für Tabellen
\setlist[titemize]{nosep,after=\vskip-\baselineskip,
  label={\textbullet},leftmargin=*,before=\minipagetrue,}

\newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}}
\renewcommand\arraystretch{1.25}

\begin{document}
\begin{longtable}{@{}lP{6cm}@{}} 
  \textbf{Gebiet} & \textbf{Erläuterung} \\[5pt]
  Gebiet 1 &
    \begin{titemize}
      \item Punkt 1 
      \begin{titemize}
        \item Unterpunkt 1
        \item Unterpunkt 2
        \item etc.
      \end{titemize}
      \item Punkt 2
      \item Punkt 3
      \item Punkt 4
    \end{titemize}\\
  Gebiet 2  & 
    \begin{titemize}
      \item Punkt a
      \item etc.
    \end{titemize}\\
  Gebiet 3 & 
    Hier steht Text\\
  Gebiet 4 & 
    Hier steht Text
    \begin{titemize}
      \item Punkt I
      \item Punkt II
    \end{titemize}
\end{longtable}
\end{document}

alt text

gefragt 07 Aug '13, 21:47

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 31 Dez '13, 02:22

cgnieder's gravatar image

cgnieder
22.1k253463


Das folgende ist im wesentlichen eine Zusammenfassung der anderen Antworten, die ich aber für sinnvoll halte:

Da bei einer longtable das Vortäuschen einer minipage mit \@minipagetrue die Leerzeile vor einer Aufzählung nicht in jedem Fall verhindert, ist es besser, wie von @Stefan vorgeschlagen, eine echte minipage in die Spaltendefinition einzubauen:

\newcolumntype{P}[1]{%
    >{\begin{minipage}[t]{#1}\raggedright\arraybackslash}p{#1}<{\end{minipage}}}

Warum eine minipage dafür sinnvoll ist, findet man u.a. in den Antworten auf die Frage Wann sollte ich minipage statt parbox verwenden?

Dann gibt es (mindestens) zwei Möglichkeiten eine kompakte Aufzählung in einer Tabelle unterzubringen.

(1) Mit dem Paket enumitem und einer für diesen Zweck definierten Aufzählung titemize

\usepackage{enumitem}
\newlist{titemize}{itemize}{4}% neue Listenumgebung für Tabellen
\setlist[titemize]{nosep, label=\textbullet, leftmargin=*, after=\strut}

(2) Mit dem Paket paralist und einer neu definierten Umgebung mycompactitem (siehe Antwort von @Bettina)

\usepackage[alwaysadjust]{paralist}
\setdefaultitem{\textbullet}{\textbullet}{\textbullet}{\textbullet}
\newenvironment{mycompactitem}{\begin{compactitem}}{\strut\end{compactitem}}

Das\strut sorgt in beiden Fällen dafür, dass die letzte Aufzählungszeile die richtige Tiefe hat. Nähere Informationen dazu findet man u.a. in der Antwort auf die Frage Was macht der Befehl strut?

Beide Lösungen funktionieren sowohl für tabular als auch longtable Tabellen, wobei das Paket enumitem an sich sehr viel mehr Einstellungsmöglichkeiten bietet.

alt text

Permanenter link

beantwortet 19 Aug '13, 17:13

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 19 Aug '13, 18:10

Du könntest eine echte minipage in die Spaltendefinition einbauen:

\newcolumntype{P}[1]{>{\begin{minipage}[t]{#1}\raggedright\arraybackslash}p{#1}<{\end{minipage}\endgraf}}

Dann würde ich after=\vskip-\baselineskip entfernen.

Permanenter link

beantwortet 07 Aug '13, 23:08

stefan's gravatar image

stefan ♦♦
18.3k163148
Akzeptiert-Rate: 50%

Kannst Du erläutern, was \endgraf ist, wieso man es hier braucht und warum \par nicht funktioniert?

(08 Aug '13, 11:13) cgnieder

@Clemens Vielleicht lohnt sich das als eigene Frage mit einem Minibeispiel, wo par in einer Tabelle fehlschlägt. Ich erinnere mich, dass ein Fehler auftrat, weshalb ich das "Ersatzpar" :-) wählte.

(08 Aug '13, 12:12) stefan ♦♦
1

\par wird von array umdefiniert.

(08 Aug '13, 12:29) Herbert
1

@stefan: Das \endgraf führt bei mir leider zu einer ungewünschten Leerzeile, wenn die Tabellenzelle nicht mit einer Aufzählung endet. Im Beispiel also zwischen Gebiet 3 und 4. Lass ich den Befehl dort weg und verwende dafür after=\strut sieht es bei mir gut aus.

(08 Aug '13, 12:33) esdd

Ich habe damals als Lösung für das Problem \usepackage(paralist) in Verbindung mit einer eigenen Umgebung im Internet gefunden. Deren Definition wurde vor die Tabelle gesetzt, in der dann mycompactitem statt itemize verwendet wurde:

\newenvironment{mycompactitem}{%
\vspace*{-3ex}% verkleinert den oberen vertikalen Abstand
\begin{compactitem}[\textbullet]%
}{
\vspace*{-3ex}%  verkleinert den unteren vertikalen Abstand
\end{compactitem}%
}

Damit die Lösung gleichzeitig für table-Umgebungen funktioniert, ist es aber besser die Abstände bei der Definition von mycompactitem nicht mit \vspace*{-3ex} zu korrigieren, sondern statt dessen den Vorschlag von @Stefan für die geänderte Spaltendefinition zu nutzen. Warum sich eine minipage eignet, ist in den Antworten auf die Frage Wann sollte ich minipage statt parbox verwenden? erläutert.

\documentclass[ngerman]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{array,longtable}

\usepackage[alwaysadjust]{paralist}
\setdefaultitem{\textbullet}{\textbullet}{\textbullet}{\textbullet}

\newenvironment{mycompactitem}{%
  \begin{compactitem}%
  }{%
  \strut\end{compactitem}%
}

\newcolumntype{P}[1]{>{\begin{minipage}[t]{#1}\raggedright\arraybackslash}p{#1}<{\end{minipage}}}
\renewcommand\arraystretch{1.25}

\begin{document}
\begin{longtable}{@{}P{3cm}P{6cm}@{}}
  \textbf{Gebiet} & \textbf{Erläuterung} \\[5pt]
  Gebiet 1 &
    \begin{mycompactitem}
      \item Punkt 1 
        \begin{compactitem}
          \item Unterpunkt 1
          \item Unterpunkt 2
          \item etc.
        \end{compactitem}
      \item Punkt 2
      \item Punkt 3
      \item Punkt 4
    \end{mycompactitem} \\
  Gebiet 2 & 
    \begin{mycompactitem}
      \item Punkt 1 
      \item Punkt 4
    \end{mycompactitem} \\
  Gebiet 3 & 
    Hier steht Text\\
  Gebiet 4 mit weiterer Erläuterung & 
    Hier steht Text 
      \begin{mycompactitem}
        \item Punkt I
        \item Punkt II
      \end{mycompactitem} 
\end{longtable}
\end{document}

alt text

Permanenter link

beantwortet 08 Aug '13, 15:22

Bettina's gravatar image

Bettina
665181923
Akzeptiert-Rate: 25%

bearbeitet 10 Aug '13, 12:55

esdd's gravatar image

esdd
17.8k284257

1

@Bettina In der Doku von paralist habe ich jetzt einen Weg gefunden, der ohne das Paket enumitem auskommt. Da sich das Ergebnis nicht ändert, habe ich das direkt in deinen Code eingefügt.

(08 Aug '13, 21:14) esdd

@Bettina Ich hab den Text mal etwas angepasst und auf Stefans Vorschlag verwiesen. Reicht der Link zum Unterschied von parbox und minipage als Erklärung von Stefans Vorschlag aus?

(10 Aug '13, 12:52) esdd

@esdd Ich denke schon, dass der Link ausreicht. Was macht eigentlich der Befehl \strut?

(11 Aug '13, 09:28) Bettina

@Bettina vielleicht hilft dir das hier weiter.

(11 Aug '13, 20:27) Epllus
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×256
×39
×17

gestellte Frage: 07 Aug '13, 21:47

Frage wurde gesehen: 18,740 Mal

zuletzt geändert: 31 Dez '13, 02:22