Quero desenhar uma figura "complicada", como mostrado abaixo.
O que precisa ser feito:
- Aumente
\hdashline
para caber na largura do furo (desenhado em vermelho) - Remova a linha tracejada (
:
) da primeira linha (feita à mão)
MWE:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart}
\usepackage{amsmath}
\usepackage{arydshln}
\begin{document}
\begin{tikzpicture}
\node[rectangle split,rectangle split parts=2, draw, inner sep=+0pt] {
$\begin{array}{l|l|l}
n & loooooooooooooong & m\\
\end{array}$
\nodepart{two}
$\begin{array}{l@{{}={}}l:l@{{}={}}l}
a & 0 & b & 0\\
\hdashline
c & 0 & d & 0\\
\end{array}$};
\end{tikzpicture}
\end{document}
Atualizar:
Isso também deve funcionar se o segundo array contiver mais de duas linhas (por exemplo, 3 ou 4)
O que precisa ser feito:
- Remova a linha tracejada (
:
) da primeira linha (retângulo verde na figura superior) - De alguma forma,
\draw[dashed,green]
e\hline
não têm exatamente a mesma coordenada y - De alguma forma, os ajudantes adicionam espaços em branco
- Substitua a largura da linha codificada
Código:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart,calc}
\usepackage{amsmath}
\usepackage{arydshln}
\begin{document}
\begin{tikzpicture}
\node (n) [rectangle split,rectangle split parts=2, draw, inner sep=+0pt] {
$\begin{array}{l|l|l}
n & loooooooooooooong & m\\
\end{array}$
\nodepart{two}
$\begin{array}{l@{{}={}}l:l@{{}={}}l}
a & 0 & b & 0\\
\hline %only for position control
c & 0 & d & 0\\
c & 0 & d & 0\\
c & 0 & d & 0\\
\end{array}$};
%helper
\node[inner sep=0] (two north west) at ($(n.text split west)-(0,0.2pt)$) {}; %hardcoded
\node[inner sep=0] (two south west) at ($(n.south west)+(0,0.4pt)$) {}; %hardcoded
\node[inner sep=0] (two north east) at ($(n.text split east)-(0,0.2pt)$) {}; %hardcoded
\node[inner sep=0] (two south east) at ($(n.south east)+(0,0.4pt)$) {}; %hardcoded
\draw[dashed,green] ($(two south west)!0.75!(two north west)$) -- ($(two south east)!0.75!(two north east)$);
\end{tikzpicture}
\end{document}
Eu uso os ajudantes, porque a!0.75!b+c
parece ser interpretado como (a!0.75!b)+c
e não estou conseguindo fazer algo comoa!0.75!(b+c)
Responder1
assim:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart}
\usepackage{amsmath}
\usepackage{arydshln}
\begin{document}
\begin{tikzpicture}
\node (n) [rectangle split,rectangle split parts=2, draw,
inner ysep=0pt] {
$ \begin{array}{ c|c|c }
n & loooooooooooooong & m\\
\end{array}$
\nodepart{two}
$ \begin{array}{ r:l }
a = 0 & b = 0\\
c = 0 & d = 0\\
\end{array}$
};
\draw[dashed] (n.two west) -- (n.two east); % <-- horizontal dashed line
\end{tikzpicture}
\end{document}
termo aditivo:
ainda não tenho certeza de como sua mesa deve ficar. agora, depois de editar sua pergunta, suponho que sua tabela na segunda parte do nó pode ter qualquer número de linhas e você gostaria de ter equações alinhadas em linhas no sinal =
. por exemplo assim:
neste caso, minha primeira sugestão não dá o resultado desejado. nele você precisa fazer as seguintes alterações:
- use
tabularx
o ambiente em vez dissoarray
- para alinhamento de equações no sinal˙=
the
tabularx` precisa de quatro colunas definir largura do nó
\documentclass{standalone} \usepackage{tikz} \usetikzlibrary{shapes.multipart} \usepackage{tabularx} \usepackage{arydshln} \newlength\tabwidth % for defining node width \begin{document} \begin{tikzpicture} \settowidth\tabwidth{$\begin{array}{l|l|l} % calculating node width n & loooooooooooooong & m\\ \end{array}$} \node (n) [rectangle split,rectangle split parts=2, draw, inner sep=0pt] { $\begin{array}{l|l|l} n & loooooooooooooong & m\\ \end{array}$ \nodepart{two} \begin{tabularx}{\tabwidth}{@{} % table width is equal to node width >{\raggedleft\arraybackslash $}X<{$}@{$\,=\,$} >{\raggedright\arraybackslash$}X<{$}: >{\raggedleft\arraybackslash $}X<{$}@{$\,=\,$} >{\raggedright\arraybackslash$}X<{$} @{}} a & 0 & b & 1234\\ \hdashline abc & 0 & d & 0\\ \hdashline abcd & 0 & d & 0\\ \hdashline c & 0 & d & 0\\ \end{tabularx} }; \end{tikzpicture} \end{document}
Responder2
Isto é mais um comentário, mas é muito longo para um comentário. Pode-se desenhar as linhas sem distâncias codificadas.
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart,calc}
\usepackage{amsmath}
\usepackage{arydshln}
\begin{document}
\begin{tikzpicture}
\node (n) [rectangle split,rectangle split parts=2, draw, inner sep=+0pt] {
$\begin{array}{l|l|l}
n & loooooooooooooong & m\\
\end{array}$
\nodepart{two}
$\begin{array}{l@{{}={}}l:l@{{}={}}l}
a & 0 & b & 0\\
\hline %only for position control
c & 0 & d & 0\\
c & 0 & d & 0\\
c & 0 & d & 0\\
\end{array}$};
\pgfmathtruncatemacro{\NumRows}{4}
\foreach \X in {1,...,\numexpr\NumRows-1} % \numexpr trick from https://tex.stackexchange.com/a/477077/121799
{\coordinate (aux-\X) at ($(n.text split)!\X/\NumRows!(n.south)$);
\draw [blue,dashed] (aux-\X-|n.west) -- (aux-\X-|n.east);
}
\end{tikzpicture}
\end{document}