
Eu tenho o seguinte código como pode ser visto abaixo das imagens. A saída que tenho agora é como a primeira imagem abaixo.
Quero que a saída seja como na imagem abaixo com setas azuis e vermelhas no meio. Não consigo mudar as cores e o posicionamento das setas.
O código está abaixo. Alguém pode me ajudar?
\begin{tabular}{|r|r|r|r|r|r|}
\hline
V & M & V & M & V & M \\ \hline
6 & 4 & NaN & NaN & NaN & NaN \\ \hline
7 & 3 & 5 & 5 \tikzmark{f} & NaN & NaN \\ \hline
NaN & NaN & 8 & \tikzmark{d}{2} \tikzmark{e} & \tikzmark{c}{4} & \tikzmark{b}{6} \\ \hline
NaN & NaN & NaN & NaN & 10 & \tikzmark{a}{0} \\ \hline
\end{tabular}
\begin{tikzpicture}[overlay, remember picture, shorten >=.5pt, shorten <=.5pt]
\draw [->] ({pic cs:a}) [line width=0.35mm, yshift=-1] to ({pic cs:b});
\draw [->] ({pic cs:c}) [line width=0.35mm, yshift=-1] to ({pic cs:d});
\draw [->] ({pic cs:e}) [line width=0.35mm, yshift=-1] to ({pic cs:f});
\end{tikzpicture}
Responder1
Em vez de usar, \tikzmark
eu usaria a matrix of math nodes
dentro de um tikz \matrix
. Como você desenha suas entradas dentro de um ambiente tabular, mudar para o uso de a matrix of math nodes
simplifica o código.
Darei a saída, o código e depois explicarei como funciona. Primeiro, a saída:
A seguir o código:
\documentclass[border=5mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[>=stealth,->,shorten >=2pt,looseness=.5,auto]
\matrix (M)[matrix of math nodes,row sep=0mm,column sep=0mm,
nodes=draw, minimum size=12mm]{
V & M & V & M & V & M \\
6 & 4 & NaN & NaN & NaN & NaN \\
7 & 3 & 5 & 5 & NaN & NaN \\
NaN & NaN & 8 & 2 & 4 & 6 \\
NaN & NaN & NaN & NaN & 10 & 0 \\
};
\draw[ultra thick,blue,->] (M-5-6.west) -- (M-4-6.west);
\draw[ultra thick,red,->] (M-5-5.north) -- (M-5-4.north);
\draw[ultra thick,blue,->] (M-4-4.west) -- (M-3-4.west);
\draw[ultra thick,red,->] (M-4-3.north) -- (M-4-2.north);
\draw[ultra thick,blue,->] (M-3-2.west) -- (M-2-2.west);
\end{tikzpicture}
\end{document}
Agora a explicação:
O \matrix (M)
comando configura uma matriz com coordenadas especificadas por (M-<row>-<col>)
, onde <row>
e <col>
são os índices de linhas e colunas. Se, em vez disso, você escrevesse, \matrix (mat)
referir-se-ia às coordenadas como (mat-<row>-<col>)
.
Em seguida, você pode usar north
, south
, west
, north west
etc para ajustar a qual parte da célula da matriz a especificação do nó se refere. Por exemplo, (M-4-3.west)
refere-se à borda oeste do nó na linha 4 e coluna 3. Quase tudo deve estar claro agora, espero!
No que matrix of math nodes
eu configurei row sep=0mm,column sep=0mm, nodes=draw, minimum size=12mm
. Isso serve para desenhar sua grade: não há lacunas entre as linhas e as colunas, cada nó deve ter um retângulo desenhado ao seu redor e o tamanho mínimo da célula 12m
foi escolhido de forma a caber no conteúdo das células do OP. Pessoalmente, eu não desenharia a grade (a documentação doguias de livrospackage explica porque você deve evitar linhas verticais em tabelas), mas era o que a pergunta pedia então....
Se você deseja que o layout seja igual ao do seu MWE, com células retangulares em vez de células quadradas no meu código, altere minimum size=12mm
para minimum width=12mm
. Para mostrar como é e para destacar ainda mais as especificações do nó, se você alterar as instruções draw para
\draw[ultra thick,blue,->] (M-5-6.south west) -- (M-4-6.south west);
\draw[ultra thick,red,->] (M-5-5.north east) -- (M-5-4.north west);
\draw[ultra thick,blue,->] (M-4-4.south west) -- (M-3-4.south west);
\draw[ultra thick,red,->] (M-4-3.north east) -- (M-4-2.north west);
\draw[ultra thick,blue,->] (M-3-2.south west) -- (M-2-2.south west);
então com minimum size=12mm
você você consegue
EDITAR(respondendo perguntas nos comentários)
Para sombrear as colunas basta adicionar os seguintes every odd column
estilos every even column
às opções da matriz:
every odd column/.style={nodes={fill=pink}},
every even column/.style={nodes={fill=blue!20!white}},
Com isso instalado, sua imagem se torna:
As linhas "duplas" que você está vendo são, acredito, erros de renderização e provavelmente dependem do navegador e talvez não apareçam durante a impressão (não sei, não verifiquei). Para a foto acima eu os eliminei de uma forma muitoAd hocalterando as separações de linhas e colunas para:
row sep=-0.1mm,column sep=-0.1mm