ラテックスで見栄えの良いテーブルを作成するにはどうすればよいでしょうか。

Aug 20 2020

当たり障りのないテーブルを作成することができます。以下のようなテーブルを作成する方法を知りたいです。

\begin{table}[htbp]
\caption{Variable Descriptions}
\label{tab:2}
\begin{center}
\begin{tabular}{|c|c|}\hline
Variables & Descriptions\\\hline
\textit{ln(wage)} & log of wage\\
\textit{educ} & years of education\\
\textit{black} & 1 if black and 0 if not\\
\textit{hisp} & 1 if hispanic and 0 if not\\
\textit{exper} & years of experience\\
\textit{exper$^{2}$} & years of experience squared\\
\textit{married} & 1 if married and 0 if not\\
\textit{union} & 1 if belongs to a union and 0 if not\\\hline
\end{tabular}
\end{center}
\end{table}

特定の質問は次のとおりです。

  • 行の色を灰色と白の間でどのように交互に変えることができますか?手動で色を付けるのではなく、コマンドを作成する方法はありますか?

回答

6 leandriis Aug 20 2020 at 03:37

テーブルの3つのバージョンは次のとおりです。

\documentclass{article}
\usepackage[table,svgnames]{xcolor} % provides the \rowcolors command 
\usepackage{caption} % for improved spacing around the caption

\usepackage{array} % enables >{...} in the coumn specifier section, used in table 2 & 3
\usepackage{booktabs} % for improved spacing around horizontal lines, used in example 3, incompatible with vertical lines, be careful if you want to to combine it with color

\usepackage[column=0]{cellspace} % for adding a small amount of space above and below each cell, only used in table 2
\setlength{\cellspacetoplimit}{2pt}
\setlength{\cellspacebottomlimit}{\cellspacetoplimit}


\begin{document}
\begin{table}[htbp]
\caption{Variable Descriptions}
\label{tab:2}
\centering % used \centering instead of the center environment since the latter adds additional white space
\rowcolors{2}{white}{lightgray} 
\begin{tabular}{|c|c|}\hline
Variables & Descriptions\\\hline
\textit{ln(wage)} & log of wage\\
\textit{educ} & years of education\\
\textit{black} & 1 if black and 0 if not\\
\textit{hisp} & 1 if hispanic and 0 if not\\
\textit{exper} & years of experience\\
\textit{exper$^{2}$} & years of experience squared\\
\textit{married} & 1 if married and 0 if not\\
\textit{union} & 1 if belongs to a union and 0 if not\\\hline
\end{tabular}
\end{table}

\begin{table}[htbp]
\caption{Variable Descriptions}
\label{tab:2}
\centering
\rowcolors{2}{white}{lightgray} 
\begin{tabular}{>{\itshape}0l0l}\hline % used >{\itshape} in order to be able to remove the repeated occurences of \textit in the first column, used l type columns instead of c columns for a cleaner look, added small vertical space above and below the rows with the help of the cellspace package, removed all vertical lines
\textup{Variables}       & Descriptions\\\hline
ln(wage)                 & log of wage\\
educ                     & years of education\\
black                    & 1 if black and 0 if not\\
hisp                     & 1 if hispanic and 0 if not\\
exper                    & years of experience\\
exper\textsuperscript{2} & years of experience squared\\
married                  & 1 if married and 0 if not\\
union                    & 1 if belongs to a union and 0 if not\\\hline
\end{tabular}
\end{table}

\begin{table}[htbp]
\caption{Variable Descriptions}
\label{tab:2}
\centering
\begin{tabular}{>{\itshape}ll}
\toprule % replaced all \hline commands with rules from the booktabs package
\textup{Variables}       & Descriptions\\
\midrule
ln(wage)                 & log of wage\\
educ                     & years of education\\
black                    & 1 if black and 0 if not\\
hisp                     & 1 if hispanic and 0 if not\\
exper                    & years of experience\\
exper\textsuperscript{2} & years of experience squared\\
married                  & 1 if married and 0 if not\\
union                    & 1 if belongs to a union and 0 if not\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
7 SimonDispa Aug 20 2020 at 21:08

私はあなたの質問の核心に答えます: I am wondering how to create tables like this.

実験結果から1か月の予算まで、常にテーブルを使用しています。並べ替え、書式設定、チェック、簡単なデータ分析などのタスクについては、Excelで行います(2013を使用)。ファイナルテーブルは、何度も繰り返して時間をかけて最終的に出てきます。

あなたの例では、データがデータベースから出ていることは明らかです。すべてのパッチとすべての修正の垂直方向の累積結果、整合性のクロスチェックなどがあります。

LaTeXは美しいレポートを公開するためのものですが、これは年に数回行われます。非常に単純なテーブルでのみ、データをLaTeXに直接書き込むことができます。

私のExcelからLaTeXへのワークフローには3つのステップがあります。

1 Excelで、必要なスタイルでファイナルテーブルをフォーマットします。必要に応じて、色や定規などを使用してください。

  1. CTANのExcel2Latexアドインを使用してテーブルをエクスポートします。インストールは簡単で、宣伝どおりに機能します。

https://ctan.org/tex-archive/support/excel2latex?lang=en

クリップボードにコピーして、基本的なLaTeXドキュメントに貼り付けます。

いくつかの基本的なパッケージを追加し(私の例を参照)、結果のコードを実行する必要があります。

複数行、色、そして最も重要なこととして、コンテンツがLaTeXに正常に渡されたことがわかります。スタイルの詳細について気が変わった場合は、Excelシートを編集してLaTeXコードを再生成するのは簡単です。

3 LaTeXコマンドを使用して、フォント、ストレッチ、ハイフン、記号などの仕上げを適用します。

あなたの例ではcaption、元のキャプションと一致するようにパッケージを含め、最初の行に上付き文字、2番目の行に下付き文字、必要に応じてスモールキャップスを追加しました。arraystretch1.3からセルを垂直方向に拡張するために使用しました。

この特定のケースでは、下部のセルの背景がセルの内容の一部を上書きしないように、7ポイントのオフセットを二重の灰色の行に含める必要がありました。これは、色付きのセルを操作するときによく発生します。コメントして[7pt]、何が起こるかを確認してください。

もちろん、背景色を1つだけ使用すると、すべてが見栄えが良くなります。しかし、代替行の色のスタイルは非常に優れており、幅の広い複数列のテーブルでは必須であることがわかりました。白黒のみを使用すると、ビーマーのプレゼンテーションは運命づけられます。

\documentclass[12pt,a4paper]{book}

\RequirePackage[table]{xcolor}
\RequirePackage{booktabs}
\RequirePackage{multirow}

\RequirePackage{caption}% typesetting of captions
\captionsetup{%
    labelfont={bf}, %Table 1
    textfont={bf}  %caption font
}%

\begin{document}

% Table generated by Excel2LaTeX from sheet 'Sheet1'
\begin{table}[htbp]
    \renewcommand{\arraystretch}{1.3} % expand the rows vertically
    \setlength\belowcaptionskip{8pt}    
    \centering
    \caption{Test--suite based program repair tools for Java.}
    \begin{tabular}{llrrr}
        \toprule
        \multicolumn{1}{c}{\multirow{2}[2]{*}{Repear tool}} & Benchmark used & \multicolumn{1}{r}{\multirow{2}[2]{*}{\# Bugs}} & \multirow{2}[2]{*}{\# Patched\textsuperscript{a}} & \multirow{2}[2]{*}{\# Fixed\textsuperscript{b}} \\
        & in evaluation &       &       &  \\
        \midrule
        \multicolumn{5}{l}{\underline{\emph{Generate--and--validate}}} \\
        \rowcolor[rgb]{ .906,  .902,  .902} ACS [4] & Defects4J & 224   & 23    & 17 \\
        \multirow{2}[0]{*}{ARJA [50]} & Defects4J & 224   & 59    & 18 \\
        & QuixBugs [48] & 40    & 4     & 2 \\
        \rowcolor[rgb]{ .906,  .902,  .902} \multirow{2}[1]{*}{\textsc{CapGen} [42]}  & Defects4J & 224   & 25    & 22 \\[7pt] % shift needed for colored multirows
        \rowcolor[rgb]{ .906,  .902,  .902}     & IntroClassJava & 297   & --    & 25 \\
        \multirow{2}[0]{*}{Cardumen [28]} & Defects4J & 356   & 77    & -- \\
        & QuixBugs [48] & 40    & 5     & 3 \\
        \rowcolor[rgb]{ .906,  .902,  .902} DeepRepair [43] & Defects4J & 374   & 51    & -- \\
        \multirow{2}[0]{*}{\textsc{Elixir} [37]} & Defects4J & 82    & 41    & 26 \\
        & Bugs.jar & 127   & 39    & 22 \\
        \rowcolor[rgb]{ .906,  .902,  .902} GenProg-A & Defects4J & 224   & 36    & -- \\
        HDRepair [18] & Defects4J & 90    & --    & 23 \\
        \rowcolor[rgb]{ .906,  .902,  .902}\textsc{Jaid} [2] & Defects4J & 138   & 31    & 25 \\
        \multirow{3}[0]{*}{jGenProg [27]} & Defects4J & 224   & 29    & -- \\
        & Defects4J [26] & 224   & 27    & 5 \\
        & QuixBugs [48] & 40    & 2     & 0 \\
        \ldots  & \ldots & \ldots    & \ldots    & \ldots \\ % more rows follows
        \bottomrule
        \multicolumn{5}{l}{\footnotesize \textsuperscript{a} As reported last week. \ \textsuperscript{b} Verified by QC. }\\
\end{tabular}%
\label{tab:addlabel}%
\end{table}%

\end{document}

これが最終結果です。主にデータ入力とシートのフォーマットにかかる合計時間は1〜2時間です。

最後の演習として、締め切り直前に上司から尋ねられたテーブルに別の列を追加してみてください。マイナスマイナスStill Missingのデータ(Excelシートで計算)を使用して、すべてがどのように機能するか(および所要時間はどれくらいか)を確認してください。 。現実世界の状況。BugsPatchesFixed

5 F.Pantigny Aug 20 2020 at 18:33

備考:この回答には、バージョン5.2(2020-08-19)が必要ですnicematrix

OPによって提供される画像は、行が交互に色分けされていることを示しています。しかし、実際にはいくつかの行がいくつかの行の再結合です。この状態では、の使用\rowcolorsは困難ですxcolor。最新バージョンnicematrix(2020-08-19のv。5.2)では、組み込み命令\rowcolors(で使用されるcode-before)にrespect-blocksその問題に対処するオプションがあります。ブロックを含む行は、1つの行のみと見なされます。

\documentclass{article}
\usepackage{nicematrix}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{makecell}
\usepackage{enumitem}

\NiceMatrixOptions{notes = { para , style = \alph{#1} } }

\begin{document}

\begin{NiceTabular}{ll@{\space}lrrr}%
 [ code-before = \rowcolors{3}{gray!20}{}[respect-blocks] ]
\toprule
Repair tool & 
\multicolumn{2}{l}{\makecell[l]{Benchmark used\\ in evaluation}} 
& 
\# Bugs &
\# Patched\tabularnote{Note}& 
\# Fixed\tabularnote{Note}\\
\midrule
\underline{\emph{Generate-and-validate}} \\
ACS [46] & Defects4J & & 224 & 23 & 17 \\
\Block{2-1}{}\multirow{2}{*}{ARJA [50]} & Defects4J&  & 224 & 59 & 18 \\
& QuixBugs& [38] & 40 & 4 & 2 \\
\Block{2-1}{}\multirow{2}{*}{\textsc{CapGen} [42]} & Defects4J& & 224 & 25 & 22 \\
& \rlap{IntroClassJava} & & 297 & -- & 25 \\
\Block{2-1}{}\multirow{2}{*}{Cardumen [28]} & Defects4J& & 356 & 77 & -- \\
& QuixBugs& [48] & 40 & 5 & 3 \\
DeepRepair [43] & Defects4J& & 374 & 51 & - \\
\Block{2-1}{}\multirow{2}{*}{\textsc{Elixir} [37]} & Defects4J& & 82 & 41 & 26 \\
& Bugs.jar & & 127 & 39 & 22 \\
GenProg-1 [50] & Defects4J& & 224 & 36 & -- \\
HDRepair [18] & Defects4J& & 90 & -- & 23 \\
\textsc{Jaid} [2] & Defects4J& & 138 & 31 & 25 \\
\Block{3-1}{}\multirow{3}{*}{jGenProg [27]} & Defects4J & & 224 & 29 & -- \\
& Defects4J & [26] & 224 & 27 & 5 \\
& QuixBugs& [48] & 40 & 2 & 0 \\
\Block{3-1}{}\multirow{3}{*}{jKali [27]} & Defects4J& & 224 & 22 & -- \\
& Defects4J& [26] & 224 & 22 & 1 \\
& QuixBugs& [48] & 40 & 2 & 1 \\
\Block{2-1}{}\multirow{2}{*}{jMutRepair [27]} & Defects4J& & 224 & 17 & -- \\
& QuixBugs& [48] & 40 & 3 & 1 \\
Kali-A [50] & Defects4J& & 224 & 33 & -- \\
LSRepair [23] & Defects4J& & 395 & 38 & 19 \\
PAR [17] & \rlap{PARDataset} & & 119 & 27 & -- \\
\Block{2-1}{}\multirow{2}{*}{PSRepair-A [50]} & Defects4J& & 224 & 44 & -- \\
& QuixBugs& [48] & 40 & 4 & 2 \\
SimFix [14] & Defects4J& & 357 & 56 & 34 \\
\textsc{SketchFix} [13] & Defects4J& & 357 & 26 & 19 \\
SOFix [24] & Defects4J& & 224 & -- & 23 \\
ssFix [45] & Defects4J& & 357 & 60 & 20 \\
xPar [18] & Defects4J& & 90 & -- & 4 \\
\bottomrule
\end{NiceTabular}

\end{document}

3 BlackMild Aug 20 2020 at 04:28

これはどう?(matrixTikZの使用)

\documentclass[tikz,border=5mm]{standalone}
\usepackage{amsmath,amssymb,amsthm}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of nodes,draw=teal,thick,inner sep=.5pt,
nodes in empty cells,
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
nodes={minimum height=9mm,anchor=center},
row 1/.style={nodes={font=\bfseries}},
column 1/.style={nodes={minimum width=2.5cm,text width=1.5cm,align=left,font=\itshape}},
column 2/.style={nodes={minimum width=7cm,text width=6cm,align=left}},
every even row/.style={nodes={fill=cyan!20}}
]{
Variables & Descriptions\\  
ln(wage)                 & log of wage\\
educ                     & years of education\\
black                    & 1 if black and 0 if not\\
hisp                     & 1 if hispanic and 0 if not\\
exper                    & years of experience\\
exper\textsuperscript{2} & years of experience squared\\
married                  & 1 if married and 0 if not\\
union                    & 1 if belongs to a union and 0 if not\\
};
\end{tikzpicture}
\end{document}