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 \Checkedbox que me fournit l'extension marvosym, de Martin Vogel.

D'où ma question : spreadtab serait-il capable d'incrémenter de 1 un compteur que si une case est pleine, et ce quel que soit son contenu ?

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 \Checkedbox plutôt qu'un chiffre.

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's gravatar image

Pathe ♦♦
7.5k42204251
Taux d'acceptation : 55%

Modifiée 14 Avr '16, 23:01

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 de spreadtab. Attention, spreadtab ne s'occupe que du calcul et avant que le tableau ne soit vu puis construit par l'environnement tabular ou autre.

(14 Avr '16, 21:07) unbonpetit ♦♦ unbonpetit's gravatar image

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 ?

(14 Avr '16, 21:36) Pathe ♦♦ Pathe's gravatar image

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...

(14 Avr '16, 21:44) unbonpetit ♦♦ unbonpetit's gravatar image
1

@Pathe Hors sujet: \CheckedBox est définie par wasysym alors que \Checkedbox est définie par marvosym.

(14 Avr '16, 21:45) touhami touhami's gravatar image

Je viens d'ajouter un ECM... avec des checkedboxes correctement rédigées !

(14 Avr '16, 22:45) Pathe ♦♦ Pathe's gravatar image

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.

(14 Avr '16, 22:49) unbonpetit ♦♦ unbonpetit's gravatar image

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.

(14 Avr '16, 22:59) Pathe ♦♦ Pathe's gravatar image

@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.

(14 Avr '16, 23:34) touhami touhami's gravatar image
Affichage de 5 parmi 8 Afficher 3 commentaire(s) en plus

Voici une solution.

Le total de chaque colonne est sauvegardé dans la macro \mtt<nombredecolone>=\csname mtt\themt\endcsname.

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}
Lien permanent

Publiée 16 Avr '16, 15:10

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 16 Avr '16, 22:10

Pathe's gravatar image

Pathe ♦♦
7.5k42204251

« qui est fonction indépendamment de nombre de colonnes » : pourriez-vous expliciter ?

(16 Avr '16, 18:28) Pathe ♦♦ Pathe's gravatar image

le nombre de colonnes dans le tableau 5 ou 7 ou 10 ...

(16 Avr '16, 18:55) touhami touhami's gravatar image

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 spreadtab (on y revient...) et qui présente l'avantage de fonctionner pour les très grands tableaux sans avoir besoin de modifier la dernière ligne, celle des totaux. Ce n'est pas très adroit ici non plus ni très élégant, et je suis certain qu'un participant proposera une meilleure solution.

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}
Lien permanent

Publiée 15 Avr '16, 11:29

unbonpetit's gravatar image

unbonpetit ♦♦
1.8k18
Taux d'acceptation : 68%

Modifiée 15 Avr '16, 13:06

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}
Lien permanent

Publiée 14 Avr '16, 21:57

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.