Comment créer une belle table en Latex?

Aug 20 2020

Je suis capable de créer une table qui a l'air fade. Je me demande comment créer des tableaux comme celui ci-dessous:

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

La question particulière est:

  • Comment peut-on alterner les couleurs de ligne entre le gris et le blanc? Existe-t-il un moyen de créer une commande plutôt que de la colorer manuellement?

Réponses

6 leandriis Aug 20 2020 at 03:37

Voici trois versions de votre tableau:

\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

Je vais répondre au cœur de votre question: I am wondering how to create tables like this.

Je travaille avec des tables tout le temps, des résultats d'expériences aux budgets mensuels. Pour des tâches telles que le tri, le formatage, la vérification et l'analyse simple des données, je le fais dans Excel (en utilisant 2013). La table finale sortira finalement après de nombreuses itérations et du temps.

Dans votre exemple, il est clair que les données proviennent d'une base de données, il y aura des résultats cumulés verticaux de tous les correctifs et de tous les correctifs, une vérification croisée de la cohérence, etc.

LaTeX sert à publier de beaux rapports, mais cela se produit plusieurs fois par an. Ce n'est que dans des tableaux très simples que les données peuvent être écrites directement dans LaTeX.

Mon flux de travail Excel vers LaTeX comporte 3 étapes:

1 Formatez le tableau final avec le style dont vous avez besoin, dans Excel. Utilisez des couleurs, des règles, etc., au besoin.

  1. Exportez la table à l'aide du complément Excel2Latex de CTAN. Il est facile à installer et fonctionne comme annoncé.

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

copiez-le dans le presse-papiers et collez-le dans un document LaTeX de base.

Vous devez ajouter des packages de base (voir mon exemple) et exécuter le code résultant.

Vous verrez que la plupart des fonctionnalités telles que les lignes multiples, les couleurs et, plus important encore, le contenu ont été transmis avec succès à LaTeX. Si vous changez d'avis sur un détail du style, il est facile de modifier la feuille Excel et de régénérer le code LaTeX.

3 Appliquez les touches finales: polices, étirement, traits d'union, symboles, etc. à l'aide des commandes LaTeX.

Pour votre exemple, j'ai inclus le captionpackage pour correspondre à la légende d'origine, ajouté les exposants dans la première ligne, la ligne annulée dans la seconde et les petites majuscules si nécessaire. J'ai utilisé arraystretchde 1,3 pour agrandir la cellule verticalement.

Dans ce cas particulier, j'ai dû inclure un décalage de 7 points vers le bas dans une double ligne grise, pour éviter que l'arrière-plan de la cellule inférieure n'écrase une partie du contenu de la cellule. C'est un phénomène courant lorsque vous travaillez avec des cellules colorées. Commentez [7pt]et voyez ce qui se passe.

Bien sûr, tout sera beau si vous n'utilisez qu'une seule couleur de fond! Mais j'ai trouvé le style de couleur de ligne alternative très agréable et indispensable avec de larges tables à plusieurs colonnes. Les présentations Beamer seront vouées à l'échec si vous n'utilisez que du noir et blanc.

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

C'est le résultat final. Temps total 1 à 2 heures, principalement pour la saisie des données et le formatage de la feuille.

Comme exercice final, essayez d'ajouter une autre colonne au tableau demandé par votre patron juste avant la date limite: Still Missingavec les données (calculées dans la feuille Excel) qui sont Bugsmoins Patchesmoins Fixedet voyez comment tout cela fonctionne (et combien de temps cela prend!) . Une situation du monde réel.

5 F.Pantigny Aug 20 2020 at 18:33

Remarque: Cette réponse nécessite la version 5.2 (2020-08-19) de nicematrix.

L'image donnée par l'OP montre des lignes alternativement colorées. Mais certaines rangées sont en fait la réunion de plusieurs rangées. Dans cette condition, il est difficile d'utiliser \rowcolorsdes xcolor. Dans la dernière version de nicematrix(v. 5.2 du 2020-08-19), l'instruction intégrée \rowcolors(à utiliser dans code-before) a une option respect-blockspour traiter ce problème. Les lignes englobant un bloc sont considérées comme une seule ligne.

\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

Celui-ci, ça va? (en utilisant 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}