Je me plonge avec délices dans l'extension spreadtab, de Christian Tellechea, dont je puis déjà dire qu'elle m'est très utile. Néanmoins, je tombe sur un cas étonnant : dans un document j'ai un grand tableau recensant la présence ou non de différents individus lors de différents événements. Je remplis les cases du tableau avec les D'où ma question : Voici un exemple : Ouvrir dans l'éditeur
\documentclass[12pt, oneside, a4paper]{article} \usepackage[utf8x]{inputenc} \usepackage[T1]{fontenc} %\usepackage{multirow} \usepackage[light ]{kpfonts} \usepackage{marvosym} \begin{document} \pagestyle{empty} \begin{center} \begin{tabular}{|l|c|c|c|c|} \hline & Julie & Albertine & Solange & Thérèse \\ \hline \hline Villefort & & & \Checkedbox & \Checkedbox\\ \hline Tarare & & \Checkedbox & \Checkedbox & \Checkedbox\\ \hline Sommepy-Tahure & \Checkedbox & & & \Checkedbox \\ \hline Quend & \Checkedbox & \Checkedbox & & \Checkedbox\\ \hline \hline \textbf{Total} & 2 & 2 & 2 & 4 \\ \hline \end{tabular} \end{center} \end{document} Une case pleine indique que la personne était présente, une case vide indique son absence : je trouve plus juste d'utiliser une Mais les totaux deviennent difficiles à calculer à la main si le tableau ci-dessus a 30 colonnes de 58 rangées. D'où mon souhait de recourir à un outil automatisant ces additions. Posée 14 Avr '16, 19:26 Pathe ♦♦
Affichage de 5 parmi 8
Afficher 3 commentaire(s) en plus
|
En attendant qu'une meilleure solution soit proposée, en voici une, pas très élégante ni très propre : Ouvrir dans l'éditeur
\documentclass{article} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{marvosym,array} \makeatletter \def\csdef#1#2{\csname #1def\expandafter\endcsname\csname#2\endcsname} \def\defcumul#1{% \csdef{}{cumul#1}{% \csdef g{total@#1}{0}% \csdef g{cumul#1}{% \gdef\Ckbox{\Checkedbox \csdef x{total@#1}{\number\numexpr\csname total@#1\endcsname+1}% }% }% }% \csdef{}{total#1}{\csname total@#1\endcsname}% } \@for\@iter:=i,ii,iii,iv\do{\expandafter\defcumul\expandafter{\@iter}}% \makeatother \begin{document} \pagestyle{empty} \begin{center} \begin{tabular}{|l<\cumuli|c<\cumulii|c<\cumuliii|c<\cumuliv|c|}\hline & Julie & Albertine & Solange & Thérèse\\\hline\hline Villefort & \Ckbox & & \Ckbox & \Ckbox\\\hline Tarare & & \Ckbox & \Ckbox & \Ckbox\\\hline Sommepy-Tahure & \Ckbox & & & \Ckbox \\\hline Quend & \Ckbox & \Ckbox & & \Ckbox\\\hline\hline \textbf{Total} & \totali & \totalii & \totaliii & \totaliv\\\hline \end{tabular} \end{center} \end{document} Voici une autre approche qui utilise Ouvrir dans l'éditeur
\documentclass{article} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{marvosym,collcell,spreadtab} \newcolumntype C{>{\collectcell\testcell}c<\endcollectcell} \def\testcell#1{\IfInteger{#1}{\ifnum#1<0 \number-#1 \else\ifnum#1=1 \Checkedbox\fi\fi}{#1}} \begin{document} \spreadtab{{tabular}{|l|*{4}{C|}}}\hline & @Julie & @Albertine & @Solange & @Thérèse\\\hline\hline @Villefort & 1 & & & 1 \\\hline @Tarare & & 1 & 1 & 1 \\\hline @Sommepy-Tahure & 1 & & & 1 \\\hline @Quend & 1 & 1 & & 1 \\\hline\hline @\textbf{Total} & \STcopy>{-sum(b2:[0,-1])} & & & \\\hline \endspreadtab \end{document} Publiée 15 Avr '16, 11:29 unbonpetit ♦♦ |
Voici une solution. Le total de chaque colonne est sauvegardé dans la macro Au début de chaque ligne, le compteur des colonnes est remis à zéro puis incrémenté à partir de la deuxième colonne. Le contenu de la case est sauvegardé dans une boîte temporaire, ce qui permet de savoir si elle est vide ou pas, et donc d'incrémenter le total ou non. Remarque : les totaux sont calculés automatiquement quel que soit le contenu des cases. Ouvrir dans l'éditeur
\documentclass[12pt, oneside, a4paper]{article} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[light]{kpfonts} \usepackage{marvosym} \usepackage{array} \newcounter{mt} \newsavebox\mtbox \newcolumntype{L}{>{\setcounter{mt}{0}}l} \newcolumntype{C}{% >{\stepcounter{mt}% \sbox\mtbox\bgroup}c<{\egroup% \ifdim\wd\mtbox>0pt \expandafter\ifx\csname mtt\themt\endcsname\relax \expandafter\xdef\csname mtt\themt\endcsname{0} \else \expandafter\xdef\csname mtt\themt\endcsname{% \the\numexpr\csname mtt\themt\endcsname+1\relax}% \fi \usebox\mtbox% \fi}} \newcommand*\mttotal{% \multicolumn{1}{c|}{\stepcounter{mt}\csname mtt\themt\endcsname} } \begin{document} test \begin{center} \begin{tabular}{|L|C|C|C|C|} \hline & Julie & Albertine & Solange & Thérèse \\ \hline \hline Villefort & & & \Checkedbox & \Checkedbox\\ \hline Tarare & & \Checkedbox & \Checkedbox & \Checkedbox\\ \hline Sommepy-Tahure & \Checkedbox & & & \Checkedbox \\ \hline Quend & \Checkedbox & \Checkedbox & & \Checkedbox\\ \hline \hline \textbf{Total} & \mttotal & \mttotal & \mttotal & \mttotal \\ \hline \end{tabular} \end{center} \end{document} « qui est fonction indépendamment de nombre de colonnes » : pourriez-vous expliciter ?
(16 Avr '16, 18:28)
Pathe ♦♦
le nombre de colonnes dans le tableau 5 ou 7 ou 10 ...
(16 Avr '16, 18:55)
touhami
|
Je pense que ce sera plus simple de définir une commande qui fait ce travail. Par exemple : Ouvrir dans l'éditeur
\documentclass{article} \usepackage{marvosym} \newcounter{mt} \newcommand*{\mtCheckedbox}{\Checkedbox\stepcounter{mt}} \begin{document} \begin{tabular}{|c|c|c|} \hline \mtCheckedbox & & \\ \hline & \mtCheckedbox & \\ \hline \mtCheckedbox & & \mtCheckedbox \\ \hline \mtCheckedbox & \mtCheckedbox & \\ \hline \end{tabular} il y a \themt{} \Checkedbox{} et pas plus de \themt{}. \end{document} Publiée 14 Avr '16, 21:57 touhami |
Je ne comprends absolument pas ce que vous voulez faire. Vous ne dites pas quel usage sera fait de ce compteur ni si c'est vraiment le boulot
spreadtab
ni quel est le rapport avec les macros\CheckedBox
.Pour tester si une case est « pleine » ou vide, il n'y a nul besoin de
spreadtab
(encore faut-il s'entendre sur ce qu'est « pleine » ou « vide ») : je dirais donc que ce compteur n'est en rien l'affaire despreadtab
. Attention,spreadtab
ne s'occupe que du calcul et avant que le tableau ne soit vu puis construit par l'environnementtabular
ou autre.Je m'explique : le tableau, très grand, comprend des cases qui sont soit vides soit pleines (en l'occurence, pleines d'une
\CheckedBox
).Pour utiliser
spreadtab
, qui me simplifierait grandement la tâche, dois-je remplacer le contenu de toutes les cases pleines par le chiffre 1, ceci pour permettre le calcul de totaux au bas de chaque colonne ?Ou y a-t-il une solution qui me permettrait de garder l'apparence actuelle tout en bénéficiant des fonctionnalités de calcul offertes par
spreadtab
?C'est quoi les « totaux » ? Avez-vous vraiment besoin de ces valeurs cumulatives dans les calculs faits par
spreadtab
?Au point où nous en sommes, tout serait plus simple et on serait moins obligés de jouer au devinettes si vous donniez un ECM montrant le problème et ce que vous voulez...
@Pathe Hors sujet:
\CheckedBox
est définie parwasysym
alors que\Checkedbox
est définie parmarvosym
.Je viens d'ajouter un ECM... avec des checkedboxes correctement rédigées !
Vous n'avez donc visiblement pas besoin que le total soit accessible aux calculs faits par
spreadtab
. La solution prématurée que touhami avait faite puis effacée suite à mon commentaire est donc adaptée à ce problème. Je le laisse la reproduire.Ce fil et cette question n'a donc rien à voir avec
spreadtab
.Ah. Malheureusement je n'ai pas eu le temps de lire cette proposition avant son effacement. Je renommerai le fil, vu que spreadtab ne semble pas une solution.
Il ne s'agit pas d'accéder au total mais, vous l'aurez compris, de générer celui-ci automatiquement.
@unbonpetit la solution que j'ai effacée n'était pas vraiment adaptée à la situation : j'ai supposé que l'on avait besoin de la somme de tous les
\Checkedbox
dans le tableau alors que Pathe cherche la somme de chaque colonne.Je vais proposer une autre solution.