Liebe Community,
ich erstelle gerade für meine Dissertation eine Abbildung mit TikZ. Dabei definiere ich zunächst die verschiedenen Teile der Abbildung per TikZ Pic und verwende diese später. Ich habe ein Minimalbeispiel mitgebracht, an dem mein Problem sichtbar wird (siehe Code unten).
In dem Minimalbeispiel gibt es also zwei Blöcke, Data und Process. Beide sollen nun links-bündig ausgerichtet sein. Dazu hatte ich hier im Forum und bei StackExchange gesucht und diverse Tipps erhalten, die ich auch umgesetzt habe. Demnach sollte es ausreichend sein, die beiden Blöcke per anchor=west auszurichten. Wobei es wichtig ist, dass anchor nach left=of bzw. below=of kommt, weil diese den anchor selber setzen.
Trotzdem ergibt sich dieser sichtbare Offset, den ihr in der Abbildung sehen könnt. Warum? Hat dazu jemand eine Idee? Hat es eventuell damit zu tun, dass im Graphen (der obere Block) der ausgehende Pfeil über den Knoten (A) gezeichnet wird? Das sollte natürlich nicht so sein. Nach allen von mir gefundenen Tutorials und dem TikZ/pgf-Handbuch zufolge dürfte dass auch nicht passieren... Vielleicht ist der Offset zum linken Rand ein Folgeproblem davon?
Ich freue mich über jeden Tipp und Hinweis
PS, Bonusfrage: Kann mir jemand erklären, wie ich die beiden Blöcke gleichlang darstellen kann? Also in diesem Beispiel müsste der Data-Block die Länge des Process-Blocks annehmen. Ich würde dies gerne lösen, ohne eine explizite Länge anzugeben. Sprich: Ich möchte die Länge des Process-Blocks auslesen und dem Data-Block zuweisen.
\documentclass{standalone} \usepackage[utf8]{inputenc} \usepackage[T1, OT1]{fontenc} \usepackage{tikz} \usetikzlibrary{arrows} \usetikzlibrary{arrows.meta} \usetikzlibrary{positioning} \usetikzlibrary{graphs} \usetikzlibrary{fit} \begin{document} \begin{tikzpicture} \tikzstyle{border} = [line width=0.6mm, gray, solid]; \tikzstyle{flow} = [line width=0.6mm, cyan, dashed]; \tikzstyle{sublineText} = [text width=2.5cm, align=center]; \tikzstyle{arrow} = [-Stealth, flow]; \tikzstyle{headerText} = [font=\large, align=center, rotate=90]; % Define the data structure block: \tikzset{dataStructure/.pic = { \graph[nodes={draw, circle}] { A[name=A] -> B[name=B]; }; % Draw the border: \node[name=-border, rectangle, draw, border, fit = (A) (B)] {}; }} % Define the process block: \tikzset{process/.pic = { \begin{scope}[node distance=32mm] \node[name=start] {A}; \node[name=startText, sublineText, below=-2mm of start] {{\tiny{subline}}}; \node[name=b, right=of start] {B}; \node[name=bText, sublineText, below=-2mm of b] {{\tiny{subline}}}; \node[name=c, right=of b] {C}; \node[name=cText, sublineText, below=-2mm of c] {{\tiny{subline}}}; \node[name=d, right=of c] {D}; \node[name=dText, sublineText, below=-2mm of d] {{\tiny{subline}}}; \node[name=e, below=10mm of d] {E}; \node[name=eText, sublineText, below=-2mm of e] {{\tiny{subline}}}; \node[name=f, below=10mm of b] {F}; \node[name=fText, sublineText, below=-2mm of f] {{\tiny{subline}}}; \node[name=restart, right=14mm of start] [fill=cyan,circle] {}; \end{scope} % Draw the path (flow): \draw[arrow] (start) -- (b); \draw[arrow] (f.west) to[bend left=40] (restart.south); \draw[flow] (b) -- (c) -- (d) (d.east) to[bend left=90] (e.east) (e) -- (f); % Draw the border: \node[name=-border, rectangle, draw, border, fit = (start) (startText) (eText)] {}; }} % Draw the data structure block: \pic[name=dataStructure, pic type=dataStructure, anchor=west]; \node[name=dataStructureHeader, headerText, left=of dataStructure-border.west, anchor=south] {Data}; % Draw the process block: \pic[name=process, pic type=process, below=of dataStructure-border, anchor=west]; \node[name=processHeader, headerText, left=of process-border.west, anchor=south] {Process}; \end{tikzpicture} \end{document}
PPS / Disclaimer: Ich habe die Frage auch bei TeX StackExchange gestellt.
Liebe Grüße
Thorsten