Gleichmäßig verteilte Spaltenabstände in Tabelle - Die 2.

Tabellen und Grafiken erstellen und anordnen


mofehl
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 62
Registriert: Mi 27. Aug 2014, 13:07

Gleichmäßig verteilte Spaltenabstände in Tabelle - Die 2.

Beitrag von mofehl »

Moin liebes Forum,

ich habe ein Frage, die ich auf ähnliche Art bereits in diesem Forum gestellt habe (Link dazu ganz unten).

Mir wurde eine schöne Antwort gegeben, die aber leider nicht verallgemeinerungsfähig ist. Daher wende ich mich an die Könner und Experten ein zweites Mal, wobei ich diesmal meine Frage präziser stellen kann.

Ich habe eine Tabelle mit fester Gesamtbreite. Ich möchte, dass die Tabellenspalten so breit sind wie die breitesten Zellen der jeweiligen Spalten. Darüber hinaus möchte ich, dass sich die Spaltenabstände flexibel anpassen, und zwar so, dass die Spalten auf die Gesamtbreite der Tabelle verteilt werden. Diese Forderung kann zweierlei bedeuten:

(a) Vergrößere die Spaltenabstände, sodass die Tabellenbreite voll ausgeschöpft wird, ohne die Spalten an sich breiter zu machen als nötig.
(b) Verringere die Spaltenabstände, sodass kein Text über die Gesamtbreite der Tabelle hinausreicht. Mache die Spaltenabstände notfalls kleiner als der voreingestellte Wert von \tabcolsep.

Unten findet sich ein Minimalbeispiel. Darin sind die Umgebungen:

(1) tabular*
(2) tabularx
(3) tabulary

mit jeweils derselben Tabelle enthalten. Keine der Umgebungen arbeitet so, wie ich es mir vorstelle. Bei tabular* sind die Spalten so breit wie nötig, allerdings werden die Spaltenabstände nicht flexibel gesetzt, wodurch Text über die Gesamtbreite hinausragt. Bei tabularx und tabulary werden die Spalten zwar richtig auf die Gesamtbreite verteilt, aber notfalls umgebrochen, was ich durch obige Forderung vermeiden möchte.

Im Minimalbeispiel findet sich eine Behelfslösung, indem ich bei der tabular*-Umgebung sage:
\setlength{\tabcolsep}{0.5\tabcolsep}
Allerdings ist diese Lösung nicht allgemeingültig, da der Wert 0.5\tabsolsep nicht flexibel ist. Eine allgemeingültige Lösung müsste anstelle 0.5 so etwas wie \adjust beinhalten (den Befehl \adjust habe ich mir ausgedacht, um mein Problem zu veranschaulichen).

Wer mein Minimalbeispiel kompiliert, wird wissen, was ich hier umständlich auszudrücken versuche. Wer hat eine Lösung für mein Problem?
\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\usepackage[locale=DE]{siunitx}
\usepackage{booktabs,tabularx,tabulary}
\usepackage{graphicx}

\usepackage{lipsum}

\newcolumntype{A}{>{\raggedright\arraybackslash}X}	% Buchstabe L bereits durch tabulary vergeben
\newcolumntype{B}{>{\raggedleft\arraybackslash}X}	% Buchstabe R bereits durch tabulary vergeben

\newcommand{\hoch}[1]{\textsuperscript{#1}}
\newcommand{\tief}[1]{\textsubscript{#1}}

\begin{document}

% ------------------------------------------------------------
%           tabular*-Umgebung
% ------------------------------------------------------------

\lipsum[1]

\begin{table}[htbp]
%\setlength{\tabcolsep}{0.5\tabcolsep}
	\centering
	\caption{tabular* (textwidth)}
	{\footnotesize
	\begin{tabular*}{\textwidth}{lrrrlrlr}
		\toprule
			Energieträger	& Heizwert H\tief{i}	& Heizwert H\tief{i}	& Heizwert H\tief{i}	& Einheit	& Dichte	& Einheit	& Anmerkung						\\
							& [MJ/kg]				& [kWh/kg]				&						&			&			&			&								\\
		\midrule
			Diesel			& 43,1					& 11,97					& 10,05					& kWh/l		& 0,84		& kg/l		& --							\\
			Heizöl EL		& 42,6					& 11,83					& 10,17					& kWh/l		& 0,86		& kg/l		& --							\\
			Flüssiggas		& 46,2					& 12,83					& 6,54					& kWh/l		& 0,51		& kg/l		& bei \SI{15}{\degreeCelsius}	\\
			Pflanzenöl		& 37,6					& 10,44					& 9,60					& kWh/l		& 0,92		& kg/l		& bei \SI{15}{\degreeCelsius}	\\
			Brennholz		& 13,1					& 4,15					& 1910					& kWh/rm	& 460		& kg/rm		& Buche, H\tief{2}O \SI{15}{\%}	\\
			Holzbriketts	& 16,4					& 5,20					& 5,20					& kWh/kg	& --		& --		& Buche, H\tief{2}O \SI{8}{\%}	\\
		\bottomrule
	\end{tabular*}}
\end{table}

% ------------------------------------------------------------
%           tabular*-Umgebung mit manuellem Spaltenabstand
% ------------------------------------------------------------

\begin{table}[htbp]
\setlength{\tabcolsep}{0.5\tabcolsep}
	\centering
	\caption{tabular* (textwidth) mit 0.5 tabcolsep}
	{\footnotesize
	\begin{tabular*}{\textwidth}{lrrrlrlr}
		\toprule
			Energieträger	& Heizwert H\tief{i}	& Heizwert H\tief{i}	& Heizwert H\tief{i}	& Einheit	& Dichte	& Einheit	& Anmerkung						\\
							& [MJ/kg]				& [kWh/kg]				&						&			&			&			&								\\
		\midrule
			Diesel			& 43,1					& 11,97					& 10,05					& kWh/l		& 0,84		& kg/l		& --							\\
			Heizöl EL		& 42,6					& 11,83					& 10,17					& kWh/l		& 0,86		& kg/l		& --							\\
			Flüssiggas		& 46,2					& 12,83					& 6,54					& kWh/l		& 0,51		& kg/l		& bei \SI{15}{\degreeCelsius}	\\
			Pflanzenöl		& 37,6					& 10,44					& 9,60					& kWh/l		& 0,92		& kg/l		& bei \SI{15}{\degreeCelsius}	\\
			Brennholz		& 13,1					& 4,15					& 1910					& kWh/rm	& 460		& kg/rm		& Buche, H\tief{2}O \SI{15}{\%}	\\
			Holzbriketts	& 16,4					& 5,20					& 5,20					& kWh/kg	& --		& --		& Buche, H\tief{2}O \SI{8}{\%}	\\
		\bottomrule
	\end{tabular*}}
\end{table}

% ------------------------------------------------------------
%           tabularx-Umgebung
% ------------------------------------------------------------
\newpage
\lipsum[1]

\begin{table}[htbp]
\setlength{\tabcolsep}{0.5\tabcolsep}
	\centering
	\caption{tabularx (textwidth)}
	{\footnotesize
	\begin{tabularx}{\textwidth}{ABBBABAB} % A=linksbündig, B=rechtsbündig
		\toprule
			Energieträger	& Heizwert H\tief{i}	& Heizwert H\tief{i}	& Heizwert H\tief{i}	& Einheit	& Dichte	& Einheit	& Anmerkung						\\
							& [MJ/kg]				& [kWh/kg]				&						&			&			&			&								\\
		\midrule
			Diesel			& 43,1					& 11,97					& 10,05					& kWh/l		& 0,84		& kg/l		& --							\\
			Heizöl EL		& 42,6					& 11,83					& 10,17					& kWh/l		& 0,86		& kg/l		& --							\\
			Flüssiggas		& 46,2					& 12,83					& 6,54					& kWh/l		& 0,51		& kg/l		& bei \SI{15}{\degreeCelsius}	\\
			Pflanzenöl		& 37,6					& 10,44					& 9,60					& kWh/l		& 0,92		& kg/l		& bei \SI{15}{\degreeCelsius}	\\
			Brennholz		& 13,1					& 4,15					& 1910					& kWh/rm	& 460		& kg/rm		& Buche, H\tief{2}O \SI{15}{\%}	\\
			Holzbriketts	& 16,4					& 5,20					& 5,20					& kWh/kg	& --		& --		& Buche, H\tief{2}O \SI{8}{\%}	\\
		\bottomrule
	\end{tabularx}}
\end{table}

% ------------------------------------------------------------
%           tabulary-Umgebung
% ------------------------------------------------------------

\begin{table}[htbp]
	\centering
	\caption{tabulary mit textwidth}
	{\footnotesize
	\begin{tabulary}{\textwidth}{LRRRLRLR}
		\toprule
			Energieträger	& Heizwert H\tief{i}	& Heizwert H\tief{i}	& Heizwert H\tief{i}	& Einheit	& Dichte	& Einheit	& Anmerkung						\\
							& [MJ/kg]				& [kWh/kg]				&						&			&			&			&								\\
		\midrule
			Diesel			& 43,1					& 11,97					& 10,05					& kWh/l		& 0,84		& kg/l		& --							\\
			Heizöl EL		& 42,6					& 11,83					& 10,17					& kWh/l		& 0,86		& kg/l		& --							\\
			Flüssiggas		& 46,2					& 12,83					& 6,54					& kWh/l		& 0,51		& kg/l		& bei \SI{15}{\degreeCelsius}	\\
			Pflanzenöl		& 37,6					& 10,44					& 9,60					& kWh/l		& 0,92		& kg/l		& bei \SI{15}{\degreeCelsius}	\\
			Brennholz		& 13,1					& 4,15					& 1910					& kWh/rm	& 460		& kg/rm		& Buche, H\tief{2}O \SI{15}{\%}	\\
			Holzbriketts	& 16,4					& 5,20					& 5,20					& kWh/kg	& --		& --		& Buche, H\tief{2}O \SI{8}{\%}	\\
		\bottomrule
	\end{tabulary}}
\end{table}

\end{document}
(Hier der Link zu meiner anderen Frage:

http://www.golatex.de/viewtopic.php?t=1 ... 9365a388f6

Wendet man die dort beschriebene Lösung auf die Tabelle im Minimalbeispiel an, wird ihr nicht verallgemeinerungsfähiger Charakter deutlich.)

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Es gibt doch sicher einen Mindestabstand für die Spalten? Kleiner als 0pt soll er ja sicher nicht werden. Wenn Du den Spaltenabstand auf dieses Mindestmaß einstellst, entfällt Fall (b) aus Deiner Frage und für (a) hast Du ja bereits einen funktionierenden Vorschlag erhalten. Du kannst also etwas wie
\begin{table}[htbp]
\setlength{\tabcolsep}{0pt} 
...
\begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}rrrlrlr}
\end{table}
verwenden. Statt 0pt trägst Du einfach die Hälfte des für Dich minimal erforderlichen Abstandes ein.

Soll am Anfang und Ende der Tabelle trotzdem etwas mehr Platz als der Mindestabstand eingefügt werden, dann geht das zum Beispiel mit
\begin{tabular*}{\textwidth}{@{\hspace{6pt}}l@{\extracolsep{\fill}}rrrlrlr@{\hspace{6pt}}}
Gruß
Elke

Noch so einer

Beitrag von Noch so einer »

Man kann Abstände statt sie zu dehnen auch schrumpfen:
\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\usepackage[locale=DE]{siunitx}
\usepackage{booktabs}
\usepackage{graphicx}

\usepackage{lipsum}

\newcolumntype{A}{>{\raggedright\arraybackslash}X}   % Buchstabe L bereits durch tabulary vergeben
\newcolumntype{B}{>{\raggedleft\arraybackslash}X}   % Buchstabe R bereits durch tabulary vergeben

\newcommand{\hoch}[1]{\textsuperscript{#1}}
\newcommand{\tief}[1]{\textsubscript{#1}}

\begin{document}

% ------------------------------------------------------------
%           tabular*-Umgebung
% ------------------------------------------------------------

\lipsum[1]

\begin{table}[htbp]
%\setlength{\tabcolsep}{0.5\tabcolsep}
   \centering
   \caption{tabular* (textwidth)}
   {\footnotesize
   \begin{tabular*}{\textwidth}{@{\extracolsep{0pt plus 1fill minus .75\tabcolsep}}lrrrlrlr@{}}
      \toprule
         Energieträger   & Heizwert H\tief{i}   & Heizwert H\tief{i}   & Heizwert H\tief{i}   & Einheit   & Dichte   & Einheit   & Anmerkung                  \\
                     & [MJ/kg]            & [kWh/kg]            &                  &         &         &         &                        \\
      \midrule
         Diesel         & 43,1               & 11,97               & 10,05               & kWh/l      & 0,84      & kg/l      & --                     \\
         Heizöl EL      & 42,6               & 11,83               & 10,17               & kWh/l      & 0,86      & kg/l      & --                     \\
         Flüssiggas      & 46,2               & 12,83               & 6,54               & kWh/l      & 0,51      & kg/l      & bei \SI{15}{\degreeCelsius}   \\
         Pflanzenöl      & 37,6               & 10,44               & 9,60               & kWh/l      & 0,92      & kg/l      & bei \SI{15}{\degreeCelsius}   \\
         Brennholz      & 13,1               & 4,15               & 1910               & kWh/rm   & 460      & kg/rm      & Buche, H\tief{2}O \SI{15}{\%}   \\
         Holzbriketts   & 16,4               & 5,20               & 5,20               & kWh/kg   & --      & --      & Buche, H\tief{2}O \SI{8}{\%}   \\
      \bottomrule
   \end{tabular*}}
\end{table}


\end{document}
Man kann auch recht eigenwillige Dinge machen:
\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\usepackage[locale=DE]{siunitx}
\usepackage{booktabs}
\usepackage{graphicx}

\usepackage{lipsum}

\newcolumntype{A}{>{\raggedright\arraybackslash}X}   % Buchstabe L bereits durch tabulary vergeben
\newcolumntype{B}{>{\raggedleft\arraybackslash}X}   % Buchstabe R bereits durch tabulary vergeben

\newcommand{\hoch}[1]{\textsuperscript{#1}}
\newcommand{\tief}[1]{\textsubscript{#1}}

\begin{document}

% ------------------------------------------------------------
%           tabular*-Umgebung
% ------------------------------------------------------------

\lipsum[1]

\begin{table}[htbp]
%\setlength{\tabcolsep}{0.5\tabcolsep}
   \centering
   \caption{tabular* (textwidth)}
   {\footnotesize
   \begin{tabular*}{\textwidth}{l@{\extracolsep{0pt plus 1fil minus
           \tabcolsep}\quad}rrr@{\quad}lrlr}
      \toprule
         Energieträger   & Heizwert H\tief{i}   & Heizwert H\tief{i}   & Heizwert H\tief{i}   & Einheit   & Dichte   & Einheit   & Anmerkung                  \\
                     & [MJ/kg]            & [kWh/kg]            &                  &         &         &         &                        \\
      \midrule
         Diesel         & 43,1               & 11,97               & 10,05               & kWh/l      & 0,84      & kg/l      & --                     \\
         Heizöl EL      & 42,6               & 11,83               & 10,17               & kWh/l      & 0,86      & kg/l      & --                     \\
         Flüssiggas      & 46,2               & 12,83               & 6,54               & kWh/l      & 0,51      & kg/l      & bei \SI{15}{\degreeCelsius}   \\
         Pflanzenöl      & 37,6               & 10,44               & 9,60               & kWh/l      & 0,92      & kg/l      & bei \SI{15}{\degreeCelsius}   \\
         Brennholz      & 13,1               & 4,15               & 1910               & kWh/rm   & 460      & kg/rm      & Buche, H\tief{2}O \SI{15}{\%}   \\
         Holzbriketts   & 16,4               & 5,20               & 5,20               & kWh/kg   & --      & --      & Buche, H\tief{2}O \SI{8}{\%}   \\
      \bottomrule
   \end{tabular*}}
\end{table}


\end{document}
Ja, die Abstände sind nun nicht mehr gleichmäßig. Das ist aber auch nicht immer sinnvoll.

Es gibt wirklich eine breite Palette an Möglichkeiten. Letztlich ist die Frage also eher: Wieviel Automatismus muss sein und wieviel Handarbeit darf sein?

Besserwisser

Beitrag von Besserwisser »

Die Einheiten in eckige Klammern zu setzen, ist übrigens eigentlich falsch. Eckige Klammern bedeuten "Einheit von". Es gibt dazu sogar eine SI-Vorschrift. Korrekt wäre durch die Einheit zu dividieren oder textuell "in" hinzuschreiben und dann natürlich die Klammern wegzulassen. Wenn man an die Klammern wenigstens eine Potenz -1 schreibt, dann könnte man mit gutem Willen sagen, dass es korrekt ist. Runde Klammern mit einer Potenz -1 wären aber wohl besser.

mofehl
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 62
Registriert: Mi 27. Aug 2014, 13:07

Beitrag von mofehl »

Etwas verspätet kommt nun meine Antwort. Als erstes herzlichen Dank an Besserwisser, Noch so einer und Elke!

Um das Thema abzuschließen, kommt an Elkes Vorschlag angelehnte Lösung. Es sei angemerkt, dass ich darunter die Lösung verstehe, die mir bei der Frage vorschwebte. Um Spalten gleichmäßig zu verteilen, bietet sich die tabular*-Umgebung an, wobei man die Spalten wie folgt definiert:
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}@{\hspace{5pt}}lcr@{\hspace{5pt}}}
Selbstverständlich kann man die rechts- und linksbündigen sowie die zentrierten Spalten beliebig setzen. Der gewählte hspace von 5pt ist für booktabs-Tabellen gedacht.

@Besserwisser: Da hast du natürlich recht. Eckige Klammern sind eigentlich fehl am Platze. Danke für deine Korrekturvorschläge!

Antworten