为特定环境重新定义 \arraycolsep

为特定环境重新定义 \arraycolsep

如何\arraycolsep针对单个环境进行更改?例如,我已\arraycolsep设置方程数组环境中“=”两侧的白色间距不会过大。但是,这bmatrix也会使环境中矩阵的列更靠近。我想重新定义矩阵(bmatrix)环境,以便它调用\arraycolsep与全局使用的定义(对于方程数组)不同的局部定义。

答案1

您可以使用etoolbox 包对环境做出调整。

\documentclass{article}
\usepackage{amsmath}
\usepackage{etoolbox}
\AtBeginEnvironment{bmatrix}{\setlength{\arraycolsep}{50pt}}
\begin{document}
\[
\begin{bmatrix}
1 & 2 \\
3 & 4
\end{bmatrix}
\quad
\begin{pmatrix}
1 & 2 \\
3 & 4
\end{pmatrix}
\]
\end{document}

改变发生在组内部,因此当环境结束时它将被撤消。

当然,正如@Werner 指出的那样,解决问题的方法eqnarray是使用align来自amsmath 包反而。

答案2

您可以明确设置它们的列分隔。为了使文档中的间距保持一致,您可以在序言中指定尺寸,然后只需使用\BigColSep

\documentclass{article}
\def\BigColSep{\setlength{\arraycolsep}{50pt}}
\begin{document}

\[
\begingroup\BigColSep
\begin{array}{cc}
a & b 
\end{array}
\endgroup
\]

\end{document}

\begingroup仅当您在此特定数学显示中混合其他一些数组时才需要和。\endgroup如果它仅由组成bmatrix,则不需要它们。

答案3

如果你试图调整\arraycolsep 仅有的为获得符号(或其他数学运算符)周围的正确间距=,则应考虑另一种方法:使用@{}消除列间距,并{}在等号前添加和 extra。比较两者的输出,您将看到匹配。

笔记:

  • 正如其他人提到的,如果您只是使用array来对齐公式中的元素,您应该考虑其他选项,例如align,和alignat

代码:

\documentclass{article}
\begin{document}
\noindent
Spacing with array:
\[
\begin{array}{r@{}l}
    a &{}= b 
\end{array}
\]
And without array:
\[
  a = b
\]
\end{document}

相关内容