Je voudrais savoir comment créer un raccourci de multicolumn avec le nombre de colonne comme valeur par défaut.

Voici un ECM expliquant le problème renconté

Ouvrir dans l'éditeur Overleaf
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[a4paper]{geometry}
\usepackage{babel}

\newcommand{\tcellfont}{\bfseries}
\newcommand*{\tcell}[2]{\multicolumn{#1}{|c|}{\tcellfont #2}}
\newcommand*{\tcellbis}[2][1]{\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}

Mais lorsque je définis la même commande avec une valeur par défaut,\\
 j'obtiens l'erreur <<\verb|Misplaced \omit|>>

\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}

Posée 19 Aoû '18, 18:51

Hugues's gravatar image

Hugues
772916
Taux d'acceptation : 25%

Modifiée 20 Aoû '18, 13:48

touhami's gravatar image

touhami
9.7k410

La commande \multicolumn doit être utiliser avant tout autre chose dans la cellule, ici il a une teste faite par LaTeX pour détecter la présence de l'argument optionnel.

(19 Aoû '18, 19:57) touhami touhami's gravatar image

\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

Ouvrir dans l'éditeur Overleaf
\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

Ouvrir dans l'éditeur Overleaf
\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 : ! Misplaced \omit. 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 utiliser les commandes de l'extension xparse.

Ouvrir dans l'éditeur Overleaf
\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}
Lien permanent

Publiée 20 Aoû '18, 01:56

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 20 Aoû '18, 13:47

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.