對齊環境中的水平間距bmatrix

對齊環境中的水平間距bmatrix

我的文件中有一個很大的區塊矩陣,它稍微違反了頁邊距。我想減少一行矩陣元素之間的水平間距。此外,我想對齊多個方程式。我嘗試使用數組和矩陣,但該arraycolsep命令無法按我的預期工作。

\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{array}

\begin{document}
The following very large matrix could fit the text width if the spacing could be reduced slightly.
\setcounter{MaxMatrixCols}{30}
\begin{align}
x =& 
  \begin{bmatrix}
    1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
    0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
    0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
  \end{bmatrix}\\
=& 3
\end{align}
This could be done defining the arraycolsep:
\begin{align}
\setlength\arraycolsep{4pt}
x =
  \begin{bmatrix}
    1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
    0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
    0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
  \end{bmatrix}\\
\end{align}
Unfortunately, as soon as I try to align multiple lines the arracolsep command stops doing what I expect.

\begin{align}
\setlength\arraycolsep{4pt}
x =& 
  \begin{bmatrix}
    1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
    0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
    0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
  \end{bmatrix}\\
=& 3
\end{align}
As is the same for the array env

\begin{align}
\setlength\arraycolsep{4pt}
x =& 
  \left[\begin{array}{cccccccccccccccccccccccc}
    1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
    0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
    0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
  \end{array}\right]\\
=& 3
\end{align}
Can anyone help out? Thanks!

\end{document}

在此輸入影像描述

編輯 1:我忘了提及我在第二行使用了一個非常短的方程式。然而,第二行也很長,兩條線都裝不下。

答案1

我會定義一個varmatrix環境,​​您可以在其中設定\arraycolsep和 字體大小。

這更加靈活,因為您可以決定\normalsize並減少分離,而且還可以使用更小的尺寸。

預設值為\small0.7\arraycolsep

\documentclass{article}
\usepackage{amsmath}

\newsavebox{\varmatrixbox}

\ExplSyntaxOn
\keys_define:nn {martin/varmatrix}
 {
  sep   .dim_set:N = \l_martin_varmatrix_sep_dim,
  delim .tl_set:N  = \l_martin_varmatrix_delim_tl,
  size  .tl_set:N  = \l_martin_varmatrix_size_tl,
  sep   .initial:n = 0.7\arraycolsep,
  size  .initial:n = \small,
 }

\NewDocumentEnvironment{varmatrix}{O{}}
 {
  \keys_set:nn {martin/varmatrix} { #1 }
  \begin{lrbox}{\varmatrixbox}
  % font size
  \l_martin_varmatrix_size_tl
  % separation
  \setlength{\arraycolsep}{\l_martin_varmatrix_sep_dim}
  $\begin{\l_martin_varmatrix_delim_tl matrix}
 }
 {
  \end{\l_martin_varmatrix_delim_tl matrix}$
  \end{lrbox}
  \vcenter{\box\varmatrixbox}
 }
\ExplSyntaxOff

\setcounter{MaxMatrixCols}{50}

\begin{document}

\begin{align}
x &=
  \setlength{\arraycolsep}{3pt}
  \begin{bmatrix}
    1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
    0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
    0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
  \end{bmatrix}\\
  &=
  \begin{varmatrix}[delim=b,size=\normalsize,sep=3pt]
    1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
    0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
    0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
  \end{varmatrix}\\
  &=
  \begin{varmatrix}[delim=b,size=\small]
    1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
    0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
    0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
  \end{varmatrix}\\
  &=
  \begin{varmatrix}[delim=p,size=\footnotesize,sep=0.5\arraycolsep]
    1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
    0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
    0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
  \end{varmatrix}
\end{align}

\end{document}

在此輸入影像描述

一些解釋。

  • \keys_define:nn部分定義了選項的鍵值語法varmatrix

    1. sep設定\arraycolsep
    2. delim設定柵欄,使用標準字母amsmathbpvV或甚至什麼都不用表示沒有柵欄
    3. size應該接收字體大小聲明
  • 環境varmatrix將矩陣排版在一個框中,因此我們需要在設定大小和矩陣後重新啟動數學模式\arraycolsep

  • 盒子製作完成後,在裡面\vcenter像普通矩陣一樣用於垂直居中

答案2

我建議結合使用\arraycolsep 和使用中等大小的矩陣(顯示樣式大小的 80%),如nccmath套件中定義的:

    \documentclass[12pt]{article}
    \usepackage{amsmath, nccmath}
    \usepackage{etoolbox}
    \AtBeginEnvironment{bmatrix}{\setlength{\arraycolsep}{4pt}}
    \setcounter{MaxMatrixCols}{30}

    \begin{document}
    The following very large matrix fits the text width using medsize matrices

    \begin{align}
    x &=
      \medmath{\begin{bmatrix}
        1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
        0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
      \end{bmatrix}}\\
    &= 3
    \end{align}

    \end{document}

在此輸入影像描述

答案3

@{}您可以使用的語法在列之間插入 4pt 的空格matrix。另外,&=請勿使用=&適當的間距。

在此輸入影像描述

\begin{align}
x &= 
  \left[\begin{array}{*{24}{c@{\hspace{4pt}}}}
    1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
    0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
    0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
  \end{array}\right]\\
&= 3
\end{align}

相關內容