Ignoring space between empty/optional command arguments
Let's see what happens:
\timeperiod{June}{2000}{July}{2001}
becomes
June•2000•--•July•2001
(where I use •
to make spaces more visible). With
\timeperiod{June}{2000}{}{2001}
you get
June•2000•--••2001
Indeed consecutive spaces are reduced to one only when TeX is reading input and converting it to tokens; the definition text has already been tokenized, so those two spaces remain. You can avoid the double space by saying
\newcommand{\timeperiod}[4]{%
#1 #2 -- #3\unskip\space#4%
}
If #3
is empty, the \unskip
will remove the space between --
and the (empty) argument. If #3
is not empty, \unskip
will do nothing.
use
\newcommand\timeperiod[4] {#1 #2 -- \ifx\relax#3\relax\else#3~\fi#4}