如何创建像这样的紧凑的比较表?

如何创建像这样的紧凑的比较表?

如何创建这样的比较表?

在此处输入图片描述

特别是节省空间的倾斜标签和圆圈/半实圆圈。这些类型的表格似乎相当常见 --- 是否有专门用于创建此类表格的包?

此外,我认为已经有一个关于完全相同类型的表格的问题,但不幸的是它的标题和这个一样模糊,所以我无法找到它。

答案1

这是该表的部分重建。

\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\usepackage{booktabs}
\usepackage{fullpage}
\usepackage{graphicx}
\usepackage{threeparttable}
\usepackage{wasysym}

\begin{document}
\begin{table}
\footnotesize
\newcommand*\rot[1]{\hbox to1em{\hss\rotatebox[origin=br]{-60}{#1}}}
\newcommand*\feature[1]{\ifcase#1 -\or\LEFTcircle\or\CIRCLE\fi}
\newcommand*\f[3]{\feature#1&\feature#2&\feature#3}
\makeatletter
\newcommand*\ex[9]{#1\tnote{#2}&#3&%
    \f#4&\f#5&\f#6&\f#7&\f#8&\f#9&\expandafter\f\@firstofone
}
\makeatother
\newcolumntype{G}{c@{}c@{}c}
\begin{threeparttable}
\caption{Table caption here}
\label{tab:features}
\begin{tabular}{@{}lc GG !{\kern1em} GGG !{\kern1em} GG@{}}
\toprule
Scheme  & Example & \multicolumn{6}{c}{Security Features} & \multicolumn{9}{c}{Usability} & \multicolumn{6}{c}{Adoption}\\
\midrule
% rotated items
&& \rot{Network MitM Prevented}
 & \rot{Operator MitM Prevented}
 & \rot{Operator MitM Detected}
 %
 & \rot{Operator Accountability}
 & \rot{Key Revocation Possible}
 & \rot{Privacy Preserving}
 %
 & \rot{Automatic Key Initialization}
 & \rot{Low Key Maintenance}
 & \rot{Easy Key Discovery}
 %
 & \rot{Easy Key Recover}
 & \rot{In-Band}
 & \rot{No Shared Secrets}
 %
 & \rot{Alert-less Key Renewal}
 & \rot{Immediate Enrollment}
 & \rot{Inattentive User Resistant}
 %
 & \rot{Multiple Key Support}
 & \rot{No Service Provider}
 & \rot{No Auditing Required}
 %
 & \rot{No Name Squatting}
 & \rot{Asynchronous}
 & \rot{Scalable}\\
\midrule
\ex{Opportunistic Encryption}{\dag*}{TCPCrypt}            {000}{002} {222}{222}{222} {222}{222}\\
\ex{+TOFU (Strict)}{\dag}{-}                              {111}{102} {222}{022}{022} {022}{222}\\
\ex{+TOFU}{\dag*}{TextSecure}                             {111}{102} {222}{222}{020} {022}{222}\\
\midrule
\ex{Key Fringerprint Verification}{\dag*}{Threema}        {222}{212} {000}{002}{000} {022}{222}\\
\ex{+Short Auth Strings (Out-of-Band}{\dag*}{SilentText}  {222}{212} {000}{002}{000} {002}{202}\\
\ex{+Short Auth Strings (In-Band/Voice/Video}{\dag*}{ZRTP}{222}{212} {000}{012}{000} {022}{202}\\
\ex{+Socialist Millionaire (SMP)}{\dag*}{OTR}             {222}{212} {000}{020}{000} {022}{202}\\
\ex{+Mandatory Verification}{\dag*}{SafeSlinger}          {222}{212} {000}{020}{022} {022}{202}\\
\bottomrule
\end{tabular}
\begin{tablenotes}
\item \hfil$\feature2=\text{provides property}$; $\feature1=\text{partially provides property}$;
$\text{\feature0}=\text{does not provide property}$;
\item \hfil\textsuperscript{\dag}has academic publication;
\textsuperscript{*}end-user tool available
\end{tablenotes}    \end{threeparttable}

\end{table}

See~\ref{tab:features}.
\end{document}

在此处输入图片描述

一些评论。

  1. 我定义了\rot处理倾斜标签的旋转。它用于\rotatebox[origin=br]{-60}将标签绕右下角旋转 -60 度。它放置在一个宽度足够且左侧可以无限收缩的盒子内\hbox1em这样标签就会从盒子的左侧突出。
  2. 我不想一遍又一遍地输入包中的\LEFTcircle和,所以我定义了它接受一个参数(在本例中为 0、1 或 2)并生成适当的符号。(根据脚注,我可能应该这样称呼它。)\CIRCLEwasysym\feature\property
  3. 表格的主要部分分为 3 组,而这些组又分为 2 组或 3 组,每组 3 个。使用该array包,我创建了一种新的列类型G(用于组),它对应于三个居中的列,没有列间空间。我还定义了\f采用三位数字并生成组的三个特征(属性)。(我可能应该坚持\g使用组而不是\f特征。)
  4. 为了在组之间获得额外的空间,我使用array说明符在这些列之间!插入额外的空间\kern1em
  5. 每行在逻辑上由 10 个部分组成:方案、表格注释符号、示例和 7 组 3。TeX 仅支持最多 9 个参数的宏,因此当我创建\ex(本来是作为示例,但经过深思熟虑,与方案相关的内容会更好)时,它需要 9 个参数。前 3 个分别对应于方案、标记和示例。其余 6 个需要 3 位数字传递给\f。最后,第 10 个带括号的组使用 解开括号\@firstofone,然后传递给\f。我承认,这有点像 hack,但它使使用\ex更容易。
  6. threeparttable由标题、表格和下方的表注组成。
  7. 表格本身非常简单。我使用了booktabs\toprule\midrule\bottomrule排版水平线。(这看起来比 好多了\hline。)
  8. 在您的示例中,表格注释居中。我不得不花点功夫才能在这里做到这一点。特别是,我添加了一些\hfils。我认为不将注释居中看起来会更好。
  9. Scheme在您的示例中,由于某种原因略微缩进。我不明白这样做的意义,所以我没有这样做。添加\quad(或其他一些水平间距命令)可以重现这种情况。
  10. 如果我正在创建此表,我会将“示例”列排版为左对齐。我可能还会将该-列中的 替换为None或者可能只是将其留空。我可能还会将-主列中的 替换为短划线。我只是觉得这样看起来更好。方便的是,您只需将其替换---in\feature即可在所有地方进行更改,包括表格注释。

一些元评论。

  1. 要查找单个符号,您应该查看symbols-a4文档(运行texdoc symbols-a4)。
  2. 一般来说,要求 TeX SX 重现某些特定图像效果不太好。(我只是好奇想知道threeparttable我以前从未使用过什么,所以我尝试了一下。)发布一个最小示例来演示您尝试过的方法并询问您遇到的特定元素效果最好。例如,“如何旋转表格单元格中的文本?”

相关内容