
我的文件中有一個很大的區塊矩陣,它稍微違反了頁邊距。我想減少一行矩陣元素之間的水平間距。此外,我想對齊多個方程式。我嘗試使用數組和矩陣,但該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
並減少分離,而且還可以使用更小的尺寸。
預設值為\small
和0.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
。- 鍵
sep
設定\arraycolsep
- 鍵
delim
設定柵欄,使用標準字母amsmath
、b
、p
、v
,V
或甚至什麼都不用表示沒有柵欄 - 鍵
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}