我想复制这样的矩阵:
具有直的水平线和垂直线的矩阵在其内容周围形成一个矩形。
我尝试使用带有 hlines 的数组环境
$$
\begin{array}{c|cccccccc|}
& 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\
\hline
a & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
b & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
c & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
d & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
e & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\hline
\end{array}
$$
但得到的却是这个:
是否可以在乳胶中做到这一点,或者我是否需要一个外部程序来生成这样的图片并插入它?
答案1
当然,您可以使用 LaTeX 来实现这一点。要生成一条横跨列子集的水平线,请使用\cline{x-y}
,其中从 x 列到 y 列制定一条规则。
要从顶行移除竖线,您需要用 覆盖两个单元格的列规范\multicolumn
。语法为\multicolumn{<number of columns>}{<column specifier>}{<cell content>}
。第一列和最后一列具有c|
列说明符,\multicolumn{1}{c}{}
在第一个单元格中使用 将其更改为c
没有竖线。
最后,不要使用$$ .. $$
在 LaTeX 中显示数学,建议使用\[ \]
代替。
\documentclass[a4paper]{article}
\usepackage[czech,english]{babel}
\begin{document}
\[
\shorthandoff{-}
\begin{array}{c|cccccccc|}
\multicolumn{1}{c}{} & 1 & 2 & 3 & 4 & 5 & 6 & 7 & \multicolumn{1}{c}{8} \\
\cline{2-9}
a & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
b & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
c & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
d & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
e & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\cline{2-9}
\end{array}
\]
\end{document}
答案2
这是代码。不要$$ … $$
用于 displaymah,但是\[ … \]
。我加载了array
包以获得更多功能(更少的紧密垂直间距,以及用于重复具有相同说明符的单元格的更简单的代码):
\documentclass{article}
\usepackage{mathtools, array}
\begin{document}
\[ \setlength\extrarowheight{2pt}\begin{array}{c|*{8}{c}|}
\multicolumn{1}{c}{} & \mathbf{1} & \mathbf{2} & \mathbf{3} & \mathbf{4} & \mathbf{5} & \mathbf{6} & \mathbf{7 }& \multicolumn{1}{c}{\mathbf{8}} \\
\cline{2-9}
\mathbf{a} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\mathbf{b} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\mathbf{c} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\mathbf{d} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\mathbf{e} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\cline{2-9}
\end{array} \]%
\end{document}
答案3
与。{NiceMatrix}
nicematrix
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\[\begin{NiceMatrix}
& 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & \\
a & \Block[draw]{5-8}{}
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
b & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
c & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
d & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
e & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\end{NiceMatrix}\]
\end{document}
答案4
解决方案如下\tikzmark
:
\documentclass[a4paper]{article}
\usepackage[czech]{babel}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
\[
\begin{tikzpicture}[remember picture,overlay]
\draw ([yshift=1.2\ht\strutbox,xshift=-3pt]{pic cs:start})
rectangle ([xshift=3pt,yshift=-\dp\strutbox]{pic cs:end});
\end{tikzpicture}
\begin{matrix}
& \mathbf{1} & \mathbf{2} & \mathbf{3} & \mathbf{4}
& \mathbf{5} & \mathbf{6} & \mathbf{7} & \mathbf{8}\\
\mathbf{a} &
\tikzmark{start}
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\mathbf{b} &
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\mathbf{c} &
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\mathbf{d} &
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\mathbf{e} &
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
\tikzmark{end}
\end{matrix}
\]
\end{document}
请注意,当矩阵发生变化时,这需要两次传递,才能正确排版。