我想创建一个在主对角线上有一条线的 Latex 表。我的问题:diagbox 无法以正确的方式计算多行字段的高度。一个小例子:
\documentclass[a4paper]{article}
\usepackage{calc}
\usepackage{diagbox}
\begin{document}
\begin{tabular}{p{\textwidth*1/7}*{3}{|p{\textwidth*1/7}}}
\diagbox[innerwidth=\textwidth*1/7]{from}{to} & item1 & item2 & item3 \\\hline
item1 & \diagbox[innerwidth=\textwidth*1/7]{~}{~} & --- this --- is --- a --- very --- long --- multirow --- text --- & \\\hline
item2 & & \diagbox[innerwidth=\textwidth*1/7]{~}{~} & \\\hline
item3 & & & \diagbox[innerwidth=\textwidth*1/7]{~}{~}
\end{tabular}
\end{document}
我怎样才能连接对角线?
你好,帕特里克
答案1
我不知道为什么如果使用height=...
选项,\diagbox
以下多行单元格的文本会向下移动,但您可以通过添加一个来解决这个问题,\vspace{-...}
以便再次将其调出。
不过,我建议您重新设计表格,不要使用垂直规则、对角线框,并使用破折号作为对角线上单元格的文本。
\documentclass[a4paper]{article}
\usepackage{booktabs}
\usepackage{diagbox}
\begin{document}
\noindent With a little workaround:
\begin{center}
\begin{tabular}{p{\textwidth*1/7}*{3}{|p{\textwidth*1/7}}}
\diagbox[innerwidth=\textwidth*1/7]{from}{to} & item1 & item2 & item3 \\\hline
item1 & \diagbox[innerwidth=\textwidth*1/7,height=7\line]{~}{~} & \vspace{-9ex}--- this --- is --- a --- very --- long --- multirow --- text --- & \\\hline
item2 & & \diagbox[innerwidth=\textwidth*1/7]{~}{~} & \\\hline
item3 & & & \diagbox[innerwidth=\textwidth*1/7]{~}{~}
\end{tabular}
\end{center}
\noindent But I suggest to you to use something like this:
\begin{center}
\begin{tabular}{*{4}{p{\textwidth*1/7}}}
\toprule
& \multicolumn{3}{c}{To:}\\
\cmidrule{2-4}
From: & item1 & item2 & item3 \\
\midrule
item1 & \textemdash & --- this --- is --- a --- very --- long --- multirow --- text --- & \\
item2 & & \textemdash & \\
item3 & & & \textemdash \\
\bottomrule
\end{tabular}
\end{center}
\end{document}
答案2
环境{NiceTabular}
有nicematrix
一个内置命令\diagbox
,它总是绘制预期的对角线规则(事实上,该规则是在构建数组后用 PGF 绘制的)。
\documentclass[a4paper]{article}
\usepackage{nicematrix}
\usepackage{calc}
\begin{document}
\begin{NiceTabular}{p{\textwidth*1/7}*{3}{|p{\textwidth*1/7}}}
\diagbox{from}{to} & item1 & item2 & item3 \\\hline
item1 & \diagbox{}{} & --- this --- is --- a --- very --- long --- multirow --- text --- & \\\hline
item2 & & \diagbox{}{} & \\\hline
item3 & & & \diagbox{}{}
\end{NiceTabular}
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。