Escribes \includepdf{paper.pdf} y solo entra una página. Ese es el primer escalón con el que todo el mundo tropieza usando el pdfpages de LaTeX, y el motivo es que la opción vale por omisión pages=1: solo la página uno. Medido: un PDF de cinco páginas insertado sin opciones produjo exactamente una página de salida. Para llevártelas todas, escribe pages=- (el mismo PDF dio entonces cinco). Aprendido ese único carácter, se abre el resto de pdfpages: el paquete es de Andreas Matthias, y la copia incluida en TeX Live 2024 es la v0.5y, del 2024/01/21. Anteponer una portada, empalmar PDF por capítulos en una tesis, disponer diapositivas 2×2 para un dosier, estampar DRAFT en cada página, añadir entradas a los marcadores y al índice: esta página recorre todo eso compilando sobre la marcha.
Cómo se usa \includepdf y en qué se diferencia de \includegraphics
Carga \usepackage{pdfpages} en el preámbulo y llama a \includepdf[…]{archivo} en el cuerpo. La diferencia es que trabaja hoja a hoja. \includegraphics mete el PDF en el flujo del texto como una imagen, así que todo lo que supere el bloque de texto se desborda y siguen aplicándose los márgenes del documento. \includepdf abre una hoja nueva y escala la página de origen automáticamente para alojarla. Medido: un PDF creado en A5 (419,5 x 595,3pt) insertado en un documento tamaño carta salió en hojas carta de 612 x 792pt: lo que se escaló fue la página de origen, no el papel. El nombre de archivo no debe contener espacios.
Internamente \includepdf llama al \includegraphics de graphicx, así que cualquier opción que pdfpages no interprete por sí mismo —trim, clip, scale, angle y demás— se le reenvía tal cual. Para recortar cabecera y pie de las páginas que importas, escribe \includepdf[pages=-, trim=0 2cm 0 2cm, clip]{paper.pdf}. Para detener el escalado automático está noautoscale, y para desplazar la página insertada offset, que toma dos dimensiones.
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
% body text ...
\includepdf[pages=-]{cover.pdf}
% ... body text continues
\end{document}Cómo escribir la opción pages: todas las páginas, orden inverso, hojas en blanco
La opción pages enumera, separadas por comas, las páginas a insertar y su orden. Un intervalo se escribe m-n; sin m significa la primera página, sin n la última. Así que pages=- se lee «de la primera a la última». La página final también puede nombrarse con la palabra clave last, válida solo dentro de un intervalo. Lo interesante es el orden: pages=last-1 inserta el archivo al revés, y medido, un PDF de ocho páginas salió de PAGE 8 a PAGE 1.
El otro truco que conviene conocer es el {} vacío. Un {} en la lista produce una hoja en blanco en ese punto. pages={1,{},2-21} da portada, página en blanco y luego las páginas 1–20 del cuerpo. Medido, pages={1,{},2} produjo tres páginas cuyo texto extraído solo contenía PAGE 1 y PAGE 2: la del medio estaba efectivamente en blanco. Así se consigue que cada capítulo de una tesis a doble cara empiece en página derecha.
% cover, then one blank leaf, then body pages 1-20
\includepdf[pages={1,{},2-21}]{thesis-cover.pdf}
% every page, in reverse order
\includepdf[pages=last-1]{scan.pdf}
% a hand-picked selection, in this order
\includepdf[pages={3,1,4,1,5}]{notes.pdf}| Lo que escribes | Páginas insertadas |
|---|---|
(omitted) | solo la página 1: el valor por omisión es pages=1 |
pages=- | todas las páginas, de la primera a la última |
pages={2-8} | las páginas 2 a 8 |
pages={1,3,5} | solo las páginas 1, 3 y 5, en ese orden |
pages={3,{},15} | página 3, una hoja en blanco, página 15 |
pages=last-1 | todas las páginas al revés; last solo vale dentro de un intervalo |
pages={1-3,5,{},7} | intervalos, páginas sueltas y blancos pueden mezclarse libremente |
Un dosier 2x2 con nup, y landscape escribe un /Rotate
nup=ancho x alto dispone varias páginas lógicas en una sola hoja. Medido, un PDF de ocho diapositivas importado con nup=2x2 produjo dos hojas, y nup=2x1, landscape produjo cuatro. Por omisión las páginas se llenan fila a fila; column pasa al orden por columnas y columnstrict mantiene ese orden incluso en la última hoja. delta deja huecos entre las páginas (dos dimensiones, como delta=5mm 5mm) y frame enmarca cada una.
landscape gira la hoja, no las páginas colocadas sobre ella; para girar las páginas mismas, usa angle=90. Lo interesante es que ese landscape escribe un /Rotate 90 en el PDF. Inspecciona un archivo construido con nup=2x1, landscape mediante pdfinfo -f 1 -l 1 y obtienes Page 1 rot: 90 mientras el tamaño de página sigue en 612 x 792: el visor lo gira por ti. Para suprimirlo, pon turn=false (el valor por omisión es turn=true). El paquete pdflscape usa el mismo mecanismo; la página sobre tablas más anchas que el bloque de texto los compara en detalle.
% four slides per sheet, boxed, with a gap between them
\includepdf[pages=-, nup=2x2, frame, delta=5mm 5mm]{slides.pdf}
% two pages side by side on a landscape sheet
\includepdf[pages=-, nup=2x1, landscape]{report.pdf}fitpaper: adaptar la hoja al PDF de origen
Por omisión la página de origen se escala a tu papel; fitpaper=true invierte eso y ajusta el tamaño de la hoja al PDF de origen. Medido, un PDF A5 de ocho páginas insertado en un documento tamaño carta con fitpaper=true dio páginas de salida de 419,527 x 595,275pt: el A5 original, intacto. Úsalo con escaneos, a los que el escalado perjudicaría, y con formularios de entrega cuya geometría de página ya está fijada.
Hay herramientas para archivos cuyas páginas no tienen todas el mismo tamaño. Por omisión, la primera página insertada hace de plantilla y todas las posteriores se escalan para caber dentro de su contorno. Para designar otra, usa pagetemplate=⟨número de página⟩; para dar el tamaño directamente, templatesize={⟨ancho⟩}{⟨alto⟩}, algo mayor de lo deseado para esquivar errores de redondeo. Una página apaisada que llega a una plantilla vertical se reduce por omisión, pero rotateoversize=true la gira para ajustarla. Y si quieres imprimir a dos y cortar después la pila en dos copias, doublepages inserta cada página dos veces.
| Opción | Qué hace (valor por omisión) |
|---|---|
nup | disponer varias páginas en una hoja; nup=2x2 es 2 a lo ancho × 2 a lo alto. Por omisión 1x1 |
frame | enmarcar cada página lógica con una regla de grosor \fboxrule. Por omisión false |
delta | hueco entre páginas dispuestas; dos dimensiones separadas por un espacio. Por omisión 0 0 |
landscape | poner la hoja apaisada y escribir /Rotate 90 en el PDF. Por omisión false |
turn | si el visor muestra giradas las páginas apaisadas. Por omisión true |
scale | un factor de escala que se pasa a \includegraphics; combínalo con noautoscale para control manual |
fitpaper | ajustar el tamaño de la hoja al del documento insertado. Por omisión false |
offset | desplazar el origen de las páginas insertadas; dos dimensiones. Por omisión 0 0 |
pagecommand | código LaTeX que se ejecuta en cada página insertada. Por omisión \thispagestyle{empty} |
picturecommand | comandos ejecutados en un picture cuyo origen es la esquina inferior izquierda. Por omisión vacío |
link | convertir las páginas insertadas en destinos llamados ⟨nombre de archivo⟩.⟨número de página⟩. Por omisión false; renombra con linkname |
Recuperar los números de página y estampar DRAFT: pagecommand y picturecommand
Cuando quieras que los números de página de tu documento se impriman sobre las páginas importadas, recurre a pagecommand. La opción recibe código LaTeX que se ejecuta en cada página insertada, y pdfpages.sty define su valor por omisión como \thispagestyle{empty}: de ahí que las páginas importadas lleguen sin folio ni titulillo. Cámbialo por pagecommand={\thispagestyle{plain}} y tus propios números aparecen encima.
Aquí hay una trampa: sobrescribir pagecommand para tus propios fines elimina de paso el \thispagestyle{empty} por omisión. Medido, un documento que pasaba a pagecommand únicamente código de marca de agua imprimió los números 1, 2, 3… sobre las páginas importadas, sin quererlo. Si no los quieres, antepón \thispagestyle{empty} a tu propio código.
Para el estampado en sí hay un gancho dedicado. picturecommand recibe comandos que se ejecutan dentro de un entorno picture cuyo origen es la esquina inferior izquierda de cada página, un origen que no se mueve ni siquiera cuando landscape gira la página. Medido, una importación de ocho páginas con picturecommand={\put(30,30){\Large CONFIDENTIAL}} salió de pdftotext como PAGE 1 CONFIDENTIAL PAGE 2 CONFIDENTIAL …, estampada en todas. Para estampar solo la primera, usa picturecommand*.
% your own page numbers on the imported pages
\includepdf[pages=-, pagecommand={\thispagestyle{plain}}]{paper.pdf}
% stamp every imported page; the picture origin is its lower-left corner
\includepdf[pages=-,
picturecommand={\put(30,30){\Large CONFIDENTIAL}}]{paper.pdf}
% ...and picturecommand* would stamp only the first inserted pageMontar una tesis a partir de PDF por capítulos: includepdfmerge y addtotoc
El comando que empalma PDF compuestos por separado es \includepdfmerge. Su argumento es una secuencia «nombre de archivo, especificación de páginas, nombre de archivo, especificación de páginas, …», donde la especificación usa la misma sintaxis que pages; si se omite, solo se toma la primera página de ese archivo. Medido, \includepdfmerge{a.pdf,1-2,b.pdf,3} produjo tres páginas con PAGE 1, PAGE 2, SOURCE PAGE 3. Si prefieres no repetir las mismas opciones, \includepdfset{…} fija valores por omisión para todas, y las opciones escritas en un \includepdf concreto las sobrescriben.
Un PDF insertado no aparece por sí solo ni en el índice ni en los marcadores. addtotoc lo resuelve; toma cinco argumentos separados por comas: addtotoc={⟨número de página⟩,⟨section⟩,⟨nivel⟩,⟨título⟩,⟨etiqueta⟩}. El número de página cuenta dentro de las páginas insertadas, section es un nombre de comando de sección, el nivel es su profundidad como número, el título es la cadena que se imprime en el índice y la etiqueta es un nombre al que pueden apuntar \ref y \pageref. El orden de los cinco no debe alterarse.
Junto con hyperref, esa única opción hace tres trabajos a la vez. Medido: con hyperref cargado, addtotoc={1,section,1,Imported paper,sec:paper} escribió \contentsline {section}{\numberline {2}\ignorespaces Imported paper}{2} en el .toc, produjo \BOOKMARK [1][-]{section.2}{Imported paper}{} en el .out e hizo que \ref{sec:paper} y \pageref{sec:paper} se resolvieran correctamente desde el cuerpo. Una entrada de índice, un marcador de PDF y una referencia cruzada funcional, todo de una línea. Para los índices de figuras o tablas está addtolist.
\documentclass{article}
\usepackage{hyperref}
\usepackage{pdfpages} % load pdfpages after hyperref
\begin{document}
\tableofcontents
\section{Front matter}
% one contents entry, one PDF bookmark, one \ref target
\includepdf[pages=-,
pagecommand={\thispagestyle{plain}},
addtotoc={1,section,1,Imported paper,sec:paper}]{paper.pdf}
\section{After}
See \ref{sec:paper} on page \pageref{sec:paper}.
% assemble a thesis from separately typeset parts
\includepdfmerge{frontmatter.pdf, -, chap1.pdf, -, chap2.pdf, -}
\end{document}El orden que produce signature=8: 8, 1, 2, 7, 6, 3, 4, 5
Para hacer un cuadernillo grapado a caballete hay que reordenar las páginas de modo que queden bien una vez plegadas. Da a la opción signature de pdfpages un múltiplo de cuatro y agrupará las páginas en cuadernillos de ese tamaño, imponiéndolas automáticamente con nup=1x2 o nup=2x1, según la orientación. Medido: un PDF de ocho páginas con signature=8, landscape produjo cuatro caras, y el orden extraído fue PAGE 8, PAGE 1, PAGE 2, PAGE 7, PAGE 6, PAGE 3, PAGE 4, PAGE 5. Imprímelo a doble cara en dos hojas, apílalas y dóblalas una vez: las páginas se abren en el orden 1 a 8.
Ojo: pages=-, nup=1x2, landscape no reordena absolutamente nada. Se limita a poner dos páginas una al lado de otra; al plegarlo, el orden queda mal. Para cuadernillos hay que usar signature. Para una imposición más elaborada —varios cuadernillos, compensación de arrastre, marcas de corte— TeX Live incluye además el paquete dedicado booklet.
% a saddle-stitched booklet in signatures of eight pages
\includepdf[pages=-, signature=8, landscape]{booklet-doc.pdf}Importar pierde los enlaces: pax y la opción link
\includepdf copia solo la apariencia de cada página. Los enlaces dentro del PDF de origen dejan de funcionar, y el manual de pdfpages es explícito en que no se pierden solo los enlaces sino todo tipo de anotación PDF. Para conservar los enlaces originales, combínalo con pax (Heiko Oberdiek), que extrae las anotaciones y las vuelve a colocar.
En sentido inverso, pdfpages también puede crear sus propios destinos de enlace. Pasa link=true y cada página insertada se convierte en un destino llamado ⟨nombre de archivo⟩.⟨número de página⟩, de modo que \hyperlink{paper.pdf.3}{…} en tu texto salta a la página importada 3. linkname=mylink cambia el nombre base, y linkfilename, linktodoc, linkfit y newwindow se ocupan de los enlaces a archivos externos. Las opciones thread y threadname, para hilos de artículo, pertenecen a la misma familia.
Motores y controladores: cuando pLaTeX y dvipdfmx dan páginas en blanco
Los motores que enumera el manual de pdfpages son pdfTeX, VTeX, XeTeX, LuaTeX y pTeX, así que funciona bajo pdfLaTeX, LuaLaTeX, XeLaTeX y también (up)pLaTeX. Eso sí, presupone un motor que escriba PDF directamente: en una ruta que pasa por DVI el PDF no puede importarse y en su lugar se insertan páginas en blanco. En la configuración pLaTeX más dvipdfmx habitual en el ámbito japonés, importar el PDF es trabajo de dvipdfmx, así que hay que nombrar correctamente el controlador de gráficos. La forma que recomienda el manual es pasar dvipdfmx como opción de clase.
% the driver the pdfpages manual recommends for the platex route
\documentclass[dvipdfmx]{article}
\usepackage{pdfpages}
% ...or state it explicitly on graphicx
% \usepackage[dvipdfmx]{graphicx}Esa ruta tiene otra manía digna de conocerse. pdfpages llama al programa externo extractbb para averiguar cuántas páginas tiene el PDF importado, pero si ya existe un archivo .xbb correspondiente, lo usa en lugar de llamar a extractbb. Sustituye el PDF de origen y deja un .xbb obsoleto y el recuento de páginas dejará de coincidir, con lo que la inserción se desbarata; regenera el .xbb cada vez que cambie el PDF. Una última trampa, para documentos con fondo de página: el primer \pagecolor debe ir antes de \usepackage{pdfpages}.