对齐矩阵问题

对齐矩阵问题

我有一个矩阵方程,我想将矩阵的维度对齐到矩阵方程下方。但是,我得到的结果是非常丑陋的。有人能建议如何让它看起来更好或正确对齐吗?

\documentclass[10pt,a4paper]{article}
\usepackage{amsmath, amsfonts}
\begin{document}
\begin{align*}
A
&
\begin{bmatrix}
&&\\
\vec{v}_1 & \cdots & \vec{v}_r \\
&&
\end{bmatrix}
&= &
\begin{bmatrix}
&&\\
\vec{u}_1 & \cdots & \vec{u}_r\\
&&
\end{bmatrix}
&
\begin{bmatrix}
\sigma_1 &&\\
&\ddots&\\
&& \sigma_r
\end{bmatrix}
\\
(m \times n) & (n \times r) & & (m \times r) & (r \times r)
\end{align*}
\end{document}

答案1

一种可能的解决方案是使用tabular

\documentclass{article}

\usepackage{amsmath}

\begin{document}

\setlength{\tabcolsep}{0pt}
\begin{tabular}{*{5}{c}}
  $A$
& $
   \begin{bmatrix}
              &        &           \\
    \vec{v}_1 & \cdots & \vec{v}_r \\
              &        &
   \end{bmatrix}$
& $=$
& $
   \begin{bmatrix}
              &        &           \\
    \vec{v}_1 & \cdots & \vec{v}_r \\
              &        &
   \end{bmatrix}$
& $
   \begin{bmatrix}
    \sigma_1 &        &          \\
             & \ddots &          \\
             &        & \sigma_r
   \end{bmatrix}$\\
& $(m \times n)(n \times r)$
&
& $(m \times r)$
& $(r \times r)$
\end{tabular}

\end{document}

输出A

更新

如果要为整行或个别单元格着色,可以执行以下操作(另请参阅表格环境中突出显示):

\documentclass{article}

\usepackage{amsmath}
\usepackage{color,colortbl}

\definecolor{ColorA}{rgb}{0.25,0.5,0.75}

\begin{document}

\setlength{\tabcolsep}{0pt}
\begin{tabular}{*{5}{c}}
  \cellcolor{ColorA}\,$A$
& \cellcolor{ColorA}$
   \begin{bmatrix}
              &        &           \\
    \vec{v}_1 & \cdots & \vec{v}_r \\
              &        &
   \end{bmatrix}$
& \cellcolor{ColorA}$=$
& \cellcolor{ColorA}$
   \begin{bmatrix}
              &        &           \\
    \vec{v}_1 & \cdots & \vec{v}_r \\
              &        &
   \end{bmatrix}$
& \cellcolor{ColorA}$
   \begin{bmatrix}
    \sigma_1 &        &          \\
             & \ddots &          \\
             &        & \sigma_r
   \end{bmatrix}$\\
& $(m \times n)(n \times r)$
&
& $(m \times r)$
& $(r \times r)$
\end{tabular}

\end{document}

输出B

\documentclass{article}

\usepackage{amsmath}
\usepackage{color,colortbl}

\definecolor{ColorA}{rgb}{0,1,1}
\definecolor{ColorB}{rgb}{1,0,1}
\definecolor{ColorC}{rgb}{1,1,0}
\definecolor{ColorD}{rgb}{0.25,0.5,0.75}

\begin{document}

\setlength{\tabcolsep}{0pt}
\begin{tabular}{*{5}{c}}
  \cellcolor{ColorA}\,$A$\,
& \cellcolor{ColorB}$
   \begin{bmatrix}
              &        &           \\
    \vec{v}_1 & \cdots & \vec{v}_r \\
              &        &
   \end{bmatrix}$
& \,$=$\,
& \cellcolor{ColorC}$
   \begin{bmatrix}
              &        &           \\
    \vec{v}_1 & \cdots & \vec{v}_r \\
              &        &
   \end{bmatrix}$
& \cellcolor{ColorD}$
   \begin{bmatrix}
    \sigma_1 &        &          \\
             & \ddots &          \\
             &        & \sigma_r
   \end{bmatrix}$\\
& $(m \times n)(n \times r)$
&
& \,$(m \times r)$
& $(r \times r)$
\end{tabular}

\end{document}

输出C

答案2

您可以使用下标,但在这个特定情况下,这种方法看起来不太好。更好的选择可能是采用更“冗长”的方法。以下示例显示了两种可能性:

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\[
A_{m\times n}
\begin{bmatrix}
&& \\
\vec{v}_1 & \cdots & \vec{v}_r \\
&&
\end{bmatrix}_{n\times r}
=
\begin{bmatrix}
&& \\
\vec{u}_1 & \cdots & \vec{u}_r\\
&&
\end{bmatrix}_{m\times r}
\begin{bmatrix}
\sigma_1 &&\\
&\ddots&\\
&& \sigma_r
\end{bmatrix}_{r\times r}
\]

So we have
\[
AV=U\Sigma,
\]
where $A$ is an $m\times n$ matrix and $V$, $U$ and $\Sigma$ are the $n\times r$, $m\times r$ and $r\times r$, respectively, matrices given by
\[
V=
\begin{bmatrix}
&& \\
\vec{v}_1 & \cdots & \vec{v}_r \\
&&
\end{bmatrix},\quad
U=
\begin{bmatrix}
&& \\
\vec{u}_1 & \cdots & \vec{u}_r\\
&&
\end{bmatrix}\quad\text{and}\quad
\Sigma=
\begin{bmatrix}
\sigma_1 &&\\
&\ddots&\\
&& \sigma_r
\end{bmatrix}.
\]

\end{document}

在此处输入图片描述

答案3

尝试\underset

\documentclass[10pt,a4paper]{article}
\usepackage{amsmath, amsfonts}
\begin{document}
\begin{align*}
A \underset{\textstyle (m \times n) \, (n \times r)}{\begin{bmatrix}
&&\\
\vec{v}_1 & \cdots & \vec{v}_r \\
&&
\end{bmatrix}}
&= 
\underset{\textstyle (m \times r)}{\begin{bmatrix}
&&\\
\vec{u}_1 & \cdots & \vec{u}_r\\
&&
\end{bmatrix}}
\underset{\textstyle (r \times r)}{\begin{bmatrix}
\sigma_1 &&\\
&\ddots&\\
&& \sigma_r
\end{bmatrix}}
\end{align*}
\end{document}

在此处输入图片描述

答案4

这是一个解决方案nicematrix

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

\setlength{\arraycolsep}{8pt}
\NiceMatrixOptions{nullify-dots, last-row, code-for-last-row = \color{black}}

\[
\color{blue}
A 
\begin{bNiceMatrix}
\\
\vec{v}_1 & \Cdots & \vec{v}_r \\
\\
\Block{1-3}{(m \times n)(n \times r)}
\end{bNiceMatrix}
=
\begin{bNiceMatrix}
\\
\vec{v}_1 & \Cdots & \vec{v}_r \\
\\
\Block{1-3}{(m \times r)}
\end{bNiceMatrix}
\begin{bNiceMatrix}
\sigma_1 \\
& \Ddots \\
& & \sigma_r 
\\
\Block{1-3}{(r \times r)} 
\end{bNiceMatrix}
\]

\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

第一个代码的输出


如果您愿意,您可以使用 Tikz 在矩阵下添加背景(通过使用在nicematrix矩阵的行、列和单元格下创建的 PGF/Tikz 节点)。

\documentclass{article}
\usepackage{nicematrix,tikz}

\begin{document}

\setlength{\arraycolsep}{8pt}
\NiceMatrixOptions{nullify-dots, last-row}

\[A 
\begin{bNiceMatrix}[name=A]
\\
\vec{v}_1 & \Cdots & \vec{v}_r \\
\\
\Block{1-3}{(m \times n)(n \times r)}
\end{bNiceMatrix}
=
\begin{bNiceMatrix}
\\
\vec{v}_1 & \Cdots & \vec{v}_r \\
\\
\Block{1-3}{(m \times r)}
\end{bNiceMatrix}
\begin{bNiceMatrix}[name=B]
\sigma_1 \\
& \Ddots \\
& & \sigma_r 
\\
\Block{1-3}{(r \times r)} 
\end{bNiceMatrix}
\tikz [overlay, remember picture]
   \fill [red!15,blend mode = multiply] 
   (A-1-|A-1) ++ (-6pt,0pt) rectangle (B-4-|B-4) ; 
\]

\end{document}

第二段代码的输出

相关内容