Historique des modifications [retour]
cliquez ici pour masquer/afficher la révision 2

22 Oct '15, 23:49

unbonpetit's gravatar image

unbonpetit
1.8k18

Voilà un truc bricolé vite fait. Dans la vraie vie, il faudrait évidemment rajouter les gardes-fous d'usage à coup de `\ifcsname`...`\endcsname` pour voir si la table est déjà définie lorsqu'on l'affiche et lorsqu'on y ajoute un truc. *Edit* : le `\begin{footnotesize}`...`\end{footnotesize}`, comme tout environnement de changement de taille de fonte, n'est pas recommandé dans la vraie vie. En fait, cet environnement sert juste à s'assurer que la macro `\check@tabname` ne se trompe pas de `\end` : elle ajoute bien le contenu supplémentaire avant le `\end{<x>}` (ou `<x>` est l'environnement de tableau spécifié après le premier `\begin` dans `\newtable`) et non pas avant le premier \end qu'elle rencontre. \documentclass{article} \makeatletter \def\gob@tonil#1\@nil{} \def\newtable#1#2{% \expandafter\def\csname tab@@#1\endcsname{#2}% \def\find@tabname##1\begin{% \afterassignment\gob@tonil \expandafter\def\csname tabname@@#1\endcsname }% \find@tabname#2\@nil } \def\showtable#1{\csname tab@@#1\endcsname} \def\addtototable#1#2{% \let\collect@tab\empty \def\check@tabname##1\end##2##3\@nil{% \def\close@envname{##2}% \expandafter\ifx\csname tabname@@#1\endcsname\close@envname\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi \csname @\expandafter\ifx\csname tabname@@#1\endcsname\close@envname first\else second\fi oftwo\endcsname {\g@addto@macro\collect@tab{##1#2\end{##2}##3}% \expandafter\let\csname tab@@#1\endcsname\collect@tab } {\g@addto@macro\collect@tab{##1\end{##2}}% \check@tabname##3\@nil }% }% \expandafter\expandafter\expandafter\check@tabname\csname tab@@#1\endcsname\@nil } \makeatother \begin{document} \newtable{matable}{% définit une table \begin{tabular}{|c|c|c|}\hline 1 & 2 & 3\\\hline foo foo\begin{footnotesize}minus\end{footnotesize} & bar & baz\\\hline \end{tabular}} Voici "matable" : \showtable{matable}% l'affiche \bigbreak \addtototable{matable}{valeur 1 & valeur 2 & valeur 3\\\hline}% ajoute une ligne Voici ma table : \showtable{matable} \bigbreak \addtototable{matable}{\multicolumn{2}{|c|}{truc 1\begin{footnotesize}minus\end{footnotesize}} 1} & truc 2\\\hline}% ajoute une autre ligne Voici ma table : \showtable{matable} \end{document}
cliquez ici pour masquer/afficher la révision 1

22 Oct '15, 21:08

unbonpetit's gravatar image

unbonpetit
1.8k18

Voilà un truc bricolé vite fait. Dans la vraie vie, il faudrait évidemment rajouter les gardes-fous d'usage à coup de `\ifcsname`...`\endcsname` pour voir si la table est déjà définie lorsqu'on l'affiche et lorsqu'on y ajoute un truc. \documentclass{article} \makeatletter \def\gob@tonil#1\@nil{} \def\newtable#1#2{% \expandafter\def\csname tab@@#1\endcsname{#2}% \def\find@tabname##1\begin{% \afterassignment\gob@tonil \expandafter\def\csname tabname@@#1\endcsname }% \find@tabname#2\@nil } \def\showtable#1{\csname tab@@#1\endcsname} \def\addtototable#1#2{% \let\collect@tab\empty \def\check@tabname##1\end##2##3\@nil{% \def\close@envname{##2}% \expandafter\ifx\csname tabname@@#1\endcsname\close@envname\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi {\g@addto@macro\collect@tab{##1#2\end{##2}##3}% \expandafter\let\csname tab@@#1\endcsname\collect@tab } {\g@addto@macro\collect@tab{##1\end{##2}}% \check@tabname##3\@nil }% }% \expandafter\expandafter\expandafter\check@tabname\csname tab@@#1\endcsname\@nil } \makeatother \begin{document} \newtable{matable}{% définit une table \begin{tabular}{|c|c|c|}\hline 1 & 2 & 3\\\hline foo & bar & baz\\\hline \end{tabular}} Voici "matable" : \showtable{matable}% l'affiche \bigbreak \addtototable{matable}{valeur 1 & valeur 2 & valeur 3\\\hline}% ajoute une ligne Voici ma table : \showtable{matable} \bigbreak \addtototable{matable}{\multicolumn{2}{|c|}{truc 1\begin{footnotesize}minus\end{footnotesize}} & truc 2\\\hline}% ajoute une autre ligne Voici ma table : \showtable{matable} \end{document}

C'est votre première visite ici ? Consultez la FAQ !

×