格式化禁忌表

格式化禁忌表

对于此 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]\bfseriesS

在此处输入图片描述

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

相关内容