我想创建一个转移概率矩阵,就像我在使用的教科书中找到的那样,随机建模简介 作者:Mark A. Pinsky 和 Samuel Karlin。
双条形比仅使用 更紧密||
。此外,索引列和条形之间的间距以及条形和矩阵条目之间的间距都很窄。至少,我希望实现这两个结果。
此外,我希望能够创建一个与 Ex1 完全相同的矩阵:
- 顶部索引与矩阵条目右对齐。
- 双垂直条比常规条稍微粗一些(尽管这可能只是字体)。
- 双垂直杆的长度刚好足以到达顶部入口和底部入口,不会更长。
如果我也能取得这些成果,那将不胜感激!
这是我目前所拥有的。我使用了blkarray
包。间距太大(黑色),条形图相距太远(红色)。谢谢您的帮助!
\mathbf{P} =
\begin{blockarray}{cccc}
& 0 & 1 & 2 \\
\begin{block}{r||rrr||}
0 & 0.7 & 0.2 & 0.1 \\
1 & 0.3 & 0.5 & 0.2 \\
2 & 0 & 0 & 0 \\
\end{block}
\end{blockarray}
答案1
您可以使用@{}
规范。或者查看限制垂直线大小的替代方法。
\documentclass{article}
\usepackage{amsmath,blkarray}
\begin{document}
\[
\mathbf{P} =
\begin{blockarray}{c@{\hspace{1pt}}rrr@{\hspace{3pt}}}
& 0 & 1 & 2 \\
\begin{block}{r@{\hspace{1pt}}|@{\hspace{1pt}}
|@{\hspace{1pt}}rrr@{\hspace{1pt}}|@{\hspace{1pt}}|}
0 & 0.7 & 0.2 & 0.1 \\
1 & 0.3 & 0.5 & 0.2 \\
2 & 0 & 0 & 0 \\
\end{block}
\end{blockarray}
\]
\end{document}
替代方案:
这使用了我的tabstackengine
和scalerel
包来实现 OP 限制垂直行高的目标。我不得不打补丁\Centerstack
来省略自动\strut
插入。
\documentclass{article}
\usepackage{scalerel,tabstackengine,xpatch}
\setstacktabbedgap{1em}
\xpatchcmd\Centerstack{\strutlongstacks{T}}{}{}{}
\begin{document}
\[
\def\stackalignment{r}
\mathbf{P} =
\Centerstack{
0 \\
1 \\
2
}\!
\stackon{
\stretchleftright{|\!|}{\tabbedCenterstack{
0.7 & 0.2 & 0.1 \\
0.3 & 0.5 & 0.2 \\
0 & 0 & 0
}}{|\!|}}{\tabbedCenterstack{
\protect\phantom{0.}0 & \protect\phantom{0.}1 & \protect\phantom{0.}2}
\kern1pt}
\]
\end{document}
答案2
您可以使用{NiceArray}
of来实现这一点nicematrix
。该环境类似于标准环境{array}
(包的array
),但会在单元格、行和列下创建 PGF/Tikz 节点。在构建数组后,您可以使用它们在 Tikz 中绘制您想要的任何规则。
\documentclass{article}
\usepackage{nicematrix,tikz}
\usepackage{amsfonts}
\begin{document}
$\mathbf{P} =
\begin{NiceArray}{c@{\hspace{1ex}}ccc}[baseline=3]
& 0 & 1 & 2 \\
0 & 0.7 & 0.2 & 0.1 \\
1 & 0.3 & 0.5 & 0.2 \\
2 & 0 & 0 & 0 \\
\CodeAfter
\tikz \draw [double] ([xshift=-0.5ex]2-|2) -- ([xshift=-0.5ex,yshift=0.5ex]last-|2) ;
\tikz \draw [double] ([xshift=0.5ex]2-|5) -- ([xshift=0.5ex,yshift=0.5ex]last-|5) ;
\end{NiceArray}$
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。