Untertabellen farblich unterlegen

Tabellen und Grafiken erstellen und anordnen


dero1690
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 56
Registriert: Mo 8. Jun 2015, 17:17

Untertabellen farblich unterlegen

Beitrag von dero1690 »

Hallo zusammen !

Ich wäre froh, wenn mir jemand bei meinem Problem helfen könnte.
Ich habe eine Tabelle mit Untertabellen erstellt, weil es in einer Quelle empfohlen wurde und mir die "\multirow" und "\multicolumn" Befehle insbesondere bei der Farbunterlegung Probleme bereitet haben.

Hier ist mein nach meinem besten Wissen erstelltes Minimalbeispiel:
\documentclass[11pt,a4paper,twoside=semi, bibliography=totoc, listof=totoc, openany
]{scrbook} %[Formal, Format, Format,Literaturverzeichnis in Inhaltsvrezeichnis, Abkürzungs-und Variablenverzeichnis im Inhaltsverzeichnis] doppelseitig, aber keine variablen Seitenränder
\usepackage[left=3cm,right=2.5cm,top=3.2cm,bottom=2.5cm, bindingoffset=0cm]{geometry}  % Seitenabstände festlegen
		   
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}		% Für europäische Schriftzeichen
\usepackage{xcolor}				% Pakete für Farben
\usepackage{array}
\usepackage[]{graphicx} %um grafiken einzufü
\usepackage{colortbl}   % für farbliche Hinterlegung der Tabellenzellen
\usepackage{multirow}				% für Tabellen
\usepackage{rotating}				% um senkrechten text in Tabellen schreiben zu können
\usepackage{hhline}
\usepackage{color}
\definecolor{hellgrau}{gray}{0.9}
\definecolor{coralpink}{rgb}{0.97, 0.51, 0.47}   
\definecolor{peach}{rgb}{1.0,0.9,0.71}
\definecolor{babyblue}{rgb}{0.54,0.81,0.94}
% Definition der Farben für Unterlegung von Tabellen
% peach [1.0,0.9,0.71]
% babyblue{0.54, 0.81, 0.94}
% bittersweet {1.0, 0.44, 0.37}
\newcommand{\ltab}{\raggedright\arraybackslash} % Tabellenabschnitt linksbündig
\newcommand{\ctab}{\centering\arraybackslash} % Tabellenabschnitt zentriert
\newcommand{\rtab}{\raggedleft\arraybackslash} % Tabellenabschnitt rechtsbündig
\usepackage{longtable}
\begin{document} 
  
      \begin{center}
      \begin{table}
       \begin{tabular}[\textwidth]{|p{0.5cm}|p{14.1cm}|} 
       \hline
       \cellcolor{coralpink} \rotatebox[origin=c]{90}{\textbf{vertikaler Eintrag}} & \begin{tabular}[c]{p{14cm}}
       \begin{tabular}[\textwidth-0.5]{p{6cm}p{6.85cm}}
       \rowcolor{peach} \ctab \textbf{Spalte links} & \textbf{Spalte rechts}
       \end{tabular}
        \\ 
       \begin{tabular}[c]{p{13.3cm}}
       \rowcolor{babyblue} \ctab 1. Abschnitt
       \end{tabular} 
       \\
        \begin{tabular}[c]{p{5cm}|p{8cm}}
            1. Eintrag Spalte 1 & 1. Eintrag Spalte 2
        \end{tabular} 
       \\
       \begin{tabular}[c]{p{5cm}|p{8cm}}
                 2. Eintrag Spalte 2& 2. Eintrag Spalte 2
            \end{tabular} 
           \\
      
      \begin{tabular}[c]{p{13.3cm}}
             \rowcolor{babyblue} \ctab 2. Abschnitt
             \end{tabular} 
             \\
              \begin{tabular}[c]{p{5cm}|p{8cm}}
                  1. Eintrag Spalte 1 & 1. Eintrag Spalte 2
              \end{tabular} 
             \\
             \begin{tabular}[c]{p{5cm}|p{8cm}}
                       2. Eintrag Spalte 2& 2. Eintrag Spalte 2
                  \end{tabular} 
                 \\      
       \end{tabular}
        \\      
       \hline       
       \end{tabular}      
        \end{table}       
       \end{center}    
     \end{document}

Meine Fragen sind:


1.Wie bekomme ich hin, dass die Untergrundfarben "peach" und "babyblau" bis an die Ränder gehen ?
Meine Vermutung ist, dass man einstellen muss, dass die definierten Untertabellen bis an die Zellenränder der übergeordneten Tabelle gehen müssen. ( siehe pdf im Anhang )

2. Falls die Tabelle länger als eine Seite wird, wie bekommt man einen seitenumbruch hin ? Meine Versuche mit "longtable" schlugen fehl. ( Die ganze Tabelle ist u.U. länger als eine Seite)


Ich wäre froh, wenn jemand eine Idee hätte und schon mal vielen Dank im Voraus.

Viele Grüße

Denys
Dateianhänge
Minimalbeispiel.pdf
(34.42 KiB) 319-mal heruntergeladen

Noch so einer

Beitrag von Noch so einer »

Zunächst einmal ist es unsinnig, eine Gleitumgebung wie table in eine center-Umgebung zu packen. Da die Umgebung nun einmal gleitet, gleitet sie auch aus dieser Umgebung heraus. Sinnvoll wäre beispielsweise die Anweisung \centering in der table-Umgebung. Tatsächlich vermute ich aber, dass Du gar keine table-Umgebung haben willst. Jedenfalls deutet Deine longtabe-Ergänzungsfrage darauf hin. Gleitumgebungen können nicht über mehrere Seiten umbrochen werden. Also sollte man die table eher weglassen.

Dann hast Du das optionale Argument von tabular offenbar nicht verstanden. Darin irgend eine Länge anzugeben ist Unsinn. Es dient ausschließlich der vertikalen Anordnung der Tabelle. Dazu gibt es lediglich die drei Buchstaben t für top (oberste Grundlinie der Tabelle auf der aktuellen Grundlinie) c für centre (Tabelle wird vertikal zu aktuellen Grundlinie zentriert) oder b für bottom (unterste Grundlinie der Tabelle auf der aktuellen Grundlinie. Dabei ist das Zentrieren bereits die Voreinstellung.

Dann muss man natürlich die Spaltenabstände, die es auch am Anfang der ersten Spalte und am Ende der letzten Spalte gibt, berücksichtigen. Das geht am einfachsten, indem man nicht nur die Zeilen oder Zellen der inneren Tabelle, sondern schlicht die Zellen der äußeren Tabelle färbt:
\documentclass[11pt,a4paper,twoside=semi, bibliography=totoc, listof=totoc, openany
]{scrbook} %[Formal, Format, Format,Literaturverzeichnis in Inhaltsvrezeichnis, Abkürzungs-und Variablenverzeichnis im Inhaltsverzeichnis] doppelseitig, aber keine variablen Seitenränder
\usepackage[left=3cm,right=2.5cm,top=3.2cm,bottom=2.5cm, bindingoffset=0cm]{geometry} % Seitenabstände festlegen

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} % Für europäische Schriftzeichen
\usepackage{xcolor} % Pakete für Farben
\usepackage{array}
\usepackage[]{graphicx} %um grafiken einzufü
\usepackage{colortbl} % für farbliche Hinterlegung der Tabellenzellen
\usepackage{multirow} % für Tabellen
\usepackage{rotating} % um senkrechten text in Tabellen schreiben zu können
\usepackage{hhline}
\usepackage{color}
\definecolor{hellgrau}{gray}{0.9}
\definecolor{coralpink}{rgb}{0.97, 0.51, 0.47}
\definecolor{peach}{rgb}{1.0,0.9,0.71}
\definecolor{babyblue}{rgb}{0.54,0.81,0.94}
% Definition der Farben für Unterlegung von Tabellen
% peach [1.0,0.9,0.71]
% babyblue{0.54, 0.81, 0.94}
% bittersweet {1.0, 0.44, 0.37}
\newcommand{\ltab}{\raggedright\arraybackslash} % Tabellenabschnitt linksbündig
\newcommand{\ctab}{\centering\arraybackslash} % Tabellenabschnitt zentriert
\newcommand{\rtab}{\raggedleft\arraybackslash} % Tabellenabschnitt rechtsbündig
\usepackage{longtable}
\begin{document}

\begin{center}
%\begin{table}
\begin{tabular}{|p{0.5cm}|p{14.1cm}|}
\hline
\cellcolor{coralpink} \rotatebox[origin=c]{90}{\textbf{vertikaler Eintrag}}
  & \begin{tabular}[c]{@{}p{14.1cm}@{}}\cellcolor{peach}
\begin{tabular}{@{}p{6cm}p{6.85cm}@{}}% Das ist weniger als 14.1cm?!?
\ctab \textbf{Spalte links} & \textbf{Spalte rechts}
\end{tabular}
\\
\cellcolor{babyblue}
\ctab 1. Abschnitt
\\
\begin{tabular}{@{}p{5cm}|p{8cm}@{}}% Das ist weniger als 14.1cm?!?
1. Eintrag Spalte 1 & 1. Eintrag Spalte 2
\end{tabular}
\\
\begin{tabular}{@{}p{5cm}|p{8cm}@{}}% Das ist weniger als 14.1cm?!?
2. Eintrag Spalte 2& 2. Eintrag Spalte 2
\end{tabular}
\\
\cellcolor{babyblue} \ctab 2. Abschnitt
\\
\begin{tabular}{@{}p{5cm}|p{8cm}@{}}% Das ist weniger als 14.1cm?!?
1. Eintrag Spalte 1 & 1. Eintrag Spalte 2
\end{tabular}
\\
\begin{tabular}{@{}p{5cm}|p{8cm}@{}}% Das ist weniger als 14.1cm?!?
2. Eintrag Spalte 2& 2. Eintrag Spalte 2
\end{tabular}
\\
\end{tabular}
\\
\hline
\end{tabular}
%\end{table}
\end{center}
\end{document}
Allerdings ist die Tabelle so unnötig kompliziert. Schön wäre auch, wenn Du bei einem Minimalbeispiel alles weglassen würdest, was unerheblich ist:
\documentclass[11pt,a4paper,twoside=semi, bibliography=totoc, listof=totoc, openany
]{scrbook} %[Formal, Format, Format,Literaturverzeichnis in Inhaltsvrezeichnis, Abkürzungs-und Variablenverzeichnis im Inhaltsverzeichnis] doppelseitig, aber keine variablen Seitenränder
\usepackage[left=3cm,right=2.5cm,top=3.2cm,bottom=2.5cm, bindingoffset=0cm]{geometry} % Seitenabstände festlegen

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} % Für europäische Schriftzeichen
\usepackage{graphicx}
\usepackage[table]{xcolor} % Pakete für Farben einschließlich Tabellenbehandlung
\usepackage{array}
\definecolor{coralpink}{rgb}{0.97, 0.51, 0.47}
\definecolor{peach}{rgb}{1.0,0.9,0.71}
\definecolor{babyblue}{rgb}{0.54,0.81,0.94}

\newcommand*{\textth}[1]{\cellcolor{peach}\textbf{#1}}% Hervorhebung für Tabellenköpfe
\begin{document}

\begin{center}
\begin{tabular}{|c|c|}% Breite der zweiten Spalte ergibt sich aus der Breite
                      % der inneren Tabelle
\hline
\cellcolor{coralpink} \rotatebox[origin=c]{90}{\small\textbf{vertikaler Eintrag}} & 
  \begin{tabular}{@{}p{5cm}|p{8cm}@{}}
    \multicolumn{1}{@{}c}{\textth{Spalte links}} &
    \multicolumn{1}{c@{}}{\textth{Spalte rechts}} \\
    \multicolumn{2}{@{}c@{}}{\cellcolor{babyblue}1. Abschnitt} \\
    1. Eintrag Spalte 1 & 1. Eintrag Spalte 2 \\
    2. Eintrag Spalte 2& 2. Eintrag Spalte 2 \\
    \multicolumn{2}{@{}c@{}}{\cellcolor{babyblue}2. Abschnitt} \\
    1. Eintrag Spalte 1 & 1. Eintrag Spalte 2\\
    2. Eintrag Spalte 2& 2. Eintrag Spalte 2\\
  \end{tabular}\\
\hline
\end{tabular}
\end{center}
\end{document}
Der zweite Code ist IMHO nicht nur wesentlich kompakter, sondern auch leichter zu verstehen. Durch das kleineres Setzen des vertikalen Textes wird außerdem vermieden, dass dieser zu sehr am oberen und unteren Rand klebt.

Man könnte auch noch tabularx bzw. ltablex zum Einsatz bringen, um statt Spaltenbreiten die Tabellenbreite vorzugeben, falls das gewünscht ist. Die Umgebung tabularx hat dann in der Tat ein Argument für die Tabellenbreite, die aber nur einen Sinn hat, wenn auch min. eine x-Spalte existiert.

dero1690
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 56
Registriert: Mo 8. Jun 2015, 17:17

Beitrag von dero1690 »

Hallo !
Danke für deine Hilfe, das Problem mit der Untergrundfarbe wurde gelöst!

Ich habe meine Tabelle in eine "table"-Umgebung gepackt, damit ich diese mit "\caption" und "\label" referenzieren kann.

Und leider finden kein Seitenumbruch statt, wenn ich dein 2. Minimalbeispiel nehme und meine Tabelle mit meinen Daten erweitere ( es sind so viele, dass schon ein Seitenumbruch nötig wird ).

Hättest du eine Idee, wie man diese Probleme lösen kann ?

Vielen Dank und viele Grüße

Denys

Noch so einer

Beitrag von Noch so einer »

Ohne table aber mit longtable mit Hilfe von longtable oder tabularx mit Hilfe von ltablex.

Tabellenüberschriften mit \caption bietet beide Pakete direkt. Die richtige Anwendung ist aber wichtig. Siehe dazu die Anleitung des jeweiligen Pakets.

Außerdem bleibt es dabei, dass table in center unsinnig ist. Will so mancher nicht glauben, ist aber so.

Ansonsten: Wenn es nicht gelingt, wäre das eine neue Frage, die Du dann bitte auch als neues Thema mit neuem Minimalbeispiel stellst und nicht an diese Frage anhängst! Wenn hingegen das Primäre Problem dieses hier beantwortet ist, solltest Du den Status entsprechend setzen.

Noch so einer

Beitrag von Noch so einer »

Wenn ich so recht darüber nachdenke, dann ist es eigentlich bei der Tabelle kaum möglich, sie automatisch wirklich gut umbrechen zu lassen, da man ja eigentlich die linke Spalte jeweils wiederholen müsste. Das geht AFAIK nicht automatisch. Da müsste man die Tabelle eher von Hand umbrechen.

dero1690
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 56
Registriert: Mo 8. Jun 2015, 17:17

Beitrag von dero1690 »

Vielen Dank für eure Hilfe soweit !
Wie vorgeschlagen, werde ich einen neuen Thread für meine weiteren Fragen aufmachen.

Viele Grüße

Denys

Antworten