Erstellen Sie einen geteilten Rechteckknoten mit Teilen unterschiedlicher Höhe

Erstellen Sie einen geteilten Rechteckknoten mit Teilen unterschiedlicher Höhe

Ich versuche, eine elegante Lösung zu finden, um eine Reihe von Formen wie diese zu machengeteiltes Rechteck mit angefügtem Knoten

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 labelOptionen pinund von TikZ missbrauchen append after command.

Die rectangle splitForm 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 labelOption gezeichnet werden. Um es richtig zu positionieren, muss es verschoben werden, sodass die Ränder einander überlappen, was mit der outer xsepOption 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}

Ausgabe

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.

verwandte Informationen