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 '16, 15:12

fpires's gravatar image

fpires
85157
Akzeptiert-Rate: 0%

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 '16, 15: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 '16, 15: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 '16, 09:14

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 22 Jan '16, 09: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 '16, 16:15) fpires

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 22 Jan '16, 01:29

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 22 Jan '16, 17:37

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, 22:09

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

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:

×21
×9

gestellte Frage: 21 Jan '16, 15:12

Frage wurde gesehen: 8,330 Mal

zuletzt geändert: 22 Jan '16, 17:38