
아래 왼쪽 그림과 같은 레이아웃으로 3x3 블록 매트릭스를 생성하고 싶습니다. 행렬은 행 벡터 d-e-f
와 열 벡터 로 분할됩니다 b-e-h
(따라서 e
1x1 부분행렬을 나타냄). 9개의 블록(행렬 4개, 벡터 4개, 스칼라 1개)을 구분하기 위해 두 개의 가로선과 두 개의 세로선을 추가하고 싶습니다.
나는 NiceArray
다음의 명령을 사용하고 있습니다.nicematrix
패키지, 이는 2행 블록을 사용하는 경우 의도한 대로 작동합니다(아래 왼쪽 매트릭스 참조). 그러나 d-e-f
한 행 블록을 사용하여 행 벡터를 조판하려고 하면 (예: \Block{2-2}{d}
로 변경 \Block{1-2}{d}
등) 수직선이 끊어집니다(오른쪽 예 참조). 명령 을 추가/제거해도 \hline
수직선에는 영향이 없습니다. 저는 TeX Live 2019 nicematrix
버전 3.7을 사용하고 있습니다.
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}