问题:我在这里制作了一个简单的表格。我的问题很简单,如何水平和垂直对齐表格内的文本?
梅威瑟:
\documentclass[12pt, a4paper]{article}
\usepackage[a4paper,top=1 in,bottom=1 in,left=0.7 in,right=0.7 in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[misc]{ifsym}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{parskip}
\usepackage{array,booktabs}
\begin{document}
\begin{table}[]
\centering
\caption{My caption}
\label{my-label}
\begin{tabular}{|l|l|}
\hline
2 & 120 \\ \hline
2 & 60 \\ \hline
2 & 30 \\ \hline
3 & 15 \\ \hline
5 & 5 \\ \hline
& 1 \\ \hline
\end{tabular}
\end{table}
\end{document}
答案1
对于水平居中,请使用c
(“center”)列类型而不是l
(“left-align”)列类型。
垂直居中可以通过多种方式实现。由于表格似乎主要包含数字,我建议您\setlength\extrarowheight{2.5pt}
在之后立即提供说明\begin{table}
。顺便说一句,“垂直居中”既有几何成分,也有美学成分:从狭窄的(即纯几何的)角度来看,完美居中的东西在(许多)人看来可能并不“看起来”居中。经验丰富的图片构图师和排字员通常会在上边缘比下边缘留出更多的空白,以使对象看起来居中。
\documentclass[12pt,a4paper]{article}
\usepackage[a4paper,vmargin=1in,hmargin=0.7in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[misc]{ifsym}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage{parskip,array,booktabs}
\begin{document}
\begin{table}
\setlength\extrarowheight{2.5pt}
\centering
\caption{My caption}
\label{my-label}
\begin{tabular}{|c|c|}
\hline
2 & 120 \\ \hline
2 & 60 \\ \hline
2 & 30 \\ \hline
3 & 15 \\ \hline
5 & 5 \\ \hline
& 1 \\ \hline
\end{tabular}
\end{table}
\end{document}
附录:如上所述,水平线之间的垂直“居中”问题既有几何方面,也有美学方面。以下屏幕截图显示了相同tabular
环境的四种变化,\extrarowheight
分别设置为 0、2、2.5 和 3 pt。在我看来,完全主观地说,额外增加 3pt 垂直行高的版本看起来“最好”,尽管数字上方的垂直空白明显多于下方。
然而,更重要的是不要忽视真正重要的事情,即创建一个视觉上吸引人且易于理解的表格。在我看来,担心如何正确居中行(水平和垂直)既是一种不必要的干扰,也是自找的干扰,因为存在大量垂直和水平线,而这些线经过深思熟虑后甚至不需要。也就是说,屏幕截图最右边的表格省去了所有垂直线和大多数水平线。很明显,完美间距的问题甚至不会出现在这个表格中,因为没有垂直线和内部水平线来分散读者的注意力。由于这种美学上的简化,读者(希望)会更容易集中注意力于内容的表格。
\documentclass[12pt,a4paper]{article}
\usepackage[a4paper,vmargin=1in,hmargin=0.7in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{array,booktabs}
\newcommand\mytab{%
\begin{tabular}[t]{|c|c|}\hline
2 & 120 \\ \hline
2 & 60 \\ \hline
2 & 30 \\ \hline
3 & 15 \\ \hline
5 & 5 \\ \hline
& 1 \\ \hline
\end{tabular}}
\begin{document}
\begin{table}
\centering
\setlength\extrarowheight{0pt} \mytab
\setlength\extrarowheight{2pt} \mytab
\setlength\extrarowheight{2.5pt} \mytab
\setlength\extrarowheight{3pt} \mytab
\setlength\extrarowheight{0pt} % back to zero
\begin{tabular}[t]{cr}
\toprule
2 & 120 \\
2 & 60 \\
2 & 30 \\
3 & 15 \\
5 & 5 \\
& 1 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案2
另一个解决方案是加载cellspace
包,它定义最小单元格与上方和下方单元格之间的垂直间距,在带有以字母为前缀的说明符的列中S
(或者C
如果您使用siunitx
)。我添加了caption
包,以便在标题和表格之间有一个合适的垂直间距(基本乳胶不会排列\abovecaptionskip
和的值\belowcaptionskip
标题多于桌子):
\documentclass[12pt, a4paper]{article}
\usepackage[a4paper,top=1 in,bottom=1 in,left=0.7 in,right=0.7 in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts, amssymb}
\usepackage{parskip}
\usepackage{array}
\usepackage{caption}
\usepackage{cellspace}
\setlength\cellspacetoplimit{4pt}
\setlength\cellspacebottomlimit{4pt}
\begin{document}
\begin{table}[]
\centering
\caption{My caption}
\label{my-label}
\begin{tabular}{|Sc|Sc|}
\hline
2 & 120 \\ \hline
2 & 60 \\ \hline
2 & 30 \\ \hline
3 & 15 \\ \hline
5 & 5 \\ \hline
& 1 \\ \hline
\end{tabular}
\end{table}
\end{document}