如何将表格中多列行下方的数字居中

如何将表格中多列行下方的数字居中

我正在制作包含带有数字间隔的列的表格,即两个数字用“--”分隔,或一个数字前面带有“<”或“>”。我尝试通过在表格环境中添加 @{} 来将“--”、“<”或“>”符号的位置居中,请参阅下面的代码。但是,即使“--”、“<”或“>”符号以这种方式垂直排列,它们也不会相对于上方的三列标题(“损坏间隔”)居中。如何使符号相对于其标题水平居中?

为了更容易看到 @{} 命令相对于列描述符(“l”、“c”和“r”)的位置,我在数字和“--”、“<”或“>”符号之间添加了垂直线。

在此处输入图片描述

\documentclass[10pt,a4paper,twosided]{article}
\begin{document}
\begin{table}[h]
\centering
\caption{My caption}
\begin{tabular}[h]{l |  r @{} |  @{}c@{} |  @{}  l  |  c}
\hline
Category&\multicolumn{3}{c|}{Damage Interval} & Comments \\
        &\multicolumn{3}{c|}{year} &     \\
\hline
Les           & 0.1&--&1       & com. a\\
Moderae       &   1&--&3       & com. b\\
Considerable  &   3&--&10      & com. c\\
Serious       &    &$>$&10     & com. d\\
\hline
\end{tabular}
\label{tab-label}
\end{table}
\end{document}

答案1

改良版。)最初,我提议为所有列分配一个自动确定的宽度,即将它们定义为tabu X列。数字列被定义为封装siunitx S列。然而,这种方法需要平衡列的相对宽度X,而这实际上是不必要的。

让所有列根据其内容*确定其宽度,并插入两个额外的空X列以使三个内部列居中,这样更自然(并且需要更少的努力)。它们的宽度可以通过指定表格的总宽度间接确定(参见代码中的注释),或者像示例中那样,通过使用tabu's spread功能直接设置,该功能告诉列<dimension>比其自然宽度更宽。标题multicolumn现在跨越五列,由于两个空X列的宽度相等,因此三个内部数据列居中。作为一个小缺点,与以前的版本相比,每行需要两个额外的“与”符号。

在此处输入图片描述

\documentclass[10pt,a4paper,twosided]{article}

\usepackage{tabu}
\usepackage{siunitx}    %number alignment
\usepackage{booktabs}   %prettify
\renewcommand{\arraystretch}{1.25}  %increase spacing
\begin{document}

\begin{table}[h]
\centering
\caption{My caption}
\vspace{\defaultaddspace}   %a space defined by booktabs
%X columns are spread 1em wider than their natural width
%if "spread 1em" is replaced by "to .7\textwidth", instead the width of the table would be specified and the X columns would stretch accordingly.
\begin{tabu} spread 1em {   l
                            X                   %adjustable-width empty column
                            S[table-format=2.1] %number format with one decimal
                            c
                            S[table-format=2.1] %same number format to keep column width equal
                            X                   %adjustable-width empty column
                            c}
\toprule
Category&\multicolumn{5}{c}{Damage Interval Year} & Comments \\\toprule
Les           && 0.1&--&1       && com. a\\
Moderae       &&   1&--&3       && com. b\\
Considerable  &&   3&--&10      && com. c\\
Serious       &&    &$>$&10     && com. d\\
\bottomrule
\end{tabu}
\label{tab-label}
\end{table}

\end{document}

X*但是,如果某些内容需要换行,则建议使用这些列。

答案2

如果跨度条目比其跨度的列宽,TeX 会将所有超出的宽度放在最后一列。因此通常需要避免这种情况发生,但这通常并不像人们希望的那样好。

在这里你可以做

在此处输入图片描述

用标题宽度的一半减去 -- 的宽度来填充空单元格

\documentclass[10pt,a4paper,twoside]{article}
\begin{document}
\begin{table}[h]
\centering
\caption{My caption}
\begin{tabular}[h]{l |  r @{} |  @{}c@{} |  @{}  l  |  c}
\hline
Category&\multicolumn{3}{c|}{Damage Interval} & Comments \\
        &\multicolumn{3}{c|}{year} &     \\
\hline
Les           & 0.1&--&1       & com. a\\
Moderae       &   1&--&3       & com. b\\
Considerable  &   3&--&10      & com. c\\
Serious       & 
\setbox0\hbox{Damage Interval}%
\setbox2\hbox{--}%
\dimen0\wd0
\advance\dimen0-\wd2
\mbox{}\kern0.5\dimen0   &$>$&10     & com. d\\
\hline
\end{tabular}
\label{tab-label}
\end{table}
\end{document}

注意,我必须修复 MWE 中一些其他不相关的错误,以避免出现错误和警告。

相关内容