如何实现表格标题行的垂直对齐?

如何实现表格标题行的垂直对齐?

我使用网站创建了一个表格表格生成器但我对标题行的居中并不完全满意。

这是我的代码:

\begin{table}[h]
\centering
\caption{Information about downloaded and filtered NEOs databases.}
\label{tab:NEOs:databases:info}
\begin{tabular}{@{}ccrc@{}}
\toprule
\multirow{2}{*}{\textbf{\begin{tabular}[c]{@{}c@{}}Near-Earth \\ objects\end{tabular}}} & \multicolumn{2}{c}{\textbf{No. of objects}} & \multirow{2}{*}{\textbf{\begin{tabular}[c]{@{}c@{}}Date of\\ download\end{tabular}}} \\ \cmidrule(lr){2-3}
 & \textbf{downloaded} & \multicolumn{1}{c}{\textbf{filtered}} &  \\ \midrule
NEAs & \multicolumn{1}{r}{28963} & 53 & 19-05-2022 \\
NECs & \multicolumn{1}{r}{192} & 0 & 19-05-2022 \\ \bottomrule
\end{tabular}
\end{table}

我希望下图中红色圈出的行能更好地居中(我希望两对行与 \toprule 和 \midrule 的距离相同): 桌子 你能帮我获取圆圈物体的垂直对齐方式吗?

答案1

的第一个参数\multirow不必是整数。由于该\cmidrule指令几乎增加了0.5\baselineskip标题材料的总高度,因此我会\multirow{2.4}{*}{...}尝试一下。

另外,我还会将中间两列的数字居中对齐,而不是右对齐,同时仍将数字与它们的(隐式)小数点对齐。在下面的代码中,这是通过S使用希尼奇包裹。

在此处输入图片描述

\documentclass{article}
\usepackage{multirow,booktabs,siunitx}
\newcolumntype{T}[1]{S[table-format=#1,group-digits=false]}
\newcommand\mytab[1]{\textbf{\begin{tabular}[t]{@{}c@{}} #1 \end{tabular}}}
\begin{document}

\begin{table}[h]
\centering
\caption{Information about downloaded and filtered NEOs databases.\strut}
\label{tab:NEOs:databases:info}
\begin{tabular}{@{} c T{5.0} T{2.0} l @{}}
\toprule
\multirow{2.4}{*}{\mytab{Near-Earth \\ objects}} & 
\multicolumn{2}{c}{\textbf{No.\ of objects}} & 
\multirow{2.4}{*}{\mytab{Date of\\ download}} \\ 
\cmidrule(lr){2-3}
& {\textbf{downloaded}} & {\textbf{filtered}} \\ 
\midrule
NEAs & 28963 & 53 & 19-05-2022 \\
NECs &   192 &  0 & 19-05-2022 \\ 
\bottomrule
\end{tabular}
\end{table}

\end{document}

答案2

一种方法是使用tabularray带有库的包booktablssiunitx

\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{booktabs,siunitx}

\begin{document}
    \begin{table}[ht]
    \centering
\caption{Information about downloaded and filtered NEOs databases.\strut}
\label{tab:NEOs:databases:info}
    \begin{tblr}{colspec = {c Q[c, si={table-format=5.0}] 
                              Q[c, si={table-format=2.0}] l},
                row{1,2} = {font=\bfseries, guard}
                }
    \toprule
\SetCell[r=2]{c}    {Near-Earth \\ objects}
        &\SetCell[c=2]{c}  No. of objects
                        &           & \SetCell[r=2]{c}  {Date of\\ download} \\
    \midrule
        & downloaded    & filtered  &               \\
\midrule
NEAs    & 28963         & 53        & 19-05-2022    \\
NECs    & 192           & 0         & 19-05-2022    \\
    \bottomrule
\end{tblr}
    \end{table}
\end{document}

在此处输入图片描述

答案3

虽然不是最漂亮的解决方案,但一定是最简单的。

演示

\documentclass{article}
\usepackage{booktabs}
\usepackage{caption}% caused gap below caption

\begin{document}
\begin{table}[h]
\centering
\caption{Information about downloaded and filtered NEOs databases.}
\label{tab:NEOs:databases:info}
\begin{tabular}{@{}ccrc@{}}
\toprule
  \textbf{Near-Earth} & \multicolumn{2}{c}{\textbf{No. of objects}} & \textbf{Date of} \\
  \cmidrule{2-3}
  \textbf{objects} & \textbf{downloaded} & \textbf{filtered} & \textbf{download} \\
\midrule
NEAs & \multicolumn{1}{r}{28963} & 53 & 19-05-2022 \\
NECs & \multicolumn{1}{r}{192} & 0 & 19-05-2022 \\ \bottomrule
\end{tabular}
\end{table}
\end{document}

答案4

与。{NiceTabular}nicematrix

在 中{NiceTabular},您可以使用命令 水平和垂直合并单元格\Block。对于行,您可以指定逻辑行数(而不是像 那样的物理行数\multirow)。

\documentclass{article}
\usepackage{nicematrix,booktabs,siunitx,caption}

\newcolumntype{T}[1]{S[table-format=#1,group-digits=false]}

\begin{document}

\begin{table}[h]
\centering
\label{tab:NEOs:databases:info}
\begin{NiceTabular}{@{} c T{5.0} T{2.0} l @{}}% <-- % mandatory
 [caption = Information about downloaded and filtered NEOs databases.]
\toprule
\RowStyle[nb-rows=2]{\bfseries}
\Block{2-1}{Near-Earth \\ objects} & 
\Block{1-2}{No.\ of objects} && 
\Block{2-1}{Date of\\ download} \\ 
\cmidrule(lr){2-3}
& {downloaded} & {filtered} \\ 
\midrule
NEAs & 28963 & 53 & 19-05-2022 \\
NECs &   192 &  0 & 19-05-2022 \\ 
\bottomrule
\end{NiceTabular}
\end{table}

\end{document}

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

上述代码的输出

相关内容