![将右对齐的列置于表格标题下方的中央](https://linux22.com/image/341192/%E5%B0%86%E5%8F%B3%E5%AF%B9%E9%BD%90%E7%9A%84%E5%88%97%E7%BD%AE%E4%BA%8E%E8%A1%A8%E6%A0%BC%E6%A0%87%E9%A2%98%E4%B8%8B%E6%96%B9%E7%9A%84%E4%B8%AD%E5%A4%AE.png)
我有一张表格,其标题相对较长,包含一到两位数字。这是我的初始代码:
\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>}
。
这是一个类似的手动替代方案,使用\phantom
s:
\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}
居中左对齐是可能的,但采用不同的方法。下面我使用了collcell
ect最后一列中的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}