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

20 Aoû '18, 13:47

touhami's gravatar image

touhami
10.0k410

`\multicolumn` est une commande LaTeX utilisée pour fusionner des colonnes (plusieurs cases sur une même ligne). `\multicolumn` doit apparaitre comme le premier élément dans l'ensemble des cases concernées, plus précisément elle doit apparaitre immédiatement après `\\` ou `&`. Dans l'ECM de la question, il n'y a rien avant `\multicolumn` avec `\tcell`, alors que `\tcellbis` commence par une teste pour détecter la valeur de l'argument optionnel. Voici une petit explication. Commençons par deux exemples : **ECM** qui fonction \documentclass{article} \newcommand*{\tcell}[2]{% \empty% <----------------------------- \multicolumn{#1}{|c|}{\bfseries #2}} \begin{document} \begin{tabular}{|c|c|} \hline \tcell{1}{Titre1}&\tcell{1}{Titre2} \\ \hline 1 & 2 \\ \hline 3 & 4 \\ \hline \end{tabular} \end{document} **ECM** qui ne fonction pas \documentclass{article} \newcommand*{\tcell}[2]{% \relax% <----------------------------- \multicolumn{#1}{|c|}{\bfseries #2}} \begin{document} \begin{tabular}{|c|c|} \hline \tcell{1}{Titre1}&\tcell{1}{Titre2} \\ \hline 1 & 2 \\ \hline 3 & 4 \\ \hline \end{tabular} \end{document} **Pourquoi ?** `\empty` est une commande LaTeX qui se développe en rien (donc il n' y a rien avant `\multicolumn`) alors que `\relax` est une commande (primitive) non développable qui dit à TeX de ne rien faire. Avec `\relax` non développable `\multicolumn` n'est pas la première chose dans la cellule. **Addendum :** <font color="red">! Misplaced \\omit.</font> est une erreur générée par TeX le programme lui même, elle signifie que la commande `\omit` (la primitive à laquelle `\multicolumn` fait appel) est mal placée. **Solution** Pour résoudre le problème il faut passer par LaTeX3 (extension [xparse](https://www.ctan.org/pkg/xparse)) utiliser les commandes de l'extension [xparse](https://www.ctan.org/pkg/xparse). \documentclass[french]{article} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage[a4paper]{geometry} \usepackage{babel} \usepackage{xparse} \newcommand{\tcellfont}{\bfseries} \newcommand*{\tcell}[2]{\multicolumn{#1}{|c|}{\tcellfont #2}} \NewExpandableDocumentCommand{\tcellbis}{O{1}m}{\multicolumn{#1}{|c|}{\tcellfont #2}} \begin{document} La première commande avec deux arguments fonctionne bien \begin{table}[h] \centering \begin{tabular}{|c|c|} \hline \tcell{1}{Titre1}&\tcell{1}{Titre2} \\ \hline 1 & 2 \\ \hline 3 & 4 \\ \hline \end{tabular} \caption{essai1} \end{table} \begin{table}[h] \centering \begin{tabular}{|c|c|} \hline \tcellbis{Titre1}&\tcellbis{Titre2} \\ \hline 1 & 2 \\ \hline 3 & 4 \\ \hline \end{tabular} \caption{essai2} \end{table} \end{document}
cliquez ici pour masquer/afficher la révision 2

20 Aoû '18, 11:36

touhami's gravatar image

touhami
10.0k410

`\multicolumn` est une commande LaTeX utilisée pour fusionner des colonnes (plusieurs cases sur une même ligne). `\multicolumn` doit apparaitre comme le premier élément dans l'ensemble des cases concernées, plus précisément elle doit apparaitre immédiatement après `\\` ou `&`. Dans l'ECM de la question, il n'y a rien avant `\multicolumn` avec `\tcell`, alors que `\tcellbis` commence par une teste pour détecter la valeur de l'argument optionnel. Voici une petit explication. Commençons par deux exemples : **ECM** qui fonction \documentclass{article} \newcommand*{\tcell}[2]{% \empty% <----------------------------- \multicolumn{#1}{|c|}{\bfseries #2}} \begin{document} \begin{tabular}{|c|c|} \hline \tcell{1}{Titre1}&\tcell{1}{Titre2} \\ \hline 1 & 2 \\ \hline 3 & 4 \\ \hline \end{tabular} \end{document} **ECM** qui ne fonction pas \documentclass{article} \newcommand*{\tcell}[2]{% \relax% <----------------------------- \multicolumn{#1}{|c|}{\bfseries #2}} \begin{document} \begin{tabular}{|c|c|} \hline \tcell{1}{Titre1}&\tcell{1}{Titre2} \\ \hline 1 & 2 \\ \hline 3 & 4 \\ \hline \end{tabular} \end{document} **Pourquoi ?** `\empty` est une commande LaTeX qui se développe en rien (donc il n' y a rien avant `\multicolumn`) alors que `\relax` est une commande (primitive) non développable qui dit à TeX de ne rien faire. Avec `\relax` non développable `\multicolumn` n'est pas la première chose dans la cellule. **Addendum :** <font color="red">! Misplaced \\omit.</font> est une erreur générée par TeX le programme lui même même, elle signifie que la commande `\omit` (la primitive à laquelle `\multicolumn` fait appel) est mal placée. **Solution** Pour résoudre le problème il faut passer par LaTeX3 (extension [xparse](https://www.ctan.org/pkg/xparse)) \documentclass[french]{article} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage[a4paper]{geometry} \usepackage{babel} \usepackage{xparse} \newcommand{\tcellfont}{\bfseries} \newcommand*{\tcell}[2]{\multicolumn{#1}{|c|}{\tcellfont #2}} \NewExpandableDocumentCommand{\tcellbis}{O{1}m}{\multicolumn{#1}{|c|}{\tcellfont #2}} \begin{document} La première commande avec deux arguments fonctionne bien \begin{table}[h] \centering \begin{tabular}{|c|c|} \hline \tcell{1}{Titre1}&\tcell{1}{Titre2} \\ \hline 1 & 2 \\ \hline 3 & 4 \\ \hline \end{tabular} \caption{essai1} \end{table} \begin{table}[h] \centering \begin{tabular}{|c|c|} \hline \tcellbis{Titre1}&\tcellbis{Titre2} \\ \hline 1 & 2 \\ \hline 3 & 4 \\ \hline \end{tabular} \caption{essai2} \end{table} \end{document}
cliquez ici pour masquer/afficher la révision 1

20 Aoû '18, 01:56

touhami's gravatar image

touhami
10.0k410

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

×