我正在制作包含带有数字间隔的列的表格,即两个数字用“--”分隔,或一个数字前面带有“<”或“>”。我尝试通过在表格环境中添加 @{} 来将“--”、“<”或“>”符号的位置居中,请参阅下面的代码。但是,即使“--”、“<”或“>”符号以这种方式垂直排列,它们也不会相对于上方的三列标题(“损坏间隔”)居中。如何使符号相对于其标题水平居中?
为了更容易看到 @{} 命令相对于列描述符(“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 中一些其他不相关的错误,以避免出现错误和警告。