如何在乳胶中的矩阵中将一列和一行放在一个框内?

如何在乳胶中的矩阵中将一列和一行放在一个框内?

我在 latex 中有一个矩阵,我想在第一列周围放置一个框,在第一行周围放置另一个框来突出显示它们。此外,还应该可以为突出显示的字段命名。名称应显示在突出显示的第一行右侧和突出显示的列下方。

\begin{align}
m =
\left( \begin{array}{ccc}
1 & \dots & 3 \\
\vdots & ~ & \vdots \\
4 & \dots & 5 \\
\end{array} \right) 
\end{align}

答案1

这可以通过 tikz 和 tikzmark 库来实现。此库允许将特定命名的节点放在页面的任何位置,您可以在这些点使用 tik 添加图形插图。

以下是一个例子:

\documentclass{article}

\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\begin{document}


\begin{align}
m =
\left( \begin{array}{ccc}
\tikzmarknode{n1}{1} & \dots & \tikzmarknode{n3}{3} \\
\vdots & ~ & \vdots \\
\tikzmarknode{n4}{4}  & \dots & \tikzmarknode{n5}{5}  \\
\end{array} \right) 
\end{align}

\begin{tikzpicture}[remember picture,overlay,
  highlight/.style={draw=blue,rounded corners, thick, 
                    minimum width=1.5em,minimum height=2.5ex},
  note/.style={font=\small,red,text width=3cm},
  ]
  \node[highlight] at ([yshift=1ex]pic cs:n1) {};
  \node[note,left=0.5cm,anchor=east] at (pic cs:n1) 
                      {Element $(1,1)$ of matrix equals 1};
  \draw[highlight] ([yshift=2ex,xshift=1em]pic cs:n3) 
                   rectangle ([yshift=-1ex,xshift=-1em]pic cs:n5)  
                   node [note,midway,right=0.5cm] {This is last column of matrix} ;
\end{tikzpicture}
\end{document}

highight是绘制元素周围方框的样式,也是note注释使用的样式。除此之外,还需要进行一些调整才能正确定位元素。

请注意,需要两次乳胶运行才能获得正确的显示。

在此处输入图片描述

编辑:

Tikzmark 包含在大多数 latex 发行版中,例如 texlive。但是,如果出于某些原因,它不包含在您的发行版中,请在 latex 前言中添加以下命令:

\newcommand{\mytikzmark}[2][]{\tikz[remember picture,baseline=(#1.base),#1] \node (#1) {#2};}

然后你可以使用\mytikzmarkif \tikzmarknode。节点节点名称将只是命令的第一个操作数。

\mytikzmark{n1}{1} & ...
...

\node[highlight] at ([yshift=1ex]n1) {}; % instead of pic cs:n1

tikzmark 的其他功能不再可用,但对于简单标记来说已经足够了。请注意,您可能需要修改样式中的最小节点大小和/或节点移位。

答案2

您可以使用nicematrix它将为您创建 Tikz 节点。然后,使用 Tikz 库在单元格周围绘制框fit

\documentclass{article}
\usepackage{nicematrix,tikz}
\usetikzlibrary{fit}
\begin{document}
\[m =
\begin{pNiceMatrix}[right-margin = 4pt] 
1 & \Ldots & 3 \\
\Vdots & ~ & \Vdots \\
4 & \Ldots & 5 \\
\CodeAfter
  \tikz \node [draw, rounded corners, fit = (1-3) (last-3)] { } ; 
\end{pNiceMatrix}\]
\end{document}

该选项right-margin用于在右括号前添加空格。

上述代码的结果

在的最新版本中nicematrix,也可以使用内置命令\Block(而不必明确使用 Tikz)。

\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\[m =
\begin{pNiceMatrix}[right-margin = 5pt] 
1 & \Ldots & \Block[draw,rounded-corners]{*-1}{}3 \\
\Vdots & ~ & \Vdots \\
4 & \Ldots & 5 \\
\end{pNiceMatrix}\]
\end{document}

输出并不完全相同。

上述代码的输出

相关内容