tikz na tabela com setas coloridas para a direita e xshift e y shift

tikz na tabela com setas coloridas para a direita e xshift e y shift

Eu tenho o seguinte código como pode ser visto abaixo das imagens. A saída que tenho agora é como a primeira imagem abaixo.

saída atual

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.
saída necessária

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, \tikzmarkeu usaria a matrix of math nodesdentro de um tikz \matrix. Como você desenha suas entradas dentro de um ambiente tabular, mudar para o uso de a matrix of math nodessimplifica o código.

Darei a saída, o código e depois explicarei como funciona. Primeiro, a saída:

insira a descrição da imagem aqui

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 westetc 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 nodeseu 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 12mfoi 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=12mmpara 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=12mmvocê você consegue

insira a descrição da imagem aqui

EDITAR(respondendo perguntas nos comentários)

Para sombrear as colunas basta adicionar os seguintes every odd columnestilos 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:

insira a descrição da imagem aqui

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

informação relacionada