我有这个 latex 表格,如何才能将每个列中的每个值居中,它似乎没有居中并且向左移动。还有什么建议可以让它更专业一点吗?
\begin{table}[h!]
\centering
\begin{tabular}{ |m{1cm}||m{2cm}|m{2cm}|m{2cm}| m{2cm}|m{2cm}|m{2cm}| }
\hline
Graph & Maximum Degree & Minimum Degree & Average Degree & Profit Change & Mean Price Change & Price Variance Change\\
\hline
1 & 5 & 4 & 4 & 5 & 6 & 7 \\
2 & 4 & 4 & 2 & & 5 & 7 \\
3 & 3 & 3 & 3 & 4 & 7 & 8 \\
\hline
\end{tabular}
\caption{Table to test captions and labels}
\label{table:1}
\end{table}
提前谢谢您!注意安全 :)
答案1
我怎样才能使每一列的每个值居中,看起来它似乎没有居中并且向左移动。
列m
类型执行垂直的单元格内容居中,而不是水平居中。是可以创建一个将m
单元格内容居中的列类型版本。但是,必须为六个数据列设置绝对列宽仍然有点笨拙。我建议您切换到环境tabularx
并让 LaTeX 计算六个数据列的列宽。此更改的结果显示在下面的表 1 中。
还有什么建议可以使其更专业一些吗?
虽然表格 1 将列内容居中,并保证适合文本块,但结果却相当乏味。所有这些垂直条都营造出一种毫无新意的“监狱窗户网格”外观,而且水平线的间距也不太好。我有两个建议。
只需删除所有竖线,并
\hline
用 、 和 指令替换指令即可\toprule
。\midrule
(\bottomrule
后面的宏由包提供booktabs
。)此更改的结果显示在下面的表 2 中。与表 1 相比,该表的特点是“外观”更加开放。虽然我很乐意说表 2 比表 1 好看,但它仍然缺乏视觉分组和节奏。有人可能会问:“如果有的话,各列之间的关系是什么?”在表 3 中,我建议重新组织标题单元格,以指示各列之间迄今为止隐藏的层次结构。使此层次结构清晰可见不仅有助于提高表格的视觉吸引力,还应该有助于读者了解表格的全部内容。
\documentclass{article}
\usepackage{tabularx,ragged2e}
\newcolumntype{C}{>{\Centering\arraybackslash}X} % centered version of 'X' col. type
\renewcommand{\tabularxcolumn}[2]{m{#1}} % omit if vertical centering isn't needed
\usepackage{booktabs} % for \toprule, \midrule, and \bottomrule macros
\begin{document}
\begin{table}[h!]
\setlength\tabcolsep{3pt} % default: 6pt
\begin{tabularx}{\textwidth}{ |c||*{6}{C|}}
\hline
Graph & Maximum Degree & Minimum Degree & Average Degree & Profit Change & Mean Price Change & Price Variance Change\\
\hline
1 & 5 & 4 & 4 & 5 & 6 & 7 \\
2 & 4 & 4 & 2 & & 5 & 7 \\
3 & 3 & 3 & 3 & 4 & 7 & 8 \\
\hline
\end{tabularx}
\caption{Lots of vertical lines, poorly-spaced horizontal lines}\label{table:1}
\vspace{1cm}
\begin{tabularx}{\textwidth}{@{} l *{6}{C} @{}}
\toprule
Graph & Maximum Degree & Minimum Degree & Average Degree & Profit Change & Mean Price Change & Price Variance Change\\
\midrule
1 & 5 & 4 & 4 & 5 & 6 & 7 \\
2 & 4 & 4 & 2 & & 5 & 7 \\
3 & 3 & 3 & 3 & 4 & 7 & 8 \\
\bottomrule
\end{tabularx}
\caption{No vertical lines, well-spaced horizontal lines}\label{table:2}
\vspace{1cm}
\begin{tabularx}{\textwidth}{@{} l *{6}{C} @{}}
\toprule
Graph & \multicolumn{3}{c}{Degree} & \multicolumn{3}{c@{}}{Change}\\
\cmidrule(lr){2-4} \cmidrule(l){5-7}
& Maximum & Minimum & Average & Profit & Mean Price & Price Variance \\
\midrule
1 & 5 & 4 & 4 & 5 & 6 & 7 \\
2 & 4 & 4 & 2 & & 5 & 7 \\
3 & 3 & 3 & 3 & 4 & 7 & 8 \\
\bottomrule
\end{tabularx}
\caption{Clearer header structure}\label{table:3}
\end{table}
\end{document}
答案2
假设表中的数字现在是虚拟的,但实际表中的数字将是十进制数,例如有两个整数和三个小数位。在这种情况下,您可以考虑使用包S
定义的列siunitx
并将数字对齐到小数点:
\documentclass{article}
\usepackage{geometry}
\usepackage{booktabs, multirow}
\usepackage{siunitx}
\begin{document}
\begin{table}[h!]
\caption{Table to test captions and labels}
\label{table:1}
\centering
\begin{tabular}{c *{6}{S[table-format=2.3]} }
\toprule
\multirow{2.4}{*}{Graph}
& \multicolumn{3}{c}{Degree}
& \multicolumn{3}{c}{Change} \\
\cmidrule(lr){2-4}
\cmidrule(l){5-7}
& {Maximum} & {Minimum} & {Average}
& {Profit} & {Mean Price} & { Variance} \\
\midrule
1 & 5.67 & 1.23 & 2.45 & 15.671 & 6.789 & 7.89 \\
2 & 11.23 & 2.34 & 6.785 & & 5.678 & 7.891 \\
3 & 7.89 & 3.45 & 5.67 & 4.567 & 7.89 & 8.912 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案3
\documentclass{article}
\usepackage{booktabs}
\usepackage{graphicx}
\usepackage{array}
\begin{document}
\begin{table}[h!]
\centering
\begin{tabular}{ccccccc } \toprule
Graph & Maximum & Minimum & Average & Profit & Mean Price & Price Variance\\
&Degree & Degree &Degree &Change &Change &Change\\ \midrule
1 & 5 & 4 & 4 & 5 & 6 & 7 \\
2 & 4 & 4 & 2 & & 5 & 7 \\
3 & 3 & 3 & 3 & 4 & 7 & 8 \\\bottomrule
\end{tabular}
\caption{Table to test captions and labels}
\label{table:1}
\end{table}
\end{document}