¿Cómo crear una tabla comparativa compacta como esta?

¿Cómo crear una tabla comparativa compacta como esta?

¿Cómo se crea una tabla comparativa como esta?

ingrese la descripción de la imagen aquí

En particular, las etiquetas inclinadas que ahorran espacio y los círculos/círculos medio rellenos. Este tipo de tablas parecen bastante comunes. ¿Existe algún paquete especial para crear tablas como esta?

Además, creo que ya hay una pregunta sobre exactamente el mismo tipo de tabla, pero desafortunadamente tenía un título tan vago como este, así que no pude encontrarla.

Respuesta1

Aquí hay una reconstrucción parcial de la mesa.

\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}

ingrese la descripción de la imagen aquí

Algunos comentarios.

  1. Lo definí \rotpara manejar la rotación de las etiquetas inclinadas. Se utiliza \rotatebox[origin=br]{-60}para girar la etiqueta -60 grados alrededor de la esquina inferior derecha. Se coloca dentro de una \hboxcaja 1emancha con capacidad de contracción infinita a la izquierda para que la etiqueta sobresalga por el lado izquierdo de la caja.
  2. No quería escribir \LEFTcircley \CIRCLEdesde el wasysympaquete una y otra vez, así que definí \featurecuál toma un solo argumento (en este caso, 0, 1 o 2) y produce el símbolo apropiado. (Según las notas a pie de página, probablemente debería haberlo llamado \propertyasí).
  3. La parte principal de la tabla está agrupada en grupos de 3, que a su vez se agrupan en 2 o 3 grupos de 3. Usando el arraypaquete, creé un nuevo tipo de columna G(para grupo) que corresponde a tres columnas centradas sin espacio entre columnas. También definí \fcuál toma tres dígitos y produce las tres características (propiedades) de un grupo. (Probablemente debería haber optado por \gseguir con el grupo en lugar de \fcon las funciones).
  4. Para obtener espacio adicional entre los grupos de grupos, utilicé el arrayespecificador !para insertar un extra \kern1ementre esas columnas.
  5. Cada fila consta lógicamente de 10 partes: el esquema, los símbolos de notas de la tabla, el ejemplo y siete grupos de 3. TeX solo admite macros con hasta 9 argumentos, por lo que cuando creé \ex(que iba a estar por ejemplo, pero reflexionando , algo relacionado con el esquema hubiera sido mejor) que requiere 9 argumentos. Los 3 primeros corresponden al esquema, notas y ejemplo. Los 6 restantes esperan que pasen 3 dígitos a \f. Finalmente, el décimo grupo arriostrado se desabrocha usando \@firstofoney luego se pasa a \f. Lo admito, es una especie de truco, pero facilita su uso \ex.
  6. threeparttableconsta de un título, la tabla y las notas de la tabla a continuación.
  7. La tabla en sí es bastante sencilla. He usado booktabs's \toprule, \midruley \bottomrulepara componer las reglas horizontales. (Esto se ve mucho mejor que \hline).
  8. Las notas de la tabla están centradas en su ejemplo. Tuve que trabajar un poco para conseguirlo aquí. En particular, agregué algunos \hfils. Creo que sería mejor no centrar las notas.
  9. Schemeestá ligeramente sangrado por alguna razón en su ejemplo. No entendí el significado de eso, así que no lo hice. Agregar \quad(o algún otro comando de espaciado horizontal) podría reproducir eso.
  10. Si estuviera creando esta tabla, escribiría la columna "Ejemplo" alineada a la izquierda. También podría reemplazar el -en esa columna con Noneo dejarlo en blanco. Probablemente también reemplazaría -en las columnas principales con un guión. Simplemente creo que se ve mejor. Convenientemente, solo tienes que reemplazar -con --in \featurepara cambiarlo en todas partes, incluidas las notas de la tabla.

Algunos metacomentarios.

  1. Para encontrar símbolos individuales, debe buscar en el symbols-a4documento (ejecutar texdoc symbols-a4).
  2. En términos generales, pedirle a TeX SX que reproduzca alguna imagen en particular no funciona demasiado bien. (Solo tenía curiosidad por saber threeparttablecuál nunca había usado antes, así que lo intenté). Publicar un ejemplo mínimo que demuestre lo que ha probado y preguntar sobre elementos particulares en los que está atascado funciona mejor. Por ejemplo, "¿Cómo giro el texto en una celda de una tabla?"

información relacionada