
내 문서에 페이지 여백을 약간 위반하는 큰 블록 매트릭스가 있습니다. 행의 행렬 요소 사이의 가로 간격을 줄이고 싶습니다. 또한 여러 방정식을 정렬하고 싶습니다. 배열과 행렬로 시도했지만 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}