![\diagbox 在多列和多行中行为不当](https://linux22.com/image/425982/%5Cdiagbox%20%E5%9C%A8%E5%A4%9A%E5%88%97%E5%92%8C%E5%A4%9A%E8%A1%8C%E4%B8%AD%E8%A1%8C%E4%B8%BA%E4%B8%8D%E5%BD%93.png)
我正在尝试根据此图生成一个表格:
我的 LaTeX 代码基于在https://tex.stackexchange.com/a/269273/231499。
我的尝试;源代码:
\documentclass{article}
\usepackage{diagbox}
\usepackage{makecell}
\usepackage{float}
\usepackage{multirow}
\usepackage{rotating}
\begin{document}
\begin{table}[H]
\centering\settowidth\rotheadsize{Improbable1/}
\renewcommand\cellalign{cl}
\renewcommand\arraystretch{1.25}
\begin{tabular}{| >{\bfseries}l | >{\bfseries}c | *{5}{c |} }
\hline
\multicolumn{2}{|c|}{\multirow{2}{*}
{\textbf{\diagbox[height=\rotheadsize]
{\raisebox{2ex}{Severity}}{\raisebox{10ex}{Likelihood}}}}}
& \rotcell{\textbf{Improbable}}
& \rotcell{\textbf{Remote}}
& \rotcell{\textbf{Occasional}}
& \rotcell{\textbf{Probable}}
& \rotcell{\textbf{Frequent}}\\
\cline{3-7}
\multicolumn{2}{|c|}{} & \textbf{1} & \textbf{2} & \textbf{3} & \textbf{4} & \textbf{5} \\
\hline
Negligible & 1 & 1 & 2 & 3 & 4 & 5 \\ \hline
Minor & 2 & 2 & 4 & 6 & 8 & 10 \\ \hline
Moderate & 3 & 3 & 6 & 9 & 12 & 15 \\ \hline
Severe & 4 & 4 & 8 & 12 & 16 & 20 \\ \hline
Catastrophic & 5 & 5 & 10 & 15 & 20 & 25 \\ \hline
\end{tabular}
\end{table}
\end{document}
但是这个 LaTeX 编译成这样(使用 Overleaf 和 pdfLaTeX 编译器和 TexLive v2020):
我不确定为什么\diagbox
在这种情况下会出现错误,因为对角线的位置严重错误。也许我误解height
了\diagbox
?
答案1
简单的解决方案是将diagbox插入第二行,行数为负数,并更准确地定义diagbox高度。我认为这段代码可以产生您想要的结果:
\documentclass{article}
\usepackage{diagbox}
\usepackage{makecell}
\usepackage{float}
\usepackage{multirow}
\usepackage{rotating}
\usepackage{calc}
\begin{document}
\begin{table}[H]
\centering\settowidth\rotheadsize{Improbable1/}
\renewcommand\cellalign{cl}
\renewcommand\arraystretch{1.25}
\begin{tabular}{| >{\bfseries}l | >{\bfseries}c | *{5}{c |} }
\hline
\multicolumn{2}{|c|}{}
& \rotcell{\textbf{Improbable}}
& \rotcell{\textbf{Remote}}
& \rotcell{\textbf{Occasional}}
& \rotcell{\textbf{Probable}}
& \rotcell{\textbf{Frequent}}\\
\cline{3-7}
\multicolumn{2}{|c|}{\multirow{-5.9}{*}
{\textbf{\diagbox[height=\rotheadsize + 2.4\line]
{\raisebox{0.5ex}{Severity}}{\raisebox{-2ex}{\llap{Likelihood}}}}}}%
& \textbf{1} & \textbf{2} & \textbf{3} & \textbf{4} & \textbf{5} \\
\hline
Negligible & 1 & 1 & 2 & 3 & 4 & 5 \\ \hline
Minor & 2 & 2 & 4 & 6 & 8 & 10 \\ \hline
Moderate & 3 & 3 & 6 & 9 & 12 & 15 \\ \hline
Severe & 4 & 4 & 8 & 12 & 16 & 20 \\ \hline
Catastrophic & 5 & 5 & 10 & 15 & 20 & 25 \\ \hline
\end{tabular}
\end{table}
\end{document}
答案2
按照用户 leandriis 的建议,使用NiceTabular
来自包的命令:nicematrix
\documentclass{article}
\usepackage{makecell}
\usepackage{float}
\usepackage{multirow}
\usepackage{rotating}
\usepackage{nicematrix}
\begin{document}
\begin{table}[H]
\centering
\settowidth\rotheadsize{Improbable1/}
\renewcommand\arraystretch{1.25}
\begin{NiceTabular}{>{\bfseries}l >{\bfseries}c *{5}{c}}[hvlines]
\Block{2-2}{\diagbox{Severity}{Likelihood}}
&& \rothead{\textbf{Improbable}}
& \rothead{\textbf{Remote}}
& \rothead{\textbf{Occasional}}
& \rothead{\textbf{Probable}}
& \rothead{\textbf{Frequent}}\\
&& \textbf{1} & \textbf{2} & \textbf{3} & \textbf{4} & \textbf{5} \\
Negligible & 1 & 1 & 2 & 3 & 4 & 5 \\
Minor & 2 & 2 & 4 & 6 & 8 & 10 \\
Moderate & 3 & 3 & 6 & 9 & 12 & 15 \\
Severe & 4 & 4 & 8 & 12 & 16 & 20 \\
Catastrophic & 5 & 5 & 10 & 15 & 20 & 25 \\
\end{NiceTabular}
\end{table}
\end{document}
但是,nicematrix
该包存在无法调整其自身命令版本的问题diagbox
,因此无法使用命令将文本加粗\textbf
,diagbox
也无法使用\raisebox
命令将文本diagbox
很好地定位在命令中。
编译结果为:
答案3
以下是您可以使用的最新版本执行的操作nicematrix
。
在 中,您可以使用水平跳过(例如)和支柱(使用 LaTeX 命令插入宽度为 0 pt 的垂直规则)\diagbox
来更改两个文本的位置。\quad
\rule
\documentclass{article}
\usepackage{float}
\usepackage{nicematrix}
\begin{document}
\begin{table}[H]
\centering
\renewcommand\arraystretch{1.25}
\begin{NiceTabular}{>{\bfseries}l >{\bfseries}c *{5}{c}}[hvlines]
\Block{2-2}
{
\diagbox{\bfseries \quad \rule[-3mm]{0pt}{5mm}Severity}
{\bfseries \rule{0pt}{5mm}Likelihood\quad }
}
& \RowStyle[cell-space-limits=3pt]{\rotate\bfseries}
& Improbable
& Remote
& Occasional
& Probable
& Frequent \\
\RowStyle[bold]{}
&& 1 & 2 & 3 & 4 & 5 \\
Negligible & 1 & 1 & 2 & 3 & 4 & 5 \\
Minor & 2 & 2 & 4 & 6 & 8 & 10 \\
Moderate & 3 & 3 & 6 & 9 & 12 & 15 \\
Severe & 4 & 4 & 8 & 12 & 16 & 20 \\
Catastrophic & 5 & 5 & 10 & 15 & 20 & 25 \\
\end{NiceTabular}
\end{table}
\end{document}