
У меня есть следующий код, который можно увидеть под изображениями. Вывод, который я имею сейчас, похож на первый рисунок ниже.
Я хочу, чтобы результат был как на изображении ниже с синими и красными стрелками посередине. Мне не удаётся изменить цвета и расположение стрелок.
Код ниже. Может ли кто-нибудь мне помочь?
\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 nodes
I 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