矩阵内的虚线未使用 arydshln

矩阵内的虚线未使用 arydshln

我想创建一个分区矩阵,其中分区将由虚线分隔。最明显的解决方案是使用 arydshln 包,但它似乎与我正在使用的许多其他包完全不兼容。我知道存在一些不兼容性(例如与 colortab 包),应该通过在其他包之后调用 arydshln 来解决。就我而言,它不起作用,所以我真的必须找到 arydshln 的替代方案。

这个帖子提出了一些替代方案,包括 TikZ 和 stackengine 包。Tikz 包似乎创建了无法插入内联的图像,而 stackengine 只会产生非常丑陋的输出。

所以我的问题是:有没有一种方法,最好是相当简单的方法,可以在矩阵内创建虚线?我想使用如下代码:

\documentclass{article}
\usepackage{amsmath}
\usepackage{blkarray}


\begin{document}

$\begin{blockarray}{ccc}
\begin{block}{(cc)c}
x_1 & x_2 & r_1 \\
x_3 & x_4 & r_2 \\
\end{block}
c_1 & c_1 &
\end{blockarray}$

\end{document}

在此处输入图片描述

矩阵的两行和两列之间会有一条虚线。我并不是特别喜欢 blkarray 包,但我需要一种方法来在矩阵外部写入索引以指示分区的维度。

多谢!

答案1

以下是如何使用 来实现pst-node。另一种可能性是使用灰色连续线。我给出了两者的代码:

\documentclass[svgnames, x11names, table]{article}
\usepackage{amsmath}
\usepackage{blkarray, booktabs}
\usepackage{xcolor}
\usepackage{pst-node}
% \usepackage{auto-pst-pdf} % for pdflatex compilation. Requires pdflatex --enable-write18 (MiKTeX) 
                                                 % or pdflatex -shell-escape (TeX Live, MacTeX)

\begin{document}

\begin{pspicture}$
\begin{blockarray}{ccc}
\begin{block}{(cc)c}
\rnode[l]{x1}{x_1}\pnode[1.4ex, 1.4ex]{T} & \rnode[r]{x2}{x_2} & r_1 \\
\rnode[l]{x3}{x_3}\pnode[1.4ex, -0.8ex]{B} & x_4 & r_2 \\
\end{block}
c_1 & c_2 &
\end{blockarray}$
\psset{linewidth=0.4pt, linestyle=dashed, dash=2pt 2pt}
\pcline[offset =-1.4ex]{-}(x1)(x2)
\ncline{T}{B}
\end{pspicture}

\vspace{1cm}

{\aboverulesep = 0pt\belowrulesep = 0pt
$\begin{blockarray}{ccc}
\begin{block}{(c!{\color{Snow3}\vrule}c)c}
\rnode[l]{x1}{x_1}\pnode[1.4ex, 1.4ex]{T} & \rnode[r]{x2}{x_2} & r_1 \\
\arrayrulecolor{Snow3}\cmidrule(lr){1-2}
\rnode[l]{x3}{x_3}\pnode[1.4ex, -0.8ex]{B} & x_4 & r_2 \\
\end{block}
c_1 & c_2 &
\end{blockarray}$}

\end{document} 

在此处输入图片描述

答案2

以下是您可以使用(≥ 6.10a,截至 2022-06-26)做{pNiceArray}的事情。nicematrix

\documentclass{article}
\usepackage{nicematrix,tikz}

\begin{document}

\NiceMatrixOptions
 {
   custom-line =  % for dashed rules
    {
      command = hdashedline , % for horizontal rules
      letter = I , % for vertical rules
      tikz = dashed ,
      total-width = \pgflinewidth % optional
    }
 }

$\begin{pNiceArray}{cIc}[last-row,last-col]
x_1 & x_2 & r_1 \\
\hdashedline
x_3 & x_4 & r_2 \\
c_1 & c_2 
\end{pNiceArray}$

\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的输出

相关内容