Seite 1 von 1
Wie Tabellenspalten bündig u. Pfeilen passend positionieren?
Verfasst: Sa 7. Feb 2015, 15:18
von Tobias85
Hallo zusammen,
ich versuche gerade eine etwas komische Konstruktion mit Latex zu erstellen. Es ist auch fast so wie ich es möchte (siehe Anhang), allerdings habe ich noch zwei Fragen.
Zum einen soll das Ende rechts bei Zelle 3 bündig sein, wie geht das?
Die zweite Frage ist, ob es auch eine schönere Variante gibt die Pfeile von den Kästchen oben mit den Zahlen zu den schwarzen unten zu ziehen - so wird das mit viel Arbeit nur ansatzweise gleichmäßig...
Das Minimalbeispiel:
\documentclass[a4paper,10pt]{article}
\usepackage{geometry}
\usepackage{lmodern}
\usepackage{tikz}
\usepackage{colortbl}
\usepackage{multirow}
\usepackage{bigdelim}
\newcommand{\cellblack}{\cellcolor[RGB]{0,0,0}}
\geometry{left=2cm, right=2cm, top=2.5cm, bottom=2cm}
\linespread {1.25}\selectfont
\begin{document}
\begin{figure}[htdp]\centering
\begin{minipage}[b]{1 \linewidth}\centering
\begin{tabular}{r r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}
& \multicolumn{32}{c}{Fragmente} \\
& \multicolumn{32}{c}{ $\overbrace{\hspace{13cm}}$} \\\cline{2-32}
& \multicolumn{10}{|c|}{1} & \multicolumn{7}{|c|}{2} & \multicolumn{15}{|c|}{3} \\\cline{2-32}
& \multicolumn{32}{c}{} \\
& \multicolumn{32}{c}{} \\\cline{2-32}
\ldelim\{{1}{1.7cm}[ Filter ] & \cellblack & & & & & & \cellblack & & & & & & & & & \cellblack & & & & & & & & & & \cellblack& & & & & \\\cline{2-32}
\end{tabular}
\end{minipage}
\begin{tikzpicture}[overlay]
\draw[color=black,->] (-4,1.6) -- +(-1.2, -1);
\end{tikzpicture}
\end{figure}
\end{document}
Vielen Dank im Voraus, Tobias
Möglicher Ansatz
Verfasst: Sa 7. Feb 2015, 16:32
von Stamm-
Eine Tabelle ist in diesem Falls nicht wirklich gut geeignet. Da es sich prinzipiell um eine Zeichnung handelt, sind Pakete wie
PGF/TikZ oder
PSTricks besser ausgerüstet. In solchen Zeichnungen kann man dann auch mit Koordinaten arbeiten. Somit ist die Ausrichtung von Elementen wie Pfeilen etwas leichter.
\documentclass[10pt,a4paper,ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{selinput} % Ersatz für »inputenc«
\SelectInputMappings{ % Festlegung der Eingabe-Kodierung
adieresis={ä}, % mit Hilfe ausgewählter Sonderzeichen
germandbls={ß} % siehe: http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt
}
\usepackage{babel}
\usepackage[margin=2cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\usepackage{lmodern}
\usepackage{microtype}
\begin{document}
\begin{figure}[!htb]
\centering
\begin{tikzpicture}[>=stealth,decoration=brace]
\draw (0,0) rectangle (15.5,0.75);
\foreach \x in {0.5,1,...,15}
\draw (\x,0) -- (\x,0.75);
\draw[decorate,thick] (-0.2,0) -- (-0.2,0.75) node[left=2pt,midway] {Filter};
\draw (0,3) rectangle (15.5,3.75);
\foreach \x in {4.5,8}
\draw (\x,3) -- (\x,3.75);
\draw[decorate,thick] (0,4) -- (15.5,4) node[above=2pt,midway] {Fragmente};
\node at (2.25,3.375) {1};
\node at (6.25,3.375) {2};
\node at (11.75,3.375) {3};
\fill (0,0) rectangle (0.5,0.75);
\fill (2.5,0) rectangle (3,0.75);
\fill (7,0) rectangle (7.5,0.75);
\fill (12.5,0) rectangle (13,0.75);
\draw[->] (2.25,3) -- (0.25,0.75);
\draw[->] (2.25,3) -- (2.75,0.75);
\draw[->] (6.25,3) -- (7.25,0.75);
\draw[->] (12.25,3) -- (12.75,0.75);
\end{tikzpicture}
\caption{Diagramm mit \texttt{Ti\textit{k}Z}}
\label{fig:tikz-diagram}
\end{figure}
\end{document}
Es gibt wahrscheinlich noch geschicktere Methoden, dieses Diagramm darzustellen. Der präsentierte Code ist mir relativ schnell durch den Kopf gegangen und bildet immerhin einen Startpunkt.
Verfasst: Sa 7. Feb 2015, 17:02
von esdd
Prinzipiell würde ich das ganze, wie schon von Stamm- vorgeschlagen,auch als Zeichnung mit TikZ erstellen.
Aber trotzdem noch zu der Tabelle: Du hast Dich bei den Spalten verzählt. Für die Tabelle brauchst Du nur 1+31=32 davon:
\documentclass[a4paper,10pt]{article}
\usepackage{geometry}
\usepackage{lmodern}
\usepackage{tikz}
\usepackage{colortbl}
\usepackage{multirow}
\usepackage{bigdelim}
\newcommand{\cellblack}{\cellcolor[RGB]{0,0,0}}
\geometry{left=2cm, right=2cm, top=2.5cm, bottom=2cm}
\linespread {1.25}\selectfont
\begin{document}
\begin{figure}[htdp]\centering
\begin{minipage}[b]{1 \linewidth}\centering
\begin{tabular}{r *{31}{r|}@{}}
& \multicolumn{31}{c}{Fragmente} \\
& \multicolumn{31}{c}{ $\overbrace{\hspace{13cm}}$} \\\cline{2-32}
& \multicolumn{10}{|c|}{1} & \multicolumn{7}{c|}{2} & \multicolumn{14}{c|@{}}{3} \\\cline{2-32}
& \multicolumn{31}{c}{} \\
& \multicolumn{31}{c}{} \\\cline{2-32}
\ldelim\{{1}{1.7cm}[ Filter ] & \cellblack & & & & & & \cellblack & & & & & & & & & \cellblack & & & & & & & & & & \cellblack& & & & &\\\cline{2-32}
\end{tabular}
\end{minipage}
\begin{tikzpicture}[overlay]
\draw[color=black,->] (-4,1.6) -- +(-1.2, -1);
\end{tikzpicture}
\end{figure}
\end{document}
Gruß
Elke
Verfasst: Sa 7. Feb 2015, 17:54
von Tobias85
Sehr gut, genau so habe ich mir das vorgestellt. Vielen Dank für die schnelle Hilfe!
Verfasst: Sa 7. Feb 2015, 17:58
von esdd
Hier ist mal trotzdem noch ein Vorschlag mit der TikZ-Bibliothek matrix:
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}[
>=stealth,decoration=brace,
mynode/.style={
matrix of nodes,
column sep=-\pgflinewidth,
nodes={draw,minimum width=\breite,minimum height=\hoehe},}
]
\newcommand\hoehe{.75cm}
\newcommand\breite{.5cm}
% unteres Feld
\matrix[mynode,nodes in empty cells,cellblack/.style={fill=black}](m){
|[cellblack]|&&&&&
|[cellblack]|&&&&&
&&&&|[cellblack]|&
&&&&&
&&&&&
|[cellblack]|&&&&&
\\};
%
%% als Hilfe: Anzeigen der Nummern
%\foreach \i in {1,...,31}\node[below,font=\tiny]at(m-1-\i.south){\i};
%
% oberes Feld
\matrix[mynode](n)at(0,3){
|[minimum width={9*\breite}]|1&
|[minimum width={5*\breite}]|2&
|[minimum width={17*\breite}]|3\\};
% Klammern mit Beschriftung
\draw[decorate,thick]([xshift=-2mm]m-1-1.south west)
--([xshift=-2mm]m-1-1.north west)node[left=2pt,midway] {Filter};
\draw[decorate,thick] ([yshift=2mm]n-1-1.north west)
--([yshift=2mm]n-1-3.north east)node[above=2pt,midway] {Fragmente};
% Pfeile
\foreach \s/\e in {1/1,1/6,2/15,3/26}
\draw[->](n-1-\s.south)--(m-1-\e.north);
\end{tikzpicture}
\end{document}
Gruß
Elke
oder mit angezeigten Zellennummern zur besseren Orientierung

Verfasst: So 8. Feb 2015, 13:08
von Tobias85
@ esdd: So ähnlich siehts nun bei mir aus, danke
