# Strange spacing in inline listings (listings package)

I am using the listings package to typeset some code. I've defined a lstlisting environment, based upon the standard Haskell environment, and added a number of literate replacements, including:

literate={->}{{$\rightarrow{}$}}2


When the symbol -> appears in a listing environment, my spacing around the symbol is preserved. However, when it appears in an inline listing, the space after the \rightarrow gets eaten, resulting in T a -> a -> a looking like T a ->a -> a. Does anyone know how I can avoid this behavior in the inline listings without also confusing the listing environment?

• Welcome to TeX.SE. While code snippets are useful in explanations, it is always best to compose a fully compilable MWE that illustrates the problem including the \documentclass and the appropriate packages so that those trying to help don't have to recreate it. I realize that it does not sound too complicated in this case, but any time you can save of those trying to help would be appreciated. – Peter Grill Feb 22 '12 at 5:45

## 2 Answers

I would suggest using literate to replace the "symbol" -> with -> (note the addition of spaces surrounding the arrow. The reason being that spaces are treated differently in inline as opposed to display listings. Here is a minimal example:

\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listings
\lstset{%
literate={->}{{ $\rightarrow$ }}3
}
\begin{document}
Here is a display listing:
\begin{lstlisting}
T a->a->a
\end{lstlisting}
Here is some inline listing \lstinline!T a->a->a!.
\end{document}


Note the difference in spacing between T and a in the respective listing styles.

@Werner's solution is fine, but adding spaces to the replacement will have different results in both lstlisting and lstinline. For example, if you replace -> by, say, -> and you have the following snippet:

a -> a -> a -> a


it will show up normally in lstinline, but it will show up with two spaces after the arrows in lstlisting, like this:

a ->  a ->  a ->  a


My solution to this was to define a replacement for -> and another one for ->:

{->}{{{\color{magenta}->}}}2
{->\ }{{{\color{magenta}-> }}}3


Note that the smallest replacement must come first, otherwise it won't work.