Tabelle komplett farbig hinterlegen

Tabellen und Grafiken erstellen und anordnen


hermes

Tabelle komplett farbig hinterlegen

Beitrag von hermes »

Liebe LaTeX-Community,

ich möchte eine Tabelle vollständig einfarbig hinterlegen. Im Minimalbeispiel habe ich dazu eine \colorbox verwendet. Die tabular-Umgebung kann man nicht direkt als Argument im \colorbox-Befehl nutzen, daher der "Umweg" über das Boxregister.

Das Problem ist: Die Farbe ragt an den Rändern über die Tabelle hinaus. Ich möchte, dass der Farbhintergrund an allen vier Seiten genau mit de Linien der Tabelle abschließt und nicht übersteht.

Beim Test mit \frame-Befehl sieht man, dass es keinen Rand um die Tabelle gibt, sondern der Rand im Innern der \colorbox liegt.

Minimalbeispiel:
\documentclass{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs,xcolor}

\definecolor{TabColor}{gray}{0.8}

\begin{document}

% Boxnamen definieren
\newsavebox{\tmpbox}

% Boxinhalt festlegen
\begin{lrbox}{\tmpbox}
\begin{tabular}{ll}
\toprule
\textbf{Bla} & \textbf{Blubb} \\ 
\midrule Foo & Bar \\
Yes & Never \\
Wow & Bark \\ 
\bottomrule 
\end{tabular}
\end{lrbox}

% Box farbig hinterlegt setzen
\colorbox{TabColor}{\usebox{\tmpbox}}\\[2ex]
%
% Gegenprobe: Box mit \frame setzen
\frame{\usebox{\tmpbox}}

\end{document}

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

Es gibt etwa 100 Möglichkeiten das zu machen.
Hier ist eine:
\documentclass{report}

\usepackage{tabu}
\usepackage[table]{xcolor}
\begin{document}

\section{MIt tabu}
\taburowcolors [1]1{ red..red}
\begin {tabu} to \textwidth {|X[2]|X[3]|X[1]|}
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\

\end{tabu}
\section{Nur xcolor}
\rowcolors{1}{yellow}{yellow} 
\begin {tabular} {lll}
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\

\end{tabular}

\end{document}


Mehr zu tabu etwa hier und natürlich via "texdoc"
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


hermes

Beitrag von hermes »

Danke für die schnelle Antwort.
Aber leider funktionieren beide Varianten nicht in Kombination mit booktabs. Denn dann gibt es weißte Leerräume bei den rules:
\documentclass{report}

\usepackage{tabu,booktabs}
\usepackage[table]{xcolor}
\begin{document}

\section{MIt tabu}
\taburowcolors [1]1{ red..red}
\begin {tabu} to \textwidth {|X[2]|X[3]|X[1]|}
\toprule
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
\midrule
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
\bottomrule
\end{tabu}

\section{Nur xcolor}
\rowcolors{1}{yellow}{yellow}
\begin {tabular} {lll}
\toprule
a&die lange  zeile &d\\
\midrule
a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\
\bottomrule
\end{tabular}

\end{document} 

hermes

Beitrag von hermes »

Mit tikz konnte ich das Problem übrigens lösen. Nicht besonders elegant, aber das Ergebnis entspricht meinen Vorstellungen. Hat noch jemand eine bessere Idee?
\documentclass{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs,xcolor,tikz}

\definecolor{TabColor}{gray}{0.9}

\begin{document}

% Boxnamen definieren
\newsavebox{\tmpbox}

% Boxinhalt festlegen
\begin{lrbox}{\tmpbox}
\begin{tabular}{ll}
\toprule
\textbf{Bla} & \textbf{Blubb} \\ 
\midrule Foo & Bar \\
Yes & Never \\
Wow & Bark \\ 
\bottomrule 
\end{tabular}
\end{lrbox}

% Box farbig hinterlegt setzen
\colorbox{TabColor}{\usebox{\tmpbox}}\\[2ex]
%
% Gegenprobe: Box mit \frame setzen
\frame{\usebox{\tmpbox}}\\[2ex]
%
% Lösung: Variante mit tikz:
\begin{tikzpicture}
\node [inner sep=0,rectangle,fill=TabColor] {\usebox{\tmpbox}};
\end{tikzpicture}

\end{document}

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

Jo dann halt doch erstmal so:
Minimalbsp analog zu oben
\fboxsep=0pt % Sep= separation 
\colorbox{red}{%WICHTIG dass hier ein % steht
\noindent% das müsste vermutlich hier nicht stehen, tut aber nicht weh. 
\begin {tabular} {lll}%
\toprule 
a&die lange  zeile &d\\ 
\midrule 
a&die lange  zeile &d\\a&die lange  zeile &d\\ 
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\ 
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\ 
a&die lange  zeile &d\\a&die lange  zeile &d\\a&die lange  zeile &d\\ 
\bottomrule 
\end{tabular}}
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


hermes

Beitrag von hermes »

Ahh, \fboxsep ist gut, das kannte ich noch nicht!

Jetzt habe ich noch das Problem: Wie kann ich mir eine Umgebung für farbig hinterlegte Tabellen definieren? Dazu sehe ich im Prinzip zwei Möglichkeiten:

1.) Gibt es eine Umgebungsvariante zu \colorbox ?
2.) Gibt es eine Möglichkeit, mit \newsavebox so zu arbeiten, dass man es in einer Umgebung mehrmals verwenden kann?

Das unten angegebene Beispiel funkioniert zwar, aber nur einmal, weil der Name \tmpbox kein zweites Mal benutzt werden kann.
\documentclass{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs,xcolor,tikz}

\definecolor{TabColor}{rgb}{0.976,0.96,1}

\newenvironment{mytabular}[1]
{
\newsavebox{\tmpbox}
\begin{lrbox}{\tmpbox}
\begin{tabular}{#1}}
{
\end{tabular}
\end{lrbox}
\fboxsep=0pt
\colorbox{TabColor}{\usebox{\tmpbox}}
}


\begin{document}

\begin{mytabular}{ll}
\toprule
\textbf{Bla} & \textbf{Blubb} \\ 
\midrule Foo & Bar \\
\bottomrule 
\end{mytabular}


\end{document}

hermes

Beitrag von hermes »

Okay, ich hab die Lösung selbst gefunden. Die \newsavebox darf nur einmal definiert werden, kann aber mehrmals mit \begin{lrbox} überschrieben werden.
Anbei die Lösung. Vielen Dank an bloodworks für die Hilfe!
\documentclass{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs,xcolor,tikz}

\definecolor{TabColor}{rgb}{0.976,0.96,1}

\newsavebox{\tmpboxmytabular}

\newenvironment{mytabular}[1]
{
\begin{lrbox}{\tmpboxmytabular}
\begin{tabular}{#1}}
{
\end{tabular}
\end{lrbox}
\fboxsep=0pt
\colorbox{TabColor}{\usebox{\tmpboxmytabular}}
}


\begin{document}

\begin{mytabular}{ll}
\toprule
\textbf{Bla} & \textbf{Blubb} \\ 
\midrule Foo & Bar \\
\bottomrule 
\end{mytabular}

\begin{mytabular}{ll}
\toprule
\textbf{Bla Bla} & \textbf{Blubber} \\ 
\midrule Wow & Bark \\
\bottomrule 
\end{mytabular}


\end{document}


Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Du kannst dir den Boxen-Kram auch sparen, wenn du das Paket environ verwendest. (Könnte aber sein, das das intern etwas ähnliches macht …)

Antworten