The problem with the current macro is that it unwanted whitespace is added from due to indentation. Add some % add the line ends to get rid of these. However, the current definition also produces a warning after you use \mulspc more than once. That is because the counter definition \newcounter{ctra} is contained within the \newcommand{\mulspc}. Rather define the counter outside the macro definition. Another drawback is that the space offered by \mulspc{0} should be non-existent, which it is not, even if you add % to remove the unwanted spaces. For example, the code:
\documentclass{article} \usepackage{xifthen} \newcounter{ctra}% \newcommand{\mulspc}[1]{ \setcounter{ctra}{0}% \whiledo {\value{ctra} < #1}% {\hspace*{2mm}\stepcounter{ctra}}% } \begin{document} \fbox{\mulspc{0}}% Zero spaces \fbox{}% Empty \fbox \fbox{\mulspc{1}} % One space \fbox{\mulspc{3}} % Produces exactly 3 spaces \end{document}
produces:

To get rid of this spacing, you could use a condition on the parameter passed to \mulspc:
\newcommand{\mulspc}[1]{ \ifthenelse{#1>0}{% \setcounter{ctra}{0}% \whiledo {\value{ctra} < #1}% {\hspace*{2mm}\stepcounter{ctra}}% }{\unskip}% }
providing \unskip if there is a parameter passed with value less than 1. This produces:

Another alternative would be to use the easy interface of the multido package, and define (say)
\usepackage{multido}% A loop facility for Generic TeX ... \newcommand{\Mulspc}[1]{% \multido{\iA=0+1}{#1}{\hspace*{2mm}}% }
that you can use in a similar way, and is a little cleaner code-wise.