Wie erstellt man eine kompakte Vergleichstabelle wie diese?

Wie erstellt man eine kompakte Vergleichstabelle wie diese?

Wie erstellt man eine solche Vergleichstabelle?

Bildbeschreibung hier eingeben

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}&#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}

Bildbeschreibung hier eingeben

Einige Kommentare.

  1. Ich habe definiert, \rotwie 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 \hboxFeld 1emmit unendlicher Schrumpfbarkeit auf der linken Seite eingefügt, sodass das Etikett über die linke Seite der Box hinausragt.
  2. Ich wollte nicht immer wieder \LEFTcircleund \CIRCLEaus 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
  3. Der Hauptteil der Tabelle ist in Dreiergruppen gruppiert, die wiederum in 2 oder 3 Dreiergruppen gruppiert sind. Mithilfe des arrayPakets habe ich einen neuen Spaltentyp G(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
  4. Um zusätzlichen Platz zwischen den Gruppen von Gruppen zu erhalten, habe ich den arraySpezifizierer verwendet, um einen zusätzlichen Platz zwischen diesen Spalten !einzufügen .\kern1em
  5. 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 \exbenö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 \@firstofoneund dann an übergeben \f. Ich gebe zu, das ist eine Art Hack, aber es macht die Verwendung \exeinfacher.
  6. threeparttablebesteht aus einer Überschrift, der Tabelle und den Tabellennotizen darunter.
  7. 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.)
  8. In deinem Beispiel sind die Tabellennotizen zentriert. Hier musste ich ein bisschen nacharbeiten, um das hinzubekommen. Insbesondere habe ich ein paar \hfils hinzugefügt. Ich denke, es würde besser aussehen, wenn die Notizen nicht zentriert wären.
  9. Schemeist 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.
  10. 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 ersetzen Noneoder 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.

  1. Um einzelne Symbole zu finden, sollten Sie im symbols-a4Dokument nachschauen (ausführen texdoc symbols-a4).
  2. Generell funktioniert es nicht so gut, TeX SX zu bitten, ein bestimmtes Bild zu reproduzieren. (Ich war einfach neugierig und wollte etwas erfahren, threeparttabledas 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?“

verwandte Informationen