这是一个有趣的互动。请考虑下面的例子。每当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 中,tabular
和array
基本上是独立的野兽,而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
空格,那么空格就会消失。确认原始版本中的空格也消失了。