我研究了突出显示矩阵中的元素并给出了我的例子:
代码如下:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (m)[matrix of math nodes,nodes in empty cells, ]
{
0 & -26 & 111 & 5 & -1 & 2 \\
2666 & 67 & 55 & 77 & 6 & -1 \\
-1 & 3 & 3 & 3 & 3 & 8 \\
1 & 2 & 5 & 77 & 7 & 1 \\
1 & 33 & 44 & 66 & 998888 & -266 \\
-2 & 1 & 7 & -1 & 2 & 80 \\
} ;
\draw (m-1-1.north west) -- (m-2-1.south west) -- (m-2-2.south east) -- (m-1-2.north east) -- cycle;
\end{tikzpicture}
\end{document}
我不喜欢的是盒子是歪的。
我不喜欢的另一个功能是列宽不相等——包含 998888 的列的宽度较大。
有可能控制这些方面吗?
我想坚持使用 tikz,因为它有一个很吸引人的功能——能够在多列/行上画一条虚线(上面的例子中没有提到)。
答案1
通过指定对角,可以轻松绘制示例中的矩形:
\draw (m-2-1.south west) rectangle (m-1-2.north east);
一般情况由 Ignasi 的回答。
可以为节点设置最大条目的最小宽度:
minimum width=width("998888")
完整示例:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (m)[
matrix of math nodes,
nodes in empty cells,
minimum width=width("998888"),
] {
0 & -26 & 111 & 5 & -1 & 2 \\
2666 & 67 & 55 & 77 & 6 & -1 \\
-1 & 3 & 3 & 3 & 3 & 8 \\
1 & 2 & 5 & 77 & 7 & 1 \\
1 & 33 & 44 & 66 & 998888 & -266 \\
-2 & 1 & 7 & -1 & 2 & 80 \\
} ;
\draw (m-2-1.south west) rectangle (m-1-2.north east);
\end{tikzpicture}
\end{document}
答案2
重要的是要理解,aTikZ-matrix
仅对齐内部节点,但不会改变节点的大小。如果您了解draw
所有节点,则很容易理解:
如你所见,每个节点都有自己的大小,将它们放入一个matrix
仅分布在行和列中的节点中。因此命令
\draw (m-1-1.north west) -- (m-2-1.south west) -- (m-2-2.south east)
-- (m-1-2.north east) -- cycle;
将产生一个倾斜的矩形。
如果您不想修改代码,最简单的解决方案可能是:
\draw (m-1-1.north-|m-1-2.west) rectangle (m-2-1.east|-m-2-2.south);
您还可以强制所有节点具有相同的宽度,并使用类似的选项text width={width(998888)}
,align=right
并且所有节点将在每一列中垂直对齐到右侧。
nodes={text width={width(998888)}, align=right}
您可以使用此选项draw (m-1-1.north west) rectangle (m-2-2.south east)
来定义所需的区域。
完整代码为:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (m)[matrix of math nodes, nodes in empty cells, nodes={text width={width(998888)}, align=right} ]
{
0 & -26 & 111 & 5 & -1 & 2 \\
2666 & 67 & 55 & 77 & 6 & -1 \\
-1 & 3 & 3 & 3 & 3 & 8 \\
1 & 2 & 5 & 77 & 7 & 1 \\
1 & 33 & 44 & 66 & 998888 & -266 \\
-2 & 1 & 7 & -1 & 2 & 80 \\
} ;
\draw (m-1-1.north-|m-2-1.west) rectangle (m-2-2.east|-m-2-2.south);
\end{tikzpicture}
\end{document}
结果如下:
答案3
使用 相当简单:使用一个封闭在环境中的pstricks
普通节点,将两个空节点 A 和 B 放在相关位置,然后使用带有方便大小参数的命令将它们连接起来。第二种解决方案(更像是一种自动解决方案)是绘制一个连接两个对角相对节点的节点:bmatrix
postscript
\ncbox
\psframe
\documentclass[12pt, svgnames]{article}
\usepackage{mathtools, nccmath}
\usepackage{pst-node}
\usepackage{auto-pst-pdf}
\begin{document}
\begin{equation*}
\begin{postscript}
\begin{bmatrix}
0 & -26\pnode{C} & 111 & 5 & -1 & 2 \\
\:\pnode[-0.05,0]{A} 2666 & 67\pnode[0.25, 0]{B} & 55 & 77 & 6 & -1 \\
-1 & 3 & 3 & 3 & 3 & 8 \\
1 & 2 & 5 & 77 & 7 & 1 \\
1 & 33 & 44 & 66 & \medmath{998888} & -266 \\
-2 & 1 & 7 & -1 & 2 & 80
\end{bmatrix}
\ncbox[boxheight=0.85, boxdepth=0.1, linecolor=IndianRed]{A}{B}
\end{postscript}
\end{equation*}
\smallskip
\begin{equation*}
\psset{linearc =0.2,linejoin=1}
\begin{postscript}
\begin{bmatrix}
0 &-26\: \pnode[0,0.35]{C} & 111 & 5 & -1 & 2 \\
\,\pnode[0,-0.1]{A}\:2666 & 67 & 55 & 77 & 6 & -1 \\
-1 & 3 & 3 & 3 & 3 & 8 \\
1 & 2 & 5 & 77 & 7 & 1 \\
1 & 33 & 44 & 66 & \medmath{998888} & -266 \\
-2 & 1 & 7 & -1 & 2 & 80
\end{bmatrix}
\psframe[linecolor=IndianRed](A)(C)
\end{postscript}
\end{equation*}
\end{document}
答案4
使用,就像 Tikz 库一样,{bNiceMatrix}
在每个矩阵下创建一个 PGF/Tikz 节点(如果您需要它们......)。nicematrix
matrix
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
$\begin{bNiceMatrix}[r,left-margin=0.6em]
\Block[draw]{2-3}{}
0 & -26 & 111 & 5 & -1 & 2 \\
2666 & 67 & 55 & 77 & 6 & -1 \\
-1 & 3 & 3 & 3 & 3 & 8 \\
1 & 2 & 5 & 77 & 7 & 1 \\
1 & 33 & 44 & 66 & 998888 & -266 \\
-2 & 1 & 7 & -1 & 2 & 80 \\
\end{bNiceMatrix}$
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。