我有以下代码,如下图所示。我现在得到的输出就像下面的第一张图片一样。
我希望输出如下图所示,中间有蓝色和红色箭头。我似乎无法更改箭头的颜色和位置。
代码如下。有人能帮帮我吗?
\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
我已经设置了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