Ich möchte die Breite einer Tabelle, die aus der tabular-Umgebung erstellt wird, wissen. Ich weiß, dass diese Breite von dem Tabelleinhalt abhängt, so sie mit dem Inhalt sich variiert. Ich brauche nicht den genauen Wert der Breite der Tabelle wissen. Ich möchte einfach einen Befehl für ihn, wie zum Beispiel \textwidth ein Befehl für die Breite eines Texts ist. Die Idee ist es, diesen Befehl als Eingabe für die Breite eines \parbox zu etablieren.

gefragt 21 Jan, 09:12

fpires's gravatar image

fpires
853
Akzeptiert: 80%

1

Willkommen auf TeXwelt.

Bitte beachte, dass das hier ein Frage-Antwort-System ist. Ein solches funktioniert am besten, wenn man uns das eigentliche Problem nennt und möglichst an einem vollständigen Minimalbeispiel zeigt, statt nur eine etwas unscharfe Frage zu einem Problem mit der Lösungsidee des eigentlichen Problems zu stellen. Gerade auch andere Hilfesuchende können an einem Beispiel oft leichter entscheiden, ob es irgendwie zu ihrem eigenen Problem passt.

(21 Jan, 09:49) saputello
1

Eine Länge wie \textwidth gibt es dafür nicht. Man kann aber fast alle Arten von Elemente mit \settowidth, \settoheight, \settodepth ausmessen. Allerdings gibt es für einige Probleme, für die man scheinbar die Breite der Tabelle wissen muss, auch ganz andere Lösungen. Auch deshalb wäre ein VM nützlich, das Dein eigentliches Problem zeigt. Wir können dann ggf. daran auch eine fertige Lösung zeigen.

(21 Jan, 09:51) saputello

Wenn es bei der Frage um das Problem geht, das in dem Code-Schnipsel aus dem Link von Johannes Kommentar gezeigt wird, dann braucht man die Breite nicht auszumessen. Mit dem Paket threeparttable kann man die Tabellenüberschrift automatisch auf die Breite der Tabelle beschränken:

Open in Online-Editor
\documentclass[captions=tableabove]{scrartcl}

\usepackage{threeparttable}

\begin{document}
\begin{table}
  \centering
  \begin{threeparttable}
    \caption{Table Heading}
    \begin{tabular}{ccc}
      a & b & c
    \end{tabular}
  \end{threeparttable}
\end{table}
\end{document}

Bei sehr schmalen Tabellen, wie im Beispiel, ist das Ergebnis aber eher bescheiden. Man sollte dann min. keine hängenden Tabellenüberschriften wählen:

Open in Online-Editor
\documentclass[captions=tableabove]{scrartcl}
\setcapindent{0pt}
\usepackage{threeparttable}

\begin{document}
\begin{table}
  \centering
  \begin{threeparttable}
    \caption{Table Heading}
    \begin{tabular}{ccc}
      a & b & c
    \end{tabular}
  \end{threeparttable}
\end{table}
\end{document}

Die KOMA-Script-Klassen bieten alternativ auch die Möglichkeit, den Tabellentitel neben die Tabelle zu setzen, was bei schmalen Tabellen oft besser aussieht:

Open in Online-Editor
\documentclass[captions=tableabove]{scrartcl}

\begin{document}
\begin{table}
  \centering
  \begin{captionbeside}{Table Heading}
    \begin{tabular}{ccc}
      a & b & c
    \end{tabular}
  \end{captionbeside}
\end{table}
\end{document}

Das Paket threeparttable kann natürlich auch mit den Standardklassen verwendet werden. Damit dort überhaupt Tabellenüberschriften statt Tabellenunterschriften korrekt formatiert werden, benötigt man aber min. ein Paket wie caption:

Open in Online-Editor
\documentclass{article}
\usepackage{threeparttable}
\usepackage[tableposition=above]{caption}

\begin{document}
\begin{table}
  \centering
  \begin{threeparttable}
    \caption{Table Heading}
    \begin{tabular}{ccc}
      a & b & c
    \end{tabular}
  \end{threeparttable}
\end{table}
\end{document}
Permanenter link

beantwortet 22 Jan, 03:14

saputello's gravatar image

saputello
18.4k22352

bearbeitet 22 Jan, 03:23

Ich bedanke mich bei euch allen! Eure Antworten haben mich viel geholfen, beziehungsweise das Problem gelöst. Es tut mir leid dafür, einen VM nich gezeigt zu haben. Zum nächsten Mal stelle ich einen. Danke!

(22 Jan, 10:15) fpires

Eine einfache Lösung wäre, die Tabelle in eine Box zu packen und ihre Breite zu messen.

Open in Online-Editor
\documentclass{article}
\newlength\tablewidth
\newenvironment{mytabular}[2][c]%
  {\sbox0\bgroup\begin{tabular}[#1]{#2}}%
  {\end{tabular}\egroup\global\tablewidth=\wd0 \leavevmode\box0}
\begin{document}
\begin{mytabular}{ccc}
  1 & 2 & 3 \\
  a & b & c \\
\end{mytabular}
\the\tablewidth

\begin{mytabular}[b]{ccp{3em}}
  1 & 2 & 3 \\
  a & b & c \\
\end{mytabular}
\the\tablewidth
\end{document}

alt text

Permanenter link

beantwortet 21 Jan, 16:09

Henri's gravatar image

Henri
10.0k31730

Ich messe diese Werte.

alt text

Open in Online-Editor
\documentclass[varwidth, border=2pt]{standalone}
%\documentclass[paper=a5]{scrartcl}
\usepackage{tikz}

\begin{document}
\newlength{\Breite}

\newcommand{\MyTabI}{%
\begin{tabular}{ccc}
  1 & 2 & 3 \\
  a & b & c \\
\end{tabular}%
}
\MyTabI \\
\settowidth{\Breite}{\MyTabI}
\the\Breite

\newcommand{\MyTabII}{%
\begin{tabular}[b]{ccp{3em}}
  1 & 2 & 3 \\
  a & b & c \\
\end{tabular}%
}
\MyTabII \\
\settowidth{\Breite}{\MyTabII}
\the\Breite

\newcommand{\Linie}{%
\tikz[inner sep = 0, outer sep=0]\draw (0,0) -- (15.0pt,0);%
}
\Linie \\
\settowidth{\Breite}{\Linie}
\the\Breite
\end{document}
Permanenter link

beantwortet 21 Jan, 19:29

cis's gravatar image

cis
5.4k860169

bearbeitet 22 Jan, 11:37

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:

×17
×8

Frage gestellt: 21 Jan, 09:12

Frage wurde angeschaut: 833 Mal

Zuletzt aktualisiert: 22 Jan, 11:38