
Tengo el siguiente código como se puede ver debajo de las imágenes. El resultado que tengo ahora es como la primera imagen a continuación.
Quiero que el resultado sea como en la imagen de abajo con flechas azules y rojas en el medio. Parece que no puedo cambiar los colores y la ubicación de las flechas.
El código está debajo. ¿Puede alguien ayudarme?
\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}
Respuesta1
En lugar de usar, \tikzmark
usaría un matrix of math nodes
interior de tikz \matrix
. A medida que dibuja sus entradas dentro de un entorno tabular, cambiar al uso de a matrix of math nodes
en realidad simplifica el código.
Daré el resultado, el código y luego explicaré cómo funciona. Primero, la salida:
A continuación el 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}
Ahora la explicación:
El \matrix (M)
comando configura una matriz con coordenadas especificadas por (M-<row>-<col>)
, donde <row>
y <col>
son los índices de filas y columnas. Si en lugar de eso escribieras \matrix (mat)
entonces te referirías a las coordenadas como (mat-<row>-<col>)
.
A continuación, puede utilizar north
, south
, west
, north west
etc. para ajustar a qué parte de la celda de la matriz se refiere la especificación del nodo. Por ejemplo, (M-4-3.west)
se refiere al borde occidental del nodo en la fila 4 y la columna 3. ¡Casi todo debería quedar claro ahora, espero!
En el que matrix of math nodes
he puesto row sep=0mm,column sep=0mm, nodes=draw, minimum size=12mm
. Esto es para dibujar su cuadrícula: no hay espacios entre las filas y las columnas, cada nodo debe tener un rectángulo dibujado alrededor y el tamaño mínimo de celda 12m
se eligió para que se ajuste al contenido de las celdas del OP. Personalmente, no dibujaría la cuadrícula (la documentación delpestañasEl paquete explica por qué se deben evitar las líneas verticales en las tablas), pero era lo que pedía la pregunta...
Si desea que el diseño sea el mismo que en su MWE, con celdas rectangulares en lugar de celdas cuadradas en mi código, cambie minimum size=12mm
a minimum width=12mm
. Para mostrar cómo se ve esto y resaltar aún más las especificaciones del nodo, si cambia las declaraciones de dibujo a
\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);
entonces contigo minimum size=12mm
obtienes
EDITAR(respondiendo preguntas en los comentarios)
Para sombrear las columnas basta con agregar lo siguiente every odd column
y every even column
estilos a las opciones de la matriz:
every odd column/.style={nodes={fill=pink}},
every even column/.style={nodes={fill=blue!20!white}},
Con esto en su lugar, su imagen se convierte en:
Creo que las líneas "dobles" que está viendo son errores de representación y probablemente dependen del navegador y tal vez no aparezcan al imprimir (no lo sé, no lo he comprobado). Para la imagen de arriba los eliminé de una manera muyad hocmanera cambiando las separaciones de filas y columnas a:
row sep=-0.1mm,column sep=-0.1mm