# How to forward a command parameter?

I am defining a new command and a flag with:

\newcommand{\setActorsStyle}[1][1]{
\ifnum#1=1
\else
\fi
}

\newcommand{\flag}{0}


Calling the command as following with

\setActorsStyle[\flag{}]{}


results in compilation error Missing = inserted for \ifnum as if the parameter given to \ifnum is not an integer. What am I missing here ?

-
Note you should have a % at the end of every line that ends with { or } (but not 1) otherwise use of this command will generate white space in the printed output. – David Carlisle Sep 2 '14 at 13:20
The {} trick should be used only when you want to ensure that following spaces are not gobbled, so usually for commands that do typesetting. – egreg Sep 2 '14 at 13:38

You shouldn't have the empty braces after \flag.

\documentclass{article}
\ifnum#1=1
\typeout{ONE!}
\else
\typeout{NOT ONE!}
\fi
}

\newcommand{\flag}{0}



Here I have disabled the two macros whose definition I do not have, and used \typeout to display a message in the terminal, to show that the modified code works.

The problem with the original version is that #1 expands to the number 0 followed by an empty group. This combination is not a number, so it breaks the syntax for \ifnum. You could get away with \flag{} if you did

\ifnum1=#1


because then the expansion would yield \ifnum1=0{} which is ok.

-
Thanks ! Can you please explain why in this particular case I shouldn't use the empty braces ? – Manuel Selva Sep 2 '14 at 13:06
@ManuelSelva with the braces it is \ifnum0{}=1 which is a syntax error. – David Carlisle Sep 2 '14 at 13:18
@ManuelSelva --- I have edited my answer. – Ian Thompson Sep 2 '14 at 13:24
With \ifnum#1=1 the space token caused by the end-of-line is ignored. With \ifnum1=#1 it wouldn't when #1 is \flag{}. To cope with this you should have \ifnum 1=#1\relax – egreg Sep 2 '14 at 13:42