矩阵:hline 被 cmidrule 切割

矩阵:hline 被 cmidrule 切割

我想通过垂直线和水平线强调矩阵中的块结构。由于我使用 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\cmidrulebooktabs

\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}

上述代码的输出

相关内容