tikz в таблице с цветными стрелками вправо и сдвигом по оси x и y

tikz в таблице с цветными стрелками вправо и сдвигом по оси x и y

У меня есть следующий код, который можно увидеть под изображениями. Вывод, который я имею сейчас, похож на первый рисунок ниже.

выходной ток

Я хочу, чтобы результат был как на изображении ниже с синими и красными стрелками посередине. Мне не удаётся изменить цвета и расположение стрелок.
требуемый вывод

Код ниже. Может ли кто-нибудь мне помочь?

\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}

решение1

Вместо использования \tikzmarkя бы использовал matrix of math nodesвнутри tikz \matrix. Поскольку вы рисуете свои записи внутри табличной среды, изменение на использование matrix of math nodesна самом деле упрощает код.

Я дам вывод, код и затем объясню, как это работает. Сначала вывод:

введите описание изображения здесь

Далее код:

\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}

Теперь объяснение:

Команда \matrix (M)устанавливает матрицу с координатами, указанными как (M-<row>-<col>), где <row>и <col>являются индексами строк и столбцов. Если бы вы вместо этого написали \matrix (mat), то вы бы ссылались на координаты как (mat-<row>-<col>).

Далее вы можете использовать north, south, west, north westи т. д., чтобы настроить, к какой части ячейки матрицы относится спецификация узла. Например, (M-4-3.west)относится к западному краю узла в строке 4 и столбце 3. Надеюсь, теперь почти все должно быть понятно!

В matrix of math nodesI have set row sep=0mm,column sep=0mm, nodes=draw, minimum size=12mm. Это для рисования сетки: нет пробелов между строками и столбцами, каждый узел должен иметь прямоугольник, нарисованный вокруг него, и минимальный размер ячейки 12mбыл выбран таким образом, чтобы вместить содержимое ячеек OP. Лично я бы не рисовал сетку (документациязакладки(пакет объясняет, почему следует избегать вертикальных линий в таблицах), но это было то, о чем спрашивалось в вопросе, так что...

Если вы хотите, чтобы макет был таким же, как в вашем MWE, с прямоугольными ячейками, а не квадратными, как в моем коде, то измените на minimum size=12mm. minimum width=12mmЧтобы показать, как это выглядит, и еще больше выделить спецификации узлов, если вы измените операторы draw на

    \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);

тогда с minimum size=12mmтобой получишь

введите описание изображения здесь

РЕДАКТИРОВАТЬ(отвечаю на вопросы в комментариях)

Для затенения столбцов достаточно добавить в параметры матрицы следующие параметры every odd columnи стили:every even column

every odd column/.style={nodes={fill=pink}},
every even column/.style={nodes={fill=blue!20!white}},

После установки всего этого ваша картина станет такой:

введите описание изображения здесь

"Двойные" линии, которые вы видите, я полагаю, являются ошибками рендеринга и, вероятно, зависят от браузера, и они, возможно, не появляются при печати (я не знаю, я не проверял). Для изображения выше я устранил их оченьдля этого случаяпутем изменения разделения строк и столбцов на:

row sep=-0.1mm,column sep=-0.1mm

Связанный контент