Seite 1 von 1
Tabelle komplett farbig hinterlegen
Verfasst: Sa 16. Apr 2011, 12:17
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}
Verfasst: Sa 16. Apr 2011, 12:29
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"
Verfasst: Sa 16. Apr 2011, 12:38
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}
Verfasst: Sa 16. Apr 2011, 12:58
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}
Verfasst: Sa 16. Apr 2011, 13:01
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}}
Verfasst: Sa 16. Apr 2011, 13:35
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}
Verfasst: Sa 16. Apr 2011, 13:39
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}
Verfasst: Sa 16. Apr 2011, 17:32
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 …)