
答案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}&%
\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}
一些評論。
- 我定義
\rot
為處理旋轉傾斜的標籤。它用於\rotatebox[origin=br]{-60}
將標籤繞右下角旋轉 -60 度。它被放置在左側寬且具有無限收縮性\hbox
的盒子內1em
,以便標籤從盒子的左側突出。 - 我不想一遍又一遍地從包中輸入
\LEFTcircle
and ,因此我定義了which 採用單一參數(在本例中為 0、1 或 2)並產生適當的符號。 (根據腳註,我可能應該這樣稱呼它。)\CIRCLE
wasysym
\feature
\property
- 表的主要部分分為 3 組,這些組本身又分為 2 組或 3 組,每組 3組
array
。G
的列,沒有列間空間。我還定義了\f
它需要三位數字並產生一個組的三個特徵(屬性)。 (我可能應該選擇\g
堅持團體而不是\f
功能。) - 為了在組之間獲得額外的空間,我使用
array
說明符在這些列之間!
插入額外的空間\kern1em
。 - 每行邏輯上由 10 個部分組成:方案、表注符號、範例和七組 3
\ex
。的東西會更好),它需要9 個參數。前 3 個對應於方案、標記和範例。其餘 6 個期望將 3 位數字傳遞給\f
。最後,使用第 10 個支撐組取消支撐\@firstofone
,然後傳遞給\f
。我承認,這是一種駭客行為,但它使使用\ex
更容易。 threeparttable
由標題、表格和下面的表註組成。- 表格本身非常簡單。我使用
booktabs
's\toprule
、\midrule
、 和\bottomrule
來排版水平規則。 (這看起來比 好得多\hline
。) - 表格註釋在您的範例中居中。我必須付出一些努力才能到達這裡。特別是,我添加了一些
\hfil
s。我認為筆記不居中會更好。 Scheme
在您的範例中由於某種原因略有縮排。我不明白其中的意義,所以我沒有這麼做。新增\quad
(或其他一些水平間距指令)可以重現該情況。- 如果我建立此表,我會將「範例」列左對齊排版。我也可能
-
將該列中的 替換為None
或將其留空。我可能還會-
用破折號替換主列中的 。我只是覺得它看起來更好。方便的是,您只需替換-
為--
in\feature
即可在所有地方進行更改,包括表格註釋。
一些元評論。
- 要查找單一符號,您應該查看
symbols-a4
文件(運行texdoc symbols-a4
)。 - 一般來說,要求 TeX SX 重現某些特定影像的效果不太好。 (我只是好奇地想了解
threeparttable
我以前從未使用過的內容,所以我嘗試了一下。)發布一個最小的示例來展示您已經嘗試過的內容並詢問您所堅持的特定元素效果最好。例如,“如何旋轉表格單元格中的文字?”