# Keywords with spaces in Listings

I want spaced keywords in listings (that is, keyword, with spaces in between).

Now, there are some questions in this site already answered, like this one, where the official answer is that “it is not possible”. But, of course, like almost everything, there are workarounds that let you do it.

However, I've seen in the documentation of microtype correctly highlighted keywords that do contain spaces (e.g., no ligatures, outer kerning, outer spacing).

That's all. If I didn't make myself clear, please, leave a comment. That's the question: I want to reproduce the system used in microtype's documentation.

# Update

As @Robert noted, he used latin1 encoding in the documentation. Which seems to work nice with lstlisting (apart from non-breaking spaces, it even accepts, e.g., á, ü by default). But I use utf8 (not for anything special, but because it's recommended everywhere), which doesn't behaves well with listings. Since I like this idea of using non-breaking spaces to define keywords with spaces, I will rewrite my question

## Is there a way to teach utf8/listings to understand non-breaking spaces inside of keywords?

Here is a minimal non-working example:

NOTE: the space between spaced and keyword is a non-breaking space (as you can see in the image below).

\documentclass{scrartcl}

%\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenx} % With latin1 it works perfectly

\usepackage{listings}
\lstset{keywords={spaced keyword}, columns=fullflexible}

\begin{document}
\begin{lstlisting}
notakeyword spaced keyword notakeyword
\end{lstlisting}
\end{document}


• The premise of your question is wrong: the file used to generate the microtype manual (microtype.dtx) doesn't use listings at all for typesetting "outer spacing", "outer kerning", "no ligatures" as shown on p17 of that manual. Instead, this is done via a macro called \key defined with \DeclareRobustCommand\key[1]{\textcolor{thered}{\ttfamily#1}} in microtype.dtx. No non-breaking space is involved or necessary for that. – jub0bs Jun 16 '14 at 17:38
• To all of you who voted to close, please, feel free to comment here your doubts or point out what is not clear. – Manuel Jun 16 '14 at 18:49
• Now I see what you mean. I think I was looking at the wrong page of the manual. For information, TeX.SX "sanitizes" the text you paste in the answer box; for instance, tabs get converted to 4 spaces. I didn't know it also converts non-breaking spaces to spaces. – jub0bs Jun 16 '14 at 19:09
• The author of microtype is a contributor to TeX.SX. I'm sure he's the best person to answer this. – jub0bs Jun 16 '14 at 19:23
• You need to load inputenc with an encoding that (1) contains the non-breaking space and (2) is not utf8 because listings won't like it. (microtype.dtx uses latin1). – Robert Jun 17 '14 at 23:53

• The workaround to allow spaces in keywords that microtype.dtx employs is to use the "non-breaking space" in lieu of a normal space to make listings believe that it's a letter, while it will be output as a space;
• this requires loading an input encoding that does indeed contain the non-breaking space and maps it to a normal space (e.g., latin1).
• The problem in your example is that you use utf8 input encoding, which – though it meets the above requirement – is not compatible with the listings package. I don't see a way to fix this incompatibility other than in listings itself.
• either don't use utf8 encoding – which in your case appears to be possible considering the fact that you say the only reason why you use it in the first place is that it is recommended everywhere;
• or use the listingsutf8 package (which understands utf8 input in included files) and store all your code listings in separate files – maybe a bit cumbersome depending on the number of listings you have.