512

How do I insert code into a LaTeX document? Is there something like:

\begin{code}## Heading ##
...
\end{code}

The only thing that I really need is indentation and a fixed width font. Syntax highlighting could be nice although it is definitely not required.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
sixtyfootersdude
  • 25,859
  • 43
  • 145
  • 213

9 Answers9

759

Use listings package.

Simple configuration for LaTeX header (before \begin{document}):

\usepackage{listings}
\usepackage{color}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\lstset{frame=tb,
  language=Java,
  aboveskip=3mm,
  belowskip=3mm,
  showstringspaces=false,
  columns=flexible,
  basicstyle={\small\ttfamily},
  numbers=none,
  numberstyle=\tiny\color{gray},
  keywordstyle=\color{blue},
  commentstyle=\color{dkgreen},
  stringstyle=\color{mauve},
  breaklines=true,
  breakatwhitespace=true,
  tabsize=3
}

You can change default language in the middle of document with \lstset{language=Java}.

Example of usage in the document:

\begin{lstlisting}
// Hello.java
import javax.swing.JApplet;
import java.awt.Graphics;

public class Hello extends JApplet {
    public void paintComponent(Graphics g) {
        g.drawString("Hello, world!", 65, 95);
    }    
}
\end{lstlisting}

Here's the result:

Example image

Cloudanger
  • 9,194
  • 2
  • 22
  • 18
225

You could also use the verbatim environment

\begin{verbatim}
your
code
example
\end{verbatim}
midtiby
  • 14,550
  • 6
  • 34
  • 43
127

Here is how to add inline code:

You can add inline code with {\tt code } or \texttt{ code }. If you want to format the inline code, then it would be best to make your own command

\newcommand{\code}[1]{\texttt{#1}}

Also, note that code blocks can be loaded from other files with

\lstinputlisting[breaklines]{source.c}

breaklines isn't required, but I find it useful. Be aware that you'll have to specify \usepackage{ listings } for this one.

Update: The listings package also includes the \lstinline command, which has the same syntax highlighting features as the \lstlisting and \lstinputlisting commands (see Cloudanger's answer for configuration details). As mentioned in a few other answers, there's also the minted package, which provides the \mintinline command. Like \lstinline, \mintinline provides the same syntax highlighting as a regular minted code block:

\documentclass{article}

\usepackage{minted}

\begin{document}
  This is a sentence with \mintinline{python}{def inlineCode(a="ipsum)}
\end{document}
alan
  • 3,246
  • 1
  • 32
  • 36
36

Specialized packages such as minted, which relies on Pygments to do the formatting, offer various advantages over the listings package. To quote from the minted manual,

Pygments provides far superior syntax highlighting compared to conventional packages. For example, listings basically only highlights strings, comments and keywords. Pygments, on the other hand, can be completely customized to highlight any token kind the source language might support. This might include special formatting sequences inside strings, numbers, different kinds of identifiers and exotic constructs such as HTML tags.

Philipp
  • 48,066
  • 12
  • 84
  • 109
  • 2
    I have tried minted, the documentation is quite straight forward. The default style is quit good. – user2262504 Aug 12 '15 at 08:49
  • 9
    This may be an unsatisfactory solution for many users, because of the external call required to Pygmentsic. In particular, the requirement to call latex with the `-shell-escape` directive is, at best, a minor modification to exisiting build systems, and at worst, incompatible with some users' security preferences. – KDN Jan 10 '17 at 18:33
29

Minted, whether from GitHub or CTAN, the Comprehensive TeX Archive Network, works in Overleaf, TeX Live and MiKTeX.

It requires the installation of the Python package Pygments; this is explained in the documentation in either source above. Although Pygments brands itself as a Python syntax highlighter, Minted guarantees the coverage of hundreds of other languages.

Example:

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}[mathescape, linenos]{python}

# Note: $\pi=\lim_{n\to\infty}\frac{P_n}{d}$
title = "Hello World"

sum = 0
for i in range(10):
 sum += i

\end{minted}

\end{document}

Output:

enter image description here

XavierStuvw
  • 1,294
  • 2
  • 15
  • 30
Shital Shah
  • 63,284
  • 17
  • 238
  • 185
14

Use Minted.

It's a package that facilitates expressive syntax highlighting in LaTeX using the powerful Pygments library. The package also provides options to customize the highlighted source code output using fancyvrb.

It's much more evolved and customizable than any other package!

coffeemakr
  • 330
  • 2
  • 12
Oussama L.
  • 1,842
  • 6
  • 25
  • 31
12

A very simple way if your code is in Python, where I didn't have to install a Python package, is the following:

\documentclass[11pt]{article}  
\usepackage{pythonhighlight}

\begin{document}

The following is some Python code

\begin{python}
# A comment
x = [5, 7, 10]
y = 0

for num in x:
    y += num
    
print(y)
\end{python}

\end{document}

which looks like: enter image description here

Unfortunately, this only works for Python.

Morey
  • 166
  • 1
  • 5
  • The `pythonhilight` package works pretty well out of the box. I used it for a while while trying to get install issues I was having with `pygments` resolved. However, if you want to control: the font size, the syntax highlighting, the background color, the border, whether to include line numbers and where, or have better placement for short code snippets in two column pages, `minted` is a far better option. Also, PyCharm's support for minted is better: it doesn't complain about `_` in a `minted` environment. – hlongmore Jan 26 '23 at 08:59
7

Since it wasn't yet mentioned here, it may be worth to add one more option, package spverbatim (no syntax highlighting):

\documentclass{article}
\usepackage{spverbatim}

\begin{document}

\begin{spverbatim}
  Your code here
\end{spverbatim}

\end{document}

Also, if syntax highlighting is not required, package alltt:

\documentclass{article}
\usepackage{alltt}

\begin{document}

\begin{alltt}
  Your code here
\end{alltt}

\end{document}
MattAllegro
  • 6,455
  • 5
  • 45
  • 52
  • 1
    This is more or less what I want, but I can't seem to indent with tabs. How do you indent / is there a similar package that allows for easier indentation? – Darokrithia Sep 19 '18 at 22:47
  • 1
    @Darokrithia I edited my answer: can you check/confront indentation? :) – MattAllegro Sep 26 '18 at 17:28
  • 1
    It doesn't seem to work. I can send you the code I am using, but the formatting is destroyed in comments. BTW I used a different answer and it worked fine, but I feel like this should still be fixed for future readers. – Darokrithia Sep 26 '18 at 20:32
6

Use Pygments !

Tarantula
  • 19,031
  • 12
  • 54
  • 71