我试图通过将矩阵的条目括在框中来定义分段矩阵,并使用开括号和闭括号标记这些段。到目前为止,我已经开发了以下代码来执行此操作。
\documentclass[a4,12pt]{report}
\usepackage{multirow}
\begin{document}
\[
A =
\left(
\begin{array}{rrrrrl}
\cline{2-4} \cline{5-5}
\multirow{2}{*}{$B \{$} &
\multicolumn{1}{|r}{1} & 2 & \multicolumn{1}{r|}{-4} & \multicolumn{1}{|r|}{1} & \multirow{2}{*}{$\} \hat{\mathbf{b}}^{T}$} \\
& \multicolumn{1}{|r}{2} & -5 & \multicolumn{1}{r|}{-3} & \multicolumn{1}{|r|}{-3} & \\
\cline{2-4} \cline{5-5}
\hat{\mathbf{c}} \{ & \multicolumn{1}{|r}{-6} & -3 & \multicolumn{1}{r|}{0} & \multicolumn{1}{|r|}{5} & \} a_{n-1,n} \\
\cline{2-4} \cline{5-5}
\hat{\mathbf{d}} \{ & \multicolumn{1}{|r}{-6} & 7 & \multicolumn{1}{r|}{0} & \multicolumn{1}{|r|}{-8} & \} a_{n,n} \\
\cline{2-4} \cline{5-5}
\end{array}
\right)
\]
\end{document}
这将产生以下输出:
我想要做的是扩展第一列和最后一列的左括号和右括号,使其与已分段的行对齐。执行此操作的一种方法是使用\left\{
和\right\}
LaTeX 命令。问题是,当我执行此操作时,我收到以下 LaTeX 错误:
! Missing \right. inserted.
<inserted text>
\right .
l.12 \multirow{2}{*}{$B \left\{$}
&
?
另外,我想做的是使用单独的框来分隔各个部分,而不是像上面那样使用相邻的框。任何关于如何做到这一点的想法都将不胜感激。
答案1
我采纳了@mico 的回答并补充道hhline
\documentclass[a4paper,12pt]{report}
\usepackage{multirow,hhline}
\begin{document}
\[
A =
\left(
\begin{array}{r|rrr||r|l}
\hhline{~|---||-|~}
\multirow{2}{*}{$B \bigg\{$}
& 1 & 2 & -4 & 1 &
\multirow{2}{*}{$\bigg\} \hat{\mathbf{b}}^{T}$} \\
& 2 & -5 & -3 & -3 & \\
\hhline{~:===::=:~}
\hat{\mathbf{c}} \{ & -6 & -3 & 0 & 5 & \} a_{n-1,n} \\
\hhline{~:===::=:~}
\hat{\mathbf{d}} \{ & -6 & 7 & 0 & -8 & \} a_{n,n} \\
\hhline{~|---||-|~}
\end{array}
\right)
\]
\end{document}
答案2
这是一个使用经过验证的\tikzmark
想法的解决方案,首先在 Andrew Stacey 的回答中展示
下面的代码使用了 Peter Grill 的回答修改后的版本
我的解决方案有点麻烦 - 需要手动调整列和行的间距,以及一些用法,\vphantom
这样\bigg
你就可以使用而不是使用\left\{...\right.
,但输出(我希望)相当令人满意。
\documentclass[a4,12pt]{report}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{multirow}
\newcommand{\DrawBox}[3][]{%
\tikz[overlay,remember picture]{
\coordinate (RightPoint) at (#3.east);
\draw[red,#1]
($(#2)+(-.5em,.9em)$) rectangle
($(RightPoint)+(0.2em,-0.3em)$);}
}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\begin{document}
\[
A =
\left(
\begin{array}{r@{\hspace{.2cm}}c@{}rrr@{\hspace{.5cm}}r@{}rl}
\multirow{2}{*}{$B \left\{\vphantom{\begin{array}{c}1\\2\end{array}}\right.$}
&\tikzmark{left1} & 1 & 2 & -4 &\tikzmark{left3} & 1 &
\multirow{2}{*}{$\left.\vphantom{\begin{array}{c}1\\2\end{array}}\right\} \hat{\mathbf{b}}^{T}$} \\
& & 2 & -5 & -3\tikzmark{right1} & &-3 \tikzmark{right3} & \\[5pt]
\hat{\mathbf{c}} \{ &\tikzmark{left2} & -6 & -3 & 0 \tikzmark{right2} &\tikzmark{left4} & 5 \tikzmark{right4} &\}a_{n-1,n} \\[5pt]
\hat{\mathbf{d}} \{ &\tikzmark{left5} & -6 & 7 & 0 \tikzmark{right5} &\tikzmark{left6} & -8 \tikzmark{right6} & \} a_{n,n} \\
\end{array}
\right)
\]
\DrawBox[thick,green,fill=yellow,fill opacity=0.1]{left1}{right1}
\DrawBox[thick,blue]{left2}{right2}
\DrawBox[thick,red]{left3}{right3}
\DrawBox[thick,purple]{left4}{right4}
\DrawBox[thick,yellow]{left5}{right5}
\DrawBox[thick,orange]{left6}{right6}
\end{document}
答案3
您可以使用显式大小语句\bigg
来设置左花括号和右花括号的大小,如以下修改后的 MWE 形式所示。为了在使用命令时使数组显示时留有一点间隙\cline
,必须将它们分成两个单独的我还简化了代码以摆脱大多数语句\multicolumn
并合并各种成对的\cline
语句。
\documentclass[a4paper,12pt]{report}
\usepackage{multirow}
\begin{document}
\[
A =
\left(
\begin{array}{r|rrr|}
\cline{2-4}
\multirow{2}{*}{$B \bigg\{$}
& 1 & 2 & -4 \\
& 2 & -5 & -3 \\
\cline{2-4}
\hat{\mathbf{c}} \{ & -6 & -3 & 0 \\
\cline{2-4}
\hat{\mathbf{d}} \{ & -6 & 7 & 0 \\
\cline{2-4}
\end{array}
\right. \kern-3pt \left. % use \kern-3pt to reduce distance between arrays
\begin{array}{|r|l}
\cline{1-1}
1 & \multirow{2}{*}{$\bigg\} \hat{\mathbf{b}}^{T}$} \\
-3 & \\
\cline{1-1}
5 & \} a_{n-1,n} \\
\cline{1-1}
-8 & \} a_{n,n} \vphantom{\hat{\mathbf{d}}}\\
% the \vphantom is needed to equalize the heights of the
% third rows across the two arrays
\cline{1-1}
\end{array}
\right)
\]
\end{document}