
Wie erstellt man eine solche Vergleichstabelle?
Insbesondere die schrägen Beschriftungen, die Platz sparen, und die Kreise/halbgefüllten Kreise. Diese Art von Tabellen scheint recht häufig zu sein – gibt es ein spezielles Paket zum Erstellen solcher Tabellen?
Außerdem glaube ich, dass es bereits eine Frage zu genau derselben Art von Tabelle gibt, aber leider war der Titel so vage wie dieser, sodass ich sie nicht finden konnte.
Antwort1
Hier ist eine teilweise Rekonstruktion der Tabelle.
\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}
Einige Kommentare.
- Ich habe definiert,
\rot
wie die schrägen Etiketten gedreht werden. Dabei wird\rotatebox[origin=br]{-60}
das Etikett um -60 Grad um die untere rechte Ecke gedreht. Das wird in ein breites\hbox
Feld1em
mit unendlicher Schrumpfbarkeit auf der linken Seite eingefügt, sodass das Etikett über die linke Seite der Box hinausragt. - Ich wollte nicht immer wieder
\LEFTcircle
und\CIRCLE
aus dem Paket eingeben, also habe ich definiert , dass which ein einzelnes Argument (in diesem Fall 0, 1 oder 2) annimmt und das entsprechende Symbol erzeugt. (Aufgrund der Fußnoten hätte ich es wahrscheinlich stattdessen aufrufen sollen.)wasysym
\feature
\property
- Der Hauptteil der Tabelle ist in Dreiergruppen gruppiert, die wiederum in 2 oder 3 Dreiergruppen gruppiert sind. Mithilfe des
array
Pakets habe ich einen neuen SpaltentypG
(für „group“) erstellt, der drei zentrierten Spalten ohne Zwischenraum entspricht. Außerdem habe ich definiert, welcher drei Ziffern annimmt und die drei Features (Eigenschaften) für eine Gruppe erzeugt. (Wahrscheinlich hätte ich mich für „group“ statt „ for features“ entscheiden sollen.\f
)\g
\f
- Um zusätzlichen Platz zwischen den Gruppen von Gruppen zu erhalten, habe ich den
array
Spezifizierer verwendet, um einen zusätzlichen Platz zwischen diesen Spalten!
einzufügen .\kern1em
- Jede Zeile besteht logisch aus 10 Teilen: dem Schema, den Tabellennotizsymbolen, dem Beispiel und sieben Dreiergruppen. TeX unterstützt nur Makros mit bis zu 9 Argumenten, daher
\ex
benötigte ich bei der Erstellung von (das für Beispiel stehen sollte, aber nach einigem Nachdenken wäre etwas mit Bezug zu Schema besser gewesen) 9 Argumente. Die ersten 3 entsprechen dem Schema, den Markierungen und dem Beispiel. Die restlichen 6 erwarten 3 Ziffern, die an übergeben werden\f
. Schließlich wird die 10. geschweifte Gruppe mit entklammert\@firstofone
und dann an übergeben\f
. Ich gebe zu, das ist eine Art Hack, aber es macht die Verwendung\ex
einfacher. threeparttable
besteht aus einer Überschrift, der Tabelle und den Tabellennotizen darunter.- Die Tabelle selbst ist ziemlich unkompliziert. Ich habe
booktabs
's\toprule
,\midrule
, und verwendet\bottomrule
, um die horizontalen Linien zu setzen. (Das sieht viel besser aus als\hline
.) - In deinem Beispiel sind die Tabellennotizen zentriert. Hier musste ich ein bisschen nacharbeiten, um das hinzubekommen. Insbesondere habe ich ein paar
\hfil
s hinzugefügt. Ich denke, es würde besser aussehen, wenn die Notizen nicht zentriert wären. Scheme
ist in Ihrem Beispiel aus irgendeinem Grund leicht eingerückt. Ich habe den Sinn davon nicht verstanden, also habe ich es nicht gemacht. Das Hinzufügen\quad
(oder ein anderer horizontaler Abstandsbefehl) könnte das reproduzieren.- Wenn ich diese Tabelle erstellen würde, würde ich die Spalte „Beispiel“ linksbündig setzen. Ich würde
-
in dieser Spalte möglicherweise auch das durch ersetzenNone
oder es einfach leer lassen. Wahrscheinlich würde ich-
in den Hauptspalten auch das durch einen Halbgeviertstrich ersetzen. Ich finde einfach, dass es besser aussieht. Praktischerweise müssen Sie nur das-
durch--
das durch das in ersetzen\feature
, um es überall zu ändern, einschließlich der Tabellennotizen.
Einige Metakommentare.
- Um einzelne Symbole zu finden, sollten Sie im
symbols-a4
Dokument nachschauen (ausführentexdoc symbols-a4
). - Generell funktioniert es nicht so gut, TeX SX zu bitten, ein bestimmtes Bild zu reproduzieren. (Ich war einfach neugierig und wollte etwas erfahren,
threeparttable
das ich noch nie zuvor verwendet hatte, also habe ich es versucht.) Am besten funktioniert es, ein minimales Beispiel zu posten, das demonstriert, was Sie versucht haben, und nach bestimmten Elementen zu fragen, bei denen Sie nicht weiterkommen. Beispiel: „Wie drehe ich den Text in einer Tabellenzelle?“