让tabu与diagbox更正确地协同工作

让tabu与diagbox更正确地协同工作

我已经花了 5 个小时与代码斗争。我该如何

\documentclass[english]{article}

\usepackage[allowlitunits]{siunitx}
\usepackage{booktabs}
\usepackage{tabu}
\usepackage{makecell}
\usepackage{blindtext}
\usepackage{diagbox}

\begin{document}

\newcolumntype{Z}{S[
    table-format=1.3,
    %tight-spacing=true,
    round-mode=places,
    round-precision=3]}
\newcommand\mycell[1]{\multicolumn{1}{>{\centering\arraybackslash}c}{\makecell{#1}}}

\begin{table}
    \begin{tabu} to \linewidth {X *{8}{Z}}
    \toprule
    \rowfont[c]\bfseries
    \fbox{\diagbox{method}{missing}}
                & \mycell{ 5\%\\(mean)} & \mycell{ 5\%\\(var)}
                & \mycell{10\%\\(mean)} & \mycell{10\%\\(var)}
                & \mycell{20\%\\(mean)} & \mycell{20\%\\(var)}
                & \mycell{50\%\\(mean)} & \mycell{50\%\\(var)} \\
    \midrule
    asdf        & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 \\
    asdf        & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 \\
    \bottomrule
    \end{tabu}
\end{table}

\blindtext

\end{document}

看起来不太糟糕

在此处输入图片描述

而实际上却适合:

  • 获取适合的第一列\diagbox
  • 禁忌是否真的适合\textwidth

事实上,如果我不使用\diagbox,禁忌仍然太宽:

在此处输入图片描述

我不确定第一个 X 是否实际上是我应该使用的。

\textwidth如果代码是-我只会让禁忌变得宽泛\begin{tabu} to 0.7\textwidth- 这对我来说没有多大意义。

答案1

编辑(2):

而不是tabu to使用tabu spread

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}

\usepackage[showframe]{geometry}
\usepackage{siunitx}
\usepackage{array, makecell, tabu}
\usepackage{diagbox}

\newcolumntype{Z}{S[
    table-format=1.3,
    round-mode=places,
    round-precision=3]}
\newcommand\mycell[1]{\multicolumn{1}{c}{\makecell{#1}}}% now text in \mycell (column headers) is bold

\begin{document}
\begin{table}
    \centering
    \small  % <-- smaller font size
\setlength\tabcolsep{1.5pt}% <-- smaller distances between columns
\renewcommand\arraystretch{1.2}% more open table (bigger vertical space between rows)
\begin{tabu} spread 6pt {X *{8}{Z}}
    \firsthline
\rowfont[c]\bfseries
    \diagbox[width=2.4cm]{method}{missing}
        & \mycell{ 5\%\\(mean)} & \mycell{ 5\%\\(variance)}
        & \mycell{10\%\\(mean)} & \mycell{10\%\\(variance)}
        & \mycell{20\%\\(mean)} & \mycell{20\%\\(variance)}
        & \mycell{50\%\\(mean)} & \mycell{50\%\\(variance)} \\
    \hline
KNN     & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 \\
MICE    & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 & 0.1234 \\
    \lasthline
    \end{tabu}
\end{table}
\end{document}

由于spread表格具有自然宽度,因此\textwidth需要手动调整才能使其宽度相等。在上面,MWE\tabcolsep通过“反复试验method, the same I did with font size and width of\diagbox”减少。

笔记: 正如我在答案的第一个版本中指出的那样, tabularxtabu是有缺陷的(this probably source of your trouble) and no more maintained. Instead it I will rather use

我删除了第一个版本的答案,显然没有人感兴趣:)

相关内容