Skip to content

The matlab-prettifier package can be used to typeset MATLAB code and was written in response to a question on tex.stackexchange.

The lstlisting environment

After including the matlab-prettifier package in your document via

\usepackage{matlab-prettifier}

you can use the lstlisting environment to typeset MATLAB code:

\begin{lstlisting}[<options>]
MATLAB code...
\end{lstlisting}

where <options> is a comma-separated list of parameters whose values are set using key–value pairs (i.e., parameter=value).

  • Note: The matlab-prettifier package is built around the listings package, enabling use of features provided by listings, including parameters within <options> of the lstlisting environment. However, some listings parameters should not be used, and readers are advised to consult the matlab-prettifier documentation for further details.

The visual appearance of typeset MATLAB code can be changed using the style parameter, which supports three values:

  • Matlab-editor
  • Matlab-bw
  • Matlab-Pyglike

The following examples demonstrate how to use those styles.

Examples

Here is an example, using MATLAB code from matlab-prettifier’s documentation, which applies the Matlab-editor style:

\documentclass[a4paper]{article}
\usepackage{matlab-prettifier}
\begin{document}

\begin{lstlisting}[style=Matlab-editor]
%% Sample Matlab code
!mv test.txt test2.txt
A = [1, 2, 3;... foo
     4, 5, 6];
s = 'abcd';
for k = 1:4
  Disp(s(k)) % bar
end
%{
create row vector x, then reverse it
%}
x = linspace(0,1,101);
y = x(end:-1:1);
\end{lstlisting}
\end{document}

 Open this example in Overleaf

This example produces the following output:

MATLAB code typeset in LaTeX on Overleaf

The next example set values for the frame and numbers parameters provided by the listings package:

\documentclass[a4paper]{article}
\usepackage{matlab-prettifier}
\begin{document}

\begin{lstlisting}[
frame=single,
numbers=left,
style=Matlab-Pyglike]
%% Sample Matlab code
!mv test.txt test2.txt
A = [1, 2, 3;... foo
     4, 5, 6];
s = 'abcd';
for k = 1:4
  Disp(s(k)) % bar
end
%{
create row vector x, then reverse it
%}
x = linspace(0,1,101);
y = x(end:-1:1);
\end{lstlisting}
\end{document}

 Open this example in Overleaf

This example produces the following output:

MATLAB code typeset in LaTeX on Overleaf

Using MATLAB code stored in a file

Instead of including MATLAB code directly within your LaTeX document, use the \lstinputlisting command to import and typeset code contained in an external file:

\lstinputlisting[<options>]{<filename>}

where

  • <options> is a comma-separated list of parameters provided as key–value pairs (see above);
  • <filename> is the path to a file containing MATLAB code.

For example, to import the file sample.m and typeset it in the Matlab-bw style you would write

\lstinputlisting[style=Matlab-bw]{sample.m}

The next example places a frame around the code, numbers the lines of code (on the left), and uses the Matlab-bw style:

\lstinputlisting[
frame=single,
numbers=left,
style=Matlab-editor
]{sample.m}

Select the Open this example in Overleaf link (see below) to automatically create an Overleaf project which includes the sample.m MATLAB code file.

main.tex

\documentclass[a4paper]{article}
\usepackage{matlab-prettifier}
\begin{document}
\title{Importing and typesetting MATLAB code contained in a file}
\lstinputlisting[
frame=single,
numbers=left,
style=Matlab-bw
]{sample.m}

\end{document}

sample.m

%% Sample Matlab code
!mv test.txt test2.txt
A = [1, 2, 3;... foo
     4, 5, 6];
s = 'abcd';
for k = 1:4
  Disp(s(k)) % bar
end
%{
create row vector x, then reverse it
%}
x = linspace(0,1,101);
y = x(end:-1:1);

 Open this example in Overleaf (it creates the sample.m file).

This example produces the following output:

MATLAB code typeset in LaTeX on Overleaf

Overleaf guides

LaTeX Basics

Mathematics

Figures and tables

References and Citations

Languages

Document structure

Formatting

Fonts

Presentations

Commands

Field specific

Class files

Advanced TeX/LaTeX