Wie Tabellenspalten bündig u. Pfeilen passend positionieren?

Tabellen und Grafiken erstellen und anordnen


Tobias85
Forum-Anfänger
Forum-Anfänger
Beiträge: 12
Registriert: So 1. Jan 2012, 23:39

Wie Tabellenspalten bündig u. Pfeilen passend positionieren?

Beitrag 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
Dateianhänge
Aktueller Stand
Aktueller Stand
Bildschirmfoto 2015-02-07 um 15.15.25.png (10.26 KiB) 1709 mal betrachtet

Stamm-

Möglicher Ansatz

Beitrag 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.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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}
Bild

Gruß
Elke
Dateianhänge
gl_tabz.png
gl_tabz.png (3.78 KiB) 1693 mal betrachtet

Tobias85
Forum-Anfänger
Forum-Anfänger
Beiträge: 12
Registriert: So 1. Jan 2012, 23:39

Beitrag von Tobias85 »

Sehr gut, genau so habe ich mir das vorgestellt. Vielen Dank für die schnelle Hilfe!

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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

Bild

oder mit angezeigten Zellennummern zur besseren Orientierung

Bild
Dateianhänge
gl_tabz2.png
gl_tabz2.png (7.54 KiB) 1709 mal betrachtet
gl_tabz1.png
gl_tabz1.png (6.15 KiB) 1701 mal betrachtet

Tobias85
Forum-Anfänger
Forum-Anfänger
Beiträge: 12
Registriert: So 1. Jan 2012, 23:39

Beitrag von Tobias85 »

@ esdd: So ähnlich siehts nun bei mir aus, danke :)

Antworten