# Problem with the optional value of the first argument of a newcommand

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}

%définition de variable texte pour compilation conditionnelle
\def\ChoixDeVersion{AB} %AB=Avec Barème, SB ou autre = sans bareme

\usepackage{ifthen}
\newcommand{\bareme}[1][2 ]{%
\ifthenelse{\equal{\ChoixDeVersion}{AB}}%
{#1 AB \ignorespaces}%
{#1 \ignorespaces}%
}
\begin{document}
\bareme{123 }
\end{document}


The optional value of the first argument of the command \bareme is displayed all the time even if i give an argument when I call the command

\bareme{123 } gives

I would espect 123 AB. The value of the argument when I call the command (123) should take the place of the optional value (2 ) of the first argument (#1).

Where is my mistake ?

• If there is just one (optional) argument, shouldn't it be \bareme[123 ]? Nov 4 '17 at 14:28
• I give first the number of argument [1] and then the default value of the first arguement [2] (2 is the default value). For me \bareme[123 ] would mean 123 arguments for the command \bareme Nov 4 '17 at 14:35
• Ahhh you mean for the call. Sounds strange to me, but that gives the result. Thank you so much. Nov 4 '17 at 14:40
• Strange? The syntax for optional argument has always been with brackets [...], not with braces {...} Nov 4 '17 at 14:53
• Would it be possibe to make change(s) in a way to ge the value by \bareme{value} ? I would like to have the same syntaxe with the value \bareme{value}and default value \bareme{} Nov 4 '17 at 18:46

Disclaimer: I don't recommend the misuse of the g or G optional argument specifier as {} usage.

LaTeX has only [] as optional argument for \newcommand etc. With g or G from xparse (which uses expl3 as 'upcoming' format of LaTeX 3) it is possible to apply \NewDocumentCommand and provide G{2} as optional argument that can be used with {} instead of [] -- 2 is the default value of the argument if it is not specified at all.

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}

\usepackage{xparse}

%définition de variable texte pour compilation conditionnelle
\def\ChoixDeVersion{AB} %AB=Avec Barème, SB ou autre = sans bareme

\usepackage{ifthen}
\NewDocumentCommand{\bareme}{G{2}}{%
\ifthenelse{\equal{\ChoixDeVersion}{AB}}%
{#1 AB \ignorespaces}%
{#1 \ignorespaces}%
}
\begin{document}
\bareme{123}

\bareme
\end{document}