If you have a few years of experience in Computer Science or research, and you’re interested in sharing that experience with the community, have a look at our Contribution Guidelines.

## 1. Introduction

In this tutorial, we’ll explain how to include .pdf files in LaTeX documents.

We can include .pdf figures using the graphicx package and the \includegraphics command. However, sometimes, we need to include a range of pages from an existing PDF in a new LaTeX document.

## 2. Package pdfpages

The package pdfpages offers precisely such functionalities:

\usepackage{pdfpages}

It requires the following packages: atbegshi, pdflscape, graphicx, ifthen, and calc. These are available in all standard LaTeX distributions.

To use it, we declare pdfpages in the preamble, and thus any missing packages are automatically loaded so we don’t need to load them explicitly.

The package pdfpages runs on pdflatex, xelatex, and lualatex engines.

## 3. The \includepdf Command

The package offers the command \includepdf for including pages from an existing PDF. Its syntax is:

\includepdf[options]{filename}

There, options is a comma-separated list of key=value pairs, each denoting a specific option of the command. The filename shouldn’t have blank spaces, otherwise, the inclusion will fail.

We explain the main options to \includepdf in the following subsections.

### 3.1. Option pages

The option pages specifies which pages to include. We can specify them as a list, e.g., pages={3,4,5, 7, 11}.

However, consecutive pages can be specified by their start and end: pages={3-5, 7, 11}.

To insert an empty page, we add {}, e.g., pages={3-5, 7, {}, 11}. That will insert a blank page between the seventh and the eleventh pages of the specified PDF.

Let’s say that we have a PDF named alice_in_wonderland.pdf and that we want to include its third and fourth pages:

\documentclass{article}
\usepackage{lipsum}
\usepackage{pdfpages}
\begin{document}
{\raggedright
\lipsum[1]
\includepdf[pages={3-4}]{alice_in_wonderland.pdf}
\lipsum[2]
}
\end{document}


The lipsum package generates a pseudo-Latin text for test purposes. We can see the output includes two pages from alice_in_wonderland.pdf, which we’ve set in a different font to distinguish them from the main text:

### 3.2. Options landscape and angle

To rotate the sheet of paper by 90º, we set landscape=true. This only affects the sheet and not the inserted pages.

To rotate the included pages, we use the option angle. For instance, rotating by 45º:

\includepdf[angle=45,pages={3}]{alice_in_wonderland.pdf}

gives us this result:

The default values are landscape=false and angle=0.

### 3.3. Options nup,delta,scale, and offset

The option nup lets us place multiple pages on each sheet of paper. Its syntax is: nup=xnupxynup. Here, xnup and ynup designate the number of inserted pages in the horizontal and vertical directions on each sheet of paper. The default is nup=1×1, i.e, an included page per sheet.

On the other hand, delta controls the horizontal and vertical spacing between the inserted pages (when including multiple pages per sheet). The argument is two-dimensional:

delta = xdelta ydelta

For example, delta=-1.75in -2.0in, reduces the space between the inserted pages by 1.75in and 2in in the horizontal and vertical directions.

The option offset lets us translate the origin of the inserted pages. It’s a two-dimensional option, so we set the offset by specifying the horizontal and vertical offsets: offset=xoffset yoffset. We can make them positive or negative. The default offsets are zeroes.

Finally, scale lets us resize the pages we include.

Here’s an example of using all four options:

\lipsum[1-2]

\includepdf[scale=0.65, nup=3x2, pages={3-8},
offset=-0.25in -0.25in,
delta=-1.75in -2.00in]{alice_in_wonderland.pdf}

\lipsum[3]


Here’s the result we get:

The nup=3×2 specification means that we would like the alice_in_wonderland.pdf pages to be arranged in 3 columns of 2 rows. We scale the included pages by 65% and set the offsets from the edgesof the page to -0.25in. Further, we adjust the spaces between the included pages. Usually, we’ll need some experimentation to set the scale, offset, and delta correctly.

### 3.4. Option reflect

This option lets us reflect the included pages. To do that, we set reflect=true. The default is reflect=false.

Here’s an example:

\lipsum[1]

\includepdf[scale=0.65,nup=2x2,
reflect,pages={3-6},
offset=-0.25in -0.25in,
delta=-2.0in -3.00in]{alice_in_wonderland.pdf}

\lipsum[2]


This is the result:

As we see, the inserted pages were reflected around their middles.

## 4. Coloring the Included Pages

Sometimes, we want to color the included pages to make them appear different. We can do that by using \pagecolor{}.

However, the \pagecolor{<color>} command must come before the \usepackage{pdfpages} declaration for this to work:

\documentclass{article}
\usepackage{lipsum}
\usepackage{xcolor}
\pagecolor{white}
\usepackage{pdfpages}
\begin{document}
{
\raggedright

\lipsum[2]

\newpage{
\pagecolor{olive}
\includepdf[pages={3}]{alice_in_wonderland.pdf}
}

\pagecolor{white}
\lipsum[3]
}
\end{document}


Here’s the output:

We can change the color later (as we did in the example, from white to olive), but the first \pagecolor command must come before \usepackage{pdfpages}.

## 5. Conclusion

In this article, we talked about importing pages from an existing .pdf file into a LaTeX document. We used the pdfpages package for this purpose. It can include multiple pages and arrange them in various ways.

If you have a few years of experience in Computer Science or research, and you’re interested in sharing that experience with the community, have a look at our Contribution Guidelines.