如何纠正以数组形式编写的矩阵中的奇怪间距

如何纠正以数组形式编写的矩阵中的奇怪间距

由于我想在其中包含一个矩阵,因此我将一个相当标准的矩阵编写为数组。排版如下:

\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}

MWE 输出

您也可能对。。。有兴趣这种修改\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}

上述代码的输出

相关内容