このようなコンパクトな比較表を作成するにはどうすればよいでしょうか?

このようなコンパクトな比較表を作成するにはどうすればよいでしょうか?

このような比較表はどのように作成するのでしょうか?

ここに画像の説明を入力してください

特に、スペースを節約する斜めのラベルや、円/半分塗りつぶされた円。このような表はかなり一般的であるように思われますが、このような表を作成するための特別なパッケージはありますか?

また、全く同じ種類のテーブルに関する質問がすでにあると思いますが、残念ながらこの質問と同じくらい漠然としたタイトルだったので、見つけることができませんでした。

答え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斜めのラベルの回転を処理するように定義しました。これは、ラベルを右下隅を軸に -60 度回転するために使用されます。これは、左側が無限に収縮する幅広の の\rotatebox[origin=br]{-60}内側に配置され、ラベルがボックスの左側からはみ出します。\hbox1em
  2. パッケージから\LEFTcircleand を何度も入力したくなかったので、単一の引数 (この場合は 0、1、または 2) を受け取り、適切なシンボルを生成する which を定義しました。 (脚注に基づくと、代わりにそれを呼び出すべきだったかもしれません。)\CIRCLEwasysym\feature\property
  3. 表の主要部分は 3 つのグループにグループ化されており、そのグループ自体が 2 つまたは 3 つの 3 つのグループにグループ化されています。arrayパッケージを使用して、列間のスペースのない中央揃えの 3 つの列に対応する新しい列タイプG(グループ用) を作成しました。また、3 つの数字を受け取り、グループの 3 つの機能 (プロパティ) を生成する も定義しました。(おそらく、機能用ではなくグループを使用する方\fがよいでしょう。)\g\f
  4. グループのグループ間に余分なスペースを確保するために、array指定子を使用してそれらの列の間に!余分なスペースを挿入しました\kern1em
  5. 各行は論理的に 10 個の部分、つまりスキーム、表の注記記号、例、および 3 つのグループ 7 つから構成されます。TeX は最大 9 個の引数を持つマクロのみをサポートしているため、\ex9 個の引数を取る (これは例を表すはずでしたが、よく考えてみると、スキームに関連したもののほうがよかったでしょう)を作成しました。最初の 3 つは、スキーム、マーク、および例に対応します。残りの 6 つは、 に渡される 3 桁の数字を想定しています\f。最後に、10 番目の中括弧グループは を使用して中括弧を解除し\@firstofone、 に渡されます\f。これは一種のハックであることは認めますが、使用が\ex簡単になります。
  6. threeparttableキャプション、表、およびその下の表注釈で構成されます。
  7. 表形式自体は非常に簡単です。 、、 を使用して水平booktabs線をタイプセットしました。 (これは よりもずっと見栄えが良いです。)\toprule\midrule\bottomrule\hline
  8. あなたの例では、表の注釈が中央に配置されています。ここでそれを実現するには、少し作業する必要がありました。特に、いくつかの\hfils を追加しました。注釈を中央に配置しない方が見栄えが良いと思います。
  9. Schemeあなたの例では、何らかの理由でわずかにインデントされています。その意味がわからなかったので、実行しませんでした。\quad(または他の水平方向の間隔指定コマンド) を追加すると、再現する可能性があります。
  10. 私がこの表を作成する場合、「例」列を左揃えでタイプセットします。また、-その列の を に置き換えるNoneか、空白のままにしておくかもしれません。また、メインの列の を en ダッシュに置き換えるでしょう。その方が見栄えが良いと思うからです。便利なことに、表の注釈を含むすべての場所で を に置き換えるだけで-変更できます。---\feature

いくつかのメタコメント。

  1. 個々のシンボルを見つけるには、symbols-a4ドキュメント ( を実行texdoc symbols-a4) を参照する必要があります。
  2. 一般的に言えば、TeX SX に特定の画像を再現するように要求しても、あまりうまくいきません。(私は、threeparttableこれまで使用したことのないものについて知りたいと思ったので、試してみました。) 試したことを示した最小限の例を投稿し、行き詰まっている特定の要素について質問するのが最も効果的です。たとえば、「表のセル内のテキストを回転させるにはどうすればよいですか?」

関連情報