1. Katie

Oh, this is brilliant. I have always used the verbatim-environment. but this has so much more options. great.

2. Steven

I have read great things about the listings package but in reality it is causing me lots of problems. I am writing a paper and have to include listings in an enumerated list to answer question numbers
1/ I have indented my source file to make easier reading/construction – if I have the listing section indented it is reflected in the pdf output! (using pdflatex) which is just madness
2/ The resulting text just looks ugly with incredibly bad spacing – the character kerning is completely messed up. Currently using the following setup:

\documentclass[11pt,a4paper,oneside,onecolumn]{article}
\usepackage{amsmath,amssymb,harvard}
\usepackage{amsfonts}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{harvard}
\usepackage{listings}
\usepackage{algorithm2e}
\renewcommand{\labelenumii}{(\roman{enumii})}
\renewcommand{\labelenumiii}{(\alph{enumiii})}
\renewcommand{\labelenumiv}{(\roman{enumiv})}
\begin{document}
\lstset{basicstyle=\footnotesize,language=HTML}
\bibliographystyle{plain}

I will try to find a solution and see which package is conflicting (if any) but the result is really ugly and \verb is starting to look good…

3. Cesar

That’s nice and simple.

I was wondering, why Java is not supported?

4. Hi Cesar

Java is actually supported by the listings package. It appears in the list of supported languages above.

Tom

5. Cesar

Oops… I sure need glasses 🙂

6. Very interesting, nice post! Please keep up the good work!

7. Rikke

I’m having problems using lstinputlisting{}

I guess that I should use something like C:\Users\Rikke\Documents\…\filename.R

But it doesn’t work – have you any idea why?

:o) Rikke

8. Hi Rikke,

As a starting directory, Latex will always use the location of your main document (where you have \documentclass{...}).
To move upwards the directory-tree, you simply use “..\”.
E.g. imagine you have a directory, with two folders, “code” and “report”. Inside “report”, you have your Latex-files and in “code” you have the source files. To include the source files, you would type:

\lstinputlisting{..\code\filename.R}

Cheers,
Tom

9. Thanks for your work! it’s realy good!

10. […] Include source code in Latex with “Listings” « Blog on Latex Matters (tags: listings latex src) […]

11. If you have python distribution in your machine you can use ‘pygmentize’. Using pygmentize you can also generate syntax highlighted code in Word, html and pdf formats besides LateX.

12. nguyenminhhaivn

@steven: You’ve said “The resulting text just looks ugly with incredibly bad spacing – the character kerning is completely messed up”. I finally found out that the “columns” option can solve your problem. The complete command is \lstset{columns=fullflexible}.

13. The main problem I had with setting Awk scripts in verbatim mode is that single quotes are turned into curly apostrophes, making it awkward to copy and paste a typset example into a terminal or editor window to execute. Double quotes are OK in verbatim mode. Using lstlisting mode, ALL quotes are turned into curly quotes, one worse than verbatim.

Any ideas? The simplest thing to make a listing in any mode without curling quotes would be good. Thanks.

\usepackage{upquote}

after all other font specs will force typewriter font to Computer Modern Typewriter and make verbatim, verbatim*, verb, and verb* leave  and ‘ in their original state.

(” is already set unchanged; I’m not sure of the logic of curling ‘ and  in a mode that otherwise leaves things unchanged. While it’s true that the old ASCII character set didn’t include encodings for these so it’s useful to be able to create them in verbatim mode, not having an obvious escape to get back to raw apostrophes and grave accents seems to me an omission).

Not quote as fancy as the listings package but for simple scripts and one-liners, being able to get the various verbatim modes to behave is good. Unless you need the default behaviour for some other purpose in the same document …

• Emerson

Thansk Phillip for \usepackage{upquote}.

I was looking for this solution.

But I have another one. How to use a source code with accent (i.e. é, á, â, ã, etc.) in a utf8 enconding?

I have tried \usepackage[utf8]{inputenc} and \lsset{extendedchars=\true,inputencoding=utf8} but without success. 🙁

• Hi there!

Actually, you don’t need any package to do this. Try this: \'{e}\'{a}\^{a}\~{a}.

Cheers,
Tom.

15. Thanks, Phillip. the \usepackage{upquote} solution was just was just what I was looking for.

God mainly bless you for this page. It was a blessing for me to know how to put my SAS-Code into my latex document. So i just want to acknowledge and to thank you for it.

Can we put the code without frame and without numbering?

You can use the following options to omit the frame and numbering:

frame=none, numbers=none

You can find the documentation of the listings package here.

18. Jon

Thanks for the post. It was useful for dumping code into latex and not worrying about escaping and formatting.

19. Alexander Pokluda

Here’s a line that creates a floating listing using \lstinputlisting :

\lstinputlisting[float,caption=A floating example,label=R10]{R10.m}
20. Thanks. I’m going to try this. I’ve also used and liked the lgrind package.

21. Phil

I wanted this package to look a bit like the verbatim text. This can be achieved, by:

\lstset{basicstyle=\small\ttfamily, basewidth=0.51em}.

Thought it might be worth mentioning as it took me a while to find this.

22. i82much

I cannot get the lstlisting to work with autoref – if I attempt to wrap the listing in a labeled figure and then reference it, I jump to a random place on a page near the figure, but not at the figure itself. This is very frustrating. Has anyone figured a workaround for this?

• Please post a minimal example, so I can have a look at it.
Thanks,
Tom.

• Åsmund Ervik

As I recall, the “recommended” way of referring to a listing is to use

\begin{lstlisting}[label=myCoolListing]
...
\end{lstlisting}

New paragraph where I can refer to \autoref{myCoolListing}

This works great in my case, at least.
(If you RTFM (p. 16, and F stands for Fine in this case) at ftp://ftp.tex.ac.uk/tex-archive/macros/latex/contrib/listings/listings.pdf, there are a lot of tips for customizing this)

23. I’ve found a workaround for people, like me, who’s using UTF8 as encoding: ‘listingsutf8’. This package provides support for those ‘strange’ characters when using the \lstinputlisting command.

Be aware that ‘listings’ package (as far as I read) doesn’t support multi-byte encodings (UTF8 and others), but only one-byte encoding. The trick of ‘listingsutf8’ is to translate a text file (the source code) to an encoding that ‘listings’ can understand… And hope, as well, that you understood me 🙂

So, it’s not a final solution, but works.

24. Thanks for mentioning this. It’s a great package to quickly list some source code.

25. Is there any way to change the name of Listing like i can do with chapters (\renewcommand\chaptername{new_chapter_name}) ???

• I have figured this one out. You can change names using this command: \renewcommand\lstlistingname{Program}

26. Gaya

I used the lstlisting for my code and used latex2pdf to create a pdf file.
When I copy and paste the source code from a pdf generated file, it losses its formatting. What can I do about this?

• Hi Gaya,

Tom.

27. Thanks dude! you were very helpful!!!

28. Allusion

Hi there. I tried the listings package too. Everything would have been wonderful… if copying code chunks were not such a pain. Did somebody manage to do this properly?

columns=flexible or columns=fixed have both severe problems, the first ruins my indentation, the second adds weird phantom spaces throughout my code. Thanks.

• Hello!
Probably easier than copying the code is to include it directly from the source file. I described how to do that in the post above.
The problem with the columns-option is known. If you don’t need it, just drop it. If you think you need it, please provide a minimal example. I will then try to help you…
I created a few code highlighting examples some time ago that you may find useful.
Tom.

29. Oke I used pygmentize to get the code working but that doesn’t really matters… I was wondering how you refer to the code? At the moment I use \figure to do this but i was wondering if there is something called \code to use as a reference so in the text will be something like…

As can be seen in code 2.5 or something similar.

Any ideas?

• I wouldn’t know of anything like that. But you can always define it yourself:

\newcommand{\code}[1]{source code \ref{#1}}
...
See \code{code:example1}.

Tom.

• Iray

Hi Jasper,

How do you use pygmentize? If I can recall correctly, it only outputs fancyvrb env’s and not lstlistings

30. Iray

Hi Tom,

Do you know a way of starting the numbering at line 3 say without clipping lines number 1 and 2?

• Hi Iray,

The listings package covers that. Use the firstnumber=x key-value-pair.

\begin{lstlisting}[firstnumber=3,numbers=left]
...
\end{lstlisting}

Best, Tom

• Iray

Hi, Tom,

Sorry, I’m afraid I wasn’t very clear. I want numbering to start at line 3, with that line numbered 1

#she-bang (line 1 not numbered but shown)
(line 2 not numbered but shown)
import math (line 3 would be numbered with 1)
(line 4 would be numbered with 2)

and so on.

I knew about firstnumber and have already tried firstnumber=-1 but the pbm is I can’t see anywhere in the listings manual how to turn off the numbering for these first two lines or at least how to do it on a line by line basis.

• Hi Iray. Ok, I see. I found something that should do the trick on this blog. Hopefully it works for you. Best, Tom.

31. David Jaeger

Has anyone modified this to use with Stata code?

32. Robert

I am trying to write a Latex document that explains what various parts of my code are doing, section-by-section.
Sometimes it is better to show just a few lines at the start and end of each section and use dots in between.

Is there any way to do that which doesn’t require me just to manually delete the body of the section and add a \dots or similar?

For example, something like

\displaysourcecodesection[1-3,10-12]{ section of code here }

that would show only lines 1, 2 and 3 followed by dots and then lines 10, 11 and 12.

It would allow me to not have to delete parts of my source code from the .tex file and would allow me flexibility to get the final balance right of how much of each section I want to show in the final output.

Thanks

• Hey Robert,

That’s an interesting question, thanks. I found this question (and answer) on stackexchange that may help you put together a command that solves your problem.

Let me know if it works out!

Best, Tom.

33. Smith

Thanks man. Really great explanation of listings.

34. Thanks, your post was informative!!!

35. Jack

I am trying to include source code from a gnuplot script, but some of the lines are apparently being interpreted as LaTex commands. This is an example line with a problem. Is there a way to turn off interpretation of LaTex keywords within a listing?

set xlabel “Particle Velocity (cm/{/Symbol \155}S)” font “Helvetica,18” offset char 0, char -1

• Hi Jack,

Interesting question. I tried to reproduce your problem. The only thing I saw was an issue with the double quotes you are using. You would have to load the right encoding in order to make them display correctly. You could also replace them with standard double quotes (open and close the same) and then use standard encoding as in the code below.

\documentclass[11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor, listings}

\definecolor{lightgrey}{rgb}{0.9,0.9,0.9}
\definecolor{darkgreen}{rgb}{0,0.6,0}

\lstset{language=Gnuplot,
breaklines=true,
keywordstyle=\color{darkgreen},
otherkeywords={\$, \{, \}, $,$},
backgroundcolor=\color{lightgrey}}
\begin{document}

\begin{lstlisting}
set xlabel &quot;Particle Velocity (cm/{/Symbol \155}S)&quot; font &quot;Helvetica,18&quot; offset char 0, char -1
\end{lstlisting}

\end{document}

If this didn’t solve your problem, please post a minimal example similar to the one I provided.

Thanks, Tom

36. Omar Sweidan

Hi, Tom!

It’s really a little nuance: why there is a little apostrophe-like symbol on the frame around the source code?

• tom

Hi Omar,

Thanks for getting in touch. I remove the figure link, as it didn’t work. Please provide a minimal working example, so that I can reproduce the problem on my computer.
Thanks, Tom

• Omar Sweidan

Here it is:

\documentclass{article}             % Single-side
\usepackage{setspace} % for setting line spacing
\usepackage{listings} % For source code snippets.

\lstdefinestyle{Cstyle}{
basicstyle={\singlespacing,\ttfamily},
keywordstyle=\color{blue}\ttfamily,
stringstyle=\color{red}\ttfamily,
morecomment=[l][\color{magenta}]{\#}
}

\begin{document}
\lstset{style=Cstyle}
\begin{lstlisting}
void TRANSMIT_START(unsigned char *buffer, char length);
\end{lstlisting}
\end{document}

I’m using Tex Studio 2.12.2.

• tom

Thanks for the example, that is very helpful. The comma is due to your definition of basicstyle in Cstyle, which contains the extra comma.

On line 6, remove the comma between font style macros to fix it:

basicstyle={\singlespacing\ttfamily},

HTH, Tom

• Omar Sweidan

It works!
Thank you!

37. Abou

Hello. What about if you have a long code that doesn’t fit a page frame?

• tom

Hi Abou,

Thanks for your question. Here are some suggestions how to handle long code sections. If that doesn’t solve your problem, please post a minimal example and I’m happy to look into it in more details.

Best,
Tom