我是使用 TikZ 包的新手。
有人可以帮我重现这个矩阵吗1使用 Tikz?
更准确地说,图中的步骤2。
我尝试使用矩阵来做到这一点,但我无法将数字 1 [左上方] 放入节点 (m-3-3) = +1
\begin{tikzpicture}
\matrix (m) [matrix of math nodes,
nodes in empty cells,nodes={minimum width=7ex,
minimum height=7ex,outer sep=0pt},
column sep=1ex,row sep=-2ex]{
& t & \mathcal{E} & A & G & C \\
s & & 0 & 1 & 2 & 3 \\
\mathcal{E} & 0 & 0 &-2 &-4 &-6 \\
A & 1 & -2 &+1 &-1 &-3 \\
A & 2 & -4 &-1 & 0 &-2 \\
A & 3 & -6 &-3 &-2 &-1 \\
C & 4 & -8 &-5 &-4 & 1 \\};
\draw[<-] (m-2-1) -- (m-3-1);
\end{tikzpicture}
答案1
您可以将节点放置在矩阵元素之间的路径上
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix,calc}
\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of math nodes,
nodes in empty cells,nodes={outer sep=0pt},
column sep=7ex,row sep=7ex]{
& t & \mathcal{E} & A & G & C \\
s & & 0 & 1 & 2 & 3 \\
\mathcal{E} & 0 & 0 &-2 &-4 &-6 \\
A & 1 & -2 &+1 &-1 &-3 \\
A & 2 & -4 &-1 & 0 &-2 \\
A & 3 & -6 &-3 &-2 &-1 \\
C & 4 & -8 &-5 &-4 & 1 \\};
\draw ([yshift= 1cm]$(m-1-2)!0.5!(m-1-3)$) -- ([yshift=-1cm]$(m-7-2)!0.5!(m-7-3)$)
([xshift=-1cm]$(m-2-1)!0.5!(m-3-1)$) -- ([xshift= 1cm]$(m-2-6)!0.5!(m-3-6)$);
\draw[->,shorten <=3mm] (m-4-4) -- (m-3-3) node[above,pos=.05] {$\scriptstyle 1$};
\end{tikzpicture}
\end{document}
答案2
由于上标似乎附加在节点上而不是边缘上,因此我建议采用与@percusse 不同的解决方案。
首先,由于上标似乎是单元格内容的一部分,因此一种解决方案是将上标放在单元格中,例如{}^{1}-1
。然而,这给上标的放置提供了很小的灵活性。
相反,我们可以在构建矩阵之后添加上标,但是通过使用单元格,inner sep
我们可以添加托管上标所需的填充,然后使用锚点将上标相对于单元格的西北角定位(借用一些 percusse 的代码):
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix,calc}
\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of math nodes,
nodes in empty cells,nodes={outer sep=0pt, inner ysep=2ex},
column sep=7ex,row sep=7ex]{
& t & \mathcal{E} & A & G & C \\
s & & 0 & 1 & 2 & 3 \\
\mathcal{E} & 0 & 0 &-2 &-4 &-6 \\
A & 1 & -2 &+1 &-1 &-3 \\
A & 2 & -4 &-1 & 0 &-2 \\
A & 3 & -6 &-3 &{}^{-1}-2 &-1 \\
C & 4 & -8 &-5 &-4 & 1 \\};
% \draw[<-] (m-2-1) -- (m-3-1);
\draw ([yshift= 1cm]$(m-1-2)!0.5!(m-1-3)$) -- ([yshift=-1cm]$(m-7-2)!0.5!(m-7-3)$)
([xshift=-1cm]$(m-2-1)!0.5!(m-3-1)$) -- ([xshift= 1cm]$(m-2-6)!0.5!(m-3-6)$);
\node[outer sep=2pt,inner sep=0pt, anchor=north west] (m-4-4l) at (m-4-4.north west) {$\scriptstyle 1$};
\draw[->,shorten >=3pt,shorten <=3pt] (m-4-4) -- (m-3-3);
\end{tikzpicture}
\end{document}
通过此设置,outer sep
上标的 控制上标与单元格内边框的距离。inner sep
单元格的 控制上标与单元格内容的距离。
最终结果是