如何創建這樣一個緊湊的比較表?

如何創建這樣一個緊湊的比較表?

如何建立這樣的比較表?

在此輸入影像描述

特別是節省空間的傾斜標籤,以及圓形/半實心圓形。這些類型的表看起來相當常見——是否有一個特殊的套件來創建這樣的表?

另外,我認為已經有一個關於完全相同類型的表格的問題,但不幸的是它的標題和這個一樣模糊,所以我無法找到它。

答案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 度。它被放置在左側寬且具有無限收縮性\hbox的盒子內1em,以便標籤從盒子的左側突出。
  2. 我不想一遍又一遍地從包中輸入\LEFTcircleand ,因此我定義了which 採用單一參數(在本例中為 0、1 或 2)並產生適當的符號。 (根據腳註,我可能應該這樣稱呼它。)\CIRCLEwasysym\feature\property
  3. 表的主要部分分為 3 組,這些組本身又分為 2 組或 3 組,每組 3組arrayG的列,沒有列間空間。我還定義了\f它需要三位數字並產生一個組的三個特徵(屬性)。 (我可能應該選擇\g堅持團體而不是\f功能。)
  4. 為了在組之間獲得額外的空間,我使用array說明符在這些列之間!插入額外的空間\kern1em
  5. 每行邏輯上由 10 個部分組成:方案、表注符號、範例和七組 3 \ex。的東西會更好),它需要9 個參數。前 3 個對應於方案、標記和範例。其餘 6 個期望將 3 位數字傳遞給\f。最後,使用第 10 個支撐組取消支撐\@firstofone,然後傳遞給\f。我承認,這是一種駭客行為,但它使使用\ex更容易。
  6. threeparttable由標題、表格和下面的表註組成。
  7. 表格本身非常簡單。我使用booktabs's \toprule\midrule、 和\bottomrule來排版水平規則。 (這看起來比 好得多\hline。)
  8. 表格註釋在您的範例中居中。我必須付出一些努力才能到達這裡。特別是,我添加了一些\hfils。我認為筆記不居中會更好。
  9. Scheme在您的範例中由於某種原因略有縮排。我不明白其中的意義,所以我沒有這麼做。新增\quad(或其他一些水平間距指令)可以重現該情況。
  10. 如果我建立此表,我會將「範例」列左對齊排版。我也可能-將該列中的 替換為None或將其留空。我可能還會-用破折號替換主列中的 。我只是覺得它看起來更好。方便的是,您只需替換---in\feature即可在所有地方進行更改,包括表格註釋。

一些元評論。

  1. 要查找單一符號,您應該查看symbols-a4文件(運行texdoc symbols-a4)。
  2. 一般來說,要求 TeX SX 重現某些特定影像的效果不太好。 (我只是好奇地想了解threeparttable我以前從未使用過的內容,所以我嘗試了一下。)發布一個最小的示例來展示您已經嘗試過的內容並詢問您所堅持的特定元素效果最好。例如,“如何旋轉表格單元格中的文字?”

相關內容