# Syntax highlighting in LaTeX with lstlisting

When adding code snippets to my LaTeX documents, I use lstlisting. It is a syntax highlighting environment that can easily be tweaked to match your own styling.

To do this you need to use the package listings\usepackage{listings}.

Code snippets are added like this:

\begin{lstlisting}
Some super cool code snippet...
\end{lstlisting}

Adding a code snippet from file is also possible:

\lstinputlisting{source_filename.py}

You can changes the styling of the code fragments (making keywords bold, comments italic, changing colors, …) by specifying lstset:

\lstset{ %
backgroundcolor=\color{white},   % choose the background color; you must add \usepackage{color} or \usepackage{xcolor}
basicstyle=\footnotesize,        % the size of the fonts that are used for the code
breakatwhitespace=false,         % sets if automatic breaks should only happen at whitespace
breaklines=true,                 % sets automatic line breaking
captionpos=b,                    % sets the caption-position to bottom
deletekeywords={...},            % if you want to delete keywords from the given language
extendedchars=true,              % lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8
frame=tb,	                   	   % adds a frame around the code
keepspaces=true,                 % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
keywordstyle=\color{keywordsColor}\bfseries,       % keyword style
language=Python,                 % the language of the code (can be overrided per snippet)
otherkeywords={*,...},           % if you want to add more keywords to the set
numbers=left,                    % where to put the line-numbers; possible values are (none, left, right)
numbersep=5pt,                   % how far the line-numbers are from the code
numberstyle=\tiny\color{commentsColor}, % the style that is used for the line-numbers
rulecolor=\color{black},         % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
showspaces=false,                % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
showstringspaces=false,          % underline spaces within strings only
showtabs=false,                  % show tabs within strings adding particular underscores
stepnumber=1,                    % the step between two line-numbers. If it's 1, each line will be numbered
stringstyle=\color{stringColor}, % string literal style
tabsize=2,	                   % sets default tabsize to 2 spaces
title=\lstname,                  % show the filename of files included with \lstinputlisting; also try caption instead of title
columns=fixed                    % Using fixed column width (for e.g. nice alignment)
}


When you use your own colors, you must naturally define them:

\usepackage{xcolor}

\definecolor{keywordsColor}{rgb}{0.000000, 0.000000, 0.635294}
\definecolor{stringColor}{rgb}{0.558215, 0.000000, 0.135316}

If needed you can also specify your own language syntax:

\lstdefinelanguage{JavaScript}{
keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
keywordstyle=\color{blue}\bfseries,
ndkeywords={class, export, boolean, throw, implements, import, this},
ndkeywordstyle=\color{darkgray}\bfseries,
identifierstyle=\color{black},
sensitive=false,
comment=[l]{//},
morecomment=[s]{/*}{*/},