在矩阵元素周围画一个框

在矩阵元素周围画一个框

我研究了突出显示矩阵中的元素并给出了我的例子:

在此处输入图片描述

代码如下:

 \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 放在相关位置,然后使用带有方便大小参数的命令将它们连接起来。第二种解决方案(更像是一种自动解决方案)是绘制一个连接两个对角相对节点的节点:bmatrixpostscript\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 节点(如果您需要它们......)。nicematrixmatrix

\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 节点)。

上述代码的输出

相关内容