如何使用 blkarray 和 subcaption 对齐数组的底部

如何使用 blkarray 和 subcaption 对齐数组的底部

我想对齐两个并排放置的数组的底部。

我可以看到问题出在右数组和图例之间的额外间距,并且来自第 3 行的 \\,但这些 \\ 是强制性的堵塞环境(甚至在最后一行)。有人看到解决这个问题的技巧吗?

在此处输入图片描述

\documentclass{article}
\usepackage[french]{babel}    
\usepackage{subcaption}
\usepackage{blkarray}

\begin{document}
\begin{table}
    \centering
    \begin{subtable}[b]{.48\textwidth}
        \centering
        %\fbox{
            $\left[
            \begin{tabular}{ccc}
                10  &20     &30\\
                15  &25     &35\\
                11  &22     &33\\
            \end{tabular}
        \right]$
        %}
        \caption{Left array}
        \label{tab:leftarray}
    \end{subtable}
    \hfill
    \begin{subtable}[b]{.48\textwidth}
        \centering
        %\fbox{
            \begin{blockarray}[b]{c ccc}
                    &Column 1 &Column 2 &Column 3\\
                \begin{block}{r [ccc]}
                    Line 1  &10&20&30\\
                    Line 2  &15&25&35\\
                    Line 3  &11&22&33\\
                \end{block}
            \end{blockarray}
        %}
        \caption{Right array}
        \label{tab:rightarray}
    \end{subtable}
    \caption{How to align the bottom of arrays}
    \label{tab:HowHowHow}
\end{table}
\end{document}

答案1

\\[-1em]你可以通过在右侧数组后面添加来破解它\end{blockarray}。但是,这不会让你得到完美的由于左边数组的方括号比右边数组的方括号略长,因此整体对齐。

更完整的解决方法是不使用tabular环境,而是使用blockarray没有额外行和列的环境。此外,您已在 block 参数中添加>{\enskip}<{\enskip}(在单元格的开始之前/结束之后,插入其中的任何内容{...}),以在单元格和方括号之间添加填充。

通过指定适当的宽度可以解决字幕对齐不精确的问题subtable。请注意,删除\rule{...}{0.4pt}将消除Overfull \hbox警告。

输出

\usepackage[french]{babel}    
\usepackage{subcaption}
\usepackage{blkarray}

\begin{document}
\begin{table}
    \centering
     \rule{\textwidth}{0.4pt}
    \begin{subtable}[b]{0.30\textwidth}
        \centering
         \fbox{
            \begin{blockarray}[b]{ccc}
                \begin{block}{[>{\enskip}ccc<{\enskip}]}
                    10&20&30\\
                    15&25&35\\
                    11&22&33\\
                \end{block}
            \end{blockarray}
        }
        \hbox{\rule{1.17\textwidth}{0.4pt}}
        \caption{Left array}
        \label{tab:leftarray}
    \end{subtable}
    \hfill
    \begin{subtable}[b]{0.65\textwidth}
        \centering
        \fbox{
            \begin{blockarray}[b]{c ccc}
                    &Column 1 &Column 2 &Column 3\\
                \begin{block}{r [ccc]}
                    Line 1  &10&20&30\\
                    Line 2  &15&25&35\\
                    Line 3  &11&22&33\\
                \end{block}
            \end{blockarray}
        }
        \hbox{\rule{\textwidth}{0.4pt}}
        \caption{Right array}
        \label{tab:rightarray}
    \end{subtable}
    \caption{The bottom arrays are aligned}
    \label{tab:HowHowHow}
\end{table}
\end{document}

答案2

我会用nicematrix

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}    
\usepackage{subcaption}
\usepackage{amsmath}
\usepackage{nicematrix}

\begin{document}

\begin{table}[htp]
\centering

\begin{subtable}[b]{.28\textwidth}
  \centering
  $\begin{bNiceMatrix}[baseline=b]
    10  &20     &30\\
    15  &25     &35\\
    11  &22     &33\\
    11  &22     &33\\
  \end{bNiceMatrix}$

  \caption{Left array}
  \label{tab:leftarray}
\end{subtable}\hfill
\begin{subtable}[b]{.68\textwidth}
  \centering
  $\begin{bNiceMatrix}[first-row,first-col,baseline=b]
    &\text{Column 1} & \text{Column 2} & \text{Column 3} \\
    \text{Line 1}  &10&20&30\\
    \text{Line 2}  &15&25&35\\
    \text{Line 3}  &11&22&33\\
  \end{bNiceMatrix}$

  \caption{Right array}
  \label{tab:rightarray}
\end{subtable}

\caption{How to align the bottom of arrays}
\label{tab:HowHowHow}

\end{table}

\begin{table}[htp]
\centering

\hspace*{\fill}%
\subcaptionbox{Left array\label{tab:leftarray2}}{%
  $\begin{bmatrix}
    10  &20     &30\\
    15  &25     &35\\
    11  &22     &33\\
    11  &22     &33\\
  \end{bmatrix}$%
}\hfill
\subcaptionbox{Right array\label{tab:rightarray2}}{%
  $\begin{bNiceMatrix}[first-row,first-col]
    &\text{Column 1} & \text{Column 2} & \text{Column 3} \\
    \text{Line 1}  &10&20&30\\
    \text{Line 2}  &15&25&35\\
    \text{Line 3}  &11&22&33\\
  \end{bNiceMatrix}$%
}\hspace*{\fill}

\caption{How to align the bottom of arrays}
\label{tab:HowHowHow2}

\end{table}

\end{document}

\subcaptionbox不需要担心宽度,子标题将自动对齐。

在此处输入图片描述

相关内容