\documentclass{mwrep}
\usepackage{kbordermatrix}
\usepackage{amsmath}
\begin{document}
\begin{equation}
\bar{P}=
\kbordermatrix{ \mathrm{state} & 1 & 2 & 4 & 3 & 6 & 5 & 7 \\
1 & 0.3 & 0.1 & 0.6 & 0.0 & 0.0 & 0.0 & 0.0 \\
2 & 0.2 & 0.1 & 0.7 & 0.0 & 0.0 & 0.0 & 0.0 \\
4 & 0.3 & 0.4 & 0.3 & 0.0 & 0.0 & 0.0 & 0.0 \\
3 & 0.0 & 0.0 & 0.0 & 0.2 & 0.8 & 0.0 & 0.0 \\
6 & 0.0 & 0.0 & 0.0 & 0.3 & 0.7 & 0.0 & 0.0 \\
5 & 0.0 & 0.4 & 0.1 & 0.0 & 0.0 & 0.2 & 0.3 \\
7 & 0.0 & 0.0 & 0.1 & 0.0 & 0.3 & 0.1 & 0.5}
\end{equation}
\end{document}
这将生成一个漂亮的矩阵:
如何在列描述上方添加剪辑,如下图所示?
答案1
如果你准备使用 TikZ,你可以看看这个问题 两级矩阵
或者你可以看看下面的代码:
\documentclass{mwrep}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand{\tikzmark}[2]{\tikz[overlay,remember picture,baseline] \node [anchor=base] (#1) {$#2$};}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{equation}
\bar{P}=
\bordermatrix{ \mathrm{state} & \tikzmark{left}{1} & \tikzmark{right}{2} \cr
1 & 0.3 & 0.1 \cr
2 & 0.3 & 0.2}
\end{equation}
\tikz[overlay,remember picture]{\draw[decoration=brace,decorate,blue] (left.north west) -- (right.north east) node[midway,above=3pt] {$s_1$};}
\end{document}
结果是
答案2
\documentclass{mwrep}
\usepackage{kbordermatrix}
\usepackage{amsmath}
\makeatletter
\def\hmmA{\noalign{\global\let\@kbrowstyle\scriptstyle}}
\def\hmmB{\noalign{\kern.2ex\global\let\@kbrowstyle\relax}}
\setlength{\kbrowsep}{20pt}
\makeatother
\begin{document}
\begin{equation}
\bar{P}=
\kbordermatrix{
&\multispan3\hfill$\scriptstyle S_1$\hfill&
\multispan2\hfill$\scriptstyle S_2$\hfill&
& \\
\noalign{\kern-\kbrowsep\kern-.2ex}
&\multispan3\quad\downbracefill\quad&
\multispan2\quad\downbracefill\quad& & \\
\hmmA
\mathrm{state} & 1 & 2 & 4 & 3 & 6 & 5 & 7 \\
\hmmB
1 & 0.3 & 0.1 & 0.6 & 0.0 & 0.0 & 0.0 & 0.0 \\
2 & 0.2 & 0.1 & 0.7 & 0.0 & 0.0 & 0.0 & 0.0 \\
4 & 0.3 & 0.4 & 0.3 & 0.0 & 0.0 & 0.0 & 0.0 \\
3 & 0.0 & 0.0 & 0.0 & 0.2 & 0.8 & 0.0 & 0.0 \\
6 & 0.0 & 0.0 & 0.0 & 0.3 & 0.7 & 0.0 & 0.0 \\
5 & 0.0 & 0.4 & 0.1 & 0.0 & 0.0 & 0.2 & 0.3 \\
7 & 0.0 & 0.0 & 0.1 & 0.0 & 0.3 & 0.1 & 0.5}
\end{equation}
\end{document}
正如评论中所述,此处使用的空间调整不会自动适应基线拉伸的变化。以下修改解决了这个问题,omit
在行中添加两个额外的括号,阻止 LaTeX 将这些行与基线间距对齐,并且由于这有点太紧,因此添加了一个小的垂直字距(代替上面版本中的负字距)
\kbordermatrix{
\omit &\multispan3\hfill$\scriptstyle S_1$\hfill&
\multispan2\hfill$\scriptstyle S_2$\hfill&
& \\
\noalign{\kern-\kbrowsep\kern1ex}
\omit &\multispan3\quad\downbracefill\quad&
\multispan2 \quad\downbracefill\quad& & \\
\hmmA
答案3
与{bNiceMatrix}
nicematrix
。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\[\bar{P}=
\begin{bNiceMatrix}[first-col,first-row]
\mathrm{state} & 1 & 2 & 4 & 3 & 6 & 5 & 7 \\
1 & 0.3 & 0.1 & 0.6 & 0.0 & 0.0 & 0.0 & 0.0 \\
2 & 0.2 & 0.1 & 0.7 & 0.0 & 0.0 & 0.0 & 0.0 \\
4 & 0.3 & 0.4 & 0.3 & 0.0 & 0.0 & 0.0 & 0.0 \\
3 & 0.0 & 0.0 & 0.0 & 0.2 & 0.8 & 0.0 & 0.0 \\
6 & 0.0 & 0.0 & 0.0 & 0.3 & 0.7 & 0.0 & 0.0 \\
5 & 0.0 & 0.4 & 0.1 & 0.0 & 0.0 & 0.2 & 0.3 \\
7 & 0.0 & 0.0 & 0.1 & 0.0 & 0.3 & 0.1 & 0.5
\CodeAfter
\OverBrace[shorten,yshift=1mm]{0-1}{0-3}{S_1}
\OverBrace[shorten,yshift=1mm]{0-4}{0-5}{S_2}
\end{bNiceMatrix}\]
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。