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, 19:25

Andr%C3%A9's gravatar image

André
986232836
Akzeptiert-Rate: 33%

bearbeitet 27 Jun '13, 21:05

cgnieder's gravatar image

cgnieder
22.1k243463


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, 19:35

Johannes's gravatar image

Johannes
7.3k294566
Akzeptiert-Rate: 43%

bearbeitet 27 Jun '13, 19:38

Pff - ich war zu langsam ;)

(27 Jun '13, 19:41) cgnieder

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

(27 Jun '13, 20: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, 20: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, 20:24) Johannes
1

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

(27 Jun '13, 20: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, 20:36) Johannes

@Johannes: Ja, aber wann ...

(27 Jun '13, 20: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, 23:04) Speravir
Ergebnis 5 von 8 show 3 more comments

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, 19:49

Herbert's gravatar image

Herbert
5.1k34
Akzeptiert-Rate: 31%

bearbeitet 27 Jun '13, 19: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 28 Jun '13, 01:33

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

bearbeitet 28 Jun '13, 01: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, 09: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, 12:39) Marco_D

@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, 23: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.

(29 Jun '13, 00: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, 10:14) Marco_D

@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, 20: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, 22: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, 23:20) ctansearch
Ergebnis 5 von 8 show 3 more comments

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, 13:37

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 27 Aug '15, 17: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, 20: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, 09:18) saputello

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

(27 Aug '15, 15:55) André
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:

×254
×9

gestellte Frage: 27 Jun '13, 19:25

Frage wurde gesehen: 149,116 Mal

zuletzt geändert: 27 Aug '15, 17:19