我想通过垂直线和水平线强调矩阵中的块结构。由于我使用 bmatrix 作为矩阵环境,因此我遇到了以下问题如何缩短矩阵中的 \hline。
我非常喜欢那里提到的使用 booktabs 的第一个解决方案,因为它可以很好地计算垂直间距并正确地将水平线居中(例如,有 2 行时矩阵前等号的中间将与 cmidrule 绘制的线完全处于同一高度)。
但是,我仍然想添加垂直线,因此我使用 [cc|cc] 作为可选参数。但是垂直线被垂直线打断了。
有没有简单的解决方法?据我所知,关于 cmidrule 的线索是 trim 选项,而我找不到 hline 或 cline 的选项。
\documentclass{article}
\usepackage{amsmath}
\usepackage{booktabs} % required for the first solution
%matrix environment redef
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\makeatother
\begin{document}
\begin{equation*}
\begin{bmatrix}[c|c]
a & b\\ \cmidrule(lr){1-2}
c & d
\end{bmatrix}
\end{equation*}
\end{document}
答案1
如果希望水平线和垂直线相交,则不能使用booktabs
包的规则绘制宏。
这是一个仅使用基本array
环境的解决方案。此解决方案类似于您提供链接的帖子中 @Alenanno 提供的解决方案;主要区别在于指令@{}
已被替换为@{\,}
。
\documentclass{article}
\begin{document}
$
\left[ \begin{array}{@{\,} c|c @{\,}}
u & v\\
\hline
w & x \\
\end{array} \right]
$
\end{document}
附录:如果您需要在行之间增加一些垂直间距,您可以加载包并在前导码中array
发出指令。如果子矩阵具有变音符号(例如),否则会太接近,这可能特别有用,如下例中的情况一样。\setlength\extrarowheight{1pt}
\bar{...}
\hline
\bar{d}
\documentclass{article}
\usepackage{array} % for "\extrarowheight" macro
\begin{document}
$
\left[ \begin{array}{@{\,} c|c @{\,}}
a & b\\
\hline
c & \bar{d} \\
\end{array} \right]
$
\setlength\extrarowheight{1pt}
$
\left[ \begin{array}{@{\,} c|c @{\,}}
a & b\\
\hline
c & \bar{d} \\
\end{array} \right]
$
\end{document}
答案2
使用,垂直规则永远不会被破坏,即使是由{bNiceArray}
(因为它们是由 PGF 绘制的 — 它是 Tikz 的一个子层)。nicematrix
\cmidrule
booktabs
\documentclass{article}
\usepackage{nicematrix}
\usepackage{booktabs}
\begin{document}
\begin{equation*}
\begin{bNiceArray}{c|c}
a & b\\ \cmidrule(lr){1-2}
c & d
\end{bNiceArray}
\end{equation*}
\end{document}