# No space following macro without argument

With a macro such as:

\def\naive{na\"{\i}ve}


I find that the space which I would hope to follow it, is absent. So, with

the \naive approach


I get

the naïveapproach

in the output. How do I bring back the space?

-

The problem of using \naive\ or \naive{}: If you happen to forget the closing backslash/braces, you'll end with gobbled space without noticing it.

The problem of adding \xspace to a macro's definition: This may produce inconsistent spacing if the macro uses \emph. See xspace and italic correction for details.

In the thread linked above, Will Robertson suggested to use "delimited" macros (e.g. with / at the end) as an alternative. The main advantage of \naive/ is that an error message will occur if you happen to forget the closing slash.

\documentclass{article}

\newcommand{\naive}{}% To make sure that \naive isn't already defined
\def\naive/{na\"{\i}ve}

\begin{document}

the \naive/ approach

\end{document}


-
no, then it should be \@ifdefinable{...} –  Herbert Aug 16 '11 at 11:13
@Herbert: I don't know \@ifdefinable{...}, why is it better? –  user4417 Aug 16 '11 at 11:53
then you can out a message in the text, which the user understand! –  Herbert Aug 16 '11 at 11:57

Use the package xspace. It

provides a single command that looks at what comes after it in the command stream, and decides whether to insert a space to replace one "eaten" by the TeX command decoder.

For your case it can be used as in the following:

\documentclass{article}

\usepackage{xspace}

\def\naive{na\"{\i}ve\xspace}

\begin{document}

the \naive approach

\end{document}

-
Also, I would suggest using \newcommand instead of \def. See tex.stackexchange.com/questions/1050/… –  N.N. Aug 16 '11 at 10:36
Just for reference: Drawbacks of xspace. –  Tobi Feb 19 '14 at 19:53

Use braces \naive{} or \naive\ or xspace. See the FAQ: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=xspace

-

The problem is that the follwing space is uses as macro end. Type \navie{} or use the xspace package.

\documentclass{minimal}

\usepackage{xspace}
\newcomand{\naiv}{naiv\xspace}

\begin{document}
Test \naiv Test.
\end{document}

-
Just for reference: Drawbacks of xspace. –  Tobi Feb 19 '14 at 20:03

Quick answer: the \naive\ approach

Better answer: Use the xspace-package

\usepackage{xspace}
\newcommand{\better\xspace }
...

the \better approach


Advantage: xspace take a look on the next character. So you have not an obsolete space in:

Macro at sentence end\better.

-
Just for reference: Drawbacks of xspace. –  Tobi Feb 19 '14 at 19:58