\diagbox 在多列和多行中行为不当

\diagbox 在多列和多行中行为不当

我正在尝试根据此图生成一个表格:

风险矩阵表图

我的 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):

编译后的 LaTeX 代码

我不确定为什么\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,因此无法使用命令将文本加粗\textbfdiagbox也无法使用\raisebox命令将文本diagbox很好地定位在命令中。

编译结果为:

使用 nicematrix 包编译 LaTeX 源代码

答案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}

上述代码的输出

相关内容