amsmath 矩阵与加载数组包

amsmath 矩阵与加载数组包

这是一个有趣的互动。请考虑下面的例子。每当array包被加载后,输出的右侧会出现多余的空格。

有什么想法可以解释原因吗?

\documentclass[a4paper]{article}
\usepackage{amsmath,amssymb}
% without array it looks fine, with array extra space is added in the
% right of each matrix env
\usepackage{array}
\begin{document}

  \begin{equation*}
    \begin{pmatrix}
      \begin{array}{@{} c @{} | @{} c @{} }
        \begin{matrix}
          a_{11} & a_{12} & \hdots & a_{1n} \\
          a_{21} & a_{22} & \hdots & a_{2n} \\
          \vdots & \vdots & \ddots & \vdots \\
          a_{m1} & a_{m2} & \hdots & a_{mn}
        \end{matrix}
        & 
        \begin{matrix}
          b_{11} & b_{12} & \cdots & b_{1n'} \\
          b_{21} & b_{22} & \cdots & b_{2n'} \\
          \vdots & \vdots & \ddots & \vdots \\
          b_{m1} & b_{m2} & \cdots & b_{mn'}
        \end{matrix}
      \end{array}
    \end{pmatrix}
  \end{equation*}

  \begin{equation*}
    \begin{pmatrix}
      \begin{matrix}
        b_{11} & b_{12} & \cdots & b_{1n} \\
        b_{21} & b_{22} & \cdots & b_{2n} \\
        \vdots & \vdots & \ddots & \vdots \\
        b_{m1} & b_{m2} & \cdots & b_{mn}
      \end{matrix}
    \end{pmatrix}  
  \end{equation*}

\end{document}

图像:首先是array

在此处输入图片描述

并且没有array

在此处输入图片描述

答案1

好吧,我对此做了一些分析,它看起来像是一个第一天就引入的错误(所以它已经存在了 20 多年?......不记得我什么时候写了这段代码:-)。

问题如下:在单元格内容周围,代码添加了\ignorespaces ... \unskip删除两侧任何不需要的空格。这对于普通文本来说是绝对必要的,因为空格很容易出现在类似这样的内容中,a & b \\但显然如果有人写,它们也可能会丢失,a&b\\并且两者实际上应该产生相同的输出。现在在基本 LaTeX 中,tabulararray基本上是独立的野兽,而tabular添加则\ignorespaces ...\unskip没有这样做array。在那里,单元格被$符号单独包围。

现在有了这个array包,情况就变得稍微复杂了一点,因为人们可以将一列标记为数学tabular或文本,并且 array只要>$c<$是“文本”,就应该用 包围\ignorespaces ...\unskip。因此,即使在数学模式下空格已被忽略,也总是这样做。

除非您有一个构造,否则一切都很好,比如matrix它在其自身之后明确添加一个跳过(以取消最后的 columnsep),因为如果这matrix是单元格中的最后一个对象,则现在这个跳过会再次被删除。

因此,解决这个问题最简单的方法就是amsmath进行matrix如下更改:

\makeatletter
\renewenvironment{matrix}{%
  \matrix@check\matrix\env@matrix
}{%
  \endarray \hskip -\arraycolsep\kern\z@ % hide the negative skip
}
\makeatother

当然,可能还有其他对象有尾随跳过,所以这实际上并没有解决根本原因。

修复起来array要复杂得多,但也可能行得通,请打开 latexbug 报告,以便在错误数据库中留有记录。

答案2

稍微简化一下例子...

在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage{amsmath,amssymb}
% without array it looks fine, with array extra space is added in the
% right of each matrix env
\usepackage{array}
\begin{document}


  \begin{equation*}
    \begin{pmatrix}
      \begin{matrix}
x
      \end{matrix}{}
    \end{pmatrix}
  \end{equation*}


  \begin{equation*}
    \begin{pmatrix}
      \begin{matrix}
x
      \end{matrix}
    \end{pmatrix}
  \end{equation*}

\end{document}

matrix如果加载则嵌套pmatrix会导致空间增加array (有待调查......)

但是,如果您像上面的例子一样{}在每个后面添加matrix空格,那么空格就会消失。确认原始版本中的空格也消失了。

相关内容