
Betrachten Sie den folgenden Code:
\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}
Dies erzeugt die folgende Ausgabe:
In beiden Fällen überlappt eine der Klammern die andere. Ich möchte, dass jede Klammer genau an einem der Punkte im Diagramm beginnt und endet. Wie kann ich das erreichen?
Antwort1
So können Sie es beispielsweise tun:
\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}
Das sieht aus wie
Dies ist Ihren Beispielen sehr ähnlich, mit nur einem Unterschied: Die beiden Klammern umfassen jetzt unterschiedliche Matrizen.
Die Matrix, deren Einträge alle sind, \vphantom{}
wird im gedruckten Dokument nicht angezeigt, hat aber die gleiche Höhe wie die Punktmatrix. Wenn Sie die Punktmatrix vergrößern oder verkleinern, müssen Sie zum Ausgleich Einträge zu dieser Matrix hinzufügen oder daraus entfernen. Diese Matrix gibt die Größe für die vertikale Klammer an.
Dann umschließt die horizontale Klammer die ursprüngliche Punktmatrix und sieht nie den von der vertikalen Klammer eingenommenen Raum.
Alternativ gibt es hier eine recht einfache TikZ-basierte Lösung, die die matrix
Bibliothek zum Layout der Einträge und dann die decorations
Bibliothek zum Zeichnen der Klammern verwendet.
\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}
So sieht die TikZ-Lösung aus:
Antwort2
So können Sie es mit Stapeln machen:
\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}
Antwort3
Folgendes können Sie mit {NiceMatrix}
( nicematrix
≥ 6.4 vom 23.11.2021) tun:
\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}
Sie benötigen mehrere Kompilierungen (da nicematrix
im Hintergrund PGF/Tikz-Knoten verwendet werden).