当表头较高时,表头中的对角线

当表头较高时,表头中的对角线

我一直在尝试使用该包来获取对角分割表头diagbox,但是遇到了问题。

这是一个显示该问题的工作示例:

    \documentclass[12pt, a4paper, twoside]{article}


\usepackage{diagbox} %table split headers
\usepackage{longtable} 
\usepackage{array}
\usepackage{rotating}

\newcommand{\tabred}{-4pt}
\newcommand*\rot{\rotatebox{90}}

\begin{document}

\begin{longtable}{
    | l<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}}
    |}

\hline

\diagbox[dir=NW]{Feature}{Tool}  & %THIS IS THE PROBLEM!

\rot{Tool Alpha}    & 
\rot{Tool Delta}    & 
\rot{Tool Gamma}    & 
\rot{Tool Theta} & 
\rot{Tool Upsilon} & 
\rot{\textbf{Tool X (our proposal) }}\\

%\midrule
\hline

Feature A - Fooing the Bar  & NO    & NO    & NO    & NO    & OK    & OK\\
Feature B - Barring the Foo & OK    & NO    & OK    & NO    & NO    & OK\\
\hline
\end{longtable}

\end{document}

问题是,由于我旋转了标题,它们变得非常高。从下图可以看出,这破坏了对角线的对齐:

在此处输入图片描述

如您所见,存在两个问题:对角线的西北端没有触及盒子的西北角,对角线的东南端没有触及东南角。

答案发布在这里:https://tex.stackexchange.com/a/215370/45766我已经能够使用\rule来修复角度,但绝不会同时出现。无论我怎么尝试,间距都会搞砸。

有任何想法吗?

答案1

我建议将最后一个旋转的标题设为双行。这可以通过* 中的\rothead\rotcell命令实现,也可以使用中的makecellheight=和。宽度是借助 te包设置的,长度是。最后,我通过更改值 off替换了您的命令。width=diagboxeqparboxeqboxwidth\tabred\tabcolsep

\documentclass[12pt, a4paper, twoside]{article}
\usepackage[utf8]{inputenc}
\usepackage{diagbox} %table split headers
\usepackage{longtable}
\usepackage{array}
\usepackage{rotating}
\usepackage{eqparbox}
\usepackage{makecell, caption, booktabs}

\begin{document}

\centering\settowidth\rotheadsize{\bfseries(our proposal)}
\renewcommand\theadalign{cl}\renewcommand\cellalign{cl}
\renewcommand\theadfont{\bfseries}
\renewcommand\tabcolsep{4pt}\renewcommand\arraystretch{1.25}
\begin{longtable}{
    |l |*{6}{c |} }%
    \hline
    \diagbox[height=1.2\rotheadsize, width=\dimexpr\eqboxwidth{AB}+2\tabcolsep\relax]%
    {\raisebox{1.5ex}{Feature}}{\raisebox{-5ex}{Tool}} & %THIS IS THE PROBLEM!
    \rotcell{Tool Alpha} &
    \rotcell{Tool Delta} &
    \rotcell{Tool Gamma} &
    \rotcell{Tool Theta} &
    \rotcell{Tool Upsilon} &
    \rothead{Tool X\\\mbox{(our proposal)}}\\
    \hline
    \eqmakebox[AB][l]{Feature A – Fooing the Bar} & NO & NO & NO & NO & OK & OK \\
    \eqmakebox[AB]{Feature B – Barring the Foo} & OK & NO & OK & NO & NO & OK \\
    \hline
  \end{longtable}

\end{document} 

在此处输入图片描述

答案2

在此处输入图片描述

我会完全放弃对角线规则。我认为没有必要,否则它不会像人们希望的那样提高可读性。这是一个使用相同数据的简单设计。

\documentclass[12pt, a4paper, twoside]{article}
\usepackage{longtable} 
\usepackage{booktabs}
\begin{document}

\begin{longtable}{lcc}\toprule
             & \multicolumn{2}{c}{Feature}\\ \cmidrule{2-3}
Tool         & A - Fooing the Bar & B - Barring the Foo \\ \midrule
Tool Alpha   & NO & OK \\
Tool Delta   & NO & NO \\
Tool Gamma   & NO & OK \\
Tool Theta   & NO & NO \\
Tool Upsilon & OK & NO \\
\textbf{Tool X (our proposal)} & OK &   OK \\ \bottomrule
\end{longtable}

\end{document}

答案3

环境{NiceTabular}nicematrix一个内置工具\diagbox。使用该工具,您可以直接获得预期的结果。

该包的主要缺点nicematrix是它创建了无法分解的表格......

\documentclass[12pt, a4paper, twoside]{article}
\usepackage{nicematrix}

\begin{document}

\begin{NiceTabular}{lcccccc}[vlines]
\Hline
\diagbox{\enskip Feature}{Tool} &
\RowStyle{\rotate}
Tool Alpha   & 
Tool Delta   & 
Tool Gamma   & 
Tool Theta   & 
Tool Upsilon & 
\textbf{Tool X (our proposal)} \\
\Hline
Feature A - Fooing the Bar  & NO    & NO    & NO    & NO    & OK    & OK\\
Feature B - Barring the Foo & OK    & NO    & OK    & NO    & NO    & OK\\
\Hline
\end{NiceTabular}

\end{document}

上述代码的输出

答案4

好吧,我在等待答案时通过反复试验“手动”解决了这个问题。这是我的解决方案:

    \documentclass[12pt, a4paper, twoside]{article}


\usepackage{diagbox} %table split headers
\usepackage{longtable} %multi-page tables
\usepackage{array}
\usepackage{rotating}

\newcommand{\tabred}{-4pt}
\newcommand*\rot{\rotatebox[x=2.32cm]{90}}

\begin{document}

\begin{longtable}{
    | l<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}} 
    | >{\hspace{\tabred}}c<{\hspace{\tabred}}
    |}

\hline

\diagbox[dir=NW]{\rule{0mm}{4.2cm}\rule{0.9cm}{0cm}Feature}{Tool}  &

\rot{Tool Alpha}    & 
\rot{Tool Delta}    & 
\rot{Tool Gamma}    & 
\rot{Tool Theta} & 
\rot{Tool Upsilon} & 
\rot{\textbf{Tool X (our proposal) }}\\

%\midrule
\hline

Feature A - Fooing the Bar  & NO    & NO    & NO    & NO    & OK    & OK\\
Feature B - Barring the Foo & OK    & NO    & OK    & NO    & NO    & OK\\
\hline
\end{longtable}

\end{document}

基本上这个想法是这样的:

  1. 分配[x=XXcm]选项至\rotatebox
  2. \rule在 的第一个参数中放入两个s \diagbox,一个只有水平尺寸,另一个只有垂直尺寸
  3. 尝试调整sXX的值和大小,\rule直到对齐正确。可能需要一些时间。上述代码中的值对于我的示例来说是正确的,但您必须通过尝试找到适合您的示例的值。

结果如下:
在此处输入图片描述

相关内容