
Ich versuche, eine elegante Lösung zu finden, um eine Reihe von Formen wie diese zu machen
Das Beste, was mir eingefallen ist, ist das Zeichnen eines geteilten Rechtecks mit einem Stil wie
\tikzset{
entry/.style={
draw,
rectangle split,
rectangle split parts=2,
}
(genommen vonHier). Aber ich kann mir keine elegantere Möglichkeit vorstellen, einen dritten Teil hinzuzufügen, als jedes Mal einen zusätzlichen Knoten zu erstellen und ihn richtig zu positionieren. Ich möchte die Knoten mit einem Einzeiler wie erstellen können \node [entry] (A) {1001 \nodepart{second} 1010 \nodepart{third} 2};
, bin mir aber nicht sicher, wie ich das anstellen soll.
Antwort1
Nun, wenn Sie für eine kleine Änderung der Syntax und ein wenig Hackerarbeit offen sind, können Sie Frankenstein-Knoten erstellen, indem Sie die label
Optionen pin
und von TikZ missbrauchen append after command
.
Die rectangle split
Form ist schon fast wie gewünscht. Allerdings ist es nicht möglich, einen anderen Linienstil für den Trenner zu verwenden. Wir können jedoch verhindern, dass der Trenner überhaupt gezeichnet wird, und unseren eigenen Pfad angeben. Dies geschieht mithilfe einer Kantenoperation im append after command
.
Das angehängte Rechteck kann mit der label
Option gezeichnet werden. Um es richtig zu positionieren, muss es verschoben werden, sodass die Ränder einander überlappen, was mit der outer xsep
Option erreicht wird. Um Verweise auf die Anker dieses neuen Knotens zu ermöglichen, geben wir ihm außerdem einen Namen, der sich aus dem Namen des Hauptknotens zusammensetzt.
Hier ist ein MWE:
\documentclass[border=1mm,tikz]{standalone}
\usetikzlibrary{shapes.multipart}
\tikzset{entry/.style={
% appearance settings for the main node
draw,
rectangle split,
rectangle split parts=2,
rectangle split draw splits=false,
% draw the small attached node
label={[name=label of \tikzlastnode,anchor=north west,draw,outer xsep=-.5\pgflinewidth]north east:#1},
% draw the split using a dashed line
append after command={(\tikzlastnode.text split west) edge[draw,dashed] (\tikzlastnode.text split east)},
}}
\begin{document}
\begin{tikzpicture}
\node[entry=2] (myentry) at (0,0) {1001 \nodepart{second} 1010};
% examples of how we can refer to coordinates of this monster
\node[coordinate,pin=4:a] at (label of myentry.south east) {};
\node[coordinate,pin=4:b] at (myentry.south east) {};
\end{tikzpicture}
\end{document}
Eine Einschränkung besteht darin, dass Sie die Anker des zusätzlichen Knotens nicht verwenden können, während die Konstruktion platziert wird. Außerdem ist der Inhalt dieses Knotens eine Option für den Stil und kein echter Knotenteil.