Im Grunde sind beide Versionen hier total gut und für mich umsetzbar. Ich verstehe nur nicht wieso ich nicht einfach zwei Koordinaten in der Submatrix erstellen kann und diese dann bei der matrix of nodes verwenden kann? Ist das überhaupt möglich, denn ich bekomme es nicht hin. Es sieht so aus, als wäre es irrelevant, wo die Koordinaten in der Submatrix gesetzt sind und stattdessen geschaut wird wo die Koordinaten in der matrix of nodes liegen würden? Warum ist das so und kann man das verhindern? \myfigure erstellt doch erstmal ein tikzpicture. Müsste sich dann die Koordinate nicht auf die Position in der Submatrix beziehen?

Wenn man nur wenige Punkte braucht und die Submatrix über rectangle erstellt hat, wie hier, dann erscheint mir das einfacher als das in zwei Schleifen für jede Zelle zu machen. Ich frage vor Allem deswegen, weil mein Subbild nicht so eine klare Matrix ist, sondern aus mehreren Matrizen besteht und alle mit rectangle und Koordinatenangaben aufgebaut wurden. Kann ich also in \myfigure[1] 2 Koordinaten erstellen, die in der matrix of nodes noch genau an der Stelle definiert sind, wo sie in \myfigure[1] waren ohne die Verwendung von anchor?

\documentclass[tikz]{standalone}
\usetikzlibrary{matrix, arrows.meta, calc}

\begin{document}
\newcommand{\myfigure}[1]{%
    \begin{tikzpicture}[line width=0.4mm]
    \def \lrW {3}       %Number of columns
    \def \lrH {3}       %Number of lines
    \definecolor{data}{HTML}{e3e3e3} % gray color
    \def \height {1.0} %height
    \def \width {1.0} %width

    % building submatrix
    \draw [draw=black, fill=data] 
        (0,0) rectangle +(\lrW*\width,\lrH*\height)
    ;
    \draw [thin, color=gray, xstep=\width cm, ystep=\height cm]
        (0.01,0.01) grid +(\lrW*\width-0.02,\lrH*\height-0.02)
    ;
    %Koordinaten händisch erstellen
    \coordinate (#1-a) at (\width*\lrW, \height*\lrH - \height/2);
    \coordinate (#1-e) at (0, \height*\lrH - \height/2);
    \end{tikzpicture}
}
\begin{tikzpicture}[
    >={Latex[length=3mm]},
    font=\sffamily% für serifenlose Schrift
]
\matrix [
    matrix of nodes, 
    nodes in empty cells, 
    column sep=2cm,
    row sep=1cm,
    row 1/.style={anchor=center},
    row 2/.style={anchor=center},
    row 3/.style={anchor=center}
] (ae) {
    Text & \myfigure{A} & \myfigure{B} & \myfigure{C} & \myfigure{D} & \\
    Text & \myfigure{E} & \myfigure{F} & \myfigure{G} & \myfigure{H} & $\cdots$ \\
    Text & \myfigure{I} & \myfigure{J} & \myfigure{K} & \myfigure{M} & \\
         & Text      & Text      & Text      & Text \\
         & Text      & Text      & Text      & Text \\ 
};
%Pfeilgerade von Submatrix A zu Submatrix F, funktioniert aber nicht
\draw[->] (A-a) -- (F-e);
\draw[->] (E-a) -- (B-e);
\draw[->] (I-a) -- (J-e);
\draw[->] (F-a) -- (K-e);
\draw[->] (J-a) -- (H-e);
\end{tikzpicture}
\end{document}

gefragt 18 Okt '19, 12:38

skybeat's gravatar image

skybeat
4139
Akzeptiert-Rate: 0%

bearbeitet 18 Okt '19, 22:19

Ich verstehe die Frage so, dass es darum geht die Subfiguren möglichst einfach zu erzeugen.

Da bei dem Beispiel alle Pfeile zwischen den Subfiguren rechts außen starten und links außen enden, stört Dich bei der Lösung, dass es auch viele (innere) Koordinaten gibt, die nicht benötigt werden.

(18 Okt '19, 21:04) haver555

Du könntest die Subfiguren als shape=rectangle zeichnen. In der TikZ-Matrix stehen dann Subfiguren-Einträge vom Typ |[shape=rectangle, draw, name=s, ....... ]|, die Du jetzt mit (s.33) oder (s.east) oder ähnlich ansteuern kannst.

Den grid-Hintergrund musst Du nun als genestetes tikzpicture reinschummeln (was man wohl nicht machen soll) oder mit path picture={...} austüfteln.

In allen Fällen wird die Konsistenz des Ganzen, im Hinblick auf varierbare Maße \Rows, \Cols, \width, \height, eine mittelgroße Denkarbeit.

(18 Okt '19, 21:04) haver555

Mein Problem ist, dass ich gerne die Art und Weise wie ich die Submatrizen erstelle beibehalten und wissen möchte wo mein Denkfehler ist, dass ich nicht einfach in jeder Submatrix diese 2 Koordinaten erstellen und sie in der matrix of nodes ansprechen kann.

Anscheinend werden diese Koordinaten nicht in den Submatrizen angelegt, sondern in der matrix of nodes und dort werden für alle A - M Submatrizen die selben zwei Koordinaten gesetzt, weswegen alle Pfeile im Code direkt übereinander liegen.

Warum ist das so? Und geht das, was ich möchte, irgendwie?

Ich hab den Code etwas angepasst.

(18 Okt '19, 22:18) skybeat

@skybeat Ich habe meine AW hier gelöscht und in den Ausgangsthread verschoben: https://texwelt.de/fragen/25578/matrix-of-nodes-pfeile-zwischen-den-nodes/25602

In diese explizite Fragestellung möchte ich mich nicht reindenken. Vermutlich hat es irgendwas mit Vernestung verschiedner tikzpictures zu tun, was man nicht machen soll, weil dann beliebige Positionsfehler auftreten können.

Das Problem ist aber wie gesagt lösbar, auch elegant lösbar (siehe Link); bloß eben nicht Brute-Force in der gewünschten Art und Weise.

(20 Okt '19, 11:45) haver555

Danke dir. Ich glaube ich habe eine gute Lösung gefunden, wenn man nicht nochmal alles umbauen möchte: https://tex.stackexchange.com/questions/319194/connect-coordinates-in-tikzpictures

Aber ich gebe dir Recht, dass mein Ansatz nicht so elegant ist und man es von Anfang an anders machen sollte. :)

(20 Okt '19, 17:14) skybeat
1

Die Frage scheint, soweit ich das sehe, ausdiskutiert und es wird daher wohl keine Antwort mehr darauf zu erwarten sein. Daher möchte ich die Schließung hiermit anregen.

(15 Apr '20, 17:51) WunderPunkt
Ergebnis 5 von 6 show 1 more comments
Deine Antwort auf die Frage: (Bemerkungen bitte oben als Kommentar)
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:

×728
×58

gestellte Frage: 18 Okt '19, 12:38

Frage wurde gesehen: 2,235 Mal

zuletzt geändert: 15 Apr '20, 17:51