将右对齐的列置于表格标题下方的中央

将右对齐的列置于表格标题下方的中央

我有一张表格,其标题相对较长,包含一到两位数字。这是我的初始代码:

\documentclass{article}
\usepackage{booktabs}
\usepackage{textcomp}
\begin{document}
\begin{tabular}{ccr}
\toprule
\textnumero & Symbol & Number of Units \\ \midrule
1 & A & 9  \\
2 & B & 10 \\
3 & C & 7  \\
4 & D & 12 \\
5 & E & 2  \\
6 & F & 3  \\
7 & G & 4  \\
[![8 & H & 5  \\][1]][1]
9 & I & 5  \\
\bottomrule
\end{tabular}
\end{document}

在此处输入图片描述

如您所见,整个表格最终看起来相当不平衡。现在,显然我可以将整个列居中,如下所示:

...
\begin{tabular}{ccc}
...

在此处输入图片描述

该列在标题下居中,但数字当然失去了右对齐,这并不理想。我的下一个直觉是尝试使用 来\multicolumn尝试使标题居中,同时让其余部分保持右对齐:

...
\begin{tabular}{ccr}
\toprule
\textnumero & Symbol & \multicolumn{1}{c}{Number of Units} \\ \midrule
...

不幸的是,这导致了与第一个相同的输出。我真的不知道我应该在这里做什么。有什么方法可以实现我想要的吗?理想情况下,最终结果应该是这样的(在 GIMP 中手动编辑屏幕截图):

在此处输入图片描述

答案1

siunitx S-column 可以按照您想要的方式对齐内容。下面我使用-digit 整数table-format=2居中:2

在此处输入图片描述

\documentclass{article}

\usepackage{booktabs,textcomp,siunitx}

\begin{document}

\begin{tabular}{ c c S[table-format=2] }
  \toprule
  \textnumero & Symbol & \multicolumn{1}{c}{Number of Units} \\
  \midrule
  1 & A & 1  \\
  2 & B & 22 \\
  3 & C & 3  \\
  4 & D & 44 \\
  5 & E & 5  \\
  6 & F & 66 \\
  7 & G & 7  \\
  8 & H & 88 \\
  9 & I & 9  \\
  \bottomrule
\end{tabular}

\end{document}

应使用 设置非整数标题\multicolumn{1}{<colspec>}{<header>}


这是一个类似的手动替代方案,使用\phantoms:

\documentclass{article}

\usepackage{booktabs,textcomp}

\begin{document}

\begin{tabular}{ *{3}{c} }
  \toprule
  \textnumero & Symbol & Number of Units \\
  \midrule
  1 & A & \phantom{0}1  \\
  2 & B & 22 \\
  3 & C & \phantom{0}3  \\
  4 & D & 44 \\
  5 & E & \phantom{0}5  \\
  6 & F & 66 \\
  7 & G & \phantom{0}7  \\
  8 & H & 88 \\
  9 & I & \phantom{0}9  \\
  \bottomrule
\end{tabular}

\end{document}

居中左对齐是可能的,但采用不同的方法。下面我使用了collcellect最后一列中的coll每个cell条目并检查它。如果数字小于 10,我们添加一个\phantom{0}

\documentclass{article}

\usepackage{booktabs,textcomp,collcell}

\newcommand{\padright}[1]{#1\ifnum#1<10 \phantom{0}\fi}

\begin{document}

\begin{tabular}{ c c >{\collectcell\padright}c<{\endcollectcell} }
  \toprule
  \textnumero & Symbol & \multicolumn{1}{c}{Number of Units} \\
  \midrule
  1 & A & 1  \\
  2 & B & 22 \\
  3 & C & 3  \\
  4 & D & 44 \\
  5 & E & 5  \\
  6 & F & 66 \\
  7 & G & 7  \\
  8 & H & 88 \\
  9 & I & 9  \\
  \bottomrule
\end{tabular}

\end{document}

需要根据需要扩展此管理更宽的元素。例如,以下是如何管理 100 个元素:

\newcommand{\padright}[1]{#1%
  \ifnum#1<10 \phantom{0}\fi
  \ifnum#1<100 \phantom{0}\fi}

或 1000 个:

\newcommand{\padright}[1]{#1%
  \ifnum#1<10 \phantom{0}\fi
  \ifnum#1<100 \phantom{0}\fi
  \ifnum#1<1000 \phantom{0}\fi}

答案2

根据实际表的全部范围,使用右对齐的 \Longstack数据可能就足够了。

[2016-07-28]注意软件包的版本,它使用\normalbaselineskip,它不受tabular环境对 的重新定义的影响\baselineskip。对于旧版本的软件包,只需\setstackgap{L}{\normalbaselineskip}在前言中添加即可。

\documentclass{article}
\usepackage{booktabs}
\usepackage{textcomp}
\usepackage{stackengine}[2016-07-28]
\begin{document}
\begin{tabular}{ccc}
\toprule
\textnumero & Symbol & Number of Units \\ \midrule
\Longstack[r]{1  2 3  4 5 6 7 8 9}&
\Longstack[c]{A  B C  D E F G H I}&
\Longstack[r]{9 10 7 12 2 3 4 5 5}\\
\bottomrule
\end{tabular}
\end{document}

在此处输入图片描述

相关内容