Take the 2-minute tour ×
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.

I am typesetting inline code listings using the listings package. Since I'm using C# syntax, oftentimes listings contain long words (type names/variable names). Since words in listings won't be hyphenated & broken over multiple lines, I end up with overfull lines whenever such an inline listing happens to start at the end of a line.

When I use sloppypar (as suggested here), the entire paragraph looks terrible, as no word will be hyphenated & broken over two lines, and spaces may become very wide. When I don't use sloppypar, individual lines may run into the page's right margin and stand out; Not pretty either.

What I'd like to achieve is one of the following two, but maybe you have better suggestions:

  • Hyphenate & break words in inlinelistings using a hyphen in an entirely different font. This way the inserted hyphenation will become apparent to the reader and will not interfere with the listing's syntax.
  • Let only those lines that an inline listing is involved in be sloppy, but not the entire paragraph. I am prepared to sacrifice the neat appearance of a few lines in order to make the greater part of a paragraph look nice and tidy.

See my MWE below:
tidy and sloppy

\documentclass[a4paper]{article}
\usepackage{color,listings}

\setlength{\textwidth}{120mm}

\lstset{language=[Sharp]C,
    showspaces=false,
    showtabs=false,
    linewidth=\textwidth{},
    breaklines=true,
    showstringspaces=false,
    breakatwhitespace=true,
    escapeinside={(*@}{@*)},
    basicstyle=\ttfamily
}

\begin{document}
\section{Tidy, But Overfull}
By writing this sentence, we will get a feeling for the textwidth of this document.
Then we will talk about some variable:
\lstinline$CancellationToken cancellationToken$.
Now that that's out of the way, we can continue writing about other nonsensical subjects which helps reveal the textwidth once again.

\section{Sloppy, But Not Overfull}
\begin{sloppypar}
By writing this sentence, we will get a feeling for the textwidth of this document.
Then we will talk about some variable:
\lstinline$CancellationToken cancellationToken$.
Now that that's out of the way, we can continue writing about other nonsensical subjects which helps reveal the textwidth once again.
\end{sloppypar}

\end{document}
share|improve this question
add comment

2 Answers 2

up vote 2 down vote accepted

You can define \- to be a discretionary line break inside the listing.

literate={\\\-}{}{0\discretionary{{\normalfont\LARGE -}}{}{}}

and use it in this way:

\lstinline$CancellationToken cancellation\-Token$

You can change \normalfont\LARGE to whatever you like, to emphasize the hyphen.

MWE

\documentclass[a4paper]{article}
\usepackage{color,listings}

\setlength{\textwidth}{120mm}

\lstset{language=[Sharp]C,
    showspaces=false,
    showtabs=false,
    linewidth=\textwidth{},
    breaklines=true,
    showstringspaces=false,
    breakatwhitespace=true,
    escapeinside={(*@}{@*)},
    basicstyle=\ttfamily,
    literate={\\\-}{}{0\discretionary{{\normalfont\LARGE -}}{}{}}
}

\begin{document}
\section{Tidy, But Overfull}
By writing this sentence, we will get a feeling for the textwidth of this document.
Then we will talk about some variable:
\lstinline$CancellationToken cancellation\-Token$.
Now that that's out of the way, we can continue writing about other nonsensical subjects which helps reveal the textwidth once again.
\end{document} 

Output

enter image description here

share|improve this answer
    
and how should the reader know if the hyphen is part of the command sequence or not? –  Herbert Mar 3 at 9:09
1  
@Herbert This is the first possibility mentioned by the OP. –  karlkoeller Mar 3 at 9:16
add comment

use

\section{sloppy, with hyphenation}
{\emergencystretch=0.5em\hyphenpenalty=-1000
By writing this sentence, we will get a feeling for the textwidth of this document.
Then we will talk about some variable:
\lstinline$CancellationToken cancellationToken$.
Now that that's out of the way, we can continue writing about other
nonsensical subjects which helps reveal the textwidth once again.\par}

enter image description here

share|improve this answer
add comment

Your Answer

 
discard

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.