Je cherche à créer une commande, sans l'appel à des extensions particulières, du type :

Ouvrir dans l'éditeur Overleaf
\macommande[champ optionnel]{champ obligatoire}

avec le comportement qui suit :

  • si « champ optionnel » existe alors donner accès à « champ optionnel » et « champ obligatoire » (dans deux chaînes de caractères différentes);
  • sinon, « champ obligatoire » dans « champ optionnel » avec accès dans deux chaînes distinctes, toujours..

Ça revient un peu à la commande \chapter[titre court]{titre long} mais en simplifiant autant que possible.

Comment faire ?

Posée 10 Jan '17, 19:33

pluton's gravatar image

pluton
1.2k22836
Taux d'acceptation : 34%

Modifiée 08 Aoû '17, 02:23

Pathe's gravatar image

Pathe ♦♦
7.5k29197245


Voici une solution :

Ouvrir dans l'éditeur Overleaf
\newcommand{\macommande}[2][]{%
    \if\relax\detokenize{#1}\relax  pas de champ optionnel donc champ obligatoire = #2\else  champ optionnel existe et = #1\fi et champ obligatoire = #2}

ECM

Ouvrir dans l'éditeur Overleaf
\documentclass{article}

\newcommand{\macommande}[2][]{%
\if\relax\detokenize{#1}\relax  champ optionnel= #2\else  champ optionnel= #1\fi et champ obligatoire = #2}

\begin{document}
\macommande[11]{12}

\macommande{12}
\end{document}

Remarque On peut aussi définir cette commande par

Ouvrir dans l'éditeur Overleaf
\newcommand{\macommande}[2][]{%
\ifx\relax#1\relax  champ optionnel= #2\else  champ optionnel= #1\fi et champ obligatoire = #2}
Lien permanent

Publiée 10 Jan '17, 20:14

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 08 Aoû '17, 02:28

Pathe's gravatar image

Pathe ♦♦
7.5k29197245

oui mais il faudrait stocker les champs #1 et #2 pour les utiliser plus tard. Imaginons \montitre[titre court]{titre long} qui créé les chaînes \montitrecourt et \montitrelong qui peuvent ensuite être utilisées dans disons \cfoot{\montitrecourt} (pour illustrer) où \montitrelong est toujours "titre long" alors que \montitrecourt est "titre court" (quand il est indiqué) ou "titrelong" autrement? Sans le champ optionnel, la commande pourrait être \newcommand{\montitre}[1]{\def\montitrelong{#1}}.

(10 Jan '17, 21:37) pluton pluton's gravatar image
2

@pluton je n'ai pas bien compris (merci de préciser) mais voila

\newcommand{\macommande}[2][]{% \if\relax\detokenize{#1}\relax pas de champ optionnel donc champ obligatoire = #2\else champ optionnel existe et = #1\fi et champ obligatoire = #2}

donc par exemple

\newcommand{\macommande}[2][]{% \if\relax\detokenize{#1}\relax\def\titrecourt{#2}\else \def\titrecourt{#1}\fi\def\titrelong{#2}}.

(10 Jan '17, 22:08) touhami touhami's gravatar image

parfait, c'est bien la dernière idée qui convient.

(10 Jan '17, 22:18) pluton pluton's gravatar image

Ma solution :

Ouvrir dans l'éditeur Overleaf
\documentclass{minimal}
\makeatletter
\newcommand\macommande[2][\@nil]{%
  \def\@tempa{#1}%
  \ifx\@tempa\@nnil
     Argument optionnel absent, argument obligatoire = ``#2''.%
  \else
     Argument optionnel pr\'esent = ``#1'', argument obligatoire = ``#2''.%
  \fi
}
\makeatother
\begin{document}
   \begin{enumerate}
   \item \macommande[toto]{tata}
   \item \macommande[]{tata}
   \item \macommande{tata}
   \end{enumerate}
\end{document}
Lien permanent

Publiée 24 Jan '17, 23:14

vincentb1's gravatar image

vincentb1
1874
Taux d'acceptation : 0%

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.