垂直居中对齐表格单元格内容

垂直居中对齐表格单元格内容

我需要将单元格内容垂直居中对齐。下面是“信道带宽”行值和其他行值的代码。

在此处输入图片描述

\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

为了使行中的内容垂直居中,请用 替换pm在第二个表中,我还应用了不规则右对齐,以消除较大的水平空白。

在此处输入图片描述

\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}

MWE 输出

  • 除了booktabs我使用的包之外siunitx。它允许您一致地排版数字和单位。在这个例子中,它并没有做太多事情,但始终使用它是个好主意。
  • 永远不要使用选项h!。如果您不想让表格浮动(即移动到不同位置),那么就不要将其放入浮动环境(table)。我建议不要给出放置选项,否则,只有在文档完成后才摆弄浮动放置。
  • 您不应center在浮动环境(tablefigure)内使用环境,因为它会引入额外的垂直空间。请改用\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}

MWE 输出


如果您有更多值以至于这种方法不再可行,那么最好将这些值放入其自己的表中的参数中。通常,将同类数据放在一列中比放在一行中更好。

相关内容