Ich habe mir einen morphologischen KJasten gebastelt und würde gerne die Skizzierung des Lösungsweges verändern. Ich möchte statt der Verbindung über captions die Linien von Mittelpunkt des Bildes zum nächsten Mittelpunkt des Bildes verbinden. Darüber hinaus möchte ich einen Verbindungspunkt sehen.

So etwas meine ich alt text

Hier mein aktueller code:

Open in writeLaTeX
\documentclass[paper=a4,DIV21,portait,12pt]{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{longtable}

% zum Zeichnen der Lösungsvarianten
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\newcommand\savepos[1]{\tikz[remember picture]{\node(#1){};}}

% Formatierung Zaehler
\newcounter{ZaehlerZeile}
\newcommand\ZaehlerZeile{\textbf{\stepcounter{ZaehlerZeile}\alph{ZaehlerZeile}}}

\begin{document}
\begin{longtable}{
    m{0.5cm}% Zähler Spalte
    m{3cm}  % Funktion Spalte
    *{5}{c} % restliche Spalten
  }
  \caption{Morphologischer Kasten}
  \label{morphKasten} \\
  \toprule
    & \multirow{2}{*}{\large\textbf{Teilfunktion}} 
    & \multicolumn{5}{c}{\large\textbf{Lösungsvarianten}} \\
    & & 1 & 2 & 3 & 4 & 5 \\
  \midrule
    & &\savepos{a}{Caption} & {Caption} & {Caption} & {Caption} & {Caption} \\
    \ZaehlerZeile
    & \textit{Funktion 1} & 
      \begin{minipage}{2cm}
        \rule{2cm}{2cm} % schwarzes Quadrat als Lückenfüller
      \end{minipage} 
    & 
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage} 
    &
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage}
    & 
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage} 
    &
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage}
    \\
  \midrule
    & &\savepos{b}{Caption} & {Caption} & {Caption} & {Caption} & {Caption} \\
    \ZaehlerZeile
    & \textit{Funktion 2} & 
      \begin{minipage}{2cm}
        \rule{2cm}{2cm} % schwarzes Quadrat als Lückenfüller
      \end{minipage} 
    & 
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage} 
    &
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage}
    & 
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage} 
    &
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage}
    \\
  \midrule
    & & \savepos{c}{Caption} & {Caption} & {Caption} & {Caption} & {Caption} \\
    \ZaehlerZeile
    & \textit{Funktion 3} &
      \begin{minipage}{2cm}
        \rule{2cm}{2cm} % schwarzes Quadrat als Lückenfüller
      \end{minipage} 
    & 
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage} 
    &
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage}
    & 
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage} 
    &
      \begin{minipage}{2cm}
        \rule{2cm}{2cm}
      \end{minipage}
    \\
  \bottomrule
\end{longtable}

% Lösungsvariante 1
\begin{tikzpicture}[remember picture,overlay]
  \draw[color=red, line width = 2]
    ([xshift=7mm]a.south) -- ([xshift=7mm]b.north) ;
  \draw[color=red, thick]
    ([xshift=7mm]b.north) -- ([xshift=35mm]c.north) ;
\end{tikzpicture}

% Lösungsvariante 2
\begin{tikzpicture}[remember picture,overlay]
  \draw[color=blue, line width = 2]
    ([xshift=55mm]a.south) -- ([xshift=55mm]b.north) ;
  \draw[color=blue, line width = 2]
    ([xshift=55mm]b.north) -- ([xshift=100mm]c.north) ;
\end{tikzpicture}

\end{document}

gefragt 26 Okt '14, 18:48

Giovario's gravatar image

Giovario
413132126
Akzeptiert-Rate: 0%

bearbeitet 27 Okt '14, 11:29

cgnieder's gravatar image

cgnieder
22.1k253463

Ohne es ausprobiert zu haben scheint mir, das eine mögliche und wahrscheinlich sogar einfache Variante wäre, eine TikZ-Matrix statt einer Tabelle zu verwenden. Dann ließen sich die einzelnen Zellen, die dann ja Knoten sind, einfach über den center-Anker verbinden. (Ein Problem könnte dann natürlich sein, das Layout an andere Tabellen im Dokument anzupassen...)

(27 Okt '14, 11:19) cgnieder

@Giovario Brauchst Du wirklich longtable? Das Einzeichnen der Verbindungen wird bei einem möglichen automatischen Umbruch innerhalb der Tabelle schwierig.

(27 Okt '14, 12:27) esdd

@esdd

longtable brauch ich nicht nicht unbedingt. Ich frage mich nur wie das ganze dann aussieht wenn ich auf eine weitere seite muss! Wie würdest du das denn ohne longtable realisieren

@clemens

Also mit Matrizen in tikz habe ich bis jetzt nicht viel zu tun gehabt.. Hört sich aber schon interessant an... Wie kann man sowas machen?

(27 Okt '14, 17:26) Giovario

Schöne Aufgabe, kriegt man auch hin! Wenn ich gerade bisschen Zeit hätte, würde ich loslegen - evtl. später, wenn nicht schon jemand schneller ist. Idee: tikzmark-Paket (oder eben TikZ mit overlay und remember picture), Marker mit array-Feature >{...} in die Spalten einfügen und dadurch zum Überzeichnen adressieren. Vllt. geht auch longtable, wäre auszuprobieren, Umbrüche ändern sich ja durch so ein overlay nicht.

(27 Okt '14, 18:22) stefan ♦♦

@Stefan Mir ist nicht klar, wie man bei einem automatischen Seitenumbruch in einer longtable mit den Verbindungslinien ähnlich automatisch von der einen Seite auf die nächste wechseln könnte.

(28 Okt '14, 10:00) esdd


Siehe auch Wie kann ich im morphologischen Kasten die Schriftgröße anpassbar machen?


Hier ist ein Vorschlag, bei dem der Tabelleninhalt als TikZ-Matrix dargestellt wird. Damit die ersten Spalten vertikal zentriert zu den kleinen Bildern sind und die Mittelpunkte der Bilder einfach angesprochen werden können, setze ich die Beschriftungen der Bilder in den Abstand zwischen den Matrixzeilen. Hinterher werden noch die Kopfzeile und die Trennlinien ergänzt.

Da man die Zellen einer TikZ-Matrix automatisch benennen lassen kann, können die Verbindungslinien anschließend mit \foreach Schleifen einfach eingezeichnet werden

Open in writeLaTeX
\documentclass[DIV=21,12pt,captions=tableheading]{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{tikz}
\usetikzlibrary{matrix}

\newcommand\zeilenabstand{\normalbaselineskip}

\newcommand\grafik[2]{%
  \begin{minipage}{2cm}
    \centering\smash{\raisebox{\tabcolsep}{#1}}%
    \includegraphics[width=\linewidth,height=2cm]{#2}%
  \end{minipage}%
}

\tikzset{vp/.style={circle,fill,inner sep=3pt}}
\newcommand\verbindungslinie[3]{
  \foreach [remember=\p as \lastp (initially #2)] \p in {#3}
    \draw[#1](\lastp.center)node[vp]{}--(\p.center)node[vp]{};
}

\usepackage{mwe}% für example-image
\begin{document}
\begin{center}
  \begin{minipage}{\linewidth}
    \captionof{table}{Morphologischer Kasten}\label{morphKasten} 
    \begin{tikzpicture}[
        very thick,
        nodes={inner sep=\tabcolsep}
      ]
      \matrix[
          matrix of nodes,
          inner sep=0pt,
          row sep=\zeilenabstand,
          column 2/.style={minimum width=5cm},
        ](m){
          1&Teilfunktion 1
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}\\
          2&Teilfunktion 2
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}\\
          \ldots&{}
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}\\
          n&Teilfunktion n
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}
            &\grafik{Text}{example-image}\\
          &&{}&{}&{}&{}\\
        };
% Kopfzeile
        \node(ul)[anchor=south west] 
          at ([yshift={\zeilenabstand+\aboverulesep+\belowrulesep}]m.north west)
          {Teilfunktion};
        \node(or)[anchor=south east] at (ul.north-|m-1-2.east){Lösungsvarianten};
        \foreach[count=\i from 3] \c in {1,2,\ldots,m}
          \node[anchor=base] at (or.base-|m-1-\i){\c};
% Tabellenlinien
        \draw[line width=\lightrulewidth](or.north-|ul.west)--(or.east|-ul.south)
          ([yshift=-\aboverulesep]ul.south-|m.west)
            --([yshift=-\aboverulesep]ul.south-|m.east);
        \draw[line width=\heavyrulewidth]([yshift=\belowrulesep]or.north-|m.west)
            --([yshift=\belowrulesep]or.north-|m.east)
          ([yshift={-\aboverulesep-\zeilenabstand}]m.south west)
            --([yshift={-\aboverulesep-\zeilenabstand}]m.south east);
% Verbindungslinien
        \verbindungslinie{red}{m-1-3}{m-2-4,m-3-3,m-4-5,m-5-5}
        \verbindungslinie{blue}{m-1-5}{m-2-3,m-3-3,m-4-3,m-5-3}
        \verbindungslinie{green}{m-1-6}{m-2-6,m-3-4,m-4-6,m-5-6}
        \foreach \f/\p/\t in {red/m-5-5/LV1,blue/m-5-3/LV2,green/m-5-6/LV3}
          \node[\f,below,font=\bfseries]at(\p){\t};
    \end{tikzpicture}
  \end{minipage}
\end{center}
\end{document}

alt text

Die Tabelle kann man natürlich auch in eine Gleitumgebung wie table setzen. Siehe auch Wann sollte ich Gleitumgebungen für Tabellen und Abbildungen verwenden?.

Ist die Tabelle länger als eine Seite, muss man den Seitenumbruch allerdings leider manuell einfügen, in dem man zwei tikzpicture verwendet.

Permanenter link

beantwortet 28 Okt '14, 01:33

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 08 Jan '15, 11:05

Das sieht ja super aus! Den Seitenumbruch manuell einzufügen ist zwar nicht schön aber bringt einen ja auch nicht um... Gibst da keine Idee für?

(29 Okt '14, 19:07) Giovario

Ich würde gerne noch neben der Nummerierung in vertikaler Schrift bestimmte funktionen davor Schreiben. Sie sollen aber nur für bestimmte Zeilen gelten. Jemand eine Idee?

(01 Jan '15, 19:13) Giovario

@Giovario Kannst Du Deine Anschlussfrage als neue Frage posten? Dann wird sie besser gesehen als hier unten. Hier sind Antworten stets "echte" Antworten auf die Frage, keine Folgefragen oder Zusatzinfos, sondern Lösungen. Ungewohnt und anders als in Webforen, doch innovativ und nutzbarer für Archivierung und Nachschlagen von Lösungen. Bemerkungen gern wie hier als Kommentare.

(01 Jan '15, 20:50) stefan ♦♦

Ich bin mir nicht sicher ob das noch jemand liest, aber ich probiere es mal. Kann man die Spaltenbreite manuell festlegen bzw. einen Zeilenumbruch manuelle einfügen?

(20 Mai '15, 10:11) lude

@lude Bitte schau unter dem in der Antwort ganz oben angegebenen Link, ob er Dir weiter hilft. Falls nicht, erstelle eine neue Frage mit eigenem MWE für Dein Problem/Deinen Wunsch und einem Verweis auf diese und/oder die andere Frage.

(20 Mai '15, 10:31) esdd
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×256

gestellte Frage: 26 Okt '14, 18:48

Frage wurde gesehen: 13,516 Mal

zuletzt geändert: 20 Mai '15, 10:31