作者ChenMeng0518 (Ch'enMeng)
标题Re: [问题] 请问有关矩阵的分割/直和
时间Thu Jan 9 08:48:52 2014
先进不敢当﹐一点经验。
最笨的办法﹐可以是在 array 中套用 matrix, 然後用 \cline 和 \vline 结合来画线。
不过应该注意﹐array 中﹐相邻两列之间的间隔﹐是 2 * \arraycolsep, 所以使用
\vline 画竖线的时候﹐应该在 \vline 的左右处理这个距离﹐使得上下竖线能够对齐。
另外的问题是﹐由於 matrix 不具有列格式选项﹐无法为之设定宽度。而矩阵中间的部分
(13 & 14 \\ 18 & 19 这部分)相较上下要更宽﹐这会导致最下面一行的竖线无法和上
面对齐﹐需要处理一下中间一列矩阵中的宽度。
由於这第二个原因﹐代码变得没有通用性。如果还有其他类似结构的矩阵﹐必须手工调
整 \usecolwidth 的定义。在纯 TeX 下难以编程﹐暂时没有特别好的方法来解决这个
问题﹐只能依靠你自己理解代码﹐继而才能顺利地使用代码。
测试代码如下﹕
\documentclass{article}
\usepackage{amsmath}
\newlength{\ColWidth}
\newcommand{\getcolwidth}{\settowidth{\ColWidth}{13}}
\newcommand{\usecolwidth}[1]{\getcolwidth\makebox[\ColWidth][c]{#1}}
\newcommand{\arrayvline}{\hspace*{\arraycolsep}\vline\hspace*{-\arraycolsep}}
\begin{document}
\[
\begin{array}{@{}ccc@{}}
\begin{matrix}
1 & 2\\
5 & 7
\end{matrix} \arrayvline & \begin{matrix}
\usecolwidth{0} & \usecolwidth{0} \\
\usecolwidth{0} & \usecolwidth{0}
\end{matrix} & \begin{matrix}
0 \\
0
\end{matrix}\\
\cline{1-2}
\begin{matrix}
0 & 0 \\
0 & 0
\end{matrix} \arrayvline & \begin{matrix}
13 & 14\\
18 & 19
\end{matrix} \arrayvline & \begin{matrix}
0 \\
0
\end{matrix}\\
\cline{2-3}
\begin{matrix}
0 & 0
\end{matrix} & \begin{matrix}
\usecolwidth{0} & \usecolwidth{0}
\end{matrix} \arrayvline & 25
\end{array}
\]
\end{document}
注意我这里使用了 \arrayvline 和 \usecolwidth 封装了一些细节﹐方便使用。你应该
仔细查看 preamble 中的相关代码﹐理解它们的作用﹐然後再上手使用。
----------------------------------
另外一个办法﹐是使用 blkarray (short for block array). 不过这个包年份很久了﹐
和着名的 amsmath 包在某些时候可能会冲突﹐因此应该谨慎使用。而同样由於年份太
久﹐宏包作者 Carlisle 似乎已经不乐意再修改这个宏包了。
所以虽然有这个办法﹐我这里就不讲如何使用它来实现你需要的效果了。如果确实有需要
可以在命令行输入
texdoc blkarray
查看它的文档﹐学习如何使用。
※ 引述《fancap (汉子)》之铭言:
: 请教各位先进,
: 如果要在阵列中的特定某些行与列画上隔线,例如下面的阵列
: 1 2 | 0 0 0
: 6 7 | 0 0 0
: --------
: 0 0 | 13 14 | 0
: 0 0 | 18 19 | 0
: -------
: 0 0 0 0 | 25
: 要如何打出呢?
: (有试过在 array 中使用 \cline 与 \vline,但是隔线都无法对齐。
: 想请问各位高手是否有更有效的方式。)
--
来自萌气四溢的 M 君~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 183.217.27.145
1F:推 fancap:非常感谢您的建议!我再试试看 01/11 08:54