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}


Tags:

Macros

Spacing