重ならないようにマトリックスの左側と上部に中括弧を配置するにはどうすればよいですか?

重ならないようにマトリックスの左側と上部に中括弧を配置するにはどうすればよいですか?

次のコードを考えてみましょう。

\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 つが他の中括弧と重なっています。各中括弧が図の点の 1 つで開始および終了するようにしたいと思います。これを実現するにはどうすればよいでしょうか。

答え1

これを行う方法の 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}

それは次のようになります

ここに画像の説明を入力してください

これはあなたの例と非常に似ていますが、唯一の違いは、2 つの中括弧が異なる行列を囲んでいることです。

エントリがすべて であるマトリックスは\vphantom{}印刷されたドキュメントには表示されませんが、ドットのマトリックスと同じ高さになります。ドット マトリックスを大きくしたり小さくしたりした場合は、補正するためにこのマトリックスのエントリを追加または削除する必要があります。このマトリックスは垂直ブレースのサイズを提供します。

次に、水平中括弧が元のドット マトリックスを囲み、垂直中括弧が占めるスペースを認識しなくなります。


matrixあるいは、ライブラリを使用してエントリをレイアウトし、ライブラリを使用してdecorations中括弧を描画する、かなり単純な TikZ ベースのソリューションを次に示します。

\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

(2021-11-23 の 6.4 以上){NiceMatrix}でできることは次のとおりです。nicematrix

\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 ノードが使用されるため)。

上記コードの出力

関連情報