
Estou tentando encontrar uma solução elegante para fazer várias formas como esta
O melhor que consegui foi desenhar um retângulo dividido, com um estilo como
\tikzset{
entry/.style={
draw,
rectangle split,
rectangle split parts=2,
}
(Tirado deaqui). Mas não consigo descobrir uma maneira elegante de adicionar uma terceira parte além de criar um nó extra sempre e posicioná-lo corretamente. Quero poder criar os nós com um liner como \node [entry] (A) {1001 \nodepart{second} 1010 \nodepart{third} 2};
, mas não tenho certeza de como fazer isso.
Responder1
Bem, se você está aberto a uma ligeira mudança na sintaxe e a alguns hackeamentos, você pode criar nós frankenstein abusando das label
opções pin
e do TikZ append after command
.
O rectangle split
formato já está próximo do que você deseja. Porém, não permite usar um estilo de linha diferente para o separador. Podemos, no entanto, impedir que o separador seja desenhado e fornecer o nosso próprio caminho. Isso é feito usando uma operação de borda no arquivo append after command
.
O retângulo anexado pode ser desenhado usando a label
opção. O posicionamento adequado envolve um deslocamento para que as bordas se sobreponham, o que é feito com a outer xsep
opção. Para permitir referências às âncoras deste novo nó, também damos a ele um nome que é construído a partir do nome do nó principal.
Aqui está um 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}
Uma ressalva é que você não pode usar as âncoras do nó extra enquanto a construção está sendo colocada. Além disso, o conteúdo deste nó é uma opção para o estilo em vez de uma parte real do nó.