我正在使用booktabs
和siunitx
用于在表格中排版科学数量的包。
众所周知,对于长列标题-- 使用multicolumn
命令创建booktabs
包——额外的列宽被分配给 的最后一列multicolumn
。下表 1 显示了一个示例(显示垂直网格以强调列宽)。
我注意到siunitx
包中有一个选项table-column-width
可以设置固定列宽。我决定尝试使用此选项强制我的三个标记为的列的multicolumn
宽度均为标题宽度的三分之一multicolumn
。
因此,在下面的 MWE 中,我使用\newlength
和\settowidth
multicolumn
以 pt 为单位存储航向的长度myl
。使用\the\myl
表明multicolumn
标题是128.6415pt。128.6415 除以 3 大约等于 42.88,因此在下面的表 2 中,我将每一列table-column-width
设置为。42.88pt
multicolumn
表 2 看起来比表 1 好一些,但是为什么的总宽度multicolumn
明显大于的视在宽度Long parameter, $\alpha$ (\si{\kilo\newton\per\kilo\gram})
?
\documentclass{article}
\usepackage{amsmath,siunitx,booktabs}
\sisetup{%
detect-family, detect-shape, detect-weight, detect-mode,
product-units = power,
list-final-separator = {, and },
retain-explicit-plus,
input-comparators = {<=>\approx\ge\geq\gg\le\leq\ll\sim\lesssim\gtrsim}
}
\begin{document}
% Table 1
\begin{table}[!h]
\centering
\begin{tabular}{l|
S[table-format=1.1,table-number-alignment=left]|
S[table-format=1.1,table-number-alignment=left]|
S[table-format=1.1,table-number-alignment=left]|}
\toprule
& \multicolumn{3}{c}{Long parameter, $\alpha$ (\si{\kilo\newton\per\kilo\gram})} \\
\cmidrule(lr){2-4}
& {$\alpha_1$} & {$\alpha_2$} & {$\alpha_3$} \\
Trial A & 1.1 & 2.2 & 3.3 \\
\bottomrule
\end{tabular}\caption{Problem (MWE)}
\end{table}
% Store the length of the multicolumn header in \myl
\newlength{\myl}
\settowidth{\myl}{Long parameter, $\alpha$ (\si{\kilo\newton\per\kilo\gram})}
\the\myl
% Table 2
\begin{table}[!h]
\centering
\begin{tabular}{l|
S[table-format=1.1,table-number-alignment=left,table-column-width=42.88pt]|
S[table-format=1.1,table-number-alignment=left,table-column-width=42.88pt]|
S[table-format=1.1,table-number-alignment=left,table-column-width=42.88pt]|}
\toprule
& \multicolumn{3}{c}{Long parameter, $\alpha$ (\si{\kilo\newton\per\kilo\gram})} \\
\cmidrule(lr){2-4}
& {$\alpha_1$} & {$\alpha_2$} & {$\alpha_3$} \\
Trial A & 1.1 & 2.2 & 3.3 \\
\bottomrule
\end{tabular}\caption{Attempt at solution}
\end{table}
\end{document}
答案1
像这样?
最后三列应具有相等且足够长的宽度。您可以考虑X
列类型(在tabularx
和tabularray
包中定义),然后相应地设置表格宽度(通过试验)。对于后一种选择,MWE 为:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularray}
\UseTblrLibrary{booktabs, siunitx, varwidth}
\begin{document}
\begin{table}[ht]
\centering
\sisetup{table-format=1.1, table-number-alignment=left}
\begin{tblr}{width=0.6\linewidth,
vlines,
colspec = {l *{3}{X[c, si]} },
row{2} = {mode=math},
measure = vbox
}
\toprule
& \SetCell[c=3]{c} {{{Long parameter, $\alpha$ (\si{\kilo\newton\per\kilo\gram})}}}
& & \\
\cmidrule{2-4}
& {{{\alpha_1}}} & {{{\alpha_2}}} & {{{\alpha_3}}} \\
\midrule
Trial A & 1.1 & 2.2 & 3.3 \\
\bottomrule
\end{tblr}
\caption{Problem (MWE)}
\end{table}
\end{document}
编辑:
或者通过多列单元格的宽度计算列宽在这种情况下您需要定义新的长度,例如\colwidth
:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularray}
\UseTblrLibrary{booktabs, siunitx, varwidth}
\newlength{\colwidth}
\begin{document}
\begin{table}[ht]
\centering
\sisetup{table-format=1.1, table-number-alignment=left}
\settowidth\colwidth{Long parameter, $\alpha$ (\si{\kilo\newton\per\kilo\gram})}
\begin{tblr}{vlines,
colspec = {l *{3}{Q[c, si, wd=\colwidth/3]} },
row{2} = {mode=math},
measure = vbox
}
\toprule
& \SetCell[c=3]{c} {{{Long parameter, $\alpha$ (\si{\kilo\newton\per\kilo\gram})}}}
& & \\
\cmidrule{2-4}
& {{{\alpha_1}}} & {{{\alpha_2}}} & {{{\alpha_3}}} \\
\midrule
Trial A & 1.1 & 2.2 & 3.3 \\
\bottomrule
\end{tblr}
\caption{Problem (MWE)}
\end{table}
\end{document}
顺便说一句,带数字的单元格格式有点不寻常。人们更喜欢将数字和列标题居中:
如果您喜欢这个,请table-number-alignment=left
从中删除选项\sisetup
。
编辑(2):
最后使用标准表格并定义 S
列宽来解决。以下是设置的顺序:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularx}
\usepackage{makecell, siunitx}
\newlength{\colwidth}
\begin{document}
\begin{table}[ht]
\centering
\renewcommand\arraystretch{1.2}
\settowidth\colwidth{Long parameter, $\alpha$ (\si{\kilo\newton\per\kilo\gram})}
\sisetup{table-format=1.1,
table-column-width=\colwidth/3}
\begin{tabular}{ | l |*{3}{S|} }
\Xhline{1pt}
& \multicolumn{3}{c|}{Long parameter, $\alpha$ (\si{\kilo\newton\per\kilo\gram})}
\\
\Xcline{2-4}{0.5pt}
& {$\alpha_1$} & {$\alpha_2$} & {$\alpha_3$} \\
\Xhline{0.5pt}
Trial A & 1.1 & 2.2 & 3.3 \\
\Xhline{1pt}
\end{tabular}
\caption{Problem (MWE)}
\end{table}
\end{document}
结果和以前一样。