# How to highlight own keywords in HTML lstlistings?

I would like to highlight some words in a lstlisting. The language is HTML. However, \emph seems not to be working with HTML. Any suggestions how I could work around this problem?

Right now I have:

\lstdefinestyle{htmlCode} {
language=html,
basicstyle=\scriptsize\ttfamily,
keywordstyle=\bfseries\ttfamily,
emph={time},
emphstyle=\color{green}
}

\begin{lstlisting}[style=htmlCode,caption={Html code}]
<b>Time: $time$</b>
\end{lstlisting}

• Would you be able to post what you currently have, or at least a minimal working example (MWE)?
– Werner
Aug 23 '11 at 21:23
• Ok, I have added sample code. Aug 23 '11 at 21:54
• For information, the reason why \emph and \emphstyle have no effect seems to stem from the tag key, which is used in the definition of the HTML language (in lstdrvrs.dtx). If you redefine HTML without using that tag key, your custom identifiers will be highlighted as expected. Feb 4 '14 at 23:03

You could use the escapechar=<char> option for listings in the following way:

\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings}
\begin{document}
\lstdefinestyle{htmlCode} {
language=html,
basicstyle=\scriptsize\ttfamily,
keywordstyle=\bfseries\ttfamily,
escapechar=| % Escape to LaTeX between |...|
}

\begin{lstlisting}[style=htmlCode,caption={Html code}]
<b>Time: $|\color{green}time|$</b>
\end{lstlisting}
\end{document}


The reason for this working may involve the fact that listings allows escaping to LaTeX when using the mathescape=true flag. This escapes around $...$, which is exactly around your time "keyword".

• Great, that's working. Aug 23 '11 at 22:06
• I actually also want to capture the $sign (unlike in the example). Could I use something like morecomment=[b]{\$} to format all sequences between the $character? Aug 23 '11 at 22:07 • @nrainer: You could use |\color{green}\$time\\$|.
– Werner
Aug 23 '11 at 22:16