将巨大的矩阵拆分成多行以适合页面大小

将巨大的矩阵拆分成多行以适合页面大小

我正在写论文,遇到了以下问题。我有一个巨大的矩阵(10 行 15 列),一页放不下。我想让 LaTeX 将矩阵拆分成多行,但现在它超出了页面范围。我尝试启用 amsmath 包中的“allowdisplaybreaks”,但没有任何效果。非常感谢您的帮助!

这是我的 LaTeX 源代码:

\documentclass{article}
\usepackage{amsmath}
\allowdisplaybreaks

\begin{document}

\begin{align*}
B_u  = \begin{bmatrix}
-0.0629& 0.0629& -0.1819&  0.1819&       0&       0&       0&       0&       0&  0.0652&  0.0185&  0.0034&  0.0019& -0.0019& -0.0034\\
0.0107& 0.0107& -0.0676& -0.0676& -0.1455& -0.1455& -0.1494& -0.1494& -1.2860&       0&       0&  0.0013&  0.0035&  0.0035&  0.0013\\
-0.0142& 0.0142& -0.0128&  0.0128&       0&       0&       0&       0&       0& -0.1272& -0.0929&  0.0195&  0.0111& -0.0111& -0.0195\\         
0&      0&       0&       0&       0&       0&       0&       0& -0.3122&       0&       0&  0.1999&  0.1999&  0.1999&  0.1999\\
0&      0& -0.0098& -0.0098& -0.0071& -0.0071& -0.0074& -0.0074& -0.0676&       0&       0& -0.0004& -0.0004& -0.0004& -0.0004\\     
0&      0&       0&       0&       0&       0&       0&       0&       0&  0.0078&  0.0066&  0.0001&  0.0001& -0.0001& -0.0001\\
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&       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&       0&       0&       0&       0&       0&       0
\end{bmatrix}, 
\end{align*}

\end{document}

以下是我希望矩阵在页面上显示的屏幕截图:在此处输入图片描述

答案1

即使您以横向格式呈现(未编号的)方程式(例如,在包rotating及其sidewaysfigure环境的帮助下),您仍然需要将数字从 4 位四舍五入到 3 位小数(例如,使用siunitx包及其S列类型,它允许您对数字进行四舍五入)并减少列之间的空白量(由参数控制\arraycolsep),以使 15 列矩阵适合单个页面。(旁白:如果出于某种原因,您不想应用四舍五入并因此显示所有数字,则需要\footnotesize在进入数学模式之前执行以使方程式适合。)

页面可打印部分周围的框线由包绘制showframe

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath,
            rotating, % for 'sidewaysfigure' env.
            siunitx,  % for S column type
            showframe}

\begin{document}
\begin{sidewaysfigure}
\[
\setlength\arraycolsep{1.8pt} % default value: 5pt
B_u  = \left[  
\begin{array}{@{} *{15}{S[table-format=-1.3,
                          round-mode=places,
                          round-precision=3]} @{}}
-0.0629& 0.0629& -0.1819&  0.1819& 0& 0& 0& 0& 0&  0.0652&  0.0185&  0.0034&  0.0019& -0.0019& -0.0034\\
 0.0107& 0.0107& -0.0676& -0.0676& -0.1455& -0.1455& -0.1494& -0.1494& -1.2860& 0& 0&  0.0013&  0.0035&  0.0035&  0.0013\\
-0.0142& 0.0142& -0.0128&  0.0128& 0& 0& 0& 0& 0& -0.1272& -0.0929&  0.0195&  0.0111& -0.0111& -0.0195\\   
0& 0& 0& 0& 0& 0& 0& 0& -0.3122& 0& 0&  0.1999&  0.1999&  0.1999&  0.1999\\
0& 0& -0.0098& -0.0098& -0.0071& -0.0071& -0.0074& -0.0074& -0.0676& 0& 0& -0.0004& -0.0004& -0.0004& -0.0004\\     
0& 0& 0& 0& 0& 0& 0& 0& 0& 0.0078& 0.0066& 0.0001& 0.0001& -0.0001& -0.0001\\
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& 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& 0& 0& 0& 0& 0& 0
\end{array} 
\right]
\]
\end{sidewaysfigure}
\end{document}

答案2

我不确定这是不是一个好主意,但它可以实现你想要的。你可以使用这个trimclip包将你巨大的矩阵切成两部分。然后使用环境multline将矩阵片段放在页面上。我将巨大的矩阵放入宏中,\hugematrix因为在创建两个片段时必须调用两次。

语法\clipbox*如下:

\clipbox*{{<llx>} {<lly>} {<urx>} {<ury>}}{<content to be clipped>}

其中<llx><lly>是要保留的框左下角的 x 和 y 坐标,和<content>是右上角的坐标。您可以使用、和(或它们的倍数)来引用内容的高度(基线以上)、深度(基线以下)和宽度。为了避免剪切一小部分边缘,您需要略大于和。<urx><ury>\height\width\depth\height\depth

在你的例子中,我使用了

\clipbox*{0pt {-1.1\depth} {.46\width} {1.1\height}}{\hugematrix}

从左下角(深度以下 10%)裁剪到略小于一半宽度的位置(通过反复试验选择在两列之间)。这是左半部分。右半部分是

\clipbox*{{.46\width} {-1.1\depth} {\width} {1.1\height}}{\hugematrix}

但即使分成两部分,矩阵对于页面来说也太宽了。以下是将矩阵分成两部分后的样子:

在此处输入图片描述

如您所见,右半部分比 宽\textwidth,左半部分几乎一样宽。如果不进入边距或使矩阵变小,就不可能将其放在两行上。

使矩阵变小的一种方法是使用smallmatrix*mathtools(其中有一个用于列右对齐的选项)。

在此处输入图片描述

以下是使用的代码smallmatrix*

\documentclass{article}

\usepackage{mathtools,trimclip,lipsum}
\setcounter{MaxMatrixCols}{20}
\newcommand{\hugematrix}{$\left[\begin{smallmatrix*}[r]
-0.0629& 0.0629& -0.1819&  0.1819&       0&       0&       0&       0&       0&  0.0652&  0.0185&  0.0034&  0.0019& -0.0019& -0.0034\\
0.0107& 0.0107& -0.0676& -0.0676& -0.1455& -0.1455& -0.1494& -0.1494& -1.2860&       0&       0&  0.0013&  0.0035&  0.0035&  0.0013\\
-0.0142& 0.0142& -0.0128&  0.0128&       0&       0&       0&       0&       0& -0.1272& -0.0929&  0.0195&  0.0111& -0.0111& -0.0195\\         
0&      0&       0&       0&       0&       0&       0&       0& -0.3122&       0&       0&  0.1999&  0.1999&  0.1999&  0.1999\\
0&      0& -0.0098& -0.0098& -0.0071& -0.0071& -0.0074& -0.0074& -0.0676&       0&       0& -0.0004& -0.0004& -0.0004& -0.0004\\     
0&      0&       0&       0&       0&       0&       0&       0&       0&  0.0078&  0.0066&  0.0001&  0.0001& -0.0001& -0.0001\\
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&       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&       0&       0&       0&       0&       0&       0
\end{smallmatrix*}\right]$}

\begin{document}

\lipsum[1]
\begin{multline*}
B_u  = \clipbox*{0pt {-1.1\depth} {.53\width} {1.1\height}}{\hugematrix}\\ 
\clipbox*{{.53\width} {-1.1\depth} {\width} {1.1\height}}{\hugematrix}
\end{multline*}

\lipsum[2]
\end{document}

如果你发现smallmatrix太小,你可以使用\scalebox缩放来将巨大矩阵的各个部分缩小到足够小以适合。这里是 90% 的比例,刚好适合:

在此处输入图片描述

代码在这里:

\documentclass{article}

\usepackage{mathtools,trimclip,lipsum}
\setcounter{MaxMatrixCols}{20}
\newcommand{\hugematrix}{$\begin{bmatrix*}[r]
-0.0629& 0.0629& -0.1819&  0.1819&       0&       0&       0&       0&       0&  0.0652&  0.0185&  0.0034&  0.0019& -0.0019& -0.0034\\
0.0107& 0.0107& -0.0676& -0.0676& -0.1455& -0.1455& -0.1494& -0.1494& -1.2860&       0&       0&  0.0013&  0.0035&  0.0035&  0.0013\\
-0.0142& 0.0142& -0.0128&  0.0128&       0&       0&       0&       0&       0& -0.1272& -0.0929&  0.0195&  0.0111& -0.0111& -0.0195\\         
0&      0&       0&       0&       0&       0&       0&       0& -0.3122&       0&       0&  0.1999&  0.1999&  0.1999&  0.1999\\
0&      0& -0.0098& -0.0098& -0.0071& -0.0071& -0.0074& -0.0074& -0.0676&       0&       0& -0.0004& -0.0004& -0.0004& -0.0004\\     
0&      0&       0&       0&       0&       0&       0&       0&       0&  0.0078&  0.0066&  0.0001&  0.0001& -0.0001& -0.0001\\
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&       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&       0&       0&       0&       0&       0&       0
\end{bmatrix*}$}

\begin{document}

\lipsum[1]
\begin{multline*}
B_u  = \scalebox{.9}{\clipbox*{0pt {-1.1\depth} {.46\width} {1.1\height}}{\hugematrix}}\\ 
\scalebox{.9}{\clipbox*{{.46\width} {-1.1\depth} {\width} {1.1\height}}{\hugematrix}}
\end{multline*}

\lipsum[2]
\end{document}

这里使用不同的剪辑将其缩放到 80%:

在此处输入图片描述

\begin{multline*}
B_u  = \scalebox{.8}{\clipbox*{0pt {-1.1\depth} {.53\width} {1.1\height}}{\hugematrix}}\\ 
\scalebox{.8}{\clipbox*{{.53\width} {-1.1\depth} {\width} {1.1\height}}{\hugematrix}}
\end{multline*}

相关内容