Tableau avec entêtes en diagonale

Bonjour.

Longtemps lecteur de la liste GUT, je me réjouis de ce forum, notamment parce qu’il permet de poster des pièces jointes. J’en profite donc pour me lancer et poser ma première question, assortie d’une image explicative.

J’ai à composer un tableau avec des cellules peu remplies, si ce ne sont les entêtes de colonnes, qui comportent des textes explicatifs plus longs. Même en composant ces derniers sur plusieurs lignes, le résultat est assez moche. J’ai donc pensé à créer un tableau dont les entêtes sont inclinés, un peu comme sur cette image trouvée en ligne :

Y a-t-il un package LaTeX qui permette de faire ça facilement ? Je n’ai pas vraiment pas envie de créer de nouvelles commandes… ou de redéfinir l’environnement tabular !

Merci.

Jean-Michel

Bonjour,

voici une solution partielle :

\documentclass{article}
\usepackage{graphicx,array,calc}
\usepackage[locale=FR]{siunitx}
\DeclareSIUnit{\octet}{o}
%
\newlength{\hauteur}
\newcommand\penche[1]{%
  \multicolumn{1}{c}{%
    \settowidth{\hauteur}{\rotatebox{45}{\makebox{45}{#1}}}%
    \rule{0pt}{\hauteur}\rotatebox{45}{\makebox[0pt][l]{#1}}%
  }
}
\begin{document}
\begin{tabular}{l|*{5}{p{1cm}|}}
  \multicolumn{1}{c}{\rule{0pt}{\hauteur}} &
  \penche{Janvier}                         & \penche{Février}        & \penche{Mars}           & \penche{Avril}         & \penche{Mai}                                   \\\hline
  serveur 1                                & \qty{10}{\giga\octet}   & \qty{23.4}{\giga\octet} & *                      & *                     & \qty{3.6}{\tera\octet} \\\hline
  serveur 2                                & \qty{1.22}{\giga\octet} & \qty{1.7}{\tera\octet}  & \qty{1.9}{\giga\octet} & \qty{22}{\giga\octet} & *                      \\\hline
\end{tabular}
\end{document}

En particulier, je ne suis pas certain qu’on puisse facilement obtenir les filets obliques.

Merci pour votre réponse. Je suis étonné qu’aucun package ne traite cette question : j’avais le sentiment que l’un des nouveaux packages dédiés aux tableaux faisait ça.

Je vais tenter de le faire avec TikZ car je tiens aux filets inclinés et que mon tableau est court, mais ça ne va pas être une partie de plaisir !

Par ailleurs, une remarque : quand on choisi le thème sombre, votre exemple compilé apparaît en noir sur gris sombre — autant dire qu’il est très peu visible.

Merci pour votre réponse.

Je vous en prie.

Je suis étonné qu’aucun package ne traite cette question : j’avais le
sentiment que l’un des nouveaux packages dédiés aux tableaux faisait
ça.

Pas que je sache mais…

Je vais tenter de le faire avec TikZ car je tiens aux filets inclinés

… puisque vous évoquez TikZ, ça me fait penser que le package
nicematrix (qui fait aussi des nice tableaux :)) repose sur TikZ. J’ai
rapidement parcouru sa documentation mais n’y ai pas trouvé de filets
inclinés. Vous pouvez poser la question directement à l’auteur ; ou,
mieux, poser la question sur le site :

┌────
https://texnique.fr/
└────

de questions et réponses, (co)géré aussi par l’association GUTenberg,
sur lequel il est présent : ainsi tout le monde bénéficiera de sa
réponse.

Par ailleurs, une remarque : quand on choisi le thème sombre, votre
exemple compilé apparaît en noir sur gris sombre — autant dire qu’il
est très peu visible.

En effet, il faut que je demande à mon script de ne pas mettre de fond
transparent à mon image.

Merci pour votre conseil. Je viens d’ouvrir un fil sur TeXnique : on verra bien si nicematrix fonctionne.

Le package profcollege utilise le package nicematrix pour faire des filets inclinés de tableaux de numération.

1 « J'aime »
(pièces jointes)

5 « J'aime »

Merci pour cette utile information ! La documentation de ProfCollege comporte un exemple illustré, ce qui est très utile : je ne doute pas que nicematrix puisse faire cela, ni que sa documentation, que je viens de parcourir, explique comment procéder, mais elle ne présente hélas aucun exemple illustrant cette fonctionnalité.

Je vais à présent faire des essais (le tableau utilise des commandes multicolumn et multirow), et je posterai ici le résultat de mes efforts.

Voici un code, non optimal.

Certaines valeurs sont calculées à la main, pour l’instant, par exemple la hauteur réservée à la première rangée, et j’ai affiché le contenu de l’entête du tableau directement avec une boucle TikZ ; le problème est de pouvoir placer correctement le texte penché et c’est plus facile avec TikZ. Créer le texte penché n’est pas un problème, l’afficher non plus, mais c’est bien le placement qui n’est pas précis avec la méthode utilisant simplement \rotatebox, donc j’ai employé directement un nœud TikZ pour l’affichage.

Le package tabularray est employé.

Le code est clairement à optimiser pour automatiser certaines choses (j’ai employé \thecolcount qui contient le nombre de colonne du tableau, valeur automatiquement fournie par tabularray, mais d’autres trucs seraient à automatiser).

Disons que cela fourni une piste exploitable assez rapidement…

Par rapport à l’image d’exemple, j’ai modifié le surnaturel « 19,3 o » en 19,3 ko.

\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{tikz}
\usetikzlibrary{calc}
\usepackage[locale=FR,mode=text,reset-text-family = false]{siunitx}
\usepackage{siunitx}

\DeclareSIUnit{\octet}{o}

\begin{document}

\begin{tblrtikzabove}
\foreach \i in {1,...,\thecolcount}{
\draw (1-\i.south east) -- ++(50:1.75cm);
}
\foreach \i/\j  in {2/Janvier,3/Février,4/Mars,5/Avril,6/Mai} {
\node[rotate=50] at ($([shift={(50:1.75cm)}]1-\i.south west)!0.5!(1-\i.south east)$) {\sffamily\j};
}
\draw ([shift={(50:1.75cm)}]1-1.south east) -- ([shift={(50:1.75cm)}]1-6.south east);
\end{tblrtikzabove}%
\begin{tblr}{colspec={crrrrr},hline{2-Z},vlines={2-Z}{},cells={font=\sffamily},column{1}={font=\bfseries\sffamily},row{1}={halign=c,ht=1.25cm}}
 &   &   &   &   &   \\
serveur 1 & \qty{10}{\giga\octet} & \qty{23.4}{\giga\octet} & \textcolor{red}{*}  & \textcolor{red}{*}  & \qty{3.6}{\tera\octet} \\
serveur 2 & \qty{1.22}{\giga\octet} & \qty{1.7}{\tera\octet}  & \qty{1.9}{\giga\octet} & \qty{22}{\giga\octet} & \textcolor{red}{*} \\
serveur 3 & \textcolor{red}{*} & \textcolor{red}{*} & \textcolor{red}{*} & \qty{54}{\giga\octet} & \textcolor{red}{*}\\
serveur 4 & \qty{500}{\mega\octet} & \qty{2.2}{\tera\octet} & \textcolor{red}{*} & \textcolor{red}{*} & \qty{19,3}{\kilo\octet}           
\end{tblr}

\end{document}

1 « J'aime »

Une solution élégante a été publiée sur TeXnique.fr (LaTeX - Tableau avec entêtes en diagonale - TeXnique) par l’auteur du package nicematrix.

1 « J'aime »