对于此 MWE
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\RequirePackage{mathbbol}
\newcommand{\hmmax}{0}
\newcommand{\bmmax}{2}
\RequirePackage{bm}
\RequirePackage[allowlitunits]{siunitx}
\RequirePackage[usenames,dvipsnames,svgnames,table]{xcolor}
\RequirePackage{booktabs}
\RequirePackage{tabu}
\usepackage{diagbox}
\begin{document}
% \newcolumntype Z{X[c]{%
% S[group-four-digits=true,
% round-mode=places,
% round-precision=2,
% round-integer-to-decimal=true,
% per-mode=symbol]
% }}
\newcolumntype{Z}{S[
tight-spacing=true,
round-mode=places,
round-precision=2]}
\begin{tabu} to \textwidth {ZZZZZZ}
\toprule
\rowfont[c]\bfseries
\diagbox[width=8.5em]{method}{missing} & 0\% & 5\% & 10\% & 20\% & 50\% \\
\midrule
KNN & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
MICE & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
SimpleFill & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
SoftImpute & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
\bottomrule
\end{tabu}
\end{document}
我希望表格是这样的:
- 第一列左对齐
- 列标题居中对齐
- 主体列(0.123456)与 siunitx 的点对齐
- 第二列的宽度应为后面各列宽度的一半
- 第一列的宽度应为后面列的两倍(第二列的宽度应为第二列的四倍)。为此,我尝试过
X[2]
和X[0.5]
,但我无法将其转移到Z
列上。
我尝试了两种版本的 Z 定义,但不起作用。我该怎么办?
答案1
像这样?
编辑:
根据给定的 MWE,我假设表格的宽度必须为\textwidth
,列的比例必须为 4:1:2。这可以通过两种方式实现:
将列类型叠加
p{<width>}
到S
列类型。这可以通过使用\multicolumn{1}{>{\centering\arraybackslash}p{<width>}{...}
列标题来实现。<width>
是通过\textwidth
考虑列的宽度比(第一个更复杂的解决方案)来计算的\newlength\colwidth
<-- 用于确定列宽的新长度\setlength\colwidth{\dimexpr0.077\linewidth-\tabcolsep+\arrayrulewidth\relax}
<-- 计算基准列宽p{<width>}
根据所需的列宽比乘以基准宽度使用选项 `table-column-width=确定
S
列宽,其中基本列宽的计算方式与上述相同(第二个示例)
第一个解决方案:
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\RequirePackage{mathbbol}
\newcommand{\hmmax}{0}
\newcommand{\bmmax}{2}
\usepackage{bm}
\usepackage[allowlitunits]{siunitx}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{booktabs,tabu}
\usepackage{diagbox}
\newcolumntype{Z}{S[
table-format=1.2,% added
%tight-spacing=true,
round-mode=places,
round-precision=2]}
\newlength\colwidth% added
\setlength\colwidth{\dimexpr0.077\linewidth-\tabcolsep+\arrayrulewidth\relax}% added
\newcommand\mcp[2]{\multicolumn{1}{>{\centering\arraybackslash}p{#1\colwidth}}{#2}}% added
\begin{document}
\noindent
\begin{tabu} to \textwidth {p{4\colwidth} *{5}{Z}}% changed
\toprule
\rowfont[c]\bfseries
\diagbox[width=4\colwidth]{method}{missing} % changed
& \mcp{1}{0\%}
&\mcp{2}{5\%} & \mcp{2}{10\%}
& \mcp{2}{20\%}
& \mcp{2}{50\%} \\ % changed
\midrule
KNN & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
MICE & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
SimpleFill & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
SoftImpute & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
\bottomrule
\end{tabu}
\end{document}
第二种解决方案,由于与类型标题不兼容,因此无法使用tabu
宏,因此列标题不是粗体:\rowfont[c]\bfseries
S
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\RequirePackage{mathbbol}
\newcommand{\hmmax}{0}
\newcommand{\bmmax}{2}
\usepackage{bm}
\usepackage[allowlitunits]{siunitx}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{booktabs,tabu}
\usepackage{diagbox}
\newlength\colwidth% added
\setlength\colwidth{\dimexpr0.077\linewidth-\tabcolsep+\arrayrulewidth\relax}% added
\begin{document}
\noindent
\begin{tabu} to \textwidth {X % changed
S[table-column-width=\colwidth,% added
table-format=1.1]% added
*{4}{S[table-column-width=2\colwidth,% added
table-format=1.2,% added
round-mode=places,
round-precision=2]}
}
\toprule
%\rowfont[c]\bfseries
\diagbox[width=4\colwidth]{method}{missing}
& \SI{0}{\%} & \SI{5}{\%} & \SI{10}{\%} & \SI{20}{\%} & \SI{50}{\%} \\
\midrule
KNN & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
MICE & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
SimpleFill & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
SoftImpute & 0.0 & 0.123456 & 0.123456 & 0.123456 & 0.123456 \\
\bottomrule
\end{tabu}
\end{document}