Re: [問題] 請問有關矩陣的分割/直和
先進不敢當﹐一點經驗。
最笨的辦法﹐可以是在 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
推
01/11 08:54, , 1F
01/11 08:54, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):