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.