8

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.

always.

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

\hyphenation{is_-error_-condition_-enum}

because that entry is rejected, obviously.

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

9
\newcommand{\gpus}{\_\discretionary{-}{}{}}

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

\newcommand{\gpmono}[1]{\begingroup
   \renewcommand{\gpus}{\_\discretionary{-}{}{}}%
   \ttfamily#1\endgroup}

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

  • 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
  • 2
    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
11

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

\usepackage{underscore}
  • Did you actually try this with the \hypenation{} (TeX!-)command? Because for me it's not working at all. Getting the same error: Improper \hyphenation will be flushed. ... – 0xC0000022L Jul 4 at 9:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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