# How to force LaTeX not to break the line after a hyphen “-”?

With ~ we can enforce that no line break occures between two words.

But this does not seem to work with special characters. I want LaTeX to enforce not to break the line after the - in (re-)creation.

In my document the line breaks between (re- and )creation, which looks a bit ugly.

How can I achieve this?

-
Have a look at this. –  Marc van Dongen Mar 21 '13 at 12:44
As I wrote here: chat.stackexchange.com/transcript/message/8613811#8613811 , this is not exactly a duplicate. What about reopening? –  mbork Mar 21 '13 at 14:54
If you use babel you could also use the babel shortcut "~ provided for most languages. For the others see babel: Adding ngerman' s language shorthands to english as the main document language. –  Speravir Mar 22 '13 at 0:51

If you put it in a mbox, it can't get broken up:

\mbox{(re-)creation}


But that means it can't get broken up anywhere in the word!

-

I am not sure now why (re-\nobreak)creation does not work, but (re\mbox{-}\nobreak)\nobreak\hspace{0pt}creation does, and does not prevent hyphenation of "creation". (Also, (re\mbox{-)}\nobreak\hspace{0pt}creation is maybe less elegant, but also correct.)

Of course, you might want to have a macro for that, for example:

\newcommand{\optprefix}[2]{% optional prefix
(#1\mbox{-)}\nobreak\hspace{0pt}#2%
}


Notice that this macro allows for hyphenation of the prefix (in this case the prefix is just "re", so it does not make sense in this particular case).

Edit: as egreg pointed out in the comments, (re-\nobreak)creation won't work because the hyphen creates a "feasible breakpoint" (that is, a place in which TeX may break the line), and \nobreak comes after that breakpoint, so does not interfere with it. After \mboxing, the breakpoint lands in the box, and is effectively "hidden" from the paragraph-breaking routine.

Now \nobreak\hspace{0pt} has the effect of creating a (zero-width) "inter-word space", so that what comes after it is a new word for TeX (and hence it may consider hyphenating it). However, \nobreak makes sure that this "zero-width interword space" will not be a feasible breakpoint itself.

Also, as egreg pointed out in his comment, one might consider saying

\newcommand{\optprefix}[1]{(#1\mbox{-})}


so that you can write just \optprefix{re}creation, or even

\newcommand{\optprefix}[1]{(#1\mbox{-})\ignorespaces}


which would also allow \optprefix{re} creation - though I personally wouldn't use that, since it is one word and imho should "look like one word" in the source, too.

-
The "unprotected" hyphen in (re-\nobreak)creation creates a feasible break point after it, so the \nobreak has no effect. There is no break point in (re\mbox{-})creation. If you want to enable hyphenation in the main word, then (re\mbox{-})\nobreak\hspace{0pt}creation is the right thing to do; the \nobreak means that the following (zero) glue can't be taken as a break point, but the scanning for hyphenation can take place in creation that's a "new" word to TeX because it comes after glue. –  egreg Mar 22 '13 at 0:40
@egreg: thanks. I didn't have my copy of The TeXbook, and frankly speaking, didn't remember these details by heart... –  mbork Mar 22 '13 at 10:30
Maybe you can edit your answer to add the information. –  egreg Mar 22 '13 at 10:36
I'll do it in the afternoon - now I'll have to log out from the computer and take care of my daughter;). –  mbork Mar 22 '13 at 10:42
show 1 more comment