PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aufzählung in Tabelle; Problem mit vertikalen Abständen



slowfox
12-09-2010, 13:35
Moin!

Ich muss in einigen Tabellenzellen Aufzählungen einfügen. Leider werden dabei unerwünschte vertikale Abstände erzeugt. Ich habe versucht, dieses Problem mit Paketeinstellungen (enumitem) zu lösen, doch das war leider nicht erfolgreich. Die Internetsuche ergab zwei Lösungsvorschläge, die beide für mich nicht zufriedenstellend sind:

Der erste Lösungsvorschlag packt die Aufzählung in eine Minipage. Die Abstände verschwinden so wie gewünscht. Allerdings verwende ich die Aufzählung in X-Spalten (tabularx), d.h. ich kenne in der Regel nicht die Spaltenbreite, die ich bei diesem Lösungsvorschlag der Minipage übergeben müsste.

Der zweite Lösungsvorschlag setzt einen Schalter, doch entfernt dies nur den vertikalen Abstand vor der Aufzählung, nicht nach der Aufzählung.

Ich bin nun folgenden Weg gegangen: Ich verwende grundsätzlich den ersten Lösungsvorschlag mit der Minipage. Die Spaltenbreite lese ich aus tabularx mittels \TX@col@width aus. Da ich dass nicht direkt als Breitenangabe für die Minipage verwenden kann definiere ich mir einen neuen Bezeichner über \let\spaltenbreite\TX@col@width. Das Ergebnis ist wie gewünscht, aber ich bin mir unsicher, ob ich damit nicht irgendwelche negativen Folgen produziere, da ich mich hier im Randbereich meines Latex-Wissens aufhalte.

Mag mal jemand sicherheitshalber über meine Lösung schauen und diese beurteilen. Danke!


\documentclass[ngerman]{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{babel}

\usepackage[doublespacing]{setspace}

\usepackage{ragged2e,array,booktabs,tabularx}

\usepackage{enumitem}
\setenumerate{leftmargin=*,label=(\roman*), widest=iv, align=left, nolistsep}

\usepackage{blindtext}

% ZU LÖSUNG 2
\makeatletter
\newcommand\novspace{\@minipagetrue}
\makeatother

% ZU EIGENE LÖSUNG
\makeatletter
\let\spaltenbreite\TX@col@width
\makeatother

\begin{document}

\begin{table}

\footnotesize

\begin{tabularx}{\textwidth}{@{}l%
>{\raggedright\arraybackslash}X%
>{\raggedright\arraybackslash}X@{}}
\toprule
Spalte 1 & Spalte 2 & Spalte 3 \\
\midrule
Zeile 1 & \blindenumerate
& und eine normale Zelle \\
\midrule
Zeile 1 & Text davor ...
\blindenumerate
... und dahinter behebt das Problem weitgehend.
& und eine normale Zelle \\
\midrule
% LÖSUNG 1
% QUELLE: http://www.undertec.de/blog/2009/10/latex-itemizeumgebungen-ohne-vertikalen-abstand-in-tabellen-einfugen.html
% PROBLEM: da eine X-Spalte verwendet wird kenne ich idR die Spaltenbreite nicht, die für die MiniPage angegeben werden muss
Zeile 1 & \begin{minipage}[t]{5cm}%
\raggedright%
\blindenumerate
\end{minipage}
& und eine normale Zelle \\
\midrule
% LÖSUNG 2
% QUELLE: http://groups.google.de/group/de.comp.text.tex/browse_thread/thread/e2d46278443ab5ae
% PROBLEM: vertikaler Abstand nach Aufzählung wird nicht entfernt
Zeile 1 & \novspace%
\blindenumerate%
& und eine normale Zelle \\
\midrule
% EIGENE LÖSUNG
% FRAGE: Schaffe ich mir mit dieser Lösung andere Probleme?
Zeile 1 & \begin{minipage}[t]{\spaltenbreite}%
\raggedright%
\blindenumerate
\end{minipage}
& und eine normale Zelle \\
\bottomrule
\end{tabularx}

\end{table}

\end{document}

mechanicus
12-09-2010, 13:43
Hi,

nutze das Paket paralist mit dem Umgebung compactenum.

Gruß
Marco

slowfox
13-09-2010, 10:29
... nutze das Paket paralist mit dem Umgebung compactenum.

Und was soll mir die compactenum-Umgebung des Pakets paralist bringen? Sie verursacht genau das gleiche Problem der ungewollten Abstände vor und nach der Aufzählung wie auch die "normale" enumerate-Umgebung, siehe Beispiel:


\documentclass[ngerman]{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{babel}

\usepackage{ragged2e,array,booktabs,tabularx}

\usepackage{paralist}

\newcommand{\blindcompactenum}{%
\begin{compactenum}%
\item Erster Listenpunkt%
\item Zweiter Listenpunk%
\item Dritter Listenpunkt%
\end{compactenum}%
}

\begin{document}

\begin{table}

\footnotesize

\begin{tabularx}{\textwidth}{@{}l%
>{\raggedright\arraybackslash}X%
>{\raggedright\arraybackslash}X@{}}
\toprule
Spalte 1 & Spalte 2 & Spalte 3 \\
\midrule
Zeile 1 & \blindcompactenum
& und eine normale Zelle \\

\bottomrule
\end{tabularx}

\end{table}

\end{document}

Schweinebacke
13-09-2010, 11:02
\midrule
% SCHWEINEBACKEn LÖSUNG
Zeile 1 & \csname @minipagetrue\endcsname
\blindenumerate
\kern-\topsep\kern-\partopsep% oder schlicht \kern-\baselineskip
& und eine normale Zelle \\oder so ähnlich ...

slowfox
13-09-2010, 12:30
Danke für diesen Vorschlag! Eine Frage an dieser Stelle: Wieso funktioniert es mit kern, aber nicht mit \vspace{...}, das war nämlich der Weg den ich zuerst versucht habe.

Schweinebacke
13-09-2010, 14:08
\kern im vertikalen Modus ist nun einmal weder \hspace noch \hskip. Die Besonderheiten von \kern und seine Auswirkungen auf die Höhe bzw. Tiefe einer vertikalen Box sind im TeXbook zu finden. Eine Besonderheit ist beispielsweise, dass ein \kern keine Auswirkungen auf \lastskip hat. Das nachträgliche Wegoptimieren von \kern ist nicht so einfach, wie bei einem \vskip. Natürlich beteiligt sich ein \kern auch nicht an der Verteilung von zusätzlichem Abstand.