我想创建一个分区矩阵,其中分区将由虚线分隔。最明显的解决方案是使用 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 节点)。