TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Can I tell LaTeX that it may hyphen words that contain an underscore _ always before the underscore?

I have a lot of code examples in text, like is_error_condition_enum and I would like to tell LaTeX it may hyphen this as:

Lorem ipsum is_error_-
condition_enum lorem.


If that is not possible globally, how do I make an entry for some underscore-words like:


because that entry is rejected, obviously.

In sourcecode I write words like these as \gpmono{is\gpus{}error\gpus{}condition\gpus{}enum}.

share|improve this question
up vote 8 down vote accepted

If \gpus is used in other places where hyphenation is not wanted, you can modify its definition only in the argument of \gpmono:


Of course, without knowing your original definitions of \gpmono and \gpus, I tried to guess.

share|improve this answer
Ok, I looked up the definition of \gpus (comes from the style I use) and inserted \renewcommand{\gpus}{\symbol{"5F}\discretionary{-}{}{}} into my document. It works ok now. But a question: Does this now "inject" \discretionary at all my usings of \gpus? Is that necessary? Would it not be enough to define/declare it at one specific place once? I have no idea how \discretionary works (obviously). – towi Sep 12 '11 at 10:44
Yes, it will use \discretionary{-}{}{} in all places where \gpus is found. In alignments it will have no effects, unless the cell is a "paragraph cell", where you of course want again the hyphenation. – egreg Sep 12 '11 at 10:55

The underscore package provides a way to do this automatically: It modifies the defintion of the \_ command in order to allow hyphenation after the underscore. Furthermore, it allows you to simply write _ instead of \_ in text mode to produce an underscore. Everything you have to do is loading the package with

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.