![Блочная матрица с заголовками](https://rvso.com/image/328812/%D0%91%D0%BB%D0%BE%D1%87%D0%BD%D0%B0%D1%8F%20%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0%20%D1%81%20%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%B0%D0%BC%D0%B8.png)
Я создал матрицу с помощью easybmat и blkarrary и хотел бы пометить столбцы над матрицей. Вот код, который я использую, и как выглядит матрица на данный момент:
\usepackage{easybmat}
\usepackage{amsmath}
\usepackage{multirow,bigdelim}
\usepackage{blkarray}
\begin{document}
\[ \mathbb{X} = \begin{array}{c@{}c}
\left[
\begin{blockarray}{cccccc}
\boldsymbol{\beta} & x_1 & z_1 & \dots & z_{k-1}\\
\begin{BMAT}[3pt]{ccccc}{ccccccccc}
1 & x_{11} & 1 & \dots & 0 \\
1 & x_{21} & 1 & \dots & 0 \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
1 & \vdots & 1 & \dots & 0\\
\vdots & & & & \vdots \\
1 & \vdots & 0 & \dots & 0\\
1 & \vdots & 0 & \dots & 0\\
\vdots & \vdots & \vdots & \ddots & \vdots \\
1 & x_{n1} & 0 & \dots & 0\\
\end{BMAT}
\end{blockarray}
\right]
&
\begin{array}{l}
\\[-17mm] \rdelim\}{4}{6mm}[$ \hspace{2mm} Category \hspace{2mm} 1$] \\ \\
\\[17mm] \rdelim\}{4}{6mm}[$\hspace{2mm} Category \hspace{2mm} k$] \\ \\
\end{array} \\[-1ex]
\end{array}
\]
\end{document}
Я хотел бы, чтобы первая строка в текущей матрице была заголовками столбцов. Может ли кто-нибудь указать, что я делаю неправильно, пожалуйста?
решение1
Вот что я смог придумать. Единственное, что мне не нравится в этом решении, так это то, что мне приходится использовать \vphantom
в самом верхнем ряду матрицы, чтобы .north
якоря выстроились в линию. Я не уверен, как это исправить, сохраняя при этом базовую линию элементов матрицы выровненной. Если у кого-то есть решение, не стесняйтесь вносить свой вклад.
Эта маленькая неприятность была исправлена. Высота узла в TikZ может быть перезаписана с помощью text height
опции. Это намного лучше, чем использовать \vphantom
.
Я не совсем знаком с easybmat
и blkarray
, поэтому вместо этого я решил использовать TiкБиблиотека Z' matrix
, которая позволяет довольно легко рисовать дополнительные функции на матрице. Вот код того, что вам нужно:
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{
matrix,
positioning,
decorations,
decorations.pathreplacing
}
\begin{document}
\begin{equation*}
\mathbb{X} =
\begin{tikzpicture}[baseline=(m.center)]
\matrix (m) [
matrix of math nodes,
left delimiter={[},
right delimiter={]},
row 1/.style={nodes={text height=1ex}}
] {
1 & x_{11} & 1 & \cdots & 0 \\
1 & x_{21} & 1 & \cdots & 0 \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
1 & \vdots & 1 & \cdots & 0 \\
\vdots & & & & \vdots \\
1 & \vdots & 0 & \cdots & 0 \\
1 & \vdots & 0 & \cdots & 0 \\
\vdots & \vdots & \vdots & \cdots & \vdots \\
1 & x_{n1} & 0 & \cdots & 0 \\
};
\node [above=1ex of m-1-1] {\(\boldsymbol{\beta}\)};
\node [above=1ex of m-1-2] {\(x_{1}\)};
\node [above=1ex of m-1-3] {\(z_{1}\)};
% \node [above=1ex of m-1-4] {\\(\cdots\)};
\node [above=1ex of m-1-5] {\(z_{k-1}\)};
\draw [decoration={brace}, decorate]
([xshift=3ex]m-1-5.north east) -- ([xshift=3ex]m-4-5.south east)
node [pos=0.5, right=1ex] {Category 1};
\draw [decoration={brace}, decorate]
([xshift=3ex]m-6-5.north east) -- ([xshift=3ex]m-9-5.south east)
node [pos=0.5, right=1ex] {Category \(k\)};
\end{tikzpicture}
\end{equation*}
\end{document}
Чтобы конкретно проиллюстрировать проблему с верхней строкой, сравните следующие два изображения, на которых показаны границы узлов.
Для полноты картины исходный код имел:
right delimiter={]},
] {
1 & \vphantom{1}x_{11} & 1 & \vphantom{1}\cdots & 0 \\
1 & x_{21} & 1 & \cdots & 0 \\
решение2
Вот решение {bNiceMatrix}
с nicematrix
.
\documentclass{article}
\usepackage{amssymb} % for \mathbb
\usepackage{nicematrix}
\begin{document}
\begin{equation*}
\mathbb{X} =
\begin{bNiceMatrix}[first-row,last-col=6]
\beta & x_1 & z_1 & & z_{k-1} \\
1 & x_{11} & 1 & \cdots & 0 & \Block{4-1}{\quad \text{Category 1}}\\
1 & x_{21} & 1 & \cdots & 0 \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
1 & \vdots & 1 & \cdots & 0 \\
\vdots & & & & \vdots \\
1 & \vdots & 0 & \cdots & 0 & \Block{4-1}{\quad \text{Category } k}\\
1 & \vdots & 0 & \cdots & 0 \\
\vdots & \vdots & \vdots & \cdots & \vdots \\
1 & x_{n1} & 0 & \cdots & 0 \\
\CodeAfter [sub-matrix/xshift=2mm]
\SubMatrix{.}{1-1}{4-5}{\}}
\SubMatrix{.}{6-1}{9-5}{\}}
\end{bNiceMatrix}
\end{equation*}
\end{document}