我正在写论文,遇到了以下问题。我有一个巨大的矩阵(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*}