我想对齐两个并排放置的数组的底部。
我可以看到问题出在右数组和图例之间的额外间距,并且来自第 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
不需要担心宽度,子标题将自动对齐。