![如何在 LaTeX 中显示距离矩阵](https://linux22.com/image/474252/%E5%A6%82%E4%BD%95%E5%9C%A8%20LaTeX%20%E4%B8%AD%E6%98%BE%E7%A4%BA%E8%B7%9D%E7%A6%BB%E7%9F%A9%E9%98%B5.png)
我想显示一个距离矩阵
在 LaTeX 中,我尝试:
\documentclass{article}
\usepackage{amsmath,amssymb}
\begin{document}
We obtain a distance matrix as follows:
$$
\boldsymbol{D}=\{d_{ij}\}=
\begin{array}{c}
\begin{matrix} 1 & 2 & 3 & 4 & 5 \end{matrix}
\\
\begin{matrix} 1 \\ 2 \\ 3 \\ 4 \\ 5 \end{matrix}
\begin{bmatrix}
0 & & & & \\
9 & 0 & & & \\
3 & 7 & 0 & & \\
6 & 5 & 9 & 0 & \\
11 & 10 & 2 & 8 & 0
\end{bmatrix}
\end{array}
$$
\end{document}
表明
结果比较平庸,而且结果的对齐(我不是很满意)仍然可以改进。
如果只使用基本\usepackage{amsmath,amssymb}
包而不使用其他(复杂)包,例如\usepackage{kbordermatrix}
,如何以简洁优雅的方式改善对齐? PS:简单的原生 LaTeX 命令可以轻松应用于 Markdown 数学方程式。
另外,尽量避免使用 等手动调整\qquad, \quad, \:, \;
LaTeX 中的间距。这是因为如果矩阵中的数字发生变化(例如从 2 变为 200),则会进一步增加对齐工作量。
答案1
您可以使用具有固定列宽的内部数组来确保相同的对齐方式。底部数组可以用缩放的方括号括起来。这仍然容易出现错位,并且每次更新内容时都需要调整列宽。检查这种方法是否可以通过转换。
代码
\documentclass{article}
\usepackage{array}
\usepackage{amsmath}
\usepackage{amssymb}
\setlength\arraycolsep{3pt}
\newlength\collen
\settowidth\collen{$00$}
\newcolumntype{D}{>{\centering\arraybackslash}p{\collen}}
\begin{document}
We obtain a distance matrix as follows:
\[
\boldsymbol{D} = \{d_{ij}\} =
\begin{array}{c@{}c}
& \begin{array}{*5{D}}
1 & 2 & 3 & 4 & 5
\end{array} \\[3pt]
\begin{array}{r} 1 \\ 2 \\ 3 \\ 4 \\ 5 \end{array}
& \left[
\begin{array}{*5{D}}
0 & & & & \\
9 & 0 & & & \\
3 & 7 & 0 & & \\
6 & 5 & 9 & 0 & \\
11 & 10 & 2 & 8 & 0
\end{array}
\right]
\end{array}
\]
\end{document}
答案2
您可以使用nicematrix
。
\documentclass{article}
\usepackage{amsmath,amssymb,bm,nicematrix}
\begin{document}
We obtain a distance matrix as follows:
\[
\bm{D}=\{d_{ij}\}=
\begin{bNiceMatrix}[
first-row,first-col,
code-for-first-row=\scriptstyle,
code-for-first-col=\scriptstyle,
]
& 1 & 2 & 3 & 4 & 5 \\
1 & 0 & & & & \\
2 & 9 & 0 & & & \\
3 & 3 & 7 & 0 & & \\
4 & 6 & 5 & 9 & 0 & \\
5 & 11 & 10 & 2 & 8 & 0
\end{bNiceMatrix}
\]
\end{document}
避免$$
在 LaTeX 中使用,请参阅为什么 \[ ... \] 比 $$ ... $$ 更可取?
答案3
使用简单的blkarray
包更加容易。
\documentclass[12pt]{article}
\usepackage{amsmath,amssymb,blkarray}
\begin{document}
\[
\mathbf{D}=\{d_{ij}\}=
\begin{blockarray}{ccccccc}
& {\scriptstyle 1} & {\scriptstyle 2} & {\scriptstyle 3} & {\scriptstyle 4} & {\scriptstyle 5}\\
\begin{block}{c[ccccc]c}
{\scriptstyle1} & 0 & & & & & \\
{\scriptstyle 2}& 9 & 0 & & & & \\
{\scriptstyle 3}& 3 & 7 & 0 & & & \\
{\scriptstyle 4}& 6 & 5 & 9 & 0 & & \\
{\scriptstyle 5}&11 & 10 & 2 & 8 & 0 &\\
\end{block}
\end{blockarray}
\]
\end{document}