Wie erreiche ich es, dass eine Tabelle genau so breit ist, wie der Text im restlichen Dokument? Ich kann mit \setlength{\tabcolsep}{<Wert>} den Raum zwischen den Spalten beeinflussen. Kann ich als <Wert> irgendetwas definieren, dass die Tabelle genauso breit ist, wie der Text?

Oder mache ich das besser auf einem ganz anderen Weg?

Nachfolgend ein Tabellen-Beispiel ...

\documentclass{scrartcl}
\usepackage[utf8]{inputenc}

\usepackage{booktabs}

\begin{document}

\begin{table}[htb]
  \caption{Eine Tabelle}
  %\setlength{\tabcolsep}{.25cm} % Abstand zwischen den Spalten einer Tabelle
      \begin{tabular}{llllllll} \toprule
      Spalte1 & Spalte2 & Spalte3 & Spalte4 & Spalte5 & Spalte6 & Spalte7 & Spalte8 \\ \midrule
      AA      & BB      & CC      & DD      & EE      & FF      & GG      & HH      \\
      AA      & BB      & CC      & DD      & EE      & FF      & GG      & HH      \\ \bottomrule
    \end{tabular}
\end{table}

\noindent\rule{\textwidth}{1pt}
Die Textbreite entspricht der Linie über diesem Text.

\end{document}

gefragt 27 Jun '13, 13:25

Andr%C3%A9's gravatar image

André
93151833
Akzeptiert: 77%

bearbeitet 27 Jun '13, 15:05

Clemens's gravatar image

Clemens
19.0k112960


Für sowas eignet sich unter anderen das Paket tabularx

\documentclass{scrartcl}
\usepackage[utf8]{inputenc}

\usepackage{booktabs}
\usepackage{tabularx}

\begin{document}

\begin{table}
  \caption{Eine Tabelle}
   \begin{tabularx}{\textwidth}{XXXXXXXX} \toprule
    Spalte1 & Spalte2 & Spalte3 & Spalte4 & Spalte5
    & Spalte6 & Spalte7 & Spalte8 \\ \midrule
    AA      & BB      & CC      & DD      &
    EE      & FF      & GG      & HH      \\
    AA      & BB      & CC      & DD
    & EE      & FF      & GG      & HH
    \\ \bottomrule
  \end{tabularx}
\end{table}
\end{document}
Permanenter link

beantwortet 27 Jun '13, 13:35

Johannes's gravatar image

Johannes
7.2k132759

bearbeitet 27 Jun '13, 13:38

Pff - ich war zu langsam ;)

(27 Jun '13, 13:41) Clemens

@Clemens tabu sollte das doch auch können, oder? Ich hab damit noch nie gearbeitet. Du könntest was dazu schreiben?

(27 Jun '13, 14:01) Johannes
2

@Johannes: tabu in der jetztigen Version ist obsolet und wird nicht weiter gepflegt. Ob je eine neue Version kommt, steht in den Sternen.

(27 Jun '13, 14:13) Herbert

@clemens @Herbert Wenn ich mich richtig erinnere arbeitet der Autor an einer neuen Implementierung (etliches auf comp.text.tex). Wie ich die Sache deute wird sich damit auch die Arbeitsweise/Syntax ändern. Insofern sollten wir das (momentan noch) nicht aufnehmen.

Gilt tabu offiziell als obsolet? Momentan ist CTAN nicht erreichbar.

(27 Jun '13, 14:24) Johannes
1

@Johannes: Mit "obsolet" habe ich den Autor zitiert, nicht CTAN

(27 Jun '13, 14:33) Herbert

@Herbert Das ist dann wohl an mir vorbeigegangen. Aber das mit der neuen Version hab ich doch richtig in Erinnerung (nur so für die Datenbank im Kopf)?

(27 Jun '13, 14:36) Johannes

@Johannes: Ja, aber wann ...

(27 Jun '13, 14:42) Herbert

Weil die Quelle bisher fehlte: https://groups.google.com/d/msg/comp.text.tex/xRGJTC74uCI/jkNlDkpG5cMJ (GL ist Florent Chervet, der Autor von tabu).

(24 Jan '14, 17:04) Speravir
Ergebnis 5 von 8 Alle anzeigen

In der Tat bietet LaTeX selbst bereits für eben diesen Zweck die im Zeitalter von tabularx nur noch wenig bekannte tabular*-Umgebung. Im Gegensatz zur tabularx-Umgebung werden hier keine Spalten automatisch auf die gewünschte Breite gebracht. Stattdessen muss man über \extracolsep einstellen, wie die zusätzliche Breite auf die Spaltenabstände verteilt werden soll. Dabei verwendet man am einfachsten \extracolsep{\fill} in der Spaltendeklaration vor der Spalte, deren nächster Abstand gedehnt werden soll. Die Dehnung wird dann so lange ausgeführt, bis \extracolsep erneut aufgerufen wird. Die Abstände vor der ersten und nach der letzten Spalte werden nie gedehnt.

Eine einfache Abänderung Deines eigenen Beispiels wäre also:

Open in Online-Editor
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}

\usepackage{booktabs}

\begin{document}

\begin{table}[htb]
  \caption{Eine Tabelle}
      \begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}*8l@{}} \toprule
      Spalte1 & Spalte2 & Spalte3 & Spalte4 & Spalte5 & Spalte6 & Spalte7 & Spalte8 \\ \midrule
      AA      & BB      & CC      & DD      & EE      & FF      & GG      & HH      \\
      AA      & BB      & CC      & DD      & EE      & FF      & GG      & HH      \\ \bottomrule
    \end{tabular*}
\end{table}

\noindent\rule{\textwidth}{1pt}
Die Textbreite entspricht der Linie über diesem Text.

\end{document}

Dabei habe ich außerdem den Wiederholungsoperator * in der Spaltendeklaration verwendet. Wollte man den Abstand nur zwischen den mittleren 6 Spalten verwenden, ginge das per

Open in Online-Editor
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}

\usepackage{booktabs}

\begin{document}

\begin{table}[htb]
  \caption{Eine Tabelle}
      \begin{tabular*}{\linewidth}{@{}l@{\extracolsep{\fill}}*6l@{\extracolsep{0pt}\hskip2\tabcolsep}l@{}} \toprule
      Spalte1 & Spalte2 & Spalte3 & Spalte4 & Spalte5 & Spalte6 & Spalte7 & Spalte8 \\ \midrule
      AA      & BB      & CC      & DD      & EE      & FF      & GG      & HH      \\
      AA      & BB      & CC      & DD      & EE      & FF      & GG      & HH      \\ \bottomrule
    \end{tabular*}
\end{table}

\noindent\rule{\textwidth}{1pt}
Die Textbreite entspricht der Linie über diesem Text.

\end{document}

Ob im jeweiligen Fall eher tabularx oder tabular* das Mittel der Wahl ist, hängt von der konkreten Anwendung ab.

Permanenter link

beantwortet 04 Jul '13, 07:37

saputello's gravatar image

saputello
18.4k22352

bearbeitet 27 Aug '15, 11:19

Möchte man den Abstand zwischen Rand und erster bzw. letzter Spalte (\tabcolsep) nicht auf null setzen, muss man !{\extracolsep{\fill}}, also ! statt @ verwenden: \begin{tabular*}{\linewidth}{!{\extracolsep{\fill}}*8l}

(29 Jul '13, 14:36) Qrrbrbirlbel
1

@Qrrbrbirlbel Man muss nicht, sondern man kann. Man kann es auch so machen, wie ich im letzten Beispiel gezeigt habe, also \extracolsep erst später erhöhen und rechtzeitig wieder zurücksetzen.

(30 Jul '13, 03:18) saputello

tabular* finde ich weitaus flexibler einsetzbar als tabularx! Danke!

(27 Aug '15, 09:55) André

Alternativ, falls du deine Spaltentypen nicht verändern willst und die Tabelle nur etwas zu breit ist.

\noindent
\resizebox{\linewidth}{!}{%
  ... deine Tabelle ...%
}

Nachteil ist allerdings, dass die Linien ebenfalls mit skaliert werden.

Permanenter link

beantwortet 27 Jun '13, 13:49

Herbert's gravatar image

Herbert
5.0k34

bearbeitet 27 Jun '13, 13:50

Ohne weiter in's Detail zu gehen wäre es zu wünschen, wenn die Umgebungen und Pakete, die sich mit Tabellen befassen, die Spaltenbreiten alternativ und immer als zwei mögliche Werte definieren würden.
a. Als Teilbetrag von \textwidth
b. Als Vielfaches von em
In "longtable" ist das bereits möglich.

Zur Lösung des Problems würde sich

\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{longtable}
\begin{document}
\begin{longtable}{p{0.3\textwidth}p{0.3\textwidth}p{0.3\textwidth}} 
\toprule
Ein Text&Ein Text&Ein Text\\
\bottomrule
  \end{longtable}
\end{document}

eignen.

Permanenter link

beantwortet 27 Jun '13, 19:33

ctansearch's gravatar image

ctansearch
(inaktiv)

bearbeitet 27 Jun '13, 19:37

Der Teilbetrag von \textwidth macht aber nur bei Spalten Sinn, die alle gleich breit sind -- das wird in der Praxis vermutlich eher weniger vorkommen.

Dieses Beispiel sähe dann etwas komisch aus.

\begin{longtable}{p{0.3\textwidth}p{0.3\textwidth}p{0.3\textwidth}} \toprule

Ein sehr langer Text in dem viele Worte stehen & Wort & Wort \\

(28 Jun '13, 03:51) André

Bitte lese die FAQ. Wenn du Fragen dazu hast, wäre dies eine sinnvolle Frage. Dein Beitrag hier ist weder eine Antwort noch eine richtige Frage. Somit maximal ein Kommentar! -- Das deine "Lösung" suboptimal ist, sollte dir spätestens dann klar werden, wenn du dir dir Werte von \tabcolsep anschaust.

(28 Jun '13, 06:39) Marco Daniel

@Marco Daniel

Wovon sprichst Du? Da sind keine Werte von \tabcolsep in meinem Beispiel und auch nicht im Ausgangsbeispiel. Auch in .aux ist alles in Ordnung. Im übrigen ist longtable die Antwort auf dieses Problem, und beantwortet die Frage direkt.

(28 Jun '13, 17:40) ctansearch

@André

Natürlich kann man jede Spalte einzeln gestalten, indem man den Betrag von \textwidth anpasst (0.2\textwidth.. 0.1\textwidth.. etc) oder auf (1em..2em ..etc) umstellt.

(28 Jun '13, 18:14) ctansearch
2

@ctansearch: tabcolsep ist ein interner Abstand der zwischen Spalten existiert. Somit ist eine Spalte stets \tabcolsep+width+\tabcolsep. Basierend darauf, kann deine Tabelle also einfach zu breit werden.

(29 Jun '13, 04:14) Marco Daniel

@Marco Daniel

Achso, ja das ist klar, die Breiten muß man halt einfach "mitdenken" wenn man die Spaltenbreite angibt. Das kann man ja per Augenmaß anpassen, korrekt wäre natürlich, wenn man diese Abstände mitberechnet.

(29 Jun '13, 14:46) ctansearch

@ctansearch: Natürlich kann man die Werte händisch anpassen -- elegant ist das aber nicht. (La)TeX steht ja eigentlich für elegante Lösungen. Da bieten sich Automatismen, wie oben genannt, eher an. (Aber im Gegensatz zu Marco Daniel denke ich schon, dass es sich um eine Antwort hält ;-))

(29 Jun '13, 16:52) André

@André Klar, Automatismen sind besser. Da könnte man eine \maxtablewidth definieren, die \textwidth jeweils um den Betrag der \tabcolsep-Summe (\tabcolsepxSpaltenanzahlx2) vermindert.\tabcolsep wird ja dann automatisch wieder zugefügt. Finde ich aber etwas umständlich.

(Nebenbei: Ich habe Probleme, Deine Adresse (@Andre) zu schreiben, könntest Du auf den Accent verzichten oder mir sagen, wie man das richtig eingibt?)

(29 Jun '13, 17:20) ctansearch
Ergebnis 5 von 8 Alle anzeigen
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:

×185
×8

Frage gestellt: 27 Jun '13, 13:25

Frage wurde angeschaut: 53,249 Mal

Zuletzt aktualisiert: 27 Aug '15, 11:19