Как разместить фигурные скобки слева и сверху матрицы без перекрытия?

Как разместить фигурные скобки слева и сверху матрицы без перекрытия?

Рассмотрим следующий код:

\documentclass{article}

\usepackage{amsmath}
\usepackage{rotating}

\begin{document}

\begin{align*}
  \rotatebox[origin=c]{90}{$n$ parts}\left\{\overbrace{\begin{matrix}
    \bullet & \bullet & \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \cdots & \bullet\\
    \bullet & \cdots & \bullet\\
  \end{matrix}}^{\text{Even number}}\right.
\end{align*}

\begin{align*}
  \rotatebox[origin=c]{90}{$n$ parts}\overbrace{\left\{\begin{matrix}
    \bullet & \bullet & \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \cdots & \bullet\\
    \bullet & \cdots & \bullet\\
  \end{matrix}\right.}^{\text{Even number}}
\end{align*}

\end{document}

Это дает следующий результат:

введите описание изображения здесь

В обоих случаях одна из скобок перекрывает другую. Я бы хотел, чтобы каждая скобка начиналась и заканчивалась точно в одной из точек на диаграмме. Как мне этого добиться?

решение1

Вот один из способов, как это можно сделать:

\documentclass{article}

\usepackage{amsmath}
\usepackage{rotating}

\begin{document}

\begin{equation*}
  %
  % the vertical brace
  %
  \rotatebox[origin=c]{90}{\scriptsize{
    $n$ parts
  }}
  %
  % an invisible matrix for height
  %
  \left\{\begin{matrix}
     \vphantom{} \\ \vphantom{} \\ \vphantom{} \\
     \vphantom{} \\ \vphantom{} \\ \vphantom{} \\
  \end{matrix}\right.
  %
  % the horizontal brace and the visible matrix
  %
  \overbrace{
    \begin{matrix}
      \bullet & \bullet & \bullet & \bullet & \bullet & \cdots & \bullet\\
      \bullet & \bullet & \bullet & \cdots & \bullet\\
      \bullet & \bullet & \bullet & \cdots & \bullet\\
      \bullet & \bullet & \bullet & \cdots & \bullet\\
      \bullet & \cdots & \bullet\\
      \bullet & \cdots & \bullet\\
    \end{matrix}
  }^{\text{
    even number
  }}
\end{equation*}

\end{document}

который выглядит как

введите описание изображения здесь

Это очень похоже на ваши примеры, с одним лишь отличием: две фигурные скобки теперь охватывают разные матрицы.

Матрица, все записи которой \vphantom{}не отображаются в печатном документе, но она имеет ту же высоту, что и матрица точек. Если вы сделали матрицу точек больше или меньше, вам нужно будет добавить или удалить записи из этой матрицы, чтобы компенсировать это. Эта матрица обеспечивает размер для вертикальной скобки.

Затем горизонтальная скобка оборачивается вокруг исходной точечной матрицы и никогда не видит пространства, занимаемого вертикальной скобкой.


В качестве альтернативы, вот довольно простое решение на основе TikZ, которое использует matrixбиблиотеку для размещения записей, а затем decorationsбиблиотеку для рисования фигурных скобок.

\documentclass{article}

\usepackage{amsmath}
\usepackage{rotating}
\usepackage{tikz}

\usetikzlibrary{matrix, decorations.pathreplacing}

\begin{document}

\begin{tikzpicture}[decoration={brace, amplitude=6pt}]
    \matrix (m) [matrix of math nodes] {
      \bullet & \bullet & \bullet & \bullet & \bullet & \cdots & \bullet\\
      \bullet & \bullet & \bullet & \cdots & \bullet\\
      \bullet & \bullet & \bullet & \cdots & \bullet\\
      \bullet & \bullet & \bullet & \cdots & \bullet\\
      \bullet & \cdots & \bullet\\
      \bullet & \cdots & \bullet\\
    };
    \draw [decorate, transform canvas={xshift=-0.3em}, thick]
           (m-6-1.south west) -- node [left=6pt]
           {\rotatebox[origin=c]{90}{\scriptsize\text{$n$ parts}}} (m-1-1.north west);
    \draw [decorate, transform canvas={yshift=0.5em, xshift=0.5em}, thick]
          (m-1-1.north west) -- node [above=6pt]
          {\scriptsize\text{even number}} (m-1-6.north east);
\end{tikzpicture}

\end{document}

Вот как выглядит решение TikZ:

введите описание изображения здесь

решение2

Вот как это можно сделать с помощью стеков:

\documentclass{article}
\usepackage{tabstackengine}
\stackMath
\begin{document}
\setbox0=\hbox{\setstacktabbedgap{1ex}\tabbedCenterstack{
    \bullet & \bullet & \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \bullet & \bullet & \cdots & \bullet\\
    \bullet & \cdots & \bullet\\
    \bullet & \cdots & \bullet
}}
\[
\Shortstack[r]{%
  {\stackon{\makebox[\wd0]{\downbracefill}}{\textrm{top~text}}}\\
  {\textrm{side~text}\left\{\box0\right.}
}
\]
\end{document}

введите описание изображения здесь

решение3

Вот что вы можете сделать с {NiceMatrix}( nicematrix≥ 6.4 от 2021-11-23):

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

$\begin{NiceMatrix}
  \Block{*-1}{\rotate n \text{ parts}}
  & \bullet & \bullet & \bullet & \bullet & \bullet & \cdots & \bullet\\
  & \bullet & \bullet & \bullet & \cdots & \bullet\\
  & \bullet & \bullet & \bullet & \cdots & \bullet\\
  & \bullet & \bullet & \bullet & \cdots & \bullet\\
  & \bullet & \cdots & \bullet\\
  & \bullet & \cdots & \bullet\\
\CodeAfter
  \OverBrace{1-2}{1-last}{\text{even number}}[yshift=1mm]
  \SubMatrix{\{}{1-2}{last-2}{.}[left-xshift=0.8mm]
\end{NiceMatrix}$

\end{document}

Вам нужно несколько компиляций (т.к. nicematrixвнутри используются узлы PGF/Tikz).

Вывод кода выше

Связанный контент