これは私の MWE です:
\documentclass[a4paper,12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{mathtools}
\usepackage{physics}
\usepackage{easybmat}
\begin{document}
First attempt:
\begin{align*}
&\left[\begin{BMAT}{c1c}{c1c}
a& \begin{matrix} b_1& b_2 \end{matrix} \\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\left[\begin{BMAT}{c1c}{c1c}
a& \mathmakebox[\widthof{$\begin{matrix} b_1& b_2 \end{matrix} $}]{\vb*b}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]\\
&\left[\begin{BMAT}{c1c}{c1c}
a& \mathmakebox[\widthof{$\begin{matrix} b_1& b_2 \end{matrix} $}]{\vb*b}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\end{align*}
Second attempt:
\begin{align*}
&\left[\begin{BMAT}{c1c}{c1c}
a& \begin{matrix} b_1& b_2 \end{matrix} \\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\left[\begin{BMAT}{c1c}{c1c}
a& \begin{matrix}
\mathmakebox[\widthof{$\begin{matrix} b_1& b_2 \end{matrix} $}]{\vb*b}
\end{matrix}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]\\
&\left[\begin{BMAT}{c1c}{c1c}
a& \begin{matrix}
\mathmakebox[\widthof{$\begin{matrix} b_1& b_2 \end{matrix} $}]{\vb*b}
\end{matrix}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\end{align*}
\end{document}
ここではmathtools
パッケージはコマンドに必要です\mathmakebox
。私はeasybmat
パッケージは行列内のブロックを処理するための優れたツールであり、私の目的には必要不可欠であるため、physics
ここでのパッケージは、簡単なベクトル表記のためだけに使用されていますが、もちろん必須ではありません。次の結果が得られるはずです。
マトリックスを複数のセクターに分割したり、複数のブロックをいくつかの大きなブロックに統合したりする必要があることがよくあります。これを行うと、対応するオブジェクトが全く同じ視覚的寸法を持つようにする。
上記の MWE では、 と を使用して、同じ行の連続するいくつかの要素と同じ幅の「複数列」行列要素を作成する方法を示しました\mathmakebox
。\widthof
[*]
「最初の試み」では、このトリックは水平間隔では完全に機能するが、垂直間隔では機能しないことが示されています。「2 番目の試み」では、垂直間隔の回避策が示されています。
私の質問は次のとおりです。
- 上記 (MWE) で使用したソリューションよりもクリーンなソリューションはありますか?
- (基本的)同じ列内の連続する要素の高さが同じ「複数行」行列要素を持つ同様の手順はありますか?MWEでは、列を置き換えることを考えるだけです。(c1、c2)ベクトルでc、で行われたことと同様に(b1、b2)そしてb
\heightof
;では\mathmakebox
うまくいかないので特にこう尋ねます。[**] - (より一般的な)他の数式と同じ寸法 (高さと幅) で、数式を入力するボックスを作成する方法はありますか? 最終的には、幅用と高さ用に 2 つの異なる式を使用する方法はありますか?
[*] ここで付け加えておきますが、私は通常、行列を管理するときに列や行の結合を避けています。行列を入れ子にする方が簡単な解決策だと思います。もちろん、この点については私が間違っている可能性は大いにあります。いずれにせよ、この質問は、行列とは関係のない他の目的にも最終的に意味を成すかもしれません。
[**] この問題の回避策として、幅が null のボックスを使用してファントム式を入れる方法もありますが、投稿は控えました。あまりにも洗練されていないので、投稿していたら永久に禁止されていたでしょう。
答え1
セーブボックスを使用すると重複作業を回避できます。
\documentclass{article}
\usepackage{mathtools}
\usepackage{easybmat}
\newsavebox{\tempbox}% \sbox0 doesn't work
\begin{document}
\savebox\tempbox{$\begin{matrix} b_1 & b_2 \end{matrix}$}% must be outside align environment
\begin{align*}
&\left[\begin{BMAT}{c1c}{c1c}
a& \usebox\tempbox \\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\left[\begin{BMAT}{c1c}{c1c}
a& \mathmakebox[\wd\tempbox]{\boldsymbol{b}}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]\\
&\left[\begin{BMAT}{c1c}{c1c}
a& \mathmakebox[\wd\tempbox]{\boldsymbol{b}}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\end{align*}
\end{document}