
下の図の左側に示すレイアウトで、3x3 ブロック マトリックスを作成したいと思います。マトリックスは行ベクトルd-e-f
と列ベクトルで分割されますb-e-h
(つまり、e
1x1 サブマトリックスを表します)。9 つのブロック (4 つのマトリックス、4 つのベクトル、1 つのスカラー) を区切るために、2 本の水平線と 2 本の垂直線を追加したいと思います。
私はNiceArray
コマンドを使用していますnicematrix
パッケージは、2 行のブロックを使用すると意図したとおりに動作します (下の左側のマトリックスを参照)。ただし、d-e-f
1 行のブロックを使用して行ベクトルをタイプセットしようとすると (つまり、 など\Block{2-2}{d}
に変更する\Block{1-2}{d}
と)、垂直線が途切れます (右側の例を参照)。コマンドを追加/削除しても、\hline
垂直線には影響しません。私は TeX Live 2019 バージョン 3.7 を使用していますnicematrix
。
e
2 行のブロックを使用せずにサブマトリックスの周囲に垂直線を維持する方法はありますか?
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\[
\begin{pNiceArray}{cc|c|cc}[margin]
\Block{2-2}{a} & & \Block{2-1}{b} & \Block{2-2}{c} & \\
& & & & \\\hline
\Block{2-2}{d} & & \Block{2-1}{e} & \Block{2-2}{f} & \\
& & & & \\\hline
\Block{2-2}{g} & & \Block{2-1}{h} & \Block{2-2}{i} & \\
& & & & \\
\end{pNiceArray}
\quad
\begin{pNiceArray}{cc|c|cc}[margin]
\Block{2-2}{a} & & \Block{2-1}{b} & \Block{2-2}{c} & \\
& & & & \\
\Block{1-2}{d} & & \Block{1-1}{e} & \Block{1-2}{f} & \\\hline
\Block{2-2}{g} & & \Block{2-1}{h} & \Block{2-2}{i} & \\
& & & & \\
\end{pNiceArray}
\]
\end{document}
a
更新: 最終的には、 ...を、、などのi
部分行列を表す式に置き換えたいと思います。また、と は正方行列ですが、と は必ずしも正方行列ではないことも説明したいと思います。A_{00}
a_{01}^\mathsf{T}
a
i
c
g
現実的な値を使用した出力例を次に示します。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\setlength{\extrarowheight}{1mm}
\setlength{\arraycolsep}{8pt}
\[
\begin{pNiceArray}{ccc|c|ccccc}[margin]
\Block{3-3}{A_{00}} & & & \Block{3-1}{a_{01}} & \Block{3-4}{A_{20}^\mathsf{T}} & & & \\
& & & & & & & \\
& & & & & & & \\ \hline
% I'd like to use the following line but it doesn't work as expected:
%\Block{1-3}{a_{01}^\mathsf{T}} & & & \Block{1-1}{0} & \Block{1-4}{a_{21}^\mathsf{T}} & & & \\
% two-row blocks are fine:
\Block{2-3}{a_{01}^\mathsf{T}} & & & \Block{2-1}{0} & \Block{2-4}{a_{21}^\mathsf{T}} & & & \\
& & & & & & & \\ \hline
\Block{4-3}{A_{20}} & & & \Block{4-1}{a_{21}} & \Block{4-4}{A_{22}} & & & \\
& & & & & & & \\
& & & & & & & \\
& & & & & & & \\
\end{pNiceArray}
\]
\end{document}
答え1
@leandriis がコメントで示唆したのと同様です。ブロックはサブマトリックスの周囲にスペースを増やしてシミュレートされます。
編集:
編集した質問で提供されたマトリックスコンテンツを考慮すると
\documentclass{article}
\usepackage{array,
makecell} % new
\begin{document}
\[\setcellgapes{3pt}
\makegapedcells
\left(
\begin{array}{ccc|c|ccc}
& && && & \\
& A_{00} && a_{01} && A_{20}^T & \\
& && && & \\ \hline
& a_{01}^T && 0 && f & \\ \hline
& && && & \\
& A_{20} && a_{21} && A_{22}^T & \\
& && && & \\
\end{array}\right)
\]
\end{document}
注: 空の行と列は、次元サブマトリックスがより大きい場所を強調するために追加されます1 x 1
。これが必要ない場合は、単に削除してください。
答え2
これはパッケージの現在のバージョンのバグであることが判明しましたnicematrix
。これはバージョン 3.8 (2020-01-02) で修正されており、CTAN で入手できます。
\vline
何らかの理由で古いバージョンを使い続けている場合は、影響を受けるセルの末尾に を追加することでバグを回避できます。これを最小限の動作例に適用すると、目的の出力が得られます。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\setlength{\extrarowheight}{1mm}
\setlength{\arraycolsep}{8pt}
\[
\begin{pNiceArray}{ccc|c|ccccc}[margin]
\Block{3-3}{A_{00}} & & & \Block{3-1}{a_{01}} & \Block{3-4}{A_{20}^\mathsf{T}} & & & \\
& & & & & & & \\
& & & & & & & \\ \hline
\Block{1-3}{a_{01}^\mathsf{T}} & & \vline & \Block{1-1}{0} \vline & \Block{1-4}{a_{21}^\mathsf{T}} & & & \\\hline
\Block{4-3}{A_{20}} & & & \Block{4-1}{a_{21}} & \Block{4-4}{A_{22}} & & & \\
& & & & & & & \\
& & & & & & & \\
& & & & & & & \\
\end{pNiceArray}
\]
\end{document}