PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabellen fester breite mit variablen Spalten?



StefanK
18-11-2009, 22:59
Hallo zusammen.
Habe da ein Problem das ich als LaTex Neuling nicht in den Griff bekomme obwohl ich mir schon eine HowTos durchgelesen habe...
Minimalbeispiel:


\documentclass[ a4paper,chapterprefix = false, titlepage, parskip, numbers=noenddot, fleqn, 12pt, openright, twoside, BCOR=1cm, listof=totoc]{scrreprt}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{makeidx}
\usepackage{hyperref}
\usepackage[ngerman]{translator}

\begin{document}
Normal gesetzter Text, alles wunderbar. Der Text soll normale Seitenbreite haben. Daher schreib ich hier mal was mehr hin.
\begin{itemize}
\item{\textbf{Item "Uberschrift}:\\
Item Text wird korrekt eingerückt kein Problem. Muss aber ein bisschen Länger sein damit der Effekt den ich ansprechen will besser sichtbar wird. Verweise mal auf die Tabelle ist in meinem Dokument ebenso drin (\ref{referenz}).
\begin{table}[h]
\centering
\begin{tabular}{|c|c|c|} % Dreispaltige Tabelle könnte aber mehr sein
\hline
{Erste Spalte}&{Zweite Spalte}&{Dritte Spalte}\\
{1}&{2}&{3}\\
\hline
\end{tabular}
\caption{Tabellenbeschreibung}
\label{referenz}
\end{table}}
%
\item{\textbf{Nächste Item "Uberschrift}:\\
Hier kommt dann wieder Text hin der normal in der Itemize Umgebung eingerückt werden soll. Alles halt wie immer.}
\end{itemize}
Der weitere Text wird dann auch wieder normale Seitenbreite haben. Daher schreib ich hier mal was mehr hin.
\end{document}


Wie bekomme ich es jetzt hin, dass die Tabelle entsprecht dem jeweiligen Item eingerückt und die volle Breite der Itemize Spalte nutzt? Dabei wäre es natürlich perfekt wenn ich die Spaltenbreite nicht einzeln festlegen muss sondern das dynamisch von enthaltenen Text abhängen könnte.

Aktuell wird die Tabelle auch nicht auf dem Bereich der Item Umgebung zentriert sondern auf der normalen Textbreite, was insbesondere bei breiterenTabellen störend auffällt.

Bin für jeden Ratschlag dankbar. Dieser Tabellen Kram raubt mir nämlich grad den letzten Nerv.:mad:

Xenara
19-11-2009, 08:31
Hi, nicht verzweifeln :) Vielen Dank für das prima MB.

Für Tabellen, die sich selbst strecken sollen, gibts TabularX.
Ich hab in deinen Code das mal eingebaut und noch ein paar Kleinigkeiten angepasst, z.B. brauchst du in der Tabelle nicht jede Zelle mit {} umklammern, und auch bei Itemize brauchts das nicht.

Bei Tabellen sind vertikale Linien verpönt, mit dem Paket Booktabs lassen sich Tabellen machen, die auch ohne vertikale Linien sehr übersichtlich sind.

Ausserdem habe ich deine table-Umgebung durch Minipage ersetzt, denn table und figure sind Gleitumgebungen, die dorthin fliessen, wo sie fürs Layout am besten hinpassen. Zwar bleibts sie mit [h] in deinem Fall tatsächlich dort, das kann aber auch schiefgehen, denn die Parameter [htbp] sind nur Empfehlungen. Mit [!ht] verstärkst du die Empfehlung. Vermutlich hat es bei dir auch eine Warnung gegeben im Sinne von "h changed to ht", denn du musst LaTeX eine Alternative lassen, wenn es am bevorzugten Ort nicht geht.
Wenn du die Tabelle dort fix festnageln willst, nimm eine Minipage mit capt-of oder das Paket Float, welches den Parameter [H] zum Festnageln zur Verfügung stellt.

Das Paket hyperref sollte immer (von ganz wenigen Ausnahmen abgesehen) als aller-allerletztes Paket geladen werden, da es einige Umdefinitionen vornimmt, was dann in anderer Reihenfolge knallt.
Btw, ein guter Tipp falls so ein Problem mal auftaucht: Oft hilft es, Pakete in anderer Reihenfolge einzubinden. In der entsprechenden Paket-Doku findet sich meist die Erklärung.



\documentclass[ a4paper,chapterprefix = false, titlepage, parskip, numbers=noenddot, fleqn, 12pt, openright, twoside, BCOR=1cm, listof=totoc]{scrreprt}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{makeidx}
\usepackage[ngerman]{translator}

\usepackage{tabularx} % Tabellen mit sich anpassenden X-Spalten
\usepackage{capt-of} % Captions in Minipage
\usepackage{booktabs} % Hübschere Tabellen (midrule etc.)

\usepackage{hyperref}

\begin{document}
Normal gesetzter Text, alles wunderbar. Der Text soll normale Seitenbreite haben. Daher schreib ich hier mal was mehr hin.
\begin{itemize}
%
\item%
\textbf{Item "Uberschrift}:\\
Item Text wird korrekt eingerückt kein Problem. Muss aber ein bisschen Länger sein damit der Effekt den ich ansprechen will besser sichtbar wird. Verweise mal auf die Tabelle ist in meinem Dokument ebenso drin (\ref{referenz}).
%
\rule{\linewidth}{2pt}\\[5ex]% Linie über die gesamte Textbreite, den Umbruch nicht vergessen
%
\begin{minipage}{\linewidth}
\centering
\begin{tabularx}{\linewidth}{Xcc} % Dreispaltige Tabelle könnte aber mehr sein
\toprule
Erste Spalte & Zweite Spalte & Dritte Spalte \\
\midrule
1 & 2 & 3\\
1 & 2 & 3\\
1 & 2 & 3\\
\bottomrule
\end{tabularx}
\captionof{table}{Tabellenbeschreibung}
\label{referenz}
\end{minipage}%
%
\item \textbf{Nächste Item "Uberschrift}:\\
Hier kommt dann wieder Text hin der normal in der Itemize Umgebung eingerückt werden soll. Alles halt wie immer.
\end{itemize}
%
Der weitere Text wird dann auch wieder normale Seitenbreite haben. Daher schreib ich hier mal was mehr hin.

StefanK
19-11-2009, 14:39
VIELEN DANK!

Super schnelle und kompetente Hilfe.
Mit deiner Vorlage erziele ich genau den Effekt den ich haben wollte. Bin begeistert :-D

Habe die Tabellen in meinen Dokumenten in dem ein oder anderen Fall noch mit \multicolumn behandeln müssen. Aber obwohl ich gelesen habe, dass das für tabularX Umgebungen ganz ganz böses Vodoo sein soll, funktioniert bei mir (glücklicherweise?) alles so wie ich mir das vorgestellt habe.

DANKE nochmal!

Legion
19-11-2009, 15:26
Wenn du die Tabelle dort fix festnageln willst, nimm eine Minipage mit capt-of oder das Paket Placeins, welches den Parameter [H] zum Festnageln zur Verfügung stellt.
Möchte ja nicht den verpönten Besserwisser rauskehren, aber wenn ich mich recht entsinne wird [H] vom Paket float zur Verfügung gestellt. Das Paket placeins bringt alternativ den Befehl \FloatBarrier

Xenara
19-11-2009, 15:44
Ups, vielen Dank für den Hinweis, da hab ich die beiden verwechselt. Du hast natürlich recht. Habs geändert.

Bilbo
19-11-2009, 16:01
Das Paket hyperref sollte immer (von ganz wenigen Ausnahmen abgesehen) als aller-allerletztes Paket geladen werden, da es einige Umdefinitionen vornimmt, was dann in anderer Reihenfolge knallt.

Gerade tabularx sollte nach hyperref geladen werden, da es ansonsten zu Fehlermeldungen kommt. Bei mir z. B. geht das nur so.