PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Farblich diagonal geteilte Tabellenkästchen



Poseidonius
12-06-2011, 11:38
Hallo zusammen,

ich möchte in einer Tabelle die Zugehörigkeit der Einträge zu einer bestimmten Kategorie durch Farben markieren. Bei einigen Einträgen sind aber zwei Kategorien möglich, daher sollten diese über die Diagonale geteilt zwei Farben zeigen.

Nun habe ich versucht das ganze durch ein Tikz filldraw umzusetzen, habe aber keine schöne Lösung parat. In der zweiten Spalte habe ich einfach die internen horizontalen Ränder abgeschalten "@{}", was aber nicht für die vertikalen funktioniert. Wie muss der Code geändert werden, damit das Dreieck überall auf dem Rand des umfassenden Tabellenkästchens liegen?

Kann man das ganze auch so anpassen, dass die Größe des Dreiecks an die Spaltenbreite angepasst wird?

Tausend Dank und schöne Pfingstfeiertage !

Poseidonius


\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{table}
\begin{tabular}{c|@{}p{1cm}@{}|}
\hline
Das ist& ein Test \\ \hline
&
\begin{tikzpicture}
\filldraw [fill=blue!20, draw=blue!20] (0,0) -- (1cm,1cm) -- (0,1cm) --cycle;
\end{tikzpicture} \\
\hline
\end{tabular}
\end{table}

\end{document}

localghost
13-06-2011, 12:16
Der Ansatz mit pgf/tikZ (http://ctan.org/pkg/pgf) ist schon nicht schlecht. Ich würde allerdings die Tabelle ganz anders angehen. Das vereinfacht vieles.

\documentclass[captions=tableabove,ngerman]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{%
adieresis={ä},
germandbls={ß},
Euro=€
}
\usepackage{babel}
\usepackage{tikz}
\usetikzlibrary{matrix,backgrounds}

\begin{document}
\begin{table}[!ht]
\caption{Ein Beispiel}
\centering
\begin{tikzpicture}
\matrix (tab) [matrix of nodes,nodes={minimum size=2em}]{%
A & B & C \\
D & E & F \\
G & H & I \\
};
\foreach \n in {1,...,3} {%
\draw (tab-\n-1.north west) -- (tab-\n-3.north east);
\draw (tab-1-\n.north west) -- (tab-3-\n.south west);
};
\draw (tab-1-3.north east) -- (tab-3-3.south east);
\draw (tab-3-1.south west) -- (tab-3-3.south east);
\fill[on background layer,blue,opacity=0.25] (tab-2-1.north west) -- (tab-2-1.north east) -- (tab-2-1.south east) -- cycle;
\fill[on background layer,red,opacity=0.25] (tab-2-1.north west) -- (tab-2-1.south west) -- (tab-2-1.south east) -- cycle;
\fill[on background layer,red,opacity=0.25] (tab-1-2.north west) rectangle (tab-1-2.south east);
\fill[on background layer,blue,opacity=0.25] (tab-3-3.north west) rectangle (tab-3-3.south east);
\end{tikzpicture}
\end{table}
\end{document}
Es geht sicherlich noch eleganter. Daher ist dies nur eine ganz bescheidene Basis.


Thorsten

bobmalaria
13-06-2011, 17:47
hi,

du kannst auch einfach einen shade style defineiren und verwenden


\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[
shade/.style={top color=blue,bottom color=green,shading angle=45}
]
\matrix (status) [matrix of nodes]
{
0 & \node[shade]{56};\\
1 & 3 \\
2 & 9 \\
};
\end{tikzpicture}
\end{document}


http://www.mrunix.de/forums/attachment.php?attachmentid=4611&stc=1&d=1307980108
das ganze innerhalb von tabular zu loesen ist nicht einfach wuerde ich sagen.



gruss

Sepp99
14-06-2011, 09:58
Zwar wird hier nicht die Tabellenzelle geteilt, aber vielleicht kannst Du dir mit Symbolen helfen, wie sie iTob unter
http://www.golatex.de/tikz-symbol-t6175,highlight,tikz,start,10.html
vorgegeben hat. Als Ansatz:

\documentclass{scrartcl}
\usepackage{lmodern}
\usepackage{tikz}
\usepackage{xstring}
\usepackage{booktabs}

\setlength\parindent{0pt}

\newcommand{\MyShape}[3][rh]{%
\tikz[scale=0.7]{
% 1. clip-Pfad wählen:
% 1.1 rectangle
\IfBeginWith{#1}{r}{\clip (-.5em,-.5em) rectangle (.5em,.5em);}{
% 1.2 diamond
\IfBeginWith{#1}{d}{\clip (0,-0.5em) -- (0.5em,0) -- (0,0.5em) -- (-0.5em,0) -- cycle;}{
% 1.3 circle
\IfBeginWith{#1}{c}{\clip circle (0.5em);}{
% 1.4 Unbekannte Form, Rechteck wählen
\clip (-.5em,-.5em) rectangle (.5em,.5em);
}}}
% 2. Farben zeichnen
% 2.1 horizontal
\IfEndWith{#1}{h}{
\fill [#2] (-1em,-1em) rectangle (0,1em);
\fill [#3] (0,-1em) rectangle (1em,1em);
\draw (0,-1em) -- (0,1em);
}{
% 2.2 vertikal
\IfEndWith{#1}{v}{
\fill [#2] (-1em,-1em) rectangle (1em,0);
\fill [#3] (-1em,0) rectangle (1em,1em);
\draw (-1em,0) -- (1em,0);
}{
% 2.3 diagonal von links nach rechts
\IfEndWith{#1}{dl}{
\fill [#2] (-1em,1em) -- (1em,-1em) -- (-1em,-1em) -- cycle;
\fill [#3] (-1em,1em) -- (1em,1em) -- (1em,-1em) -- cycle;
\draw (-1em,1em) -- (1em,-1em);
}{
% 2.4 diagonal von rechts nach links
\IfEndWith{#1}{dr}{
\fill [#2] (-1em,1em) -- (1em,1em) -- (-1em,-1em) -- cycle;
\fill [#3] (-1em,-1em) -- (1em,-1em) -- (1em,1em) -- cycle;
\draw (-1em,-1em) -- (1em,1em);
}{
% 2.5 unbekannte Teilung, wähle horizontal
\fill [#2] (-1em,-1em) rectangle (0,1em);
\fill [#3] (0,-1em) rectangle (1em,1em);
\draw (0,-1em) -- (0,1em);
}}}}
% 3. Rahmen zeichnen
% 3.1 rectangle
\IfBeginWith{#1}{r}{\draw [thick] (-.5em,-.5em) rectangle (.5em,.5em);}{
% 3.2 diamond
\IfBeginWith{#1}{d}{\draw [thick] (0,-0.5em) -- (0.5em,0) -- (0,0.5em) -- (-0.5em,0) -- cycle;}{
% 3.3 circle
\IfBeginWith{#1}{c}{\draw [thick] circle (0.5em);}{
% 3.4 Unbekannte Form, Rechteck wählen
\draw [thick] (-.5em,-.5em) rectangle (.5em,.5em);
}}}%
}%
}

\begin{document}
\begin{table}[htb]%
\centering
\captionabove{Test.}
\label{tab:test}
\begin{tabular}{llll} \toprule
\MyShape[r-dl]{blue}{blue} & \MyShape[r-dl]{blue}{blue} & \MyShape[r-dl]{blue}{green} & \MyShape[r-dl]{green}{green} \\
\MyShape[r-dl]{green}{green} & \MyShape[r-dl]{green}{green} & \MyShape[r-dl]{green}{blue} & \MyShape[r-dl]{blue}{blue} \\
\bottomrule
\end{tabular}
\end{table}
\end{document}

Ich habs jetzt nicht weiter vereinfacht. Näheres im Link, Ergebnis im Anhang.

Gruß, Sepp.-

bobmalaria
14-06-2011, 10:51
hi,

eine noch feinere loesung bei der man innerhalb der tikz matrix auch noch die funktionalitaet einer tabular umgebung (bei den linien) hat


\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix,shadings}
\begin{document}

\tikzset{toprule/.style={%
execute at end cell={%
\draw [line cap=rect,#1]
(\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north
west) --
(\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north
east);%
}
},
bottomrule/.style={%
execute at end cell={%
\draw [line cap=rect,#1]
(\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south
west) --
(\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.south
east);%
}
}
}

\begin{tikzpicture}[shade/.style={top color=blue,bottom color=red,
shading angle=45}]%
\matrix [matrix of nodes,
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
nodes={rectangle,minimum width=3em,outer sep=0pt},
row 1/.style={toprule=thick,bottomrule},
row 3/.style={bottomrule=thick}]
{
0 & 6 & \node[shade]{5};\\
1 & 3 & 7\\
21 & 22 & 23\\
};
\end{tikzpicture}
\end{document}


http://www.mrunix.de/forums/attachment.php?attachmentid=4613&stc=1&d=1308041472

Poseidonius
14-06-2011, 21:44
Manchmal hat man das Gefühl, dass man sich in dem ganzen Latexkrams zumindest ein bisschen auskennt ... aber wenn ich Eure eleganten Lösungen sehe, bekomme ich da so meine Zweifel :-)

Sehr cool und tausend Dank auch !

Grüße aus Magdeburg

Poseidonius