我一直在尝试使用该包来获取对角分割表头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
命令实现,也可以使用中的makecell
键height=
和。宽度是借助 te包设置的,长度是。最后,我通过更改值 off替换了您的命令。width=
diagbox
eqparbox
eqboxwidth
\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}
基本上这个想法是这样的:
- 分配
[x=XXcm]
选项至\rotatebox
\rule
在 的第一个参数中放入两个s\diagbox
,一个只有水平尺寸,另一个只有垂直尺寸- 尝试调整s
XX
的值和大小,\rule
直到对齐正确。可能需要一些时间。上述代码中的值对于我的示例来说是正确的,但您必须通过尝试找到适合您的示例的值。