如何在矩阵上方添加剪辑?

如何在矩阵上方添加剪辑?
\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 节点)。

上述代码的输出

相关内容