![如何在乳胶中的矩阵中将一列和一行放在一个框内?](https://linux22.com/image/478486/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B9%B3%E8%83%B6%E4%B8%AD%E7%9A%84%E7%9F%A9%E9%98%B5%E4%B8%AD%E5%B0%86%E4%B8%80%E5%88%97%E5%92%8C%E4%B8%80%E8%A1%8C%E6%94%BE%E5%9C%A8%E4%B8%80%E4%B8%AA%E6%A1%86%E5%86%85%EF%BC%9F.png)
我在 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};}
然后你可以使用\mytikzmark
if \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}
输出并不完全相同。