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
41●3●9
Akzeptiert-Rate:
0%
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.
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.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.
@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.
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. :)
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.