
Рассмотрим следующий код:
\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).