
ドキュメントに大きなブロック マトリックスがあり、ページ マージンをわずかに侵害しています。行のマトリックス要素間の水平方向の間隔を狭めたいと考えています。さらに、複数の方程式を揃えたいと考えています。配列とマトリックスを試しましたが、コマンドが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: 2 行目に非常に短い式を使用したことを忘れていました。ただし、2 行目も非常に長く、どちらも 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
@{}
の構文を使用して、列間に 4 ポイントのスペースを挿入できます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}