How-to

How to Make Bullet Points and Numbered Lists in LaTeX

The fix

To make a bulleted list in LaTeX, use \begin{itemize} ... \end{itemize}; for a numbered list, use enumerate; for terms with definitions, use description. Start every entry with \item. Nest one list inside another for sub-points, and LaTeX changes the bullet or number style at each level. To change bullets, numbering or spacing, load the enumitem package.

Not sure it worked on your document? Paste it into LetX and compile it, free and in the browser.

Why it happens

Lists are environments, and \item is the only thing that can start an entry: text between \begin{itemize} and the first \item is an error, and so is an \item outside any list. The label style is fixed per nesting level. itemize uses a bullet, a dash, an asterisk and a centred dot; enumerate uses 1., (a), i. and A. There is no fifth style, which is why a fifth level fails.

Example

\begin{itemize}
  \item First point
  \item Second point
  \begin{itemize}
    \item A sub-point
  \end{itemize}
\end{itemize}

\begin{enumerate}
  \item Step one
  \item Step two
\end{enumerate}

\begin{description}
  \item[Mean] The average value.
  \item[Median] The middle value.
\end{description}

Custom bullets and numbering with enumitem

Load \usepackage{enumitem} and give options in square brackets after \begin{...}. label sets the bullet or the number format, with \arabic*, \alph*, \Alph*, \roman* or \Roman* standing for the counter. start sets the first number, and leftmargin=* aligns the text to the widest label. \setlist in the preamble applies a format to every list of a type.

With the shortlabels option, enumitem also accepts the older short form, \begin{enumerate}[(a)]. Without that option the short form stops with "Package enumitem Error: (a) undefined".

\usepackage{enumitem}
\setlist[itemize]{label=--}   % every itemize uses a dash
% in the document:
\begin{enumerate}[label=(\alph*)]
  \item First      % (a)
  \item Second     % (b)
\end{enumerate}

\begin{enumerate}[label=Step \arabic*:, start=3, leftmargin=*]
  \item Collect the data    % Step 3:
  \item Clean it            % Step 4:
\end{enumerate}

\begin{itemize}[label=$\star$]
  \item A starred bullet
\end{itemize}

Spacing, inline lists and continued numbering

enumitem also controls spacing. [noitemsep] removes the space between items, [nosep] removes the space above and below the list as well, and itemsep, topsep and leftmargin take exact lengths. To make every list compact, put \setlist{nosep} in the preamble.

For a list that runs inside a sentence, such as "(i) red, (ii) green, (iii) blue", load \usepackage[inline]{enumitem} and use enumerate*. To carry the numbering on after a paragraph of ordinary text, open the next list with [resume].

\usepackage[inline]{enumitem}
% in the document:
Pick one: \begin{enumerate*}[label=(\roman*)]
  \item red, \item green, \item blue.
\end{enumerate*}

\begin{enumerate}[nosep]
  \item One
  \item Two
\end{enumerate}
Some text between the lists.
\begin{enumerate}[resume]
  \item Three
\end{enumerate}

Changing labels without a package

The labels are ordinary macros, so you can redefine them in the preamble: \labelitemi to \labelitemiv for the four itemize levels, and \labelenumi to \labelenumiv for enumerate.

Changing \labelenumi changes only the printed label. A \ref to an item still prints the old form (2 instead of b) until you also redefine \theenumi, as below. enumitem's label key sets the reference format for you, which is one reason it is easier.

A single item can take its own label: \item[--] or \item[Note:].

\renewcommand{\labelitemi}{$\star$}
\renewcommand{\theenumi}{\alph{enumi}}
\renewcommand{\labelenumi}{\theenumi)}
% in the document:
\begin{enumerate}
  \item First
  \item Second\label{it:second}   % labelled b)
\end{enumerate}
See item \ref{it:second}.          % prints: b

List errors and their fixes

"Something's wrong--perhaps a missing \item": text sits between \begin{itemize} and the first \item. The same error, together with "Missing number, treated as zero", appears when an option such as [label=\alph*)] is used without loading enumitem.

"Lonely \item--perhaps a missing list environment": an \item outside any list, often after an \end{itemize} in the wrong place.

"Too deeply nested": more than four levels of itemize or of enumerate, or more than six lists of any kind inside each other.

"Not allowed in LR mode": a list inside a table cell of type l, c or r. Give that column a fixed width, such as p{5cm}, which accepts paragraphs and lists.

Frequently asked questions

How do I change the bullet symbol?

Give one item its own label with \item[--], or load enumitem and write \begin{itemize}[label=$\star$] for the whole list. \setlist[itemize]{label=--} changes every itemize list.

How do I control numbering style?

With the enumitem package: \begin{enumerate}[label=\alph*)] gives a), b), c). The other counters are \arabic*, \roman*, \Roman* and \Alph*.

How do I reduce the space between list items?

Load enumitem and use \begin{itemize}[noitemsep] for tight lists, [nosep] to remove the space around the list too, or [itemsep=2pt, topsep=4pt] for exact values.

How do I continue numbering across two lists?

With enumitem, end the first list and start the next with \begin{enumerate}[resume]. Numbering picks up where the previous enumerate stopped.

How do I make a list without bullets?

With enumitem, \begin{itemize}[label={}] removes the bullet and keeps the indent. Add leftmargin=* as well to pull the text back to the margin.

How deep can I nest lists?

Four levels of itemize and four of enumerate, and six lists of any kind in total. Deeper nesting stops with "Too deeply nested"; restructure, or raise the limit with enumitem's \setlistdepth and \renewlist if you genuinely need more.

Related LaTeX fixes

Browse all LaTeX problems & fixes, or start with the LaTeX guide.

Try the fix in LetX

Open the editor, paste your code, and compile in seconds to see the error clear. Free, in your browser.

Open LetX Free