由于我想在其中包含一个矩阵,因此我将一个相当标准的矩阵编写为数组。排版如下:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{array}
\usepackage{multirow}
\def\block(#1,#2)#3{\multicolumn{#2}{c}{\multirow{#1}{*}{$ #3 $}}}
\begin{document}
\[A =
\left(
\begin{array}{cccccc|cc}
1 & 1 & & & & & & \\
1 & 0 & 1 & & & & & \\
& 1 & 0 & \ddots & & & & \\
& & \ddots & \ddots & 1 & & & \\
& & & 1 & 0 & 1 & & \\
& & & & 1 & 0 & 1 & \\
\hline
& & & & & 1 & \block(2,2){M} \\
& & & & & & \\
\end{array}
\right)
\]
\end{document}
令人烦恼的是,有些列和行之间有多余的间距:特别是第二列和第三列以及第二行和第三行。此外,左上角矩阵的倒数第三列和倒数第二列之间似乎也存在一些问题,不过我不确定这是否是由 \ddots 引起的。
你知道为什么会发生这种情况吗?我该如何解决它?
答案1
一个简单的解决方法是删除\ddots
宽度和高度,尽管可能有更好的方法。
\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\usepackage{multirow}
\usepackage{mathtools}
\def\block(#1,#2)#3{\multicolumn{#2}{c}{\multirow{#1}{*}{$ #3 $}}}
\makeatletter
\def\smashddots{%
\let\@old@ddots\ddots
\def\ddots{\mathclap{\smash{\@old@ddots}}}%
}
\makeatother
\begin{document}
\[\smashddots
A =
\left(
\begin{array}{cccccc|cc}
1 & 1 & & & & & & \\
1 & 0 & 1 & & & & & \\
& 1 & 0 & \ddots & & & & \\
& & \ddots & \ddots & 1 & & & \\
& & & 1 & 0 & 1 & & \\
& & & & 1 & 0 & 1 & \\
\hline
& & & & & 1 & \block(2,2){M} \\
& & & & & & \\
\end{array}
\right)
\]
\end{document}
您也可能对。。。有兴趣这种修改\env@matrix
,它允许您在使用例如时指定列pmatrix
(或者您可以使用mathtools
' pmatrix*
)。
答案2
与。{pNiceArray}
nicematrix
\documentclass{article}
\usepackage{nicematrix}
\NiceMatrixOptions{nullify-dots,xdots/shorten=6pt}
\begin{document}
\[ \renewcommand{\arraystretch}{1.3}
A =
\begin{pNiceArray}{cccccc|cc}[margin=2pt]
1 & 1 \\
1 & 0 & 1 \\
& 1 & 0 & \Ddots \\
& & \Ddots & \Ddots & 1 \\
& & & 1 & 0 & 1 \\
& & & & 1 & 0 & 1 & \\
\hline
& & & & & 1 & \Block{2-2}{M} \\
\\
\end{pNiceArray}
\]
\end{document}