fester Wert für erste Spalte - Rest gleichmäßig verteilen

Tabellen und Grafiken erstellen und anordnen


Mariatschi0815
Forum-Anfänger
Forum-Anfänger
Beiträge: 31
Registriert: Do 6. Okt 2022, 21:25

fester Wert für erste Spalte - Rest gleichmäßig verteilen

Beitrag von Mariatschi0815 »

Hallo nochmal,

heute habe ich es mit den Tabellen...

Ich würde gerne folgende Tabelle:
\documentclass[ngerman,10pt]{scrartcl}

\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage{graphicx}

\usepackage{scrlayer-scrpage}
\usepackage{array,calc}

\begin{document}
	\begin{tabular}{|p{1cm}|l|l|}
		\hline		
		Zeit & Unterrichtsinhalt & didaktisch-methodisches Vorgehen und Medieneinsatz\tabularnewline
		\hline
  		\multicolumn{3}{|c|}{Einstiegsphase}\tabularnewline
  		\hline
  		9.00h bis 10.00h & Hier steht was da so getrieben wird, das wird meist ziemlich ausführlich & Auch hier steht so einiges drin, weswegen ich die Spalten gleichmäßig aufteilen möchte\tabularnewline
  		\hline
	\end{tabular}
\end{document}
So anpassen, dass die Tabelle textwidth ist, die erste Spalte einen festen Wert bekommt und sich die folgenden beiden Spalten gleichmäßig aufteilen... daran scheitert es aber gerade.

ich meine ja nur

Re: fester Wert für erste Spalte - Rest gleichmäßig verteilen

Beitrag von ich meine ja nur »

tabularx, wobei in diesem Fall tatsächlich auch tabular* möglich sein sollte. Was hast du denn versucht?

Es sei übrigens erwähnt, dass vertikale Linien in Tabellen meist schlecht sind. Die Hauptleserichtung einer Tabelle sollte horizontal sein. Die Linien bremsen aber das Auge, lenken es in die Vertikale und provozieren, dass man die Zeile verliert. Für bessere Tabellen siehe booktabs-de. Übrigens ist aus ähnlichen Gründen eher von Nachteil, wenn man Tabellen mit viel horizontalem Leerraum künstlich auf Seitenbreite bringt. Besser ist, eine Tabelle einfach mit ihrer natürlichen Breite horizontal zu zentrieren.

ich meine ja nur

Re: fester Wert für erste Spalte - Rest gleichmäßig verteilen

Beitrag von ich meine ja nur »

Im konkreten Fall kann man natürlich die Breiten der beiden hinteren Spalten auch einfach berechnen, wenn man für die erste eine feste Breite verwendet. Wie man so eine Berechnung durchführt, habe ich dir ja bereits gezeigt. Mit tabularx kann man sich die eigene Berechnung aber einfach sparen,

Mariatschi0815
Forum-Anfänger
Forum-Anfänger
Beiträge: 31
Registriert: Do 6. Okt 2022, 21:25

Re: fester Wert für erste Spalte - Rest gleichmäßig verteilen

Beitrag von Mariatschi0815 »

Aber tabularx kann doch nur alle Spalten gleichmäßig aufteilen oder habe ich da eine Option übersehen? Da die erste Spalte nicht viele Informationen enthält möchte ich sie ja kompakt halten.

ich meine ja nur

Re: fester Wert für erste Spalte - Rest gleichmäßig verteilen

Beitrag von ich meine ja nur »

Du hast offenbar die Beispiele in Abschnitt 2 der tabularx-Anleitung nicht sonderlich gut angeschaut. Denn dort werden ebenfalls Tabellen gezeigt, die nicht nur aus X-Spalten bestehen. Wenn du die Anleitungen nicht magst, dann besorg dir am besten ein Buch. Es gibt beispielsweise von Herbert Voss ein Buch extra zum Thema Tabellen.

Und wenn du ganz viel Flexibilität benötigst, wonach es allerdings derzeit nicht aussieht, dann wäre da noch tabularray. Das ist dann allerdings ein sehr viel komplexeres Paket. Dafür wäre es wirklich nützlich, erst einem ein gutes LaTeX-Buch komplett durchzuarbeiten. Dafür ist die Anleitung des Pakets sehr kompakt und beschränkt sich auf das wesentliche.

Mariatschi0815
Forum-Anfänger
Forum-Anfänger
Beiträge: 31
Registriert: Do 6. Okt 2022, 21:25

Re: fester Wert für erste Spalte - Rest gleichmäßig verteilen

Beitrag von Mariatschi0815 »

Ich habe so mein tun mit englischen Dokumentationen, gerade wenn ich von der Thematik gänzlich unbeleckt bin... Darum durchforste ich zu erst das Netz... Der kleine Hinweis, dass man in tabularx nicht nur "l","c","r" nutzen kann, sondern auch "p{.}" hätte schon viel geholfen.
Ich hatte zuerst versucht mir etwas aus deinem anderen Beispiel zusammen zu schmieden. Was ja leider nicht geklappt hat.
Ich verstehe ja, dass solche Anfängerfragen in Foren nicht gern gesehen sind, aber wie gesagt... ein kleiner Hinweis hätte an der Stelle schon geholfen.

Hier also nun meine Lösung falls jemand anderes ein ähnliches Problem hat:
\documentclass[ngerman,10pt]{scrartcl}

\usepackage{babel}
\usepackage[T1]{fontenc}

\usepackage{scrlayer-scrpage}
\usepackage{array,calc}
\usepackage{tabularx}

\begin{document}
	\begin{tabularx}{\textwidth}{|p{1cm}|X|X|}
		\hline		
		Zeit & Unterrichtsinhalt & didaktisch-methodisches Vorgehen und Medieneinsatz\tabularnewline
		\hline
  		\multicolumn{3}{|c|}{Einstiegsphase}\tabularnewline
  		\hline
  		9.00h bis 10.00h & Hier steht was da so getrieben wird, das wird meist ziemlich ausführlich & Auch hier steht so einiges drin, weswegen ich die Spalten gleichmäßig aufteilen möchte\tabularnewline
  		\hline
	\end{tabularx}
\end{document}
Edit: Besten Dank für den Link über Tabellengestaltung, ich werde es einmal testen.

ich meine ja nur

Re: fester Wert für erste Spalte - Rest gleichmäßig verteilen

Beitrag von ich meine ja nur »

Wie gesagt: Es gibt gute Bücher auf Deutsch → https://www.dante.de/dante-e-v/literatur/

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: fester Wert für erste Spalte - Rest gleichmäßig verteilen

Beitrag von KOMA »

ich meine ja nur hat geschrieben:
Mo 21. Nov 2022, 19:24
Im konkreten Fall kann man natürlich die Breiten der beiden hinteren Spalten auch einfach berechnen, wenn man für die erste eine feste Breite verwendet. Wie man so eine Berechnung durchführt, habe ich dir ja bereits gezeigt.
Wenn jemand schon ein vollständiges Minimalbeispiel angegeben hat, kann man das mit der Berechnung natürlich auch einfach noch einmal zeigen:
\documentclass[ngerman,10pt]{scrartcl}

\usepackage{babel}
\usepackage[T1]{fontenc}
%\usepackage{graphicx}% Wird für das Beispiel nicht benötigt.

\usepackage{scrlayer-scrpage}
\usepackage{%array,% wird für das Beispiel nicht benötigt.
  calc}
  
%\usepackage{showframe}% Kann bei Bedarf verwendet werden, um verschiedene Bereiche der Seite in der Testphase sichtbar zu machen.

\begin{document}
\noindent% Wichtig für eine Tabelle außerhalb jeder Umgebung! Sonst hat die Tabelle den normalen Absatzeinzug.
	\begin{tabular}{|p{1cm}|*2{p{(\linewidth-1cm-6\tabcolsep)/2}|}}
		\hline		
		Zeit & Unterrichtsinhalt & didaktisch-methodisches Vorgehen und Medieneinsatz\tabularnewline% Hier kann in dem Fall auch \\ statt \tabularnewline verwendet werden.
		\hline
  		\multicolumn{3}{|c|}{Einstiegsphase}\tabularnewline% Hier kann in dem Fall auch \\ statt \tabularnewline verwendet werden.
  		\hline
  		9.00h bis 10.00h & Hier steht was da so getrieben wird, das wird meist ziemlich ausführlich & Auch hier steht so einiges drin, weswegen ich die Spalten gleichmäßig aufteilen möchte\tabularnewline
  		\hline
	\end{tabular}
\end{document}
Erklärung: Das Paket calc wird verwendet, um Berechnungen im Argument des Spaltentyps p zu ermöglichen. Ich selbst bevorzuge übrigens die Verwendung der Anweisung \dimexpr, aber das ist in erster Linie eine Geschmacksfrage.

Bei der Berechnung ist neben der Breite der ersten Spalte von 1cm auch der Abstand der Spalten voneinander zu berücksichtigen. Das ist (wenn man nicht @{…} o. ä. verwendet) vor jeder Spalte und nach jeder Spalte ein Abstand der Breite \tabcolsep. Bei drei Spalten sind das also insgesamt \tabcolsep. \linewidth ist die Breite, die in der aktuellen Umgebung insgesamt zur Verfügung steht. Damit steht für die Spalten 2 und 3 zusammen \linewidth - 1cm - 6\tabcolsep zur Verfügung. Sollen beide Spalten gleich breit sein, muss der Wert also nur noch durch 2 geteilt werden. Die Spaltendeklaration mit *2{…} sagt lediglich, dass die Deklaration aus dem Argument zweimal angewendet werden soll. Ich spare mir damit, die Berechnung zu wiederholen. Natürlich kann man aber auf diesem Weg auch unterschiedliche Breiten für die beiden Spalten verwenden, beispielsweise mit:
\documentclass[ngerman,10pt]{scrartcl}

\usepackage{babel}
\usepackage[T1]{fontenc}
%\usepackage{graphicx}% Wird für das Beispiel nicht benötigt.

\usepackage{scrlayer-scrpage}
%\usepackage{array,calc}% Dieses Mal zeige ich stattdessen \dimexpr.
  
%\usepackage{showframe}% Kann bei Bedarf verwendet werden, um verschiedene Bereiche der Seite in der Testphase sichtbar zu machen.

\begin{document}
\noindent% Wichtig für eine Tabelle außerhalb jeder Umgebung! Sonst hat die Tabelle den normalen Absatzeinzug.
	\begin{tabular}{|p{1cm}|p{\dimexpr(\linewidth-6\tabcolsep-1cm)/3\relax}|p{\dimexpr(\linewidth-6\tabcolsep-1cm)/3*2\relax}|}
		\hline		
		Zeit & Unterrichtsinhalt & didaktisch-methodisches Vorgehen und Medieneinsatz\tabularnewline% Hier kann in dem Fall auch \\ statt \tabularnewline verwendet werden.
		\hline
  		\multicolumn{3}{|c|}{Einstiegsphase}\tabularnewline% Hier kann in dem Fall auch \\ statt \tabularnewline verwendet werden.
  		\hline
  		9.00h bis 10.00h & Hier steht was da so getrieben wird, das wird meist ziemlich ausführlich & Auch hier steht so einiges drin, weswegen ich die Spalten gleichmäßig aufteilen möchte\tabularnewline
  		\hline
	\end{tabular}
\end{document}
In Abschnitt 4.3 der tabularx-Anleitung ist übrigens angegeben, wie man so etwas auch mit X-Spalten erreichen kann. Schöner geht das dann aber in der Tat mit tabularray.

BTW: Mit tabularx würde ich für die erste Spalte einfach eine l-Spalte verwenden. Dann hat das Paket auch wirklich einen Vorteil gegenüber der Methode der Eigenberechnung wie hier gezeigt.

Achja: Bezüglich der Deutschen Bücher stimme ich übrigens voll und ganz zu. Wobei es inzwischen weit mehr gute Bücher gibt, als die verlinkten. Und natürlich sind nicht alle der verlinkten Bücher als Einstieg gedacht. Viele davon vertiefen bestimmte Aspekte.

Antworten