Как создать такую ​​компактную сравнительную таблицу?

Как создать такую ​​компактную сравнительную таблицу?

Как создать такую ​​сравнительную таблицу?

введите описание изображения здесь

В частности, наклонные надписи, которые экономят место, и круги/полузаполненные круги. Такого рода таблицы кажутся довольно распространенными --- есть ли специальный пакет для создания таких таблиц?

Кроме того, я думаю, что уже был вопрос о точно такой же таблице, но, к сожалению, у нее было такое же неопределенное название, как у этой, поэтому я не смог ее найти.

решение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 \CIRCLEиз пакета, поэтому я определил which, который принимает один аргумент (в данном случае 0, 1 или 2) и выдает соответствующий символ. (Судя по сноскам, мне, вероятно, следовало бы вместо этого назвать его .)wasysym\feature\property
  3. Основная часть таблицы сгруппирована в группы по 3, которые в свою очередь сгруппированы в 2 или 3 группы по 3. Используя пакет array, я создал новый тип столбца G(для группы), который соответствует трем центрированным столбцам без межстолбцового пространства. Я также определил, \fкоторый принимает три цифры и выдает три признака (свойства) для группы. (Вероятно, мне следовало бы \gпридерживаться группы, а не \fпризнаков.)
  4. Чтобы получить дополнительное пространство между группами групп, я использовал спецификатор arrayдля !вставки дополнительного пространства \kern1emмежду этими столбцами.
  5. Каждая строка логически состоит из 10 частей: схема, символы примечания к таблице, пример и семь групп по 3. TeX поддерживает только макросы с 9 аргументами, поэтому, когда я создал \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или, может быть, просто оставил бы его пустым. Я бы, наверное, также заменил -в основных столбцах на короткое тире. Я просто думаю, что так выглядит лучше. Удобно, что вам нужно только заменить -на --в \feature, чтобы изменить его везде, включая примечания к таблице.

Некоторые метакомментарии.

  1. Чтобы найти отдельные символы, вам следует заглянуть в symbols-a4документ (выполнить texdoc symbols-a4).
  2. Вообще говоря, просить TeX SX воспроизвести какое-то конкретное изображение не очень хорошо получается. (Мне просто было любопытно узнать о threeparttableтом, что я никогда раньше не использовал, поэтому я попробовал.) Лучше всего опубликовать минимальный пример, демонстрирующий то, что вы пробовали, и спросить о конкретных элементах, на которых вы застряли. Например, «Как повернуть текст в ячейке таблицы?»

Связанный контент