我需要将单元格内容垂直居中对齐。下面是“信道带宽”行值和其他行值的代码。
\documentclass{article}
\usepackage{array}
\begin{document}
\begin{table}[h!]
\begin{center}
\begin{tabular}{ | p{3cm} | m{1cm} | c | c | c | c | c | c | }
\hline
Parameter & Units & \multicolumn{6}{|c|}{Values} \\
\hline
Channel Bandwidth & MHz & 1.25 & 2.5
& 5 & 10 & 15 & 20 \\
\hline
Frame duration & ms & \multicolumn{6}{|c|}{10} \\
\hline
Sub-frame duration & ms & \multicolumn{6}{|c|}{1} \\
\hline
Sub-carrier spacing & kHz & \multicolumn{6}{|c|}{15} \\
\hline
Sampling Frequency & MHz & 1.92 & 3.84 & 7.68 & 15.36 & 23.04 & 30.72 \\
\hline
\end{tabular}
\end{center}
\end{table}
\end{document}
答案1
为了使行中的内容垂直居中,请用 替换p
。m
在第二个表中,我还应用了不规则右对齐,以消除较大的水平空白。
\documentclass{article}
\usepackage{array}
\usepackage{ragged2e}
\begin{document}
\begin{table}[h!]
\centering
\begin{tabular}{ | m{3cm} | m{1cm} | c | c | c | c | c | c | }
\hline
Parameter & Units & \multicolumn{6}{c|}{Values} \\
\hline
Channel Bandwidth & MHz & 1.25 & 2.5
& 5 & 10 & 15 & 20 \\
\hline
Frame duration & ms & \multicolumn{6}{c|}{10} \\
\hline
Sub-frame duration & ms & \multicolumn{6}{c|}{1} \\
\hline
Sub-carrier spacing & kHz & \multicolumn{6}{c|}{15} \\
\hline
Sampling Frequency & MHz & 1.92 & 3.84 & 7.68 & 15.36 & 23.04 & 30.72 \\
\hline
\end{tabular}
\end{table}
\begin{table}[h!]
\centering
\begin{tabular}{ | >{\RaggedRight}m{3cm} | c | c | c | c | c | c | c | }
\hline
Parameter & Units & \multicolumn{6}{c|}{Values} \\
\hline
Channel Bandwidth & MHz & 1.25 & 2.5
& 5 & 10 & 15 & 20 \\
\hline
Frame duration & ms & \multicolumn{6}{c|}{10} \\
\hline
Sub-frame duration & ms & \multicolumn{6}{c|}{1} \\
\hline
Sub-carrier spacing & kHz & \multicolumn{6}{c|}{15} \\
\hline
Sampling Frequency & MHz & 1.92 & 3.84 & 7.68 & 15.36 & 23.04 & 30.72 \\
\hline
\end{tabular}
\end{table}
\end{document}
就我个人而言,我会将l
类型列用作第一列(和第二列),并删除所有垂直线和大部分水平线。也许您还可以将帧持续时间、子帧持续时间和子载波间隔的值(无论信道带宽如何,这些值似乎都是相同的)放入表格的标题中。
答案2
我认为您的表格的主要问题是六个数字列的宽度不相等,因此数字 10、1 和 15 没有放在空间的中间。为了解决这个问题,我建议您使用环境tabularx
并对六个数字列使用居中版本的列类型。相反,我还建议您对前两列X
使用基本列类型。l
您还应该替换所有四个实例
\multicolumn{6}{|c|}{...}
和
\multicolumn{6}{c|}{...}
以避免创建双倍宽度的垂直线。
\documentclass{article}
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}
\begin{table}[h!]
\setlength\extrarowheight{2pt}
\setlength\tabcolsep{4pt}
\begin{tabularx}{\textwidth}{ | l | l | *{6}{C|} }
\hline
Parameter & Units& \multicolumn{6}{c|}{Values} \\
\hline
Channel Bandwidth & MHz & 1.25 & 2.5 & 5 & 10 & 15 & 20 \\
\hline
Frame duration & ms & \multicolumn{6}{c|}{10} \\
\hline
Sub-frame duration & ms & \multicolumn{6}{c|}{\phantom{0}1} \\
\hline
Sub-carrier spacing & kHz & \multicolumn{6}{c|}{15} \\
\hline
Sampling Frequency & MHz & 1.92 & 3.84 & 7.68 & 15.36 & 23.04 & 30.72 \\
\hline
\end{tabularx}
\end{table}
\end{document}
答案3
我认为值得指出的是,通过重新评估设计选择可以避免很多表格问题。我建议阅读数据监狱和booktabs
文档,以大致了解什么是好的表格排版。如果您仍然遇到布局问题,请毫不犹豫地考虑以不同的方式排列数据。
考虑到这一点,以下布局是一种选择。
\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{table}
\centering
\sisetup{list-final-separator={, }}
\begin{tabular}{l r l}\toprule
Parameter & Unit & Values \\\midrule
channel bandwidth & \si{\mega\hertz} & \numlist{1.25; 2.5; 5; 10; 15; 20} \\
frame duration & \si{\milli\second} & \num{10} \\
sub-frame duration & \si{\milli\second} & \num{1} \\
sub-carrier spacing & \si{\kilo\hertz} & \num{15} \\
sampling frequency & \si{\mega\hertz} & \numlist{1.92; 3.84; 7.68; 15.36; 23.04; 30.72} \\\bottomrule
\end{tabular}
\end{table}
\end{document}
- 除了
booktabs
我使用的包之外siunitx
。它允许您一致地排版数字和单位。在这个例子中,它并没有做太多事情,但始终使用它是个好主意。 - 永远不要使用选项
h!
。如果您不想让表格浮动(即移动到不同位置),那么就不要将其放入浮动环境(table
)。我建议不要给出放置选项,否则,只有在文档完成后才摆弄浮动放置。 - 您不应
center
在浮动环境(table
或figure
)内使用环境,因为它会引入额外的垂直空间。请改用\centering
。 - 尽量在使用大写字母时保持一致。我将所有参数名称都设为小写,但您可以选择不同的(一致)惯例。
如果通道带宽和采样频率的值不是独立变化的(我怀疑这里就是这种情况),最好将它们移动到彼此旁边,以便它们形成自己的小表。
\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{table}
\centering
\begin{tabular}{l r *{6}{S[table-format=2.2]}}\toprule
Parameter & Unit & \multicolumn{6}{l}{Values} \\\midrule
frame duration & \si{\milli\second} & 10 \\
sub-frame duration & \si{\milli\second} & 1 \\
sub-carrier spacing & \si{\kilo\hertz} & 15 \\
sampling frequency & \si{\mega\hertz} & 1.92 & 3.84 & 7.68 & 15.36 & 23.04 & 30.72 \\
channel bandwidth & \si{\mega\hertz} & 1.25 & 2.5 & 5 & 10 & 15 & 20 \\\bottomrule
\end{tabular}
\end{table}
\end{document}
如果您有更多值以至于这种方法不再可行,那么最好将这些值放入其自己的表中的参数中。通常,将同类数据放在一列中比放在一行中更好。