Mise en page d'un tableau

Tout ce qui concerne le langage LaTeX et ses variantes. Ce langage est supporté sur le forum via les balises tex.

Modérateur : gdm_tex

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
Metamorphy
Utilisateur confirmé
Utilisateur confirmé
Messages : 15
Inscription : lundi 14 septembre 2020, 10:37
Statut actuel : Étudiant

[Résolu] Mise en page d'un tableau

Message par Metamorphy »

Bonjour à tous,

J'ai une question concernant la mise en page d'un tableau.
Il est constitué de 3 colonnes mais j'aimerai bien décaler les lignes "UFR <<xxx>>" pour signaler que ça appartient à la ligne "UFR d'inscription".
J'ai cherché à juste faire un alinéa ou décaler quelque peu le texte mais je n'ai pas trouvé de formule correspondant à cela sur le forum.
J'ai ensuite pensé créer un tableau à 4 colonnes et les fusionner pour les 3 premières lignes afin que la première colonne laisse une cellule vide en début des lignes que je souhaite décaler mais je trouve que cela charge pas mal le code alors je me demandais s'il existait une façon plus "clean" de faire ça svp.
Comme j'ai trouvé le code de ce beau tableau sur ce forum, je tente ma change.
En espérant avoir été clair.
Merci par avance.

C'est mon premier ECM, j'ai hésité à laisser les balises formatant mon document, mais comme la mise en page du tableau dépendra de la taille du document, j'ai finalement décidé de les garder, désolé s'il est trop chargé.

Code : Tout sélectionner

\documentclass[draft, a4paper, 12pt]{report} 
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{caption, booktabs}
\usepackage{siunitx}

\begin{document} 

\newcommand*{\pc}[1]{\SI{#1}{\percent}}

\begin{table}[!htbp]
\centering\sisetup{table-format = 2.2}
\setlength{\extrarowheight}{2pt}
\setlength{\cmidrulekern}{0.35em}
\begin{tabular}{p{0.42\linewidth}*{2}{S}}
\toprule
& {Données de l'étude} & {Données de la littérature} \\
\cmidrule(lr){2-3}
{Proportion de femmes à l'Université} & \pc{74.5} & \pc{48.7}  \\
{UFR d'inscription} & & \\
{UFR \og Sciences, Technologies\fg} &  \pc{29.0} & \pc{21}   \\
{UFR \og Sciences humaines et sociales\fg} &  \pc{24.0} & \pc{18}   \\
{UFR \og Santé\fg} &  \pc{19.8} & \pc{17}  \\
{UFR \og Droit, économie, gestion et sciences politiques et sociales\fg} &  \pc{13.9} & \pc{27}   \\
{UFR \og Arts, lettres, langues\fg} &  \pc{13.3} & \pc{14} \\
\bottomrule
\end{tabular}
\end{table}

\end{document}
Dernière modification par Metamorphy le mercredi 23 septembre 2020, 19:07, modifié 1 fois.

MB
Administrateur
Administrateur
Messages : 7189
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Mise en page d'un tableau

Message par MB »

En ajoutant une commande du type \hspace{1em} devant chaque UFR <<xxx>> ?
MB (Pas d'aide en Message Privé)
Merci d'utiliser MathJax (voir ici) et d'éviter le style SMS pour la lisibilité des messages.

balf
Utilisateur chevronné
Utilisateur chevronné
Messages : 3969
Inscription : mercredi 02 janvier 2008, 23:18

Re: Mise en page d'un tableau

Message par balf »

Bonsoir,

Je vous propose cette mise en page:

Code : Tout sélectionner

\documentclass[draft, french, a4paper, 12pt]{report}
\usepackage[T1]{fontenc}
\usepackage{babel} %\usepackage[showframe]{geometry} 
\usepackage{array}
\usepackage{caption, booktabs}
\usepackage{siunitx}
\usepackage{eqparbox, makecell}
\usepackage[svgnames, table]{xcolor} 

\begin{document}

\newcommand*{\pc}[1]{\SI{#1}{\percent}}

\begin{table}[!htbp]
\centering\sisetup{table-format = 2.2}
\setlength{\extrarowheight}{2pt}
\setlength{\cmidrulekern}{0.35em}
\begin{tabular}{l@{}l*{2}{S}}%
\toprule
 & & \multicolumn{2}{c}{Données de}\\
 & & \eqmakebox[H]{l’étude} & \eqmakebox[H]{la littérature} \\
\cmidrule(lr){3-3}\cmidrule(lr){4-4}
\multicolumn{2}{l}{Proportion de femmes à l'Université} & \pc{74.5} & \pc{48.7} \\[1.5ex]
\rowcolor{Gainsboro!60!Lavender}\bfseries UFR ~ &\smash{\bfseries d'inscription} &\multicolumn{2}{c}{\cellcolor{white}} \\[0.5ex]
& \og Sciences, Technologies\fg & \pc{29.0} & \pc{21} \\
& \og Sciences humaines et sociales\fg & \pc{24.0} & \pc{18} \\
& \og Santé\fg & \pc{19.8} & \pc{17} \\
& \makecell[l]{\og Droit, économie, gestion et\\
  \phantom{\og }sciences politiques et sociales\fg} & \pc{13.9} & \pc{27} \\
& \og Arts, lettres, langues\fg & \pc{13.3} & \pc{14} \\
\bottomrule
\end{tabular}
\end{table}

\end{document} 
B. A.
miseenpagetableau.pdf
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

Metamorphy
Utilisateur confirmé
Utilisateur confirmé
Messages : 15
Inscription : lundi 14 septembre 2020, 10:37
Statut actuel : Étudiant

Re: Mise en page d'un tableau

Message par Metamorphy »

Merci à tous les deux.
Je suis intéressé par ton option Balf, mais il y a plusieurs parties du code que je ne comprend pas (et je n'aime pas trop mettre un code que je ne comprend pas parce qu'après je n'ose pas trop y toucher).

Est-ce que tu pourrais m'expliquer à quoi servent les parties suivantes stp ?

Code : Tout sélectionner

\begin{tabular}{l@{}l*{2}{S}}%
J'ai compris que tu dis qu'il faut qu'il y ait 4 cellules, les deux premières alignées à gauche puis 2 "S" selon le package siunitx (j'ai pas bien compris quelles propriétés elles avaient d'ailleurs ces cellules S) mais à quoi sert cette partie @{} stp ?

Et cette consigne \eqmakebox[H] ?

Celle-ci aussi [1.5ex] que tu mets en fin de ligne, avec une valeur variable ?

Celle-là \rowcolor{Gainsboro!60!Lavender}\bfseries UFR ~ &\smash{\bfseries d'inscription}. Pourquoi ne pouvais-t-on pas faire avec {cellcolor} comme tu le fais pour les autres cellules de la ligne ?

Et enfin, je n'ai pas compris la manipulation ici :

Code : Tout sélectionner

& \makecell[l]{\og Droit, économie, gestion et\\
  \phantom{\og }sciences politiques et sociales\fg} & \pc{13.9} & \pc{27} \\
Merci par avance,
Metamorphy.

balf
Utilisateur chevronné
Utilisateur chevronné
Messages : 3969
Inscription : mercredi 02 janvier 2008, 23:18

Re: Mise en page d'un tableau

Message par balf »

Metamorphy a écrit :
lundi 14 septembre 2020, 18:45
Est-ce que tu pourrais m'expliquer à quoi servent les parties suivantes stp ?
Bien volontiers. Voici :

Pour indenter la liste des UFR machin-chose, j'ai pensé que le plus simple et, à mon gré, le plus plaisant, était de ne pas répéter UFR ad nauseam, mais en gardant l'intitulé proprement dit à la même position, d'où l'idée de scinder la ligne au-dessus en deux cellules, donc de rajouter une colonne à gauche.
Toutefois, ceci introduit entre « UFR » et « d'inscription » une espace relativement conséquente de 2 \tabcolsep, c.-à-d. par défaut 12 pt (un peu plus de 4 mm). J'ai donc préféré supprimer l'espace entre les deux premières colonnes, ce que fait le code @{}. D'une façon générale, @{commandes} exécute les commandes à la place des deux espacements de \tabcolsep (un par colonne adjacente). Pas utilisé ici, mais utile à savoir: !{commandes} insère le résultat des commandes en plus de l'espacement, au lieu de le remplacer.

\eqmakebox est utilisé parce que les en-tête des deux dernières colonnes n'ont pas la même longueur, et que cela se remarque d'autant plus qu'il y a des lignes de soulignement. L'extension eqparbox permet de définir des commandes de boîtes comme les commandes de base de LaTeX, à ceci près qu'au lieu d'un argument de longueur, il utilise un système de « tags » (je ne sais pas trop comment traduire — labels ?) qui fait que toutes les boîtes utilisant le même tag ont la longueur naturelle du plus long contenu, sans avoir à tâtonner pour déterminer la longueur idoine.

\\[1.5]ex rajoute un espacement vertical de 1.5ex entre deux lignes consécutives. Les valeurs on été choisies à l'œil. J'aurais pu aussi bien utiliser la commande \addlinespace de booktabs, qui accepte un argument optionnel.

Pour \rowcolor, c'est juste pour ne pas avoir à répéter \cellcolor.

Enfin l'extension makecell permet, avec sa commande éponyme (et quelques autres) de passer à la ligne dans des cellules standard (r, l ou c) qui normalement ne le permettent pas, ce que j'ai dû faire dans l'avant-dernière ligne, pour faire tenir la table à l'intérieur des marges. D'autre part, le \phantom{\og} est destiné à ce que la seconde ligne dans l'argument de cette commande soit alignée avec le texte de la première, et non avec le guillement ouvrant.

Voilà — j'espère avoir été à peu près clair.

B. A.

Metamorphy
Utilisateur confirmé
Utilisateur confirmé
Messages : 15
Inscription : lundi 14 septembre 2020, 10:37
Statut actuel : Étudiant

Re: Mise en page d'un tableau

Message par Metamorphy »

Merci pour ta réponse ultra détaillée !! J'ai tout compris (ou presque).

Désolé pour le temps de réponse, je n'ai pas eu le temps de me repencher sur le sujet avant ce matin.

J'ai utilisé ton code mais en ajoutant une légende en bas de tableau (j'ai préféré l'ajouter dans une fusion des 4 cellules, je trouvais le résultat plus joli qu'en \caption), ça a allongé le tableau, mais uniquement la dernière colonne.
Je pensais que \eqmakebox ferait deux cellules identiques (make equal boxes), j'ai jeté un coup d'oeil au fichier du package mais je n'ai pas vraiment compris ... Est-ce que tu saurais comment fixer cela stp ?

Code : Tout sélectionner

\documentclass[draft, french, a4paper, 12pt]{report}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel} %\usepackage[showframe]{geometry} 
\usepackage{array}
\usepackage{caption, booktabs}
\usepackage{siunitx}
\usepackage{eqparbox, makecell}
\usepackage[svgnames, table]{xcolor} 
	\definecolor{minigris}{gray}{0.90}

\begin{document}

\newcommand*{\pc}[1]{\SI{#1}{\percent}}

\begin{table}[!htbp]
\centering\sisetup{table-format = 2.2}
\setlength{\extrarowheight}{2pt}
\setlength{\cmidrulekern}{0.35em}
\caption{Caractéristiques sociodémographiques des répondants et comparaison avec la population étudiante générale.}
\begin{tabular}{l@{}l*{2}{S}}
\toprule
 & & \multicolumn{2}{c}{Données}\\
 & & \eqmakebox[H]{Étude} & \eqmakebox[H]{Littérature} \\
\cmidrule(lr){3-3}\cmidrule(lr){4-4}
\multicolumn{2}{l}{Proportion de femmes à l'Université} & \pc{74.5} & \pc{48.7} \\[1.5ex]
\cmidrule(lr){1-4}
\multicolumn{4}{l}{\makecell[l]{\footnotesize\emph{Concernant les UFR : le total fourni par l'Université de Strasbourg n'atteint pas ici 100\% car ils ont}\\ 
\footnotesize\emph{une cinquième catégorie nommée \og Plurisciences\fg.}}}\\
\bottomrule
\end{tabular}
\label{CSD}
\end{table}

\end{document} 
J'ai réduit au maxi le code de l'exemple, mais la partie avec les UFR n'a pas été supprimée ;)

Merci par avance,

Métamorphy

balf
Utilisateur chevronné
Utilisateur chevronné
Messages : 3969
Inscription : mercredi 02 janvier 2008, 23:18

Re: Mise en page d'un tableau

Message par balf »

Bonjour,
Une façon simple de parer à ce problème consiste à utiliser l'environnement tablenotes de threeparttable. Au passage, je rappelle que maintenant, l'encodage d'entrée par défaut pour latex est utf8, qui est aussi l'encodage par défaut de la plupart, sinon la totalité, des éditeurs modernes. J'ai donc supprimé l'appel de inputenc. Voici un code :

Code : Tout sélectionner

\documentclass[draft, french, a4paper, 12pt]{report}
\usepackage[T1]{fontenc}
\usepackage{babel} 
\usepackage{array}
\usepackage{caption, booktabs}
\usepackage{siunitx}
\usepackage{eqparbox, makecell}
\usepackage[flushleft]{threeparttable} 
\usepackage[svgnames, table]{xcolor}
\definecolor{minigris}{gray}{0.90}

\begin{document}

\newcommand*{\pc}[1]{\SI{#1}{\percent}}

\begin{table}[!htbp]
\begin{threeparttable}[flushleft]
\centering\sisetup{table-format = 2.2}
\setlength{\extrarowheight}{2pt}
\setlength{\cmidrulekern}{0.35em}
\caption{Caractéristiques sociodémographiques des répondants et comparaison avec la population étudiante générale.}
\label{CSD}
\begin{tabular}{l@{}l*{2}{S}}
\toprule
 & & \multicolumn{2}{c}{Données}\\
 & & \eqmakebox[H]{Étude} & \eqmakebox[H]{Littérature} \\
\cmidrule(lr){3-3}\cmidrule(lr){4-4}
\multicolumn{2}{l}{Proportion de femmes à l'Université} & \pc{74.5} & \pc{48.7} \\[1.5ex]
\cmidrule(lr){1-4}
\rowcolor{Gainsboro!60!Lavender}\bfseries UFR ~ &\smash{\bfseries d'inscription} &\multicolumn{2}{c}{\cellcolor{white}} \\[0.5ex]
& \og Sciences, Technologies\fg & \pc{29.0} & \pc{21} \\
& \og Sciences humaines et sociales\fg & \pc{24.0} & \pc{18} \\
& \og Santé\fg & \pc{19.8} & \pc{17} \\
& \makecell[l]{\og Droit, économie, gestion et\\ \phantom{\og }sciences politiques et sociales\fg} & \pc{13.9} & \pc{27} \\
& \og Arts, lettres, langues\fg & \pc{13.3} & \pc{14} \\
\bottomrule
\end{tabular}
\begin{tablenotes}
  \footnotesize\em
\item \hskip-\fontdimen2\font Concernant les UFR : le total fourni par l'Université de Strasbourg n'atteint pas ici 100\% car ils ont une cinquième catégorie nommée \og Plurisciences\fg.
\end{tablenotes}
\end{threeparttable}
\end{table}

\end{document} 
et le résultat :
miseenpagetableau-1.pdf
J'espère que ça convient.
B. A.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

Metamorphy
Utilisateur confirmé
Utilisateur confirmé
Messages : 15
Inscription : lundi 14 septembre 2020, 10:37
Statut actuel : Étudiant

Re: Mise en page d'un tableau

Message par Metamorphy »

C'est super merci beaucoup !

Je termine sur une dernière question. À quoi sert le \smash stp ?

En cherchant sur internet ils disaient que cela permettait d'imprimer ce qu'il contenait, comme si sa hauteur et sa profondeur étaient nulles ... j'avoue que je ne comprend pas bien du coup.

Encore merci !!