专业的 slashbox 替代品

专业的 slashbox 替代品

假设我有下表,其中列出了转换规则,其中行表示输入,列表示输出类型(因此,例如,转换int8_t -> int16_t将使用b,而int16_t -> int8_t将使用g):

桌子

这个答案列出了使用 a 的替代方案\slashbox(我最初会使用 a),这些替代方案看起来更专业。但是,他们示例中的第二个表对我来说似乎不直观/不清楚,而对于第三个表,让我感到困惑的是,在他们的示例中,行和列的域不同,因此没有必要定义行是否映射到房间,列是否映射到日期或反之亦然。

考虑到这一点,我能想到的最好的方案就是上面的方案,但看起来不太好(并且使用了垂直线,我想避免这种情况,但如果没有它,表格的含义就根本不清楚)。排版这样的表格的最佳实践是什么?

上面示例的代码:

\begin{table}
  \centering
    \begin{tabular}{rr|rrrrrr}
    \toprule
          &       & \multicolumn{6}{c}{Output}                    \\
    \midrule
          &       & int8\_t & int16\_t & int32\_t & uint8\_t & uint16\_t & uint32\_t \\
    \multirow{6}[0]{*}{\begin{sideways}Input\end{sideways}} & int8\_t & a     & b & c & d     & e & f \\
     & int16\_t & g     & h & i & j     & k & l \\
     & int32\_t & m     & n & o & p     & q & r \\
     & uint8\_t & s     & t & u & v     & w & x \\
     & uint16\_t & y     & z & a & b     & c & d \\
     & uint32\_t & e     & f & g & h     & i & j \\
    \bottomrule
    \end{tabular}%
  \label{tab:addlabel}%
\end{table}%

答案1

首先,正如我在评论中所建议的那样,我宁愿有\midrule下面一行:

几乎原始的桌子

我认为将“输出”与标题分组在逻辑上更有意义,就像您对“输入”所做的那样。

作为替代方案,slashbox还有diagbox。文档中的描述指出:

diagbox是 的现代替代品slashbox

我也更喜欢它,它更容易定制,对角线(现在用 绘制pict2e)也好看多了。下面是一个使用它的例子:

\begin{table}
  \centering
    \begin{tabular}{l|*{6}r}
    \toprule
    \diagbox{Input}{Output} & int8\_t & int16\_t & int32\_t & uint8\_t & uint16\_t & uint32\_t \\
    \midrule
    int8\_t & a & b & c & d & e & f \\
    int16\_t & g & h & i & j & k & l \\
    int32\_t & m & n & o & p & q & r \\
    uint8\_t & s & t & u & v & w & x \\
    uint16\_t & y & z & a & b & c & d \\
    uint32\_t & e & f & g & h & i & j \\
    \bottomrule
    \end{tabular}%
  \label{tab:addanotherlabel}%
\end{table}%

诊断框表

总体来说,这是一个不错的结果,但我对“输出”的位置有点不满意,所以我调整了表格。(幸运的是,diagbox它相当灵活。)我得出的最终结果是经过大量修改的版本(但在我看来,视觉上最吸引人):

\begin{table}
  \centering
    \begin{tabular}{l|*{6}r}
    \toprule
    %\backslashbox{Input}{Output} & int8\_t & int16\_t & int32\_t & uint8\_t & uint16\_t & uint32\_t \\
    \diagbox[width=2.5cm, height=2.5cm]{\raisebox{5pt}{\hspace*{0.25cm}Input}}{\raisebox{-1.27cm}{\rotatebox{90}{Output}}} & \raisebox{-0.25cm}{\rotatebox{90}{int8\_t}} & \raisebox{-0.25cm}{\rotatebox{90}{int16\_t}} & \raisebox{-0.25cm}{\rotatebox{90}{int32\_t}} & \raisebox{-0.25cm}{\rotatebox{90}{uint8\_t}} & \raisebox{-0.25cm}{\rotatebox{90}{uint16\_t}} & \raisebox{-0.25cm}{\rotatebox{90}{uint32\_t}} \\
    \midrule\\
    \hspace*{0.25cm}int8\_t & a & b & c & d & e & f \\ \\
    \hspace*{0.25cm}int16\_t & g & h & i & j & k & l \\ \\
    \hspace*{0.25cm}int32\_t & m & n & o & p & q & r \\ \\
    \hspace*{0.25cm}uint8\_t & s & t & u & v & w & x \\ \\
    \hspace*{0.25cm}uint16\_t & y & z & a & b & c & d \\ \\
    \hspace*{0.25cm}uint32\_t & e & f & g & h & i & j \\ \\
    \bottomrule
    \end{tabular}%
  \label{tab:addlabel}%
\end{table}%

最终诊断框表

最后要说的是,我认为垂直线有时是必要的,在这里使用垂直线也没什么不妥。它是一种视觉指南,有助于将表格中的逻辑组(例如,标题和原始数据)区分开来。(有关讨论,请参见此处:为什么不在表格中使用垂直线('|')?

答案2

没有垂直规则,也没有垂直单词。输入列顶部可以写上“输入”一词,输出列可以轻松分组。我建议两种可能性。

\documentclass{article}
\usepackage{booktabs}

\begin{document}

\begin{tabular}{l*{6}{c}}
\toprule
& \multicolumn{6}{c}{Output} \\
\cmidrule(lr){2-7}
Input & int8\_t & int16\_t & int32\_t & uint8\_t & uint16\_t & uint32\_t \\
\midrule
int8\_t & a & b & c & d & e & f \\
int16\_t & g & h & i & j & k & l \\
int32\_t & m & n & o & p & q & r \\
uint8\_t & s & t & u & v & w & x \\
uint16\_t & y & z & a & b & c & d \\
uint32\_t & e & f & g & h & i & j \\
\bottomrule
\end{tabular}

\bigskip

\begin{tabular}{l*{6}{c}}
\toprule
& \multicolumn{6}{c}{Output} \\
\cmidrule(lr){2-7}
Input & int8\_t & int16\_t & int32\_t & uint8\_t & uint16\_t & uint32\_t \\
\cmidrule(lr){1-1}
\cmidrule(lr){2-7}
int8\_t & a & b & c & d & e & f \\
int16\_t & g & h & i & j & k & l \\
int32\_t & m & n & o & p & q & r \\
uint8\_t & s & t & u & v & w & x \\
uint16\_t & y & z & a & b & c & d \\
uint32\_t & e & f & g & h & i & j \\
\bottomrule
\end{tabular}

\end{document}

在此处输入图片描述

相关内容