可能重复:
突出显示矩阵中的元素
\documentclass[12pt,a4paper]{mwrep}
\usepackage{amsmath}
\usepackage[nodisplayskipstretch]{setspace} \setstretch{1.5}
\begin{document}
\begin{equation}
P=
\begin{bmatrix} 0.3 & 0.1 & 0.6 & 0.0 & 0.0 & 0.0 & 0.0 \\
0.2 & 0.1 & 0.7 & 0.7 & 0.0 & 0.0 & 0.0 \\
0.3 & 0.4 & 0.3 & 0.0 & 0.0 & 0.0 & 0.0 \\
0.0 & 0.0 & 0.0 & 0.2 & 0.8 & 0.0 & 0.0 \\
0.0 & 0.0 & 0.0 & 0.3 & 0.7 & 0.0 & 0.0 \\
0.0 & 0.4 & 0.1 & 0.0 & 0.0 & 0.2 & 0.3 \\
0.0 & 0.0 & 0.1 & 0.0 & 0.3 & 0.1 & 0.5
\end{bmatrix}
\end{equation}
\end{document}
这样就生成了好看的矩阵。我需要两个增强功能:
- 矩阵中一些元素周围带有标题的框
- 矩阵上方和左侧的标签(在我的示例中为 1、2、4、3、6、5、7)。
我的想法是在我的矩阵中显示和命名“子矩阵”。如果有更好的方式来显示我想要的内容,你可以更改我的设计。
图片显示了我想要完成的事情:
编辑:
存在问题\usepackage[nodisplayskipstretch]{setspace} \setstretch{1.5}
。当我将其与已接受解决方案中的代码一起使用时,矩阵中的垂直空间太大。
答案1
下面我bmatrix
按照你的 MWE使用了\brodermatrix
\matrix 命令在哪里?,以及我之前的解决方案突出显示矩阵中的元素以达到预期的效果。
由于您在序言中使用\setstretch{1.5}
,这会导致矩阵中的间距过大,您可以在矩阵内进行局部调整,如下所示。由于此调整是在组内完成的,因此此设置不会影响您代码的其余部分。
笔记:
- 这确实需要两次运行:第一次计算框的位置,第二次将其绘制在正确的位置。
- 由于这是使用
tikz
,因此您会自动获得固有的所有灵活性tikz
,例如线条样式、线条粗细、线条颜色、填充等,其中一些在输出中有所说明。这些可以传递给宏的第一个参数\DrawBox
以自定义每个实例,也可以作为默认选项提供以保持一致性。
参考:
- 有关矩阵选项,请参阅\matrix 命令在哪里?。
- 其他选项可用于突出显示矩阵中的元素。
- 有关提取坐标的代码,请参阅提取 TikZ 中任意点的 x,y 坐标
代码:
\documentclass[12pt,a4paper]{mwrep}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[nodisplayskipstretch]{setspace} \setstretch{1.5}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\newcommand{\DrawBox}[4][]{%
\tikz[overlay,remember picture]{%
\coordinate (TopLeft) at ($(#2)+(-0.2em,0.9em)$);
\coordinate (BottomRight) at ($(#3)+(0.2em,-0.3em)$);
%
\path (TopLeft); \pgfgetlastxy{\XCoord}{\IgnoreCoord};
\path (BottomRight); \pgfgetlastxy{\IgnoreCoord}{\YCoord};
\coordinate (LabelPoint) at ($(\XCoord,\YCoord)!0.5!(BottomRight)$);
%
\draw [red,#1] (TopLeft) rectangle (BottomRight);
\node [below, #1, fill=none, fill opacity=1] at (LabelPoint) {#4};
}
}
\begin{document}
\begin{equation}\setstretch{1.25}
P=
\begin{bmatrix}
\tikzmark{left1}0.3 & 0.1 & 0.6 & 0.0 & 0.0 & 0.0 & 0.0 \\
0.2 & 0.1 & 0.7 & 0.7 & 0.0 & 0.0 & 0.0 \\
0.3 & 0.4 & 0.3\tikzmark{right1} & 0.0 & 0.0 & 0.0 & 0.0 \\[12pt]
0.0 & 0.0 & 0.0 & \tikzmark{left2}0.2 & 0.8 & 0.0 & 0.0 \\
0.0 & 0.0 & 0.0 & 0.3 & 0.7\tikzmark{right2} & 0.0 & 0.0 \\[12pt]
0.0 & 0.4 & 0.1 & 0.0 & 0.0 & 0.2 & 0.3 \\
0.0 & 0.0 & 0.1 & 0.0 & 0.3 & 0.1 & 0.5
\end{bmatrix}
\end{equation}
\DrawBox[thick, red ]{left1}{right1}{\textcolor{red}{\footnotesize$s^1$}}
\DrawBox[thick, blue, dashed]{left2}{right2}{\textcolor{blue}{\footnotesize$s^2$}}
%-------------
\[\setstretch{1.2}
\bordermatrix{\text{corner} & c_1 & c_2 & c_3 & c_4 & c_5 & c_6 & c_7\cr
1&\tikzmark{left1} 0.3 & 0.1 & 0.6 & 0.0 & 0.0 & 0.0 & 0.0\cr
2& 0.2 & 0.1 & 0.7 & 0.7 & 0.0 & 0.0 & 0.0\cr
4& 0.3 & 0.4 & 0.3\tikzmark{right1} & 0.0 & 0.0 & 0.0 & 0.0\cr\cr
3& 0.0 & 0.0 & 0.0 & \tikzmark{left2}0.2 & 9.8 & 0.0 & 0.0\cr
6& 0.0 & 0.0 & 0.0 & 0.3 & 0.7\tikzmark{right2} & 0.0 & 0.0\cr\cr
5& 0.0 & 0.4 & 0.1 & 0.0 & 0.3 & 0.2 & 0.3\cr
7& 0.0 & 0.0 & 0.1 & 0.0 & 0.3 & 0.1 & 0.5
}
\]
\DrawBox[thick, red, dotted ]{left1}{right1}{\textcolor{red}{\footnotesize$s^1$}}
\DrawBox[thick, blue,fill=yellow!10, fill opacity=0.3]{left2}{right2}{\textcolor{blue}{\footnotesize$s^2$}}
\end{document}