PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Longtable, Spaltenbreite



Onyag
15-09-2009, 15:54
Hallo,

habe folgendes Problem mit Longtable: habe eine breite Spalte mit Text und vier Spalten, die Zahlen enthalten und gleich groß sein sollen. Allerdings ist die vierte der vier Spalten größer als die anderen. Zudem läuft longtable rechts über die seitenbreite hinaus, was nicht schön aussieht.
Ich vermute nach eigenere Recherche und lesen der Dokumentation von longtable, dass es an multicolumn liegt, weiß aber nicht, wie ich das Problem beheben kann.
Ein lauffähiges Minimalbeispiel (headsepline und text habe ich eingefügt, damit man den "Fehler" besser sieht):

\documentclass[headsepline]{scrreprt}
\usepackage{longtable,booktabs}

\begin{document}
\pagestyle{myheadings}
\def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}


Text TextText Text Text Text Text Text Text TextText TextText Text Text Text Text Text Text TextText Text Text Text Text Text Text TextText TextText Text Text Text Text Text Text TextText Text Text Text Text Text Text TextText TextText Text Text Text Text Text Text TextText Text Text Text Text Text Text TextText TextText Text Text Text Text Text Text TextText Text Text Text Text Text Text TextText TextText Text Text Text Text Text


\footnotesize
\begin{longtable}{lccccc}
\caption{Text TextText Text Text Text Text Text Text TextText TextText Text Text Text Text Text} \\
\toprule
&\multicolumn{1}{c}{\emph{D-1}}&\multicolumn{1}{c}{\emph{D-2}}&\multicolumn{1}{c}{\emph{D-3}}&\multicolumn{1}{c}{\emph{D-4}}&\multicolumn{1}{c}{\emph{D-5}}\\
\midrule
\endfirsthead
\caption[]{\emph{Fortsetzung}} \\
\toprule
&\multicolumn{1}{c}{\emph{D-1}}&\multicolumn{1}{c}{\emph{D-2}}&\multicolumn{1}{c}{\emph{D-3}}&\multicolumn{1}{c}{\emph{D-4}}&\multicolumn{1}{c}{\emph{D-5}} \\
\midrule
\endhead
\bottomrule
\addlinespace
\multicolumn{6}{l}{\emph{Tabelle wird auf der nächsten Seite fortgesetzt}} \\
\endfoot
\endlastfoot
\multicolumn{6}{l}{\textbf{Text}} \\
whatever& -0.247\sym{***}& -0.118 & 0.131 & 0.131 & 0.166 \\
& (0.052) & (0.077) & (0.135) & (0.133) & (0.148) \\
\addlinespace
\bottomrule
\multicolumn{6}{p{1\textwidth}}{\tiny Lange lange Ausführungn}
\label{bla}
\end{longtable}
\normalsize

\end{document}

u_fischer
15-09-2009, 16:28
Nun, du zwingst longtable ja eine \textwidth+2*\tabcolsep-Breite Tabelle zu erzeugen:


\multicolumn{6}{p{1\textwidth}}{\tiny Lange lange Ausführungn}

Falls die Textspalte in etwa so breit sein soll, wie die gesamte Tabelle kannst du sowas versuchen (das ist ein Entwurf und funktioniert derzeit nur für eine Tabelle):


\documentclass[headsepline]{scrreprt}
\usepackage{longtable}
\usepackage{booktabs, lipsum}
\pagestyle{myheadings}
\def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\begin{document}

\lipsum[1]
\footnotesize

\newcommand\longtablewidth{0pt}
\begingroup
\makeatletter
\renewcommand\LT@entry[2]{\xdef\longtablewidth{\the\dimexpr\longtablewidth + #2}}
\ifcsname LT@i\endcsname \LT@i\fi
\endgroup

\begin{longtable}{lccccc}
\caption{Text TextText Text Text Text Text Text Text TextText TextText Text Text Text Text Text} \\
\toprule
&\multicolumn{1}{c}{\emph{D-1}}&\multicolumn{1}{c}{\emph{D-2}}&\multicolumn{1}{c}{\emph{D-3}}&\multicolumn{1}{c}{\emph{D-4}}&\multicolumn{1}{c}{\emph{D-5}}\\
\midrule
\endfirsthead
\caption[]{\emph{Fortsetzung}} \\
\toprule
&\multicolumn{1}{c}{\emph{D-1}}&\multicolumn{1}{c}{\emph{D-2}}&\multicolumn{1}{c}{\emph{D-3}}&\multicolumn{1}{c}{\emph{D-4}}&\multicolumn{1}{c}{\emph{D-5}} \\
\midrule
\endhead
\bottomrule
\addlinespace
\multicolumn{6}{l}{\emph{Tabelle wird auf der nächsten Seite fortgesetzt}} \\
\endfoot
\endlastfoot
\multicolumn{6}{l}{\textbf{Text}} \\
whatever& -0.247\sym{***}& -0.118 & 0.131 & 0.131 & 0.166 \\
& (0.052) & (0.077) & (0.135) & (0.133) & (0.148) \\
\addlinespace
\bottomrule
\multicolumn{6}{p{1cm}}{\parbox{\the\dimexpr\longt ablewidth-\tabcolsep-\tabcolsep}{\tiny \lipsum[1]}}
\label{bla}
\end{longtable}
\normalsize

\end{document}

Onyag
15-09-2009, 17:07
Vielen Dank für dieAntwort, die mir bereits sehr weiterhilft!

Allerdings verstehe ich nicht, was "funktioniert derzeit nur für eine Tabelle" bedeutet???

Dein Code läuft durch, allerdings ist die Tabelle jetzt sehr schmal. Das kann ich ja ändern, indem ich die Spalten von {lcccc} ändere. Habe es mal mit p{0.1\textwidth} etc. getestet. Wenn ich allerdings Werte eingebe, die addiert 1 ergeben, ist die Tabelle wieder zu breit. Muss da wohl mal etwas rumspielen (vielleicht der Erklärung halber: habe viele Tabellen, in denen ich Deine Anpassung übernehmen müsste und will daher erst mal eine Tabelle "fix" haben, bevor ich die anderen anpasse).

u_fischer
15-09-2009, 17:29
1. Du musst mindestens zweimal kompilieren.

2. Der Befehl \LT@i, den ich benutze um \longtablewidth zu berechnen, wird in der aux-Datei definiert und enthält die diversen Spaltenbreiten der ersten longtable. Wenn es weitere longtables gibt, werden zugehörige Befehle \LT@ii, \LT@iii, \LT@iv usw definiert. Deswegen funktioniert der Code derzeit nur für die erste longtable.

Onyag
15-09-2009, 18:09
1. Du musst mindestens zweimal kompilieren.

2. Der Befehl \LT@i, den ich benutze um \longtablewidth zu berechnen, wird in der aux-Datei definiert und enthält die diversen Spaltenbreiten der ersten longtable. Wenn es weitere longtables gibt, werden zugehörige Befehle \LT@ii, \LT@iii, \LT@iv usw definiert. Deswegen funktioniert der Code derzeit nur für die erste longtable.

Zu 2.) Heißt das, dass ich das Vorgehen vergessen kann, sofern ich weitere Longtables erstelle? Oder muss ich dann nur was anpassen???

u_fischer
15-09-2009, 22:50
Man muss nur was anpassen.

Onyag
15-09-2009, 23:28
Ok, danke!