我试图在稀疏矩阵中仅定义非零元素,因此使用一些\vdots
条目为零的元素并在需要时指定行(使用前言中的blockarray
命令\usepackage{blkarray}
)。我的矩阵只有 2 列(或 4 列),所以我无法\vdots
像我希望的那样居中(如果矩阵有奇数列,问题就会解决)。以下是一个例子:
$\begin{blockarray}{ccc}
\begin{block}{[cc]l}
\vdots \\
a & b & /K-1 \\
c & d & /K \\
\vdots \\
\end{block}
\end{blockarray}$
正如您在本例中看到的,虽然我指定将条目置于[
和之间]
,但\vdots
在第一列上居中。如果我用、和cc
的任意组合替换,仍然不令人满意。此外,如果我将 放在右侧和/或左侧的任意数量的 之间,它仍然不起作用。r
c
l
\vdots
&
我的另一个解决方案(但也不令人满意)是添加另一列:
$\begin{blockarray}{cccc}
\begin{block}{[ccc]l}
&\vdots& \\
a & & b & /K-1 \\
c & & d & /K \\
&\vdots& \\
\end{block}
\end{blockarray}$
但正如您现在所看到的,非零条目相距太远,结果并不是很漂亮。
感谢您的时间和帮助。
答案1
blkarray
无需额外的软件包即可完成此操作,只需使用\BAmulticolumn
,这是特定的命令blockarray
:
\documentclass{article}
\usepackage{blkarray}
\begin{document}
\[
\begin{blockarray}{ccc}
\begin{block}{[cc]l}
\BAmulticolumn{2}{c}{\vdots} & \\
a & b & /K-1 \\
c & d & /K \\
\BAmulticolumn{2}{c}{\vdots} & \\
\end{block}
\end{blockarray}
\]
\end{document}
答案2
两种可能性:第一种是使用额外的柱子和@{...}
构造来减少柱间距;第二种是用来\tikzmark
放置一些标记,然后\vdots
使用这些标记进行放置。
\documentclass{article}
\usepackage{blkarray}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand\tikzmark[1]{%
\tikz[remember picture,overlay] \node (#1) {};}
\begin{document}
\[
\begin{blockarray}{cccc}
\begin{block}{[c@{\hspace{3pt}}c@{\hspace{3pt}}c]l}
&\vdots& \\
a & & b & /K-1 \\
c & & d & /K \\
&\vdots& \\
\end{block}
\end{blockarray}
\]
\[
\begin{blockarray}{ccc}
\begin{block}{[cc]l}
\tikzmark{a} & \tikzmark{b} \\
a & b & /K-1 \\
c & d & /K \\
\tikzmark{c} & \tikzmark{d} \\
\end{block}
\end{blockarray}
\]
\begin{tikzpicture}[remember picture,overlay]
\node[yshift=0.5ex] at ( $ (a)!0.5!(b) $ ) {$\vdots$};
\node[yshift=1.7ex] at ( $ (c)!0.5!(d) $ ) {$\vdots$};
\end{tikzpicture}
\end{document}